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
c1568a82
Commit
c1568a82
authored
Oct 24, 2019
by
yunshou-yang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update sm test and bug
parent
3cf06615
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
256 additions
and
720 deletions
+256
-720
src/api-server/impl/SMContextsCollectionApiImpl.cpp
src/api-server/impl/SMContextsCollectionApiImpl.cpp
+1
-1
src/nas/ies/QOSFlowDescriptions.c
src/nas/ies/QOSFlowDescriptions.c
+1
-0
src/nas/ies/QOSFlowDescriptions.h
src/nas/ies/QOSFlowDescriptions.h
+1
-1
src/nas/ies/QOSRules.c
src/nas/ies/QOSRules.c
+1
-1
src/nas/nas_message.c
src/nas/nas_message.c
+67
-14
src/nas/nas_message.h
src/nas/nas_message.h
+6
-0
src/nas/sm/msg/PDUSessionModificationCommand.c
src/nas/sm/msg/PDUSessionModificationCommand.c
+4
-2
src/nas/sm/msg/PDUSessionModificationRequest.c
src/nas/sm/msg/PDUSessionModificationRequest.c
+4
-2
src/oai_smf/nas_sm_encode_to_json.c
src/oai_smf/nas_sm_encode_to_json.c
+71
-194
src/smf_app/smf_app.cpp
src/smf_app/smf_app.cpp
+100
-505
No files found.
src/api-server/impl/SMContextsCollectionApiImpl.cpp
View file @
c1568a82
...
...
@@ -48,7 +48,7 @@ void SMContextsCollectionApiImpl::post_sm_contexts(const SmContextMessage &smCon
//FOR DEBUG ONLY!!, GENERATE A PDU SESSION ESTABLISHMENT MESSAGE HERE!!
//sm_encode_establishment_request();
//sm_encode_all();//Generate all required HEX files to "oai-cn5g-smf/build/smf/build/sm_encode_file/ *.txt"
m_smf_app
->
create_n1_sm_container
(
PDU_SESSION_ESTABLISHMENT_
ACCPE
T
,
n1_sm_msg
);
m_smf_app
->
create_n1_sm_container
(
PDU_SESSION_ESTABLISHMENT_
REQUES
T
,
n1_sm_msg
);
std
::
string
n1_sm_msg_hex
;
m_smf_app
->
convert_string_2_hex
(
n1_sm_msg
,
n1_sm_msg_hex
);
Logger
::
smf_api_server
().
debug
(
"smContextMessage, n1 sm msg %s"
,
n1_sm_msg
.
c_str
());
...
...
src/nas/ies/QOSFlowDescriptions.c
View file @
c1568a82
...
...
@@ -123,6 +123,7 @@ int decode_qos_flow_descriptions ( QOSFlowDescriptions * qosflowdescriptions, ui
if
((((
*
(
buffer
+
decoded_tmp
)
>>
6
)
&
0x01
)
==
PARAMETERS_LIST_IS_NOT_INCLUDED
)
&&
((
*
(
buffer
+
decoded_tmp
-
1
)
>>
5
)
==
DELETE_EXISTING_QOS_FLOW_DESCRIPTION
))
{
numberparameters
=
0
;
decoded_tmp
++
;
}
else
{
...
...
src/nas/ies/QOSFlowDescriptions.h
View file @
c1568a82
...
...
@@ -4,7 +4,7 @@
#include <stdint.h>
#include "bstrlib.h"
#define QOS_FLOW_DESCRIPTIONS_MINIMUM_LENGTH
5
#define QOS_FLOW_DESCRIPTIONS_MINIMUM_LENGTH
6
#define QOS_FLOW_DESCRIPTIONS_MAXIMUM_LENGTH 65538
#define QOS_FLOW_DESCRIPTIONS_MINIMUM_LENGTH_TLVE 6
...
...
src/nas/ies/QOSRules.c
View file @
c1568a82
...
...
@@ -16,7 +16,7 @@ int encode_qos_rules ( QOSRules qosrules, uint8_t iei, uint8_t * buffer, uint32_
int
encode_result
=
0
;
int
i
=
0
,
j
=
0
;
CHECK_PDU_POINTER_AND_LENGTH_ENCODER
(
buffer
,((
iei
>
0
)
?
QOS_RULES_MINIMUM_LENGTH_TLVE
:
QOS_RULES_MINIMUM_LENGTH_LVE
),
len
);
CHECK_PDU_POINTER_AND_LENGTH_ENCODER
(
buffer
,((
iei
>
0
)
?
QOS_RULES_MINIMUM_LENGTH_TLVE
:
QOS_RULES_MINIMUM_LENGTH_LVE
),
len
);
if
(
iei
>
0
)
...
...
src/nas/nas_message.c
View file @
c1568a82
...
...
@@ -2,8 +2,9 @@
#include "nas_message.h"
#include "TLVDecoder.h"
#include "TLVEncoder.h"
#include "secu_defs.h"
#include "mmData.h"
#include "secu_defs.h"
/****************************************************************************/
/******************* L O C A L D E F I N I T I O N S *******************/
...
...
@@ -152,7 +153,11 @@ int nas_message_encode (
//printf("_nas_message_get_mac\n");
uint32_t
mac
=
_nas_message_get_mac
(
buffer
+
offset
,
bytes
+
size
-
offset
,
SECU_DIRECTION_DOWNLINK
,
#if TEST_MAC_ENCRYPT_DECRYPT__
DIRECTION__
,
#else
SECU_DIRECTION_DOWNLINK
,
#endif
fivegmm_security_context
);
//printf("mac = %x\n",mac);
/*
...
...
@@ -162,12 +167,29 @@ int nas_message_encode (
*
(
uint32_t
*
)
(
buffer
+
2
*
sizeof
(
uint8_t
))
=
htonl
(
mac
);
printf
(
"encoded mac(%x)
\n
"
,
htonl
(
mac
));
if
(
fivegmm_security_context
)
{
fivegmm_security_context
->
dl_count
.
seq_num
+=
1
;
#if TEST_MAC_ENCRYPT_DECRYPT__
#if !DIRECTION__
fivegmm_security_context
->
ul_count
.
seq_num
+=
1
;
if
(
!
fivegmm_security_context
->
ul_count
.
seq_num
)
{
fivegmm_security_context
->
ul_count
.
overflow
+=
1
;
}
#else
fivegmm_security_context
->
dl_count
.
seq_num
+=
1
;
if
(
!
fivegmm_security_context
->
dl_count
.
seq_num
)
{
fivegmm_security_context
->
dl_count
.
overflow
+=
1
;
}
#endif
#else
fivegmm_security_context
->
dl_count
.
seq_num
+=
1
;
if
(
!
fivegmm_security_context
->
dl_count
.
seq_num
)
{
fivegmm_security_context
->
dl_count
.
overflow
+=
1
;
}
#endif
//OAILOG_DEBUG (LOG_NAS, "Incremented fivegmm_security_context.dl_count.seq_num -> %u\n", fivegmm_security_context->dl_count.seq_num);
}
else
{
//OAILOG_DEBUG (LOG_NAS, "Did not increment fivegmm_security_context.dl_count.seq_num because no security context\n");
...
...
@@ -248,18 +270,40 @@ int nas_message_decode (
*/
int
offset
=
size
-
sizeof
(
uint8_t
);
if
(
fivegmm_security_context
)
{
#if TEST_MAC_ENCRYPT_DECRYPT__
#if !DIRECTION__
status
->
security_context_available
=
1
;
if
(
fivegmm_security_context
->
ul_count
.
seq_num
>
msg
->
header
.
sequence_number
)
{
fivegmm_security_context
->
ul_count
.
overflow
+=
1
;
}
fivegmm_security_context
->
ul_count
.
seq_num
=
msg
->
header
.
sequence_number
;
#else
status
->
security_context_available
=
1
;
if
(
fivegmm_security_context
->
dl_count
.
seq_num
>
msg
->
header
.
sequence_number
)
{
fivegmm_security_context
->
dl_count
.
overflow
+=
1
;
}
fivegmm_security_context
->
dl_count
.
seq_num
=
msg
->
header
.
sequence_number
;
#endif
#else
status
->
security_context_available
=
1
;
if
(
fivegmm_security_context
->
ul_count
.
seq_num
>
msg
->
header
.
sequence_number
)
{
fivegmm_security_context
->
ul_count
.
overflow
+=
1
;
}
fivegmm_security_context
->
ul_count
.
seq_num
=
msg
->
header
.
sequence_number
;
#endif
/*
* Compute the NAS message authentication code, return 0 if no security context
*/
//printf("decoding _nas_message_get_mac\n");
mac
=
_nas_message_get_mac
(
buffer
+
offset
,
length
-
offset
,
#if TEST_MAC_ENCRYPT_DECRYPT__
DIRECTION__
,
#else
SECU_DIRECTION_UPLINK
,
#endif
fivegmm_security_context
);
/*
* Check NAS message integrity
...
...
@@ -432,7 +476,11 @@ static int _nas_message_protected_encode (
printf("msg->header.sequence_number(0x%x)\n",msg->header.sequence_number);
#endif
bytes
=
_nas_message_encrypt
(
buffer
,
plain_msg
,
msg
->
header
.
security_header_type
,
msg
->
header
.
message_authentication_code
,
msg
->
header
.
sequence_number
,
#if TEST_MAC_ENCRYPT_DECRYPT__
DIRECTION__
,
#else
SECU_DIRECTION_DOWNLINK
,
#endif
size
,
fivegmm_security_context
);
//printf("_nas_message_encrypt, bytes: %d\n",bytes);
}
...
...
@@ -554,18 +602,18 @@ static int _nas_message_encrypt (
}
else
{
//printf("fivegmm_security_context->dl_count.overflow = %x\n",((fivegmm_security_context->dl_count.overflow & 0x0000FFFF) ));
//printf("fivegmm_security_context->dl_count.seq_num = %x\n",fivegmm_security_context->dl_count.seq_num);
count
=
0x00000000
|
((
fivegmm_security_context
->
dl_count
.
overflow
&
0x0000FFFF
)
<<
8
)
|
(
fivegmm_security_context
->
dl_count
.
seq_num
&
0x000000FF
);
count
=
0x00000000
|
((
fivegmm_security_context
->
dl_count
.
overflow
&
&
0x0000FFFF
)
<<
8
)
|
(
fivegmm_security_context
->
dl_count
.
seq_num
&
0x000000FF
);
}
//printf("count = %x\n",count);
//OAILOG_DEBUG (LOG_NAS,
// "NAS_SECURITY_ALGORITHMS_EEA1 dir %s count.seq_num %u count %u\n",
// (direction == SECU_DIRECTION_UPLINK) ? "UPLINK" : "DOWNLINK", (direction == SECU_DIRECTION_UPLINK) ? fivegmm_security_context->ul_count.seq_num : fivegmm_security_context->dl_count.seq_num, count);
//
stream_cipher.key = fivegmm_security_context->knas_enc;
//
stream_cipher.key_length = AUTH_KNAS_ENC_SIZE;
//
stream_cipher.count = count;
//
stream_cipher.bearer = 0x00; //33.401 section 8.1.1
//
stream_cipher.direction = direction;
//
stream_cipher.message = (uint8_t*)src;
stream_cipher
.
key
=
fivegmm_security_context
->
knas_enc
;
stream_cipher
.
key_length
=
AUTH_KNAS_ENC_SIZE
;
stream_cipher
.
count
=
count
;
stream_cipher
.
bearer
=
0x00
;
//33.401 section 8.1.1
stream_cipher
.
direction
=
direction
;
stream_cipher
.
message
=
(
uint8_t
*
)
src
;
/*
* length in bits
*/
...
...
@@ -578,9 +626,9 @@ static int _nas_message_encrypt (
break
;
case
NAS_SECURITY_ALGORITHMS_NEA2
:{
if
(
direction
==
SECU_DIRECTION_UPLINK
)
{
count
=
0x00000000
|
((
fivegmm_security_context
->
ul_count
.
overflow
&
0x0000FFFF
)
<<
8
)
|
(
fivegmm_security_context
->
ul_count
.
seq_num
&
0x000000FF
);
count
=
0x00000000
|
((
fivegmm_security_context
->
ul_count
.
overflow
&
&
0x0000FFFF
)
<<
8
)
|
(
fivegmm_security_context
->
ul_count
.
seq_num
&
0x000000FF
);
}
else
{
count
=
0x00000000
|
((
fivegmm_security_context
->
dl_count
.
overflow
&
0x0000FFFF
)
<<
8
)
|
(
fivegmm_security_context
->
dl_count
.
seq_num
&
0x000000FF
);
count
=
0x00000000
|
((
fivegmm_security_context
->
dl_count
.
overflow
&
&
0x0000FFFF
)
<<
8
)
|
(
fivegmm_security_context
->
dl_count
.
seq_num
&
0x000000FF
);
}
//OAILOG_DEBUG (LOG_NAS,
...
...
@@ -867,8 +915,11 @@ static int _nas_message_decrypt (
//OAILOG_FUNC_IN (LOG_NAS);
int
size
=
0
;
nas_message_security_header_t
header
=
{
0
};
#if TEST_MAC_ENCRYPT_DECRYPT__
direction
=
DIRECTION__
;
#else
direction
=
SECU_DIRECTION_UPLINK
;
#endif
switch
(
security_header_type
)
{
case
SECURITY_HEADER_TYPE_NOT_PROTECTED
:
...
...
@@ -915,6 +966,7 @@ static int _nas_message_decrypt (
*/
stream_cipher
.
blength
=
length
<<
3
;
memcpy
(
dest
,
src
,
length
);
//printf("nas_stream_encrypt_nea1 length = %d\n",length);
//nas_stream_encrypt_nea1 (&stream_cipher, (uint8_t*)dest);
/*
* Decode the first octet (security header type or EPS bearer identity,
...
...
@@ -923,6 +975,7 @@ static int _nas_message_decrypt (
//DECODE_U8 (dest, *(uint8_t *) (&header), size);
//DECODE_U8(dest,header.extended_protocol_discriminator,size);
//DECODE_U8(dest+size,header.security_header_type,size);
//return header.extended_protocol_discriminator;
//OAILOG_FUNC_RETURN (LOG_NAS, header.extended_protocol_discriminator);
}
break
;
...
...
src/nas/nas_message.h
View file @
c1568a82
...
...
@@ -6,6 +6,12 @@
#include "sm_msg.h"
#include "common_types.h"
/***********************************/
/********test mac and encrypt/decrypt********/
/***********************************/
#define DIRECTION__ 1//SECU_DIRECTION_DOWNLINK
#define TEST_MAC_ENCRYPT_DECRYPT__ 0
#define NAS_MESSAGE_SECURITY_HEADER_SIZE 7 //7*8bits
...
...
src/nas/sm/msg/PDUSessionModificationCommand.c
View file @
c1568a82
...
...
@@ -97,6 +97,7 @@ int decode_pdu_session_modification_command( pdu_session_modification_command_ms
pdu_session_modification_command
->
presence
|=
PDU_SESSION_MODIFICATION_COMMAND_QOS_RULES_PRESENCE
;
}
break
;
/*
case PDU_SESSION_MODIFICATION_COMMAND_MAPPED_EPS_BEARER_CONTEXTS_IEI:
if((decoded_result = decode_mapped_eps_bearer_contexts (&pdu_session_modification_command->mappedepsbearercontexts, PDU_SESSION_MODIFICATION_COMMAND_MAPPED_EPS_BEARER_CONTEXTS_IEI, buffer+decoded,len-decoded))<0)
return decoded_result;
...
...
@@ -106,6 +107,7 @@ int decode_pdu_session_modification_command( pdu_session_modification_command_ms
pdu_session_modification_command->presence |= PDU_SESSION_MODIFICATION_COMMAND_MAPPED_EPS_BEARER_CONTEXTS_PRESENCE;
}
break;
*/
case
PDU_SESSION_MODIFICATION_COMMAND_QOS_FLOW_DESCRIPTIONS_IEI
:
if
((
decoded_result
=
decode_qos_flow_descriptions
(
&
pdu_session_modification_command
->
qosflowdescriptions
,
PDU_SESSION_MODIFICATION_COMMAND_QOS_FLOW_DESCRIPTIONS_IEI
,
buffer
+
decoded
,
len
-
decoded
))
<
0
)
return
decoded_result
;
...
...
@@ -200,7 +202,7 @@ int encode_pdu_session_modification_command( pdu_session_modification_command_ms
else
encoded
+=
encoded_result
;
}
/*
if((pdu_session_modification_command->presence & PDU_SESSION_MODIFICATION_COMMAND_MAPPED_EPS_BEARER_CONTEXTS_PRESENCE) == PDU_SESSION_MODIFICATION_COMMAND_MAPPED_EPS_BEARER_CONTEXTS_PRESENCE)
{
if((encoded_result = encode_mapped_eps_bearer_contexts (pdu_session_modification_command->mappedepsbearercontexts, PDU_SESSION_MODIFICATION_COMMAND_MAPPED_EPS_BEARER_CONTEXTS_IEI, buffer+encoded,len-encoded))<0)
...
...
@@ -208,7 +210,7 @@ int encode_pdu_session_modification_command( pdu_session_modification_command_ms
else
encoded+=encoded_result;
}
*/
if
((
pdu_session_modification_command
->
presence
&
PDU_SESSION_MODIFICATION_COMMAND_QOS_FLOW_DESCRIPTIONS_PRESENCE
)
==
PDU_SESSION_MODIFICATION_COMMAND_QOS_FLOW_DESCRIPTIONS_PRESENCE
)
{
if
((
encoded_result
=
encode_qos_flow_descriptions
(
pdu_session_modification_command
->
qosflowdescriptions
,
PDU_SESSION_MODIFICATION_COMMAND_QOS_FLOW_DESCRIPTIONS_IEI
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
...
...
src/nas/sm/msg/PDUSessionModificationRequest.c
View file @
c1568a82
...
...
@@ -118,6 +118,7 @@ int decode_pdu_session_modification_request( pdu_session_modification_request_ms
pdu_session_modification_request
->
presence
|=
PDU_SESSION_MODIFICATION_REQUEST_QOS_FLOW_DESCRIPTIONS_PRESENCE
;
}
break
;
/*
case PDU_SESSION_MODIFICATION_REQUEST_MAPPED_EPS_BEARER_CONTEXTS_IEI:
if((decoded_result = decode_mapped_eps_bearer_contexts (&pdu_session_modification_request->mappedepsbearercontexts, PDU_SESSION_MODIFICATION_REQUEST_MAPPED_EPS_BEARER_CONTEXTS_IEI, buffer+decoded,len-decoded))<0)
return decoded_result;
...
...
@@ -127,6 +128,7 @@ int decode_pdu_session_modification_request( pdu_session_modification_request_ms
pdu_session_modification_request->presence |= PDU_SESSION_MODIFICATION_REQUEST_MAPPED_EPS_BEARER_CONTEXTS_PRESENCE;
}
break;
*/
case
PDU_SESSION_MODIFICATION_REQUEST_E_P_C_O_IEI
:
if
((
decoded_result
=
decode_extended_protocol_configuration_options
(
&
pdu_session_modification_request
->
extendedprotocolconfigurationoptions
,
PDU_SESSION_MODIFICATION_REQUEST_E_P_C_O_IEI
,
buffer
+
decoded
,
len
-
decoded
))
<
0
)
return
decoded_result
;
...
...
@@ -228,7 +230,7 @@ int encode_pdu_session_modification_request( pdu_session_modification_request_ms
else
encoded
+=
encoded_result
;
}
/*
if((pdu_session_modification_request->presence & PDU_SESSION_MODIFICATION_REQUEST_MAPPED_EPS_BEARER_CONTEXTS_PRESENCE) == PDU_SESSION_MODIFICATION_REQUEST_MAPPED_EPS_BEARER_CONTEXTS_PRESENCE)
{
if((encoded_result = encode_mapped_eps_bearer_contexts (pdu_session_modification_request->mappedepsbearercontexts, PDU_SESSION_MODIFICATION_REQUEST_MAPPED_EPS_BEARER_CONTEXTS_IEI, buffer+encoded,len-encoded))<0)
...
...
@@ -236,7 +238,7 @@ int encode_pdu_session_modification_request( pdu_session_modification_request_ms
else
encoded+=encoded_result;
}
*/
if
((
pdu_session_modification_request
->
presence
&
PDU_SESSION_MODIFICATION_REQUEST_E_P_C_O_PRESENCE
)
==
PDU_SESSION_MODIFICATION_REQUEST_E_P_C_O_PRESENCE
)
{
if
((
encoded_result
=
encode_extended_protocol_configuration_options
(
pdu_session_modification_request
->
extendedprotocolconfigurationoptions
,
PDU_SESSION_MODIFICATION_REQUEST_E_P_C_O_IEI
,
buffer
+
encoded
,
len
-
encoded
))
<
0
)
...
...
src/oai_smf/nas_sm_encode_to_json.c
View file @
c1568a82
This diff is collapsed.
Click to expand it.
src/smf_app/smf_app.cpp
View file @
c1568a82
This diff is collapsed.
Click to expand it.
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