Commit 339ac227 authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Fix issue when decoding unknown IEI

parent 93ec85ea
...@@ -152,6 +152,7 @@ int AuthenticationResult::Decode(uint8_t* buf, int len) { ...@@ -152,6 +152,7 @@ int AuthenticationResult::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
default: { default: {
Logger::nas_mm().warn("Unknown IEI 0x%x, stop decoding...", octet); Logger::nas_mm().warn("Unknown IEI 0x%x, stop decoding...", octet);
// Stop decoding // Stop decoding
......
...@@ -666,8 +666,10 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -666,8 +666,10 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
decoded_size += ie_5gs_registration_result.Decode( decoded_size += ie_5gs_registration_result.Decode(
buf + decoded_size, len - decoded_size, false); buf + decoded_size, len - decoded_size, false);
Logger::nas_mm().debug("Decoded_size(%d)", decoded_size); Logger::nas_mm().debug("Decoded_size(%d)", decoded_size);
uint8_t octet = *(buf + decoded_size); uint8_t octet = *(buf + decoded_size);
Logger::nas_mm().debug("First option IEI (0x%x)", octet); Logger::nas_mm().debug("First option IEI (0x%x)", octet);
bool flag = false;
while ((octet != 0x0)) { while ((octet != 0x0)) {
switch ((octet & 0xf0) >> 4) { switch ((octet & 0xf0) >> 4) {
case kIeiMicoIndication: { case kIeiMicoIndication: {
...@@ -714,6 +716,10 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -714,6 +716,10 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
default: {
flag = true;
}
} }
switch (octet) { switch (octet) {
...@@ -726,6 +732,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -726,6 +732,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIeiNSSAIAllowed: { case kIeiNSSAIAllowed: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiNSSAIAllowed); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiNSSAIAllowed);
NSSAI ie_allowed_nssai_tmp = {}; NSSAI ie_allowed_nssai_tmp = {};
...@@ -735,6 +742,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -735,6 +742,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case 0x11: { case 0x11: {
Logger::nas_mm().debug("Decoding IEI (0x11)"); Logger::nas_mm().debug("Decoding IEI (0x11)");
Rejected_NSSAI ie_rejected_nssai_tmp = {}; Rejected_NSSAI ie_rejected_nssai_tmp = {};
...@@ -745,6 +753,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -745,6 +753,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIeiNSSAIConfigured: { case kIeiNSSAIConfigured: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiNSSAIConfigured); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiNSSAIConfigured);
NSSAI ie_configured_nssai_tmp = {}; NSSAI ie_configured_nssai_tmp = {};
...@@ -754,6 +763,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -754,6 +763,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIei5gsNetworkFeatureSupport: { case kIei5gsNetworkFeatureSupport: {
Logger::nas_mm().debug("Decoding IEI (0x21)"); Logger::nas_mm().debug("Decoding IEI (0x21)");
_5GS_Network_Feature_Support ie_5gs_network_feature_support_tmp = {}; _5GS_Network_Feature_Support ie_5gs_network_feature_support_tmp = {};
...@@ -765,6 +775,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -765,6 +775,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIeiPduSessionStatus: { case kIeiPduSessionStatus: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiPduSessionStatus); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiPduSessionStatus);
PDUSessionStatus ie_PDU_session_status_tmp = {}; PDUSessionStatus ie_PDU_session_status_tmp = {};
...@@ -775,6 +786,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -775,6 +786,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIeiPduSessionReactivationResult: { case kIeiPduSessionReactivationResult: {
Logger::nas_mm().debug( Logger::nas_mm().debug(
"Decoding IEI 0x%x", kIeiPduSessionReactivationResult); "Decoding IEI 0x%x", kIeiPduSessionReactivationResult);
...@@ -788,6 +800,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -788,6 +800,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case 0x72: { case 0x72: {
Logger::nas_mm().debug("Decoding IEI (0x72)"); Logger::nas_mm().debug("Decoding IEI (0x72)");
PDU_Session_Reactivation_Result_Error_Cause PDU_Session_Reactivation_Result_Error_Cause
...@@ -821,6 +834,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -821,6 +834,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIeiGprsTimer2Non3gppDeregistration: { case kIeiGprsTimer2Non3gppDeregistration: {
Logger::nas_mm().debug( Logger::nas_mm().debug(
"Decoding IEI 0x%x", kIeiGprsTimer2Non3gppDeregistration); "Decoding IEI 0x%x", kIeiGprsTimer2Non3gppDeregistration);
...@@ -833,6 +847,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -833,6 +847,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIeiGprsTimer2T3502: { case kIeiGprsTimer2T3502: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiGprsTimer2T3502); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiGprsTimer2T3502);
GprsTimer2 ie_T3502_value_tmp(kIeiGprsTimer2T3502); GprsTimer2 ie_T3502_value_tmp(kIeiGprsTimer2T3502);
...@@ -842,6 +857,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -842,6 +857,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case 0x73: { case 0x73: {
Logger::nas_mm().debug("Decoding IEI (0x73)"); Logger::nas_mm().debug("Decoding IEI (0x73)");
SOR_Transparent_Container ie_sor_transparent_container_tmp = {}; SOR_Transparent_Container ie_sor_transparent_container_tmp = {};
...@@ -852,6 +868,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -852,6 +868,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case 0x78: { case 0x78: {
Logger::nas_mm().debug("Decoding IEI (0x78)"); Logger::nas_mm().debug("Decoding IEI (0x78)");
EapMessage ie_eap_message_tmp = {}; EapMessage ie_eap_message_tmp = {};
...@@ -861,6 +878,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -861,6 +878,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIei5gsDrxParameters: { case kIei5gsDrxParameters: {
Logger::nas_mm().debug("Decoding IEI (0x%x)", kIei5gsDrxParameters); Logger::nas_mm().debug("Decoding IEI (0x%x)", kIei5gsDrxParameters);
_5GS_DRX_Parameters ie_negotiated_drx_parameters_tmp = {}; _5GS_DRX_Parameters ie_negotiated_drx_parameters_tmp = {};
...@@ -871,6 +889,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -871,6 +889,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case 0x60: { case 0x60: {
Logger::nas_mm().debug("Decoding IEI (0x60)"); Logger::nas_mm().debug("Decoding IEI (0x60)");
EpsBearerContextStatus ie_eps_bearer_context_status_tmp = {}; EpsBearerContextStatus ie_eps_bearer_context_status_tmp = {};
...@@ -881,6 +900,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -881,6 +900,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case 0x6E: { case 0x6E: {
Logger::nas_mm().debug("Decoding IEI (0x6E)"); Logger::nas_mm().debug("Decoding IEI (0x6E)");
Extended_DRX_Parameters ie_extended_drx_parameters_tmp = {}; Extended_DRX_Parameters ie_extended_drx_parameters_tmp = {};
...@@ -891,6 +911,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -891,6 +911,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIeiGprsTimer3T3447: { case kIeiGprsTimer3T3447: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiGprsTimer3T3447); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiGprsTimer3T3447);
GprsTimer3 ie_T3447_value_tmp(kIeiGprsTimer3T3447); GprsTimer3 ie_T3447_value_tmp(kIeiGprsTimer3T3447);
...@@ -900,6 +921,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -900,6 +921,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIeiGprsTimer3T3348: { case kIeiGprsTimer3T3348: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiGprsTimer3T3348); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiGprsTimer3T3348);
GprsTimer3 ie_T3448_value_tmp(kIeiGprsTimer3T3348); GprsTimer3 ie_T3448_value_tmp(kIeiGprsTimer3T3348);
...@@ -909,6 +931,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -909,6 +931,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIeiGprsTimer3T3324: { case kIeiGprsTimer3T3324: {
Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiGprsTimer3T3324); Logger::nas_mm().debug("Decoding IEI 0x%x", kIeiGprsTimer3T3324);
GprsTimer3 ie_T3324_value_tmp(kIeiGprsTimer3T3324); GprsTimer3 ie_T3324_value_tmp(kIeiGprsTimer3T3324);
...@@ -918,6 +941,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -918,6 +941,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case 0x67: { case 0x67: {
Logger::nas_mm().debug("Decoding IEI (0x67)"); Logger::nas_mm().debug("Decoding IEI (0x67)");
UeRadioCapabilityId ie_ue_radio_capability_id_tmp = {}; UeRadioCapabilityId ie_ue_radio_capability_id_tmp = {};
...@@ -928,6 +952,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -928,6 +952,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case 0x39: { case 0x39: {
Logger::nas_mm().debug("Decoding IEI (0x39)"); Logger::nas_mm().debug("Decoding IEI (0x39)");
NSSAI ie_pending_nssai_tmp = {}; NSSAI ie_pending_nssai_tmp = {};
...@@ -937,6 +962,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -937,6 +962,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case 0x4A: { case 0x4A: {
Logger::nas_mm().debug("Decoding IEI (0x4A)"); Logger::nas_mm().debug("Decoding IEI (0x4A)");
PlmnList ie_equivalent_plmns_tmp = {}; PlmnList ie_equivalent_plmns_tmp = {};
...@@ -946,6 +972,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -946,6 +972,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
case kIei5gsTrackingAreaIdentityList: { case kIei5gsTrackingAreaIdentityList: {
Logger::nas_mm().debug( Logger::nas_mm().debug(
"Decoding IEI 0x%x", kIei5gsTrackingAreaIdentityList); "Decoding IEI 0x%x", kIei5gsTrackingAreaIdentityList);
...@@ -958,8 +985,13 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -958,8 +985,13 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
} break; } break;
default: { default: {
break; // TODO:
} if (flag) {
Logger::nas_mm().warn("Unknown IEI 0x%x, stop decoding...", octet);
// Stop decoding
octet = 0x00;
}
} break;
} }
} }
Logger::nas_mm().debug( Logger::nas_mm().debug(
......
...@@ -19,13 +19,6 @@ ...@@ -19,13 +19,6 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "RegistrationComplete.hpp" #include "RegistrationComplete.hpp"
#include "3gpp_24.501.hpp" #include "3gpp_24.501.hpp"
......
This diff is collapsed.
...@@ -264,6 +264,7 @@ int SecurityModeCommand::Decode(uint8_t* buf, int len) { ...@@ -264,6 +264,7 @@ int SecurityModeCommand::Decode(uint8_t* buf, int len) {
Logger::nas_mm().debug("Decoded_size (%d)", decoded_size); Logger::nas_mm().debug("Decoded_size (%d)", decoded_size);
uint8_t octet = *(buf + decoded_size); uint8_t octet = *(buf + decoded_size);
Logger::nas_mm().debug("First option IEI (0x%x)", octet); Logger::nas_mm().debug("First option IEI (0x%x)", octet);
bool flag = false;
while ((octet != 0x0)) { while ((octet != 0x0)) {
switch ((octet & 0xf0) >> 4) { switch ((octet & 0xf0) >> 4) {
case kIeiImeisvRequest: { case kIeiImeisvRequest: {
...@@ -278,6 +279,9 @@ int SecurityModeCommand::Decode(uint8_t* buf, int len) { ...@@ -278,6 +279,9 @@ int SecurityModeCommand::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
default: {
flag = true;
}
} }
switch (octet) { switch (octet) {
...@@ -353,7 +357,15 @@ int SecurityModeCommand::Decode(uint8_t* buf, int len) { ...@@ -353,7 +357,15 @@ int SecurityModeCommand::Decode(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
// TODO: Default
default: {
// TODO:
if (flag) {
Logger::nas_mm().warn("Unknown IEI 0x%x, stop decoding...", octet);
// Stop decoding
octet = 0x00;
}
} break;
} }
} }
Logger::nas_mm().debug( Logger::nas_mm().debug(
......
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