Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-SMF
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
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-SMF
Commits
3138aec2
Commit
3138aec2
authored
Apr 08, 2020
by
Tien-Thinh Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix error/clean for NAS Lib
parent
c8f9afd8
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
191 additions
and
206 deletions
+191
-206
src/common/3gpp_29.571.h
src/common/3gpp_29.571.h
+1
-1
src/nas/3gpp_24.501.h
src/nas/3gpp_24.501.h
+10
-14
src/nas/ies/DNN.c
src/nas/ies/DNN.c
+8
-5
src/nas/ies/PDUAddress.c
src/nas/ies/PDUAddress.c
+42
-41
src/nas/ies/PDUAddress.h
src/nas/ies/PDUAddress.h
+2
-1
src/nas/ies/QOSRules.c
src/nas/ies/QOSRules.c
+32
-22
src/nas/ies/QOSRules.h
src/nas/ies/QOSRules.h
+10
-6
src/nas/ies/SSCMode.c
src/nas/ies/SSCMode.c
+1
-0
src/nas/ies/SSCMode.h
src/nas/ies/SSCMode.h
+2
-1
src/nas/ies/SessionAMBR.c
src/nas/ies/SessionAMBR.c
+11
-15
src/nas/ies/SessionAMBR.h
src/nas/ies/SessionAMBR.h
+5
-4
src/nas/ies/_PDUSessionType.c
src/nas/ies/_PDUSessionType.c
+1
-1
src/nas/ies/_PDUSessionType.h
src/nas/ies/_PDUSessionType.h
+2
-1
src/nas/nas_message.c
src/nas/nas_message.c
+50
-76
src/nas/nas_message.h
src/nas/nas_message.h
+2
-2
src/nas/securityDef.h
src/nas/securityDef.h
+0
-7
src/nas/sm/msg/PDUSessionEstablishmentAccept.c
src/nas/sm/msg/PDUSessionEstablishmentAccept.c
+12
-9
No files found.
src/common/3gpp_29.571.h
View file @
3138aec2
...
...
@@ -54,7 +54,7 @@ typedef struct subscribed_default_qos_s{
enum
reflective_qos_attribute_e
{
RQOS
=
1
,
NO_RQOS
=
2
NO_RQOS
=
2
};
static
const
std
::
vector
<
std
::
string
>
reflective_qos_attribute_e2str
=
{
"ERROR"
,
"RQOS"
,
"NO_RQOS"
};
...
...
src/nas/3gpp_24.501.h
View file @
3138aec2
...
...
@@ -19,6 +19,14 @@
* contact@openairinterface.org
*/
/*
* This file contains NAS header bits format
* Refer TS24.007 TS24.501
* Auther: Puzyu Dukl
* Time:
* Email:
*/
#ifndef FILE_3GPP_24_501_H_SEEN
#define FILE_3GPP_24_501_H_SEEN
#ifdef __cplusplus
...
...
@@ -32,14 +40,6 @@ extern "C" {
#define SECURITY_HEADER_TYPE_INTEGRITY_PROTECTED_NEW 0b0011
#define SECURITY_HEADER_TYPE_INTEGRITY_PROTECTED_CYPHERED_NEW 0b0100
/*
* This file contains NAS header bits format
* Refer TS24.007 TS24.501
* Auther: Puzyu Dukl
* Time:
* Email: hr@
*/
/*Extended Protocol Discriminator (EPD)*/
//8 bits
...
...
@@ -55,13 +55,11 @@ extern "C" {
#define IntegrityProtectedWithNew5GNASSecurityContext 0b0011
#define IntegrityProtectedAndCipheredWithNew5GNASSecurityContext 0b0100
#define SpareHalfOctet 0b0000
/*填充用*/
#define SpareHalfOctet 0b0000
/* Message Type for Mobility Management */
// 0b01******
/* 5GS Mobility Management Messages */
#define REGISTRATION_REQUEST 0b01000001
#define REGISTRATION_ACCEPT 0b01000010
#define REGISTRATION_COMPLETE 0b01000011
...
...
@@ -96,7 +94,6 @@ extern "C" {
/* Message Type for Session Management */
//0b11******
//5GS Session Management Messages
//TODO should be updated with enum
#define PDU_SESSION_MESSAGE_TYPE_UNKNOWN 0b00000000
...
...
@@ -136,7 +133,6 @@ enum request_type_e {
/*
* Message Authentication Code
* 木得定义
* The message authentication code (MAC) information element contains
* the integrity protection information for the message.
*/
...
...
@@ -177,7 +173,7 @@ enum request_type_e {
* 5GMM cause types
*/
#define IIEGAL_UE
0b00000011
#define IIEGAL_UE
0b00000011
#define PEI_NOT_ACCEPTED 0b00000101
#define IIEGAL_ME 0b00000110
#define FGS_SERVICES_NOT_ALLOWED 0b00000111
...
...
src/nas/ies/DNN.c
View file @
3138aec2
...
...
@@ -9,25 +9,28 @@
int
encode_dnn
(
DNN
dnn
,
uint8_t
iei
,
uint8_t
*
buffer
,
uint32_t
len
)
{
uint8_t
*
lenPtr
=
NULL
;
uint8_t
len_pos
=
0
;
uint32_t
encoded
=
0
;
int
encode_result
=
0
;
CHECK_PDU_POINTER_AND_LENGTH_ENCODER
(
buffer
,((
iei
>
0
)
?
DNN_MINIMUM_LENGTH_TLV
:
DNN_MINIMUM_LENGTH_TLV
-
1
)
,
len
);
if
(
iei
>
0
)
if
(
iei
>
0
)
{
*
buffer
=
iei
;
*
buffer
=
iei
;
encoded
++
;
}
lenPtr
=
(
buffer
+
encoded
);
encoded
++
;
encoded
++
;
//ENCODE_U8(buffer + encoded, dnn.length, encoded);
len_pos
=
encoded
;
if
((
encode_result
=
encode_bstring
(
dnn
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
//加密,实体,首地址,长度
if
((
encode_result
=
encode_bstring
(
dnn
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
return
encode_result
;
else
encoded
+=
encode_result
;
*
lenPtr
=
encoded
-
1
-
((
iei
>
0
)
?
1
:
0
);
//set length
*
(
uint8_t
*
)(
lenPtr
)
=
encoded
-
len_pos
;
return
encoded
;
}
...
...
src/nas/ies/PDUAddress.c
View file @
3138aec2
...
...
@@ -8,59 +8,60 @@
int
encode_pdu_address
(
PDUAddress
pduaddress
,
uint8_t
iei
,
uint8_t
*
buffer
,
uint32_t
len
)
{
uint8_t
*
lenPtr
=
NULL
;
uint32_t
encoded
=
0
;
int
encode_result
=
0
;
CHECK_PDU_POINTER_AND_LENGTH_ENCODER
(
buffer
,((
iei
>
0
)
?
PDU_ADDRESS_MINIMUM_LENGTH_TLV
:
PDU_ADDRESS_MINIMUM_LENGTH_TLV
-
1
)
,
len
);
uint8_t
*
lenPtr
=
NULL
;
uint32_t
encoded
=
0
;
int
encode_result
=
0
;
CHECK_PDU_POINTER_AND_LENGTH_ENCODER
(
buffer
,((
iei
>
0
)
?
PDU_ADDRESS_MINIMUM_LENGTH_TLV
:
PDU_ADDRESS_MINIMUM_LENGTH_TLV
-
1
)
,
len
);
if
(
iei
>
0
)
{
*
buffer
=
iei
;
encoded
++
;
}
lenPtr
=
(
buffer
+
encoded
);
if
(
iei
>
0
)
{
*
buffer
=
iei
;
encoded
++
;
}
lenPtr
=
buffer
+
encoded
;
encoded
++
;
//ENCODE_U8(buffer+encoded,pduaddress.length, encoded);
uint8_t
len_pos
=
encoded
;
ENCODE_U8
(
buffer
+
encoded
,(
uint8_t
)(
pduaddress
.
pdu_session_type_value
&
0x07
),
encoded
);
ENCODE_U8
(
buffer
+
encoded
,(
uint8_t
)(
pduaddress
.
pdu_session_type_value
&
0x07
),
encoded
);
if
((
encode_result
=
encode_bstring
(
pduaddress
.
pdu_address_information
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
return
encode_result
;
else
encoded
+=
encode_result
;
if
((
encode_result
=
encode_bstring
(
pduaddress
.
pdu_address_information
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
return
encode_result
;
else
encoded
+=
encode_result
;
//set length
*
(
uint8_t
*
)(
lenPtr
)
=
encoded
-
len_pos
;
*
lenPtr
=
encoded
-
1
-
((
iei
>
0
)
?
1
:
0
);
return
encoded
;
return
encoded
;
}
int
decode_pdu_address
(
PDUAddress
*
pduaddress
,
uint8_t
iei
,
uint8_t
*
buffer
,
uint32_t
len
)
{
int
decoded
=
0
;
uint8_t
ielen
=
0
;
int
decode_result
=
0
;
uint8_t
bitStream
=
0x00
;
if
(
iei
>
0
)
{
CHECK_IEI_DECODER
(
iei
,
*
buffer
);
decoded
++
;
}
ielen
=
*
(
buffer
+
decoded
);
int
decoded
=
0
;
uint8_t
ielen
=
0
;
int
decode_result
=
0
;
uint8_t
bitStream
=
0x00
;
if
(
iei
>
0
)
{
CHECK_IEI_DECODER
(
iei
,
*
buffer
);
decoded
++
;
CHECK_LENGTH_DECODER
(
len
-
decoded
,
ielen
);
}
ielen
=
*
(
buffer
+
decoded
);
decoded
++
;
CHECK_LENGTH_DECODER
(
len
-
decoded
,
ielen
);
DECODE_U8
(
buffer
+
decoded
,
bitStream
,
decoded
);
pduaddress
->
pdu_session_type_value
=
bitStream
&
0x07
;
DECODE_U8
(
buffer
+
decoded
,
bitStream
,
decoded
);
pduaddress
->
pdu_session_type_value
=
bitStream
&
0x07
;
if
((
decode_result
=
decode_bstring
(
&
pduaddress
->
pdu_address_information
,
ielen
-
1
,
buffer
+
decoded
,
len
-
decoded
))
<
0
)
return
decode_result
;
else
decoded
+=
decode_result
;
if
((
decode_result
=
decode_bstring
(
&
pduaddress
->
pdu_address_information
,
ielen
-
1
,
buffer
+
decoded
,
len
-
decoded
))
<
0
)
return
decode_result
;
else
decoded
+=
decode_result
;
return
decoded
;
return
decoded
;
}
src/nas/ies/PDUAddress.h
View file @
3138aec2
...
...
@@ -12,10 +12,11 @@
#define PDU_ADDRESS_IPV4V6 0x03
typedef
struct
{
uint8_t
length
;
uint8_t
spare
:
5
;
uint8_t
pdu_session_type_value
:
3
;
bstring
pdu_address_information
;
}
PDUAddress
;
}
__attribute__
((
__packed__
))
PDUAddress
;
int
encode_pdu_address
(
PDUAddress
pduaddress
,
uint8_t
iei
,
uint8_t
*
buffer
,
uint32_t
len
)
;
...
...
src/nas/ies/QOSRules.c
View file @
3138aec2
...
...
@@ -8,36 +8,45 @@
int
encode_qos_rules
(
QOSRules
qosrules
,
uint8_t
iei
,
uint8_t
*
buffer
,
uint32_t
len
)
{
uint8_t
*
lenqosrule
=
NULL
;
uint8_t
lenmoment
=
0
;
uint8_t
*
len_qosrule
=
NULL
;
uint8_t
*
len_qosrulesie
=
NULL
;
uint8_t
len_pos_qos_rule
=
0
;
uint8_t
bitstream
=
0
;
uint16_t
lenqosrule_16
=
0
;
uint32_t
encoded
=
0
;
int
encode_result
=
0
;
int
i
=
0
,
j
=
0
;
uint32_t
temp
=
0
;
CHECK_PDU_POINTER_AND_LENGTH_ENCODER
(
buffer
,((
iei
>
0
)
?
QOS_RULES_MINIMUM_LENGTH_TLVE
:
QOS_RULES_MINIMUM_LENGTH_LVE
),
len
);
if
(
iei
>
0
)
{
*
buffer
=
iei
;
*
buffer
=
iei
;
encoded
++
;
}
len_qosrulesie
=
buffer
+
encoded
;
encoded
+=
2
;
//ENCODE_U16(buffer + encoded, qosrules.lengthofqosrulesie, encoded);
uint8_t
len_pos_qos_rulesie
=
encoded
;
/*
*(buffer + encoded) = qosrules.lengthofqosrulesie/(1<<8);
encoded++;
*(buffer + encoded) = qosrules.lengthofqosrulesie%(1<<8);
encoded++;
*/
for
(
i
=
0
;
i
<
qosrules
.
lengthofqosrulesie
;
i
++
)
for
(
i
=
0
;
i
<
qosrules
.
lengthofqosrulesie
;
i
++
)
{
ENCODE_U8
(
buffer
+
encoded
,
qosrules
.
qosrulesie
[
i
].
qosruleidentifer
,
encoded
);
ENCODE_U8
(
buffer
+
encoded
,
qosrules
.
qosrulesie
[
i
].
qosruleidentifer
,
encoded
);
lenqosrule
=
buffer
+
encoded
;
len
_
qosrule
=
buffer
+
encoded
;
encoded
++
;
encoded
++
;
len
moment
=
encoded
;
len
_pos_qos_rule
=
encoded
;
bitstream
=
(
uint8_t
)(
qosrules
.
qosrulesie
[
i
].
ruleoperationcode
<<
5
);
bitstream
|=
(
uint8_t
)(
qosrules
.
qosrulesie
[
i
].
dqrbit
<<
4
);
...
...
@@ -46,23 +55,23 @@ int encode_qos_rules ( QOSRules qosrules, uint8_t iei, uint8_t * buffer, uint32_
if
((
bitstream
>>
5
)
==
MODIFY_EXISTING_QOS_RULE_AND_DELETE_PACKET_FILTERS
)
{
for
(
j
=
0
;
j
<
(
bitstream
&
0x0f
);
j
++
)
for
(
j
=
0
;
j
<
(
bitstream
&
0x0f
);
j
++
)
{
ENCODE_U8
(
buffer
+
encoded
,(
uint8_t
)
qosrules
.
qosrulesie
[
i
].
packetfilterlist
.
modifyanddelete
[
j
].
packetfilteridentifier
,
encoded
);
ENCODE_U8
(
buffer
+
encoded
,
(
uint8_t
)
qosrules
.
qosrulesie
[
i
].
packetfilterlist
.
modifyanddelete
[
j
].
packetfilteridentifier
,
encoded
);
}
ENCODE_U8
(
buffer
+
encoded
,
qosrules
.
qosrulesie
[
i
].
qosruleprecedence
,
encoded
);
ENCODE_U8
(
buffer
+
encoded
,(
uint8_t
)((
qosrules
.
qosrulesie
[
i
].
segregation
<<
6
)
|
(
qosrules
.
qosrulesie
[
i
].
qosflowidentifer
&
0x3f
)),
encoded
);
ENCODE_U8
(
buffer
+
encoded
,
qosrules
.
qosrulesie
[
i
].
qosruleprecedence
,
encoded
);
ENCODE_U8
(
buffer
+
encoded
,
(
uint8_t
)((
qosrules
.
qosrulesie
[
i
].
segregation
<<
6
)
|
(
qosrules
.
qosrulesie
[
i
].
qosflowidentifer
&
0x3f
)),
encoded
);
}
else
if
(((
bitstream
>>
5
)
==
CREATE_NEW_QOS_RULE
)
||
((
bitstream
>>
5
)
==
MODIFY_EXISTING_QOS_RULE_AND_ADD_PACKET_FILTERS
)
||
((
bitstream
>>
5
)
==
MODIFY_EXISTING_QOS_RULE_AND_REPLACE_ALL_PACKET_FILTERS
))
{
for
(
j
=
0
;
j
<
(
bitstream
&
0x0f
);
j
++
)
for
(
j
=
0
;
j
<
(
bitstream
&
0x0f
);
j
++
)
{
ENCODE_U8
(
buffer
+
encoded
,
(
uint8_t
)((
qosrules
.
qosrulesie
[
i
].
packetfilterlist
.
create_modifyandadd_modifyandreplace
[
j
].
packetfilterdirection
<<
4
)
|
(
qosrules
.
qosrulesie
[
i
].
packetfilterlist
.
create_modifyandadd_modifyandreplace
[
j
].
packetfilteridentifier
&
0x0f
)),
encoded
);
ENCODE_U8
(
buffer
+
encoded
,
(
uint8_t
)((
qosrules
.
qosrulesie
[
i
].
packetfilterlist
.
create_modifyandadd_modifyandreplace
[
j
].
packetfilterdirection
<<
4
)
|
(
qosrules
.
qosrulesie
[
i
].
packetfilterlist
.
create_modifyandadd_modifyandreplace
[
j
].
packetfilteridentifier
&
0x0f
)),
encoded
);
uint8_t
*
len
ghtof
packetfiltercontents
=
buffer
+
encoded
;
uint8_t
*
len
_
packetfiltercontents
=
buffer
+
encoded
;
encoded
++
;
ENCODE_U8
(
buffer
+
encoded
,
qosrules
.
qosrulesie
[
i
].
packetfilterlist
.
create_modifyandadd_modifyandreplace
[
j
].
packetfiltercontents
.
component_type
,
encoded
);
ENCODE_U8
(
buffer
+
encoded
,
qosrules
.
qosrulesie
[
i
].
packetfilterlist
.
create_modifyandadd_modifyandreplace
[
j
].
packetfiltercontents
.
component_type
,
encoded
);
if
(
qosrules
.
qosrulesie
[
i
].
packetfilterlist
.
create_modifyandadd_modifyandreplace
[
j
].
packetfiltercontents
.
component_type
!=
QOS_RULE_MATCHALL_TYPE
)
{
...
...
@@ -72,17 +81,18 @@ int encode_qos_rules ( QOSRules qosrules, uint8_t iei, uint8_t * buffer, uint32_
encoded
+=
encode_result
;
}
*
len
ghtof
packetfiltercontents
=
encode_result
+
1
;
*
len
_
packetfiltercontents
=
encode_result
+
1
;
}
ENCODE_U8
(
buffer
+
encoded
,
qosrules
.
qosrulesie
[
i
].
qosruleprecedence
,
encoded
);
ENCODE_U8
(
buffer
+
encoded
,(
uint8_t
)((
qosrules
.
qosrulesie
[
i
].
segregation
<<
6
)
|
(
qosrules
.
qosrulesie
[
i
].
qosflowidentifer
&
0x3f
)),
encoded
);
ENCODE_U8
(
buffer
+
encoded
,
qosrules
.
qosrulesie
[
i
].
qosruleprecedence
,
encoded
);
ENCODE_U8
(
buffer
+
encoded
,
(
uint8_t
)((
qosrules
.
qosrulesie
[
i
].
segregation
<<
6
)
|
(
qosrules
.
qosrulesie
[
i
].
qosflowidentifer
&
0x3f
)),
encoded
);
}
lenqosrule_16
=
encoded
-
lenmoment
;
*
lenqosrule
=
lenqosrule_16
/
(
1
<<
8
);
lenqosrule
++
;
*
lenqosrule
=
lenqosrule_16
%
(
1
<<
8
);
//len of qos rule
ENCODE_U16
(
len_qosrule
,
encoded
-
len_pos_qos_rule
,
temp
);
}
//len of qos rule ie
ENCODE_U16
(
len_qosrulesie
,
encoded
-
len_pos_qos_rulesie
,
temp
);
return
encoded
;
}
...
...
src/nas/ies/QOSRules.h
View file @
3138aec2
...
...
@@ -52,36 +52,40 @@
#define QOS_RULE_ETHERTYPE_TYPE 0b10000111
typedef
struct
{
uint8_t
spare
:
4
;
uint8_t
packetfilteridentifier
:
4
;
}
ModifyAndDelete
;
}
__attribute__
((
__packed__
))
ModifyAndDelete
;
typedef
struct
{
uint8_t
component_type
;
bstring
component_value
;
}
PacketFilterContents
;
typedef
struct
{
uint8_t
spare
:
2
;
uint8_t
packetfilterdirection
:
2
;
uint8_t
packetfilteridentifier
:
4
;
//
uint8_t lenghtofpacketfiltercontents;
uint8_t
lenghtofpacketfiltercontents
;
PacketFilterContents
packetfiltercontents
;
}
Create_ModifyAndAdd_ModifyAndReplace
;
}
__attribute__
((
__packed__
))
Create_ModifyAndAdd_ModifyAndReplace
;
typedef
struct
{
uint8_t
qosruleidentifer
;
//
uint16_t LengthofQoSrule;
uint16_t
LengthofQoSrule
;
uint8_t
ruleoperationcode
:
3
;
uint8_t
dqrbit
:
1
;
uint8_t
numberofpacketfilters
:
4
;
union
{
ModifyAndDelete
*
modifyanddelete
;
Create_ModifyAndAdd_ModifyAndReplace
*
create_modifyandadd_modifyandreplace
;
}
packetfilterlist
;
}
packetfilterlist
;
//uint16_t packetfilterlistnumber;
uint8_t
qosruleprecedence
;
uint8_t
spare
:
1
;
uint8_t
segregation
:
1
;
uint8_t
qosflowidentifer
:
6
;
}
QOSRulesIE
;
}
__attribute__
((
__packed__
))
QOSRulesIE
;
typedef
struct
{
uint16_t
lengthofqosrulesie
;
...
...
src/nas/ies/SSCMode.c
View file @
3138aec2
...
...
@@ -19,6 +19,7 @@ int encode_ssc_mode ( SSCMode sscmode, uint8_t iei, uint8_t * buffer, uint32_t l
bitStream
|=
(
sscmode
.
ssc_mode_value
&
0x07
);
ENCODE_U8
(
buffer
+
encoded
,
bitStream
,
encoded
);
return
encoded
;
}
...
...
src/nas/ies/SSCMode.h
View file @
3138aec2
...
...
@@ -9,8 +9,9 @@
typedef
struct
{
uint8_t
spare
:
5
;
uint8_t
ssc_mode_value
:
3
;
}
SSCMode
;
}
__attribute__
((
__packed__
))
SSCMode
;
int
encode_ssc_mode
(
SSCMode
sscmode
,
uint8_t
iei
,
uint8_t
*
buffer
,
uint32_t
len
)
;
...
...
src/nas/ies/SessionAMBR.c
View file @
3138aec2
...
...
@@ -12,27 +12,23 @@ int encode_session_ambr ( SessionAMBR sessionambr, uint8_t iei, uint8_t * buffer
uint32_t
encoded
=
0
;
CHECK_PDU_POINTER_AND_LENGTH_ENCODER
(
buffer
,((
iei
>
0
)
?
SESSION_AMBR_MINIMUM_LENGTH_TLV
:
SESSION_AMBR_MINIMUM_LENGTH_LV
)
,
len
);
if
(
iei
>
0
)
if
(
iei
>
0
)
{
*
buffer
=
iei
;
encoded
++
;
}
lenPtr
=
(
buffer
+
encoded
);
encoded
++
;
ENCODE_U8
(
buffer
+
encoded
,
sessionambr
.
uint_for_session_ambr_for_downlink
,
encoded
);
*
(
buffer
+
encoded
)
=
sessionambr
.
session_ambr_for_downlink
/
(
1
<<
8
);
encoded
++
;
*
(
buffer
+
encoded
)
=
sessionambr
.
session_ambr_for_downlink
%
(
1
<<
8
);
encoded
++
;
ENCODE_U8
(
buffer
+
encoded
,
sessionambr
.
uint_for_session_ambr_for_uplink
,
encoded
);
*
(
buffer
+
encoded
)
=
sessionambr
.
session_ambr_for_uplink
/
(
1
<<
8
);
encoded
++
;
*
(
buffer
+
encoded
)
=
sessionambr
.
session_ambr_for_uplink
%
(
1
<<
8
);
encoded
++
;
*
lenPtr
=
encoded
-
1
-
((
iei
>
0
)
?
1
:
0
);
encoded
++
;
//ENCODE_U8(buffer+encoded, sessionambr.length,encoded);
uint8_t
len_pos
=
encoded
;
ENCODE_U8
(
buffer
+
encoded
,
sessionambr
.
uint_for_session_ambr_for_downlink
,
encoded
);
ENCODE_U16
(
buffer
+
encoded
,
sessionambr
.
session_ambr_for_downlink
,
encoded
);
ENCODE_U8
(
buffer
+
encoded
,
sessionambr
.
uint_for_session_ambr_for_uplink
,
encoded
);
ENCODE_U16
(
buffer
+
encoded
,
sessionambr
.
session_ambr_for_uplink
,
encoded
);
//set length
*
(
uint8_t
*
)(
lenPtr
)
=
encoded
-
len_pos
;
return
encoded
;
}
...
...
src/nas/ies/SessionAMBR.h
View file @
3138aec2
...
...
@@ -43,10 +43,11 @@
//typedef bstring SessionAMBR;
typedef
struct
{
uint8_t
uint_for_session_ambr_for_downlink
;
uint16_t
session_ambr_for_downlink
;
uint8_t
uint_for_session_ambr_for_uplink
;
uint16_t
session_ambr_for_uplink
;
uint8_t
length
;
uint8_t
uint_for_session_ambr_for_downlink
;
uint16_t
session_ambr_for_downlink
;
uint8_t
uint_for_session_ambr_for_uplink
;
uint16_t
session_ambr_for_uplink
;
}
SessionAMBR
;
...
...
src/nas/ies/_PDUSessionType.c
View file @
3138aec2
...
...
@@ -18,7 +18,7 @@ int encode__pdu_session_type ( _PDUSessionType _pdusessiontype, uint8_t iei, uin
}
bitStream
|=
(
_pdusessiontype
.
pdu_session_type_value
&
0x07
);
ENCODE_U8
(
buffer
+
encoded
,
bitStream
,
encoded
);
ENCODE_U8
(
buffer
+
encoded
,
bitStream
,
encoded
);
return
encoded
;
}
...
...
src/nas/ies/_PDUSessionType.h
View file @
3138aec2
...
...
@@ -8,8 +8,9 @@
#define _PDU_SESSION_TYPE_MAXIMUM_LENGTH 1
typedef
struct
{
uint8_t
spare
:
5
;
uint8_t
pdu_session_type_value
:
3
;
}
_PDUSessionType
;
}
_
_attribute__
((
__packed__
))
_
PDUSessionType
;
int
encode__pdu_session_type
(
_PDUSessionType
_pdusessiontype
,
uint8_t
iei
,
uint8_t
*
buffer
,
uint32_t
len
)
;
...
...
src/nas/nas_message.c
View file @
3138aec2
This diff is collapsed.
Click to expand it.
src/nas/nas_message.h
View file @
3138aec2
...
...
@@ -34,7 +34,7 @@
#define TEST_MAC_ENCRYPT_DECRYPT__ 0
#define NAS_MESSAGE_SECURITY_HEADER_SIZE 7
//7*8bits
#define NAS_MESSAGE_SECURITY_HEADER_SIZE 7
/*********************************************************/
/************************* 9.1 24501**********************/
...
...
@@ -52,7 +52,7 @@ typedef struct nas_message_security_header_s {
#endif
uint32_t
message_authentication_code
;
uint8_t
sequence_number
;
}
nas_message_security_header_t
;
}
__attribute__
((
__packed__
))
nas_message_security_header_t
;
/* Structure of plain NAS message */
typedef
union
{
...
...
src/nas/securityDef.h
View file @
3138aec2
...
...
@@ -93,12 +93,5 @@ typedef struct {
uint8_t
xres
[
AUTH_XRES_SIZE
];
}
auth_vector_t
;
/****************************************************************************/
/******************** G L O B A L V A R I A B L E S ********************/
/****************************************************************************/
/****************************************************************************/
/****************** E X P O R T E D F U N C T I O N S ******************/
/****************************************************************************/
#endif
/* FILE_SECURITYDEF_SEEN*/
src/nas/sm/msg/PDUSessionEstablishmentAccept.c
View file @
3138aec2
...
...
@@ -205,12 +205,15 @@ int encode_pdu_session_establishment_accept( pdu_session_establishment_accept_ms
if
((
encoded_result
=
encode__pdu_session_type
(
pdu_session_establishment_accept
->
_pdusessiontype
,
0
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
return
encoded_result
;
else
encoded
+=
encoded_result
;
encoded
+=
encoded_result
;
//TODO: In Wireshark Version 3.2.2 (Git commit a3efece3d640), SSC Mode (4 bit) + PDU sessiion type (4 bit) = 1 byte,
//so disable encode SSC Mode for the moment, Should be verified later
if
((
encoded_result
=
encode_ssc_mode
(
pdu_session_establishment_accept
->
sscmode
,
0
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
/*
if((encoded_result = encode_ssc_mode (pdu_session_establishment_accept->sscmode, 0, buffer+encoded,len-encoded))<0)
return encoded_result;
else
encoded+=encoded_result;
*/
if
((
encoded_result
=
encode_qos_rules
(
pdu_session_establishment_accept
->
qosrules
,
0
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
return
encoded_result
;
...
...
@@ -261,15 +264,15 @@ int encode_pdu_session_establishment_accept( pdu_session_establishment_accept_ms
else
encoded
+=
encoded_result
;
}
/*
if((pdu_session_establishment_accept->presence & PDU_SESSION_ESTABLISHMENT_ACCEPT_MAPPED_EPS_BEARER_CONTEXTS_PRESENCE) == PDU_SESSION_ESTABLISHMENT_ACCEPT_MAPPED_EPS_BEARER_CONTEXTS_PRESENCE)
/*
if((pdu_session_establishment_accept->presence & PDU_SESSION_ESTABLISHMENT_ACCEPT_MAPPED_EPS_BEARER_CONTEXTS_PRESENCE) == PDU_SESSION_ESTABLISHMENT_ACCEPT_MAPPED_EPS_BEARER_CONTEXTS_PRESENCE)
{
if((encoded_result = encode_mapped_eps_bearer_contexts (pdu_session_establishment_accept->mappedepsbearercontexts, PDU_SESSION_ESTABLISHMENT_ACCEPT_MAPPED_EPS_BEARER_CONTEXTS_IEI, buffer+encoded,len-encoded))<0)
return encoded_result;
else
encoded+=encoded_result;
}
*/
}
*/
if
((
pdu_session_establishment_accept
->
presence
&
PDU_SESSION_ESTABLISHMENT_ACCEPT_EAP_MESSAGE_PRESENCE
)
==
PDU_SESSION_ESTABLISHMENT_ACCEPT_EAP_MESSAGE_PRESENCE
)
{
if
((
encoded_result
=
encode_eap_message
(
pdu_session_establishment_accept
->
eapmessage
,
PDU_SESSION_ESTABLISHMENT_ACCEPT_EAP_MESSAGE_IEI
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
...
...
@@ -291,15 +294,15 @@ int encode_pdu_session_establishment_accept( pdu_session_establishment_accept_ms
if
((
encoded_result
=
encode_extended_protocol_configuration_options
(
pdu_session_establishment_accept
->
extendedprotocolconfigurationoptions
,
PDU_SESSION_ESTABLISHMENT_ACCEPT_E_P_C_O_IEI
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
return
encoded_result
;
else
encoded
+=
encoded_result
;
encoded
+=
encoded_result
;
}
if
((
pdu_session_establishment_accept
->
presence
&
PDU_SESSION_ESTABLISHMENT_ACCEPT_DNN_PRESENCE
)
==
PDU_SESSION_ESTABLISHMENT_ACCEPT_DNN_PRESENCE
)
{
if
((
encoded_result
=
encode_dnn
(
pdu_session_establishment_accept
->
dnn
,
PDU_SESSION_ESTABLISHMENT_ACCEPT_DNN_IEI
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
if
((
encoded_result
=
encode_dnn
(
pdu_session_establishment_accept
->
dnn
,
PDU_SESSION_ESTABLISHMENT_ACCEPT_DNN_IEI
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
return
encoded_result
;
else
encoded
+=
encoded_result
;
encoded
+=
encoded_result
;
}
...
...
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