Commit 5cdcf37a authored by yangjian's avatar yangjian

fix Mobility registration process

parent ecea7c50
...@@ -302,7 +302,7 @@ void amf_n1::handle_itti_message(itti_uplink_nas_data_ind &nas_data_ind) { ...@@ -302,7 +302,7 @@ void amf_n1::handle_itti_message(itti_uplink_nas_data_ind &nas_data_ind) {
mac32_recv); mac32_recv);
if (mac32 == mac32_recv) { if (mac32 == mac32_recv) {
isMatched = true; isMatched = true;
Logger::amf_n1().error("Integrity matched"); Logger::amf_n1().info("Integrity matched");
// nc.get()->security_ctx->ul_count.seq_num ++; // nc.get()->security_ctx->ul_count.seq_num ++;
} }
if (!isMatched) { if (!isMatched) {
...@@ -1078,19 +1078,25 @@ void amf_n1::registration_request_handle(bool isNasSig, ...@@ -1078,19 +1078,25 @@ void amf_n1::registration_request_handle(bool isNasSig,
} break; } break;
case PERIODIC_REGISTRATION_UPDATING: { case PERIODIC_REGISTRATION_UPDATING: {
char *pathvar = NULL; // char *pathvar = NULL;
pathvar = getenv("IS_AMF_PERIODIC"); // pathvar = getenv("IS_AMF_PERIODIC");
if(pathvar && !strcmp(pathvar, "true")) // if(pathvar && !strcmp(pathvar, "true"))
{ // {
Logger::amf_n1().debug("Network handling periodic registration ..."); // Logger::amf_n1().debug("Network handling periodic registration ...");
if(is_messagecontainer) // if(is_messagecontainer)
run_periodic_registration_update_procedure(nc, nas_msg); // run_periodic_registration_update_procedure(nc, nas_msg);
else // else
run_periodic_registration_update_procedure(nc, pdu_session_status); // run_periodic_registration_update_procedure(nc, pdu_session_status);
} else{ // } else{
Logger::amf_n1().warn("Please set environment variable \"IS_AMF_PERIODIC\""); // Logger::amf_n1().warn("Please set environment variable \"IS_AMF_PERIODIC\"");
Logger::amf_n1().error("Network doesn't support periodic registration, reject ..."); // Logger::amf_n1().error("Network doesn't support periodic registration, reject ...");
} // }
if(is_messagecontainer)
run_periodic_registration_update_procedure(nc, nas_msg);
else
run_periodic_registration_update_procedure(nc, pdu_session_status);
} break; } break;
case EMERGENCY_REGISTRATION: { case EMERGENCY_REGISTRATION: {
if (!amf_cfg.is_emergency_support.compare("false")) { if (!amf_cfg.is_emergency_support.compare("false")) {
...@@ -2230,12 +2236,12 @@ void amf_n1::security_mode_complete_handle(uint32_t ran_ue_ngap_id, ...@@ -2230,12 +2236,12 @@ void amf_n1::security_mode_complete_handle(uint32_t ran_ue_ngap_id,
std::istringstream sst_istr(amf_cfg.plmn_list[0].slice_list[0].sST); std::istringstream sst_istr(amf_cfg.plmn_list[0].slice_list[0].sST);
sst_istr >> sst; sst_istr >> sst;
Logger::amf_n1().debug("**************************** amf_cfg.plmn_list[0].slice_list[0].sST = %s",amf_cfg.plmn_list[0].slice_list[0].sST.c_str()); // Logger::amf_n1().debug("**************************** amf_cfg.plmn_list[0].slice_list[0].sST = %s",amf_cfg.plmn_list[0].slice_list[0].sST.c_str());
Logger::amf_n1().debug("**************************** sst value = %d",sst); // Logger::amf_n1().debug("**************************** sst value = %d",sst);
std::istringstream sd_istr(amf_cfg.plmn_list[0].slice_list[0].sD); std::istringstream sd_istr(amf_cfg.plmn_list[0].slice_list[0].sD);
sd_istr >> sd; sd_istr >> sd;
Logger::amf_n1().debug("**************************** amf_cfg.plmn_list[0].slice_list[0].sD = %s",amf_cfg.plmn_list[0].slice_list[0].sD.c_str()); // Logger::amf_n1().debug("**************************** amf_cfg.plmn_list[0].slice_list[0].sD = %s",amf_cfg.plmn_list[0].slice_list[0].sD.c_str());
Logger::amf_n1().debug("**************************** sd value = %d",sd); // Logger::amf_n1().debug("**************************** sd value = %d",sd);
if(sst == 0) if(sst == 0)
sst = 1; sst = 1;
...@@ -2276,7 +2282,8 @@ void amf_n1::security_mode_complete_handle(uint32_t ran_ue_ngap_id, ...@@ -2276,7 +2282,8 @@ void amf_n1::security_mode_complete_handle(uint32_t ran_ue_ngap_id,
Logger::amf_n1().warn("Please set environment variable \"AMF_T3512_MIN\""); Logger::amf_n1().warn("Please set environment variable \"AMF_T3512_MIN\"");
} }
// regAccept->setT3512_Value(0x5, t3512_Value); // regAccept->setT3512_Value(0x5, t3512_Value);
regAccept->setT3512_Value(0x2, 0); // regAccept->setT3512_Value(0x2, 0);
regAccept->setT3512_Value(0x5, 0x1);
uint8_t buffer[BUFFER_SIZE_1024] = {0}; uint8_t buffer[BUFFER_SIZE_1024] = {0};
int encoded_size = regAccept->encode2buffer(buffer, BUFFER_SIZE_1024); int encoded_size = regAccept->encode2buffer(buffer, BUFFER_SIZE_1024);
print_buffer("amf_n1", "Registration-Accept message buffer", buffer, print_buffer("amf_n1", "Registration-Accept message buffer", buffer,
...@@ -2937,7 +2944,8 @@ void amf_n1::run_mobility_registration_update_procedure( ...@@ -2937,7 +2944,8 @@ void amf_n1::run_mobility_registration_update_procedure(
amf_cfg.guami.regionID, amf_cfg.guami.AmfSetID, amf_cfg.guami.regionID, amf_cfg.guami.AmfSetID,
amf_cfg.guami.AmfPointer, 0x264a34c0); amf_cfg.guami.AmfPointer, 0x264a34c0);
// regAccept->setT3512_Value(0x5, 0x1e); // regAccept->setT3512_Value(0x5, 0x1e);
regAccept->setT3512_Value(0x2, 0); // regAccept->setT3512_Value(0x2, 0);
regAccept->setT3512_Value(0x5, 0x1);
std::vector<p_tai_t> tai_list; std::vector<p_tai_t> tai_list;
p_tai_t item0; p_tai_t item0;
...@@ -3045,7 +3053,8 @@ void amf_n1::run_periodic_registration_update_procedure( ...@@ -3045,7 +3053,8 @@ void amf_n1::run_periodic_registration_update_procedure(
amf_cfg.guami.regionID, amf_cfg.guami.AmfSetID, amf_cfg.guami.regionID, amf_cfg.guami.AmfSetID,
amf_cfg.guami.AmfPointer, 0x264a34c0); amf_cfg.guami.AmfPointer, 0x264a34c0);
// regAccept->setT3512_Value(0x5, 0x1e); // regAccept->setT3512_Value(0x5, 0x1e);
regAccept->setT3512_Value(0x2, 0); // regAccept->setT3512_Value(0x2, 0);
regAccept->setT3512_Value(0x5, 0x1);
std::vector<p_tai_t> tai_list; std::vector<p_tai_t> tai_list;
p_tai_t item0; p_tai_t item0;
...@@ -3130,11 +3139,25 @@ void amf_n1::run_periodic_registration_update_procedure( ...@@ -3130,11 +3139,25 @@ void amf_n1::run_periodic_registration_update_procedure(
RegistrationAccept *regAccept = new RegistrationAccept(); RegistrationAccept *regAccept = new RegistrationAccept();
regAccept->setHeader(PLAIN_5GS_MSG); regAccept->setHeader(PLAIN_5GS_MSG);
regAccept->set_5GS_Registration_Result(false, false, false, 0x01); regAccept->set_5GS_Registration_Result(false, false, false, 0x01);
regAccept->set5G_GUTI(amf_cfg.guami.mcc, amf_cfg.guami.mnc, nas::_5G_GUTI_t _5g_guti;
amf_cfg.guami.regionID, amf_cfg.guami.AmfSetID, if(regReq->ie_5gs_mobility_id)
amf_cfg.guami.AmfPointer, 0x264a34c0); {
regReq->ie_5gs_mobility_id->get5GGUTI(_5g_guti);
}
else
{
Logger::amf_n1().error("no exist _5g_guti");
return;
}
regAccept->set5G_GUTI(amf_cfg.guami.mcc, amf_cfg.guami.mnc,amf_cfg.guami.regionID, amf_cfg.guami.AmfSetID,amf_cfg.guami.AmfPointer, _5g_guti._5g_tmsi); //guti
// regAccept->set5G_GUTI(amf_cfg.guami.mcc, amf_cfg.guami.mnc,
// amf_cfg.guami.regionID, amf_cfg.guami.AmfSetID,
// amf_cfg.guami.AmfPointer, 0x264a34c0); //guti
// regAccept->setT3512_Value(0x5, 0x1e); // regAccept->setT3512_Value(0x5, 0x1e);
regAccept->setT3512_Value(0x2, 0); // regAccept->setT3512_Value(0x2, 0);
regAccept->setT3512_Value(0x5, 0x1);
std::vector<p_tai_t> tai_list; std::vector<p_tai_t> tai_list;
p_tai_t item0; p_tai_t item0;
...@@ -3180,6 +3203,29 @@ void amf_n1::run_periodic_registration_update_procedure( ...@@ -3180,6 +3203,29 @@ void amf_n1::run_periodic_registration_update_procedure(
} else { } else {
delete regAccept; delete regAccept;
} }
std::string guti_str = amf_cfg.guami.mcc + amf_cfg.guami.mnc + amf_cfg.guami.regionID + amf_cfg.guami.AmfSetID + amf_cfg.guami.AmfPointer + std::to_string(_5g_guti._5g_tmsi);
Logger::amf_n1().error("_5g_guti is str(%s) tmsi is value(%d)",guti_str.c_str(),_5g_guti._5g_tmsi);
if((nc.get()->security_ctx == nullptr) && is_guti_2_nas_context(guti_str))
{
long amfid = nc.get()->amf_ue_ngap_id;
uint32_t ranid = nc.get()->ran_ue_ngap_id;
nc = guti_2_nas_context(guti_str);
nc.get()->amf_ue_ngap_id = amfid;
nc.get()->ran_ue_ngap_id = ranid;
set_amf_ue_ngap_id_2_nas_context(amfid,nc);
}
else
{
if(is_guti_2_nas_context(guti_str))
Logger::amf_n1().error("guti_2_nas_context is nullptr");
if(nc.get()->security_ctx == nullptr)
{
Logger::amf_n1().error("security_ctx is nullptr");
return;
}
}
nas_secu_ctx *secu = nc.get()->security_ctx; nas_secu_ctx *secu = nc.get()->security_ctx;
// protect nas message // protect nas message
bstring protectedNas; bstring protectedNas;
......
...@@ -659,24 +659,27 @@ int _5GSMobilityIdentity::_5g_guti_decodefrombuffer(uint8_t* buf, int len) { ...@@ -659,24 +659,27 @@ int _5GSMobilityIdentity::_5g_guti_decodefrombuffer(uint8_t* buf, int len) {
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
decoded_size++; decoded_size++;
Logger::nas_mm().debug("Octet 0x%x", octet); Logger::nas_mm().debug("Octet 0x%x", octet);
digit[0] = octet; digit[3] = octet;
tmsi |= octet; // tmsi |= octet;
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
decoded_size++; decoded_size++;
Logger::nas_mm().debug("Octet 0x%x", octet); Logger::nas_mm().debug("Octet 0x%x", octet);
digit[1] = octet; digit[2] = octet;
tmsi |= octet << 8; // tmsi |= octet << 8;
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
decoded_size++; decoded_size++;
Logger::nas_mm().debug("Octet 0x%x", octet); Logger::nas_mm().debug("Octet 0x%x", octet);
digit[2] = octet; digit[1] = octet;
tmsi |= octet << 16; // tmsi |= octet << 16;
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
decoded_size++; decoded_size++;
Logger::nas_mm().debug("Octet 0x%x", octet); Logger::nas_mm().debug("Octet 0x%x", octet);
digit[3] = octet; digit[0] = octet;
tmsi |= octet << 24; // tmsi |= octet << 24;
_5g_guti->_5g_tmsi = tmsi; for(int i=0;i<4;i++)
tmsi |= (digit[i] << (i * 8));
_5g_guti->_5g_tmsi = tmsi;
Logger::nas_mm().debug("decoding 5GSMobilityIdentity 5G-GUTI"); Logger::nas_mm().debug("decoding 5GSMobilityIdentity 5G-GUTI");
return decoded_size; return decoded_size;
} }
......
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