Commit c1568a82 authored by yunshou-yang's avatar yunshou-yang

update sm test and bug

parent 3cf06615
......@@ -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_ACCPET, n1_sm_msg);
m_smf_app->create_n1_sm_container(PDU_SESSION_ESTABLISHMENT_REQUEST, 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());
......
......@@ -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
{
......
......@@ -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
......
......@@ -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 )
......
......@@ -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;
......
......@@ -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
......
......@@ -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)
......
......@@ -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)
......
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment