diff --git a/lib/nas/5gs/decoder.c b/lib/nas/5gs/decoder.c index 65512c24c..c03e529ec 100644 --- a/lib/nas/5gs/decoder.c +++ b/lib/nas/5gs/decoder.c @@ -1,7 +1,7 @@ /* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -28,8 +28,8 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.2.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-07-11 07:09:47.173881 by ubuntu - * from 24501-g41.docx + * Created on: 2023-03-04 20:50:00.889117 by acetcom + * from 24501-h90.docx ******************************************************************************/ #include "ogs-nas-5gs.h" @@ -431,6 +431,86 @@ int ogs_nas_5gs_decode_registration_request(ogs_nas_5gs_message_t *message, ogs_ registration_request->presencemask |= OGS_NAS_5GS_REGISTRATION_REQUEST_N5GC_INDICATION_PRESENT; decoded += size; break; + case OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_NB_N1_MODE_DRX_PARAMETERS_TYPE: + size = ogs_nas_5gs_decode_nb_n1_mode_drx_parameters(®istration_request->requested_nb_n1_mode_drx_parameters, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_nb_n1_mode_drx_parameters() failed"); + return size; + } + + registration_request->presencemask |= OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_NB_N1_MODE_DRX_PARAMETERS_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REQUEST_UE_REQUEST_TYPE_TYPE: + size = ogs_nas_5gs_decode_ue_request_type(®istration_request->ue_request_type, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_ue_request_type() failed"); + return size; + } + + registration_request->presencemask |= OGS_NAS_5GS_REGISTRATION_REQUEST_UE_REQUEST_TYPE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REQUEST_PAGING_RESTRICTION_TYPE: + size = ogs_nas_5gs_decode_paging_restriction(®istration_request->paging_restriction, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_paging_restriction() failed"); + return size; + } + + registration_request->presencemask |= OGS_NAS_5GS_REGISTRATION_REQUEST_PAGING_RESTRICTION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_service_level_aa_container(®istration_request->service_level_aa_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_service_level_aa_container() failed"); + return size; + } + + registration_request->presencemask |= OGS_NAS_5GS_REGISTRATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REQUEST_NID_TYPE: + size = ogs_nas_5gs_decode_nid(®istration_request->nid, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_nid() failed"); + return size; + } + + registration_request->presencemask |= OGS_NAS_5GS_REGISTRATION_REQUEST_NID_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REQUEST_MS_DETERMINED_PLMN_WITH_DISASTER_CONDITION_TYPE: + size = ogs_nas_5gs_decode_plmn_identity(®istration_request->ms_determined_plmn_with_disaster_condition, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_plmn_identity() failed"); + return size; + } + + registration_request->presencemask |= OGS_NAS_5GS_REGISTRATION_REQUEST_MS_DETERMINED_PLMN_WITH_DISASTER_CONDITION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_PEIPS_ASSISTANCE_INFORMATION_TYPE: + size = ogs_nas_5gs_decode_peips_assistance_information(®istration_request->requested_peips_assistance_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_peips_assistance_information() failed"); + return size; + } + + registration_request->presencemask |= OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_PEIPS_ASSISTANCE_INFORMATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_T3512_VALUE_TYPE: + size = ogs_nas_5gs_decode_gprs_timer_3(®istration_request->requested_t3512_value, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_gprs_timer_3() failed"); + return size; + } + + registration_request->presencemask |= OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_T3512_VALUE_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -757,9 +837,9 @@ int ogs_nas_5gs_decode_registration_accept(ogs_nas_5gs_message_t *message, ogs_p decoded += size; break; case OGS_NAS_5GS_REGISTRATION_ACCEPT_T3448_VALUE_TYPE: - size = ogs_nas_5gs_decode_gprs_timer_3(®istration_accept->t3448_value, pkbuf); + size = ogs_nas_5gs_decode_gprs_timer_2(®istration_accept->t3448_value, pkbuf); if (size < 0) { - ogs_error("ogs_nas_5gs_decode_gprs_timer_3() failed"); + ogs_error("ogs_nas_5gs_decode_gprs_timer_2() failed"); return size; } @@ -848,6 +928,138 @@ int ogs_nas_5gs_decode_registration_accept(ogs_nas_5gs_message_t *message, ogs_p registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_PRESENT; decoded += size; break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_NB_N1_MODE_DRX_PARAMETERS_TYPE: + size = ogs_nas_5gs_decode_nb_n1_mode_drx_parameters(®istration_accept->negotiated_nb_n1_mode_drx_parameters, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_nb_n1_mode_drx_parameters() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_NB_N1_MODE_DRX_PARAMETERS_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_REJECTED_NSSAI_TYPE: + size = ogs_nas_5gs_decode_extended_rejected_nssai(®istration_accept->extended_rejected_nssai, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_extended_rejected_nssai() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_REJECTED_NSSAI_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_service_level_aa_container(®istration_accept->service_level_aa_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_service_level_aa_container() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_PEIPS_ASSISTANCE_INFORMATION_TYPE: + size = ogs_nas_5gs_decode_peips_assistance_information(®istration_accept->negotiated_peips_assistance_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_peips_assistance_information() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_PEIPS_ASSISTANCE_INFORMATION_PRESENT; + decoded += size; + break; +#if 0 /* Modified by acetcom */ + case OGS_NAS_5GS_REGISTRATION_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_TYPE: + size = ogs_nas_5gs_decode_5gs_additional_request_result(®istration_accept->additional_request_result, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_additional_request_result() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_PRESENT; + decoded += size; + break; +#endif + case OGS_NAS_5GS_REGISTRATION_ACCEPT_NSSRG_INFORMATION_TYPE: + size = ogs_nas_5gs_decode_nssrg_information(®istration_accept->nssrg_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_nssrg_information() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_NSSRG_INFORMATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_ROAMING_WAIT_RANGE_TYPE: + size = ogs_nas_5gs_decode_registration_wait_range(®istration_accept->disaster_roaming_wait_range, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_registration_wait_range() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_ROAMING_WAIT_RANGE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_RETURN_WAIT_RANGE_TYPE: + size = ogs_nas_5gs_decode_registration_wait_range(®istration_accept->disaster_return_wait_range, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_registration_wait_range() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_RETURN_WAIT_RANGE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_TYPE: + size = ogs_nas_5gs_decode_list_of_plmns_to_be_used_in_disaster_condition(®istration_accept->list_of_plmns_to_be_used_in_disaster_condition, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_list_of_plmns_to_be_used_in_disaster_condition() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_5gs_decode_5gs_tracking_area_identity_list(®istration_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_tracking_area_identity_list() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_5gs_decode_5gs_tracking_area_identity_list(®istration_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_tracking_area_identity_list() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_CAG_INFORMATION_LIST_TYPE: + size = ogs_nas_5gs_decode_extended_cag_information_list(®istration_accept->extended_cag_information_list, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_extended_cag_information_list() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_CAG_INFORMATION_LIST_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_ACCEPT_NSAG_INFORMATION_TYPE: + size = ogs_nas_5gs_decode_nsag_information(®istration_accept->nsag_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_nsag_information() failed"); + return size; + } + + registration_accept->presencemask |= OGS_NAS_5GS_REGISTRATION_ACCEPT_NSAG_INFORMATION_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -964,6 +1176,76 @@ int ogs_nas_5gs_decode_registration_reject(ogs_nas_5gs_message_t *message, ogs_p registration_reject->presencemask |= OGS_NAS_5GS_REGISTRATION_REJECT_REJECTED_NSSAI_PRESENT; decoded += size; break; + case OGS_NAS_5GS_REGISTRATION_REJECT_CAG_INFORMATION_LIST_TYPE: + size = ogs_nas_5gs_decode_cag_information_list(®istration_reject->cag_information_list, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_cag_information_list() failed"); + return size; + } + + registration_reject->presencemask |= OGS_NAS_5GS_REGISTRATION_REJECT_CAG_INFORMATION_LIST_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_REJECTED_NSSAI_TYPE: + size = ogs_nas_5gs_decode_extended_rejected_nssai(®istration_reject->extended_rejected_nssai, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_extended_rejected_nssai() failed"); + return size; + } + + registration_reject->presencemask |= OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_REJECTED_NSSAI_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REJECT_DISASTER_RETURN_WAIT_RANGE_TYPE: + size = ogs_nas_5gs_decode_registration_wait_range(®istration_reject->disaster_return_wait_range, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_registration_wait_range() failed"); + return size; + } + + registration_reject->presencemask |= OGS_NAS_5GS_REGISTRATION_REJECT_DISASTER_RETURN_WAIT_RANGE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_CAG_INFORMATION_LIST_TYPE: + size = ogs_nas_5gs_decode_extended_cag_information_list(®istration_reject->extended_cag_information_list, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_extended_cag_information_list() failed"); + return size; + } + + registration_reject->presencemask |= OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_CAG_INFORMATION_LIST_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE: + size = ogs_nas_5gs_decode_gprs_timer_3(®istration_reject->lower_bound_timer_value, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_gprs_timer_3() failed"); + return size; + } + + registration_reject->presencemask |= OGS_NAS_5GS_REGISTRATION_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_5gs_decode_5gs_tracking_area_identity_list(®istration_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_tracking_area_identity_list() failed"); + return size; + } + + registration_reject->presencemask |= OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_5gs_decode_5gs_tracking_area_identity_list(®istration_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_tracking_area_identity_list() failed"); + return size; + } + + registration_reject->presencemask |= OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -1058,6 +1340,76 @@ int ogs_nas_5gs_decode_deregistration_request_to_ue(ogs_nas_5gs_message_t *messa deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_PRESENT; decoded += size; break; + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_CAG_INFORMATION_LIST_TYPE: + size = ogs_nas_5gs_decode_cag_information_list(&deregistration_request_to_ue->cag_information_list, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_cag_information_list() failed"); + return size; + } + + deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_CAG_INFORMATION_LIST_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_REJECTED_NSSAI_TYPE: + size = ogs_nas_5gs_decode_extended_rejected_nssai(&deregistration_request_to_ue->extended_rejected_nssai, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_extended_rejected_nssai() failed"); + return size; + } + + deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_REJECTED_NSSAI_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_DISASTER_RETURN_WAIT_RANGE_TYPE: + size = ogs_nas_5gs_decode_registration_wait_range(&deregistration_request_to_ue->disaster_return_wait_range, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_registration_wait_range() failed"); + return size; + } + + deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_DISASTER_RETURN_WAIT_RANGE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_CAG_INFORMATION_LIST_TYPE: + size = ogs_nas_5gs_decode_extended_cag_information_list(&deregistration_request_to_ue->extended_cag_information_list, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_extended_cag_information_list() failed"); + return size; + } + + deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_CAG_INFORMATION_LIST_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_LOWER_BOUND_TIMER_VALUE_TYPE: + size = ogs_nas_5gs_decode_gprs_timer_3(&deregistration_request_to_ue->lower_bound_timer_value, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_gprs_timer_3() failed"); + return size; + } + + deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_LOWER_BOUND_TIMER_VALUE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_5gs_decode_5gs_tracking_area_identity_list(&deregistration_request_to_ue->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_tracking_area_identity_list() failed"); + return size; + } + + deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_5gs_decode_5gs_tracking_area_identity_list(&deregistration_request_to_ue->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_tracking_area_identity_list() failed"); + return size; + } + + deregistration_request_to_ue->presencemask |= OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -1143,6 +1495,26 @@ int ogs_nas_5gs_decode_service_request(ogs_nas_5gs_message_t *message, ogs_pkbuf service_request->presencemask |= OGS_NAS_5GS_SERVICE_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT; decoded += size; break; + case OGS_NAS_5GS_SERVICE_REQUEST_UE_REQUEST_TYPE_TYPE: + size = ogs_nas_5gs_decode_ue_request_type(&service_request->ue_request_type, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_ue_request_type() failed"); + return size; + } + + service_request->presencemask |= OGS_NAS_5GS_SERVICE_REQUEST_UE_REQUEST_TYPE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_SERVICE_REQUEST_PAGING_RESTRICTION_TYPE: + size = ogs_nas_5gs_decode_paging_restriction(&service_request->paging_restriction, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_paging_restriction() failed"); + return size; + } + + service_request->presencemask |= OGS_NAS_5GS_SERVICE_REQUEST_PAGING_RESTRICTION_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -1211,13 +1583,73 @@ int ogs_nas_5gs_decode_service_reject(ogs_nas_5gs_message_t *message, ogs_pkbuf_ decoded += size; break; case OGS_NAS_5GS_SERVICE_REJECT_T3448_VALUE_TYPE: - size = ogs_nas_5gs_decode_gprs_timer_3(&service_reject->t3448_value, pkbuf); + size = ogs_nas_5gs_decode_gprs_timer_2(&service_reject->t3448_value, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_gprs_timer_2() failed"); + return size; + } + + service_reject->presencemask |= OGS_NAS_5GS_SERVICE_REJECT_T3448_VALUE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_SERVICE_REJECT_CAG_INFORMATION_LIST_TYPE: + size = ogs_nas_5gs_decode_cag_information_list(&service_reject->cag_information_list, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_cag_information_list() failed"); + return size; + } + + service_reject->presencemask |= OGS_NAS_5GS_SERVICE_REJECT_CAG_INFORMATION_LIST_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_SERVICE_REJECT_DISASTER_RETURN_WAIT_RANGE_TYPE: + size = ogs_nas_5gs_decode_registration_wait_range(&service_reject->disaster_return_wait_range, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_registration_wait_range() failed"); + return size; + } + + service_reject->presencemask |= OGS_NAS_5GS_SERVICE_REJECT_DISASTER_RETURN_WAIT_RANGE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_SERVICE_REJECT_EXTENDED_CAG_INFORMATION_LIST_TYPE: + size = ogs_nas_5gs_decode_extended_cag_information_list(&service_reject->extended_cag_information_list, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_extended_cag_information_list() failed"); + return size; + } + + service_reject->presencemask |= OGS_NAS_5GS_SERVICE_REJECT_EXTENDED_CAG_INFORMATION_LIST_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE: + size = ogs_nas_5gs_decode_gprs_timer_3(&service_reject->lower_bound_timer_value, pkbuf); if (size < 0) { ogs_error("ogs_nas_5gs_decode_gprs_timer_3() failed"); return size; } - service_reject->presencemask |= OGS_NAS_5GS_SERVICE_REJECT_T3448_VALUE_PRESENT; + service_reject->presencemask |= OGS_NAS_5GS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_5gs_decode_5gs_tracking_area_identity_list(&service_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_tracking_area_identity_list() failed"); + return size; + } + + service_reject->presencemask |= OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_5gs_decode_5gs_tracking_area_identity_list(&service_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_tracking_area_identity_list() failed"); + return size; + } + + service_reject->presencemask |= OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; decoded += size; break; default: @@ -1290,15 +1722,45 @@ int ogs_nas_5gs_decode_service_accept(ogs_nas_5gs_message_t *message, ogs_pkbuf_ decoded += size; break; case OGS_NAS_5GS_SERVICE_ACCEPT_T3448_VALUE_TYPE: - size = ogs_nas_5gs_decode_gprs_timer_3(&service_accept->t3448_value, pkbuf); + size = ogs_nas_5gs_decode_gprs_timer_2(&service_accept->t3448_value, pkbuf); if (size < 0) { - ogs_error("ogs_nas_5gs_decode_gprs_timer_3() failed"); + ogs_error("ogs_nas_5gs_decode_gprs_timer_2() failed"); return size; } service_accept->presencemask |= OGS_NAS_5GS_SERVICE_ACCEPT_T3448_VALUE_PRESENT; decoded += size; break; + case OGS_NAS_5GS_SERVICE_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_TYPE: + size = ogs_nas_5gs_decode_5gs_additional_request_result(&service_accept->additional_request_result, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_additional_request_result() failed"); + return size; + } + + service_accept->presencemask |= OGS_NAS_5GS_SERVICE_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_5gs_decode_5gs_tracking_area_identity_list(&service_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_tracking_area_identity_list() failed"); + return size; + } + + service_accept->presencemask |= OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_5gs_decode_5gs_tracking_area_identity_list(&service_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gs_tracking_area_identity_list() failed"); + return size; + } + + service_accept->presencemask |= OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -1568,6 +2030,120 @@ int ogs_nas_5gs_decode_configuration_update_command(ogs_nas_5gs_message_t *messa configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_TRUNCATED_5G_S_TMSI_CONFIGURATION_PRESENT; decoded += size; break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_ADDITIONAL_CONFIGURATION_INDICATION_TYPE: + decoded--; + ogs_assert(ogs_pkbuf_push(pkbuf, 1)); + size = ogs_nas_5gs_decode_additional_configuration_indication(&configuration_update_command->additional_configuration_indication, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_additional_configuration_indication() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_ADDITIONAL_CONFIGURATION_INDICATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_REJECTED_NSSAI_TYPE: + size = ogs_nas_5gs_decode_extended_rejected_nssai(&configuration_update_command->extended_rejected_nssai, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_extended_rejected_nssai() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_REJECTED_NSSAI_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_service_level_aa_container(&configuration_update_command->service_level_aa_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_service_level_aa_container() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSSRG_INFORMATION_TYPE: + size = ogs_nas_5gs_decode_nssrg_information(&configuration_update_command->nssrg_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_nssrg_information() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSSRG_INFORMATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_ROAMING_WAIT_RANGE_TYPE: + size = ogs_nas_5gs_decode_registration_wait_range(&configuration_update_command->disaster_roaming_wait_range, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_registration_wait_range() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_ROAMING_WAIT_RANGE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_RETURN_WAIT_RANGE_TYPE: + size = ogs_nas_5gs_decode_registration_wait_range(&configuration_update_command->disaster_return_wait_range, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_registration_wait_range() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_RETURN_WAIT_RANGE_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_TYPE: + size = ogs_nas_5gs_decode_list_of_plmns_to_be_used_in_disaster_condition(&configuration_update_command->list_of_plmns_to_be_used_in_disaster_condition, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_list_of_plmns_to_be_used_in_disaster_condition() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_CAG_INFORMATION_LIST_TYPE: + size = ogs_nas_5gs_decode_extended_cag_information_list(&configuration_update_command->extended_cag_information_list, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_extended_cag_information_list() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_CAG_INFORMATION_LIST_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UPDATED_PEIPS_ASSISTANCE_INFORMATION_TYPE: + size = ogs_nas_5gs_decode_peips_assistance_information(&configuration_update_command->updated_peips_assistance_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_peips_assistance_information() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UPDATED_PEIPS_ASSISTANCE_INFORMATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSAG_INFORMATION_TYPE: + size = ogs_nas_5gs_decode_nsag_information(&configuration_update_command->nsag_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_nsag_information() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSAG_INFORMATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_PRIORITY_INDICATOR_TYPE: + decoded--; + ogs_assert(ogs_pkbuf_push(pkbuf, 1)); + size = ogs_nas_5gs_decode_priority_indicator(&configuration_update_command->priority_indicator, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_priority_indicator() failed"); + return size; + } + + configuration_update_command->presencemask |= OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_PRIORITY_INDICATOR_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -2357,6 +2933,16 @@ int ogs_nas_5gs_decode_dl_nas_transport(ogs_nas_5gs_message_t *message, ogs_pkbu dl_nas_transport->presencemask |= OGS_NAS_5GS_DL_NAS_TRANSPORT_BACK_OFF_TIMER_VALUE_PRESENT; decoded += size; break; + case OGS_NAS_5GS_DL_NAS_TRANSPORT_LOWER_BOUND_TIMER_VALUE_TYPE: + size = ogs_nas_5gs_decode_gprs_timer_3(&dl_nas_transport->lower_bound_timer_value, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_gprs_timer_3() failed"); + return size; + } + + dl_nas_transport->presencemask |= OGS_NAS_5GS_DL_NAS_TRANSPORT_LOWER_BOUND_TIMER_VALUE_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -2470,14 +3056,14 @@ int ogs_nas_5gs_decode_pdu_session_establishment_request(ogs_nas_5gs_message_t * pdu_session_establishment_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT; decoded += size; break; - case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_HEADER_COMPRESSION_CONFIGURATION_TYPE: - size = ogs_nas_5gs_decode_header_compression_configuration(&pdu_session_establishment_request->header_compression_configuration, pkbuf); + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE: + size = ogs_nas_5gs_decode_ip_header_compression_configuration(&pdu_session_establishment_request->ip_header_compression_configuration, pkbuf); if (size < 0) { - ogs_error("ogs_nas_5gs_decode_header_compression_configuration() failed"); + ogs_error("ogs_nas_5gs_decode_ip_header_compression_configuration() failed"); return size; } - pdu_session_establishment_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT; + pdu_session_establishment_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT; decoded += size; break; case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_DS_TT_ETHERNET_PORT_MAC_ADDRESS_TYPE: @@ -2510,6 +3096,66 @@ int ogs_nas_5gs_decode_pdu_session_establishment_request(ogs_nas_5gs_message_t * pdu_session_establishment_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PORT_MANAGEMENT_INFORMATION_CONTAINER_PRESENT; decoded += size; break; + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE: + size = ogs_nas_5gs_decode_ethernet_header_compression_configuration(&pdu_session_establishment_request->ethernet_header_compression_configuration, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_ethernet_header_compression_configuration() failed"); + return size; + } + + pdu_session_establishment_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SUGGESTED_INTERFACE_IDENTIFIER_TYPE: + size = ogs_nas_5gs_decode_pdu_address(&pdu_session_establishment_request->suggested_interface_identifier, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_pdu_address() failed"); + return size; + } + + pdu_session_establishment_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SUGGESTED_INTERFACE_IDENTIFIER_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SERVICE_LEVEL_AA_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_service_level_aa_container(&pdu_session_establishment_request->service_level_aa_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_service_level_aa_container() failed"); + return size; + } + + pdu_session_establishment_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SERVICE_LEVEL_AA_CONTAINER_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_REQUESTED_MBS_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_requested_mbs_container(&pdu_session_establishment_request->requested_mbs_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_requested_mbs_container() failed"); + return size; + } + + pdu_session_establishment_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_REQUESTED_MBS_CONTAINER_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PDU_SESSION_PAIR_ID_TYPE: + size = ogs_nas_5gs_decode_pdu_session_pair_id(&pdu_session_establishment_request->pdu_session_pair_id, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_pdu_session_pair_id() failed"); + return size; + } + + pdu_session_establishment_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PDU_SESSION_PAIR_ID_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_RSN_TYPE: + size = ogs_nas_5gs_decode_rsn(&pdu_session_establishment_request->rsn, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_rsn() failed"); + return size; + } + + pdu_session_establishment_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_RSN_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -2707,14 +3353,44 @@ int ogs_nas_5gs_decode_pdu_session_establishment_accept(ogs_nas_5gs_message_t *m pdu_session_establishment_accept->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_CONTROL_PLANE_ONLY_INDICATION_PRESENT; decoded += size; break; - case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_HEADER_COMPRESSION_CONFIGURATION_TYPE: - size = ogs_nas_5gs_decode_header_compression_configuration(&pdu_session_establishment_accept->header_compression_configuration, pkbuf); + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE: + size = ogs_nas_5gs_decode_ip_header_compression_configuration(&pdu_session_establishment_accept->ip_header_compression_configuration, pkbuf); if (size < 0) { - ogs_error("ogs_nas_5gs_decode_header_compression_configuration() failed"); + ogs_error("ogs_nas_5gs_decode_ip_header_compression_configuration() failed"); return size; } - pdu_session_establishment_accept->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_HEADER_COMPRESSION_CONFIGURATION_PRESENT; + pdu_session_establishment_accept->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE: + size = ogs_nas_5gs_decode_ethernet_header_compression_configuration(&pdu_session_establishment_accept->ethernet_header_compression_configuration, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_ethernet_header_compression_configuration() failed"); + return size; + } + + pdu_session_establishment_accept->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_service_level_aa_container(&pdu_session_establishment_accept->service_level_aa_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_service_level_aa_container() failed"); + return size; + } + + pdu_session_establishment_accept->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_RECEIVED_MBS_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_received_mbs_container(&pdu_session_establishment_accept->received_mbs_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_received_mbs_container() failed"); + return size; + } + + pdu_session_establishment_accept->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_RECEIVED_MBS_CONTAINER_PRESENT; decoded += size; break; default: @@ -2786,6 +3462,16 @@ int ogs_nas_5gs_decode_pdu_session_establishment_reject(ogs_nas_5gs_message_t *m pdu_session_establishment_reject->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_EAP_MESSAGE_PRESENT; decoded += size; break; + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE: + size = ogs_nas_5gs_decode_5gsm_congestion_re_attempt_indicator(&pdu_session_establishment_reject->gsm_congestion_re_attempt_indicator, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gsm_congestion_re_attempt_indicator() failed"); + return size; + } + + pdu_session_establishment_reject->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT; + decoded += size; + break; case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE: size = ogs_nas_5gs_decode_extended_protocol_configuration_options(&pdu_session_establishment_reject->extended_protocol_configuration_options, pkbuf); if (size < 0) { @@ -2806,14 +3492,14 @@ int ogs_nas_5gs_decode_pdu_session_establishment_reject(ogs_nas_5gs_message_t *m pdu_session_establishment_reject->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_RE_ATTEMPT_INDICATOR_PRESENT; decoded += size; break; - case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE: - size = ogs_nas_5gs_decode_5gsm_congestion_re_attempt_indicator(&pdu_session_establishment_reject->gsm_congestion_re_attempt_indicator, pkbuf); + case OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_SERVICE_LEVEL_AA_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_service_level_aa_container(&pdu_session_establishment_reject->service_level_aa_container, pkbuf); if (size < 0) { - ogs_error("ogs_nas_5gs_decode_5gsm_congestion_re_attempt_indicator() failed"); + ogs_error("ogs_nas_5gs_decode_service_level_aa_container() failed"); return size; } - pdu_session_establishment_reject->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT; + pdu_session_establishment_reject->presencemask |= OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_SERVICE_LEVEL_AA_CONTAINER_PRESENT; decoded += size; break; default: @@ -3090,14 +3776,44 @@ int ogs_nas_5gs_decode_pdu_session_modification_request(ogs_nas_5gs_message_t *m pdu_session_modification_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_PORT_MANAGEMENT_INFORMATION_CONTAINER_PRESENT; decoded += size; break; - case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_HEADER_COMPRESSION_CONFIGURATION_TYPE: - size = ogs_nas_5gs_decode_header_compression_configuration(&pdu_session_modification_request->header_compression_configuration, pkbuf); + case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE: + size = ogs_nas_5gs_decode_header_compression_configuration(&pdu_session_modification_request->ip_header_compression_configuration, pkbuf); if (size < 0) { ogs_error("ogs_nas_5gs_decode_header_compression_configuration() failed"); return size; } - pdu_session_modification_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT; + pdu_session_modification_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE: + size = ogs_nas_5gs_decode_ethernet_header_compression_configuration(&pdu_session_modification_request->ethernet_header_compression_configuration, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_ethernet_header_compression_configuration() failed"); + return size; + } + + pdu_session_modification_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_REQUESTED_MBS_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_requested_mbs_container(&pdu_session_modification_request->requested_mbs_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_requested_mbs_container() failed"); + return size; + } + + pdu_session_modification_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_REQUESTED_MBS_CONTAINER_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_service_level_aa_container(&pdu_session_modification_request->service_level_aa_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_service_level_aa_container() failed"); + return size; + } + + pdu_session_modification_request->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_PRESENT; decoded += size; break; default: @@ -3147,6 +3863,16 @@ int ogs_nas_5gs_decode_pdu_session_modification_reject(ogs_nas_5gs_message_t *me pdu_session_modification_reject->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_BACK_OFF_TIMER_VALUE_PRESENT; decoded += size; break; + case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE: + size = ogs_nas_5gs_decode_5gsm_congestion_re_attempt_indicator(&pdu_session_modification_reject->gsm_congestion_re_attempt_indicator, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_5gsm_congestion_re_attempt_indicator() failed"); + return size; + } + + pdu_session_modification_reject->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT; + decoded += size; + break; case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE: size = ogs_nas_5gs_decode_extended_protocol_configuration_options(&pdu_session_modification_reject->extended_protocol_configuration_options, pkbuf); if (size < 0) { @@ -3167,16 +3893,6 @@ int ogs_nas_5gs_decode_pdu_session_modification_reject(ogs_nas_5gs_message_t *me pdu_session_modification_reject->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_RE_ATTEMPT_INDICATOR_PRESENT; decoded += size; break; - case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE: - size = ogs_nas_5gs_decode_5gsm_congestion_re_attempt_indicator(&pdu_session_modification_reject->gsm_congestion_re_attempt_indicator, pkbuf); - if (size < 0) { - ogs_error("ogs_nas_5gs_decode_5gsm_congestion_re_attempt_indicator() failed"); - return size; - } - - pdu_session_modification_reject->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT; - decoded += size; - break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -3298,14 +4014,14 @@ int ogs_nas_5gs_decode_pdu_session_modification_command(ogs_nas_5gs_message_t *m pdu_session_modification_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_ATSSS_CONTAINER_PRESENT; decoded += size; break; - case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_HEADER_COMPRESSION_CONFIGURATION_TYPE: - size = ogs_nas_5gs_decode_header_compression_configuration(&pdu_session_modification_command->header_compression_configuration, pkbuf); + case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE: + size = ogs_nas_5gs_decode_ip_header_compression_configuration(&pdu_session_modification_command->ip_header_compression_configuration, pkbuf); if (size < 0) { - ogs_error("ogs_nas_5gs_decode_header_compression_configuration() failed"); + ogs_error("ogs_nas_5gs_decode_ip_header_compression_configuration() failed"); return size; } - pdu_session_modification_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_HEADER_COMPRESSION_CONFIGURATION_PRESENT; + pdu_session_modification_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT; decoded += size; break; case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_PORT_MANAGEMENT_INFORMATION_CONTAINER_TYPE: @@ -3328,6 +4044,36 @@ int ogs_nas_5gs_decode_pdu_session_modification_command(ogs_nas_5gs_message_t *m pdu_session_modification_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_SERVING_PLMN_RATE_CONTROL_PRESENT; decoded += size; break; + case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE: + size = ogs_nas_5gs_decode_ethernet_header_compression_configuration(&pdu_session_modification_command->ethernet_header_compression_configuration, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_ethernet_header_compression_configuration() failed"); + return size; + } + + pdu_session_modification_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_RECEIVED_MBS_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_received_mbs_container(&pdu_session_modification_command->received_mbs_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_received_mbs_container() failed"); + return size; + } + + pdu_session_modification_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_RECEIVED_MBS_CONTAINER_PRESENT; + decoded += size; + break; + case OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_SERVICE_LEVEL_AA_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_service_level_aa_container(&pdu_session_modification_command->service_level_aa_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_service_level_aa_container() failed"); + return size; + } + + pdu_session_modification_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_SERVICE_LEVEL_AA_CONTAINER_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; @@ -3609,6 +4355,16 @@ int ogs_nas_5gs_decode_pdu_session_release_command(ogs_nas_5gs_message_t *messag pdu_session_release_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_ACCESS_TYPE_PRESENT; decoded += size; break; + case OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_TYPE: + size = ogs_nas_5gs_decode_service_level_aa_container(&pdu_session_release_command->service_level_aa_container, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_5gs_decode_service_level_aa_container() failed"); + return size; + } + + pdu_session_release_command->presencemask |= OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_PRESENT; + decoded += size; + break; default: ogs_error("Unknown type(0x%x) or not implemented\n", type); break; diff --git a/lib/nas/5gs/encoder.c b/lib/nas/5gs/encoder.c index 3058a54df..000ca7136 100644 --- a/lib/nas/5gs/encoder.c +++ b/lib/nas/5gs/encoder.c @@ -1,7 +1,7 @@ /* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -28,8 +28,8 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.2.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-07-11 07:09:47.188485 by ubuntu - * from 24501-g41.docx + * Created on: 2023-03-04 20:50:00.898995 by acetcom + * from 24501-h90.docx ******************************************************************************/ #include "ogs-nas-5gs.h" @@ -384,13 +384,93 @@ int ogs_nas_5gs_encode_registration_request(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_mess } if (registration_request->presencemask & OGS_NAS_5GS_REGISTRATION_REQUEST_N5GC_INDICATION_PRESENT) { - registration_request->n5gc_indication.type = OGS_NAS_5GS_REGISTRATION_REQUEST_N5GC_INDICATION_TYPE; + registration_request->n5gc_indication.type = (OGS_NAS_5GS_REGISTRATION_REQUEST_N5GC_INDICATION_TYPE >> 4); size = ogs_nas_5gs_encode_n5gc_indication(pkbuf, ®istration_request->n5gc_indication); ogs_assert(size >= 0); encoded += size; } + if (registration_request->presencemask & OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_NB_N1_MODE_DRX_PARAMETERS_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_NB_N1_MODE_DRX_PARAMETERS_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_nb_n1_mode_drx_parameters(pkbuf, ®istration_request->requested_nb_n1_mode_drx_parameters); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_request->presencemask & OGS_NAS_5GS_REGISTRATION_REQUEST_UE_REQUEST_TYPE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REQUEST_UE_REQUEST_TYPE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_ue_request_type(pkbuf, ®istration_request->ue_request_type); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_request->presencemask & OGS_NAS_5GS_REGISTRATION_REQUEST_PAGING_RESTRICTION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REQUEST_PAGING_RESTRICTION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_paging_restriction(pkbuf, ®istration_request->paging_restriction); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_request->presencemask & OGS_NAS_5GS_REGISTRATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_service_level_aa_container(pkbuf, ®istration_request->service_level_aa_container); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_request->presencemask & OGS_NAS_5GS_REGISTRATION_REQUEST_NID_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REQUEST_NID_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_nid(pkbuf, ®istration_request->nid); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_request->presencemask & OGS_NAS_5GS_REGISTRATION_REQUEST_MS_DETERMINED_PLMN_WITH_DISASTER_CONDITION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REQUEST_MS_DETERMINED_PLMN_WITH_DISASTER_CONDITION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_plmn_identity(pkbuf, ®istration_request->ms_determined_plmn_with_disaster_condition); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_request->presencemask & OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_PEIPS_ASSISTANCE_INFORMATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_PEIPS_ASSISTANCE_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_peips_assistance_information(pkbuf, ®istration_request->requested_peips_assistance_information); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_request->presencemask & OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_T3512_VALUE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_T3512_VALUE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_gprs_timer_3(pkbuf, ®istration_request->requested_t3512_value); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -683,7 +763,7 @@ int ogs_nas_5gs_encode_registration_accept(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_messa ogs_assert(size >= 0); encoded += size; - size = ogs_nas_5gs_encode_gprs_timer_3(pkbuf, ®istration_accept->t3448_value); + size = ogs_nas_5gs_encode_gprs_timer_2(pkbuf, ®istration_accept->t3448_value); ogs_assert(size >= 0); encoded += size; } @@ -766,6 +846,136 @@ int ogs_nas_5gs_encode_registration_accept(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_messa encoded += size; } + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_NB_N1_MODE_DRX_PARAMETERS_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_NB_N1_MODE_DRX_PARAMETERS_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_nb_n1_mode_drx_parameters(pkbuf, ®istration_accept->negotiated_nb_n1_mode_drx_parameters); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_REJECTED_NSSAI_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_REJECTED_NSSAI_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_extended_rejected_nssai(pkbuf, ®istration_accept->extended_rejected_nssai); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_service_level_aa_container(pkbuf, ®istration_accept->service_level_aa_container); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_PEIPS_ASSISTANCE_INFORMATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_PEIPS_ASSISTANCE_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_peips_assistance_information(pkbuf, ®istration_accept->negotiated_peips_assistance_information); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_additional_request_result(pkbuf, ®istration_accept->additional_request_result); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_NSSRG_INFORMATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_NSSRG_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_nssrg_information(pkbuf, ®istration_accept->nssrg_information); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_ROAMING_WAIT_RANGE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_ROAMING_WAIT_RANGE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_registration_wait_range(pkbuf, ®istration_accept->disaster_roaming_wait_range); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_RETURN_WAIT_RANGE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_RETURN_WAIT_RANGE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_registration_wait_range(pkbuf, ®istration_accept->disaster_return_wait_range); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_list_of_plmns_to_be_used_in_disaster_condition(pkbuf, ®istration_accept->list_of_plmns_to_be_used_in_disaster_condition); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_tracking_area_identity_list(pkbuf, ®istration_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_tracking_area_identity_list(pkbuf, ®istration_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_CAG_INFORMATION_LIST_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_CAG_INFORMATION_LIST_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_extended_cag_information_list(pkbuf, ®istration_accept->extended_cag_information_list); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_accept->presencemask & OGS_NAS_5GS_REGISTRATION_ACCEPT_NSAG_INFORMATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_ACCEPT_NSAG_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_nsag_information(pkbuf, ®istration_accept->nsag_information); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -842,6 +1052,76 @@ int ogs_nas_5gs_encode_registration_reject(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_messa encoded += size; } + if (registration_reject->presencemask & OGS_NAS_5GS_REGISTRATION_REJECT_CAG_INFORMATION_LIST_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REJECT_CAG_INFORMATION_LIST_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_cag_information_list(pkbuf, ®istration_reject->cag_information_list); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_reject->presencemask & OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_REJECTED_NSSAI_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_REJECTED_NSSAI_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_extended_rejected_nssai(pkbuf, ®istration_reject->extended_rejected_nssai); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_reject->presencemask & OGS_NAS_5GS_REGISTRATION_REJECT_DISASTER_RETURN_WAIT_RANGE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REJECT_DISASTER_RETURN_WAIT_RANGE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_registration_wait_range(pkbuf, ®istration_reject->disaster_return_wait_range); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_reject->presencemask & OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_CAG_INFORMATION_LIST_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_CAG_INFORMATION_LIST_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_extended_cag_information_list(pkbuf, ®istration_reject->extended_cag_information_list); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_reject->presencemask & OGS_NAS_5GS_REGISTRATION_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_gprs_timer_3(pkbuf, ®istration_reject->lower_bound_timer_value); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_reject->presencemask & OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_tracking_area_identity_list(pkbuf, ®istration_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (registration_reject->presencemask & OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_tracking_area_identity_list(pkbuf, ®istration_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -906,6 +1186,76 @@ int ogs_nas_5gs_encode_deregistration_request_to_ue(ogs_pkbuf_t *pkbuf, ogs_nas_ encoded += size; } + if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_CAG_INFORMATION_LIST_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_CAG_INFORMATION_LIST_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_cag_information_list(pkbuf, &deregistration_request_to_ue->cag_information_list); + ogs_assert(size >= 0); + encoded += size; + } + + if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_REJECTED_NSSAI_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_REJECTED_NSSAI_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_extended_rejected_nssai(pkbuf, &deregistration_request_to_ue->extended_rejected_nssai); + ogs_assert(size >= 0); + encoded += size; + } + + if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_DISASTER_RETURN_WAIT_RANGE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_DISASTER_RETURN_WAIT_RANGE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_registration_wait_range(pkbuf, &deregistration_request_to_ue->disaster_return_wait_range); + ogs_assert(size >= 0); + encoded += size; + } + + if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_CAG_INFORMATION_LIST_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_CAG_INFORMATION_LIST_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_extended_cag_information_list(pkbuf, &deregistration_request_to_ue->extended_cag_information_list); + ogs_assert(size >= 0); + encoded += size; + } + + if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_LOWER_BOUND_TIMER_VALUE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_LOWER_BOUND_TIMER_VALUE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_gprs_timer_3(pkbuf, &deregistration_request_to_ue->lower_bound_timer_value); + ogs_assert(size >= 0); + encoded += size; + } + + if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_tracking_area_identity_list(pkbuf, &deregistration_request_to_ue->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (deregistration_request_to_ue->presencemask & OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_tracking_area_identity_list(pkbuf, &deregistration_request_to_ue->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -965,6 +1315,26 @@ int ogs_nas_5gs_encode_service_request(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_message_t encoded += size; } + if (service_request->presencemask & OGS_NAS_5GS_SERVICE_REQUEST_UE_REQUEST_TYPE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_REQUEST_UE_REQUEST_TYPE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_ue_request_type(pkbuf, &service_request->ue_request_type); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_request->presencemask & OGS_NAS_5GS_SERVICE_REQUEST_PAGING_RESTRICTION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_REQUEST_PAGING_RESTRICTION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_paging_restriction(pkbuf, &service_request->paging_restriction); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -1015,7 +1385,67 @@ int ogs_nas_5gs_encode_service_reject(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_message_t ogs_assert(size >= 0); encoded += size; - size = ogs_nas_5gs_encode_gprs_timer_3(pkbuf, &service_reject->t3448_value); + size = ogs_nas_5gs_encode_gprs_timer_2(pkbuf, &service_reject->t3448_value); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_reject->presencemask & OGS_NAS_5GS_SERVICE_REJECT_CAG_INFORMATION_LIST_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_REJECT_CAG_INFORMATION_LIST_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_cag_information_list(pkbuf, &service_reject->cag_information_list); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_reject->presencemask & OGS_NAS_5GS_SERVICE_REJECT_DISASTER_RETURN_WAIT_RANGE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_REJECT_DISASTER_RETURN_WAIT_RANGE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_registration_wait_range(pkbuf, &service_reject->disaster_return_wait_range); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_reject->presencemask & OGS_NAS_5GS_SERVICE_REJECT_EXTENDED_CAG_INFORMATION_LIST_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_REJECT_EXTENDED_CAG_INFORMATION_LIST_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_extended_cag_information_list(pkbuf, &service_reject->extended_cag_information_list); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_reject->presencemask & OGS_NAS_5GS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_gprs_timer_3(pkbuf, &service_reject->lower_bound_timer_value); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_reject->presencemask & OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_tracking_area_identity_list(pkbuf, &service_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_reject->presencemask & OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_tracking_area_identity_list(pkbuf, &service_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); ogs_assert(size >= 0); encoded += size; } @@ -1076,7 +1506,37 @@ int ogs_nas_5gs_encode_service_accept(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_message_t ogs_assert(size >= 0); encoded += size; - size = ogs_nas_5gs_encode_gprs_timer_3(pkbuf, &service_accept->t3448_value); + size = ogs_nas_5gs_encode_gprs_timer_2(pkbuf, &service_accept->t3448_value); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_accept->presencemask & OGS_NAS_5GS_SERVICE_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_additional_request_result(pkbuf, &service_accept->additional_request_result); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_accept->presencemask & OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_tracking_area_identity_list(pkbuf, &service_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_accept->presencemask & OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gs_tracking_area_identity_list(pkbuf, &service_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); ogs_assert(size >= 0); encoded += size; } @@ -1312,6 +1772,112 @@ int ogs_nas_5gs_encode_configuration_update_command(ogs_pkbuf_t *pkbuf, ogs_nas_ encoded += size; } + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_ADDITIONAL_CONFIGURATION_INDICATION_PRESENT) { + configuration_update_command->additional_configuration_indication.type = (OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_ADDITIONAL_CONFIGURATION_INDICATION_TYPE >> 4); + + size = ogs_nas_5gs_encode_additional_configuration_indication(pkbuf, &configuration_update_command->additional_configuration_indication); + ogs_assert(size >= 0); + encoded += size; + } + + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_REJECTED_NSSAI_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_REJECTED_NSSAI_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_extended_rejected_nssai(pkbuf, &configuration_update_command->extended_rejected_nssai); + ogs_assert(size >= 0); + encoded += size; + } + + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_service_level_aa_container(pkbuf, &configuration_update_command->service_level_aa_container); + ogs_assert(size >= 0); + encoded += size; + } + + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSSRG_INFORMATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSSRG_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_nssrg_information(pkbuf, &configuration_update_command->nssrg_information); + ogs_assert(size >= 0); + encoded += size; + } + + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_ROAMING_WAIT_RANGE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_ROAMING_WAIT_RANGE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_registration_wait_range(pkbuf, &configuration_update_command->disaster_roaming_wait_range); + ogs_assert(size >= 0); + encoded += size; + } + + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_RETURN_WAIT_RANGE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_RETURN_WAIT_RANGE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_registration_wait_range(pkbuf, &configuration_update_command->disaster_return_wait_range); + ogs_assert(size >= 0); + encoded += size; + } + + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_list_of_plmns_to_be_used_in_disaster_condition(pkbuf, &configuration_update_command->list_of_plmns_to_be_used_in_disaster_condition); + ogs_assert(size >= 0); + encoded += size; + } + + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_CAG_INFORMATION_LIST_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_CAG_INFORMATION_LIST_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_extended_cag_information_list(pkbuf, &configuration_update_command->extended_cag_information_list); + ogs_assert(size >= 0); + encoded += size; + } + + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UPDATED_PEIPS_ASSISTANCE_INFORMATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UPDATED_PEIPS_ASSISTANCE_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_peips_assistance_information(pkbuf, &configuration_update_command->updated_peips_assistance_information); + ogs_assert(size >= 0); + encoded += size; + } + + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSAG_INFORMATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSAG_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_nsag_information(pkbuf, &configuration_update_command->nsag_information); + ogs_assert(size >= 0); + encoded += size; + } + + if (configuration_update_command->presencemask & OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_PRIORITY_INDICATOR_PRESENT) { + configuration_update_command->priority_indicator.type = (OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_PRIORITY_INDICATOR_TYPE >> 4); + + size = ogs_nas_5gs_encode_priority_indicator(pkbuf, &configuration_update_command->priority_indicator); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -1837,6 +2403,16 @@ int ogs_nas_5gs_encode_dl_nas_transport(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_message_ encoded += size; } + if (dl_nas_transport->presencemask & OGS_NAS_5GS_DL_NAS_TRANSPORT_LOWER_BOUND_TIMER_VALUE_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_DL_NAS_TRANSPORT_LOWER_BOUND_TIMER_VALUE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_gprs_timer_3(pkbuf, &dl_nas_transport->lower_bound_timer_value); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -1916,12 +2492,12 @@ int ogs_nas_5gs_encode_pdu_session_establishment_request(ogs_pkbuf_t *pkbuf, ogs encoded += size; } - if (pdu_session_establishment_request->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { - size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_HEADER_COMPRESSION_CONFIGURATION_TYPE); + if (pdu_session_establishment_request->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE); ogs_assert(size >= 0); encoded += size; - size = ogs_nas_5gs_encode_header_compression_configuration(pkbuf, &pdu_session_establishment_request->header_compression_configuration); + size = ogs_nas_5gs_encode_ip_header_compression_configuration(pkbuf, &pdu_session_establishment_request->ip_header_compression_configuration); ogs_assert(size >= 0); encoded += size; } @@ -1956,6 +2532,66 @@ int ogs_nas_5gs_encode_pdu_session_establishment_request(ogs_pkbuf_t *pkbuf, ogs encoded += size; } + if (pdu_session_establishment_request->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_ethernet_header_compression_configuration(pkbuf, &pdu_session_establishment_request->ethernet_header_compression_configuration); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_establishment_request->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SUGGESTED_INTERFACE_IDENTIFIER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SUGGESTED_INTERFACE_IDENTIFIER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_pdu_address(pkbuf, &pdu_session_establishment_request->suggested_interface_identifier); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_establishment_request->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SERVICE_LEVEL_AA_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SERVICE_LEVEL_AA_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_service_level_aa_container(pkbuf, &pdu_session_establishment_request->service_level_aa_container); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_establishment_request->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_REQUESTED_MBS_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_REQUESTED_MBS_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_requested_mbs_container(pkbuf, &pdu_session_establishment_request->requested_mbs_container); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_establishment_request->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PDU_SESSION_PAIR_ID_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PDU_SESSION_PAIR_ID_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_pdu_session_pair_id(pkbuf, &pdu_session_establishment_request->pdu_session_pair_id); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_establishment_request->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_RSN_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_RSN_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_rsn(pkbuf, &pdu_session_establishment_request->rsn); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -2115,12 +2751,42 @@ int ogs_nas_5gs_encode_pdu_session_establishment_accept(ogs_pkbuf_t *pkbuf, ogs_ encoded += size; } - if (pdu_session_establishment_accept->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { - size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_HEADER_COMPRESSION_CONFIGURATION_TYPE); + if (pdu_session_establishment_accept->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE); ogs_assert(size >= 0); encoded += size; - size = ogs_nas_5gs_encode_header_compression_configuration(pkbuf, &pdu_session_establishment_accept->header_compression_configuration); + size = ogs_nas_5gs_encode_ip_header_compression_configuration(pkbuf, &pdu_session_establishment_accept->ip_header_compression_configuration); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_establishment_accept->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_ethernet_header_compression_configuration(pkbuf, &pdu_session_establishment_accept->ethernet_header_compression_configuration); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_establishment_accept->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_service_level_aa_container(pkbuf, &pdu_session_establishment_accept->service_level_aa_container); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_establishment_accept->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_RECEIVED_MBS_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_RECEIVED_MBS_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_received_mbs_container(pkbuf, &pdu_session_establishment_accept->received_mbs_container); ogs_assert(size >= 0); encoded += size; } @@ -2168,6 +2834,16 @@ int ogs_nas_5gs_encode_pdu_session_establishment_reject(ogs_pkbuf_t *pkbuf, ogs_ encoded += size; } + if (pdu_session_establishment_reject->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gsm_congestion_re_attempt_indicator(pkbuf, &pdu_session_establishment_reject->gsm_congestion_re_attempt_indicator); + ogs_assert(size >= 0); + encoded += size; + } + if (pdu_session_establishment_reject->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT) { size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE); ogs_assert(size >= 0); @@ -2188,12 +2864,12 @@ int ogs_nas_5gs_encode_pdu_session_establishment_reject(ogs_pkbuf_t *pkbuf, ogs_ encoded += size; } - if (pdu_session_establishment_reject->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT) { - size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE); + if (pdu_session_establishment_reject->presencemask & OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_SERVICE_LEVEL_AA_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_SERVICE_LEVEL_AA_CONTAINER_TYPE); ogs_assert(size >= 0); encoded += size; - size = ogs_nas_5gs_encode_5gsm_congestion_re_attempt_indicator(pkbuf, &pdu_session_establishment_reject->gsm_congestion_re_attempt_indicator); + size = ogs_nas_5gs_encode_service_level_aa_container(pkbuf, &pdu_session_establishment_reject->service_level_aa_container); ogs_assert(size >= 0); encoded += size; } @@ -2388,12 +3064,42 @@ int ogs_nas_5gs_encode_pdu_session_modification_request(ogs_pkbuf_t *pkbuf, ogs_ encoded += size; } - if (pdu_session_modification_request->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { - size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_HEADER_COMPRESSION_CONFIGURATION_TYPE); + if (pdu_session_modification_request->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE); ogs_assert(size >= 0); encoded += size; - size = ogs_nas_5gs_encode_header_compression_configuration(pkbuf, &pdu_session_modification_request->header_compression_configuration); + size = ogs_nas_5gs_encode_header_compression_configuration(pkbuf, &pdu_session_modification_request->ip_header_compression_configuration); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_modification_request->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_ethernet_header_compression_configuration(pkbuf, &pdu_session_modification_request->ethernet_header_compression_configuration); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_modification_request->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_REQUESTED_MBS_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_REQUESTED_MBS_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_requested_mbs_container(pkbuf, &pdu_session_modification_request->requested_mbs_container); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_modification_request->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_service_level_aa_container(pkbuf, &pdu_session_modification_request->service_level_aa_container); ogs_assert(size >= 0); encoded += size; } @@ -2423,6 +3129,16 @@ int ogs_nas_5gs_encode_pdu_session_modification_reject(ogs_pkbuf_t *pkbuf, ogs_n encoded += size; } + if (pdu_session_modification_reject->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_5gsm_congestion_re_attempt_indicator(pkbuf, &pdu_session_modification_reject->gsm_congestion_re_attempt_indicator); + ogs_assert(size >= 0); + encoded += size; + } + if (pdu_session_modification_reject->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT) { size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE); ogs_assert(size >= 0); @@ -2443,16 +3159,6 @@ int ogs_nas_5gs_encode_pdu_session_modification_reject(ogs_pkbuf_t *pkbuf, ogs_n encoded += size; } - if (pdu_session_modification_reject->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT) { - size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE); - ogs_assert(size >= 0); - encoded += size; - - size = ogs_nas_5gs_encode_5gsm_congestion_re_attempt_indicator(pkbuf, &pdu_session_modification_reject->gsm_congestion_re_attempt_indicator); - ogs_assert(size >= 0); - encoded += size; - } - return encoded; } @@ -2552,12 +3258,12 @@ int ogs_nas_5gs_encode_pdu_session_modification_command(ogs_pkbuf_t *pkbuf, ogs_ encoded += size; } - if (pdu_session_modification_command->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { - size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_HEADER_COMPRESSION_CONFIGURATION_TYPE); + if (pdu_session_modification_command->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE); ogs_assert(size >= 0); encoded += size; - size = ogs_nas_5gs_encode_header_compression_configuration(pkbuf, &pdu_session_modification_command->header_compression_configuration); + size = ogs_nas_5gs_encode_ip_header_compression_configuration(pkbuf, &pdu_session_modification_command->ip_header_compression_configuration); ogs_assert(size >= 0); encoded += size; } @@ -2582,6 +3288,36 @@ int ogs_nas_5gs_encode_pdu_session_modification_command(ogs_pkbuf_t *pkbuf, ogs_ encoded += size; } + if (pdu_session_modification_command->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_ethernet_header_compression_configuration(pkbuf, &pdu_session_modification_command->ethernet_header_compression_configuration); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_modification_command->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_RECEIVED_MBS_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_RECEIVED_MBS_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_received_mbs_container(pkbuf, &pdu_session_modification_command->received_mbs_container); + ogs_assert(size >= 0); + encoded += size; + } + + if (pdu_session_modification_command->presencemask & OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_SERVICE_LEVEL_AA_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_SERVICE_LEVEL_AA_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_service_level_aa_container(pkbuf, &pdu_session_modification_command->service_level_aa_container); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -2757,6 +3493,16 @@ int ogs_nas_5gs_encode_pdu_session_release_command(ogs_pkbuf_t *pkbuf, ogs_nas_5 encoded += size; } + if (pdu_session_release_command->presencemask & OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_PRESENT) { + size = ogs_nas_5gs_encode_optional_type(pkbuf, OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_5gs_encode_service_level_aa_container(pkbuf, &pdu_session_release_command->service_level_aa_container); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } diff --git a/lib/nas/5gs/ies.c b/lib/nas/5gs/ies.c index 78180e146..ce04d556f 100644 --- a/lib/nas/5gs/ies.c +++ b/lib/nas/5gs/ies.c @@ -1,7 +1,7 @@ /* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -28,8 +28,8 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.2.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-07-11 07:09:47.151738 by ubuntu - * from 24501-g41.docx + * Created on: 2023-03-04 20:50:00.874596 by acetcom + * from 24501-h90.docx ******************************************************************************/ #include "ogs-nas-5gs.h" @@ -82,6 +82,52 @@ int ogs_nas_5gs_encode_additional_information(ogs_pkbuf_t *pkbuf, ogs_nas_additi return size; } +/* 9.11.2.10 Service-level-AA container + * O TLV-E 6-n */ +int ogs_nas_5gs_decode_service_level_aa_container(ogs_nas_service_level_aa_container_t *service_level_aa_container, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_service_level_aa_container_t *source = (ogs_nas_service_level_aa_container_t *)pkbuf->data; + + service_level_aa_container->length = be16toh(source->length); + size = service_level_aa_container->length + sizeof(service_level_aa_container->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + service_level_aa_container->buffer = pkbuf->data - size + sizeof(service_level_aa_container->length); + + ogs_trace(" SERVICE_LEVEL_AA_CONTAINER - "); + ogs_log_hexdump(OGS_LOG_TRACE, (void*)service_level_aa_container->buffer, service_level_aa_container->length); + + return size; +} + +int ogs_nas_5gs_encode_service_level_aa_container(ogs_pkbuf_t *pkbuf, ogs_nas_service_level_aa_container_t *service_level_aa_container) +{ + int size = 0; + int target; + + ogs_assert(service_level_aa_container); + ogs_assert(service_level_aa_container->buffer); + + size = sizeof(service_level_aa_container->length); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + target = htobe16(service_level_aa_container->length); + memcpy(pkbuf->data - size, &target, size); + + size = service_level_aa_container->length; + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, service_level_aa_container->buffer, size); + + ogs_trace(" SERVICE_LEVEL_AA_CONTAINER - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return service_level_aa_container->length + sizeof(service_level_aa_container->length); +} + /* 9.11.2.1A Access type * M V 1/2 */ int ogs_nas_5gs_decode_access_type(ogs_nas_access_type_t *access_type, ogs_pkbuf_t *pkbuf) @@ -794,7 +840,7 @@ int ogs_nas_5gs_encode_cag_information_list(ogs_pkbuf_t *pkbuf, ogs_nas_cag_info } /* 9.11.3.18C Ciphering key data - * O TLV-E x-n */ + * O TLV-E 34-n */ int ogs_nas_5gs_decode_ciphering_key_data(ogs_nas_ciphering_key_data_t *ciphering_key_data, ogs_pkbuf_t *pkbuf) { int size = 0; @@ -1151,7 +1197,7 @@ int ogs_nas_5gs_encode_extended_emergency_number_list(ogs_pkbuf_t *pkbuf, ogs_na } /* 9.11.3.26A Extended DRX parameters - * O TLV 3 */ + * O TLV 3-4 */ int ogs_nas_5gs_decode_extended_drx_parameters(ogs_nas_extended_drx_parameters_t *extended_drx_parameters, ogs_pkbuf_t *pkbuf) { int size = 0; @@ -1815,7 +1861,7 @@ int ogs_nas_5gs_encode_nssai_inclusion_mode(ogs_pkbuf_t *pkbuf, ogs_nas_nssai_in } /* 9.11.3.38 Operator-defined access category definitions - * O TLV-E 3-n */ + * O TLV-E 3-8323 */ int ogs_nas_5gs_decode_operator_defined_access_category_definitions(ogs_nas_operator_defined_access_category_definitions_t *operator_defined_access_category_definitions, ogs_pkbuf_t *pkbuf) { int size = 0; @@ -3016,7 +3062,7 @@ int ogs_nas_5gs_encode_wus_assistance_information(ogs_pkbuf_t *pkbuf, ogs_nas_wu } /* 9.11.3.72 N5GC indication - * O T 1 */ + * O TV 1 */ int ogs_nas_5gs_decode_n5gc_indication(ogs_nas_n5gc_indication_t *n5gc_indication, ogs_pkbuf_t *pkbuf) { int size = sizeof(ogs_nas_n5gc_indication_t); @@ -3047,6 +3093,233 @@ int ogs_nas_5gs_encode_n5gc_indication(ogs_pkbuf_t *pkbuf, ogs_nas_n5gc_indicati return size; } +/* 9.11.3.73 NB-N1 mode DRX parameters + * O TLV 3 */ +int ogs_nas_5gs_decode_nb_n1_mode_drx_parameters(ogs_nas_nb_n1_mode_drx_parameters_t *nb_n1_mode_drx_parameters, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_nb_n1_mode_drx_parameters_t *source = (ogs_nas_nb_n1_mode_drx_parameters_t *)pkbuf->data; + + nb_n1_mode_drx_parameters->length = source->length; + size = nb_n1_mode_drx_parameters->length + sizeof(nb_n1_mode_drx_parameters->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*nb_n1_mode_drx_parameters) < size) return -1; + memcpy(nb_n1_mode_drx_parameters, pkbuf->data - size, size); + + ogs_trace(" NB_N1_MODE_DRX_PARAMETERS - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_nb_n1_mode_drx_parameters(ogs_pkbuf_t *pkbuf, ogs_nas_nb_n1_mode_drx_parameters_t *nb_n1_mode_drx_parameters) +{ + int size = nb_n1_mode_drx_parameters->length + sizeof(nb_n1_mode_drx_parameters->length); + ogs_nas_nb_n1_mode_drx_parameters_t target; + + memcpy(&target, nb_n1_mode_drx_parameters, sizeof(ogs_nas_nb_n1_mode_drx_parameters_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" NB_N1_MODE_DRX_PARAMETERS - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.3.74 Additional configuration indication + * O TV 1 */ +int ogs_nas_5gs_decode_additional_configuration_indication(ogs_nas_additional_configuration_indication_t *additional_configuration_indication, ogs_pkbuf_t *pkbuf) +{ + int size = sizeof(ogs_nas_additional_configuration_indication_t); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + memcpy(additional_configuration_indication, pkbuf->data - size, size); + + ogs_trace(" ADDITIONAL_CONFIGURATION_INDICATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_additional_configuration_indication(ogs_pkbuf_t *pkbuf, ogs_nas_additional_configuration_indication_t *additional_configuration_indication) +{ + int size = sizeof(ogs_nas_additional_configuration_indication_t); + + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, additional_configuration_indication, size); + + ogs_trace(" ADDITIONAL_CONFIGURATION_INDICATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.3.75 Extended rejected NSSAI + * O TLV 5-90 */ +int ogs_nas_5gs_decode_extended_rejected_nssai(ogs_nas_extended_rejected_nssai_t *extended_rejected_nssai, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_extended_rejected_nssai_t *source = (ogs_nas_extended_rejected_nssai_t *)pkbuf->data; + + extended_rejected_nssai->length = source->length; + size = extended_rejected_nssai->length + sizeof(extended_rejected_nssai->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*extended_rejected_nssai) < size) return -1; + memcpy(extended_rejected_nssai, pkbuf->data - size, size); + + ogs_trace(" EXTENDED_REJECTED_NSSAI - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_extended_rejected_nssai(ogs_pkbuf_t *pkbuf, ogs_nas_extended_rejected_nssai_t *extended_rejected_nssai) +{ + int size = extended_rejected_nssai->length + sizeof(extended_rejected_nssai->length); + ogs_nas_extended_rejected_nssai_t target; + + memcpy(&target, extended_rejected_nssai, sizeof(ogs_nas_extended_rejected_nssai_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" EXTENDED_REJECTED_NSSAI - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.3.76 UE request type + * O TLV 3 */ +int ogs_nas_5gs_decode_ue_request_type(ogs_nas_ue_request_type_t *ue_request_type, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_ue_request_type_t *source = (ogs_nas_ue_request_type_t *)pkbuf->data; + + ue_request_type->length = source->length; + size = ue_request_type->length + sizeof(ue_request_type->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*ue_request_type) < size) return -1; + memcpy(ue_request_type, pkbuf->data - size, size); + + ogs_trace(" UE_REQUEST_TYPE - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_ue_request_type(ogs_pkbuf_t *pkbuf, ogs_nas_ue_request_type_t *ue_request_type) +{ + int size = ue_request_type->length + sizeof(ue_request_type->length); + ogs_nas_ue_request_type_t target; + + memcpy(&target, ue_request_type, sizeof(ogs_nas_ue_request_type_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" UE_REQUEST_TYPE - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.3.77 Paging restriction + * O TLV 3-35 */ +int ogs_nas_5gs_decode_paging_restriction(ogs_nas_paging_restriction_t *paging_restriction, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_paging_restriction_t *source = (ogs_nas_paging_restriction_t *)pkbuf->data; + + paging_restriction->length = source->length; + size = paging_restriction->length + sizeof(paging_restriction->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*paging_restriction) < size) return -1; + memcpy(paging_restriction, pkbuf->data - size, size); + + ogs_trace(" PAGING_RESTRICTION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_paging_restriction(ogs_pkbuf_t *pkbuf, ogs_nas_paging_restriction_t *paging_restriction) +{ + int size = paging_restriction->length + sizeof(paging_restriction->length); + ogs_nas_paging_restriction_t target; + + memcpy(&target, paging_restriction, sizeof(ogs_nas_paging_restriction_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" PAGING_RESTRICTION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.3.79 NID + * O TLV 8 */ +int ogs_nas_5gs_decode_nid(ogs_nas_nid_t *nid, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_nid_t *source = (ogs_nas_nid_t *)pkbuf->data; + + nid->length = source->length; + size = nid->length + sizeof(nid->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*nid) < size) return -1; + memcpy(nid, pkbuf->data - size, size); + + ogs_trace(" NID - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_nid(ogs_pkbuf_t *pkbuf, ogs_nas_nid_t *nid) +{ + int size = nid->length + sizeof(nid->length); + ogs_nas_nid_t target; + + memcpy(&target, nid, sizeof(ogs_nas_nid_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" NID - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + /* 9.11.3.8 5GS tracking area identity * O TV 7 */ int ogs_nas_5gs_decode_5gs_tracking_area_identity(ogs_nas_5gs_tracking_area_identity_t *tracking_area_identity, ogs_pkbuf_t *pkbuf) @@ -3085,6 +3358,339 @@ int ogs_nas_5gs_encode_5gs_tracking_area_identity(ogs_pkbuf_t *pkbuf, ogs_nas_5g return size; } +/* 9.11.3.80 PEIPS assistance information + * O TLV 3-n */ +int ogs_nas_5gs_decode_peips_assistance_information(ogs_nas_peips_assistance_information_t *peips_assistance_information, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_peips_assistance_information_t *source = (ogs_nas_peips_assistance_information_t *)pkbuf->data; + + peips_assistance_information->length = source->length; + size = peips_assistance_information->length + sizeof(peips_assistance_information->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*peips_assistance_information) < size) return -1; + memcpy(peips_assistance_information, pkbuf->data - size, size); + + ogs_trace(" PEIPS_ASSISTANCE_INFORMATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_peips_assistance_information(ogs_pkbuf_t *pkbuf, ogs_nas_peips_assistance_information_t *peips_assistance_information) +{ + int size = peips_assistance_information->length + sizeof(peips_assistance_information->length); + ogs_nas_peips_assistance_information_t target; + + memcpy(&target, peips_assistance_information, sizeof(ogs_nas_peips_assistance_information_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" PEIPS_ASSISTANCE_INFORMATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.3.81 5GS additional request result + * O TLV 3 */ +int ogs_nas_5gs_decode_5gs_additional_request_result(ogs_nas_5gs_additional_request_result_t *additional_request_result, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_5gs_additional_request_result_t *source = (ogs_nas_5gs_additional_request_result_t *)pkbuf->data; + + additional_request_result->length = source->length; + size = additional_request_result->length + sizeof(additional_request_result->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*additional_request_result) < size) return -1; + memcpy(additional_request_result, pkbuf->data - size, size); + + ogs_trace(" 5GS_ADDITIONAL_REQUEST_RESULT - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_5gs_additional_request_result(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_additional_request_result_t *additional_request_result) +{ + int size = additional_request_result->length + sizeof(additional_request_result->length); + ogs_nas_5gs_additional_request_result_t target; + + memcpy(&target, additional_request_result, sizeof(ogs_nas_5gs_additional_request_result_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" 5GS_ADDITIONAL_REQUEST_RESULT - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.3.82 NSSRG information + * O TLV-E 7-4099 */ +int ogs_nas_5gs_decode_nssrg_information(ogs_nas_nssrg_information_t *nssrg_information, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_nssrg_information_t *source = (ogs_nas_nssrg_information_t *)pkbuf->data; + + nssrg_information->length = be16toh(source->length); + size = nssrg_information->length + sizeof(nssrg_information->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + nssrg_information->buffer = pkbuf->data - size + sizeof(nssrg_information->length); + + ogs_trace(" NSSRG_INFORMATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, (void*)nssrg_information->buffer, nssrg_information->length); + + return size; +} + +int ogs_nas_5gs_encode_nssrg_information(ogs_pkbuf_t *pkbuf, ogs_nas_nssrg_information_t *nssrg_information) +{ + int size = 0; + int target; + + ogs_assert(nssrg_information); + ogs_assert(nssrg_information->buffer); + + size = sizeof(nssrg_information->length); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + target = htobe16(nssrg_information->length); + memcpy(pkbuf->data - size, &target, size); + + size = nssrg_information->length; + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, nssrg_information->buffer, size); + + ogs_trace(" NSSRG_INFORMATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return nssrg_information->length + sizeof(nssrg_information->length); +} + +/* 9.11.3.83 List of PLMNs to be used in disaster condition + * O TLV 2-n */ +int ogs_nas_5gs_decode_list_of_plmns_to_be_used_in_disaster_condition(ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t *list_of_plmns_to_be_used_in_disaster_condition, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t *source = (ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t *)pkbuf->data; + + list_of_plmns_to_be_used_in_disaster_condition->length = source->length; + size = list_of_plmns_to_be_used_in_disaster_condition->length + sizeof(list_of_plmns_to_be_used_in_disaster_condition->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*list_of_plmns_to_be_used_in_disaster_condition) < size) return -1; + memcpy(list_of_plmns_to_be_used_in_disaster_condition, pkbuf->data - size, size); + + ogs_trace(" LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_list_of_plmns_to_be_used_in_disaster_condition(ogs_pkbuf_t *pkbuf, ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t *list_of_plmns_to_be_used_in_disaster_condition) +{ + int size = list_of_plmns_to_be_used_in_disaster_condition->length + sizeof(list_of_plmns_to_be_used_in_disaster_condition->length); + ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t target; + + memcpy(&target, list_of_plmns_to_be_used_in_disaster_condition, sizeof(ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.3.84 Registration wait range + * O TLV 4 */ +int ogs_nas_5gs_decode_registration_wait_range(ogs_nas_registration_wait_range_t *registration_wait_range, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_registration_wait_range_t *source = (ogs_nas_registration_wait_range_t *)pkbuf->data; + + registration_wait_range->length = source->length; + size = registration_wait_range->length + sizeof(registration_wait_range->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*registration_wait_range) < size) return -1; + memcpy(registration_wait_range, pkbuf->data - size, size); + + ogs_trace(" REGISTRATION_WAIT_RANGE - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_registration_wait_range(ogs_pkbuf_t *pkbuf, ogs_nas_registration_wait_range_t *registration_wait_range) +{ + int size = registration_wait_range->length + sizeof(registration_wait_range->length); + ogs_nas_registration_wait_range_t target; + + memcpy(&target, registration_wait_range, sizeof(ogs_nas_registration_wait_range_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" REGISTRATION_WAIT_RANGE - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.3.85 PLMN identity + * O TLV 5 */ +int ogs_nas_5gs_decode_plmn_identity(ogs_nas_plmn_identity_t *plmn_identity, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_plmn_identity_t *source = (ogs_nas_plmn_identity_t *)pkbuf->data; + + plmn_identity->length = source->length; + size = plmn_identity->length + sizeof(plmn_identity->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*plmn_identity) < size) return -1; + memcpy(plmn_identity, pkbuf->data - size, size); + + ogs_trace(" PLMN_IDENTITY - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_plmn_identity(ogs_pkbuf_t *pkbuf, ogs_nas_plmn_identity_t *plmn_identity) +{ + int size = plmn_identity->length + sizeof(plmn_identity->length); + ogs_nas_plmn_identity_t target; + + memcpy(&target, plmn_identity, sizeof(ogs_nas_plmn_identity_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" PLMN_IDENTITY - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.3.86 Extended CAG information list + * O TLV-E 3-n */ +int ogs_nas_5gs_decode_extended_cag_information_list(ogs_nas_extended_cag_information_list_t *extended_cag_information_list, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_extended_cag_information_list_t *source = (ogs_nas_extended_cag_information_list_t *)pkbuf->data; + + extended_cag_information_list->length = be16toh(source->length); + size = extended_cag_information_list->length + sizeof(extended_cag_information_list->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + extended_cag_information_list->buffer = pkbuf->data - size + sizeof(extended_cag_information_list->length); + + ogs_trace(" EXTENDED_CAG_INFORMATION_LIST - "); + ogs_log_hexdump(OGS_LOG_TRACE, (void*)extended_cag_information_list->buffer, extended_cag_information_list->length); + + return size; +} + +int ogs_nas_5gs_encode_extended_cag_information_list(ogs_pkbuf_t *pkbuf, ogs_nas_extended_cag_information_list_t *extended_cag_information_list) +{ + int size = 0; + int target; + + ogs_assert(extended_cag_information_list); + ogs_assert(extended_cag_information_list->buffer); + + size = sizeof(extended_cag_information_list->length); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + target = htobe16(extended_cag_information_list->length); + memcpy(pkbuf->data - size, &target, size); + + size = extended_cag_information_list->length; + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, extended_cag_information_list->buffer, size); + + ogs_trace(" EXTENDED_CAG_INFORMATION_LIST - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return extended_cag_information_list->length + sizeof(extended_cag_information_list->length); +} + +/* 9.11.3.87 NSAG information + * O TLV-E 9-3143 */ +int ogs_nas_5gs_decode_nsag_information(ogs_nas_nsag_information_t *nsag_information, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_nsag_information_t *source = (ogs_nas_nsag_information_t *)pkbuf->data; + + nsag_information->length = be16toh(source->length); + size = nsag_information->length + sizeof(nsag_information->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + nsag_information->buffer = pkbuf->data - size + sizeof(nsag_information->length); + + ogs_trace(" NSAG_INFORMATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, (void*)nsag_information->buffer, nsag_information->length); + + return size; +} + +int ogs_nas_5gs_encode_nsag_information(ogs_pkbuf_t *pkbuf, ogs_nas_nsag_information_t *nsag_information) +{ + int size = 0; + int target; + + ogs_assert(nsag_information); + ogs_assert(nsag_information->buffer); + + size = sizeof(nsag_information->length); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + target = htobe16(nsag_information->length); + memcpy(pkbuf->data - size, &target, size); + + size = nsag_information->length; + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, nsag_information->buffer, size); + + ogs_trace(" NSAG_INFORMATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return nsag_information->length + sizeof(nsag_information->length); +} + /* 9.11.3.9 5GS tracking area identity list * O TLV 9-114 */ int ogs_nas_5gs_decode_5gs_tracking_area_identity_list(ogs_nas_5gs_tracking_area_identity_list_t *tracking_area_identity_list, ogs_pkbuf_t *pkbuf) @@ -3124,6 +3730,38 @@ int ogs_nas_5gs_encode_5gs_tracking_area_identity_list(ogs_pkbuf_t *pkbuf, ogs_n return size; } +/* 9.11.3.91 Priority indicator + * O TV 1 */ +int ogs_nas_5gs_decode_priority_indicator(ogs_nas_priority_indicator_t *priority_indicator, ogs_pkbuf_t *pkbuf) +{ + int size = sizeof(ogs_nas_priority_indicator_t); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + memcpy(priority_indicator, pkbuf->data - size, size); + + ogs_trace(" PRIORITY_INDICATOR - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_priority_indicator(ogs_pkbuf_t *pkbuf, ogs_nas_priority_indicator_t *priority_indicator) +{ + int size = sizeof(ogs_nas_priority_indicator_t); + + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, priority_indicator, size); + + ogs_trace(" PRIORITY_INDICATOR - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + /* 9.11.3.9A 5GS update type * O TLV 3 */ int ogs_nas_5gs_decode_5gs_update_type(ogs_nas_5gs_update_type_t *update_type, ogs_pkbuf_t *pkbuf) @@ -3203,7 +3841,7 @@ int ogs_nas_5gs_encode_5gsm_capability(ogs_pkbuf_t *pkbuf, ogs_nas_5gsm_capabili } /* 9.11.4.10 PDU address - * O TLV 7, 11 or 15 */ + * O TLV 11 */ int ogs_nas_5gs_decode_pdu_address(ogs_nas_pdu_address_t *pdu_address, ogs_pkbuf_t *pkbuf) { int size = 0; @@ -3749,6 +4387,45 @@ int ogs_nas_5gs_encode_control_plane_only_indication(ogs_pkbuf_t *pkbuf, ogs_nas return size; } +/* 9.11.4.24 IP header compression configuration + * O TLV 5-257 */ +int ogs_nas_5gs_decode_ip_header_compression_configuration(ogs_nas_ip_header_compression_configuration_t *ip_header_compression_configuration, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_ip_header_compression_configuration_t *source = (ogs_nas_ip_header_compression_configuration_t *)pkbuf->data; + + ip_header_compression_configuration->length = source->length; + size = ip_header_compression_configuration->length + sizeof(ip_header_compression_configuration->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*ip_header_compression_configuration) < size) return -1; + memcpy(ip_header_compression_configuration, pkbuf->data - size, size); + + ogs_trace(" IP_HEADER_COMPRESSION_CONFIGURATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_ip_header_compression_configuration(ogs_pkbuf_t *pkbuf, ogs_nas_ip_header_compression_configuration_t *ip_header_compression_configuration) +{ + int size = ip_header_compression_configuration->length + sizeof(ip_header_compression_configuration->length); + ogs_nas_ip_header_compression_configuration_t target; + + memcpy(&target, ip_header_compression_configuration, sizeof(ogs_nas_ip_header_compression_configuration_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" IP_HEADER_COMPRESSION_CONFIGURATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + /* 9.11.4.24 Header compression configuration * O TLV 5-257 */ int ogs_nas_5gs_decode_header_compression_configuration(ogs_nas_header_compression_configuration_t *header_compression_configuration, ogs_pkbuf_t *pkbuf) @@ -3871,7 +4548,7 @@ int ogs_nas_5gs_encode_ue_ds_tt_residence_time(ogs_pkbuf_t *pkbuf, ogs_nas_ue_ds } /* 9.11.4.27 Port management information container - * O TLV-E 4-65538 */ + * O TLV-E 8-65538 */ int ogs_nas_5gs_decode_port_management_information_container(ogs_nas_port_management_information_container_t *port_management_information_container, ogs_pkbuf_t *pkbuf) { int size = 0; @@ -3916,6 +4593,45 @@ int ogs_nas_5gs_encode_port_management_information_container(ogs_pkbuf_t *pkbuf, return port_management_information_container->length + sizeof(port_management_information_container->length); } +/* 9.11.4.28 Ethernet header compression configuration + * O TLV 3 */ +int ogs_nas_5gs_decode_ethernet_header_compression_configuration(ogs_nas_ethernet_header_compression_configuration_t *ethernet_header_compression_configuration, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_ethernet_header_compression_configuration_t *source = (ogs_nas_ethernet_header_compression_configuration_t *)pkbuf->data; + + ethernet_header_compression_configuration->length = source->length; + size = ethernet_header_compression_configuration->length + sizeof(ethernet_header_compression_configuration->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*ethernet_header_compression_configuration) < size) return -1; + memcpy(ethernet_header_compression_configuration, pkbuf->data - size, size); + + ogs_trace(" ETHERNET_HEADER_COMPRESSION_CONFIGURATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_ethernet_header_compression_configuration(ogs_pkbuf_t *pkbuf, ogs_nas_ethernet_header_compression_configuration_t *ethernet_header_compression_configuration) +{ + int size = ethernet_header_compression_configuration->length + sizeof(ethernet_header_compression_configuration->length); + ogs_nas_ethernet_header_compression_configuration_t target; + + memcpy(&target, ethernet_header_compression_configuration, sizeof(ogs_nas_ethernet_header_compression_configuration_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" ETHERNET_HEADER_COMPRESSION_CONFIGURATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + /* 9.11.4.3 Always-on PDU session indication * O TV 1 */ int ogs_nas_5gs_decode_always_on_pdu_session_indication(ogs_nas_always_on_pdu_session_indication_t *always_on_pdu_session_indication, ogs_pkbuf_t *pkbuf) @@ -3948,6 +4664,176 @@ int ogs_nas_5gs_encode_always_on_pdu_session_indication(ogs_pkbuf_t *pkbuf, ogs_ return size; } +/* 9.11.4.30 Requested MBS container + * O TLV-E 8-65538 */ +int ogs_nas_5gs_decode_requested_mbs_container(ogs_nas_requested_mbs_container_t *requested_mbs_container, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_requested_mbs_container_t *source = (ogs_nas_requested_mbs_container_t *)pkbuf->data; + + requested_mbs_container->length = be16toh(source->length); + size = requested_mbs_container->length + sizeof(requested_mbs_container->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + requested_mbs_container->buffer = pkbuf->data - size + sizeof(requested_mbs_container->length); + + ogs_trace(" REQUESTED_MBS_CONTAINER - "); + ogs_log_hexdump(OGS_LOG_TRACE, (void*)requested_mbs_container->buffer, requested_mbs_container->length); + + return size; +} + +int ogs_nas_5gs_encode_requested_mbs_container(ogs_pkbuf_t *pkbuf, ogs_nas_requested_mbs_container_t *requested_mbs_container) +{ + int size = 0; + int target; + + ogs_assert(requested_mbs_container); + ogs_assert(requested_mbs_container->buffer); + + size = sizeof(requested_mbs_container->length); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + target = htobe16(requested_mbs_container->length); + memcpy(pkbuf->data - size, &target, size); + + size = requested_mbs_container->length; + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, requested_mbs_container->buffer, size); + + ogs_trace(" REQUESTED_MBS_CONTAINER - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return requested_mbs_container->length + sizeof(requested_mbs_container->length); +} + +/* 9.11.4.31 Received MBS container + * O TLV-E 9-65538 */ +int ogs_nas_5gs_decode_received_mbs_container(ogs_nas_received_mbs_container_t *received_mbs_container, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_received_mbs_container_t *source = (ogs_nas_received_mbs_container_t *)pkbuf->data; + + received_mbs_container->length = be16toh(source->length); + size = received_mbs_container->length + sizeof(received_mbs_container->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + received_mbs_container->buffer = pkbuf->data - size + sizeof(received_mbs_container->length); + + ogs_trace(" RECEIVED_MBS_CONTAINER - "); + ogs_log_hexdump(OGS_LOG_TRACE, (void*)received_mbs_container->buffer, received_mbs_container->length); + + return size; +} + +int ogs_nas_5gs_encode_received_mbs_container(ogs_pkbuf_t *pkbuf, ogs_nas_received_mbs_container_t *received_mbs_container) +{ + int size = 0; + int target; + + ogs_assert(received_mbs_container); + ogs_assert(received_mbs_container->buffer); + + size = sizeof(received_mbs_container->length); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + target = htobe16(received_mbs_container->length); + memcpy(pkbuf->data - size, &target, size); + + size = received_mbs_container->length; + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, received_mbs_container->buffer, size); + + ogs_trace(" RECEIVED_MBS_CONTAINER - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return received_mbs_container->length + sizeof(received_mbs_container->length); +} + +/* 9.11.4.32 PDU session pair ID + * O TLV 3 */ +int ogs_nas_5gs_decode_pdu_session_pair_id(ogs_nas_pdu_session_pair_id_t *pdu_session_pair_id, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_pdu_session_pair_id_t *source = (ogs_nas_pdu_session_pair_id_t *)pkbuf->data; + + pdu_session_pair_id->length = source->length; + size = pdu_session_pair_id->length + sizeof(pdu_session_pair_id->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*pdu_session_pair_id) < size) return -1; + memcpy(pdu_session_pair_id, pkbuf->data - size, size); + + ogs_trace(" PDU_SESSION_PAIR_ID - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_pdu_session_pair_id(ogs_pkbuf_t *pkbuf, ogs_nas_pdu_session_pair_id_t *pdu_session_pair_id) +{ + int size = pdu_session_pair_id->length + sizeof(pdu_session_pair_id->length); + ogs_nas_pdu_session_pair_id_t target; + + memcpy(&target, pdu_session_pair_id, sizeof(ogs_nas_pdu_session_pair_id_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" PDU_SESSION_PAIR_ID - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.11.4.33 RSN + * O TLV 3 */ +int ogs_nas_5gs_decode_rsn(ogs_nas_rsn_t *rsn, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_rsn_t *source = (ogs_nas_rsn_t *)pkbuf->data; + + rsn->length = source->length; + size = rsn->length + sizeof(rsn->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*rsn) < size) return -1; + memcpy(rsn, pkbuf->data - size, size); + + ogs_trace(" RSN - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_5gs_encode_rsn(ogs_pkbuf_t *pkbuf, ogs_nas_rsn_t *rsn) +{ + int size = rsn->length + sizeof(rsn->length); + ogs_nas_rsn_t target; + + memcpy(&target, rsn, sizeof(ogs_nas_rsn_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" RSN - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + /* 9.11.4.4 Always-on PDU session requested * O TV 1 */ int ogs_nas_5gs_decode_always_on_pdu_session_requested(ogs_nas_always_on_pdu_session_requested_t *always_on_pdu_session_requested, ogs_pkbuf_t *pkbuf) diff --git a/lib/nas/5gs/ies.h b/lib/nas/5gs/ies.h index 58fef3d8d..9073223a9 100644 --- a/lib/nas/5gs/ies.h +++ b/lib/nas/5gs/ies.h @@ -1,7 +1,7 @@ /* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -28,8 +28,8 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.2.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-07-11 07:09:47.146947 by ubuntu - * from 24501-g41.docx + * Created on: 2023-03-04 20:50:00.872007 by acetcom + * from 24501-h90.docx ******************************************************************************/ #if !defined(OGS_NAS_INSIDE) && !defined(OGS_NAS_COMPILATION) @@ -46,6 +46,7 @@ extern "C" { int ogs_nas_5gs_encode_optional_type(ogs_pkbuf_t *pkbuf, uint8_t type); int ogs_nas_5gs_decode_additional_information(ogs_nas_additional_information_t *additional_information, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_service_level_aa_container(ogs_nas_service_level_aa_container_t *service_level_aa_container, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_access_type(ogs_nas_access_type_t *access_type, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_dnn(ogs_nas_dnn_t *dnn, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_eap_message(ogs_nas_eap_message_t *eap_message, ogs_pkbuf_t *pkbuf); @@ -123,8 +124,23 @@ int ogs_nas_5gs_decode_5gs_registration_type(ogs_nas_5gs_registration_type_t *re int ogs_nas_5gs_decode_truncated_5g_s_tmsi_configuration(ogs_nas_truncated_5g_s_tmsi_configuration_t *truncated_s_tmsi_configuration, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_wus_assistance_information(ogs_nas_wus_assistance_information_t *wus_assistance_information, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_n5gc_indication(ogs_nas_n5gc_indication_t *n5gc_indication, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_nb_n1_mode_drx_parameters(ogs_nas_nb_n1_mode_drx_parameters_t *nb_n1_mode_drx_parameters, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_additional_configuration_indication(ogs_nas_additional_configuration_indication_t *additional_configuration_indication, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_extended_rejected_nssai(ogs_nas_extended_rejected_nssai_t *extended_rejected_nssai, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_ue_request_type(ogs_nas_ue_request_type_t *ue_request_type, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_paging_restriction(ogs_nas_paging_restriction_t *paging_restriction, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_nid(ogs_nas_nid_t *nid, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_5gs_tracking_area_identity(ogs_nas_5gs_tracking_area_identity_t *tracking_area_identity, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_peips_assistance_information(ogs_nas_peips_assistance_information_t *peips_assistance_information, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_5gs_additional_request_result(ogs_nas_5gs_additional_request_result_t *additional_request_result, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_nssrg_information(ogs_nas_nssrg_information_t *nssrg_information, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_list_of_plmns_to_be_used_in_disaster_condition(ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t *list_of_plmns_to_be_used_in_disaster_condition, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_registration_wait_range(ogs_nas_registration_wait_range_t *registration_wait_range, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_plmn_identity(ogs_nas_plmn_identity_t *plmn_identity, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_extended_cag_information_list(ogs_nas_extended_cag_information_list_t *extended_cag_information_list, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_nsag_information(ogs_nas_nsag_information_t *nsag_information, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_5gs_tracking_area_identity_list(ogs_nas_5gs_tracking_area_identity_list_t *tracking_area_identity_list, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_priority_indicator(ogs_nas_priority_indicator_t *priority_indicator, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_5gs_update_type(ogs_nas_5gs_update_type_t *update_type, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_5gsm_capability(ogs_nas_5gsm_capability_t *gsm_capability, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_pdu_address(ogs_nas_pdu_address_t *pdu_address, ogs_pkbuf_t *pkbuf); @@ -141,11 +157,17 @@ int ogs_nas_5gs_decode_serving_plmn_rate_control(ogs_nas_serving_plmn_rate_contr int ogs_nas_5gs_decode_5gsm_congestion_re_attempt_indicator(ogs_nas_5gsm_congestion_re_attempt_indicator_t *gsm_congestion_re_attempt_indicator, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_atsss_container(ogs_nas_atsss_container_t *atsss_container, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_control_plane_only_indication(ogs_nas_control_plane_only_indication_t *control_plane_only_indication, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_ip_header_compression_configuration(ogs_nas_ip_header_compression_configuration_t *ip_header_compression_configuration, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_header_compression_configuration(ogs_nas_header_compression_configuration_t *header_compression_configuration, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_ds_tt_ethernet_port_mac_address(ogs_nas_ds_tt_ethernet_port_mac_address_t *ds_tt_ethernet_port_mac_address, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_ue_ds_tt_residence_time(ogs_nas_ue_ds_tt_residence_time_t *ue_ds_tt_residence_time, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_port_management_information_container(ogs_nas_port_management_information_container_t *port_management_information_container, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_ethernet_header_compression_configuration(ogs_nas_ethernet_header_compression_configuration_t *ethernet_header_compression_configuration, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_always_on_pdu_session_indication(ogs_nas_always_on_pdu_session_indication_t *always_on_pdu_session_indication, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_requested_mbs_container(ogs_nas_requested_mbs_container_t *requested_mbs_container, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_received_mbs_container(ogs_nas_received_mbs_container_t *received_mbs_container, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_pdu_session_pair_id(ogs_nas_pdu_session_pair_id_t *pdu_session_pair_id, ogs_pkbuf_t *pkbuf); +int ogs_nas_5gs_decode_rsn(ogs_nas_rsn_t *rsn, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_always_on_pdu_session_requested(ogs_nas_always_on_pdu_session_requested_t *always_on_pdu_session_requested, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_allowed_ssc_mode(ogs_nas_allowed_ssc_mode_t *allowed_ssc_mode, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_decode_extended_protocol_configuration_options(ogs_nas_extended_protocol_configuration_options_t *extended_protocol_configuration_options, ogs_pkbuf_t *pkbuf); @@ -154,6 +176,7 @@ int ogs_nas_5gs_decode_mapped_eps_bearer_contexts(ogs_nas_mapped_eps_bearer_cont int ogs_nas_5gs_decode_maximum_number_of_supported_packet_filters(ogs_nas_maximum_number_of_supported_packet_filters_t *maximum_number_of_supported_packet_filters, ogs_pkbuf_t *pkbuf); int ogs_nas_5gs_encode_additional_information(ogs_pkbuf_t *pkbuf, ogs_nas_additional_information_t *additional_information); +int ogs_nas_5gs_encode_service_level_aa_container(ogs_pkbuf_t *pkbuf, ogs_nas_service_level_aa_container_t *service_level_aa_container); int ogs_nas_5gs_encode_access_type(ogs_pkbuf_t *pkbuf, ogs_nas_access_type_t *access_type); int ogs_nas_5gs_encode_dnn(ogs_pkbuf_t *pkbuf, ogs_nas_dnn_t *dnn); int ogs_nas_5gs_encode_eap_message(ogs_pkbuf_t *pkbuf, ogs_nas_eap_message_t *eap_message); @@ -231,8 +254,23 @@ int ogs_nas_5gs_encode_5gs_registration_type(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_reg int ogs_nas_5gs_encode_truncated_5g_s_tmsi_configuration(ogs_pkbuf_t *pkbuf, ogs_nas_truncated_5g_s_tmsi_configuration_t *truncated_s_tmsi_configuration); int ogs_nas_5gs_encode_wus_assistance_information(ogs_pkbuf_t *pkbuf, ogs_nas_wus_assistance_information_t *wus_assistance_information); int ogs_nas_5gs_encode_n5gc_indication(ogs_pkbuf_t *pkbuf, ogs_nas_n5gc_indication_t *n5gc_indication); +int ogs_nas_5gs_encode_nb_n1_mode_drx_parameters(ogs_pkbuf_t *pkbuf, ogs_nas_nb_n1_mode_drx_parameters_t *nb_n1_mode_drx_parameters); +int ogs_nas_5gs_encode_additional_configuration_indication(ogs_pkbuf_t *pkbuf, ogs_nas_additional_configuration_indication_t *additional_configuration_indication); +int ogs_nas_5gs_encode_extended_rejected_nssai(ogs_pkbuf_t *pkbuf, ogs_nas_extended_rejected_nssai_t *extended_rejected_nssai); +int ogs_nas_5gs_encode_ue_request_type(ogs_pkbuf_t *pkbuf, ogs_nas_ue_request_type_t *ue_request_type); +int ogs_nas_5gs_encode_paging_restriction(ogs_pkbuf_t *pkbuf, ogs_nas_paging_restriction_t *paging_restriction); +int ogs_nas_5gs_encode_nid(ogs_pkbuf_t *pkbuf, ogs_nas_nid_t *nid); int ogs_nas_5gs_encode_5gs_tracking_area_identity(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_tracking_area_identity_t *tracking_area_identity); +int ogs_nas_5gs_encode_peips_assistance_information(ogs_pkbuf_t *pkbuf, ogs_nas_peips_assistance_information_t *peips_assistance_information); +int ogs_nas_5gs_encode_5gs_additional_request_result(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_additional_request_result_t *additional_request_result); +int ogs_nas_5gs_encode_nssrg_information(ogs_pkbuf_t *pkbuf, ogs_nas_nssrg_information_t *nssrg_information); +int ogs_nas_5gs_encode_list_of_plmns_to_be_used_in_disaster_condition(ogs_pkbuf_t *pkbuf, ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t *list_of_plmns_to_be_used_in_disaster_condition); +int ogs_nas_5gs_encode_registration_wait_range(ogs_pkbuf_t *pkbuf, ogs_nas_registration_wait_range_t *registration_wait_range); +int ogs_nas_5gs_encode_plmn_identity(ogs_pkbuf_t *pkbuf, ogs_nas_plmn_identity_t *plmn_identity); +int ogs_nas_5gs_encode_extended_cag_information_list(ogs_pkbuf_t *pkbuf, ogs_nas_extended_cag_information_list_t *extended_cag_information_list); +int ogs_nas_5gs_encode_nsag_information(ogs_pkbuf_t *pkbuf, ogs_nas_nsag_information_t *nsag_information); int ogs_nas_5gs_encode_5gs_tracking_area_identity_list(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_tracking_area_identity_list_t *tracking_area_identity_list); +int ogs_nas_5gs_encode_priority_indicator(ogs_pkbuf_t *pkbuf, ogs_nas_priority_indicator_t *priority_indicator); int ogs_nas_5gs_encode_5gs_update_type(ogs_pkbuf_t *pkbuf, ogs_nas_5gs_update_type_t *update_type); int ogs_nas_5gs_encode_5gsm_capability(ogs_pkbuf_t *pkbuf, ogs_nas_5gsm_capability_t *gsm_capability); int ogs_nas_5gs_encode_pdu_address(ogs_pkbuf_t *pkbuf, ogs_nas_pdu_address_t *pdu_address); @@ -249,11 +287,17 @@ int ogs_nas_5gs_encode_serving_plmn_rate_control(ogs_pkbuf_t *pkbuf, ogs_nas_ser int ogs_nas_5gs_encode_5gsm_congestion_re_attempt_indicator(ogs_pkbuf_t *pkbuf, ogs_nas_5gsm_congestion_re_attempt_indicator_t *gsm_congestion_re_attempt_indicator); int ogs_nas_5gs_encode_atsss_container(ogs_pkbuf_t *pkbuf, ogs_nas_atsss_container_t *atsss_container); int ogs_nas_5gs_encode_control_plane_only_indication(ogs_pkbuf_t *pkbuf, ogs_nas_control_plane_only_indication_t *control_plane_only_indication); +int ogs_nas_5gs_encode_ip_header_compression_configuration(ogs_pkbuf_t *pkbuf, ogs_nas_ip_header_compression_configuration_t *ip_header_compression_configuration); int ogs_nas_5gs_encode_header_compression_configuration(ogs_pkbuf_t *pkbuf, ogs_nas_header_compression_configuration_t *header_compression_configuration); int ogs_nas_5gs_encode_ds_tt_ethernet_port_mac_address(ogs_pkbuf_t *pkbuf, ogs_nas_ds_tt_ethernet_port_mac_address_t *ds_tt_ethernet_port_mac_address); int ogs_nas_5gs_encode_ue_ds_tt_residence_time(ogs_pkbuf_t *pkbuf, ogs_nas_ue_ds_tt_residence_time_t *ue_ds_tt_residence_time); int ogs_nas_5gs_encode_port_management_information_container(ogs_pkbuf_t *pkbuf, ogs_nas_port_management_information_container_t *port_management_information_container); +int ogs_nas_5gs_encode_ethernet_header_compression_configuration(ogs_pkbuf_t *pkbuf, ogs_nas_ethernet_header_compression_configuration_t *ethernet_header_compression_configuration); int ogs_nas_5gs_encode_always_on_pdu_session_indication(ogs_pkbuf_t *pkbuf, ogs_nas_always_on_pdu_session_indication_t *always_on_pdu_session_indication); +int ogs_nas_5gs_encode_requested_mbs_container(ogs_pkbuf_t *pkbuf, ogs_nas_requested_mbs_container_t *requested_mbs_container); +int ogs_nas_5gs_encode_received_mbs_container(ogs_pkbuf_t *pkbuf, ogs_nas_received_mbs_container_t *received_mbs_container); +int ogs_nas_5gs_encode_pdu_session_pair_id(ogs_pkbuf_t *pkbuf, ogs_nas_pdu_session_pair_id_t *pdu_session_pair_id); +int ogs_nas_5gs_encode_rsn(ogs_pkbuf_t *pkbuf, ogs_nas_rsn_t *rsn); int ogs_nas_5gs_encode_always_on_pdu_session_requested(ogs_pkbuf_t *pkbuf, ogs_nas_always_on_pdu_session_requested_t *always_on_pdu_session_requested); int ogs_nas_5gs_encode_allowed_ssc_mode(ogs_pkbuf_t *pkbuf, ogs_nas_allowed_ssc_mode_t *allowed_ssc_mode); int ogs_nas_5gs_encode_extended_protocol_configuration_options(ogs_pkbuf_t *pkbuf, ogs_nas_extended_protocol_configuration_options_t *extended_protocol_configuration_options); diff --git a/lib/nas/5gs/message.h b/lib/nas/5gs/message.h index ceda32613..fe4607d5e 100644 --- a/lib/nas/5gs/message.h +++ b/lib/nas/5gs/message.h @@ -1,7 +1,7 @@ /* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -28,8 +28,8 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.2.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-07-11 07:09:47.165005 by ubuntu - * from 24501-g41.docx + * Created on: 2023-03-04 20:50:00.882958 by acetcom + * from 24501-h90.docx ******************************************************************************/ #if !defined(OGS_NAS_INSIDE) && !defined(OGS_NAS_COMPILATION) @@ -148,6 +148,14 @@ typedef struct ogs_nas_5gs_security_header_s { #define OGS_NAS_5GS_REGISTRATION_REQUEST_ADDITIONAL_INFORMATION_REQUESTED_PRESENT ((uint64_t)1<<28) #define OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_PRESENT ((uint64_t)1<<29) #define OGS_NAS_5GS_REGISTRATION_REQUEST_N5GC_INDICATION_PRESENT ((uint64_t)1<<30) +#define OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_NB_N1_MODE_DRX_PARAMETERS_PRESENT ((uint64_t)1<<31) +#define OGS_NAS_5GS_REGISTRATION_REQUEST_UE_REQUEST_TYPE_PRESENT ((uint64_t)1<<32) +#define OGS_NAS_5GS_REGISTRATION_REQUEST_PAGING_RESTRICTION_PRESENT ((uint64_t)1<<33) +#define OGS_NAS_5GS_REGISTRATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_PRESENT ((uint64_t)1<<34) +#define OGS_NAS_5GS_REGISTRATION_REQUEST_NID_PRESENT ((uint64_t)1<<35) +#define OGS_NAS_5GS_REGISTRATION_REQUEST_MS_DETERMINED_PLMN_WITH_DISASTER_CONDITION_PRESENT ((uint64_t)1<<36) +#define OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_PEIPS_ASSISTANCE_INFORMATION_PRESENT ((uint64_t)1<<37) +#define OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_T3512_VALUE_PRESENT ((uint64_t)1<<38) #define OGS_NAS_5GS_REGISTRATION_REQUEST_NON_CURRENT_NATIVE_NAS_KEY_SET_IDENTIFIER_TYPE 0xC0 #define OGS_NAS_5GS_REGISTRATION_REQUEST_5GMM_CAPABILITY_TYPE 0x10 #define OGS_NAS_5GS_REGISTRATION_REQUEST_UE_SECURITY_CAPABILITY_TYPE 0x2E @@ -178,7 +186,15 @@ typedef struct ogs_nas_5gs_security_header_s { #define OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_MAPPED_NSSAI_TYPE 0x35 #define OGS_NAS_5GS_REGISTRATION_REQUEST_ADDITIONAL_INFORMATION_REQUESTED_TYPE 0x48 #define OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_TYPE 0x1A -#define OGS_NAS_5GS_REGISTRATION_REQUEST_N5GC_INDICATION_TYPE 0xA1 +#define OGS_NAS_5GS_REGISTRATION_REQUEST_N5GC_INDICATION_TYPE 0xA0 +#define OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_NB_N1_MODE_DRX_PARAMETERS_TYPE 0x30 +#define OGS_NAS_5GS_REGISTRATION_REQUEST_UE_REQUEST_TYPE_TYPE 0x29 +#define OGS_NAS_5GS_REGISTRATION_REQUEST_PAGING_RESTRICTION_TYPE 0x28 +#define OGS_NAS_5GS_REGISTRATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_TYPE 0x72 +#define OGS_NAS_5GS_REGISTRATION_REQUEST_NID_TYPE 0x32 +#define OGS_NAS_5GS_REGISTRATION_REQUEST_MS_DETERMINED_PLMN_WITH_DISASTER_CONDITION_TYPE 0x16 +#define OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_PEIPS_ASSISTANCE_INFORMATION_TYPE 0x2A +#define OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_T3512_VALUE_TYPE 0x3B typedef struct ogs_nas_5gs_registration_request_s { /* Mandatory fields */ @@ -218,6 +234,14 @@ typedef struct ogs_nas_5gs_registration_request_s { ogs_nas_additional_information_requested_t additional_information_requested; ogs_nas_wus_assistance_information_t requested_wus_assistance_information; ogs_nas_n5gc_indication_t n5gc_indication; + ogs_nas_nb_n1_mode_drx_parameters_t requested_nb_n1_mode_drx_parameters; + ogs_nas_ue_request_type_t ue_request_type; + ogs_nas_paging_restriction_t paging_restriction; + ogs_nas_service_level_aa_container_t service_level_aa_container; + ogs_nas_nid_t nid; + ogs_nas_plmn_identity_t ms_determined_plmn_with_disaster_condition; + ogs_nas_peips_assistance_information_t requested_peips_assistance_information; + ogs_nas_gprs_timer_3_t requested_t3512_value; } ogs_nas_5gs_registration_request_t; @@ -261,6 +285,19 @@ typedef struct ogs_nas_5gs_registration_request_s { #define OGS_NAS_5GS_REGISTRATION_ACCEPT_CAG_INFORMATION_LIST_PRESENT ((uint64_t)1<<34) #define OGS_NAS_5GS_REGISTRATION_ACCEPT_TRUNCATED_5G_S_TMSI_CONFIGURATION_PRESENT ((uint64_t)1<<35) #define OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_PRESENT ((uint64_t)1<<36) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_NB_N1_MODE_DRX_PARAMETERS_PRESENT ((uint64_t)1<<37) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_REJECTED_NSSAI_PRESENT ((uint64_t)1<<38) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_PRESENT ((uint64_t)1<<39) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_PEIPS_ASSISTANCE_INFORMATION_PRESENT ((uint64_t)1<<40) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_PRESENT ((uint64_t)1<<41) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_NSSRG_INFORMATION_PRESENT ((uint64_t)1<<42) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_ROAMING_WAIT_RANGE_PRESENT ((uint64_t)1<<43) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_RETURN_WAIT_RANGE_PRESENT ((uint64_t)1<<44) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_PRESENT ((uint64_t)1<<45) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<46) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<47) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_CAG_INFORMATION_LIST_PRESENT ((uint64_t)1<<48) +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_NSAG_INFORMATION_PRESENT ((uint64_t)1<<49) #define OGS_NAS_5GS_REGISTRATION_ACCEPT_5G_GUTI_TYPE 0x77 #define OGS_NAS_5GS_REGISTRATION_ACCEPT_EQUIVALENT_PLMNS_TYPE 0x4A #define OGS_NAS_5GS_REGISTRATION_ACCEPT_TAI_LIST_TYPE 0x54 @@ -292,12 +329,25 @@ typedef struct ogs_nas_5gs_registration_request_s { #define OGS_NAS_5GS_REGISTRATION_ACCEPT_T3448_VALUE_TYPE 0x6B #define OGS_NAS_5GS_REGISTRATION_ACCEPT_T3324_VALUE_TYPE 0x6A #define OGS_NAS_5GS_REGISTRATION_ACCEPT_UE_RADIO_CAPABILITY_ID_TYPE 0x67 -#define OGS_NAS_5GS_REGISTRATION_ACCEPT_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_TYPE 0x68 +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_TYPE 0xE0 #define OGS_NAS_5GS_REGISTRATION_ACCEPT_PENDING_NSSAI_TYPE 0x39 #define OGS_NAS_5GS_REGISTRATION_ACCEPT_CIPHERING_KEY_DATA_TYPE 0x74 #define OGS_NAS_5GS_REGISTRATION_ACCEPT_CAG_INFORMATION_LIST_TYPE 0x75 #define OGS_NAS_5GS_REGISTRATION_ACCEPT_TRUNCATED_5G_S_TMSI_CONFIGURATION_TYPE 0x1B #define OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_TYPE 0x1C +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_NB_N1_MODE_DRX_PARAMETERS_TYPE 0x29 +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_REJECTED_NSSAI_TYPE 0x68 +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_TYPE 0x7B +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_NEGOTIATED_PEIPS_ASSISTANCE_INFORMATION_TYPE 0x33 +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_TYPE 0x34 +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_NSSRG_INFORMATION_TYPE 0x70 +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_ROAMING_WAIT_RANGE_TYPE 0x14 +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_DISASTER_RETURN_WAIT_RANGE_TYPE 0x2C +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_TYPE 0x13 +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_EXTENDED_CAG_INFORMATION_LIST_TYPE 0x71 +#define OGS_NAS_5GS_REGISTRATION_ACCEPT_NSAG_INFORMATION_TYPE 0x7C typedef struct ogs_nas_5gs_registration_accept_s { /* Mandatory fields */ @@ -333,7 +383,7 @@ typedef struct ogs_nas_5gs_registration_accept_s { ogs_nas_eps_bearer_context_status_t eps_bearer_context_status; ogs_nas_extended_drx_parameters_t negotiated_extended_drx_parameters; ogs_nas_gprs_timer_3_t t3447_value; - ogs_nas_gprs_timer_3_t t3448_value; + ogs_nas_gprs_timer_2_t t3448_value; ogs_nas_gprs_timer_3_t t3324_value; ogs_nas_ue_radio_capability_id_t ue_radio_capability_id; ogs_nas_ue_radio_capability_id_deletion_indication_t ue_radio_capability_id_deletion_indication; @@ -342,6 +392,19 @@ typedef struct ogs_nas_5gs_registration_accept_s { ogs_nas_cag_information_list_t cag_information_list; ogs_nas_truncated_5g_s_tmsi_configuration_t truncated_s_tmsi_configuration; ogs_nas_wus_assistance_information_t negotiated_wus_assistance_information; + ogs_nas_nb_n1_mode_drx_parameters_t negotiated_nb_n1_mode_drx_parameters; + ogs_nas_extended_rejected_nssai_t extended_rejected_nssai; + ogs_nas_service_level_aa_container_t service_level_aa_container; + ogs_nas_peips_assistance_information_t negotiated_peips_assistance_information; + ogs_nas_5gs_additional_request_result_t additional_request_result; + ogs_nas_nssrg_information_t nssrg_information; + ogs_nas_registration_wait_range_t disaster_roaming_wait_range; + ogs_nas_registration_wait_range_t disaster_return_wait_range; + ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t list_of_plmns_to_be_used_in_disaster_condition; + ogs_nas_5gs_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_5gs_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; + ogs_nas_extended_cag_information_list_t extended_cag_information_list; + ogs_nas_nsag_information_t nsag_information; } ogs_nas_5gs_registration_accept_t; @@ -366,10 +429,24 @@ typedef struct ogs_nas_5gs_registration_complete_s { #define OGS_NAS_5GS_REGISTRATION_REJECT_T3502_VALUE_PRESENT ((uint64_t)1<<1) #define OGS_NAS_5GS_REGISTRATION_REJECT_EAP_MESSAGE_PRESENT ((uint64_t)1<<2) #define OGS_NAS_5GS_REGISTRATION_REJECT_REJECTED_NSSAI_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_5GS_REGISTRATION_REJECT_CAG_INFORMATION_LIST_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_REJECTED_NSSAI_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_5GS_REGISTRATION_REJECT_DISASTER_RETURN_WAIT_RANGE_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_CAG_INFORMATION_LIST_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_5GS_REGISTRATION_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT ((uint64_t)1<<8) +#define OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<9) +#define OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<10) #define OGS_NAS_5GS_REGISTRATION_REJECT_T3346_VALUE_TYPE 0x5F #define OGS_NAS_5GS_REGISTRATION_REJECT_T3502_VALUE_TYPE 0x16 #define OGS_NAS_5GS_REGISTRATION_REJECT_EAP_MESSAGE_TYPE 0x78 #define OGS_NAS_5GS_REGISTRATION_REJECT_REJECTED_NSSAI_TYPE 0x69 +#define OGS_NAS_5GS_REGISTRATION_REJECT_CAG_INFORMATION_LIST_TYPE 0x75 +#define OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_REJECTED_NSSAI_TYPE 0x68 +#define OGS_NAS_5GS_REGISTRATION_REJECT_DISASTER_RETURN_WAIT_RANGE_TYPE 0x2C +#define OGS_NAS_5GS_REGISTRATION_REJECT_EXTENDED_CAG_INFORMATION_LIST_TYPE 0x71 +#define OGS_NAS_5GS_REGISTRATION_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE 0x3A +#define OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_5GS_REGISTRATION_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E typedef struct ogs_nas_5gs_registration_reject_s { /* Mandatory fields */ @@ -381,6 +458,13 @@ typedef struct ogs_nas_5gs_registration_reject_s { ogs_nas_gprs_timer_2_t t3502_value; ogs_nas_eap_message_t eap_message; ogs_nas_rejected_nssai_t rejected_nssai; + ogs_nas_cag_information_list_t cag_information_list; + ogs_nas_extended_rejected_nssai_t extended_rejected_nssai; + ogs_nas_registration_wait_range_t disaster_return_wait_range; + ogs_nas_extended_cag_information_list_t extended_cag_information_list; + ogs_nas_gprs_timer_3_t lower_bound_timer_value; + ogs_nas_5gs_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_5gs_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; } ogs_nas_5gs_registration_reject_t; @@ -401,9 +485,23 @@ typedef struct ogs_nas_5gs_deregistration_request_from_ue_s { #define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_PRESENT ((uint64_t)1<<0) #define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_PRESENT ((uint64_t)1<<1) #define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_CAG_INFORMATION_LIST_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_REJECTED_NSSAI_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_DISASTER_RETURN_WAIT_RANGE_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_CAG_INFORMATION_LIST_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_LOWER_BOUND_TIMER_VALUE_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<8) +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<9) #define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_TYPE 0x58 #define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_T3346_VALUE_TYPE 0x5F #define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_REJECTED_NSSAI_TYPE 0x6D +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_CAG_INFORMATION_LIST_TYPE 0x75 +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_REJECTED_NSSAI_TYPE 0x68 +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_DISASTER_RETURN_WAIT_RANGE_TYPE 0x2C +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_EXTENDED_CAG_INFORMATION_LIST_TYPE 0x71 +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_LOWER_BOUND_TIMER_VALUE_TYPE 0x3A +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E typedef struct ogs_nas_5gs_deregistration_request_to_ue_s { /* Mandatory fields */ @@ -414,6 +512,13 @@ typedef struct ogs_nas_5gs_deregistration_request_to_ue_s { ogs_nas_5gmm_cause_t gmm_cause; ogs_nas_gprs_timer_2_t t3346_value; ogs_nas_rejected_nssai_t rejected_nssai; + ogs_nas_cag_information_list_t cag_information_list; + ogs_nas_extended_rejected_nssai_t extended_rejected_nssai; + ogs_nas_registration_wait_range_t disaster_return_wait_range; + ogs_nas_extended_cag_information_list_t extended_cag_information_list; + ogs_nas_gprs_timer_3_t lower_bound_timer_value; + ogs_nas_5gs_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_5gs_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; } ogs_nas_5gs_deregistration_request_to_ue_t; @@ -424,10 +529,14 @@ typedef struct ogs_nas_5gs_deregistration_request_to_ue_s { #define OGS_NAS_5GS_SERVICE_REQUEST_PDU_SESSION_STATUS_PRESENT ((uint64_t)1<<1) #define OGS_NAS_5GS_SERVICE_REQUEST_ALLOWED_PDU_SESSION_STATUS_PRESENT ((uint64_t)1<<2) #define OGS_NAS_5GS_SERVICE_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_5GS_SERVICE_REQUEST_UE_REQUEST_TYPE_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_5GS_SERVICE_REQUEST_PAGING_RESTRICTION_PRESENT ((uint64_t)1<<5) #define OGS_NAS_5GS_SERVICE_REQUEST_UPLINK_DATA_STATUS_TYPE 0x40 #define OGS_NAS_5GS_SERVICE_REQUEST_PDU_SESSION_STATUS_TYPE 0x50 #define OGS_NAS_5GS_SERVICE_REQUEST_ALLOWED_PDU_SESSION_STATUS_TYPE 0x25 #define OGS_NAS_5GS_SERVICE_REQUEST_NAS_MESSAGE_CONTAINER_TYPE 0x71 +#define OGS_NAS_5GS_SERVICE_REQUEST_UE_REQUEST_TYPE_TYPE 0x29 +#define OGS_NAS_5GS_SERVICE_REQUEST_PAGING_RESTRICTION_TYPE 0x28 typedef struct ogs_nas_5gs_service_request_s { /* Mandatory fields */ @@ -440,6 +549,8 @@ typedef struct ogs_nas_5gs_service_request_s { ogs_nas_pdu_session_status_t pdu_session_status; ogs_nas_allowed_pdu_session_status_t allowed_pdu_session_status; ogs_nas_message_container_t nas_message_container; + ogs_nas_ue_request_type_t ue_request_type; + ogs_nas_paging_restriction_t paging_restriction; } ogs_nas_5gs_service_request_t; @@ -450,10 +561,22 @@ typedef struct ogs_nas_5gs_service_request_s { #define OGS_NAS_5GS_SERVICE_REJECT_T3346_VALUE_PRESENT ((uint64_t)1<<1) #define OGS_NAS_5GS_SERVICE_REJECT_EAP_MESSAGE_PRESENT ((uint64_t)1<<2) #define OGS_NAS_5GS_SERVICE_REJECT_T3448_VALUE_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_5GS_SERVICE_REJECT_CAG_INFORMATION_LIST_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_5GS_SERVICE_REJECT_DISASTER_RETURN_WAIT_RANGE_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_5GS_SERVICE_REJECT_EXTENDED_CAG_INFORMATION_LIST_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_5GS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<8) +#define OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<9) #define OGS_NAS_5GS_SERVICE_REJECT_PDU_SESSION_STATUS_TYPE 0x50 #define OGS_NAS_5GS_SERVICE_REJECT_T3346_VALUE_TYPE 0x5F #define OGS_NAS_5GS_SERVICE_REJECT_EAP_MESSAGE_TYPE 0x78 #define OGS_NAS_5GS_SERVICE_REJECT_T3448_VALUE_TYPE 0x6B +#define OGS_NAS_5GS_SERVICE_REJECT_CAG_INFORMATION_LIST_TYPE 0x75 +#define OGS_NAS_5GS_SERVICE_REJECT_DISASTER_RETURN_WAIT_RANGE_TYPE 0x2C +#define OGS_NAS_5GS_SERVICE_REJECT_EXTENDED_CAG_INFORMATION_LIST_TYPE 0x71 +#define OGS_NAS_5GS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE 0x3A +#define OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_5GS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E typedef struct ogs_nas_5gs_service_reject_s { /* Mandatory fields */ @@ -464,7 +587,13 @@ typedef struct ogs_nas_5gs_service_reject_s { ogs_nas_pdu_session_status_t pdu_session_status; ogs_nas_gprs_timer_2_t t3346_value; ogs_nas_eap_message_t eap_message; - ogs_nas_gprs_timer_3_t t3448_value; + ogs_nas_gprs_timer_2_t t3448_value; + ogs_nas_cag_information_list_t cag_information_list; + ogs_nas_registration_wait_range_t disaster_return_wait_range; + ogs_nas_extended_cag_information_list_t extended_cag_information_list; + ogs_nas_gprs_timer_3_t lower_bound_timer_value; + ogs_nas_5gs_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_5gs_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; } ogs_nas_5gs_service_reject_t; @@ -476,11 +605,17 @@ typedef struct ogs_nas_5gs_service_reject_s { #define OGS_NAS_5GS_SERVICE_ACCEPT_PDU_SESSION_REACTIVATION_RESULT_ERROR_CAUSE_PRESENT ((uint64_t)1<<2) #define OGS_NAS_5GS_SERVICE_ACCEPT_EAP_MESSAGE_PRESENT ((uint64_t)1<<3) #define OGS_NAS_5GS_SERVICE_ACCEPT_T3448_VALUE_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_5GS_SERVICE_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<7) #define OGS_NAS_5GS_SERVICE_ACCEPT_PDU_SESSION_STATUS_TYPE 0x50 #define OGS_NAS_5GS_SERVICE_ACCEPT_PDU_SESSION_REACTIVATION_RESULT_TYPE 0x26 #define OGS_NAS_5GS_SERVICE_ACCEPT_PDU_SESSION_REACTIVATION_RESULT_ERROR_CAUSE_TYPE 0x72 #define OGS_NAS_5GS_SERVICE_ACCEPT_EAP_MESSAGE_TYPE 0x78 #define OGS_NAS_5GS_SERVICE_ACCEPT_T3448_VALUE_TYPE 0x6B +#define OGS_NAS_5GS_SERVICE_ACCEPT_5GS_ADDITIONAL_REQUEST_RESULT_TYPE 0x34 +#define OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_5GS_SERVICE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_5GS_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E typedef struct ogs_nas_5gs_service_accept_s { @@ -490,7 +625,10 @@ typedef struct ogs_nas_5gs_service_accept_s { ogs_nas_pdu_session_reactivation_result_t pdu_session_reactivation_result; ogs_nas_pdu_session_reactivation_result_error_cause_t pdu_session_reactivation_result_error_cause; ogs_nas_eap_message_t eap_message; - ogs_nas_gprs_timer_3_t t3448_value; + ogs_nas_gprs_timer_2_t t3448_value; + ogs_nas_5gs_additional_request_result_t additional_request_result; + ogs_nas_5gs_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_5gs_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; } ogs_nas_5gs_service_accept_t; @@ -520,6 +658,17 @@ typedef struct ogs_nas_5gs_service_accept_s { #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_PRESENT ((uint64_t)1<<20) #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_5GS_REGISTRATION_RESULT_PRESENT ((uint64_t)1<<21) #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_TRUNCATED_5G_S_TMSI_CONFIGURATION_PRESENT ((uint64_t)1<<22) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_ADDITIONAL_CONFIGURATION_INDICATION_PRESENT ((uint64_t)1<<23) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_REJECTED_NSSAI_PRESENT ((uint64_t)1<<24) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_PRESENT ((uint64_t)1<<25) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSSRG_INFORMATION_PRESENT ((uint64_t)1<<26) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_ROAMING_WAIT_RANGE_PRESENT ((uint64_t)1<<27) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_RETURN_WAIT_RANGE_PRESENT ((uint64_t)1<<28) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_PRESENT ((uint64_t)1<<29) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_CAG_INFORMATION_LIST_PRESENT ((uint64_t)1<<30) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UPDATED_PEIPS_ASSISTANCE_INFORMATION_PRESENT ((uint64_t)1<<31) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSAG_INFORMATION_PRESENT ((uint64_t)1<<32) +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_PRIORITY_INDICATOR_PRESENT ((uint64_t)1<<33) #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_CONFIGURATION_UPDATE_INDICATION_TYPE 0xD0 #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_5G_GUTI_TYPE 0x77 #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_TAI_LIST_TYPE 0x54 @@ -540,9 +689,20 @@ typedef struct ogs_nas_5gs_service_accept_s { #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_T3447_VALUE_TYPE 0x6C #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_CAG_INFORMATION_LIST_TYPE 0x75 #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UE_RADIO_CAPABILITY_ID_TYPE 0x67 -#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_TYPE 0x68 +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_TYPE 0xA0 #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_5GS_REGISTRATION_RESULT_TYPE 0x44 #define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_TRUNCATED_5G_S_TMSI_CONFIGURATION_TYPE 0x1B +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_ADDITIONAL_CONFIGURATION_INDICATION_TYPE 0xC0 +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_REJECTED_NSSAI_TYPE 0x68 +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_TYPE 0x72 +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSSRG_INFORMATION_TYPE 0x70 +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_ROAMING_WAIT_RANGE_TYPE 0x14 +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_DISASTER_RETURN_WAIT_RANGE_TYPE 0x2C +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_LIST_OF_PLMNS_TO_BE_USED_IN_DISASTER_CONDITION_TYPE 0x13 +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_EXTENDED_CAG_INFORMATION_LIST_TYPE 0x71 +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_UPDATED_PEIPS_ASSISTANCE_INFORMATION_TYPE 0x1F +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_NSAG_INFORMATION_TYPE 0x73 +#define OGS_NAS_5GS_CONFIGURATION_UPDATE_COMMAND_PRIORITY_INDICATOR_TYPE 0xE0 typedef struct ogs_nas_5gs_configuration_update_command_s { @@ -571,6 +731,17 @@ typedef struct ogs_nas_5gs_configuration_update_command_s { ogs_nas_ue_radio_capability_id_deletion_indication_t ue_radio_capability_id_deletion_indication; ogs_nas_5gs_registration_result_t registration_result; ogs_nas_truncated_5g_s_tmsi_configuration_t truncated_s_tmsi_configuration; + ogs_nas_additional_configuration_indication_t additional_configuration_indication; + ogs_nas_extended_rejected_nssai_t extended_rejected_nssai; + ogs_nas_service_level_aa_container_t service_level_aa_container; + ogs_nas_nssrg_information_t nssrg_information; + ogs_nas_registration_wait_range_t disaster_roaming_wait_range; + ogs_nas_registration_wait_range_t disaster_return_wait_range; + ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t list_of_plmns_to_be_used_in_disaster_condition; + ogs_nas_extended_cag_information_list_t extended_cag_information_list; + ogs_nas_peips_assistance_information_t updated_peips_assistance_information; + ogs_nas_nsag_information_t nsag_information; + ogs_nas_priority_indicator_t priority_indicator; } ogs_nas_5gs_configuration_update_command_t; @@ -823,10 +994,12 @@ typedef struct ogs_nas_5gs_ul_nas_transport_s { #define OGS_NAS_5GS_DL_NAS_TRANSPORT_ADDITIONAL_INFORMATION_PRESENT ((uint64_t)1<<1) #define OGS_NAS_5GS_DL_NAS_TRANSPORT_5GMM_CAUSE_PRESENT ((uint64_t)1<<2) #define OGS_NAS_5GS_DL_NAS_TRANSPORT_BACK_OFF_TIMER_VALUE_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_5GS_DL_NAS_TRANSPORT_LOWER_BOUND_TIMER_VALUE_PRESENT ((uint64_t)1<<4) #define OGS_NAS_5GS_DL_NAS_TRANSPORT_PDU_SESSION_ID_TYPE 0x12 #define OGS_NAS_5GS_DL_NAS_TRANSPORT_ADDITIONAL_INFORMATION_TYPE 0x24 #define OGS_NAS_5GS_DL_NAS_TRANSPORT_5GMM_CAUSE_TYPE 0x58 #define OGS_NAS_5GS_DL_NAS_TRANSPORT_BACK_OFF_TIMER_VALUE_TYPE 0x37 +#define OGS_NAS_5GS_DL_NAS_TRANSPORT_LOWER_BOUND_TIMER_VALUE_TYPE 0x3A typedef struct ogs_nas_5gs_dl_nas_transport_s { /* Mandatory fields */ @@ -839,6 +1012,7 @@ typedef struct ogs_nas_5gs_dl_nas_transport_s { ogs_nas_additional_information_t additional_information; ogs_nas_5gmm_cause_t gmm_cause; ogs_nas_gprs_timer_3_t back_off_timer_value; + ogs_nas_gprs_timer_3_t lower_bound_timer_value; } ogs_nas_5gs_dl_nas_transport_t; @@ -852,10 +1026,16 @@ typedef struct ogs_nas_5gs_dl_nas_transport_s { #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_ALWAYS_ON_PDU_SESSION_REQUESTED_PRESENT ((uint64_t)1<<4) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SM_PDU_DN_REQUEST_CONTAINER_PRESENT ((uint64_t)1<<5) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<6) -#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<7) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_DS_TT_ETHERNET_PORT_MAC_ADDRESS_PRESENT ((uint64_t)1<<8) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_UE_DS_TT_RESIDENCE_TIME_PRESENT ((uint64_t)1<<9) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PORT_MANAGEMENT_INFORMATION_CONTAINER_PRESENT ((uint64_t)1<<10) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<11) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SUGGESTED_INTERFACE_IDENTIFIER_PRESENT ((uint64_t)1<<12) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SERVICE_LEVEL_AA_CONTAINER_PRESENT ((uint64_t)1<<13) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_REQUESTED_MBS_CONTAINER_PRESENT ((uint64_t)1<<14) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PDU_SESSION_PAIR_ID_PRESENT ((uint64_t)1<<15) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_RSN_PRESENT ((uint64_t)1<<16) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PDU_SESSION_TYPE_TYPE 0x90 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SSC_MODE_TYPE 0xA0 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_5GSM_CAPABILITY_TYPE 0x28 @@ -863,10 +1043,16 @@ typedef struct ogs_nas_5gs_dl_nas_transport_s { #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_ALWAYS_ON_PDU_SESSION_REQUESTED_TYPE 0xB0 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SM_PDU_DN_REQUEST_CONTAINER_TYPE 0x39 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B -#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x66 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x66 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_DS_TT_ETHERNET_PORT_MAC_ADDRESS_TYPE 0x6E #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_UE_DS_TT_RESIDENCE_TIME_TYPE 0x6F -#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PORT_MANAGEMENT_INFORMATION_CONTAINER_TYPE 0x7C +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PORT_MANAGEMENT_INFORMATION_CONTAINER_TYPE 0x74 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x1F +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SUGGESTED_INTERFACE_IDENTIFIER_TYPE 0x29 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_SERVICE_LEVEL_AA_CONTAINER_TYPE 0x72 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_REQUESTED_MBS_CONTAINER_TYPE 0x70 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_PDU_SESSION_PAIR_ID_TYPE 0x34 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REQUEST_RSN_TYPE 0x35 typedef struct ogs_nas_5gs_pdu_session_establishment_request_s { /* Mandatory fields */ @@ -881,10 +1067,16 @@ typedef struct ogs_nas_5gs_pdu_session_establishment_request_s { ogs_nas_always_on_pdu_session_requested_t always_on_pdu_session_requested; ogs_nas_sm_pdu_dn_request_container_t sm_pdu_dn_request_container; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; - ogs_nas_header_compression_configuration_t header_compression_configuration; + ogs_nas_ip_header_compression_configuration_t ip_header_compression_configuration; ogs_nas_ds_tt_ethernet_port_mac_address_t ds_tt_ethernet_port_mac_address; ogs_nas_ue_ds_tt_residence_time_t ue_ds_tt_residence_time; ogs_nas_port_management_information_container_t port_management_information_container; + ogs_nas_ethernet_header_compression_configuration_t ethernet_header_compression_configuration; + ogs_nas_pdu_address_t suggested_interface_identifier; + ogs_nas_service_level_aa_container_t service_level_aa_container; + ogs_nas_requested_mbs_container_t requested_mbs_container; + ogs_nas_pdu_session_pair_id_t pdu_session_pair_id; + ogs_nas_rsn_t rsn; } ogs_nas_5gs_pdu_session_establishment_request_t; @@ -905,7 +1097,10 @@ typedef struct ogs_nas_5gs_pdu_session_establishment_request_s { #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_SERVING_PLMN_RATE_CONTROL_PRESENT ((uint64_t)1<<11) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_ATSSS_CONTAINER_PRESENT ((uint64_t)1<<12) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_CONTROL_PLANE_ONLY_INDICATION_PRESENT ((uint64_t)1<<13) -#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<14) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<14) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<15) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_PRESENT ((uint64_t)1<<16) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_RECEIVED_MBS_CONTAINER_PRESENT ((uint64_t)1<<17) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_5GSM_CAUSE_TYPE 0x59 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_PDU_ADDRESS_TYPE 0x29 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_RQ_TIMER_VALUE_TYPE 0x56 @@ -920,7 +1115,10 @@ typedef struct ogs_nas_5gs_pdu_session_establishment_request_s { #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_SERVING_PLMN_RATE_CONTROL_TYPE 0x18 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_ATSSS_CONTAINER_TYPE 0x77 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_CONTROL_PLANE_ONLY_INDICATION_TYPE 0xC0 -#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x66 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x66 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x1F +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_SERVICE_LEVEL_AA_CONTAINER_TYPE 0x72 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_ACCEPT_RECEIVED_MBS_CONTAINER_TYPE 0x71 typedef struct ogs_nas_5gs_pdu_session_establishment_accept_s { /* Mandatory fields */ @@ -944,7 +1142,10 @@ typedef struct ogs_nas_5gs_pdu_session_establishment_accept_s { ogs_nas_serving_plmn_rate_control_t serving_plmn_rate_control; ogs_nas_atsss_container_t atsss_container; ogs_nas_control_plane_only_indication_t control_plane_only_indication; - ogs_nas_header_compression_configuration_t header_compression_configuration; + ogs_nas_ip_header_compression_configuration_t ip_header_compression_configuration; + ogs_nas_ethernet_header_compression_configuration_t ethernet_header_compression_configuration; + ogs_nas_service_level_aa_container_t service_level_aa_container; + ogs_nas_received_mbs_container_t received_mbs_container; } ogs_nas_5gs_pdu_session_establishment_accept_t; @@ -954,15 +1155,17 @@ typedef struct ogs_nas_5gs_pdu_session_establishment_accept_s { #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_BACK_OFF_TIMER_VALUE_PRESENT ((uint64_t)1<<0) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_ALLOWED_SSC_MODE_PRESENT ((uint64_t)1<<1) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_EAP_MESSAGE_PRESENT ((uint64_t)1<<2) -#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<3) -#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<4) -#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_SERVICE_LEVEL_AA_CONTAINER_PRESENT ((uint64_t)1<<6) #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_BACK_OFF_TIMER_VALUE_TYPE 0x37 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_ALLOWED_SSC_MODE_TYPE 0xF0 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_EAP_MESSAGE_TYPE 0x78 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE 0x61 #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B #define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_RE_ATTEMPT_INDICATOR_TYPE 0x1D -#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE 0x61 +#define OGS_NAS_5GS_PDU_SESSION_ESTABLISHMENT_REJECT_SERVICE_LEVEL_AA_CONTAINER_TYPE 0x72 typedef struct ogs_nas_5gs_pdu_session_establishment_reject_s { /* Mandatory fields */ @@ -973,9 +1176,10 @@ typedef struct ogs_nas_5gs_pdu_session_establishment_reject_s { ogs_nas_gprs_timer_3_t back_off_timer_value; ogs_nas_allowed_ssc_mode_t allowed_ssc_mode; ogs_nas_eap_message_t eap_message; + ogs_nas_5gsm_congestion_re_attempt_indicator_t gsm_congestion_re_attempt_indicator; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; ogs_nas_re_attempt_indicator_t re_attempt_indicator; - ogs_nas_5gsm_congestion_re_attempt_indicator_t gsm_congestion_re_attempt_indicator; + ogs_nas_service_level_aa_container_t service_level_aa_container; } ogs_nas_5gs_pdu_session_establishment_reject_t; @@ -1041,7 +1245,10 @@ typedef struct ogs_nas_5gs_pdu_session_authentication_result_s { #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_MAPPED_EPS_BEARER_CONTEXTS_PRESENT ((uint64_t)1<<7) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<8) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_PORT_MANAGEMENT_INFORMATION_CONTAINER_PRESENT ((uint64_t)1<<9) -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<10) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<10) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<11) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_REQUESTED_MBS_CONTAINER_PRESENT ((uint64_t)1<<12) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_PRESENT ((uint64_t)1<<13) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_5GSM_CAPABILITY_TYPE 0x28 #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_5GSM_CAUSE_TYPE 0x59 #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_MAXIMUM_NUMBER_OF_SUPPORTED_PACKET_FILTERS_TYPE 0x55 @@ -1051,8 +1258,11 @@ typedef struct ogs_nas_5gs_pdu_session_authentication_result_s { #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_REQUESTED_QOS_FLOW_DESCRIPTIONS_TYPE 0x79 #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_MAPPED_EPS_BEARER_CONTEXTS_TYPE 0x75 #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_PORT_MANAGEMENT_INFORMATION_CONTAINER_TYPE 0x7C -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x66 +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_PORT_MANAGEMENT_INFORMATION_CONTAINER_TYPE 0x74 +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x66 +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x1F +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_REQUESTED_MBS_CONTAINER_TYPE 0x70 +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REQUEST_SERVICE_LEVEL_AA_CONTAINER_TYPE 0x72 typedef struct ogs_nas_5gs_pdu_session_modification_request_s { @@ -1068,7 +1278,10 @@ typedef struct ogs_nas_5gs_pdu_session_modification_request_s { ogs_nas_mapped_eps_bearer_contexts_t mapped_eps_bearer_contexts; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; ogs_nas_port_management_information_container_t port_management_information_container; - ogs_nas_header_compression_configuration_t header_compression_configuration; + ogs_nas_header_compression_configuration_t ip_header_compression_configuration; + ogs_nas_ethernet_header_compression_configuration_t ethernet_header_compression_configuration; + ogs_nas_requested_mbs_container_t requested_mbs_container; + ogs_nas_service_level_aa_container_t service_level_aa_container; } ogs_nas_5gs_pdu_session_modification_request_t; @@ -1076,13 +1289,13 @@ typedef struct ogs_nas_5gs_pdu_session_modification_request_s { * PDU SESSION MODIFICATION REJECT ******************************************************/ #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_BACK_OFF_TIMER_VALUE_PRESENT ((uint64_t)1<<0) -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<1) -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<2) -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<3) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_BACK_OFF_TIMER_VALUE_TYPE 0x37 +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE 0x61 #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_RE_ATTEMPT_INDICATOR_TYPE 0x1D -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_REJECT_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE 0x61 typedef struct ogs_nas_5gs_pdu_session_modification_reject_s { /* Mandatory fields */ @@ -1091,9 +1304,9 @@ typedef struct ogs_nas_5gs_pdu_session_modification_reject_s { /* Optional fields */ uint64_t presencemask; ogs_nas_gprs_timer_3_t back_off_timer_value; + ogs_nas_5gsm_congestion_re_attempt_indicator_t gsm_congestion_re_attempt_indicator; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; ogs_nas_re_attempt_indicator_t re_attempt_indicator; - ogs_nas_5gsm_congestion_re_attempt_indicator_t gsm_congestion_re_attempt_indicator; } ogs_nas_5gs_pdu_session_modification_reject_t; @@ -1109,9 +1322,12 @@ typedef struct ogs_nas_5gs_pdu_session_modification_reject_s { #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_AUTHORIZED_QOS_FLOW_DESCRIPTIONS_PRESENT ((uint64_t)1<<6) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<7) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_ATSSS_CONTAINER_PRESENT ((uint64_t)1<<8) -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<9) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_IP_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<9) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_PORT_MANAGEMENT_INFORMATION_CONTAINER_PRESENT ((uint64_t)1<<10) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_SERVING_PLMN_RATE_CONTROL_PRESENT ((uint64_t)1<<11) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<12) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_RECEIVED_MBS_CONTAINER_PRESENT ((uint64_t)1<<13) +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_SERVICE_LEVEL_AA_CONTAINER_PRESENT ((uint64_t)1<<14) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_5GSM_CAUSE_TYPE 0x59 #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_SESSION_AMBR_TYPE 0x2A #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_RQ_TIMER_VALUE_TYPE 0x56 @@ -1121,9 +1337,12 @@ typedef struct ogs_nas_5gs_pdu_session_modification_reject_s { #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_AUTHORIZED_QOS_FLOW_DESCRIPTIONS_TYPE 0x79 #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_ATSSS_CONTAINER_TYPE 0x77 -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x66 -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_PORT_MANAGEMENT_INFORMATION_CONTAINER_TYPE 0x7C +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_IP_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x66 +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_PORT_MANAGEMENT_INFORMATION_CONTAINER_TYPE 0x74 #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_SERVING_PLMN_RATE_CONTROL_TYPE 0x1E +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_ETHERNET_HEADER_COMPRESSION_CONFIGURATION_TYPE 0x1F +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_RECEIVED_MBS_CONTAINER_TYPE 0x71 +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMMAND_SERVICE_LEVEL_AA_CONTAINER_TYPE 0x72 typedef struct ogs_nas_5gs_pdu_session_modification_command_s { @@ -1138,9 +1357,12 @@ typedef struct ogs_nas_5gs_pdu_session_modification_command_s { ogs_nas_qos_flow_descriptions_t authorized_qos_flow_descriptions; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; ogs_nas_atsss_container_t atsss_container; - ogs_nas_header_compression_configuration_t header_compression_configuration; + ogs_nas_ip_header_compression_configuration_t ip_header_compression_configuration; ogs_nas_port_management_information_container_t port_management_information_container; ogs_nas_serving_plmn_rate_control_t serving_plmn_rate_control; + ogs_nas_ethernet_header_compression_configuration_t ethernet_header_compression_configuration; + ogs_nas_received_mbs_container_t received_mbs_container; + ogs_nas_service_level_aa_container_t service_level_aa_container; } ogs_nas_5gs_pdu_session_modification_command_t; @@ -1150,7 +1372,7 @@ typedef struct ogs_nas_5gs_pdu_session_modification_command_s { #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMPLETE_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMPLETE_PORT_MANAGEMENT_INFORMATION_CONTAINER_PRESENT ((uint64_t)1<<1) #define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMPLETE_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B -#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMPLETE_PORT_MANAGEMENT_INFORMATION_CONTAINER_TYPE 0x7C +#define OGS_NAS_5GS_PDU_SESSION_MODIFICATION_COMPLETE_PORT_MANAGEMENT_INFORMATION_CONTAINER_TYPE 0x74 typedef struct ogs_nas_5gs_pdu_session_modification_complete_s { @@ -1218,11 +1440,13 @@ typedef struct ogs_nas_5gs_pdu_session_release_reject_s { #define OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<2) #define OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<3) #define OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_ACCESS_TYPE_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_PRESENT ((uint64_t)1<<5) #define OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_BACK_OFF_TIMER_VALUE_TYPE 0x37 #define OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_EAP_MESSAGE_TYPE 0x78 #define OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_5GSM_CONGESTION_RE_ATTEMPT_INDICATOR_TYPE 0x61 #define OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B #define OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_ACCESS_TYPE_TYPE 0xD0 +#define OGS_NAS_5GS_PDU_SESSION_RELEASE_COMMAND_SERVICE_LEVEL_AA_CONTAINER_TYPE 0x72 typedef struct ogs_nas_5gs_pdu_session_release_command_s { /* Mandatory fields */ @@ -1235,6 +1459,7 @@ typedef struct ogs_nas_5gs_pdu_session_release_command_s { ogs_nas_5gsm_congestion_re_attempt_indicator_t gsm_congestion_re_attempt_indicator; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; ogs_nas_access_type_t access_type; + ogs_nas_service_level_aa_container_t service_level_aa_container; } ogs_nas_5gs_pdu_session_release_command_t; diff --git a/lib/nas/5gs/support/24501-g41.docx b/lib/nas/5gs/support/24501-g41.docx deleted file mode 100644 index e02a5159c..000000000 Binary files a/lib/nas/5gs/support/24501-g41.docx and /dev/null differ diff --git a/lib/nas/5gs/support/24501-h90.docx b/lib/nas/5gs/support/24501-h90.docx new file mode 100644 index 000000000..0c43835a5 Binary files /dev/null and b/lib/nas/5gs/support/24501-h90.docx differ diff --git a/lib/nas/5gs/support/README.md b/lib/nas/5gs/support/README.md index 7922d2fef..c19b33de9 100644 --- a/lib/nas/5gs/support/README.md +++ b/lib/nas/5gs/support/README.md @@ -7,6 +7,10 @@ user@host ~/Documents/git/open5gs/lib/nas/5gs/support$ \ from 24301-d80.doc to 24301-d80.docx using Microsoft Office 2007+ +* Adjust table cell in 24301-h90.docx + * Generate Message support files user@host ~/Documents/git/open5gs/lib/nas/5gs/support$ \ - python3 nas-message.py -f 24501-g41.docx -o .. + python3 nas-message.py -f 24501-h90.docx -o .. + +* Add new structure to the types.h diff --git a/lib/nas/5gs/support/cache/nas-msg-104.py b/lib/nas/5gs/support/cache/nas-msg-104.py index b061ecba8..f1efce3fd 100644 --- a/lib/nas/5gs/support/cache/nas-msg-104.py +++ b/lib/nas/5gs/support/cache/nas-msg-104.py @@ -5,4 +5,5 @@ ies.append({ "iei" : "12", "value" : "PDU session ID", "type" : "PDU session ide ies.append({ "iei" : "24", "value" : "Additional information", "type" : "Additional information", "reference" : "9.11.2.1", "presence" : "O", "format" : "TLV", "length" : "3-n"}) ies.append({ "iei" : "58", "value" : "5GMM cause", "type" : "5GMM cause", "reference" : "9.11.3.2", "presence" : "O", "format" : "TV", "length" : "2"}) ies.append({ "iei" : "37", "value" : "Back-off timer value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "3A", "value" : "Lower bound timer value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-193.py b/lib/nas/5gs/support/cache/nas-msg-193.py index 80bef0f87..6511924a1 100644 --- a/lib/nas/5gs/support/cache/nas-msg-193.py +++ b/lib/nas/5gs/support/cache/nas-msg-193.py @@ -7,8 +7,14 @@ ies.append({ "iei" : "55", "value" : "Maximum number of supported packet filters ies.append({ "iei" : "B-", "value" : "Always-on PDU session requested", "type" : "Always-on PDU session requested", "reference" : "9.11.4.4", "presence" : "O", "format" : "TV", "length" : "1"}) ies.append({ "iei" : "39", "value" : "SM PDU DN request container", "type" : "SM PDU DN request container", "reference" : "9.11.4.15", "presence" : "O", "format" : "TLV", "length" : "3-255"}) ies.append({ "iei" : "7B", "value" : "Extended protocol configuration options", "type" : "Extended protocol configuration options", "reference" : "9.11.4.6", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) -ies.append({ "iei" : "66", "value" : "Header compression configuration", "type" : "Header compression configuration", "reference" : "9.11.4.24", "presence" : "O", "format" : "TLV", "length" : "5-257"}) +ies.append({ "iei" : "66", "value" : "IP header compression configuration", "type" : "IP header compression configuration", "reference" : "9.11.4.24", "presence" : "O", "format" : "TLV", "length" : "5-257"}) ies.append({ "iei" : "6E", "value" : "DS-TT Ethernet port MAC address", "type" : "DS-TT Ethernet port MAC address", "reference" : "9.11.4.25", "presence" : "O", "format" : "TLV", "length" : "8"}) ies.append({ "iei" : "6F", "value" : "UE-DS-TT residence time", "type" : "UE-DS-TT residence time", "reference" : "9.11.4.26", "presence" : "O", "format" : "TLV", "length" : "10"}) -ies.append({ "iei" : "7C", "value" : "Port management information container", "type" : "Port management information container", "reference" : "9.11.4.27", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) +ies.append({ "iei" : "74", "value" : "Port management information container", "type" : "Port management information container", "reference" : "9.11.4.27", "presence" : "O", "format" : "TLV-E", "length" : "8-65538"}) +ies.append({ "iei" : "1F", "value" : "Ethernet header compression configuration", "type" : "Ethernet header compression configuration", "reference" : "9.11.4.28", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "29", "value" : "Suggested interface identifier", "type" : "PDU address", "reference" : "9.11.4.10", "presence" : "O", "format" : "TLV", "length" : "11"}) +ies.append({ "iei" : "72", "value" : "Service-level-AA container", "type" : "Service-level-AA container", "reference" : "9.11.2.10", "presence" : "O", "format" : "TLV-E", "length" : "6-n"}) +ies.append({ "iei" : "70", "value" : "Requested MBS container", "type" : "Requested MBS container", "reference" : "9.11.4.30", "presence" : "O", "format" : "TLV-E", "length" : "8-65538"}) +ies.append({ "iei" : "34", "value" : "PDU session pair ID", "type" : "PDU session pair ID", "reference" : "9.11.4.32", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "35", "value" : "RSN", "type" : "RSN", "reference" : "9.11.4.33", "presence" : "O", "format" : "TLV", "length" : "3"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-194.py b/lib/nas/5gs/support/cache/nas-msg-194.py index b4ec01d61..ddc25ab89 100644 --- a/lib/nas/5gs/support/cache/nas-msg-194.py +++ b/lib/nas/5gs/support/cache/nas-msg-194.py @@ -3,7 +3,7 @@ ies.append({ "iei" : "", "value" : "Selected PDU session type", "type" : "PDU se ies.append({ "iei" : "", "value" : "Authorized QoS rules", "type" : "QoS rules", "reference" : "9.11.4.13", "presence" : "M", "format" : "LV-E", "length" : "6-65538"}) ies.append({ "iei" : "", "value" : "Session AMBR", "type" : "Session-AMBR", "reference" : "9.11.4.14", "presence" : "M", "format" : "LV", "length" : "7"}) ies.append({ "iei" : "59", "value" : "5GSM cause", "type" : "5GSM cause", "reference" : "9.11.4.2", "presence" : "O", "format" : "TV", "length" : "2"}) -ies.append({ "iei" : "29", "value" : "PDU address", "type" : "PDU address", "reference" : "9.11.4.10", "presence" : "O", "format" : "TLV", "length" : "7, 11 or 15"}) +ies.append({ "iei" : "29", "value" : "PDU address", "type" : "PDU address", "reference" : "9.11.4.10", "presence" : "O", "format" : "TLV", "length" : "7-31"}) ies.append({ "iei" : "56", "value" : "RQ timer value", "type" : "GPRS timer", "reference" : "9.11.2.3", "presence" : "O", "format" : "TV", "length" : "2"}) ies.append({ "iei" : "22", "value" : "S-NSSAI", "type" : "S-NSSAI", "reference" : "9.11.2.8", "presence" : "O", "format" : "TLV", "length" : "3-10"}) ies.append({ "iei" : "8-", "value" : "Always-on PDU session indication", "type" : "Always-on PDU session indication", "reference" : "9.11.4.3", "presence" : "O", "format" : "TV", "length" : "1"}) @@ -16,5 +16,8 @@ ies.append({ "iei" : "17", "value" : "5GSM network feature support", "type" : "5 ies.append({ "iei" : "18", "value" : "Serving PLMN rate control", "type" : "Serving PLMN rate control", "reference" : "9.11.4.20", "presence" : "O", "format" : "TLV", "length" : "4"}) ies.append({ "iei" : "77", "value" : "ATSSS container", "type" : "ATSSS container", "reference" : "9.11.4.22", "presence" : "O", "format" : "TLV-E", "length" : "3-65538"}) ies.append({ "iei" : "C-", "value" : "Control plane only indication", "type" : "Control plane only indication", "reference" : "9.11.4.23", "presence" : "O", "format" : "TV", "length" : "1"}) -ies.append({ "iei" : "66", "value" : "Header compression configuration", "type" : "Header compression configuration", "reference" : "9.11.4.24", "presence" : "O", "format" : "TLV", "length" : "5-257"}) +ies.append({ "iei" : "66", "value" : "IP header compression configuration", "type" : "IP header compression configuration", "reference" : "9.11.4.24", "presence" : "O", "format" : "TLV", "length" : "5-257"}) +ies.append({ "iei" : "1F", "value" : "Ethernet header compression configuration", "type" : "Ethernet header compression configuration", "reference" : "9.11.4.28", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "72", "value" : "Service-level-AA container", "type" : "Service-level-AA container", "reference" : "9.11.2.10", "presence" : "O", "format" : "TLV-E", "length" : "6-n"}) +ies.append({ "iei" : "71", "value" : "Received MBS container", "type" : "Received MBS container", "reference" : "9.11.4.31", "presence" : "O", "format" : "TLV-E", "length" : "9-65538"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-195.py b/lib/nas/5gs/support/cache/nas-msg-195.py index e3a62a38f..949ce730d 100644 --- a/lib/nas/5gs/support/cache/nas-msg-195.py +++ b/lib/nas/5gs/support/cache/nas-msg-195.py @@ -3,7 +3,8 @@ ies.append({ "iei" : "", "value" : "5GSM cause", "type" : "5GSM cause", "referen ies.append({ "iei" : "37", "value" : "Back-off timer value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "F-", "value" : "Allowed SSC mode", "type" : "Allowed SSC mode", "reference" : "9.11.4.5", "presence" : "O", "format" : "TV", "length" : "1"}) ies.append({ "iei" : "78", "value" : "EAP message", "type" : "EAP message", "reference" : "9.11.2.2", "presence" : "O", "format" : "TLV-E", "length" : "7-1503"}) +ies.append({ "iei" : "61", "value" : "5GSM congestion re-attempt indicator", "type" : "5GSM congestion re-attempt indicator", "reference" : "9.11.4.21", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "7B", "value" : "Extended protocol configuration options", "type" : "Extended protocol configuration options", "reference" : "9.11.4.6", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) ies.append({ "iei" : "1D", "value" : "Re-attempt indicator", "type" : "Re-attempt indicator", "reference" : "9.11.4.17", "presence" : "O", "format" : "TLV", "length" : "3"}) -ies.append({ "iei" : "61", "value" : "5GSM congestion re-attempt indicator", "type" : "5GSM congestion re-attempt indicator", "reference" : "9.11.4.21", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "72", "value" : "Service-level-AA container", "type" : "Service-level-AA container", "reference" : "9.11.2.10", "presence" : "O", "format" : "TLV-E", "length" : "6-n"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-201.py b/lib/nas/5gs/support/cache/nas-msg-201.py index 81241c269..266353cf8 100644 --- a/lib/nas/5gs/support/cache/nas-msg-201.py +++ b/lib/nas/5gs/support/cache/nas-msg-201.py @@ -8,6 +8,9 @@ ies.append({ "iei" : "7A", "value" : "Requested QoS rules", "type" : "QoS rules" ies.append({ "iei" : "79", "value" : "Requested QoS flow descriptions", "type" : "QoS flow descriptions", "reference" : "9.11.4.12", "presence" : "O", "format" : "TLV-E", "length" : "6-65538"}) ies.append({ "iei" : "75", "value" : "Mapped EPS bearer contexts", "type" : "Mapped EPS bearer contexts", "reference" : "9.11.4.8", "presence" : "O", "format" : "TLV-E", "length" : "7-65538"}) ies.append({ "iei" : "7B", "value" : "Extended protocol configuration options", "type" : "Extended protocol configuration options", "reference" : "9.11.4.6", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) -ies.append({ "iei" : "7C", "value" : "Port management information container", "type" : "Port management information container", "reference" : "9.11.4.27", "presence" : "O", "format" : "TLV-E", "length" : "3-65538"}) -ies.append({ "iei" : "66", "value" : "Header compression configuration", "type" : "Header compression configuration", "reference" : "9.11.4.24", "presence" : "O", "format" : "TLV", "length" : "5-257"}) +ies.append({ "iei" : "74", "value" : "Port management information container", "type" : "Port management information container", "reference" : "9.11.4.27", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) +ies.append({ "iei" : "66", "value" : "IP header compression configuration", "type" : "Header compression configuration", "reference" : "9.11.4.24", "presence" : "O", "format" : "TLV", "length" : "5-257"}) +ies.append({ "iei" : "1F", "value" : "Ethernet header compression configuration", "type" : "Ethernet header compression configuration", "reference" : "9.11.4.28", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "70", "value" : "Requested MBS container", "type" : "Requested MBS container", "reference" : "9.11.4.30", "presence" : "O", "format" : "TLV-E", "length" : "8-65538"}) +ies.append({ "iei" : "72", "value" : "Service-level-AA container", "type" : "Service-level-AA container", "reference" : "9.11.2.10", "presence" : "O", "format" : "TLV-E", "length" : "6-n"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-202.py b/lib/nas/5gs/support/cache/nas-msg-202.py index 42f75bd85..0fc53a825 100644 --- a/lib/nas/5gs/support/cache/nas-msg-202.py +++ b/lib/nas/5gs/support/cache/nas-msg-202.py @@ -1,7 +1,7 @@ ies = [] ies.append({ "iei" : "", "value" : "5GSM cause", "type" : "5GSM cause", "reference" : "9.11.4.2", "presence" : "M", "format" : "V", "length" : "1"}) ies.append({ "iei" : "37", "value" : "Back-off timer value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "61", "value" : "5GSM congestion re-attempt indicator", "type" : "5GSM congestion re-attempt indicator", "reference" : "9.11.4.21", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "7B", "value" : "Extended protocol configuration options", "type" : "Extended protocol configuration options", "reference" : "9.11.4.6", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) ies.append({ "iei" : "1D", "value" : "Re-attempt indicator", "type" : "Re-attempt indicator", "reference" : "9.11.4.17", "presence" : "O", "format" : "TLV", "length" : "3"}) -ies.append({ "iei" : "61", "value" : "5GSM congestion re-attempt indicator", "type" : "5GSM congestion re-attempt indicator", "reference" : "9.11.4.21", "presence" : "O", "format" : "TLV", "length" : "3"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-203.py b/lib/nas/5gs/support/cache/nas-msg-203.py index 4aaed74c7..f93905a8a 100644 --- a/lib/nas/5gs/support/cache/nas-msg-203.py +++ b/lib/nas/5gs/support/cache/nas-msg-203.py @@ -8,7 +8,10 @@ ies.append({ "iei" : "75", "value" : "Mapped EPS bearer contexts", "type" : "Map ies.append({ "iei" : "79", "value" : "Authorized QoS flow descriptions", "type" : "QoS flow descriptions", "reference" : "9.11.4.12", "presence" : "O", "format" : "TLV-E", "length" : "6-65538"}) ies.append({ "iei" : "7B", "value" : "Extended protocol configuration options", "type" : "Extended protocol configuration options", "reference" : "9.11.4.6", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) ies.append({ "iei" : "77", "value" : "ATSSS container", "type" : "ATSSS container", "reference" : "9.11.4.22", "presence" : "O", "format" : "TLV-E", "length" : "3-65538"}) -ies.append({ "iei" : "66", "value" : "Header compression configuration", "type" : "Header compression configuration", "reference" : "9.11.4.24", "presence" : "O", "format" : "TLV", "length" : "5-257"}) -ies.append({ "iei" : "7C", "value" : "Port management information container", "type" : "Port management information container", "reference" : "9.11.4.27", "presence" : "O", "format" : "TLV-E", "length" : "3-65538"}) +ies.append({ "iei" : "66", "value" : "IP header compression configuration", "type" : "IP header compression configuration", "reference" : "9.11.4.24", "presence" : "O", "format" : "TLV", "length" : "5-257"}) +ies.append({ "iei" : "74", "value" : "Port management information container", "type" : "Port management information container", "reference" : "9.11.4.27", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) ies.append({ "iei" : "1E", "value" : "Serving PLMN rate control", "type" : "Serving PLMN rate control", "reference" : "9.11.4.20", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "1F", "value" : "Ethernet header compression configuration", "type" : "Ethernet header compression configuration", "reference" : "9.11.4.28", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "71", "value" : "Received MBS container", "type" : "Received MBS container", "reference" : "9.11.4.31", "presence" : "O", "format" : "TLV-E", "length" : "9-65538"}) +ies.append({ "iei" : "72", "value" : "Service-level-AA container", "type" : "Service-level-AA container", "reference" : "9.11.2.10", "presence" : "O", "format" : "TLV-E", "length" : "6-n"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-204.py b/lib/nas/5gs/support/cache/nas-msg-204.py index 8d46a9f9f..043838cdf 100644 --- a/lib/nas/5gs/support/cache/nas-msg-204.py +++ b/lib/nas/5gs/support/cache/nas-msg-204.py @@ -1,4 +1,4 @@ ies = [] ies.append({ "iei" : "7B", "value" : "Extended protocol configuration options", "type" : "Extended protocol configuration options", "reference" : "9.11.4.6", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) -ies.append({ "iei" : "7C", "value" : "Port management information container", "type" : "Port management information container", "reference" : "9.11.4.27", "presence" : "O", "format" : "TLV-E", "length" : "3-65538"}) +ies.append({ "iei" : "74", "value" : "Port management information container", "type" : "Port management information container", "reference" : "9.11.4.27", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-211.py b/lib/nas/5gs/support/cache/nas-msg-211.py index af14e9fc2..8d6457f62 100644 --- a/lib/nas/5gs/support/cache/nas-msg-211.py +++ b/lib/nas/5gs/support/cache/nas-msg-211.py @@ -5,4 +5,5 @@ ies.append({ "iei" : "78", "value" : "EAP message", "type" : "EAP message", "ref ies.append({ "iei" : "61", "value" : "5GSM congestion re-attempt indicator", "type" : "5GSM congestion re-attempt indicator", "reference" : "9.11.4.21", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "7B", "value" : "Extended protocol configuration options", "type" : "Extended protocol configuration options", "reference" : "9.11.4.6", "presence" : "O", "format" : "TLV-E", "length" : "4-65538"}) ies.append({ "iei" : "D-", "value" : "Access type", "type" : "Access type", "reference" : "9.11.2.1A", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "72", "value" : "Service-level-AA container", "type" : "Service-level-AA container", "reference" : "9.11.2.10", "presence" : "O", "format" : "TLV-E", "length" : "6-n"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-65.py b/lib/nas/5gs/support/cache/nas-msg-65.py index b7f78fda8..b54c8f74f 100644 --- a/lib/nas/5gs/support/cache/nas-msg-65.py +++ b/lib/nas/5gs/support/cache/nas-msg-65.py @@ -25,11 +25,19 @@ ies.append({ "iei" : "41", "value" : "Mobile station classmark 2", "type" : "Mob ies.append({ "iei" : "42", "value" : "Supported codecs", "type" : "Supported codec list", "reference" : "9.11.3.51A", "presence" : "O", "format" : "TLV", "length" : "5-n"}) ies.append({ "iei" : "71", "value" : "NAS message container", "type" : "message container", "reference" : "9.11.3.33", "presence" : "O", "format" : "TLV-E", "length" : "4-n"}) ies.append({ "iei" : "60", "value" : "EPS bearer context status", "type" : "EPS bearer context status", "reference" : "9.11.3.23A", "presence" : "O", "format" : "TLV", "length" : "4"}) -ies.append({ "iei" : "6E", "value" : "Requested extended DRX parameters", "type" : "Extended DRX parameters", "reference" : "9.11.3.26A", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "6E", "value" : "Requested extended DRX parameters", "type" : "Extended DRX parameters", "reference" : "9.11.3.26A", "presence" : "O", "format" : "TLV", "length" : "3-4"}) ies.append({ "iei" : "6A", "value" : "T3324 value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "67", "value" : "UE radio capability ID", "type" : "UE radio capability ID", "reference" : "9.11.3.68", "presence" : "O", "format" : "TLV", "length" : "3-n"}) ies.append({ "iei" : "35", "value" : "Requested mapped NSSAI", "type" : "Mapped NSSAI", "reference" : "9.11.3.31B", "presence" : "O", "format" : "TLV", "length" : "3-42"}) ies.append({ "iei" : "48", "value" : "Additional information requested", "type" : "Additional information requested", "reference" : "9.11.3.12A", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "1A", "value" : "Requested WUS assistance information", "type" : "WUS assistance information", "reference" : "9.11.3.71", "presence" : "O", "format" : "TLV", "length" : "3-n"}) -ies.append({ "iei" : "A1", "value" : "N5GC indication", "type" : "N5GC indication", "reference" : "9.11.3.72", "presence" : "O", "format" : "T", "length" : "1"}) +ies.append({ "iei" : "A-", "value" : "N5GC indication", "type" : "N5GC indication", "reference" : "9.11.3.72", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "30", "value" : "Requested NB-N1 mode DRX parameters", "type" : "NB-N1 mode DRX parameters", "reference" : "9.11.3.73", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "29", "value" : "UE request type", "type" : "UE request type", "reference" : "9.11.3.76", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "28", "value" : "Paging restriction", "type" : "Paging restriction", "reference" : "9.11.3.77", "presence" : "O", "format" : "TLV", "length" : "3-35"}) +ies.append({ "iei" : "72", "value" : "Service-level-AA container", "type" : "Service-level-AA container", "reference" : "9.11.2.10", "presence" : "O", "format" : "TLV-E", "length" : "6-n"}) +ies.append({ "iei" : "32", "value" : "NID", "type" : "NID", "reference" : "9.11.3.79", "presence" : "O", "format" : "TLV", "length" : "8"}) +ies.append({ "iei" : "16", "value" : "MS determined PLMN with disaster condition", "type" : "PLMN identity", "reference" : "9.11.3.85", "presence" : "O", "format" : "TLV", "length" : "5"}) +ies.append({ "iei" : "2A", "value" : "Requested PEIPS assistance information", "type" : "PEIPS assistance information", "reference" : "9.11.3.80", "presence" : "O", "format" : "TLV", "length" : "3-n"}) +ies.append({ "iei" : "3B", "value" : "Requested T3512 value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-66.py b/lib/nas/5gs/support/cache/nas-msg-66.py index 3b16f61ae..7d96dcaab 100644 --- a/lib/nas/5gs/support/cache/nas-msg-66.py +++ b/lib/nas/5gs/support/cache/nas-msg-66.py @@ -22,19 +22,32 @@ ies.append({ "iei" : "7A", "value" : "Extended emergency number list", "type" : ies.append({ "iei" : "73", "value" : "SOR transparent container", "type" : "SOR transparent container", "reference" : "9.11.3.51", "presence" : "O", "format" : "TLV-E", "length" : "20-n"}) ies.append({ "iei" : "78", "value" : "EAP message", "type" : "EAP message", "reference" : "9.11.2.2", "presence" : "O", "format" : "TLV-E", "length" : "7-1503"}) ies.append({ "iei" : "A-", "value" : "NSSAI inclusion mode", "type" : "NSSAI inclusion mode", "reference" : "9.11.3.37A", "presence" : "O", "format" : "TV", "length" : "1"}) -ies.append({ "iei" : "76", "value" : "Operator-defined access category definitions", "type" : "Operator-defined access category definitions", "reference" : "9.11.3.38", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) +ies.append({ "iei" : "76", "value" : "Operator-defined access category definitions", "type" : "Operator-defined access category definitions", "reference" : "9.11.3.38", "presence" : "O", "format" : "TLV-E", "length" : "3-8323"}) ies.append({ "iei" : "51", "value" : "Negotiated DRX parameters", "type" : "5GS DRX parameters", "reference" : "9.11.3.2A", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "D-", "value" : "Non-3GPP NW policies", "type" : "Non-3GPP NW provided policies", "reference" : "9.11.3.36A", "presence" : "O", "format" : "TV", "length" : "1"}) ies.append({ "iei" : "60", "value" : "EPS bearer context status", "type" : "EPS bearer context status", "reference" : "9.11.3.23A", "presence" : "O", "format" : "TLV", "length" : "4"}) -ies.append({ "iei" : "6E", "value" : "Negotiated extended DRX parameters", "type" : "Extended DRX parameters", "reference" : "9.11.3.26A", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "6E", "value" : "Negotiated extended DRX parameters", "type" : "Extended DRX parameters", "reference" : "9.11.3.26A", "presence" : "O", "format" : "TLV", "length" : "3-4"}) ies.append({ "iei" : "6C", "value" : "T3447 value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) -ies.append({ "iei" : "6B", "value" : "T3448 value", "type" : "GPRS timer 3", "reference" : "9.11.2.4", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "6B", "value" : "T3448 value", "type" : "GPRS timer 2", "reference" : "9.11.2.4", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "6A", "value" : "T3324 value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "67", "value" : "UE radio capability ID", "type" : "UE radio capability ID", "reference" : "9.11.3.68", "presence" : "O", "format" : "TLV", "length" : "3-n"}) -ies.append({ "iei" : "68", "value" : "UE radio capability ID deletion indication", "type" : "UE radio capability ID deletion indication", "reference" : "9.11.3.69", "presence" : "O", "format" : "TV", "length" : "1"}) -ies.append({ "iei" : "39", "value" : "Pending NSSAI", "type" : "NSSAI", "reference" : "9.11.3.37", "presence" : "O", "format" : "TLV", "length" : "4-74"}) -ies.append({ "iei" : "74", "value" : "Ciphering key data", "type" : "Ciphering key data", "reference" : "9.11.3.18C", "presence" : "O", "format" : "TLV-E", "length" : "x-n"}) +ies.append({ "iei" : "E-", "value" : "UE radio capability ID deletion indication", "type" : "UE radio capability ID deletion indication", "reference" : "9.11.3.69", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "39", "value" : "Pending NSSAI", "type" : "NSSAI", "reference" : "9.11.3.37", "presence" : "O", "format" : "TLV", "length" : "4-146"}) +ies.append({ "iei" : "74", "value" : "Ciphering key data", "type" : "Ciphering key data", "reference" : "9.11.3.18C", "presence" : "O", "format" : "TLV-E", "length" : "34-n"}) ies.append({ "iei" : "75", "value" : "CAG information list", "type" : "CAG information list", "reference" : "9.11.3.18A", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) ies.append({ "iei" : "1B", "value" : "Truncated 5G-S-TMSI configuration", "type" : "Truncated 5G-S-TMSI configuration", "reference" : "9.11.3.70", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "1C", "value" : "Negotiated WUS assistance information", "type" : "WUS assistance information", "reference" : "9.11.3.71", "presence" : "O", "format" : "TLV", "length" : "3-n"}) +ies.append({ "iei" : "29", "value" : "Negotiated NB-N1 mode DRX parameters", "type" : "NB-N1 mode DRX parameters", "reference" : "9.11.3.73", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "68", "value" : "Extended rejected NSSAI", "type" : "Extended rejected NSSAI", "reference" : "9.11.3.75", "presence" : "O", "format" : "TLV", "length" : "5-90"}) +ies.append({ "iei" : "7B", "value" : "Service-level-AA container", "type" : "Service-level-AA container", "reference" : "9.11.2.10", "presence" : "O", "format" : "TLV-E", "length" : "6-n"}) +ies.append({ "iei" : "33", "value" : "Negotiated PEIPS assistance information", "type" : "PEIPS assistance information", "reference" : "9.11.3.80", "presence" : "O", "format" : "TLV", "length" : "3-n"}) +ies.append({ "iei" : "34", "value" : "5GS additional request result", "type" : "5GS additional request result", "reference" : "9.11.3.81", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "70", "value" : "NSSRG information", "type" : "NSSRG information", "reference" : "9.11.3.82", "presence" : "O", "format" : "TLV-E", "length" : "7-4099"}) +ies.append({ "iei" : "14", "value" : "Disaster roaming wait range", "type" : "Registration wait range", "reference" : "9.11.3.84", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "2C", "value" : "Disaster return wait range", "type" : "Registration wait range", "reference" : "9.11.3.84", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "13", "value" : "List of PLMNs to be used in disaster condition", "type" : "List of PLMNs to be used in disaster condition", "reference" : "9.11.3.83", "presence" : "O", "format" : "TLV", "length" : "2-n"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of 5GS forbidden tracking areas for roaming", "type" : "5GS tracking area identity list", "reference" : "9.11.3.9", "presence" : "O", "format" : "TLV", "length" : "9-114"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of 5GS forbidden tracking areas forregional provision of service", "type" : "5GS tracking area identity list", "reference" : "9.11.3.9", "presence" : "O", "format" : "TLV", "length" : "9-114"}) +ies.append({ "iei" : "71", "value" : "Extended CAG information list", "type" : "Extended CAG information list", "reference" : "9.11.3.86", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) +ies.append({ "iei" : "7C", "value" : "NSAG information", "type" : "NSAG information", "reference" : "9.11.3.87", "presence" : "O", "format" : "TLV-E", "length" : "9-3143"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-68.py b/lib/nas/5gs/support/cache/nas-msg-68.py index 66552e0c0..5103366e0 100644 --- a/lib/nas/5gs/support/cache/nas-msg-68.py +++ b/lib/nas/5gs/support/cache/nas-msg-68.py @@ -4,4 +4,11 @@ ies.append({ "iei" : "5F", "value" : "T3346 value", "type" : "GPRS timer 2", "re ies.append({ "iei" : "16", "value" : "T3502 value", "type" : "GPRS timer 2", "reference" : "9.11.2.4", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "78", "value" : "EAP message", "type" : "EAP message", "reference" : "9.11.2.2", "presence" : "O", "format" : "TLV-E", "length" : "7-1503"}) ies.append({ "iei" : "69", "value" : "Rejected NSSAI", "type" : "Rejected NSSAI", "reference" : "9.11.3.46", "presence" : "O", "format" : "TLV", "length" : "4-42"}) +ies.append({ "iei" : "75", "value" : "CAG information list", "type" : "CAG information list", "reference" : "9.11.3.18A", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) +ies.append({ "iei" : "68", "value" : "Extended rejected NSSAI", "type" : "Extended rejected NSSAI", "reference" : "9.11.3.75", "presence" : "O", "format" : "TLV", "length" : "5-90"}) +ies.append({ "iei" : "2C", "value" : "Disaster return wait range", "type" : "Registration wait range", "reference" : "9.11.3.84", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "71", "value" : "Extended CAG information list", "type" : "Extended CAG information list", "reference" : "9.11.3.86", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) +ies.append({ "iei" : "3A", "value" : "Lower bound timer value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of 5GS forbidden tracking areas for roaming", "type" : "5GS tracking area identity list", "reference" : "9.11.3.9", "presence" : "O", "format" : "TLV", "length" : "9-114"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of 5GS forbidden tracking areas forregional provision of service", "type" : "5GS tracking area identity list", "reference" : "9.11.3.9", "presence" : "O", "format" : "TLV", "length" : "9-114"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-71.py b/lib/nas/5gs/support/cache/nas-msg-71.py index 499906a7f..70faf6c0e 100644 --- a/lib/nas/5gs/support/cache/nas-msg-71.py +++ b/lib/nas/5gs/support/cache/nas-msg-71.py @@ -3,4 +3,11 @@ ies.append({ "iei" : "", "value" : "De-registration type", "type" : "De-registra ies.append({ "iei" : "58", "value" : "5GMM cause", "type" : "5GMM cause", "reference" : "9.11.3.2", "presence" : "O", "format" : "TV", "length" : "2"}) ies.append({ "iei" : "5F", "value" : "T3346 value", "type" : "GPRS timer 2", "reference" : "9.11.2.4", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "6D", "value" : "Rejected NSSAI", "type" : "Rejected NSSAI", "reference" : "9.11.3.46", "presence" : "O", "format" : "TLV", "length" : "4-42"}) +ies.append({ "iei" : "75", "value" : "CAG information list", "type" : "CAG information list", "reference" : "9.11.3.18A", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) +ies.append({ "iei" : "68", "value" : "Extended rejected NSSAI", "type" : "Extended rejected NSSAI", "reference" : "9.11.3.75", "presence" : "O", "format" : "TLV", "length" : "5-90"}) +ies.append({ "iei" : "2C", "value" : "Disaster return wait range", "type" : "Registration wait range", "reference" : "9.11.3.84", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "71", "value" : "Extended CAG information list", "type" : "Extended CAG information list", "reference" : "9.11.3.86", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) +ies.append({ "iei" : "3A", "value" : "Lower bound timer value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of 5GS forbidden tracking areas for roaming", "type" : "5GS tracking area identity list", "reference" : "9.11.3.9", "presence" : "O", "format" : "TLV", "length" : "9-114"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of 5GS forbidden tracking areas forregional provision of service", "type" : "5GS tracking area identity list", "reference" : "9.11.3.9", "presence" : "O", "format" : "TLV", "length" : "9-114"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-76.py b/lib/nas/5gs/support/cache/nas-msg-76.py index c7ab0dbc2..abd138fcf 100644 --- a/lib/nas/5gs/support/cache/nas-msg-76.py +++ b/lib/nas/5gs/support/cache/nas-msg-76.py @@ -5,4 +5,6 @@ ies.append({ "iei" : "40", "value" : "Uplink data status", "type" : "Uplink data ies.append({ "iei" : "50", "value" : "PDU session status", "type" : "PDU session status", "reference" : "9.11.3.44", "presence" : "O", "format" : "TLV", "length" : "4-34"}) ies.append({ "iei" : "25", "value" : "Allowed PDU session status", "type" : "Allowed PDU session status", "reference" : "9.11.3.13", "presence" : "O", "format" : "TLV", "length" : "4-34"}) ies.append({ "iei" : "71", "value" : "NAS message container", "type" : "message container", "reference" : "9.11.3.33", "presence" : "O", "format" : "TLV-E", "length" : "4-n"}) +ies.append({ "iei" : "29", "value" : "UE request type", "type" : "UE request type", "reference" : "9.11.3.76", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "28", "value" : "Paging restriction", "type" : "Paging restriction", "reference" : "9.11.3.77", "presence" : "O", "format" : "TLV", "length" : "3-35"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-77.py b/lib/nas/5gs/support/cache/nas-msg-77.py index 5369611da..0b1a2953d 100644 --- a/lib/nas/5gs/support/cache/nas-msg-77.py +++ b/lib/nas/5gs/support/cache/nas-msg-77.py @@ -3,5 +3,11 @@ ies.append({ "iei" : "", "value" : "5GMM cause", "type" : "5GMM cause", "referen ies.append({ "iei" : "50", "value" : "PDU session status", "type" : "PDU session status", "reference" : "9.11.3.44", "presence" : "O", "format" : "TLV", "length" : "4-34"}) ies.append({ "iei" : "5F", "value" : "T3346 value", "type" : "GPRS timer 2", "reference" : "9.11.2.4", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "78", "value" : "EAP message", "type" : "EAP message", "reference" : "9.11.2.2", "presence" : "O", "format" : "TLV-E", "length" : "7-1503"}) -ies.append({ "iei" : "6B", "value" : "T3448 value", "type" : "GPRS timer 3", "reference" : "9.11.2.4", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "6B", "value" : "T3448 value", "type" : "GPRS timer 2", "reference" : "9.11.2.4", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "75", "value" : "CAG information list", "type" : "CAG information list", "reference" : "9.11.3.18A", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) +ies.append({ "iei" : "2C", "value" : "Disaster return wait range", "type" : "Registration wait range", "reference" : "9.11.3.84", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "71", "value" : "Extended CAG information list", "type" : "Extended CAG information list", "reference" : "9.11.3.86", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) +ies.append({ "iei" : "3A", "value" : "Lower bound timer value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of 5GS forbidden tracking areas for roaming", "type" : "5GS tracking area identity list", "reference" : "9.11.3.9", "presence" : "O", "format" : "TLV", "length" : "9-114"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of 5GS forbidden tracking areas forregional provision of service", "type" : "5GS tracking area identity list", "reference" : "9.11.3.9", "presence" : "O", "format" : "TLV", "length" : "9-114"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-78.py b/lib/nas/5gs/support/cache/nas-msg-78.py index b0adf2613..0ed082aad 100644 --- a/lib/nas/5gs/support/cache/nas-msg-78.py +++ b/lib/nas/5gs/support/cache/nas-msg-78.py @@ -3,5 +3,8 @@ ies.append({ "iei" : "50", "value" : "PDU session status", "type" : "PDU session ies.append({ "iei" : "26", "value" : "PDU session reactivation result", "type" : "PDU session reactivation result", "reference" : "9.11.3.42", "presence" : "O", "format" : "TLV", "length" : "4-34"}) ies.append({ "iei" : "72", "value" : "PDU session reactivation result error cause", "type" : "PDU session reactivation result error cause", "reference" : "9.11.3.43", "presence" : "O", "format" : "TLV-E", "length" : "5-515"}) ies.append({ "iei" : "78", "value" : "EAP message", "type" : "EAP message", "reference" : "9.11.2.2", "presence" : "O", "format" : "TLV-E", "length" : "7-1503"}) -ies.append({ "iei" : "6B", "value" : "T3448 value", "type" : "GPRS timer 3", "reference" : "9.11.2.4", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "6B", "value" : "T3448 value", "type" : "GPRS timer 2", "reference" : "9.11.2.4", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "34", "value" : "5GS additional request result", "type" : "5GS additional request result", "reference" : "9.11.3.81", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of 5GS forbidden tracking areas for roaming", "type" : "5GS tracking area identity list", "reference" : "9.11.3.9", "presence" : "O", "format" : "TLV", "length" : "9-114"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of 5GS forbidden tracking areas forregional provision of service", "type" : "5GS tracking area identity list", "reference" : "9.11.3.9", "presence" : "O", "format" : "TLV", "length" : "9-114"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/cache/nas-msg-84.py b/lib/nas/5gs/support/cache/nas-msg-84.py index f2355ad6e..b7f223067 100644 --- a/lib/nas/5gs/support/cache/nas-msg-84.py +++ b/lib/nas/5gs/support/cache/nas-msg-84.py @@ -14,12 +14,23 @@ ies.append({ "iei" : "B-", "value" : "MICO indication", "type" : "MICO indicatio ies.append({ "iei" : "9-", "value" : "Network slicing indication", "type" : "Network slicing indication", "reference" : "9.11.3.36", "presence" : "O", "format" : "TV", "length" : "1"}) ies.append({ "iei" : "31", "value" : "Configured NSSAI", "type" : "NSSAI", "reference" : "9.11.3.37", "presence" : "O", "format" : "TLV", "length" : "4-146"}) ies.append({ "iei" : "11", "value" : "Rejected NSSAI", "type" : "Rejected NSSAI", "reference" : "9.11.3.46", "presence" : "O", "format" : "TLV", "length" : "4-42"}) -ies.append({ "iei" : "76", "value" : "Operator-defined access category definitions", "type" : "Operator-defined access category definitions", "reference" : "9.11.3.38", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) +ies.append({ "iei" : "76", "value" : "Operator-defined access category definitions", "type" : "Operator-defined access category definitions", "reference" : "9.11.3.38", "presence" : "O", "format" : "TLV-E", "length" : "3-8323"}) ies.append({ "iei" : "F-", "value" : "SMS indication", "type" : "SMS indication", "reference" : "9.11.3.50A", "presence" : "O", "format" : "TV", "length" : "1"}) ies.append({ "iei" : "6C", "value" : "T3447 value", "type" : "GPRS timer 3", "reference" : "9.11.2.5", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "75", "value" : "CAG information list", "type" : "CAG information list", "reference" : "9.11.3.18A", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) ies.append({ "iei" : "67", "value" : "UE radio capability ID", "type" : "UE radio capability ID", "reference" : "9.11.3.68", "presence" : "O", "format" : "TLV", "length" : "3-n"}) -ies.append({ "iei" : "68", "value" : "UE radio capability ID deletion indication", "type" : "UE radio capability ID deletion indication", "reference" : "9.11.3.69", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "A-", "value" : "UE radio capability ID deletion indication", "type" : "UE radio capability ID deletion indication", "reference" : "9.11.3.69", "presence" : "O", "format" : "TV", "length" : "1"}) ies.append({ "iei" : "44", "value" : "5GS registration result", "type" : "5GS registration result", "reference" : "9.11.3.6", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "1B", "value" : "Truncated 5G-S-TMSI configuration", "type" : "Truncated 5G-S-TMSI configuration", "reference" : "9.11.3.70", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "C-", "value" : "Additional configuration indication", "type" : "Additional configuration indication", "reference" : "9.11.3.74", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "68", "value" : "Extended rejected NSSAI", "type" : "Extended rejected NSSAI", "reference" : "9.11.3.75", "presence" : "O", "format" : "TLV", "length" : "5-90"}) +ies.append({ "iei" : "72", "value" : "Service-level-AA container", "type" : "Service-level-AA container", "reference" : "9.11.2.10", "presence" : "O", "format" : "TLV-E", "length" : "6-n"}) +ies.append({ "iei" : "70", "value" : "NSSRG information", "type" : "NSSRG information", "reference" : "9.11.3.82", "presence" : "O", "format" : "TLV-E", "length" : "7-4099"}) +ies.append({ "iei" : "14", "value" : "Disaster roaming wait range", "type" : "Registration wait range", "reference" : "9.11.3.84", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "2C", "value" : "Disaster return wait range", "type" : "Registration wait range", "reference" : "9.11.3.84", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "13", "value" : "List of PLMNs to be used in disaster condition", "type" : "List of PLMNs to be used in disaster condition", "reference" : "9.11.3.83", "presence" : "O", "format" : "TLV", "length" : "2-n"}) +ies.append({ "iei" : "71", "value" : "Extended CAG information list", "type" : "Extended CAG information list", "reference" : "9.11.3.86", "presence" : "O", "format" : "TLV-E", "length" : "3-n"}) +ies.append({ "iei" : "1F", "value" : "Updated PEIPS assistance information", "type" : "PEIPS assistance information", "reference" : "9.11.3.80", "presence" : "O", "format" : "TLV", "length" : "3-n"}) +ies.append({ "iei" : "73", "value" : "NSAG information", "type" : "NSAG information", "reference" : "9.11.3.87", "presence" : "O", "format" : "TLV-E", "length" : "9-3143"}) +ies.append({ "iei" : "E-", "value" : "Priority indicator", "type" : "Priority indicator", "reference" : "9.11.3.91", "presence" : "O", "format" : "TV", "length" : "1"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/5gs/support/nas-message.py b/lib/nas/5gs/support/nas-message.py index 5e5da0ed5..c0ea0d9dc 100644 --- a/lib/nas/5gs/support/nas-message.py +++ b/lib/nas/5gs/support/nas-message.py @@ -1,6 +1,6 @@ # The MIT License -# Copyright (C) 2019,2020 by Sukchan Lee +# Copyright (C) 2019-2023 by Sukchan Lee # This file is part of Open5GS. @@ -64,7 +64,7 @@ def output_header_to_file(f): f.write("""/* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -116,7 +116,8 @@ def get_value(v): def get_cells(cells): iei = cells[0].text - value = re.sub("\s*$", "", re.sub("\s*\n*\s*\([^\)]*\)*", "", re.sub("'s", "", cells[1].text))) + value = cells[1].text.encode('ascii', 'ignore').decode('utf-8') + value = re.sub("\s*$", "", re.sub("\s*\n*\s*\([^\)]*\)*", "", re.sub("\"|'s", "", value))) type = re.sub("^NAS ", "", re.sub("'s", "", re.sub('\s*\n\s*[a-zA-Z0-9.]*', '', cells[2].text))) reference = re.sub('[a-zA-Z0-9\'\-\s]*\n\s*', '', cells[2].text) presence = cells[3].text @@ -240,22 +241,22 @@ msg_list["SECURITY MODE COMPLETE"]["table"] = 25 msg_list["SECURITY MODE REJECT"]["table"] = 26 msg_list["5GMM STATUS"]["table"] = 28 -msg_list["PDU SESSION ESTABLISHMENT REQUEST"]["table"] = 33 -msg_list["PDU SESSION ESTABLISHMENT ACCEPT"]["table"] = 34 -msg_list["PDU SESSION ESTABLISHMENT REJECT"]["table"] = 35 -msg_list["PDU SESSION AUTHENTICATION COMMAND"]["table"] = 36 -msg_list["PDU SESSION AUTHENTICATION COMPLETE"]["table"] = 37 -msg_list["PDU SESSION AUTHENTICATION RESULT"]["table"] = 38 -msg_list["PDU SESSION MODIFICATION REQUEST"]["table"] = 39 -msg_list["PDU SESSION MODIFICATION REJECT"]["table"] = 40 -msg_list["PDU SESSION MODIFICATION COMMAND"]["table"] = 41 -msg_list["PDU SESSION MODIFICATION COMPLETE"]["table"] = 42 -msg_list["PDU SESSION MODIFICATION COMMAND REJECT"]["table"] = 43 -msg_list["PDU SESSION RELEASE REQUEST"]["table"] = 44 -msg_list["PDU SESSION RELEASE REJECT"]["table"] = 45 -msg_list["PDU SESSION RELEASE COMMAND"]["table"] = 46 -msg_list["PDU SESSION RELEASE COMPLETE"]["table"] = 47 -msg_list["5GSM STATUS"]["table"] = 48 +msg_list["PDU SESSION ESTABLISHMENT REQUEST"]["table"] = 38 +msg_list["PDU SESSION ESTABLISHMENT ACCEPT"]["table"] = 39 +msg_list["PDU SESSION ESTABLISHMENT REJECT"]["table"] = 40 +msg_list["PDU SESSION AUTHENTICATION COMMAND"]["table"] = 41 +msg_list["PDU SESSION AUTHENTICATION COMPLETE"]["table"] = 42 +msg_list["PDU SESSION AUTHENTICATION RESULT"]["table"] = 43 +msg_list["PDU SESSION MODIFICATION REQUEST"]["table"] = 44 +msg_list["PDU SESSION MODIFICATION REJECT"]["table"] = 45 +msg_list["PDU SESSION MODIFICATION COMMAND"]["table"] = 46 +msg_list["PDU SESSION MODIFICATION COMPLETE"]["table"] = 47 +msg_list["PDU SESSION MODIFICATION COMMAND REJECT"]["table"] = 48 +msg_list["PDU SESSION RELEASE REQUEST"]["table"] = 49 +msg_list["PDU SESSION RELEASE REJECT"]["table"] = 50 +msg_list["PDU SESSION RELEASE COMMAND"]["table"] = 51 +msg_list["PDU SESSION RELEASE COMPLETE"]["table"] = 52 +msg_list["5GSM STATUS"]["table"] = 53 for key in msg_list.keys(): if "table" not in msg_list[key].keys(): diff --git a/lib/nas/5gs/types.h b/lib/nas/5gs/types.h index 2d493dec5..5f636c04a 100644 --- a/lib/nas/5gs/types.h +++ b/lib/nas/5gs/types.h @@ -50,7 +50,7 @@ typedef struct ogs_nas_eap_message_s { void *buffer; } ogs_nas_eap_message_t; -/* 9.11.2.8.1 S-NSSAI +/* 9.11.2.8 S-NSSAI * O TLV 3-10 */ #define OGS_NAS_S_NSSAI_SST_LEN 1 #define OGS_NAS_S_NSSAI_SST_AND_MAPPED_HPLMN_SST_LEN 2 @@ -76,6 +76,14 @@ void ogs_nas_build_s_nssai2( ogs_s_nssai_t *s_nssai, ogs_s_nssai_t *mapped_hplmn); int ogs_nas_parse_s_nssai( ogs_nas_s_nssai_ie_t *nas_s_nssai_ie, ogs_nas_s_nssai_t *nas_s_nssai); + +/* 9.11.2.10 Service-level-AA container + * O TLV-E 6-n */ +typedef struct ogs_nas_service_level_aa_container_s { + uint16_t length; + void *buffer; +} __attribute__ ((packed)) ogs_nas_service_level_aa_container_t; + /* 9.11.3.1 5GMM capability * O TLV 3-15 */ typedef struct ogs_nas_5gmm_capability_s { @@ -480,7 +488,7 @@ ED4(uint8_t type:4;, /* 9.11.3.37 NSSAI * O TLV 4-72 */ -#define OGS_NAS_MAX_NSSAI_LEN 70 +#define OGS_NAS_MAX_NSSAI_LEN 142 typedef struct ogs_nas_nssai_s { uint8_t length; uint8_t buffer[OGS_NAS_MAX_NSSAI_LEN]; @@ -609,7 +617,7 @@ ED2(uint8_t type:4;, /* 9.11.3.51 SOR transparent container * O TLV-E 20-n */ typedef struct ogs_nas_sor_transparent_container_s { - uint8_t length; + uint16_t length; void *buffer; } ogs_nas_sor_transparent_container_t; @@ -643,6 +651,117 @@ ED2(uint8_t amf_set_id:4;, uint8_t amf_pointer_value:4;) } __attribute__ ((packed)) ogs_nas_truncated_5g_s_tmsi_configuration_t; +/* 9.11.3.72 N5GC indication + * O T 1 */ +typedef struct ogs_nas_n5gc_indication_s { + uint8_t type; +} __attribute__ ((packed)) ogs_nas_n5gc_indication_t; + +/* 9.11.3.73 NB-N1 mode DRX parameters + * O TLV 3 */ +typedef struct ogs_nas_nb_n1_mode_drx_parameters_s { + uint8_t length; +ED2(uint8_t type:4;, + uint8_t value:4;) +} __attribute__ ((packed)) ogs_nas_nb_n1_mode_drx_parameters_t; + +/* 9.11.3.74 Additional configuration indication + * O T 1 */ +typedef struct ogs_nas_additional_configuration_indication_s { + uint8_t type; +} __attribute__ ((packed)) ogs_nas_additional_configuration_indication_t; + +/* 9.11.3.75 Extended rejected NSSAI + * O TLV 5-90 */ +#define OGS_NAS_MAX_EXTENDED_REJECTED_NSSAI_LEN 88 +typedef struct ogs_nas_extended_rejected_nssai_s { + uint8_t length; + uint8_t buffer[OGS_NAS_MAX_EXTENDED_REJECTED_NSSAI_LEN]; +} __attribute__ ((packed)) ogs_nas_extended_rejected_nssai_t; + +/* 9.11.3.79 NID + * See subclause 9.2.7 in 3GPP TS 24.502 [18] + * O TLV 8 */ +typedef struct ogs_nas_nid_s { + uint8_t length; +ED2(uint8_t digit1:4;, + uint8_t assignment_mode:4;) +ED2(uint8_t digit3:4;, + uint8_t digit2:4;) +ED2(uint8_t digit5:4;, + uint8_t digit4:4;) +ED2(uint8_t digit7:4;, + uint8_t digit6:4;) +ED2(uint8_t digit9:4;, + uint8_t digit8:4;) +ED2(uint8_t spare:4;, + uint8_t digit10:4;) +} __attribute__ ((packed)) ogs_nas_nid_t; + +/* 9.11.3.80 PEIPS assistance information + * O TLV 3-n */ +typedef struct ogs_nas_peips_assistance_information_s { + uint8_t length; + uint8_t spare[255]; +} __attribute__ ((packed)) ogs_nas_peips_assistance_information_t; + +/* 9.11.3.81 5GS additional request result + * O TLV 3 */ +typedef struct ogs_nas_5gs_additional_request_result_s { + uint8_t length; +ED2(uint8_t spare:6;, + uint8_t prd:2;) +} __attribute__ ((packed)) ogs_nas_5gs_additional_request_result_t; + +/* 9.11.3.82 NSSRG information + * O TLV-E 7-65538 */ +typedef struct ogs_nas_nssrg_information_s { + uint16_t length; + void *buffer; +} __attribute__ ((packed)) ogs_nas_nssrg_information_t; + +/* 9.11.3.83 List of PLMNs to be used in disaster condition + * O TLV 2-n */ +typedef struct ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_s { + uint8_t length; + uint8_t spare[255]; +} __attribute__ ((packed)) ogs_nas_list_of_plmns_to_be_used_in_disaster_condition_t; + +/* 9.11.3.84 Registration wait range + * O TLV 4 */ +typedef struct ogs_nas_registration_wait_range_s { + uint8_t length; + uint8_t min_time; + uint8_t max_time; +} __attribute__ ((packed)) ogs_nas_registration_wait_range_t; + +/* 9.11.3.85 PLMN identity + * O TLV 5 */ +typedef struct ogs_nas_plmn_identity_s { + uint8_t length; + ogs_nas_plmn_id_t nas_plmn_id; +} __attribute__ ((packed)) ogs_nas_plmn_identity_t; + +/* 9.11.3.86 Extended CAG information list + * O TLV-E 3-n */ +typedef struct ogs_nas_extended_cag_information_list_s { + uint8_t length; + void *buffer; +} __attribute__ ((packed)) ogs_nas_extended_cag_information_list_t; + +/* 9.11.3.87 NSAG information + * O TLV-E 10-n */ +typedef struct ogs_nas_nsag_information_s { + uint8_t length; + void *buffer; +} __attribute__ ((packed)) ogs_nas_nsag_information_t; + +/* 9.11.3.91 Priority indicator + * O TV 1 */ +typedef struct ogs_nas_priority_indicator_s { + uint8_t type; +} __attribute__ ((packed)) ogs_nas_priority_indicator_t; + /* 9.11.4.1 5GSM capability * O TLV 3-15 */ typedef struct ogs_nas_5gsm_capability_s { @@ -748,7 +867,7 @@ typedef struct ogs_nas_integrity_protection_maximum_data_rate_s { /* 9.11.4.8 Mapped EPS bearer contexts * O TLV-E 7-65535 */ typedef struct ogs_nas_mapped_eps_bearer_contexts_s { - uint8_t length; + uint16_t length; void *buffer; } __attribute__ ((packed)) ogs_nas_mapped_eps_bearer_contexts_t; @@ -916,14 +1035,15 @@ ED3(uint8_t type:4;, * O TLV 3-15 */ typedef struct ogs_nas_5gsm_network_feature_support_s { uint8_t length; -ED2(uint8_t spare:7;, +ED2(uint8_t spare1:7;, uint8_t s1:1;) + uint8_t spare2[12]; } __attribute__ ((packed)) ogs_nas_5gsm_network_feature_support_t; /* 9.11.4.22 ATSSS container * O TLV-E 3-65535 */ typedef struct ogs_nas_atsss_container_s { - uint8_t length; + uint16_t length; void *buffer; } ogs_nas_atsss_container_t; @@ -949,6 +1069,13 @@ ED3(uint8_t type:4;, uint8_t value:2;) } __attribute__ ((packed)) ogs_nas_release_assistance_indication_t; +/* 9.11.4.24 IP header compression configuration + * O TLV 5-257 */ +typedef struct ogs_nas_ip_header_compression_configuration_s { + uint8_t length; + uint8_t spare[255]; +} __attribute__ ((packed)) ogs_nas_ip_header_compression_configuration_t; + /* 9.11.4.25 DS-TT Ethernet port MAC address * O TLV 8 */ #define OGS_NAX_MAX_EHTERNET_MAC_ADDRESS_LEN 6 @@ -968,16 +1095,45 @@ typedef struct ogs_nas_ue_ds_tt_residence_time_s { /* 9.11.4.27 Port management information container * O TLV-E 4-65535 */ typedef struct ogs_nas_port_management_information_container_s { - uint8_t length; + uint16_t length; void *buffer; } ogs_nas_port_management_information_container_t; -/* 9.11.3.72 N5GC indication - * O T 1 */ -typedef struct ogs_nas_n5gc_indication_s { - uint8_t type; -} ogs_nas_n5gc_indication_t; +/* 9.11.4.28 Ethernet header compression configuration + * O TLV 3 */ +typedef struct ogs_nas_ethernet_header_compression_configuration_s { + uint8_t length; +ED2(uint8_t spare:6;, + uint8_t cid_length:2;) +} __attribute__ ((packed)) ogs_nas_ethernet_header_compression_configuration_t; +/* 9.11.4.30 Requested MBS container + * O TLV-E 8-65538 */ +typedef struct ogs_nas_requested_mbs_container_s { + uint16_t length; + void *buffer; +} __attribute__ ((packed)) ogs_nas_requested_mbs_container_t; + +/* 9.11.4.31 Received MBS container + * O TLV-E 9-65538 */ +typedef struct ogs_nas_received_mbs_container_s { + uint8_t length; + void *buffer; +} __attribute__ ((packed)) ogs_nas_received_mbs_container_t; + +/* 9.11.4.32 PDU session pair ID + * O TLV 3 */ +typedef struct ogs_nas_pdu_session_pair_id_s { + uint8_t length; + uint8_t value; +} __attribute__ ((packed)) ogs_nas_pdu_session_pair_id_t; + +/* 9.11.4.33 RSN + * O TLV 3 */ +typedef struct ogs_nas_rsn_s { + uint8_t length; + uint8_t value; +} __attribute__ ((packed)) ogs_nas_rsn_t; #ifdef __cplusplus } diff --git a/lib/nas/common/types.h b/lib/nas/common/types.h index c4627bc84..f1cc2b8d9 100644 --- a/lib/nas/common/types.h +++ b/lib/nas/common/types.h @@ -700,7 +700,7 @@ typedef struct ogs_nas_emergency_number_list_s { /* 9.9.3.37A Extended emergency number list * O TLV-E 7-65535 */ typedef struct ogs_nas_extended_emergency_number_list_s { - uint8_t length; + uint16_t length; void *buffer; } ogs_nas_extended_emergency_number_list_t; @@ -733,6 +733,28 @@ ED3(uint8_t type:4;, uint8_t value:3;) } __attribute__ ((packed)) ogs_nas_ue_radio_capability_id_deletion_indication_t; +/* 9.9.3.65 UE request type + * O TLV 3 + * 9.11.3.76 UE request type + * O TLV 3 */ +typedef struct ogs_nas_ue_request_type_s { + uint8_t length; +ED2(uint8_t spare:4;, + uint8_t type:4;) +} __attribute__ ((packed)) ogs_nas_ue_request_type_t; + +/* 9.9.3.66 Paging restriction + * O TLV 3-5 + * 9.11.3.77 Paging restriction + * O TLV 3-35 */ +typedef struct ogs_nas_paging_restriction_s { + uint8_t length; +ED2(uint8_t spare1:4;, + uint8_t type:4;) + uint16_t ebi; + uint8_t spare2[30]; +} __attribute__ ((packed)) ogs_nas_paging_restriction_t; + /* 9.9.4.2 APN aggregate maximum bit rate * O TLV 4-8 */ typedef struct ogs_nas_apn_aggregate_maximum_bit_rate_s { @@ -793,6 +815,7 @@ ED2(uint8_t reserved:5;, uint32_t addr; } both; }; + uint8_t smf_ipv6_link_local_address[OGS_IPV6_LEN]; } __attribute__ ((packed)) ogs_nas_pdu_address_t; /* 9.9.4.14 Request type diff --git a/lib/nas/eps/decoder.c b/lib/nas/eps/decoder.c index 6703d507e..4cd4bf1d0 100644 --- a/lib/nas/eps/decoder.c +++ b/lib/nas/eps/decoder.c @@ -1,7 +1,7 @@ /* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -28,8 +28,8 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-01-22 09:24:28.380730 by acetcom - * from 24301-g40.docx + * Created on: 2023-03-02 22:57:51.860294 by acetcom + * from 24301-h90.docx ******************************************************************************/ #include "ogs-nas-eps.h" @@ -375,6 +375,46 @@ int ogs_nas_eps_decode_attach_request(ogs_nas_eps_message_t *message, ogs_pkbuf_ attach_request->presencemask |= OGS_NAS_EPS_ATTACH_REQUEST_N1_UE_NETWORK_CAPABILITY_PRESENT; decoded += size; break; + case OGS_NAS_EPS_ATTACH_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_TYPE: + size = ogs_nas_eps_decode_ue_radio_capability_id_availability(&attach_request->ue_radio_capability_id_availability, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_ue_radio_capability_id_availability() failed"); + return size; + } + + attach_request->presencemask |= OGS_NAS_EPS_ATTACH_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_TYPE: + size = ogs_nas_eps_decode_wus_assistance_information(&attach_request->requested_wus_assistance_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_wus_assistance_information() failed"); + return size; + } + + attach_request->presencemask |= OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_ATTACH_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_TYPE: + size = ogs_nas_eps_decode_nb_s1_drx_parameter(&attach_request->drx_parameter_in_nb_s1_mode, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_nb_s1_drx_parameter() failed"); + return size; + } + + attach_request->presencemask |= OGS_NAS_EPS_ATTACH_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_IMSI_OFFSET_TYPE: + size = ogs_nas_eps_decode_imsi_offset(&attach_request->requested_imsi_offset, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_imsi_offset() failed"); + return size; + } + + attach_request->presencemask |= OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_IMSI_OFFSET_PRESENT; + decoded += size; + break; default: ogs_warn("Unknown type(0x%x) or not implemented\n", type); break; @@ -676,6 +716,56 @@ int ogs_nas_eps_decode_attach_accept(ogs_nas_eps_message_t *message, ogs_pkbuf_t attach_accept->presencemask |= OGS_NAS_EPS_ATTACH_ACCEPT_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_PRESENT; decoded += size; break; + case OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_TYPE: + size = ogs_nas_eps_decode_wus_assistance_information(&attach_accept->negotiated_wus_assistance_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_wus_assistance_information() failed"); + return size; + } + + attach_accept->presencemask |= OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_TYPE: + size = ogs_nas_eps_decode_nb_s1_drx_parameter(&attach_accept->negotiated_drx_parameter_in_nb_s1_mode, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_nb_s1_drx_parameter() failed"); + return size; + } + + attach_accept->presencemask |= OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_IMSI_OFFSET_TYPE: + size = ogs_nas_eps_decode_imsi_offset(&attach_accept->negotiated_imsi_offset, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_imsi_offset() failed"); + return size; + } + + attach_accept->presencemask |= OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_IMSI_OFFSET_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&attach_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + attach_accept->presencemask |= OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&attach_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + attach_accept->presencemask |= OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; + decoded += size; + break; default: ogs_warn("Unknown type(0x%x) or not implemented\n", type); break; @@ -774,6 +864,36 @@ int ogs_nas_eps_decode_attach_reject(ogs_nas_eps_message_t *message, ogs_pkbuf_t attach_reject->presencemask |= OGS_NAS_EPS_ATTACH_REJECT_EXTENDED_EMM_CAUSE_PRESENT; decoded += size; break; + case OGS_NAS_EPS_ATTACH_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE: + size = ogs_nas_eps_decode_gprs_timer_3(&attach_reject->lower_bound_timer_value, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_gprs_timer_3() failed"); + return size; + } + + attach_reject->presencemask |= OGS_NAS_EPS_ATTACH_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&attach_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + attach_reject->presencemask |= OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&attach_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + attach_reject->presencemask |= OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; + decoded += size; + break; default: ogs_warn("Unknown type(0x%x) or not implemented\n", type); break; @@ -848,6 +968,36 @@ int ogs_nas_eps_decode_detach_request_to_ue(ogs_nas_eps_message_t *message, ogs_ detach_request_to_ue->presencemask |= OGS_NAS_EPS_DETACH_REQUEST_EMM_CAUSE_PRESENT; decoded += size; break; + case OGS_NAS_EPS_DETACH_REQUEST_LOWER_BOUND_TIMER_VALUE_TYPE: + size = ogs_nas_eps_decode_gprs_timer_3(&detach_request_to_ue->lower_bound_timer_value, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_gprs_timer_3() failed"); + return size; + } + + detach_request_to_ue->presencemask |= OGS_NAS_EPS_DETACH_REQUEST_LOWER_BOUND_TIMER_VALUE_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&detach_request_to_ue->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + detach_request_to_ue->presencemask |= OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&detach_request_to_ue->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + detach_request_to_ue->presencemask |= OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; + decoded += size; + break; default: ogs_warn("Unknown type(0x%x) or not implemented\n", type); break; @@ -1199,6 +1349,66 @@ int ogs_nas_eps_decode_tracking_area_update_request(ogs_nas_eps_message_t *messa tracking_area_update_request->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_N1_UE_NETWORK_CAPABILITY_PRESENT; decoded += size; break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_TYPE: + size = ogs_nas_eps_decode_ue_radio_capability_id_availability(&tracking_area_update_request->ue_radio_capability_id_availability, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_ue_radio_capability_id_availability() failed"); + return size; + } + + tracking_area_update_request->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_TYPE: + size = ogs_nas_eps_decode_wus_assistance_information(&tracking_area_update_request->requested_wus_assistance_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_wus_assistance_information() failed"); + return size; + } + + tracking_area_update_request->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_TYPE: + size = ogs_nas_eps_decode_nb_s1_drx_parameter(&tracking_area_update_request->drx_parameter_in_nb_s1_mode, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_nb_s1_drx_parameter() failed"); + return size; + } + + tracking_area_update_request->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_IMSI_OFFSET_TYPE: + size = ogs_nas_eps_decode_imsi_offset(&tracking_area_update_request->requested_imsi_offset, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_imsi_offset() failed"); + return size; + } + + tracking_area_update_request->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_IMSI_OFFSET_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_REQUEST_TYPE_TYPE: + size = ogs_nas_eps_decode_ue_request_type(&tracking_area_update_request->ue_request_type, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_ue_request_type() failed"); + return size; + } + + tracking_area_update_request->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_REQUEST_TYPE_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_PAGING_RESTRICTION_TYPE: + size = ogs_nas_eps_decode_paging_restriction(&tracking_area_update_request->paging_restriction, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_paging_restriction() failed"); + return size; + } + + tracking_area_update_request->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_PAGING_RESTRICTION_PRESENT; + decoded += size; + break; default: ogs_warn("Unknown type(0x%x) or not implemented\n", type); break; @@ -1516,6 +1726,66 @@ int ogs_nas_eps_decode_tracking_area_update_accept(ogs_nas_eps_message_t *messag tracking_area_update_accept->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_PRESENT; decoded += size; break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_TYPE: + size = ogs_nas_eps_decode_wus_assistance_information(&tracking_area_update_accept->negotiated_wus_assistance_information, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_wus_assistance_information() failed"); + return size; + } + + tracking_area_update_accept->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_TYPE: + size = ogs_nas_eps_decode_nb_s1_drx_parameter(&tracking_area_update_accept->negotiated_drx_parameter_in_nb_s1_mode, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_nb_s1_drx_parameter() failed"); + return size; + } + + tracking_area_update_accept->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_IMSI_OFFSET_TYPE: + size = ogs_nas_eps_decode_imsi_offset(&tracking_area_update_accept->negotiated_imsi_offset, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_imsi_offset() failed"); + return size; + } + + tracking_area_update_accept->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_IMSI_OFFSET_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EPS_ADDITIONAL_REQUEST_RESULT_TYPE: + size = ogs_nas_eps_decode_eps_additional_request_result(&tracking_area_update_accept->eps_additional_request_result, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_eps_additional_request_result() failed"); + return size; + } + + tracking_area_update_accept->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EPS_ADDITIONAL_REQUEST_RESULT_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&tracking_area_update_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + tracking_area_update_accept->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&tracking_area_update_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + tracking_area_update_accept->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; + decoded += size; + break; default: ogs_warn("Unknown type(0x%x) or not implemented\n", type); break; @@ -1575,6 +1845,36 @@ int ogs_nas_eps_decode_tracking_area_update_reject(ogs_nas_eps_message_t *messag tracking_area_update_reject->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_EXTENDED_EMM_CAUSE_PRESENT; decoded += size; break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE: + size = ogs_nas_eps_decode_gprs_timer_3(&tracking_area_update_reject->lower_bound_timer_value, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_gprs_timer_3() failed"); + return size; + } + + tracking_area_update_reject->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&tracking_area_update_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + tracking_area_update_reject->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&tracking_area_update_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + tracking_area_update_reject->presencemask |= OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; + decoded += size; + break; default: ogs_warn("Unknown type(0x%x) or not implemented\n", type); break; @@ -1654,6 +1954,26 @@ int ogs_nas_eps_decode_extended_service_request(ogs_nas_eps_message_t *message, extended_service_request->presencemask |= OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_DEVICE_PROPERTIES_PRESENT; decoded += size; break; + case OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_UE_REQUEST_TYPE_TYPE: + size = ogs_nas_eps_decode_ue_request_type(&extended_service_request->ue_request_type, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_ue_request_type() failed"); + return size; + } + + extended_service_request->presencemask |= OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_UE_REQUEST_TYPE_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_PAGING_RESTRICTION_TYPE: + size = ogs_nas_eps_decode_paging_restriction(&extended_service_request->paging_restriction, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_paging_restriction() failed"); + return size; + } + + extended_service_request->presencemask |= OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_PAGING_RESTRICTION_PRESENT; + decoded += size; + break; default: ogs_warn("Unknown type(0x%x) or not implemented\n", type); break; @@ -1718,6 +2038,16 @@ int ogs_nas_eps_decode_service_reject(ogs_nas_eps_message_t *message, ogs_pkbuf_ decoded += size; switch (type) { + case OGS_NAS_EPS_SERVICE_REJECT_T3442_VALUE_TYPE: + size = ogs_nas_eps_decode_gprs_timer(&service_reject->t3442_value, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_gprs_timer() failed"); + return size; + } + + service_reject->presencemask |= OGS_NAS_EPS_SERVICE_REJECT_T3442_VALUE_PRESENT; + decoded += size; + break; case OGS_NAS_EPS_SERVICE_REJECT_T3346_VALUE_TYPE: size = ogs_nas_eps_decode_gprs_timer_2(&service_reject->t3346_value, pkbuf); if (size < 0) { @@ -1738,6 +2068,36 @@ int ogs_nas_eps_decode_service_reject(ogs_nas_eps_message_t *message, ogs_pkbuf_ service_reject->presencemask |= OGS_NAS_EPS_SERVICE_REJECT_T3448_VALUE_PRESENT; decoded += size; break; + case OGS_NAS_EPS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE: + size = ogs_nas_eps_decode_gprs_timer_3(&service_reject->lower_bound_timer_value, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_gprs_timer_3() failed"); + return size; + } + + service_reject->presencemask |= OGS_NAS_EPS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&service_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + service_reject->presencemask |= OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT; + decoded += size; + break; + case OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE: + size = ogs_nas_eps_decode_tracking_area_identity_list(&service_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service, pkbuf); + if (size < 0) { + ogs_error("ogs_nas_eps_decode_tracking_area_identity_list() failed"); + return size; + } + + service_reject->presencemask |= OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT; + decoded += size; + break; default: ogs_warn("Unknown type(0x%x) or not implemented\n", type); break; @@ -2062,8 +2422,6 @@ int ogs_nas_eps_decode_security_mode_command(ogs_nas_eps_message_t *message, ogs decoded += size; break; case OGS_NAS_EPS_SECURITY_MODE_COMMAND_UE_RADIO_CAPABILITY_ID_REQUEST_TYPE: - decoded--; - ogs_assert(ogs_pkbuf_push(pkbuf, 1)); size = ogs_nas_eps_decode_ue_radio_capability_id_request(&security_mode_command->ue_radio_capability_id_request, pkbuf); if (size < 0) { ogs_error("ogs_nas_eps_decode_ue_radio_capability_id_request() failed"); diff --git a/lib/nas/eps/encoder.c b/lib/nas/eps/encoder.c index 498394066..ed39e82d6 100644 --- a/lib/nas/eps/encoder.c +++ b/lib/nas/eps/encoder.c @@ -1,7 +1,7 @@ /* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -28,8 +28,8 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-01-22 09:24:28.390156 by acetcom - * from 24301-g40.docx + * Created on: 2023-03-02 22:57:51.871237 by acetcom + * from 24301-h90.docx ******************************************************************************/ #include "ogs-nas-eps.h" @@ -327,6 +327,46 @@ int ogs_nas_eps_encode_attach_request(ogs_pkbuf_t *pkbuf, ogs_nas_eps_message_t encoded += size; } + if (attach_request->presencemask & OGS_NAS_EPS_ATTACH_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_ue_radio_capability_id_availability(pkbuf, &attach_request->ue_radio_capability_id_availability); + ogs_assert(size >= 0); + encoded += size; + } + + if (attach_request->presencemask & OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_wus_assistance_information(pkbuf, &attach_request->requested_wus_assistance_information); + ogs_assert(size >= 0); + encoded += size; + } + + if (attach_request->presencemask & OGS_NAS_EPS_ATTACH_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_nb_s1_drx_parameter(pkbuf, &attach_request->drx_parameter_in_nb_s1_mode); + ogs_assert(size >= 0); + encoded += size; + } + + if (attach_request->presencemask & OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_IMSI_OFFSET_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_IMSI_OFFSET_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_imsi_offset(pkbuf, &attach_request->requested_imsi_offset); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -574,6 +614,56 @@ int ogs_nas_eps_encode_attach_accept(ogs_pkbuf_t *pkbuf, ogs_nas_eps_message_t * encoded += size; } + if (attach_accept->presencemask & OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_wus_assistance_information(pkbuf, &attach_accept->negotiated_wus_assistance_information); + ogs_assert(size >= 0); + encoded += size; + } + + if (attach_accept->presencemask & OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_nb_s1_drx_parameter(pkbuf, &attach_accept->negotiated_drx_parameter_in_nb_s1_mode); + ogs_assert(size >= 0); + encoded += size; + } + + if (attach_accept->presencemask & OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_IMSI_OFFSET_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_IMSI_OFFSET_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_imsi_offset(pkbuf, &attach_accept->negotiated_imsi_offset); + ogs_assert(size >= 0); + encoded += size; + } + + if (attach_accept->presencemask & OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &attach_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (attach_accept->presencemask & OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &attach_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -642,6 +732,36 @@ int ogs_nas_eps_encode_attach_reject(ogs_pkbuf_t *pkbuf, ogs_nas_eps_message_t * encoded += size; } + if (attach_reject->presencemask & OGS_NAS_EPS_ATTACH_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_gprs_timer_3(pkbuf, &attach_reject->lower_bound_timer_value); + ogs_assert(size >= 0); + encoded += size; + } + + if (attach_reject->presencemask & OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &attach_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (attach_reject->presencemask & OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &attach_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -686,6 +806,36 @@ int ogs_nas_eps_encode_detach_request_to_ue(ogs_pkbuf_t *pkbuf, ogs_nas_eps_mess encoded += size; } + if (detach_request_to_ue->presencemask & OGS_NAS_EPS_DETACH_REQUEST_LOWER_BOUND_TIMER_VALUE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_DETACH_REQUEST_LOWER_BOUND_TIMER_VALUE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_gprs_timer_3(pkbuf, &detach_request_to_ue->lower_bound_timer_value); + ogs_assert(size >= 0); + encoded += size; + } + + if (detach_request_to_ue->presencemask & OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &detach_request_to_ue->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (detach_request_to_ue->presencemask & OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &detach_request_to_ue->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -979,6 +1129,66 @@ int ogs_nas_eps_encode_tracking_area_update_request(ogs_pkbuf_t *pkbuf, ogs_nas_ encoded += size; } + if (tracking_area_update_request->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_ue_radio_capability_id_availability(pkbuf, &tracking_area_update_request->ue_radio_capability_id_availability); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_request->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_wus_assistance_information(pkbuf, &tracking_area_update_request->requested_wus_assistance_information); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_request->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_nb_s1_drx_parameter(pkbuf, &tracking_area_update_request->drx_parameter_in_nb_s1_mode); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_request->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_IMSI_OFFSET_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_IMSI_OFFSET_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_imsi_offset(pkbuf, &tracking_area_update_request->requested_imsi_offset); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_request->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_REQUEST_TYPE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_REQUEST_TYPE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_ue_request_type(pkbuf, &tracking_area_update_request->ue_request_type); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_request->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_PAGING_RESTRICTION_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_PAGING_RESTRICTION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_paging_restriction(pkbuf, &tracking_area_update_request->paging_restriction); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -1254,6 +1464,66 @@ int ogs_nas_eps_encode_tracking_area_update_accept(ogs_pkbuf_t *pkbuf, ogs_nas_e encoded += size; } + if (tracking_area_update_accept->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_wus_assistance_information(pkbuf, &tracking_area_update_accept->negotiated_wus_assistance_information); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_accept->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_nb_s1_drx_parameter(pkbuf, &tracking_area_update_accept->negotiated_drx_parameter_in_nb_s1_mode); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_accept->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_IMSI_OFFSET_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_IMSI_OFFSET_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_imsi_offset(pkbuf, &tracking_area_update_accept->negotiated_imsi_offset); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_accept->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EPS_ADDITIONAL_REQUEST_RESULT_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EPS_ADDITIONAL_REQUEST_RESULT_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_eps_additional_request_result(pkbuf, &tracking_area_update_accept->eps_additional_request_result); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_accept->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &tracking_area_update_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_accept->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &tracking_area_update_accept->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -1287,6 +1557,36 @@ int ogs_nas_eps_encode_tracking_area_update_reject(ogs_pkbuf_t *pkbuf, ogs_nas_e encoded += size; } + if (tracking_area_update_reject->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_gprs_timer_3(pkbuf, &tracking_area_update_reject->lower_bound_timer_value); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_reject->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &tracking_area_update_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (tracking_area_update_reject->presencemask & OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &tracking_area_update_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -1332,6 +1632,26 @@ int ogs_nas_eps_encode_extended_service_request(ogs_pkbuf_t *pkbuf, ogs_nas_eps_ encoded += size; } + if (extended_service_request->presencemask & OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_UE_REQUEST_TYPE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_UE_REQUEST_TYPE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_ue_request_type(pkbuf, &extended_service_request->ue_request_type); + ogs_assert(size >= 0); + encoded += size; + } + + if (extended_service_request->presencemask & OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_PAGING_RESTRICTION_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_PAGING_RESTRICTION_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_paging_restriction(pkbuf, &extended_service_request->paging_restriction); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -1366,6 +1686,16 @@ int ogs_nas_eps_encode_service_reject(ogs_pkbuf_t *pkbuf, ogs_nas_eps_message_t ogs_assert(size >= 0); encoded += size; + if (service_reject->presencemask & OGS_NAS_EPS_SERVICE_REJECT_T3442_VALUE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_SERVICE_REJECT_T3442_VALUE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_gprs_timer(pkbuf, &service_reject->t3442_value); + ogs_assert(size >= 0); + encoded += size; + } + if (service_reject->presencemask & OGS_NAS_EPS_SERVICE_REJECT_T3346_VALUE_PRESENT) { size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_SERVICE_REJECT_T3346_VALUE_TYPE); ogs_assert(size >= 0); @@ -1386,6 +1716,36 @@ int ogs_nas_eps_encode_service_reject(ogs_pkbuf_t *pkbuf, ogs_nas_eps_message_t encoded += size; } + if (service_reject->presencemask & OGS_NAS_EPS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_gprs_timer_3(pkbuf, &service_reject->lower_bound_timer_value); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_reject->presencemask & OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &service_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming); + ogs_assert(size >= 0); + encoded += size; + } + + if (service_reject->presencemask & OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT) { + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE); + ogs_assert(size >= 0); + encoded += size; + + size = ogs_nas_eps_encode_tracking_area_identity_list(pkbuf, &service_reject->forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service); + ogs_assert(size >= 0); + encoded += size; + } + return encoded; } @@ -1604,7 +1964,9 @@ int ogs_nas_eps_encode_security_mode_command(ogs_pkbuf_t *pkbuf, ogs_nas_eps_mes } if (security_mode_command->presencemask & OGS_NAS_EPS_SECURITY_MODE_COMMAND_UE_RADIO_CAPABILITY_ID_REQUEST_PRESENT) { - security_mode_command->ue_radio_capability_id_request.type = (OGS_NAS_EPS_SECURITY_MODE_COMMAND_UE_RADIO_CAPABILITY_ID_REQUEST_TYPE >> 4); + size = ogs_nas_eps_encode_optional_type(pkbuf, OGS_NAS_EPS_SECURITY_MODE_COMMAND_UE_RADIO_CAPABILITY_ID_REQUEST_TYPE); + ogs_assert(size >= 0); + encoded += size; size = ogs_nas_eps_encode_ue_radio_capability_id_request(pkbuf, &security_mode_command->ue_radio_capability_id_request); ogs_assert(size >= 0); diff --git a/lib/nas/eps/ies.c b/lib/nas/eps/ies.c index bb7b98583..f36fc71b1 100644 --- a/lib/nas/eps/ies.c +++ b/lib/nas/eps/ies.c @@ -1,7 +1,7 @@ /* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -28,8 +28,8 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-01-22 09:24:28.368722 by acetcom - * from 24301-g40.docx + * Created on: 2023-03-02 22:57:51.846548 by acetcom + * from 24301-h90.docx ******************************************************************************/ #include "ogs-nas-eps.h" @@ -2405,7 +2405,7 @@ int ogs_nas_eps_encode_ciphering_key_sequence_number(ogs_pkbuf_t *pkbuf, ogs_nas } /* 9.9.3.5 CSFB response - * O TV 1 */ + * C TV 1 */ int ogs_nas_eps_decode_csfb_response(ogs_nas_csfb_response_t *csfb_response, ogs_pkbuf_t *pkbuf) { int size = sizeof(ogs_nas_csfb_response_t); @@ -2750,17 +2750,61 @@ int ogs_nas_eps_encode_n1_ue_network_capability(ogs_pkbuf_t *pkbuf, ogs_nas_n1_u return size; } -/* 9.9.3.59 UE radio capability ID request - * O TV 1 */ -int ogs_nas_eps_decode_ue_radio_capability_id_request(ogs_nas_ue_radio_capability_id_request_t *ue_radio_capability_id_request, ogs_pkbuf_t *pkbuf) +/* 9.9.3.58 UE radio capability ID availability + * O TLV 3 */ +int ogs_nas_eps_decode_ue_radio_capability_id_availability(ogs_nas_ue_radio_capability_id_availability_t *ue_radio_capability_id_availability, ogs_pkbuf_t *pkbuf) { - int size = sizeof(ogs_nas_ue_radio_capability_id_request_t); + int size = 0; + ogs_nas_ue_radio_capability_id_availability_t *source = (ogs_nas_ue_radio_capability_id_availability_t *)pkbuf->data; + + ue_radio_capability_id_availability->length = source->length; + size = ue_radio_capability_id_availability->length + sizeof(ue_radio_capability_id_availability->length); if (ogs_pkbuf_pull(pkbuf, size) == NULL) { ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); return -1; } + if (sizeof(*ue_radio_capability_id_availability) < size) return -1; + memcpy(ue_radio_capability_id_availability, pkbuf->data - size, size); + + ogs_trace(" UE_RADIO_CAPABILITY_ID_AVAILABILITY - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_eps_encode_ue_radio_capability_id_availability(ogs_pkbuf_t *pkbuf, ogs_nas_ue_radio_capability_id_availability_t *ue_radio_capability_id_availability) +{ + int size = ue_radio_capability_id_availability->length + sizeof(ue_radio_capability_id_availability->length); + ogs_nas_ue_radio_capability_id_availability_t target; + + memcpy(&target, ue_radio_capability_id_availability, sizeof(ogs_nas_ue_radio_capability_id_availability_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" UE_RADIO_CAPABILITY_ID_AVAILABILITY - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.9.3.59 UE radio capability ID request + * O TLV 3 */ +int ogs_nas_eps_decode_ue_radio_capability_id_request(ogs_nas_ue_radio_capability_id_request_t *ue_radio_capability_id_request, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_ue_radio_capability_id_request_t *source = (ogs_nas_ue_radio_capability_id_request_t *)pkbuf->data; + + ue_radio_capability_id_request->length = source->length; + size = ue_radio_capability_id_request->length + sizeof(ue_radio_capability_id_request->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*ue_radio_capability_id_request) < size) return -1; memcpy(ue_radio_capability_id_request, pkbuf->data - size, size); ogs_trace(" UE_RADIO_CAPABILITY_ID_REQUEST - "); @@ -2771,10 +2815,12 @@ int ogs_nas_eps_decode_ue_radio_capability_id_request(ogs_nas_ue_radio_capabilit int ogs_nas_eps_encode_ue_radio_capability_id_request(ogs_pkbuf_t *pkbuf, ogs_nas_ue_radio_capability_id_request_t *ue_radio_capability_id_request) { - int size = sizeof(ogs_nas_ue_radio_capability_id_request_t); + int size = ue_radio_capability_id_request->length + sizeof(ue_radio_capability_id_request->length); + ogs_nas_ue_radio_capability_id_request_t target; + memcpy(&target, ue_radio_capability_id_request, sizeof(ogs_nas_ue_radio_capability_id_request_t)); ogs_assert(ogs_pkbuf_pull(pkbuf, size)); - memcpy(pkbuf->data - size, ue_radio_capability_id_request, size); + memcpy(pkbuf->data - size, &target, size); ogs_trace(" UE_RADIO_CAPABILITY_ID_REQUEST - "); ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); @@ -2892,6 +2938,240 @@ int ogs_nas_eps_encode_ue_radio_capability_id_deletion_indication(ogs_pkbuf_t *p return size; } +/* 9.9.3.62 WUS assistance information + * O TLV 3-n */ +int ogs_nas_eps_decode_wus_assistance_information(ogs_nas_wus_assistance_information_t *wus_assistance_information, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_wus_assistance_information_t *source = (ogs_nas_wus_assistance_information_t *)pkbuf->data; + + wus_assistance_information->length = source->length; + size = wus_assistance_information->length + sizeof(wus_assistance_information->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*wus_assistance_information) < size) return -1; + memcpy(wus_assistance_information, pkbuf->data - size, size); + + ogs_trace(" WUS_ASSISTANCE_INFORMATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_eps_encode_wus_assistance_information(ogs_pkbuf_t *pkbuf, ogs_nas_wus_assistance_information_t *wus_assistance_information) +{ + int size = wus_assistance_information->length + sizeof(wus_assistance_information->length); + ogs_nas_wus_assistance_information_t target; + + memcpy(&target, wus_assistance_information, sizeof(ogs_nas_wus_assistance_information_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" WUS_ASSISTANCE_INFORMATION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.9.3.63 NB-S1 DRX parameter + * O TLV 3 */ +int ogs_nas_eps_decode_nb_s1_drx_parameter(ogs_nas_nb_s1_drx_parameter_t *nb_s1_drx_parameter, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_nb_s1_drx_parameter_t *source = (ogs_nas_nb_s1_drx_parameter_t *)pkbuf->data; + + nb_s1_drx_parameter->length = source->length; + size = nb_s1_drx_parameter->length + sizeof(nb_s1_drx_parameter->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*nb_s1_drx_parameter) < size) return -1; + memcpy(nb_s1_drx_parameter, pkbuf->data - size, size); + + ogs_trace(" NB_S1_DRX_PARAMETER - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_eps_encode_nb_s1_drx_parameter(ogs_pkbuf_t *pkbuf, ogs_nas_nb_s1_drx_parameter_t *nb_s1_drx_parameter) +{ + int size = nb_s1_drx_parameter->length + sizeof(nb_s1_drx_parameter->length); + ogs_nas_nb_s1_drx_parameter_t target; + + memcpy(&target, nb_s1_drx_parameter, sizeof(ogs_nas_nb_s1_drx_parameter_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" NB_S1_DRX_PARAMETER - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.9.3.64 IMSI offset + * O TLV 4 */ +int ogs_nas_eps_decode_imsi_offset(ogs_nas_imsi_offset_t *imsi_offset, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_imsi_offset_t *source = (ogs_nas_imsi_offset_t *)pkbuf->data; + + imsi_offset->length = source->length; + size = imsi_offset->length + sizeof(imsi_offset->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*imsi_offset) < size) return -1; + memcpy(imsi_offset, pkbuf->data - size, size); + + ogs_trace(" IMSI_OFFSET - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_eps_encode_imsi_offset(ogs_pkbuf_t *pkbuf, ogs_nas_imsi_offset_t *imsi_offset) +{ + int size = imsi_offset->length + sizeof(imsi_offset->length); + ogs_nas_imsi_offset_t target; + + memcpy(&target, imsi_offset, sizeof(ogs_nas_imsi_offset_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" IMSI_OFFSET - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.9.3.65 UE request type + * O TLV 3 */ +int ogs_nas_eps_decode_ue_request_type(ogs_nas_ue_request_type_t *ue_request_type, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_ue_request_type_t *source = (ogs_nas_ue_request_type_t *)pkbuf->data; + + ue_request_type->length = source->length; + size = ue_request_type->length + sizeof(ue_request_type->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*ue_request_type) < size) return -1; + memcpy(ue_request_type, pkbuf->data - size, size); + + ogs_trace(" UE_REQUEST_TYPE - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_eps_encode_ue_request_type(ogs_pkbuf_t *pkbuf, ogs_nas_ue_request_type_t *ue_request_type) +{ + int size = ue_request_type->length + sizeof(ue_request_type->length); + ogs_nas_ue_request_type_t target; + + memcpy(&target, ue_request_type, sizeof(ogs_nas_ue_request_type_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" UE_REQUEST_TYPE - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.9.3.66 Paging restriction + * O TLV 3-5 */ +int ogs_nas_eps_decode_paging_restriction(ogs_nas_paging_restriction_t *paging_restriction, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_paging_restriction_t *source = (ogs_nas_paging_restriction_t *)pkbuf->data; + + paging_restriction->length = source->length; + size = paging_restriction->length + sizeof(paging_restriction->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*paging_restriction) < size) return -1; + memcpy(paging_restriction, pkbuf->data - size, size); + + ogs_trace(" PAGING_RESTRICTION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_eps_encode_paging_restriction(ogs_pkbuf_t *pkbuf, ogs_nas_paging_restriction_t *paging_restriction) +{ + int size = paging_restriction->length + sizeof(paging_restriction->length); + ogs_nas_paging_restriction_t target; + + memcpy(&target, paging_restriction, sizeof(ogs_nas_paging_restriction_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" PAGING_RESTRICTION - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +/* 9.9.3.67 EPS additional request result + * O TLV 3 */ +int ogs_nas_eps_decode_eps_additional_request_result(ogs_nas_eps_additional_request_result_t *eps_additional_request_result, ogs_pkbuf_t *pkbuf) +{ + int size = 0; + ogs_nas_eps_additional_request_result_t *source = (ogs_nas_eps_additional_request_result_t *)pkbuf->data; + + eps_additional_request_result->length = source->length; + size = eps_additional_request_result->length + sizeof(eps_additional_request_result->length); + + if (ogs_pkbuf_pull(pkbuf, size) == NULL) { + ogs_error("ogs_pkbuf_pull() failed [size:%d]", (int)size); + return -1; + } + + if (sizeof(*eps_additional_request_result) < size) return -1; + memcpy(eps_additional_request_result, pkbuf->data - size, size); + + ogs_trace(" EPS_ADDITIONAL_REQUEST_RESULT - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + +int ogs_nas_eps_encode_eps_additional_request_result(ogs_pkbuf_t *pkbuf, ogs_nas_eps_additional_request_result_t *eps_additional_request_result) +{ + int size = eps_additional_request_result->length + sizeof(eps_additional_request_result->length); + ogs_nas_eps_additional_request_result_t target; + + memcpy(&target, eps_additional_request_result, sizeof(ogs_nas_eps_additional_request_result_t)); + ogs_assert(ogs_pkbuf_pull(pkbuf, size)); + memcpy(pkbuf->data - size, &target, size); + + ogs_trace(" EPS_ADDITIONAL_REQUEST_RESULT - "); + ogs_log_hexdump(OGS_LOG_TRACE, pkbuf->data - size, size); + + return size; +} + /* 9.9.3.7 Detach type * M V 1/2 */ int ogs_nas_eps_decode_detach_type(ogs_nas_detach_type_t *detach_type, ogs_pkbuf_t *pkbuf) diff --git a/lib/nas/eps/ies.h b/lib/nas/eps/ies.h index 0ce3a12e5..5235f3a8d 100644 --- a/lib/nas/eps/ies.h +++ b/lib/nas/eps/ies.h @@ -1,7 +1,7 @@ /* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -28,8 +28,8 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-01-22 09:24:28.366939 by acetcom - * from 24301-g40.docx + * Created on: 2023-03-02 22:57:51.844510 by acetcom + * from 24301-h90.docx ******************************************************************************/ #if !defined(OGS_NAS_INSIDE) && !defined(OGS_NAS_COMPILATION) @@ -118,10 +118,17 @@ int ogs_nas_eps_decode_ue_status(ogs_nas_ue_status_t *ue_status, ogs_pkbuf_t *pk int ogs_nas_eps_decode_additional_information_requested(ogs_nas_additional_information_requested_t *additional_information_requested, ogs_pkbuf_t *pkbuf); int ogs_nas_eps_decode_ciphering_key_data(ogs_nas_ciphering_key_data_t *ciphering_key_data, ogs_pkbuf_t *pkbuf); int ogs_nas_eps_decode_n1_ue_network_capability(ogs_nas_n1_ue_network_capability_t *n1_ue_network_capability, ogs_pkbuf_t *pkbuf); +int ogs_nas_eps_decode_ue_radio_capability_id_availability(ogs_nas_ue_radio_capability_id_availability_t *ue_radio_capability_id_availability, ogs_pkbuf_t *pkbuf); int ogs_nas_eps_decode_ue_radio_capability_id_request(ogs_nas_ue_radio_capability_id_request_t *ue_radio_capability_id_request, ogs_pkbuf_t *pkbuf); int ogs_nas_eps_decode_daylight_saving_time(ogs_nas_daylight_saving_time_t *daylight_saving_time, ogs_pkbuf_t *pkbuf); int ogs_nas_eps_decode_ue_radio_capability_id(ogs_nas_ue_radio_capability_id_t *ue_radio_capability_id, ogs_pkbuf_t *pkbuf); int ogs_nas_eps_decode_ue_radio_capability_id_deletion_indication(ogs_nas_ue_radio_capability_id_deletion_indication_t *ue_radio_capability_id_deletion_indication, ogs_pkbuf_t *pkbuf); +int ogs_nas_eps_decode_wus_assistance_information(ogs_nas_wus_assistance_information_t *wus_assistance_information, ogs_pkbuf_t *pkbuf); +int ogs_nas_eps_decode_nb_s1_drx_parameter(ogs_nas_nb_s1_drx_parameter_t *nb_s1_drx_parameter, ogs_pkbuf_t *pkbuf); +int ogs_nas_eps_decode_imsi_offset(ogs_nas_imsi_offset_t *imsi_offset, ogs_pkbuf_t *pkbuf); +int ogs_nas_eps_decode_ue_request_type(ogs_nas_ue_request_type_t *ue_request_type, ogs_pkbuf_t *pkbuf); +int ogs_nas_eps_decode_paging_restriction(ogs_nas_paging_restriction_t *paging_restriction, ogs_pkbuf_t *pkbuf); +int ogs_nas_eps_decode_eps_additional_request_result(ogs_nas_eps_additional_request_result_t *eps_additional_request_result, ogs_pkbuf_t *pkbuf); int ogs_nas_eps_decode_detach_type(ogs_nas_detach_type_t *detach_type, ogs_pkbuf_t *pkbuf); int ogs_nas_eps_decode_drx_parameter(ogs_nas_drx_parameter_t *drx_parameter, ogs_pkbuf_t *pkbuf); int ogs_nas_eps_decode_emm_cause(ogs_nas_emm_cause_t *emm_cause, ogs_pkbuf_t *pkbuf); @@ -226,10 +233,17 @@ int ogs_nas_eps_encode_ue_status(ogs_pkbuf_t *pkbuf, ogs_nas_ue_status_t *ue_sta int ogs_nas_eps_encode_additional_information_requested(ogs_pkbuf_t *pkbuf, ogs_nas_additional_information_requested_t *additional_information_requested); int ogs_nas_eps_encode_ciphering_key_data(ogs_pkbuf_t *pkbuf, ogs_nas_ciphering_key_data_t *ciphering_key_data); int ogs_nas_eps_encode_n1_ue_network_capability(ogs_pkbuf_t *pkbuf, ogs_nas_n1_ue_network_capability_t *n1_ue_network_capability); +int ogs_nas_eps_encode_ue_radio_capability_id_availability(ogs_pkbuf_t *pkbuf, ogs_nas_ue_radio_capability_id_availability_t *ue_radio_capability_id_availability); int ogs_nas_eps_encode_ue_radio_capability_id_request(ogs_pkbuf_t *pkbuf, ogs_nas_ue_radio_capability_id_request_t *ue_radio_capability_id_request); int ogs_nas_eps_encode_daylight_saving_time(ogs_pkbuf_t *pkbuf, ogs_nas_daylight_saving_time_t *daylight_saving_time); int ogs_nas_eps_encode_ue_radio_capability_id(ogs_pkbuf_t *pkbuf, ogs_nas_ue_radio_capability_id_t *ue_radio_capability_id); int ogs_nas_eps_encode_ue_radio_capability_id_deletion_indication(ogs_pkbuf_t *pkbuf, ogs_nas_ue_radio_capability_id_deletion_indication_t *ue_radio_capability_id_deletion_indication); +int ogs_nas_eps_encode_wus_assistance_information(ogs_pkbuf_t *pkbuf, ogs_nas_wus_assistance_information_t *wus_assistance_information); +int ogs_nas_eps_encode_nb_s1_drx_parameter(ogs_pkbuf_t *pkbuf, ogs_nas_nb_s1_drx_parameter_t *nb_s1_drx_parameter); +int ogs_nas_eps_encode_imsi_offset(ogs_pkbuf_t *pkbuf, ogs_nas_imsi_offset_t *imsi_offset); +int ogs_nas_eps_encode_ue_request_type(ogs_pkbuf_t *pkbuf, ogs_nas_ue_request_type_t *ue_request_type); +int ogs_nas_eps_encode_paging_restriction(ogs_pkbuf_t *pkbuf, ogs_nas_paging_restriction_t *paging_restriction); +int ogs_nas_eps_encode_eps_additional_request_result(ogs_pkbuf_t *pkbuf, ogs_nas_eps_additional_request_result_t *eps_additional_request_result); int ogs_nas_eps_encode_detach_type(ogs_pkbuf_t *pkbuf, ogs_nas_detach_type_t *detach_type); int ogs_nas_eps_encode_drx_parameter(ogs_pkbuf_t *pkbuf, ogs_nas_drx_parameter_t *drx_parameter); int ogs_nas_eps_encode_emm_cause(ogs_pkbuf_t *pkbuf, ogs_nas_emm_cause_t *emm_cause); diff --git a/lib/nas/eps/message.h b/lib/nas/eps/message.h index dc5f36049..058f3b997 100644 --- a/lib/nas/eps/message.h +++ b/lib/nas/eps/message.h @@ -1,7 +1,7 @@ /* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -28,8 +28,8 @@ /******************************************************************************* * This file had been created by nas-message.py script v0.1.0 * Please do not modify this file but regenerate it via script. - * Created on: 2022-01-22 09:24:28.374281 by acetcom - * from 24301-g40.docx + * Created on: 2023-03-02 22:57:51.852650 by acetcom + * from 24301-h90.docx ******************************************************************************/ #if !defined(OGS_NAS_INSIDE) && !defined(OGS_NAS_COMPILATION) @@ -125,29 +125,33 @@ ED2(uint8_t security_header_type:4;, /******************************************************* * ATTACH REQUEST ******************************************************/ -#define OGS_NAS_EPS_ATTACH_REQUEST_OLD_P_TMSI_SIGNATURE_PRESENT (1<<0) -#define OGS_NAS_EPS_ATTACH_REQUEST_ADDITIONAL_GUTI_PRESENT (1<<1) -#define OGS_NAS_EPS_ATTACH_REQUEST_LAST_VISITED_REGISTERED_TAI_PRESENT (1<<2) -#define OGS_NAS_EPS_ATTACH_REQUEST_DRX_PARAMETER_PRESENT (1<<3) -#define OGS_NAS_EPS_ATTACH_REQUEST_MS_NETWORK_CAPABILITY_PRESENT (1<<4) -#define OGS_NAS_EPS_ATTACH_REQUEST_OLD_LOCATION_AREA_IDENTIFICATION_PRESENT (1<<5) -#define OGS_NAS_EPS_ATTACH_REQUEST_TMSI_STATUS_PRESENT (1<<6) -#define OGS_NAS_EPS_ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_2_PRESENT (1<<7) -#define OGS_NAS_EPS_ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_3_PRESENT (1<<8) -#define OGS_NAS_EPS_ATTACH_REQUEST_SUPPORTED_CODECS_PRESENT (1<<9) -#define OGS_NAS_EPS_ATTACH_REQUEST_ADDITIONAL_UPDATE_TYPE_PRESENT (1<<10) -#define OGS_NAS_EPS_ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_PRESENT (1<<11) -#define OGS_NAS_EPS_ATTACH_REQUEST_DEVICE_PROPERTIES_PRESENT (1<<12) -#define OGS_NAS_EPS_ATTACH_REQUEST_OLD_GUTI_TYPE_PRESENT (1<<13) -#define OGS_NAS_EPS_ATTACH_REQUEST_MS_NETWORK_FEATURE_SUPPORT_PRESENT (1<<14) -#define OGS_NAS_EPS_ATTACH_REQUEST_TMSI_BASED_NRI_CONTAINER_PRESENT (1<<15) -#define OGS_NAS_EPS_ATTACH_REQUEST_T3324_VALUE_PRESENT (1<<16) -#define OGS_NAS_EPS_ATTACH_REQUEST_T3412_EXTENDED_VALUE_PRESENT (1<<17) -#define OGS_NAS_EPS_ATTACH_REQUEST_EXTENDED_DRX_PARAMETERS_PRESENT (1<<18) -#define OGS_NAS_EPS_ATTACH_REQUEST_UE_ADDITIONAL_SECURITY_CAPABILITY_PRESENT (1<<19) -#define OGS_NAS_EPS_ATTACH_REQUEST_UE_STATUS_PRESENT (1<<20) -#define OGS_NAS_EPS_ATTACH_REQUEST_ADDITIONAL_INFORMATION_REQUESTED_PRESENT (1<<21) -#define OGS_NAS_EPS_ATTACH_REQUEST_N1_UE_NETWORK_CAPABILITY_PRESENT (1<<22) +#define OGS_NAS_EPS_ATTACH_REQUEST_OLD_P_TMSI_SIGNATURE_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_ATTACH_REQUEST_ADDITIONAL_GUTI_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_ATTACH_REQUEST_LAST_VISITED_REGISTERED_TAI_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_ATTACH_REQUEST_DRX_PARAMETER_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_ATTACH_REQUEST_MS_NETWORK_CAPABILITY_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_ATTACH_REQUEST_OLD_LOCATION_AREA_IDENTIFICATION_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_ATTACH_REQUEST_TMSI_STATUS_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_EPS_ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_2_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_EPS_ATTACH_REQUEST_MOBILE_STATION_CLASSMARK_3_PRESENT ((uint64_t)1<<8) +#define OGS_NAS_EPS_ATTACH_REQUEST_SUPPORTED_CODECS_PRESENT ((uint64_t)1<<9) +#define OGS_NAS_EPS_ATTACH_REQUEST_ADDITIONAL_UPDATE_TYPE_PRESENT ((uint64_t)1<<10) +#define OGS_NAS_EPS_ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_PRESENT ((uint64_t)1<<11) +#define OGS_NAS_EPS_ATTACH_REQUEST_DEVICE_PROPERTIES_PRESENT ((uint64_t)1<<12) +#define OGS_NAS_EPS_ATTACH_REQUEST_OLD_GUTI_TYPE_PRESENT ((uint64_t)1<<13) +#define OGS_NAS_EPS_ATTACH_REQUEST_MS_NETWORK_FEATURE_SUPPORT_PRESENT ((uint64_t)1<<14) +#define OGS_NAS_EPS_ATTACH_REQUEST_TMSI_BASED_NRI_CONTAINER_PRESENT ((uint64_t)1<<15) +#define OGS_NAS_EPS_ATTACH_REQUEST_T3324_VALUE_PRESENT ((uint64_t)1<<16) +#define OGS_NAS_EPS_ATTACH_REQUEST_T3412_EXTENDED_VALUE_PRESENT ((uint64_t)1<<17) +#define OGS_NAS_EPS_ATTACH_REQUEST_EXTENDED_DRX_PARAMETERS_PRESENT ((uint64_t)1<<18) +#define OGS_NAS_EPS_ATTACH_REQUEST_UE_ADDITIONAL_SECURITY_CAPABILITY_PRESENT ((uint64_t)1<<19) +#define OGS_NAS_EPS_ATTACH_REQUEST_UE_STATUS_PRESENT ((uint64_t)1<<20) +#define OGS_NAS_EPS_ATTACH_REQUEST_ADDITIONAL_INFORMATION_REQUESTED_PRESENT ((uint64_t)1<<21) +#define OGS_NAS_EPS_ATTACH_REQUEST_N1_UE_NETWORK_CAPABILITY_PRESENT ((uint64_t)1<<22) +#define OGS_NAS_EPS_ATTACH_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_PRESENT ((uint64_t)1<<23) +#define OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_PRESENT ((uint64_t)1<<24) +#define OGS_NAS_EPS_ATTACH_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT ((uint64_t)1<<25) +#define OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_IMSI_OFFSET_PRESENT ((uint64_t)1<<26) #define OGS_NAS_EPS_ATTACH_REQUEST_OLD_P_TMSI_SIGNATURE_TYPE 0x19 #define OGS_NAS_EPS_ATTACH_REQUEST_ADDITIONAL_GUTI_TYPE 0x50 #define OGS_NAS_EPS_ATTACH_REQUEST_LAST_VISITED_REGISTERED_TAI_TYPE 0x52 @@ -171,6 +175,10 @@ ED2(uint8_t security_header_type:4;, #define OGS_NAS_EPS_ATTACH_REQUEST_UE_STATUS_TYPE 0x6D #define OGS_NAS_EPS_ATTACH_REQUEST_ADDITIONAL_INFORMATION_REQUESTED_TYPE 0x17 #define OGS_NAS_EPS_ATTACH_REQUEST_N1_UE_NETWORK_CAPABILITY_TYPE 0x32 +#define OGS_NAS_EPS_ATTACH_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_TYPE 0x34 +#define OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_TYPE 0x35 +#define OGS_NAS_EPS_ATTACH_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_TYPE 0x36 +#define OGS_NAS_EPS_ATTACH_REQUEST_REQUESTED_IMSI_OFFSET_TYPE 0x38 typedef struct ogs_nas_eps_attach_request_s { /* Mandatory fields */ @@ -180,7 +188,7 @@ typedef struct ogs_nas_eps_attach_request_s { ogs_nas_esm_message_container_t esm_message_container; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_p_tmsi_signature_t old_p_tmsi_signature; ogs_nas_eps_mobile_identity_t additional_guti; ogs_nas_tracking_area_identity_t last_visited_registered_tai; @@ -204,35 +212,44 @@ typedef struct ogs_nas_eps_attach_request_s { ogs_nas_ue_status_t ue_status; ogs_nas_additional_information_requested_t additional_information_requested; ogs_nas_n1_ue_network_capability_t n1_ue_network_capability; + ogs_nas_ue_radio_capability_id_availability_t ue_radio_capability_id_availability; + ogs_nas_wus_assistance_information_t requested_wus_assistance_information; + ogs_nas_nb_s1_drx_parameter_t drx_parameter_in_nb_s1_mode; + ogs_nas_imsi_offset_t requested_imsi_offset; } ogs_nas_eps_attach_request_t; /******************************************************* * ATTACH ACCEPT ******************************************************/ -#define OGS_NAS_EPS_ATTACH_ACCEPT_GUTI_PRESENT (1<<0) -#define OGS_NAS_EPS_ATTACH_ACCEPT_LOCATION_AREA_IDENTIFICATION_PRESENT (1<<1) -#define OGS_NAS_EPS_ATTACH_ACCEPT_MS_IDENTITY_PRESENT (1<<2) -#define OGS_NAS_EPS_ATTACH_ACCEPT_EMM_CAUSE_PRESENT (1<<3) -#define OGS_NAS_EPS_ATTACH_ACCEPT_T3402_VALUE_PRESENT (1<<4) -#define OGS_NAS_EPS_ATTACH_ACCEPT_T3423_VALUE_PRESENT (1<<5) -#define OGS_NAS_EPS_ATTACH_ACCEPT_EQUIVALENT_PLMNS_PRESENT (1<<6) -#define OGS_NAS_EPS_ATTACH_ACCEPT_EMERGENCY_NUMBER_LIST_PRESENT (1<<7) -#define OGS_NAS_EPS_ATTACH_ACCEPT_EPS_NETWORK_FEATURE_SUPPORT_PRESENT (1<<8) -#define OGS_NAS_EPS_ATTACH_ACCEPT_ADDITIONAL_UPDATE_RESULT_PRESENT (1<<9) -#define OGS_NAS_EPS_ATTACH_ACCEPT_T3412_EXTENDED_VALUE_PRESENT (1<<10) -#define OGS_NAS_EPS_ATTACH_ACCEPT_T3324_VALUE_PRESENT (1<<11) -#define OGS_NAS_EPS_ATTACH_ACCEPT_EXTENDED_DRX_PARAMETERS_PRESENT (1<<12) -#define OGS_NAS_EPS_ATTACH_ACCEPT_DCN_ID_PRESENT (1<<13) -#define OGS_NAS_EPS_ATTACH_ACCEPT_SMS_SERVICES_STATUS_PRESENT (1<<14) -#define OGS_NAS_EPS_ATTACH_ACCEPT_NON__NW_PROVIDED_POLICIES_PRESENT (1<<15) -#define OGS_NAS_EPS_ATTACH_ACCEPT_T3448_VALUE_PRESENT (1<<16) -#define OGS_NAS_EPS_ATTACH_ACCEPT_NETWORK_POLICY_PRESENT (1<<17) -#define OGS_NAS_EPS_ATTACH_ACCEPT_T3447_VALUE_PRESENT (1<<18) -#define OGS_NAS_EPS_ATTACH_ACCEPT_EXTENDED_EMERGENCY_NUMBER_LIST_PRESENT (1<<19) -#define OGS_NAS_EPS_ATTACH_ACCEPT_CIPHERING_KEY_DATA_PRESENT (1<<20) -#define OGS_NAS_EPS_ATTACH_ACCEPT_UE_RADIO_CAPABILITY_ID_PRESENT (1<<21) -#define OGS_NAS_EPS_ATTACH_ACCEPT_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_PRESENT (1<<22) +#define OGS_NAS_EPS_ATTACH_ACCEPT_GUTI_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_ATTACH_ACCEPT_LOCATION_AREA_IDENTIFICATION_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_ATTACH_ACCEPT_MS_IDENTITY_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_ATTACH_ACCEPT_EMM_CAUSE_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_ATTACH_ACCEPT_T3402_VALUE_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_ATTACH_ACCEPT_T3423_VALUE_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_ATTACH_ACCEPT_EQUIVALENT_PLMNS_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_EPS_ATTACH_ACCEPT_EMERGENCY_NUMBER_LIST_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_EPS_ATTACH_ACCEPT_EPS_NETWORK_FEATURE_SUPPORT_PRESENT ((uint64_t)1<<8) +#define OGS_NAS_EPS_ATTACH_ACCEPT_ADDITIONAL_UPDATE_RESULT_PRESENT ((uint64_t)1<<9) +#define OGS_NAS_EPS_ATTACH_ACCEPT_T3412_EXTENDED_VALUE_PRESENT ((uint64_t)1<<10) +#define OGS_NAS_EPS_ATTACH_ACCEPT_T3324_VALUE_PRESENT ((uint64_t)1<<11) +#define OGS_NAS_EPS_ATTACH_ACCEPT_EXTENDED_DRX_PARAMETERS_PRESENT ((uint64_t)1<<12) +#define OGS_NAS_EPS_ATTACH_ACCEPT_DCN_ID_PRESENT ((uint64_t)1<<13) +#define OGS_NAS_EPS_ATTACH_ACCEPT_SMS_SERVICES_STATUS_PRESENT ((uint64_t)1<<14) +#define OGS_NAS_EPS_ATTACH_ACCEPT_NON__NW_PROVIDED_POLICIES_PRESENT ((uint64_t)1<<15) +#define OGS_NAS_EPS_ATTACH_ACCEPT_T3448_VALUE_PRESENT ((uint64_t)1<<16) +#define OGS_NAS_EPS_ATTACH_ACCEPT_NETWORK_POLICY_PRESENT ((uint64_t)1<<17) +#define OGS_NAS_EPS_ATTACH_ACCEPT_T3447_VALUE_PRESENT ((uint64_t)1<<18) +#define OGS_NAS_EPS_ATTACH_ACCEPT_EXTENDED_EMERGENCY_NUMBER_LIST_PRESENT ((uint64_t)1<<19) +#define OGS_NAS_EPS_ATTACH_ACCEPT_CIPHERING_KEY_DATA_PRESENT ((uint64_t)1<<20) +#define OGS_NAS_EPS_ATTACH_ACCEPT_UE_RADIO_CAPABILITY_ID_PRESENT ((uint64_t)1<<21) +#define OGS_NAS_EPS_ATTACH_ACCEPT_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_PRESENT ((uint64_t)1<<22) +#define OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_PRESENT ((uint64_t)1<<23) +#define OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT ((uint64_t)1<<24) +#define OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_IMSI_OFFSET_PRESENT ((uint64_t)1<<25) +#define OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<26) +#define OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<27) #define OGS_NAS_EPS_ATTACH_ACCEPT_GUTI_TYPE 0x50 #define OGS_NAS_EPS_ATTACH_ACCEPT_LOCATION_AREA_IDENTIFICATION_TYPE 0x13 #define OGS_NAS_EPS_ATTACH_ACCEPT_MS_IDENTITY_TYPE 0x23 @@ -256,6 +273,11 @@ typedef struct ogs_nas_eps_attach_request_s { #define OGS_NAS_EPS_ATTACH_ACCEPT_CIPHERING_KEY_DATA_TYPE 0x7C #define OGS_NAS_EPS_ATTACH_ACCEPT_UE_RADIO_CAPABILITY_ID_TYPE 0x66 #define OGS_NAS_EPS_ATTACH_ACCEPT_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_TYPE 0xB0 +#define OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_TYPE 0x35 +#define OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_TYPE 0x36 +#define OGS_NAS_EPS_ATTACH_ACCEPT_NEGOTIATED_IMSI_OFFSET_TYPE 0x38 +#define OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_EPS_ATTACH_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E typedef struct ogs_nas_eps_attach_accept_s { /* Mandatory fields */ @@ -265,7 +287,7 @@ typedef struct ogs_nas_eps_attach_accept_s { ogs_nas_esm_message_container_t esm_message_container; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_eps_mobile_identity_t guti; ogs_nas_location_area_identification_t location_area_identification; ogs_nas_mobile_identity_t ms_identity; @@ -289,6 +311,11 @@ typedef struct ogs_nas_eps_attach_accept_s { ogs_nas_ciphering_key_data_t ciphering_key_data; ogs_nas_ue_radio_capability_id_t ue_radio_capability_id; ogs_nas_ue_radio_capability_id_deletion_indication_t ue_radio_capability_id_deletion_indication; + ogs_nas_wus_assistance_information_t negotiated_wus_assistance_information; + ogs_nas_nb_s1_drx_parameter_t negotiated_drx_parameter_in_nb_s1_mode; + ogs_nas_imsi_offset_t negotiated_imsi_offset; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; } ogs_nas_eps_attach_accept_t; @@ -305,25 +332,34 @@ typedef struct ogs_nas_eps_attach_complete_s { /******************************************************* * ATTACH REJECT ******************************************************/ -#define OGS_NAS_EPS_ATTACH_REJECT_ESM_MESSAGE_CONTAINER_PRESENT (1<<0) -#define OGS_NAS_EPS_ATTACH_REJECT_T3346_VALUE_PRESENT (1<<1) -#define OGS_NAS_EPS_ATTACH_REJECT_T3402_VALUE_PRESENT (1<<2) -#define OGS_NAS_EPS_ATTACH_REJECT_EXTENDED_EMM_CAUSE_PRESENT (1<<3) +#define OGS_NAS_EPS_ATTACH_REJECT_ESM_MESSAGE_CONTAINER_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_ATTACH_REJECT_T3346_VALUE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_ATTACH_REJECT_T3402_VALUE_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_ATTACH_REJECT_EXTENDED_EMM_CAUSE_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_ATTACH_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<6) #define OGS_NAS_EPS_ATTACH_REJECT_ESM_MESSAGE_CONTAINER_TYPE 0x78 #define OGS_NAS_EPS_ATTACH_REJECT_T3346_VALUE_TYPE 0x5F #define OGS_NAS_EPS_ATTACH_REJECT_T3402_VALUE_TYPE 0x16 #define OGS_NAS_EPS_ATTACH_REJECT_EXTENDED_EMM_CAUSE_TYPE 0xA0 +#define OGS_NAS_EPS_ATTACH_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE 0x1C +#define OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_EPS_ATTACH_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E typedef struct ogs_nas_eps_attach_reject_s { /* Mandatory fields */ ogs_nas_emm_cause_t emm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_esm_message_container_t esm_message_container; ogs_nas_gprs_timer_2_t t3346_value; ogs_nas_gprs_timer_2_t t3402_value; ogs_nas_extended_emm_cause_t extended_emm_cause; + ogs_nas_gprs_timer_3_t lower_bound_timer_value; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; } ogs_nas_eps_attach_reject_t; @@ -341,51 +377,66 @@ typedef struct ogs_nas_eps_detach_request_from_ue_s { /******************************************************* * DETACH REQUEST TO UE ******************************************************/ -#define OGS_NAS_EPS_DETACH_REQUEST_EMM_CAUSE_PRESENT (1<<0) +#define OGS_NAS_EPS_DETACH_REQUEST_EMM_CAUSE_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_DETACH_REQUEST_LOWER_BOUND_TIMER_VALUE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<3) #define OGS_NAS_EPS_DETACH_REQUEST_EMM_CAUSE_TYPE 0x53 +#define OGS_NAS_EPS_DETACH_REQUEST_LOWER_BOUND_TIMER_VALUE_TYPE 0x1C +#define OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_EPS_DETACH_REQUEST_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E typedef struct ogs_nas_eps_detach_request_to_ue_s { /* Mandatory fields */ ogs_nas_detach_type_t detach_type; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_emm_cause_t emm_cause; + ogs_nas_gprs_timer_3_t lower_bound_timer_value; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; } ogs_nas_eps_detach_request_to_ue_t; /******************************************************* * TRACKING AREA UPDATE REQUEST ******************************************************/ -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_NON_CURRENT_NATIVE_NAS_KEY_SET_IDENTIFIER_PRESENT (1<<0) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_GPRS_CIPHERING_KEY_SEQUENCE_NUMBER_PRESENT (1<<1) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_OLD_P_TMSI_SIGNATURE_PRESENT (1<<2) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_ADDITIONAL_GUTI_PRESENT (1<<3) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_NONCEUE_PRESENT (1<<4) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_NETWORK_CAPABILITY_PRESENT (1<<5) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_LAST_VISITED_REGISTERED_TAI_PRESENT (1<<6) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_DRX_PARAMETER_PRESENT (1<<7) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_RADIO_CAPABILITY_INFORMATION_UPDATE_NEEDED_PRESENT (1<<8) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_EPS_BEARER_CONTEXT_STATUS_PRESENT (1<<9) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_MS_NETWORK_CAPABILITY_PRESENT (1<<10) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_OLD_LOCATION_AREA_IDENTIFICATION_PRESENT (1<<11) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_TMSI_STATUS_PRESENT (1<<12) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_MOBILE_STATION_CLASSMARK_2_PRESENT (1<<13) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_MOBILE_STATION_CLASSMARK_3_PRESENT (1<<14) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_SUPPORTED_CODECS_PRESENT (1<<15) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_ADDITIONAL_UPDATE_TYPE_PRESENT (1<<16) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_PRESENT (1<<17) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_OLD_GUTI_TYPE_PRESENT (1<<18) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_DEVICE_PROPERTIES_PRESENT (1<<19) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_MS_NETWORK_FEATURE_SUPPORT_PRESENT (1<<20) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_TMSI_BASED_NRI_CONTAINER_PRESENT (1<<21) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_T3324_VALUE_PRESENT (1<<22) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_T3412_EXTENDED_VALUE_PRESENT (1<<23) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_EXTENDED_DRX_PARAMETERS_PRESENT (1<<24) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_ADDITIONAL_SECURITY_CAPABILITY_PRESENT (1<<25) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_STATUS_PRESENT (1<<26) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_ADDITIONAL_INFORMATION_REQUESTED_PRESENT (1<<27) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_N1_UE_NETWORK_CAPABILITY_PRESENT (1<<28) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_NON_CURRENT_NATIVE_NAS_KEY_SET_IDENTIFIER_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_GPRS_CIPHERING_KEY_SEQUENCE_NUMBER_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_OLD_P_TMSI_SIGNATURE_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_ADDITIONAL_GUTI_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_NONCEUE_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_NETWORK_CAPABILITY_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_LAST_VISITED_REGISTERED_TAI_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_DRX_PARAMETER_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_RADIO_CAPABILITY_INFORMATION_UPDATE_NEEDED_PRESENT ((uint64_t)1<<8) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_EPS_BEARER_CONTEXT_STATUS_PRESENT ((uint64_t)1<<9) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_MS_NETWORK_CAPABILITY_PRESENT ((uint64_t)1<<10) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_OLD_LOCATION_AREA_IDENTIFICATION_PRESENT ((uint64_t)1<<11) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_TMSI_STATUS_PRESENT ((uint64_t)1<<12) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_MOBILE_STATION_CLASSMARK_2_PRESENT ((uint64_t)1<<13) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_MOBILE_STATION_CLASSMARK_3_PRESENT ((uint64_t)1<<14) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_SUPPORTED_CODECS_PRESENT ((uint64_t)1<<15) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_ADDITIONAL_UPDATE_TYPE_PRESENT ((uint64_t)1<<16) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_PRESENT ((uint64_t)1<<17) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_OLD_GUTI_TYPE_PRESENT ((uint64_t)1<<18) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_DEVICE_PROPERTIES_PRESENT ((uint64_t)1<<19) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_MS_NETWORK_FEATURE_SUPPORT_PRESENT ((uint64_t)1<<20) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_TMSI_BASED_NRI_CONTAINER_PRESENT ((uint64_t)1<<21) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_T3324_VALUE_PRESENT ((uint64_t)1<<22) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_T3412_EXTENDED_VALUE_PRESENT ((uint64_t)1<<23) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_EXTENDED_DRX_PARAMETERS_PRESENT ((uint64_t)1<<24) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_ADDITIONAL_SECURITY_CAPABILITY_PRESENT ((uint64_t)1<<25) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_STATUS_PRESENT ((uint64_t)1<<26) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_ADDITIONAL_INFORMATION_REQUESTED_PRESENT ((uint64_t)1<<27) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_N1_UE_NETWORK_CAPABILITY_PRESENT ((uint64_t)1<<28) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_PRESENT ((uint64_t)1<<29) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_PRESENT ((uint64_t)1<<30) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT ((uint64_t)1<<31) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_IMSI_OFFSET_PRESENT ((uint64_t)1<<32) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_REQUEST_TYPE_PRESENT ((uint64_t)1<<33) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_PAGING_RESTRICTION_PRESENT ((uint64_t)1<<34) #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_NON_CURRENT_NATIVE_NAS_KEY_SET_IDENTIFIER_TYPE 0xB0 #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_GPRS_CIPHERING_KEY_SEQUENCE_NUMBER_TYPE 0x80 #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_OLD_P_TMSI_SIGNATURE_TYPE 0x19 @@ -415,6 +466,12 @@ typedef struct ogs_nas_eps_detach_request_to_ue_s { #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_STATUS_TYPE 0x6D #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_ADDITIONAL_INFORMATION_REQUESTED_TYPE 0x17 #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_N1_UE_NETWORK_CAPABILITY_TYPE 0x32 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_RADIO_CAPABILITY_ID_AVAILABILITY_TYPE 0x34 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_WUS_ASSISTANCE_INFORMATION_TYPE 0x35 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_DRX_PARAMETER_IN_NB_S1_MODE_TYPE 0x36 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_REQUESTED_IMSI_OFFSET_TYPE 0x38 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_UE_REQUEST_TYPE_TYPE 0x29 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REQUEST_PAGING_RESTRICTION_TYPE 0x28 typedef struct ogs_nas_eps_tracking_area_update_request_s { /* Mandatory fields */ @@ -422,7 +479,7 @@ typedef struct ogs_nas_eps_tracking_area_update_request_s { ogs_nas_eps_mobile_identity_t old_guti; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_key_set_identifier_t non_current_native_nas_key_set_identifier; ogs_nas_ciphering_key_sequence_number_t gprs_ciphering_key_sequence_number; ogs_nas_p_tmsi_signature_t old_p_tmsi_signature; @@ -452,39 +509,51 @@ typedef struct ogs_nas_eps_tracking_area_update_request_s { ogs_nas_ue_status_t ue_status; ogs_nas_additional_information_requested_t additional_information_requested; ogs_nas_n1_ue_network_capability_t n1_ue_network_capability; + ogs_nas_ue_radio_capability_id_availability_t ue_radio_capability_id_availability; + ogs_nas_wus_assistance_information_t requested_wus_assistance_information; + ogs_nas_nb_s1_drx_parameter_t drx_parameter_in_nb_s1_mode; + ogs_nas_imsi_offset_t requested_imsi_offset; + ogs_nas_ue_request_type_t ue_request_type; + ogs_nas_paging_restriction_t paging_restriction; } ogs_nas_eps_tracking_area_update_request_t; /******************************************************* * TRACKING AREA UPDATE ACCEPT ******************************************************/ -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3412_VALUE_PRESENT (1<<0) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_GUTI_PRESENT (1<<1) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_TAI_LIST_PRESENT (1<<2) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EPS_BEARER_CONTEXT_STATUS_PRESENT (1<<3) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_LOCATION_AREA_IDENTIFICATION_PRESENT (1<<4) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_MS_IDENTITY_PRESENT (1<<5) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EMM_CAUSE_PRESENT (1<<6) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3402_VALUE_PRESENT (1<<7) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3423_VALUE_PRESENT (1<<8) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EQUIVALENT_PLMNS_PRESENT (1<<9) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EMERGENCY_NUMBER_LIST_PRESENT (1<<10) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EPS_NETWORK_FEATURE_SUPPORT_PRESENT (1<<11) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_ADDITIONAL_UPDATE_RESULT_PRESENT (1<<12) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3412_EXTENDED_VALUE_PRESENT (1<<13) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3324_VALUE_PRESENT (1<<14) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EXTENDED_DRX_PARAMETERS_PRESENT (1<<15) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_HEADER_COMPRESSION_CONFIGURATION_STATUS_PRESENT (1<<16) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_DCN_ID_PRESENT (1<<17) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_SMS_SERVICES_STATUS_PRESENT (1<<18) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NON__NW_POLICIES_PRESENT (1<<19) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3448_VALUE_PRESENT (1<<20) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NETWORK_POLICY_PRESENT (1<<21) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3447_VALUE_PRESENT (1<<22) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EXTENDED_EMERGENCY_NUMBER_LIST_PRESENT (1<<23) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_CIPHERING_KEY_DATA_PRESENT (1<<24) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_UE_RADIO_CAPABILITY_ID_PRESENT (1<<25) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_PRESENT (1<<26) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3412_VALUE_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_GUTI_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_TAI_LIST_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EPS_BEARER_CONTEXT_STATUS_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_LOCATION_AREA_IDENTIFICATION_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_MS_IDENTITY_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EMM_CAUSE_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3402_VALUE_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3423_VALUE_PRESENT ((uint64_t)1<<8) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EQUIVALENT_PLMNS_PRESENT ((uint64_t)1<<9) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EMERGENCY_NUMBER_LIST_PRESENT ((uint64_t)1<<10) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EPS_NETWORK_FEATURE_SUPPORT_PRESENT ((uint64_t)1<<11) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_ADDITIONAL_UPDATE_RESULT_PRESENT ((uint64_t)1<<12) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3412_EXTENDED_VALUE_PRESENT ((uint64_t)1<<13) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3324_VALUE_PRESENT ((uint64_t)1<<14) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EXTENDED_DRX_PARAMETERS_PRESENT ((uint64_t)1<<15) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_HEADER_COMPRESSION_CONFIGURATION_STATUS_PRESENT ((uint64_t)1<<16) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_DCN_ID_PRESENT ((uint64_t)1<<17) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_SMS_SERVICES_STATUS_PRESENT ((uint64_t)1<<18) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NON__NW_POLICIES_PRESENT ((uint64_t)1<<19) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3448_VALUE_PRESENT ((uint64_t)1<<20) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NETWORK_POLICY_PRESENT ((uint64_t)1<<21) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3447_VALUE_PRESENT ((uint64_t)1<<22) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EXTENDED_EMERGENCY_NUMBER_LIST_PRESENT ((uint64_t)1<<23) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_CIPHERING_KEY_DATA_PRESENT ((uint64_t)1<<24) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_UE_RADIO_CAPABILITY_ID_PRESENT ((uint64_t)1<<25) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_PRESENT ((uint64_t)1<<26) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_PRESENT ((uint64_t)1<<27) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_PRESENT ((uint64_t)1<<28) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_IMSI_OFFSET_PRESENT ((uint64_t)1<<29) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EPS_ADDITIONAL_REQUEST_RESULT_PRESENT ((uint64_t)1<<30) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<31) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<32) #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_T3412_VALUE_TYPE 0x5A #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_GUTI_TYPE 0x50 #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_TAI_LIST_TYPE 0x54 @@ -512,13 +581,19 @@ typedef struct ogs_nas_eps_tracking_area_update_request_s { #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_CIPHERING_KEY_DATA_TYPE 0x7C #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_UE_RADIO_CAPABILITY_ID_TYPE 0x66 #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_TYPE 0xB0 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_WUS_ASSISTANCE_INFORMATION_TYPE 0x35 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_DRX_PARAMETER_IN_NB_S1_MODE_TYPE 0x36 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_NEGOTIATED_IMSI_OFFSET_TYPE 0x38 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_EPS_ADDITIONAL_REQUEST_RESULT_TYPE 0x37 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_ACCEPT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E typedef struct ogs_nas_eps_tracking_area_update_accept_s { /* Mandatory fields */ ogs_nas_eps_update_result_t eps_update_result; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_gprs_timer_t t3412_value; ogs_nas_eps_mobile_identity_t guti; ogs_nas_tracking_area_identity_list_t tai_list; @@ -546,37 +621,56 @@ typedef struct ogs_nas_eps_tracking_area_update_accept_s { ogs_nas_ciphering_key_data_t ciphering_key_data; ogs_nas_ue_radio_capability_id_t ue_radio_capability_id; ogs_nas_ue_radio_capability_id_deletion_indication_t ue_radio_capability_id_deletion_indication; + ogs_nas_wus_assistance_information_t negotiated_wus_assistance_information; + ogs_nas_nb_s1_drx_parameter_t negotiated_drx_parameter_in_nb_s1_mode; + ogs_nas_imsi_offset_t negotiated_imsi_offset; + ogs_nas_eps_additional_request_result_t eps_additional_request_result; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; } ogs_nas_eps_tracking_area_update_accept_t; /******************************************************* * TRACKING AREA UPDATE REJECT ******************************************************/ -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_T3346_VALUE_PRESENT (1<<0) -#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_EXTENDED_EMM_CAUSE_PRESENT (1<<1) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_T3346_VALUE_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_EXTENDED_EMM_CAUSE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<4) #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_T3346_VALUE_TYPE 0x5F #define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_EXTENDED_EMM_CAUSE_TYPE 0xA0 +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE 0x1C +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_EPS_TRACKING_AREA_UPDATE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E typedef struct ogs_nas_eps_tracking_area_update_reject_s { /* Mandatory fields */ ogs_nas_emm_cause_t emm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_gprs_timer_2_t t3346_value; ogs_nas_extended_emm_cause_t extended_emm_cause; + ogs_nas_gprs_timer_3_t lower_bound_timer_value; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; } ogs_nas_eps_tracking_area_update_reject_t; /******************************************************* * EXTENDED SERVICE REQUEST ******************************************************/ -#define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_CSFB_RESPONSE_PRESENT (1<<0) -#define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_EPS_BEARER_CONTEXT_STATUS_PRESENT (1<<1) -#define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_DEVICE_PROPERTIES_PRESENT (1<<2) +#define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_CSFB_RESPONSE_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_EPS_BEARER_CONTEXT_STATUS_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_DEVICE_PROPERTIES_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_UE_REQUEST_TYPE_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_PAGING_RESTRICTION_PRESENT ((uint64_t)1<<4) #define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_CSFB_RESPONSE_TYPE 0xB0 #define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_EPS_BEARER_CONTEXT_STATUS_TYPE 0x57 #define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_DEVICE_PROPERTIES_TYPE 0xD0 +#define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_UE_REQUEST_TYPE_TYPE 0x29 +#define OGS_NAS_EPS_EXTENDED_SERVICE_REQUEST_PAGING_RESTRICTION_TYPE 0x28 typedef struct ogs_nas_eps_extended_service_request_s { /* Mandatory fields */ @@ -584,10 +678,12 @@ typedef struct ogs_nas_eps_extended_service_request_s { ogs_nas_mobile_identity_t m_tmsi; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_csfb_response_t csfb_response; ogs_nas_eps_bearer_context_status_t eps_bearer_context_status; ogs_nas_device_properties_t device_properties; + ogs_nas_ue_request_type_t ue_request_type; + ogs_nas_paging_restriction_t paging_restriction; } ogs_nas_eps_extended_service_request_t; @@ -605,30 +701,41 @@ typedef struct ogs_nas_eps_service_request_s { /******************************************************* * SERVICE REJECT ******************************************************/ -#define OGS_NAS_EPS_SERVICE_REJECT_T3346_VALUE_PRESENT (1<<0) -#define OGS_NAS_EPS_SERVICE_REJECT_T3448_VALUE_PRESENT (1<<1) +#define OGS_NAS_EPS_SERVICE_REJECT_T3442_VALUE_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_SERVICE_REJECT_T3346_VALUE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_SERVICE_REJECT_T3448_VALUE_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_SERVICE_REJECT_T3442_VALUE_TYPE 0x5B #define OGS_NAS_EPS_SERVICE_REJECT_T3346_VALUE_TYPE 0x5F #define OGS_NAS_EPS_SERVICE_REJECT_T3448_VALUE_TYPE 0x6B +#define OGS_NAS_EPS_SERVICE_REJECT_LOWER_BOUND_TIMER_VALUE_TYPE 0x1C +#define OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FOR_ROAMING_TYPE 0x1D +#define OGS_NAS_EPS_SERVICE_REJECT_FORBIDDEN_TAI_FOR_THE_LIST_OF_FORBIDDEN_TRACKING_AREAS_FORREGIONAL_PROVISION_OF_SERVICE_TYPE 0x1E typedef struct ogs_nas_eps_service_reject_s { /* Mandatory fields */ ogs_nas_emm_cause_t emm_cause; - ogs_nas_gprs_timer_t t3442_value; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; + ogs_nas_gprs_timer_t t3442_value; ogs_nas_gprs_timer_2_t t3346_value; ogs_nas_gprs_timer_2_t t3448_value; + ogs_nas_gprs_timer_3_t lower_bound_timer_value; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_for_roaming; + ogs_nas_tracking_area_identity_list_t forbidden_tai_for_the_list_of_forbidden_tracking_areas_forregional_provision_of_service; } ogs_nas_eps_service_reject_t; /******************************************************* * GUTI REALLOCATION COMMAND ******************************************************/ -#define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_TAI_LIST_PRESENT (1<<0) -#define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_DCN_ID_PRESENT (1<<1) -#define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_UE_RADIO_CAPABILITY_ID_PRESENT (1<<2) -#define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_PRESENT (1<<3) +#define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_TAI_LIST_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_DCN_ID_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_UE_RADIO_CAPABILITY_ID_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_UE_RADIO_CAPABILITY_ID_DELETION_INDICATION_PRESENT ((uint64_t)1<<3) #define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_TAI_LIST_TYPE 0x54 #define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_DCN_ID_TYPE 0x65 #define OGS_NAS_EPS_GUTI_REALLOCATION_COMMAND_UE_RADIO_CAPABILITY_ID_TYPE 0x66 @@ -639,7 +746,7 @@ typedef struct ogs_nas_eps_guti_reallocation_command_s { ogs_nas_eps_mobile_identity_t guti; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_tracking_area_identity_list_t tai_list; ogs_nas_dcn_id_t dcn_id; ogs_nas_ue_radio_capability_id_t ue_radio_capability_id; @@ -692,7 +799,7 @@ typedef struct ogs_nas_eps_identity_response_s { /******************************************************* * AUTHENTICATION FAILURE ******************************************************/ -#define OGS_NAS_EPS_AUTHENTICATION_FAILURE_AUTHENTICATION_FAILURE_PARAMETER_PRESENT (1<<0) +#define OGS_NAS_EPS_AUTHENTICATION_FAILURE_AUTHENTICATION_FAILURE_PARAMETER_PRESENT ((uint64_t)1<<0) #define OGS_NAS_EPS_AUTHENTICATION_FAILURE_AUTHENTICATION_FAILURE_PARAMETER_TYPE 0x30 typedef struct ogs_nas_eps_authentication_failure_s { @@ -700,7 +807,7 @@ typedef struct ogs_nas_eps_authentication_failure_s { ogs_nas_emm_cause_t emm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_authentication_failure_parameter_t authentication_failure_parameter; } ogs_nas_eps_authentication_failure_t; @@ -708,18 +815,18 @@ typedef struct ogs_nas_eps_authentication_failure_s { /******************************************************* * SECURITY MODE COMMAND ******************************************************/ -#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_IMEISV_REQUEST_PRESENT (1<<0) -#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_REPLAYED_NONCEUE_PRESENT (1<<1) -#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_NONCEMME_PRESENT (1<<2) -#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_HASHMME_PRESENT (1<<3) -#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_REPLAYED_UE_ADDITIONAL_SECURITY_CAPABILITY_PRESENT (1<<4) -#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_UE_RADIO_CAPABILITY_ID_REQUEST_PRESENT (1<<5) +#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_IMEISV_REQUEST_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_REPLAYED_NONCEUE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_NONCEMME_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_HASHMME_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_REPLAYED_UE_ADDITIONAL_SECURITY_CAPABILITY_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_UE_RADIO_CAPABILITY_ID_REQUEST_PRESENT ((uint64_t)1<<5) #define OGS_NAS_EPS_SECURITY_MODE_COMMAND_IMEISV_REQUEST_TYPE 0xC0 #define OGS_NAS_EPS_SECURITY_MODE_COMMAND_REPLAYED_NONCEUE_TYPE 0x55 #define OGS_NAS_EPS_SECURITY_MODE_COMMAND_NONCEMME_TYPE 0x56 #define OGS_NAS_EPS_SECURITY_MODE_COMMAND_HASHMME_TYPE 0x4F #define OGS_NAS_EPS_SECURITY_MODE_COMMAND_REPLAYED_UE_ADDITIONAL_SECURITY_CAPABILITY_TYPE 0x6F -#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_UE_RADIO_CAPABILITY_ID_REQUEST_TYPE 0xD0 +#define OGS_NAS_EPS_SECURITY_MODE_COMMAND_UE_RADIO_CAPABILITY_ID_REQUEST_TYPE 0x37 typedef struct ogs_nas_eps_security_mode_command_s { /* Mandatory fields */ @@ -728,7 +835,7 @@ typedef struct ogs_nas_eps_security_mode_command_s { ogs_nas_ue_security_capability_t replayed_ue_security_capabilities; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_imeisv_request_t imeisv_request; ogs_nas_nonce_t replayed_nonceue; ogs_nas_nonce_t noncemme; @@ -741,9 +848,9 @@ typedef struct ogs_nas_eps_security_mode_command_s { /******************************************************* * SECURITY MODE COMPLETE ******************************************************/ -#define OGS_NAS_EPS_SECURITY_MODE_COMPLETE_IMEISV_PRESENT (1<<0) -#define OGS_NAS_EPS_SECURITY_MODE_COMPLETE_REPLAYED_NAS_MESSAGE_CONTAINER_PRESENT (1<<1) -#define OGS_NAS_EPS_SECURITY_MODE_COMPLETE_UE_RADIO_CAPABILITY_ID_PRESENT (1<<2) +#define OGS_NAS_EPS_SECURITY_MODE_COMPLETE_IMEISV_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_SECURITY_MODE_COMPLETE_REPLAYED_NAS_MESSAGE_CONTAINER_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_SECURITY_MODE_COMPLETE_UE_RADIO_CAPABILITY_ID_PRESENT ((uint64_t)1<<2) #define OGS_NAS_EPS_SECURITY_MODE_COMPLETE_IMEISV_TYPE 0x23 #define OGS_NAS_EPS_SECURITY_MODE_COMPLETE_REPLAYED_NAS_MESSAGE_CONTAINER_TYPE 0x79 #define OGS_NAS_EPS_SECURITY_MODE_COMPLETE_UE_RADIO_CAPABILITY_ID_TYPE 0x66 @@ -751,7 +858,7 @@ typedef struct ogs_nas_eps_security_mode_command_s { typedef struct ogs_nas_eps_security_mode_complete_s { /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_mobile_identity_t imeisv; ogs_nas_replayed_nas_message_container_t replayed_nas_message_container; ogs_nas_ue_radio_capability_id_t ue_radio_capability_id; @@ -781,11 +888,11 @@ typedef struct ogs_nas_eps_emm_status_s { /******************************************************* * EMM INFORMATION ******************************************************/ -#define OGS_NAS_EPS_EMM_INFORMATION_FULL_NAME_FOR_NETWORK_PRESENT (1<<0) -#define OGS_NAS_EPS_EMM_INFORMATION_SHORT_NAME_FOR_NETWORK_PRESENT (1<<1) -#define OGS_NAS_EPS_EMM_INFORMATION_LOCAL_TIME_ZONE_PRESENT (1<<2) -#define OGS_NAS_EPS_EMM_INFORMATION_UNIVERSAL_TIME_AND_LOCAL_TIME_ZONE_PRESENT (1<<3) -#define OGS_NAS_EPS_EMM_INFORMATION_NETWORK_DAYLIGHT_SAVING_TIME_PRESENT (1<<4) +#define OGS_NAS_EPS_EMM_INFORMATION_FULL_NAME_FOR_NETWORK_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_EMM_INFORMATION_SHORT_NAME_FOR_NETWORK_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_EMM_INFORMATION_LOCAL_TIME_ZONE_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_EMM_INFORMATION_UNIVERSAL_TIME_AND_LOCAL_TIME_ZONE_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_EMM_INFORMATION_NETWORK_DAYLIGHT_SAVING_TIME_PRESENT ((uint64_t)1<<4) #define OGS_NAS_EPS_EMM_INFORMATION_FULL_NAME_FOR_NETWORK_TYPE 0x43 #define OGS_NAS_EPS_EMM_INFORMATION_SHORT_NAME_FOR_NETWORK_TYPE 0x45 #define OGS_NAS_EPS_EMM_INFORMATION_LOCAL_TIME_ZONE_TYPE 0x46 @@ -795,7 +902,7 @@ typedef struct ogs_nas_eps_emm_status_s { typedef struct ogs_nas_eps_emm_information_s { /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_network_name_t full_name_for_network; ogs_nas_network_name_t short_name_for_network; ogs_nas_time_zone_t local_time_zone; @@ -827,10 +934,10 @@ typedef struct ogs_nas_eps_uplink_nas_transport_s { /******************************************************* * CS SERVICE NOTIFICATION ******************************************************/ -#define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_CLI_PRESENT (1<<0) -#define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_SS_CODE_PRESENT (1<<1) -#define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_LCS_INDICATOR_PRESENT (1<<2) -#define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_LCS_CLIENT_IDENTITY_PRESENT (1<<3) +#define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_CLI_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_SS_CODE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_LCS_INDICATOR_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_LCS_CLIENT_IDENTITY_PRESENT ((uint64_t)1<<3) #define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_CLI_TYPE 0x60 #define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_SS_CODE_TYPE 0x61 #define OGS_NAS_EPS_CS_SERVICE_NOTIFICATION_LCS_INDICATOR_TYPE 0x62 @@ -841,7 +948,7 @@ typedef struct ogs_nas_eps_cs_service_notification_s { ogs_nas_paging_identity_t paging_identity; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_cli_t cli; ogs_nas_ss_code_t ss_code; ogs_nas_lcs_indicator_t lcs_indicator; @@ -852,7 +959,7 @@ typedef struct ogs_nas_eps_cs_service_notification_s { /******************************************************* * UPLINK GENERIC NAS TRANSPORT ******************************************************/ -#define OGS_NAS_EPS_UPLINK_GENERIC_NAS_TRANSPORT_ADDITIONAL_INFORMATION_PRESENT (1<<0) +#define OGS_NAS_EPS_UPLINK_GENERIC_NAS_TRANSPORT_ADDITIONAL_INFORMATION_PRESENT ((uint64_t)1<<0) #define OGS_NAS_EPS_UPLINK_GENERIC_NAS_TRANSPORT_ADDITIONAL_INFORMATION_TYPE 0x65 typedef struct ogs_nas_eps_uplink_generic_nas_transport_s { @@ -861,7 +968,7 @@ typedef struct ogs_nas_eps_uplink_generic_nas_transport_s { ogs_nas_generic_message_container_t generic_message_container; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_additional_information_t additional_information; } ogs_nas_eps_uplink_generic_nas_transport_t; @@ -869,7 +976,7 @@ typedef struct ogs_nas_eps_uplink_generic_nas_transport_s { /******************************************************* * DOWNLINK GENERIC NAS TRANSPORT ******************************************************/ -#define OGS_NAS_EPS_DOWNLINK_GENERIC_NAS_TRANSPORT_ADDITIONAL_INFORMATION_PRESENT (1<<0) +#define OGS_NAS_EPS_DOWNLINK_GENERIC_NAS_TRANSPORT_ADDITIONAL_INFORMATION_PRESENT ((uint64_t)1<<0) #define OGS_NAS_EPS_DOWNLINK_GENERIC_NAS_TRANSPORT_ADDITIONAL_INFORMATION_TYPE 0x65 typedef struct ogs_nas_eps_downlink_generic_nas_transport_s { @@ -878,7 +985,7 @@ typedef struct ogs_nas_eps_downlink_generic_nas_transport_s { ogs_nas_generic_message_container_t generic_message_container; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_additional_information_t additional_information; } ogs_nas_eps_downlink_generic_nas_transport_t; @@ -886,22 +993,22 @@ typedef struct ogs_nas_eps_downlink_generic_nas_transport_s { /******************************************************* * ACTIVATE DEFAULT EPS BEARER CONTEXT REQUEST ******************************************************/ -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_TRANSACTION_IDENTIFIER_PRESENT (1<<0) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_QOS_PRESENT (1<<1) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_LLC_SAPI_PRESENT (1<<2) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_RADIO_PRIORITY_PRESENT (1<<3) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_PACKET_FLOW_IDENTIFIER_PRESENT (1<<4) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_APN_AMBR_PRESENT (1<<5) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT (1<<6) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<7) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_CONNECTIVITY_TYPE_PRESENT (1<<8) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_WLAN_OFFLOAD_INDICATION_PRESENT (1<<9) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_NBIFOM_CONTAINER_PRESENT (1<<10) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT (1<<11) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_CONTROL_PLANE_ONLY_INDICATION_PRESENT (1<<12) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<13) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_SERVING_PLMN_RATE_CONTROL_PRESENT (1<<14) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_APN_AMBR_PRESENT (1<<15) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_TRANSACTION_IDENTIFIER_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_QOS_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_LLC_SAPI_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_RADIO_PRIORITY_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_PACKET_FLOW_IDENTIFIER_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_APN_AMBR_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_CONNECTIVITY_TYPE_PRESENT ((uint64_t)1<<8) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_WLAN_OFFLOAD_INDICATION_PRESENT ((uint64_t)1<<9) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<10) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<11) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_CONTROL_PLANE_ONLY_INDICATION_PRESENT ((uint64_t)1<<12) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<13) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_SERVING_PLMN_RATE_CONTROL_PRESENT ((uint64_t)1<<14) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_APN_AMBR_PRESENT ((uint64_t)1<<15) #define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_TRANSACTION_IDENTIFIER_TYPE 0x5D #define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_QOS_TYPE 0x30 #define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_LLC_SAPI_TYPE 0x32 @@ -926,7 +1033,7 @@ typedef struct ogs_nas_eps_activate_default_eps_bearer_context_request_s { ogs_nas_pdn_address_t pdn_address; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_transaction_identifier_t transaction_identifier; ogs_nas_quality_of_service_t negotiated_qos; ogs_nas_llc_service_access_point_identifier_t negotiated_llc_sapi; @@ -949,15 +1056,15 @@ typedef struct ogs_nas_eps_activate_default_eps_bearer_context_request_s { /******************************************************* * ACTIVATE DEFAULT EPS BEARER CONTEXT ACCEPT ******************************************************/ -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<1) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<1) #define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B typedef struct ogs_nas_eps_activate_default_eps_bearer_context_accept_s { /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; } ogs_nas_eps_activate_default_eps_bearer_context_accept_t; @@ -966,8 +1073,8 @@ typedef struct ogs_nas_eps_activate_default_eps_bearer_context_accept_s { /******************************************************* * ACTIVATE DEFAULT EPS BEARER CONTEXT REJECT ******************************************************/ -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<1) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<1) #define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B @@ -976,7 +1083,7 @@ typedef struct ogs_nas_eps_activate_default_eps_bearer_context_reject_s { ogs_nas_esm_cause_t esm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; } ogs_nas_eps_activate_default_eps_bearer_context_reject_t; @@ -985,16 +1092,16 @@ typedef struct ogs_nas_eps_activate_default_eps_bearer_context_reject_s { /******************************************************* * ACTIVATE DEDICATED EPS BEARER CONTEXT REQUEST ******************************************************/ -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_TRANSACTION_IDENTIFIER_PRESENT (1<<0) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_QOS_PRESENT (1<<1) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_LLC_SAPI_PRESENT (1<<2) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_RADIO_PRIORITY_PRESENT (1<<3) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_PACKET_FLOW_IDENTIFIER_PRESENT (1<<4) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<5) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_WLAN_OFFLOAD_INDICATION_PRESENT (1<<6) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_NBIFOM_CONTAINER_PRESENT (1<<7) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<8) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_EPS_QOS_PRESENT (1<<9) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_TRANSACTION_IDENTIFIER_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_QOS_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_LLC_SAPI_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_RADIO_PRIORITY_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_PACKET_FLOW_IDENTIFIER_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_WLAN_OFFLOAD_INDICATION_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<8) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_EPS_QOS_PRESENT ((uint64_t)1<<9) #define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_TRANSACTION_IDENTIFIER_TYPE 0x5D #define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_QOS_TYPE 0x30 #define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_LLC_SAPI_TYPE 0x32 @@ -1013,7 +1120,7 @@ typedef struct ogs_nas_eps_activate_dedicated_eps_bearer_context_request_s { ogs_nas_traffic_flow_template_t tft; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_transaction_identifier_t transaction_identifier; ogs_nas_quality_of_service_t negotiated_qos; ogs_nas_llc_service_access_point_identifier_t negotiated_llc_sapi; @@ -1030,9 +1137,9 @@ typedef struct ogs_nas_eps_activate_dedicated_eps_bearer_context_request_s { /******************************************************* * ACTIVATE DEDICATED EPS BEARER CONTEXT ACCEPT ******************************************************/ -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_NBIFOM_CONTAINER_PRESENT (1<<1) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<2) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<2) #define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_NBIFOM_CONTAINER_TYPE 0x33 #define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B @@ -1040,7 +1147,7 @@ typedef struct ogs_nas_eps_activate_dedicated_eps_bearer_context_request_s { typedef struct ogs_nas_eps_activate_dedicated_eps_bearer_context_accept_s { /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_nbifom_container_t nbifom_container; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; @@ -1050,9 +1157,9 @@ typedef struct ogs_nas_eps_activate_dedicated_eps_bearer_context_accept_s { /******************************************************* * ACTIVATE DEDICATED EPS BEARER CONTEXT REJECT ******************************************************/ -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT_NBIFOM_CONTAINER_PRESENT (1<<1) -#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<2) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<2) #define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT_NBIFOM_CONTAINER_TYPE 0x33 #define OGS_NAS_EPS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B @@ -1062,7 +1169,7 @@ typedef struct ogs_nas_eps_activate_dedicated_eps_bearer_context_reject_s { ogs_nas_esm_cause_t esm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_nbifom_container_t nbifom_container; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; @@ -1072,20 +1179,20 @@ typedef struct ogs_nas_eps_activate_dedicated_eps_bearer_context_reject_s { /******************************************************* * MODIFY EPS BEARER CONTEXT REQUEST ******************************************************/ -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_NEW_EPS_QOS_PRESENT (1<<0) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_TFT_PRESENT (1<<1) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_NEW_QOS_PRESENT (1<<2) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_LLC_SAPI_PRESENT (1<<3) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_RADIO_PRIORITY_PRESENT (1<<4) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_PACKET_FLOW_IDENTIFIER_PRESENT (1<<5) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_APN_AMBR_PRESENT (1<<6) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<7) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_WLAN_OFFLOAD_INDICATION_PRESENT (1<<8) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_NBIFOM_CONTAINER_PRESENT (1<<9) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT (1<<10) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<11) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_APN_AMBR_PRESENT (1<<12) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_EPS_QOS_PRESENT (1<<13) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_NEW_EPS_QOS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_TFT_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_NEW_QOS_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_NEGOTIATED_LLC_SAPI_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_RADIO_PRIORITY_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_PACKET_FLOW_IDENTIFIER_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_APN_AMBR_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<7) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_WLAN_OFFLOAD_INDICATION_PRESENT ((uint64_t)1<<8) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<9) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<10) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<11) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_APN_AMBR_PRESENT ((uint64_t)1<<12) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_EPS_QOS_PRESENT ((uint64_t)1<<13) #define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_NEW_EPS_QOS_TYPE 0x5B #define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_TFT_TYPE 0x36 #define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REQUEST_NEW_QOS_TYPE 0x30 @@ -1104,7 +1211,7 @@ typedef struct ogs_nas_eps_activate_dedicated_eps_bearer_context_reject_s { typedef struct ogs_nas_eps_modify_eps_bearer_context_request_s { /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_eps_quality_of_service_t new_eps_qos; ogs_nas_traffic_flow_template_t tft; ogs_nas_quality_of_service_t new_qos; @@ -1125,9 +1232,9 @@ typedef struct ogs_nas_eps_modify_eps_bearer_context_request_s { /******************************************************* * MODIFY EPS BEARER CONTEXT ACCEPT ******************************************************/ -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT_NBIFOM_CONTAINER_PRESENT (1<<1) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<2) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<2) #define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT_NBIFOM_CONTAINER_TYPE 0x33 #define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B @@ -1135,7 +1242,7 @@ typedef struct ogs_nas_eps_modify_eps_bearer_context_request_s { typedef struct ogs_nas_eps_modify_eps_bearer_context_accept_s { /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_nbifom_container_t nbifom_container; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; @@ -1145,9 +1252,9 @@ typedef struct ogs_nas_eps_modify_eps_bearer_context_accept_s { /******************************************************* * MODIFY EPS BEARER CONTEXT REJECT ******************************************************/ -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REJECT_NBIFOM_CONTAINER_PRESENT (1<<1) -#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<2) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REJECT_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<2) #define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REJECT_NBIFOM_CONTAINER_TYPE 0x33 #define OGS_NAS_EPS_MODIFY_EPS_BEARER_CONTEXT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B @@ -1157,7 +1264,7 @@ typedef struct ogs_nas_eps_modify_eps_bearer_context_reject_s { ogs_nas_esm_cause_t esm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_nbifom_container_t nbifom_container; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; @@ -1167,11 +1274,11 @@ typedef struct ogs_nas_eps_modify_eps_bearer_context_reject_s { /******************************************************* * DEACTIVATE EPS BEARER CONTEXT REQUEST ******************************************************/ -#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_T3396_VALUE_PRESENT (1<<1) -#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_WLAN_OFFLOAD_INDICATION_PRESENT (1<<2) -#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_NBIFOM_CONTAINER_PRESENT (1<<3) -#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<4) +#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_T3396_VALUE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_WLAN_OFFLOAD_INDICATION_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<4) #define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_T3396_VALUE_TYPE 0x37 #define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST_WLAN_OFFLOAD_INDICATION_TYPE 0xC0 @@ -1183,7 +1290,7 @@ typedef struct ogs_nas_eps_deactivate_eps_bearer_context_request_s { ogs_nas_esm_cause_t esm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_gprs_timer_3_t t3396_value; ogs_nas_wlan_offload_acceptability_t wlan_offload_indication; @@ -1195,15 +1302,15 @@ typedef struct ogs_nas_eps_deactivate_eps_bearer_context_request_s { /******************************************************* * DEACTIVATE EPS BEARER CONTEXT ACCEPT ******************************************************/ -#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<1) +#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<1) #define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B typedef struct ogs_nas_eps_deactivate_eps_bearer_context_accept_s { /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; } ogs_nas_eps_deactivate_eps_bearer_context_accept_t; @@ -1212,13 +1319,13 @@ typedef struct ogs_nas_eps_deactivate_eps_bearer_context_accept_s { /******************************************************* * PDN CONNECTIVITY REQUEST ******************************************************/ -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_ESM_INFORMATION_TRANSFER_FLAG_PRESENT (1<<0) -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_ACCESS_POINT_NAME_PRESENT (1<<1) -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<2) -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_DEVICE_PROPERTIES_PRESENT (1<<3) -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_NBIFOM_CONTAINER_PRESENT (1<<4) -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT (1<<5) -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<6) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_ESM_INFORMATION_TRANSFER_FLAG_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_ACCESS_POINT_NAME_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_DEVICE_PROPERTIES_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<6) #define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_ESM_INFORMATION_TRANSFER_FLAG_TYPE 0xD0 #define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_ACCESS_POINT_NAME_TYPE 0x28 #define OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 @@ -1232,7 +1339,7 @@ typedef struct ogs_nas_eps_pdn_connectivity_request_s { ogs_nas_request_type_t request_type; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_esm_information_transfer_flag_t esm_information_transfer_flag; ogs_nas_access_point_name_t access_point_name; ogs_nas_protocol_configuration_options_t protocol_configuration_options; @@ -1246,11 +1353,11 @@ typedef struct ogs_nas_eps_pdn_connectivity_request_s { /******************************************************* * PDN CONNECTIVITY REJECT ******************************************************/ -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_BACK_OFF_TIMER_VALUE_PRESENT (1<<1) -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_RE_ATTEMPT_INDICATOR_PRESENT (1<<2) -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_NBIFOM_CONTAINER_PRESENT (1<<3) -#define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<4) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_BACK_OFF_TIMER_VALUE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<4) #define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_BACK_OFF_TIMER_VALUE_TYPE 0x37 #define OGS_NAS_EPS_PDN_CONNECTIVITY_REJECT_RE_ATTEMPT_INDICATOR_TYPE 0x6B @@ -1262,7 +1369,7 @@ typedef struct ogs_nas_eps_pdn_connectivity_reject_s { ogs_nas_esm_cause_t esm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_gprs_timer_3_t back_off_timer_value; ogs_nas_re_attempt_indicator_t re_attempt_indicator; @@ -1274,8 +1381,8 @@ typedef struct ogs_nas_eps_pdn_connectivity_reject_s { /******************************************************* * PDN DISCONNECT REQUEST ******************************************************/ -#define OGS_NAS_EPS_PDN_DISCONNECT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_PDN_DISCONNECT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<1) +#define OGS_NAS_EPS_PDN_DISCONNECT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_PDN_DISCONNECT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<1) #define OGS_NAS_EPS_PDN_DISCONNECT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_PDN_DISCONNECT_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B @@ -1284,7 +1391,7 @@ typedef struct ogs_nas_eps_pdn_disconnect_request_s { ogs_nas_linked_eps_bearer_identity_t linked_eps_bearer_identity; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; } ogs_nas_eps_pdn_disconnect_request_t; @@ -1293,8 +1400,8 @@ typedef struct ogs_nas_eps_pdn_disconnect_request_s { /******************************************************* * PDN DISCONNECT REJECT ******************************************************/ -#define OGS_NAS_EPS_PDN_DISCONNECT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_PDN_DISCONNECT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<1) +#define OGS_NAS_EPS_PDN_DISCONNECT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_PDN_DISCONNECT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<1) #define OGS_NAS_EPS_PDN_DISCONNECT_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_PDN_DISCONNECT_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B @@ -1303,7 +1410,7 @@ typedef struct ogs_nas_eps_pdn_disconnect_reject_s { ogs_nas_esm_cause_t esm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; } ogs_nas_eps_pdn_disconnect_reject_t; @@ -1312,11 +1419,11 @@ typedef struct ogs_nas_eps_pdn_disconnect_reject_s { /******************************************************* * BEARER RESOURCE ALLOCATION REQUEST ******************************************************/ -#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_DEVICE_PROPERTIES_PRESENT (1<<1) -#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_NBIFOM_CONTAINER_PRESENT (1<<2) -#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<3) -#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_EXTENDED_EPS_QOS_PRESENT (1<<4) +#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_DEVICE_PROPERTIES_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_EXTENDED_EPS_QOS_PRESENT ((uint64_t)1<<4) #define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_DEVICE_PROPERTIES_TYPE 0xC0 #define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST_NBIFOM_CONTAINER_TYPE 0x33 @@ -1330,7 +1437,7 @@ typedef struct ogs_nas_eps_bearer_resource_allocation_request_s { ogs_nas_eps_quality_of_service_t required_traffic_flow_qos; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_device_properties_t device_properties; ogs_nas_nbifom_container_t nbifom_container; @@ -1342,11 +1449,11 @@ typedef struct ogs_nas_eps_bearer_resource_allocation_request_s { /******************************************************* * BEARER RESOURCE ALLOCATION REJECT ******************************************************/ -#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_BACK_OFF_TIMER_VALUE_PRESENT (1<<1) -#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_RE_ATTEMPT_INDICATOR_PRESENT (1<<2) -#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_NBIFOM_CONTAINER_PRESENT (1<<3) -#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<4) +#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_BACK_OFF_TIMER_VALUE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<4) #define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_BACK_OFF_TIMER_VALUE_TYPE 0x37 #define OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT_RE_ATTEMPT_INDICATOR_TYPE 0x6B @@ -1358,7 +1465,7 @@ typedef struct ogs_nas_eps_bearer_resource_allocation_reject_s { ogs_nas_esm_cause_t esm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_gprs_timer_3_t back_off_timer_value; ogs_nas_re_attempt_indicator_t re_attempt_indicator; @@ -1370,14 +1477,14 @@ typedef struct ogs_nas_eps_bearer_resource_allocation_reject_s { /******************************************************* * BEARER RESOURCE MODIFICATION REQUEST ******************************************************/ -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_REQUIRED_TRAFFIC_FLOW_QOS_PRESENT (1<<0) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_ESM_CAUSE_PRESENT (1<<1) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<2) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_DEVICE_PROPERTIES_PRESENT (1<<3) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_NBIFOM_CONTAINER_PRESENT (1<<4) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT (1<<5) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<6) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_EXTENDED_EPS_QOS_PRESENT (1<<7) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_REQUIRED_TRAFFIC_FLOW_QOS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_ESM_CAUSE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_DEVICE_PROPERTIES_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<4) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_HEADER_COMPRESSION_CONFIGURATION_PRESENT ((uint64_t)1<<5) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<6) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_EXTENDED_EPS_QOS_PRESENT ((uint64_t)1<<7) #define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_REQUIRED_TRAFFIC_FLOW_QOS_TYPE 0x5B #define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_ESM_CAUSE_TYPE 0x58 #define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 @@ -1393,7 +1500,7 @@ typedef struct ogs_nas_eps_bearer_resource_modification_request_s { ogs_nas_traffic_flow_aggregate_description_t traffic_flow_aggregate; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_eps_quality_of_service_t required_traffic_flow_qos; ogs_nas_esm_cause_t esm_cause; ogs_nas_protocol_configuration_options_t protocol_configuration_options; @@ -1408,11 +1515,11 @@ typedef struct ogs_nas_eps_bearer_resource_modification_request_s { /******************************************************* * BEARER RESOURCE MODIFICATION REJECT ******************************************************/ -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<0) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_BACK_OFF_TIMER_VALUE_PRESENT (1<<1) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_RE_ATTEMPT_INDICATOR_PRESENT (1<<2) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_NBIFOM_CONTAINER_PRESENT (1<<3) -#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<4) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_BACK_OFF_TIMER_VALUE_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_RE_ATTEMPT_INDICATOR_PRESENT ((uint64_t)1<<2) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_NBIFOM_CONTAINER_PRESENT ((uint64_t)1<<3) +#define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<4) #define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_BACK_OFF_TIMER_VALUE_TYPE 0x37 #define OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT_RE_ATTEMPT_INDICATOR_TYPE 0x6B @@ -1424,7 +1531,7 @@ typedef struct ogs_nas_eps_bearer_resource_modification_reject_s { ogs_nas_esm_cause_t esm_cause; /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_gprs_timer_3_t back_off_timer_value; ogs_nas_re_attempt_indicator_t re_attempt_indicator; @@ -1436,9 +1543,9 @@ typedef struct ogs_nas_eps_bearer_resource_modification_reject_s { /******************************************************* * ESM INFORMATION RESPONSE ******************************************************/ -#define OGS_NAS_EPS_ESM_INFORMATION_RESPONSE_ACCESS_POINT_NAME_PRESENT (1<<0) -#define OGS_NAS_EPS_ESM_INFORMATION_RESPONSE_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<1) -#define OGS_NAS_EPS_ESM_INFORMATION_RESPONSE_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT (1<<2) +#define OGS_NAS_EPS_ESM_INFORMATION_RESPONSE_ACCESS_POINT_NAME_PRESENT ((uint64_t)1<<0) +#define OGS_NAS_EPS_ESM_INFORMATION_RESPONSE_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<1) +#define OGS_NAS_EPS_ESM_INFORMATION_RESPONSE_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT ((uint64_t)1<<2) #define OGS_NAS_EPS_ESM_INFORMATION_RESPONSE_ACCESS_POINT_NAME_TYPE 0x28 #define OGS_NAS_EPS_ESM_INFORMATION_RESPONSE_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x27 #define OGS_NAS_EPS_ESM_INFORMATION_RESPONSE_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS_TYPE 0x7B @@ -1446,7 +1553,7 @@ typedef struct ogs_nas_eps_bearer_resource_modification_reject_s { typedef struct ogs_nas_eps_esm_information_response_s { /* Optional fields */ - uint32_t presencemask; + uint64_t presencemask; ogs_nas_access_point_name_t access_point_name; ogs_nas_protocol_configuration_options_t protocol_configuration_options; ogs_nas_extended_protocol_configuration_options_t extended_protocol_configuration_options; diff --git a/lib/nas/eps/support/24301-g40.docx b/lib/nas/eps/support/24301-g40.docx deleted file mode 100644 index 8b2bd9d70..000000000 Binary files a/lib/nas/eps/support/24301-g40.docx and /dev/null differ diff --git a/lib/nas/eps/support/24301-h90.docx b/lib/nas/eps/support/24301-h90.docx new file mode 100644 index 000000000..42b21486a Binary files /dev/null and b/lib/nas/eps/support/24301-h90.docx differ diff --git a/lib/nas/eps/support/README.md b/lib/nas/eps/support/README.md index 18f5dd9ab..9498909ec 100644 --- a/lib/nas/eps/support/README.md +++ b/lib/nas/eps/support/README.md @@ -4,9 +4,13 @@ user@host ~/Documents/git/open5gs/lib/nas/eps/support$ \ sudo pip3 install python-docx * Change the format of standard specification - from 24301-d80.doc to 24301-d80.docx + from 24301-h90.doc to 24301-h90.docx using Microsoft Office 2007+ +* Adjust table cell in 24301-h90.docx + * Generate Message support files user@host ~/Documents/git/open5gs/lib/nas/eps/support$ \ - python3 nas-message.py -f 24301-g40.docx -o .. + python3 nas-message.py -f 24301-h90.docx -o .. + +* Add new structure to the types.h diff --git a/lib/nas/eps/support/cache/nas-msg-65.py b/lib/nas/eps/support/cache/nas-msg-65.py index 54913eb0d..3349c50b2 100644 --- a/lib/nas/eps/support/cache/nas-msg-65.py +++ b/lib/nas/eps/support/cache/nas-msg-65.py @@ -26,4 +26,8 @@ ies.append({ "iei" : "6F", "value" : "UE additional security capability", "type" ies.append({ "iei" : "6D", "value" : "UE status", "type" : "UE status", "reference" : "9.9.3.54", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "17", "value" : "Additional information requested", "type" : "Additional information requested", "reference" : "9.9.3.55", "presence" : "O", "format" : "TV", "length" : "2"}) ies.append({ "iei" : "32", "value" : "N1 UE network capability", "type" : "N1 UE network capability", "reference" : "9.9.3.57", "presence" : "O", "format" : "TLV", "length" : "3-15"}) +ies.append({ "iei" : "34", "value" : "UE radio capability ID availability", "type" : "UE radio capability ID availability", "reference" : "9.9.3.58", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "35", "value" : "Requested WUS assistance information", "type" : "WUS assistance information", "reference" : "9.9.3.62", "presence" : "O", "format" : "TLV", "length" : "3-n"}) +ies.append({ "iei" : "36", "value" : "DRX parameter in NB-S1 mode", "type" : "NB-S1 DRX parameter", "reference" : "9.9.3.63", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "38", "value" : "Requested IMSI offset", "type" : "IMSI offset", "reference" : "9.9.3.64", "presence" : "O", "format" : "TLV", "length" : "4"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/eps/support/cache/nas-msg-66.py b/lib/nas/eps/support/cache/nas-msg-66.py index 39a1fcc18..18f943223 100644 --- a/lib/nas/eps/support/cache/nas-msg-66.py +++ b/lib/nas/eps/support/cache/nas-msg-66.py @@ -26,4 +26,9 @@ ies.append({ "iei" : "7A", "value" : "Extended emergency number list", "type" : ies.append({ "iei" : "7C", "value" : "Ciphering key data", "type" : "Ciphering key data", "reference" : "9.9.3.56", "presence" : "O", "format" : "TLV-E", "length" : "35-2291"}) ies.append({ "iei" : "66", "value" : "UE radio capability ID", "type" : "UE radio capability ID", "reference" : "9.9.3.60", "presence" : "O", "format" : "TLV", "length" : "3-n"}) ies.append({ "iei" : "B-", "value" : "UE radio capability ID deletion indication", "type" : "UE radio capability ID deletion indication", "reference" : "9.9.3.61", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "35", "value" : "Negotiated WUS assistance information", "type" : "WUS assistance information", "reference" : "9.9.3.62", "presence" : "O", "format" : "TLV", "length" : "3-n"}) +ies.append({ "iei" : "36", "value" : "Negotiated DRX parameter in NB-S1 mode", "type" : "NB-S1 DRX parameter", "reference" : "9.9.3.63", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "38", "value" : "Negotiated IMSI offset", "type" : "IMSI offset", "reference" : "9.9.3.64", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of forbidden tracking areas for roaming", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "8-98"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of forbidden tracking areas forregional provision of service", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "8-98"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/eps/support/cache/nas-msg-68.py b/lib/nas/eps/support/cache/nas-msg-68.py index fb2e0e852..40a74fec0 100644 --- a/lib/nas/eps/support/cache/nas-msg-68.py +++ b/lib/nas/eps/support/cache/nas-msg-68.py @@ -4,4 +4,7 @@ ies.append({ "iei" : "78", "value" : "ESM message container", "type" : "ESM mess ies.append({ "iei" : "5F", "value" : "T3346 value", "type" : "GPRS timer 2", "reference" : "9.9.3.16A", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "16", "value" : "T3402 value", "type" : "GPRS timer 2", "reference" : "9.9.3.16A", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "A-", "value" : "Extended EMM cause", "type" : "Extended EMM cause", "reference" : "9.9.3.26A", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "1C", "value" : "Lower bound timer value", "type" : "GPRS timer 3", "reference" : "9.9.3.16B", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of forbidden tracking areas for roaming", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "8-98"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of forbidden tracking areas forregional provision of service", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "8-98"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/eps/support/cache/nas-msg-69.2.py b/lib/nas/eps/support/cache/nas-msg-69.2.py index 1123b1ff6..d680f6b67 100644 --- a/lib/nas/eps/support/cache/nas-msg-69.2.py +++ b/lib/nas/eps/support/cache/nas-msg-69.2.py @@ -1,4 +1,7 @@ ies = [] ies.append({ "iei" : "", "value" : "Detach type", "type" : "Detach type", "reference" : "9.9.3.7", "presence" : "M", "format" : "V", "length" : "1/2"}) ies.append({ "iei" : "53", "value" : "EMM cause", "type" : "EMM cause", "reference" : "9.9.3.9", "presence" : "O", "format" : "TV", "length" : "2"}) +ies.append({ "iei" : "1C", "value" : "Lower bound timer value", "type" : "GPRS timer 3", "reference" : "9.9.3.16B", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of forbidden tracking areas for roaming", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "9-98"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of forbidden tracking areas forregional provision of service", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "9-98"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/eps/support/cache/nas-msg-72.py b/lib/nas/eps/support/cache/nas-msg-72.py index 9405dcde0..78ca6355b 100644 --- a/lib/nas/eps/support/cache/nas-msg-72.py +++ b/lib/nas/eps/support/cache/nas-msg-72.py @@ -30,4 +30,10 @@ ies.append({ "iei" : "6F", "value" : "UE additional security capability", "type" ies.append({ "iei" : "6D", "value" : "UE status", "type" : "UE status", "reference" : "9.9.3.54", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "17", "value" : "Additional information requested", "type" : "Additional information requested", "reference" : "9.9.3.55", "presence" : "O", "format" : "TV", "length" : "2"}) ies.append({ "iei" : "32", "value" : "N1 UE network capability", "type" : "N1 UE network capability", "reference" : "9.9.3.57", "presence" : "O", "format" : "TLV", "length" : "3-15"}) +ies.append({ "iei" : "34", "value" : "UE radio capability ID availability", "type" : "UE radio capability ID availability", "reference" : "9.9.3.58", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "35", "value" : "Requested WUS assistance information", "type" : "WUS assistance information", "reference" : "9.9.3.62", "presence" : "O", "format" : "TLV", "length" : "3-n"}) +ies.append({ "iei" : "36", "value" : "DRX parameter in NB-S1 mode", "type" : "NB-S1 DRX parameter", "reference" : "9.9.3.63", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "38", "value" : "Requested IMSI offset", "type" : "IMSI offset", "reference" : "9.9.3.64", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "29", "value" : "UE request type", "type" : "UE request type", "reference" : "9.9.3.65", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "28", "value" : "Paging restriction", "type" : "Paging restriction", "reference" : "9.9.3.66", "presence" : "O", "format" : "TLV", "length" : "3-5"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/eps/support/cache/nas-msg-73.py b/lib/nas/eps/support/cache/nas-msg-73.py index f8b5e50d5..e49a7029f 100644 --- a/lib/nas/eps/support/cache/nas-msg-73.py +++ b/lib/nas/eps/support/cache/nas-msg-73.py @@ -27,4 +27,10 @@ ies.append({ "iei" : "7A", "value" : "Extended emergency number list", "type" : ies.append({ "iei" : "7C", "value" : "Ciphering key data", "type" : "Ciphering key data", "reference" : "9.9.3.56", "presence" : "O", "format" : "TLV-E", "length" : "35-2291"}) ies.append({ "iei" : "66", "value" : "UE radio capability ID", "type" : "UE radio capability ID", "reference" : "9.9.3.60", "presence" : "O", "format" : "TLV", "length" : "3-n"}) ies.append({ "iei" : "B-", "value" : "UE radio capability ID deletion indication", "type" : "UE radio capability ID deletion indication", "reference" : "9.9.3.61", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "35", "value" : "Negotiated WUS assistance information", "type" : "WUS assistance information", "reference" : "9.9.3.62", "presence" : "O", "format" : "TLV", "length" : "3-n"}) +ies.append({ "iei" : "36", "value" : "Negotiated DRX parameter in NB-S1 mode", "type" : "NB-S1 DRX parameter", "reference" : "9.9.3.63", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "38", "value" : "Negotiated IMSI offset", "type" : "IMSI offset", "reference" : "9.9.3.64", "presence" : "O", "format" : "TLV", "length" : "4"}) +ies.append({ "iei" : "37", "value" : "EPS additional request result", "type" : "EPS additional request result", "reference" : "9.9.3.67", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of forbidden tracking areas for roaming", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "8-98"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of forbidden tracking areas forregional provision of service", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "8-98"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/eps/support/cache/nas-msg-75.py b/lib/nas/eps/support/cache/nas-msg-75.py index ad00b1b00..14dbf632c 100644 --- a/lib/nas/eps/support/cache/nas-msg-75.py +++ b/lib/nas/eps/support/cache/nas-msg-75.py @@ -2,4 +2,7 @@ ies = [] ies.append({ "iei" : "", "value" : "EMM cause", "type" : "EMM cause", "reference" : "9.9.3.9", "presence" : "M", "format" : "V", "length" : "1"}) ies.append({ "iei" : "5F", "value" : "T3346 value", "type" : "GPRS timer 2", "reference" : "9.9.3.16A", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "A-", "value" : "Extended EMM cause", "type" : "Extended EMM cause", "reference" : "9.9.3.26A", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "1C", "value" : "Lower bound timer value", "type" : "GPRS timer 3", "reference" : "9.9.3.16B", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of forbidden tracking areas for roaming", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "9-98"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of forbidden tracking areas forregional provision of service", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "9-98"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/eps/support/cache/nas-msg-76.py b/lib/nas/eps/support/cache/nas-msg-76.py index 7ca152fd6..0a8ef6aa4 100644 --- a/lib/nas/eps/support/cache/nas-msg-76.py +++ b/lib/nas/eps/support/cache/nas-msg-76.py @@ -1,7 +1,9 @@ ies = [] ies.append({ "iei" : "", "value" : "Service type", "type" : "Service type", "reference" : "9.9.3.27", "presence" : "M", "format" : "V", "length" : "1/2"}) ies.append({ "iei" : "", "value" : "M-TMSI", "type" : "Mobile identity", "reference" : "9.9.2.3", "presence" : "M", "format" : "LV", "length" : "6"}) -ies.append({ "iei" : "B-", "value" : "CSFB response", "type" : "CSFB response", "reference" : "9.9.3.5", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "B-", "value" : "CSFB response", "type" : "CSFB response", "reference" : "9.9.3.5", "presence" : "C", "format" : "TV", "length" : "1"}) ies.append({ "iei" : "57", "value" : "EPS bearer context status", "type" : "EPS bearer context status", "reference" : "9.9.2.1", "presence" : "O", "format" : "TLV", "length" : "4"}) ies.append({ "iei" : "D-", "value" : "Device properties", "type" : "Device properties", "reference" : "9.9.2.0A", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "29", "value" : "UE request type", "type" : "UE request type", "reference" : "9.9.3.65", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "28", "value" : "Paging restriction", "type" : "Paging restriction", "reference" : "9.9.3.66", "presence" : "O", "format" : "TLV", "length" : "3-5"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/eps/support/cache/nas-msg-78.py b/lib/nas/eps/support/cache/nas-msg-78.py index a6f8a139a..c6f5fec37 100644 --- a/lib/nas/eps/support/cache/nas-msg-78.py +++ b/lib/nas/eps/support/cache/nas-msg-78.py @@ -3,4 +3,7 @@ ies.append({ "iei" : "", "value" : "EMM cause", "type" : "EMM cause", "reference ies.append({ "iei" : "5B", "value" : "T3442 value", "type" : "GPRS timer", "reference" : "9.9.3.16", "presence" : "C", "format" : "TV", "length" : "2"}) ies.append({ "iei" : "5F", "value" : "T3346 value", "type" : "GPRS timer 2", "reference" : "9.9.3.16A", "presence" : "O", "format" : "TLV", "length" : "3"}) ies.append({ "iei" : "6B", "value" : "T3448 value", "type" : "GPRS timer 2", "reference" : "9.9.3.16A", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "1C", "value" : "Lower bound timer value", "type" : "GPRS timer 3", "reference" : "9.9.3.16B", "presence" : "O", "format" : "TLV", "length" : "3"}) +ies.append({ "iei" : "1D", "value" : "Forbidden TAI for the list of forbidden tracking areas for roaming", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "9-98"}) +ies.append({ "iei" : "1E", "value" : "Forbidden TAI for the list of forbidden tracking areas forregional provision of service", "type" : "Tracking area identity list", "reference" : "9.9.3.33", "presence" : "O", "format" : "TLV", "length" : "9-98"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/eps/support/cache/nas-msg-93.py b/lib/nas/eps/support/cache/nas-msg-93.py index f125f7b8d..58ee7de6e 100644 --- a/lib/nas/eps/support/cache/nas-msg-93.py +++ b/lib/nas/eps/support/cache/nas-msg-93.py @@ -7,5 +7,5 @@ ies.append({ "iei" : "55", "value" : "Replayed nonceUE", "type" : "Nonce", "refe ies.append({ "iei" : "56", "value" : "NonceMME", "type" : "Nonce", "reference" : "9.9.3.25", "presence" : "O", "format" : "TV", "length" : "5"}) ies.append({ "iei" : "4F", "value" : "HashMME", "type" : "HashMME", "reference" : "9.9.3.50", "presence" : "O", "format" : "TLV", "length" : "10"}) ies.append({ "iei" : "6F", "value" : "Replayed UE additional security capability", "type" : "UE additional security capability", "reference" : "9.9.3.53", "presence" : "O", "format" : "TLV", "length" : "6"}) -ies.append({ "iei" : "D-", "value" : "UE radio capability ID request", "type" : "UE radio capability ID request", "reference" : "9.9.3.59", "presence" : "O", "format" : "TV", "length" : "1"}) +ies.append({ "iei" : "37", "value" : "UE radio capability ID request", "type" : "UE radio capability ID request", "reference" : "9.9.3.59", "presence" : "O", "format" : "TLV", "length" : "3"}) msg_list[key]["ies"] = ies diff --git a/lib/nas/eps/support/nas-message.py b/lib/nas/eps/support/nas-message.py index d3ca2c013..421238888 100644 --- a/lib/nas/eps/support/nas-message.py +++ b/lib/nas/eps/support/nas-message.py @@ -1,6 +1,6 @@ # The MIT License -# Copyright (C) 2019,2020 by Sukchan Lee +# Copyright (C) 2019-2023 by Sukchan Lee # This file is part of Open5GS. @@ -64,7 +64,7 @@ def output_header_to_file(f): f.write("""/* * The MIT License * - * Copyright (C) 2019,2020 by Sukchan Lee + * Copyright (C) 2019-2023 by Sukchan Lee * * This file is part of Open5GS. * @@ -113,7 +113,8 @@ def v_lower(v): def get_cells(cells): iei = cells[0].text - value = re.sub("\s*$", "", re.sub("\s*\n*\s*\([^\)]*\)*", "", re.sub("'s", "", cells[1].text))) + value = cells[1].text.encode('ascii', 'ignore').decode('utf-8') + value = re.sub("\s*$", "", re.sub("\s*\n*\s*\([^\)]*\)*", "", re.sub("\"|'s", "", value))) type = re.sub("^NAS ", "", re.sub("'s", "", re.sub('\s*\n\s*[a-zA-Z0-9.]*', '', cells[2].text))) if type == "message container": type = "EPS message container" @@ -578,10 +579,10 @@ for (k, v) in sorted_msg_list: f.write(" * %s\n" % k) f.write(" ******************************************************/") - for i, ie in enumerate([ies for ies in msg_list[k]["ies"] if ies["presence"] == "O"]): - f.write("\n#define OGS_NAS_EPS_%s_%s_PRESENT (1<<%d)" % (v_upper(k), v_upper(ie["value"]), i)) + for i, ie in enumerate([ies for ies in msg_list[k]["ies"] if ies["presence"] != "M"]): + f.write("\n#define OGS_NAS_EPS_%s_%s_PRESENT ((uint64_t)1<<%d)" % (v_upper(k), v_upper(ie["value"]), i)) - for i, ie in enumerate([ies for ies in msg_list[k]["ies"] if ies["presence"] == "O"]): + for i, ie in enumerate([ies for ies in msg_list[k]["ies"] if ies["presence"] != "M"]): f.write("\n#define OGS_NAS_EPS_%s_%s_TYPE 0x%s" % (v_upper(k), v_upper(ie["value"]), re.sub('-', '0', ie["iei"]))) f.write("\n\ntypedef struct ogs_nas_eps_%s_s {\n" % v_lower(k)) @@ -593,9 +594,9 @@ for (k, v) in sorted_msg_list: f.write(" /* Mandatory fields */\n") mandatory_fields = True; - if ie["presence"] == "O" and optional_fields is False: + if ie["presence"] != "M" and optional_fields is False: f.write("\n /* Optional fields */\n") - f.write(" uint32_t presencemask;\n"); + f.write(" uint64_t presencemask;\n"); optional_fields = True; f.write(" ogs_nas_" + v_lower(ie["type"]) + "_t " + \ @@ -696,7 +697,7 @@ for (k, v) in sorted_msg_list: f.write(" decoded += size;\n\n") optional_fields = False; - for ie in [ies for ies in msg_list[k]["ies"] if ies["presence"] == "O"]: + for ie in [ies for ies in msg_list[k]["ies"] if ies["presence"] != "M"]: if optional_fields is False: f.write(""" while (pkbuf->len > 0) { uint8_t *buffer = pkbuf->data; @@ -726,7 +727,7 @@ for (k, v) in sorted_msg_list: f.write(" decoded += size;\n") f.write(" break;\n") - if [ies for ies in msg_list[k]["ies"] if ies["presence"] == "O"]: + if [ies for ies in msg_list[k]["ies"] if ies["presence"] != "M"]: f.write(""" default: ogs_warn("Unknown type(0x%x) or not implemented\\n", type); break; @@ -881,7 +882,7 @@ for (k, v) in sorted_msg_list: f.write(" ogs_assert(size >= 0);\n") f.write(" encoded += size;\n\n") - for ie in [ies for ies in msg_list[k]["ies"] if ies["presence"] == "O"]: + for ie in [ies for ies in msg_list[k]["ies"] if ies["presence"] != "M"]: f.write(" if (%s->presencemask & OGS_NAS_EPS_%s_%s_PRESENT) {\n" % (v_lower(k), v_upper(k), v_upper(ie["value"]))) if ie["length"] == "1" and ie["format"] == "TV": f.write(" %s->%s.type = (OGS_NAS_EPS_%s_%s_TYPE >> 4);\n\n" % (v_lower(k), v_lower(ie["value"]), v_upper(k), v_upper(ie["value"]))) diff --git a/lib/nas/eps/types.h b/lib/nas/eps/types.h index 83609b0fe..cdfc8176f 100644 --- a/lib/nas/eps/types.h +++ b/lib/nas/eps/types.h @@ -745,14 +745,46 @@ typedef struct ogs_nas_n1_ue_network_capability_s { }; } ogs_nas_n1_ue_network_capability_t; +/* 9.9.3.58 UE radio capability ID availability + * O TLV 3 */ +typedef struct ogs_nas_ue_radio_capability_id_availability_s { + uint8_t length; +ED2(uint8_t spare:5;, + uint8_t value:3;) +} __attribute__ ((packed)) ogs_nas_ue_radio_capability_id_availability_t; + /* 9.9.3.59 UE radio capability ID request - * O TV 1 */ + * O TLV 3 */ typedef struct ogs_nas_ue_radio_capability_id_request_s { + uint8_t length; ED3(uint8_t type:4;, uint8_t spare:3;, uint8_t ue_radio_capability_id_available:1;) } __attribute__ ((packed)) ogs_nas_ue_radio_capability_id_request_t; +/* 9.9.3.63 NB-S1 DRX parameter + * O TLV 3 */ +typedef struct ogs_nas_nb_s1_drx_parameter_s { + uint8_t length; +ED2(uint8_t spare:4;, + uint8_t value:4;) +} __attribute__ ((packed)) ogs_nas_nb_s1_drx_parameter_t; + +/* 9.9.3.64 IMSI offset + * O TLV 4 */ +typedef struct ogs_nas_imsi_offset_s { + uint8_t length; + uint16_t value; +} __attribute__ ((packed)) ogs_nas_imsi_offset_t; + +/* 9.9.3.67 EPS additional request result + * O TLV 3 */ +typedef struct ogs_nas_eps_additional_request_result_s { + uint8_t length; +ED2(uint8_t spare:6;, + uint8_t prd:2;) +} __attribute__ ((packed)) ogs_nas_eps_additional_request_result_t; + /* 9.9.4.1 Access point name * See subclause 10.5.6.1 in 3GPP TS 24.008 [13]. * O TLV 3-102 */