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
3cb14ce5
Commit
3cb14ce5
authored
Feb 08, 2023
by
Tien Thinh NGUYEN
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Code cleanup for Registration Reject/Accept/Complete
parent
316e6a9a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
117 additions
and
71 deletions
+117
-71
src/nas/msgs/RegistrationAccept.cpp
src/nas/msgs/RegistrationAccept.cpp
+10
-7
src/nas/msgs/RegistrationAccept.hpp
src/nas/msgs/RegistrationAccept.hpp
+6
-3
src/nas/msgs/RegistrationComplete.hpp
src/nas/msgs/RegistrationComplete.hpp
+1
-1
src/nas/msgs/RegistrationReject.cpp
src/nas/msgs/RegistrationReject.cpp
+91
-53
src/nas/msgs/RegistrationReject.hpp
src/nas/msgs/RegistrationReject.hpp
+9
-7
No files found.
src/nas/msgs/RegistrationAccept.cpp
View file @
3cb14ce5
...
...
@@ -105,7 +105,7 @@ void RegistrationAccept::SetSuciSupiFormatImsi(
void
RegistrationAccept
::
Set5gGuti
(
const
std
::
string
&
mcc
,
const
std
::
string
&
mnc
,
const
std
::
string
&
amf_region_id
,
const
std
::
string
&
amf_set_id
,
const
std
::
string
&
amf_pointer
,
const
uint32_t
&
tmsi
)
{
const
std
::
string
&
amf_pointer
,
uint32_t
tmsi
)
{
_5GSMobileIdentity
ie_5g_guti_tmp
=
{};
int
regionId
=
fromString
<
int
>
(
amf_region_id
);
int
setId
=
fromString
<
int
>
(
amf_set_id
);
...
...
@@ -225,7 +225,7 @@ void RegistrationAccept::SetSorTransparentContainer(
//------------------------------------------------------------------------------
void
RegistrationAccept
::
SetEapMessage
(
const
bstring
&
eap
)
{
ie_eap_message
=
std
::
make_optional
<
EapMessage
>
(
0x78
,
eap
);
ie_eap_message
=
std
::
make_optional
<
EapMessage
>
(
kIeiEapMessage
,
eap
);
}
//------------------------------------------------------------------------------
...
...
@@ -259,17 +259,20 @@ void RegistrationAccept::SetExtendedDrxParameters(
//------------------------------------------------------------------------------
void
RegistrationAccept
::
SetT3447Value
(
uint8_t
unit
,
uint8_t
value
)
{
ie_t3447_value
=
std
::
make_optional
<
GprsTimer3
>
(
0x6C
,
unit
,
value
);
ie_t3447_value
=
std
::
make_optional
<
GprsTimer3
>
(
kIeiGprsTimer3T3447
,
unit
,
value
);
}
//------------------------------------------------------------------------------
void
RegistrationAccept
::
SetT3448Value
(
uint8_t
unit
,
uint8_t
value
)
{
ie_t3448_value
=
std
::
make_optional
<
GprsTimer3
>
(
0x6B
,
unit
,
value
);
ie_t3448_value
=
std
::
make_optional
<
GprsTimer3
>
(
kIeiGprsTimer3T3448
,
unit
,
value
);
}
//------------------------------------------------------------------------------
void
RegistrationAccept
::
SetT3324Value
(
uint8_t
unit
,
uint8_t
value
)
{
ie_t3324_value
=
std
::
make_optional
<
GprsTimer3
>
(
0x6A
,
unit
,
value
);
ie_t3324_value
=
std
::
make_optional
<
GprsTimer3
>
(
kIeiGprsTimer3T3324
,
unit
,
value
);
}
//------------------------------------------------------------------------------
...
...
@@ -280,11 +283,11 @@ void RegistrationAccept::SetUeRadioCapabilityId(const bstring& value) {
//------------------------------------------------------------------------------
void
RegistrationAccept
::
SetPendingNssai
(
const
std
::
vector
<
struct
SNSSAI_s
>&
nssai
)
{
ie_pending_nssai
=
std
::
make_optional
<
NSSAI
>
(
0x39
,
nssai
);
ie_pending_nssai
=
std
::
make_optional
<
NSSAI
>
(
kIeiNSSAIPending
,
nssai
);
}
//------------------------------------------------------------------------------
void
RegistrationAccept
::
s
etTaiList
(
const
std
::
vector
<
p_tai_t
>&
tai_list
)
{
void
RegistrationAccept
::
S
etTaiList
(
const
std
::
vector
<
p_tai_t
>&
tai_list
)
{
ie_tai_list
=
std
::
make_optional
<
_5GSTrackingAreaIdList
>
(
tai_list
);
}
...
...
src/nas/msgs/RegistrationAccept.hpp
View file @
3cb14ce5
...
...
@@ -33,7 +33,7 @@ class RegistrationAccept : public NasMmPlainHeader {
void
SetHeader
(
uint8_t
security_header_type
);
void
GetSecurityHeaderType
(
uint8_t
security_header_type
);
// TODO
bool
v
erifyHeader
();
// TODO
bool
V
erifyHeader
();
// TODO
int
Encode
(
uint8_t
*
buf
,
int
len
);
int
Decode
(
uint8_t
*
buf
,
int
len
);
...
...
@@ -54,7 +54,7 @@ class RegistrationAccept : public NasMmPlainHeader {
void
Set5gGuti
(
const
std
::
string
&
mcc
,
const
std
::
string
&
mnc
,
const
std
::
string
&
amf_region_id
,
const
std
::
string
&
amf_set_id
,
const
std
::
string
&
amf_pointer
,
const
uint32_t
&
tmsi
);
const
std
::
string
&
amf_pointer
,
uint32_t
tmsi
);
void
SetImeiImeisv
();
// TODO:
void
Set5gSTmsi
();
// TODO:
// TODO: Get
...
...
@@ -63,12 +63,15 @@ class RegistrationAccept : public NasMmPlainHeader {
void
SetEquivalentPlmns
(
const
std
::
vector
<
nas_plmn_t
>&
list
);
// TODO: Get
void
setTaiList
(
const
std
::
vector
<
p_tai_t
>&
tai_list
);
void
SetTaiList
(
const
std
::
vector
<
p_tai_t
>&
tai_list
);
// TODO: Get
void
SetAllowedNssai
(
const
std
::
vector
<
struct
SNSSAI_s
>&
nssai
);
// TODO: Get
void
SetRejectedNssai
(
const
std
::
vector
<
Rejected_SNSSAI
>&
nssai
);
// TODO: Get
void
SetConfiguredNssai
(
const
std
::
vector
<
struct
SNSSAI_s
>&
nssai
);
// TODO: Get
...
...
src/nas/msgs/RegistrationComplete.hpp
View file @
3cb14ce5
...
...
@@ -41,7 +41,7 @@ class RegistrationComplete {
public:
NasMmPlainHeader
*
plain_header
;
SorTransparentContainer
*
ie_sor_transparent_container
;
SorTransparentContainer
*
ie_sor_transparent_container
;
// Optional
};
}
// namespace nas
...
...
src/nas/msgs/RegistrationReject.cpp
View file @
3cb14ce5
...
...
@@ -30,8 +30,8 @@ using namespace nas;
RegistrationReject
::
RegistrationReject
()
:
NasMmPlainHeader
(
EPD_5GS_MM_MSG
,
REGISTRATION_REJECT
)
{
Logger
::
nas_mm
().
debug
(
"Initiating RegistrationReject"
);
ie_
T
3346_value
=
std
::
nullopt
;
ie_
T
3502_value
=
std
::
nullopt
;
ie_
t
3346_value
=
std
::
nullopt
;
ie_
t
3502_value
=
std
::
nullopt
;
ie_eap_message
=
std
::
nullopt
;
ie_rejected_nssai
=
std
::
nullopt
;
}
...
...
@@ -50,17 +50,17 @@ void RegistrationReject::Set5gmmCause(uint8_t value) {
}
//------------------------------------------------------------------------------
void
RegistrationReject
::
setGPRS_Timer_2_
3346
(
uint8_t
value
)
{
ie_
T
3346_value
=
std
::
make_optional
<
GprsTimer2
>
(
kT3346Value
,
value
);
void
RegistrationReject
::
SetT
3346
(
uint8_t
value
)
{
ie_
t
3346_value
=
std
::
make_optional
<
GprsTimer2
>
(
kT3346Value
,
value
);
}
//------------------------------------------------------------------------------
void
RegistrationReject
::
setGPRS_Timer_2_
3502
(
uint8_t
value
)
{
ie_
T
3502_value
=
std
::
make_optional
<
GprsTimer2
>
(
kT3502Value
,
value
);
void
RegistrationReject
::
SetT
3502
(
uint8_t
value
)
{
ie_
t
3502_value
=
std
::
make_optional
<
GprsTimer2
>
(
kT3502Value
,
value
);
}
//------------------------------------------------------------------------------
void
RegistrationReject
::
SetEapMessage
(
bstring
eap
)
{
void
RegistrationReject
::
SetEapMessage
(
const
bstring
&
eap
)
{
ie_eap_message
=
std
::
make_optional
<
EapMessage
>
(
kIeiEapMessage
,
eap
);
}
...
...
@@ -85,53 +85,76 @@ int RegistrationReject::Encode(uint8_t* buf, int len) {
encoded_size
+=
encoded_ie_size
;
// 5GMM Cause
if
(
int
size
=
ie_5gmm_cause
.
Encode
(
buf
+
encoded_size
,
len
-
encoded_size
))
{
int
size
=
ie_5gmm_cause
.
Encode
(
buf
+
encoded_size
,
len
-
encoded_size
);
if
(
size
!=
KEncodeDecodeError
)
{
encoded_size
+=
size
;
}
else
{
Logger
::
nas_mm
().
error
(
"Encoding ie_5gmm_cause error"
);
Logger
::
nas_mm
().
error
(
"Encoding %s error"
,
_5gmmCause
::
GetIeName
().
c_str
());
return
KEncodeDecodeError
;
}
if
(
!
ie_T3346_value
.
has_value
())
{
Logger
::
nas_mm
().
warn
(
"IE ie_T3346_value is not available"
);
// Timer 3346
if
(
!
ie_t3346_value
.
has_value
())
{
Logger
::
nas_mm
().
debug
(
"IE %s is not available"
,
GprsTimer2
::
GetIeName
().
c_str
());
}
else
{
if
(
int
size
=
ie_T3346_value
.
value
().
Encode
(
buf
+
encoded_size
,
len
-
encoded_size
))
{
size
=
ie_t3346_value
.
value
().
Encode
(
buf
+
encoded_size
,
len
-
encoded_size
);
if
(
size
!=
KEncodeDecodeError
)
{
encoded_size
+=
size
;
}
else
{
Logger
::
nas_mm
().
error
(
"Encoding ie_T3346_value error"
);
return
0
;
Logger
::
nas_mm
().
error
(
"Encoding %s error"
,
GprsTimer2
::
GetIeName
().
c_str
());
return
KEncodeDecodeError
;
}
}
if
(
!
ie_T3502_value
.
has_value
())
{
Logger
::
nas_mm
().
warn
(
"IE ie_T3502_value is not available"
);
// Timer T3502
if
(
!
ie_t3502_value
.
has_value
())
{
Logger
::
nas_mm
().
debug
(
"IE %s is not available"
,
GprsTimer2
::
GetIeName
().
c_str
());
}
else
{
if
(
int
size
=
ie_T3502_value
.
value
().
Encode
(
buf
+
encoded_size
,
len
-
encoded_size
))
{
size
=
ie_t3502_value
.
value
().
Encode
(
buf
+
encoded_size
,
len
-
encoded_size
);
if
(
size
!=
KEncodeDecodeError
)
{
encoded_size
+=
size
;
}
else
{
Logger
::
nas_mm
().
error
(
"Encoding ie_T3502_value error"
);
return
0
;
Logger
::
nas_mm
().
error
(
"Encoding %s error"
,
GprsTimer2
::
GetIeName
().
c_str
());
return
KEncodeDecodeError
;
}
}
// EAP Message
if
(
!
ie_eap_message
.
has_value
())
{
Logger
::
nas_mm
().
warn
(
"IE ie_eap_message is not available"
);
Logger
::
nas_mm
().
debug
(
"IE %s is not available"
,
EapMessage
::
GetIeName
().
c_str
());
}
else
{
if
(
int
size
=
ie_eap_message
.
value
().
Encode
(
buf
+
encoded_size
,
len
-
encoded_size
))
{
size
=
ie_eap_message
.
value
().
Encode
(
buf
+
encoded_size
,
len
-
encoded_size
);
if
(
size
!=
KEncodeDecodeError
)
{
encoded_size
+=
size
;
}
else
{
Logger
::
nas_mm
().
error
(
"Encoding ie_eap_message error"
);
return
0
;
Logger
::
nas_mm
().
error
(
"Encoding %s error"
,
EapMessage
::
GetIeName
().
c_str
());
return
KEncodeDecodeError
;
}
}
// Rejected NSSAI
if
(
!
ie_rejected_nssai
.
has_value
())
{
Logger
::
nas_mm
().
warn
(
"IE ie_rejected_nssai is not available"
);
Logger
::
nas_mm
().
debug
(
"IE %s is not available"
,
Rejected_NSSAI
::
GetIeName
().
c_str
());
}
else
{
if
(
int
size
=
ie_rejected_nssai
.
value
().
Encode
(
buf
+
encoded_size
,
len
-
encoded_size
))
{
size
=
ie_rejected_nssai
.
value
().
Encode
(
buf
+
encoded_size
,
len
-
encoded_size
);
if
(
size
!=
KEncodeDecodeError
)
{
encoded_size
+=
size
;
}
else
{
Logger
::
nas_mm
().
error
(
"Encoding ie_rejected_nssai error"
);
Logger
::
nas_mm
().
error
(
"Encoding %s error"
,
Rejected_NSSAI
::
GetIeName
().
c_str
());
return
KEncodeDecodeError
;
}
}
Logger
::
nas_mm
().
debug
(
...
...
@@ -140,8 +163,7 @@ int RegistrationReject::Encode(uint8_t* buf, int len) {
}
//------------------------------------------------------------------------------
int
RegistrationReject
::
Decode
(
NasMmPlainHeader
*
header
,
uint8_t
*
buf
,
int
len
)
{
int
RegistrationReject
::
Decode
(
uint8_t
*
buf
,
int
len
)
{
Logger
::
nas_mm
().
debug
(
"Decoding RegistrationReject message"
);
int
decoded_size
=
0
;
int
decoded_result
=
0
;
...
...
@@ -158,48 +180,64 @@ int RegistrationReject::Decode(
decoded_size
+=
ie_5gmm_cause
.
Decode
(
buf
+
decoded_size
,
len
-
decoded_size
,
false
);
Logger
::
nas_mm
().
debug
(
"Decoded_size (%d)"
,
decoded_size
);
uint8_t
octet
=
*
(
buf
+
decoded_size
);
// Decode other IEs
uint8_t
octet
=
0x00
;
DECODE_U8_VALUE
(
buf
+
decoded_size
,
octet
);
Logger
::
nas_mm
().
debug
(
"First option IEI (0x%x)"
,
octet
);
while
((
octet
!=
0x0
))
{
Logger
::
nas_mm
().
debug
(
"IEI 0x%x"
,
octet
);
switch
(
octet
)
{
case
kT3346Value
:
{
Logger
::
nas_mm
().
debug
(
"Decoding IEI 0x5F: T3346 Value"
);
GprsTimer2
ie_T3346_value_tmp
(
kT3346Value
);
decoded_size
+=
ie_T3346_value_tmp
.
Decode
(
buf
+
decoded_size
,
len
-
decoded_size
,
true
);
ie_T3346_value
=
std
::
optional
<
GprsTimer2
>
(
ie_T3346_value_tmp
);
octet
=
*
(
buf
+
decoded_size
);
Logger
::
nas_mm
().
debug
(
"Decoding IEI 0x%x"
,
kT3346Value
);
GprsTimer2
ie_t3346_value_tmp
(
kT3346Value
);
if
((
decoded_result
=
ie_t3346_value_tmp
.
Decode
(
buf
+
decoded_size
,
len
-
decoded_size
,
true
))
==
KEncodeDecodeError
)
return
KEncodeDecodeError
;
decoded_size
+=
decoded_result
;
ie_t3346_value
=
std
::
optional
<
GprsTimer2
>
(
ie_t3346_value_tmp
);
DECODE_U8_VALUE
(
buf
+
decoded_size
,
octet
);
Logger
::
nas_mm
().
debug
(
"Next IEI (0x%x)"
,
octet
);
}
break
;
case
kT3502Value
:
{
Logger
::
nas_mm
().
debug
(
"Decoding IEI 0x16: T3502 Value"
);
GprsTimer2
ie_T3502_value_tmp
(
kT3502Value
);
decoded_size
+=
ie_T3502_value_tmp
.
Decode
(
buf
+
decoded_size
,
len
-
decoded_size
,
true
);
ie_T3502_value
=
std
::
optional
<
GprsTimer2
>
(
ie_T3502_value_tmp
);
octet
=
*
(
buf
+
decoded_size
);
Logger
::
nas_mm
().
debug
(
"Decoding IEI 0x%x"
,
kT3502Value
);
GprsTimer2
ie_t3502_value_tmp
(
kT3502Value
);
if
((
decoded_result
=
ie_t3502_value_tmp
.
Decode
(
buf
+
decoded_size
,
len
-
decoded_size
,
true
))
==
KEncodeDecodeError
)
return
KEncodeDecodeError
;
decoded_size
+=
decoded_result
;
ie_t3502_value
=
std
::
optional
<
GprsTimer2
>
(
ie_t3502_value_tmp
);
DECODE_U8_VALUE
(
buf
+
decoded_size
,
octet
);
Logger
::
nas_mm
().
debug
(
"Next IEI (0x%x)"
,
octet
);
}
break
;
case
kIeiEapMessage
:
{
Logger
::
nas_mm
().
debug
(
"Decoding IEI 0x
78: EAP Message"
);
Logger
::
nas_mm
().
debug
(
"Decoding IEI 0x
%x"
,
kIeiEapMessage
);
EapMessage
ie_eap_message_tmp
=
{};
decoded_size
+=
ie_eap_message_tmp
.
Decode
(
buf
+
decoded_size
,
len
-
decoded_size
,
true
);
if
((
decoded_result
=
ie_eap_message_tmp
.
Decode
(
buf
+
decoded_size
,
len
-
decoded_size
,
true
))
==
KEncodeDecodeError
)
return
KEncodeDecodeError
;
decoded_size
+=
decoded_result
;
ie_eap_message
=
std
::
optional
<
EapMessage
>
(
ie_eap_message_tmp
);
octet
=
*
(
buf
+
decoded_size
);
DECODE_U8_VALUE
(
buf
+
decoded_size
,
octet
);
Logger
::
nas_mm
().
debug
(
"Next IEI (0x%x)"
,
octet
);
}
break
;
case
kIeiRejectedNssaiRr
:
{
Logger
::
nas_mm
().
debug
(
"Decoding IEI 0x
69: Rejected NSSAI"
);
Logger
::
nas_mm
().
debug
(
"Decoding IEI 0x
%x"
,
kIeiRejectedNssaiRr
);
Rejected_NSSAI
ie_rejected_nssai_tmp
(
kIeiRejectedNssaiRr
);
decoded_size
+=
ie_rejected_nssai_tmp
.
Decode
(
buf
+
decoded_size
,
len
-
decoded_size
,
true
);
if
((
decoded_result
=
ie_rejected_nssai_tmp
.
Decode
(
buf
+
decoded_size
,
len
-
decoded_size
,
true
))
==
KEncodeDecodeError
)
return
KEncodeDecodeError
;
decoded_size
+=
decoded_result
;
ie_rejected_nssai
=
std
::
optional
<
Rejected_NSSAI
>
(
ie_rejected_nssai_tmp
);
octet
=
*
(
buf
+
decoded_size
);
DECODE_U8_VALUE
(
buf
+
decoded_size
,
octet
);
Logger
::
nas_mm
().
debug
(
"Next IEI (0x%x)"
,
octet
);
}
break
;
default:
{
...
...
src/nas/msgs/RegistrationReject.hpp
View file @
3cb14ce5
...
...
@@ -33,28 +33,30 @@ class RegistrationReject : public NasMmPlainHeader {
void
SetHeader
(
uint8_t
security_header_type
);
void
GetSecurityHeaderType
(
uint8_t
security_header_type
);
bool
v
erifyHeader
();
bool
V
erifyHeader
();
int
Encode
(
uint8_t
*
buf
,
int
len
);
int
Decode
(
NasMmPlainHeader
*
header
,
uint8_t
*
buf
,
int
len
);
int
Decode
(
uint8_t
*
buf
,
int
len
);
void
Set5gmmCause
(
uint8_t
value
);
// TODO: Get
void
setGPRS_Timer_2_
3346
(
uint8_t
value
);
void
SetT
3346
(
uint8_t
value
);
// TODO: Get
void
setGPRS_Timer_2_
3502
(
uint8_t
value
);
void
SetT
3502
(
uint8_t
value
);
// TOGO: Get
void
SetEapMessage
(
bstring
eap
);
void
SetEapMessage
(
const
bstring
&
eap
);
// TODO: Get
void
SetRejectedNssai
(
const
std
::
vector
<
Rejected_SNSSAI
>&
nssai
);
// TODO: Get
public:
_5gmmCause
ie_5gmm_cause
;
// Mandatory
std
::
optional
<
GprsTimer2
>
ie_
T
3346_value
;
// Optional
std
::
optional
<
GprsTimer2
>
ie_
T
3502_value
;
// Optional
std
::
optional
<
GprsTimer2
>
ie_
t
3346_value
;
// Optional
std
::
optional
<
GprsTimer2
>
ie_
t
3502_value
;
// Optional
std
::
optional
<
EapMessage
>
ie_eap_message
;
// Optional
std
::
optional
<
Rejected_NSSAI
>
ie_rejected_nssai
;
// Release 16.4.1
};
...
...
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