Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-AMF
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
1
Issues
1
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenXG
OpenXG-AMF
Commits
a478167b
Commit
a478167b
authored
Jan 10, 2023
by
Tien Thinh NGUYEN
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update NAS Message Container
parent
c1fe24fb
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
86 additions
and
50 deletions
+86
-50
src/nas/ies/NAS_Message_Container.cpp
src/nas/ies/NAS_Message_Container.cpp
+73
-37
src/nas/ies/NAS_Message_Container.hpp
src/nas/ies/NAS_Message_Container.hpp
+10
-9
src/nas/msgs/RegistrationRequest.cpp
src/nas/msgs/RegistrationRequest.cpp
+1
-2
src/nas/msgs/SecurityModeComplete.cpp
src/nas/msgs/SecurityModeComplete.cpp
+1
-1
src/nas/msgs/ServiceRequest.cpp
src/nas/msgs/ServiceRequest.cpp
+1
-1
No files found.
src/nas/ies/NAS_Message_Container.cpp
View file @
a478167b
...
...
@@ -23,66 +23,99 @@
#include "3gpp_24.501.hpp"
#include "common_defs.h"
#include "Ie_Const.hpp"
#include "logger.hpp"
using
namespace
nas
;
//------------------------------------------------------------------------------
NAS_Message_Container
::
NAS_Message_Container
(
uint8_t
iei
)
:
_value
()
{
_iei
=
iei
;
length
=
0
;
NAS_Message_Container
::
NAS_Message_Container
()
:
Type6NasIe
(
kIeiNasMessageContainer
),
_value
()
{
SetLengthIndicator
(
0
);
SetIeName
(
kNasMessageContainerIeName
);
}
//------------------------------------------------------------------------------
NAS_Message_Container
::
NAS_Message_Container
(
const
uint8_t
iei
,
bstring
value
)
{
_iei
=
iei
;
NAS_Message_Container
::
NAS_Message_Container
(
bstring
value
)
:
Type6NasIe
(
kIeiNasMessageContainer
)
{
_value
=
bstrcpy
(
value
);
length
=
blength
(
value
);
SetLengthIndicator
(
blength
(
value
));
SetIeName
(
kNasMessageContainerIeName
);
}
//------------------------------------------------------------------------------
NAS_Message_Container
::
NAS_Message_Container
()
:
_iei
(),
length
(),
_value
()
{}
//------------------------------------------------------------------------------
NAS_Message_Container
::~
NAS_Message_Container
()
{}
//------------------------------------------------------------------------------
void
NAS_Message_Container
::
setValue
(
uint8_t
iei
,
uint8_t
value
)
{
_iei
=
iei
;
//_value = value;
}
//------------------------------------------------------------------------------
void
NAS_Message_Container
::
getValue
(
bstring
&
value
)
{
void
NAS_Message_Container
::
getValue
(
bstring
&
value
)
const
{
value
=
bstrcpy
(
_value
);
}
//------------------------------------------------------------------------------
int
NAS_Message_Container
::
Encode
(
uint8_t
*
buf
,
int
len
)
{
Logger
::
nas_mm
().
debug
(
"Encoding NAS_Message_Container IEI"
);
if
(
len
<
kNasMessageContainerMinimumLength
)
{
Logger
::
nas_mm
().
debug
(
"Encoding %s"
,
GetIeName
().
c_str
());
int
ie_len
=
GetIeLength
();
if
(
len
<
ie_len
)
{
// Length of the content + IEI/Len
Logger
::
nas_mm
().
error
(
"
Buffer length is less than the minimum length of this IE (%d octet
)"
,
kNasMessageContainerMinimumLength
);
"
Size of the buffer is not enough to store this IE (IE len %d
)"
,
ie_len
);
return
KEncodeDecodeError
;
}
int
encoded_size
=
0
;
if
(
_iei
)
{
ENCODE_U8
(
buf
+
encoded_size
,
_iei
,
encoded_size
);
}
// Length
ENCODE_U16
(
buf
+
encoded_size
,
length
,
encoded_size
);
// IEI and Length (later)
int
len_pos
=
0
;
int
encoded_header_size
=
Type6NasIe
::
Encode
(
buf
+
encoded_size
,
len
,
len_pos
);
if
(
encoded_header_size
==
KEncodeDecodeError
)
return
KEncodeDecodeError
;
encoded_size
+=
encoded_header_size
;
/*
Logger::nas_mm().debug("Encoding NAS_Message_Container IEI");
if (len < kNasMessageContainerMinimumLength) {
Logger::nas_mm().error(
"Buffer length is less than the minimum length of this IE (%d octet)",
kNasMessageContainerMinimumLength);
return KEncodeDecodeError;
}
int encoded_size = 0;
if (_iei) {
ENCODE_U8(buf + encoded_size, _iei, encoded_size);
}
// Length
ENCODE_U16(buf + encoded_size, length, encoded_size);
*/
// Value
int
size
=
encode_bstring
(
_value
,
(
buf
+
encoded_size
),
len
-
encoded_size
);
encoded_size
+=
size
;
// Encode length
int
encoded_len_ie
=
0
;
ENCODE_U16
(
buf
+
len_pos
,
encoded_size
-
GetHeaderLength
(),
encoded_len_ie
);
Logger
::
nas_mm
().
debug
(
"Encoded
NAS_Message_Container (len %d)"
,
encoded_size
);
"Encoded
%s, len (%d)"
,
GetIeName
().
c_str
()
,
encoded_size
);
return
encoded_size
;
}
//------------------------------------------------------------------------------
int
NAS_Message_Container
::
Decode
(
uint8_t
*
buf
,
int
len
,
bool
is_option
)
{
int
NAS_Message_Container
::
Decode
(
uint8_t
*
buf
,
int
len
,
bool
is_iei
)
{
Logger
::
nas_mm
().
debug
(
"Decoding EPS_NAS_Message_Container"
);
int
decoded_size
=
0
;
// IEI and Length
uint16_t
ie_len
=
0
;
int
decoded_header_size
=
Type6NasIe
::
Decode
(
buf
+
decoded_size
,
len
,
is_iei
);
if
(
decoded_header_size
==
KEncodeDecodeError
)
return
KEncodeDecodeError
;
decoded_size
+=
decoded_header_size
;
ie_len
=
GetLengthIndicator
();
/*
Logger::nas_mm().debug("Decoding NAS_Message_Container");
int decoded_size = 0;
if (is_option) {
...
...
@@ -90,14 +123,17 @@ int NAS_Message_Container::Decode(uint8_t* buf, int len, bool is_option) {
}
// Length
DECODE_U16(buf + decoded_size, length, decoded_size);
*/
// Value
decode_bstring
(
&
_value
,
length
,
(
buf
+
decoded_size
),
len
-
decoded_size
);
decoded_size
+=
length
;
for
(
int
i
=
0
;
i
<
length
;
i
++
)
{
decode_bstring
(
&
_value
,
ie_len
,
(
buf
+
decoded_size
),
len
-
decoded_size
);
decoded_size
+=
ie_len
;
for
(
int
i
=
0
;
i
<
ie_len
;
i
++
)
{
Logger
::
nas_mm
().
debug
(
"Decoded NAS_Message_Container value 0x%x"
,
(
uint8_t
)
_value
->
data
[
i
]);
}
Logger
::
nas_mm
().
debug
(
"Decoded NAS_Message_Container (len %d)"
,
decoded_size
);
"Decoded
EPS_
NAS_Message_Container (len %d)"
,
decoded_size
);
return
decoded_size
;
}
src/nas/ies/NAS_Message_Container.hpp
View file @
a478167b
...
...
@@ -19,8 +19,10 @@
* contact@openairinterface.org
*/
#ifndef _NAS_Message_Container_H_
#define _NAS_Message_Container_H_
#ifndef _NAS_MESSAGE_CONTAINER_H_
#define _NAS_MESSAGE_CONTAINER_H_
#include "Type6NasIe.hpp"
#include <stdint.h>
extern
"C"
{
...
...
@@ -31,23 +33,22 @@ extern "C" {
constexpr
uint8_t
kNasMessageContainerMinimumLength
=
3
;
constexpr
uint32_t
kNasMessageContainerMaximumLength
=
65535
;
constexpr
auto
kNasMessageContainerIeName
=
"NAS Message Container"
;
namespace
nas
{
class
NAS_Message_Container
{
class
NAS_Message_Container
:
Type6NasIe
{
public:
NAS_Message_Container
();
NAS_Message_Container
(
uint8_t
iei
);
NAS_Message_Container
(
const
uint8_t
iei
,
bstring
value
);
NAS_Message_Container
(
bstring
value
);
~
NAS_Message_Container
();
void
setValue
(
uint8_t
iei
,
uint8_t
value
);
void
getValue
(
bstring
&
value
)
const
;
int
Encode
(
uint8_t
*
buf
,
int
len
);
int
Decode
(
uint8_t
*
buf
,
int
len
,
bool
is_option
);
void
getValue
(
bstring
&
value
);
private:
uint8_t
_iei
;
uint16_t
length
;
bstring
_value
;
};
...
...
src/nas/msgs/RegistrationRequest.cpp
View file @
a478167b
...
...
@@ -498,8 +498,7 @@ bool RegistrationRequest::get5GSUpdateType(
//------------------------------------------------------------------------------
void
RegistrationRequest
::
setNAS_Message_Container
(
bstring
value
)
{
ie_nas_message_container
=
std
::
make_optional
<
NAS_Message_Container
>
(
kIeiNasMessageContainer
,
value
);
ie_nas_message_container
=
std
::
make_optional
<
NAS_Message_Container
>
(
value
);
}
//------------------------------------------------------------------------------
...
...
src/nas/msgs/SecurityModeComplete.cpp
View file @
a478167b
...
...
@@ -62,7 +62,7 @@ void SecurityModeComplete::SetImeisv(IMEISV_t imeisv) {
//------------------------------------------------------------------------------
void
SecurityModeComplete
::
setNAS_Message_Container
(
bstring
value
)
{
ie_nas_message_container
=
new
NAS_Message_Container
(
0x71
,
value
);
ie_nas_message_container
=
new
NAS_Message_Container
(
value
);
}
//------------------------------------------------------------------------------
...
...
src/nas/msgs/ServiceRequest.cpp
View file @
a478167b
...
...
@@ -89,7 +89,7 @@ void ServiceRequest::setAllowed_PDU_Session_Status(uint16_t value) {
//------------------------------------------------------------------------------
void
ServiceRequest
::
setNAS_Message_Container
(
bstring
value
)
{
ie_nas_message_container
=
new
NAS_Message_Container
(
0x71
,
value
);
ie_nas_message_container
=
new
NAS_Message_Container
(
value
);
}
//------------------------------------------------------------------------------
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment