From 74ffe393c65ba1937b0e4e39450599211394b4cb Mon Sep 17 00:00:00 2001 From: Francisco Paisana Date: Mon, 21 Dec 2020 22:38:48 +0000 Subject: [PATCH] asn1 update: s1ap asn1 is now v16.1 (2020-03) --- lib/include/srslte/asn1/s1ap.h | 4348 ++++++++--- lib/src/asn1/s1ap.cc | 12225 +++++++++++++++++++++++++------ lib/test/asn1/CMakeLists.txt | 6 +- 3 files changed, 13430 insertions(+), 3149 deletions(-) diff --git a/lib/include/srslte/asn1/s1ap.h b/lib/include/srslte/asn1/s1ap.h index 0912fd5bf..c306d3bb3 100644 --- a/lib/include/srslte/asn1/s1ap.h +++ b/lib/include/srslte/asn1/s1ap.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 S1AP v15.7.1 (2019-10) + * 3GPP TS ASN1 S1AP v16.1.0 (2020-03) * ******************************************************************************/ @@ -92,6 +92,7 @@ namespace s1ap { #define ASN1_S1AP_ID_UE_INFO_TRANSFER 59 #define ASN1_S1AP_ID_ENBCP_RELOCATION_IND 60 #define ASN1_S1AP_ID_MMECP_RELOCATION_IND 61 +#define ASN1_S1AP_ID_SECONDARY_RAT_DATA_USAGE_REPORT 62 #define ASN1_S1AP_MAX_PRIVATE_IES 65535 #define ASN1_S1AP_MAX_PROTOCOL_EXTS 65535 #define ASN1_S1AP_MAX_PROTOCOL_IES 65535 @@ -107,7 +108,7 @@ namespace s1ap { #define ASN1_S1AP_MAXNOOF_FORB_LACS 4096 #define ASN1_S1AP_MAXNOOF_FORB_TACS 4096 #define ASN1_S1AP_MAXNOOF_INDIVIDUAL_S1_CONNS_TO_RESET 256 -#define ASN1_S1AP_MAXNOOF_CELLS 16 +#define ASN1_S1AP_MAXNOOF_CELLSIN_UE_HISTORY_INFO 16 #define ASN1_S1AP_MAXNOOF_CELLSINENB 256 #define ASN1_S1AP_MAXNOOF_TA_IFOR_WARNING 65535 #define ASN1_S1AP_MAXNOOF_CELL_ID 65535 @@ -131,6 +132,13 @@ namespace s1ap { #define ASN1_S1AP_MAXNOOF_MBSFN_AREA_MDT 8 #define ASN1_S1AP_MAXNOOF_RECOMMENDED_CELLS 16 #define ASN1_S1AP_MAXNOOF_RECOMMENDED_ENBS 16 +#define ASN1_S1AP_MAXNOOFTIMEPERIODS 2 +#define ASN1_S1AP_MAXNOOF_CELL_IDFOR_QMC 32 +#define ASN1_S1AP_MAXNOOF_TAFOR_QMC 8 +#define ASN1_S1AP_MAXNOOF_PLM_NFOR_QMC 16 +#define ASN1_S1AP_MAXNOOF_BLUETOOTH_NAME 4 +#define ASN1_S1AP_MAXNOOF_WLAN_NAME 4 +#define ASN1_S1AP_MAXNOOF_CONNECTEDENG_NBS 256 #define ASN1_S1AP_ID_MME_UE_S1AP_ID 0 #define ASN1_S1AP_ID_HANDOV_TYPE 1 #define ASN1_S1AP_ID_CAUSE 2 @@ -368,8 +376,50 @@ namespace s1ap { #define ASN1_S1AP_ID_UE_LEVEL_QOS_PARAMS 252 #define ASN1_S1AP_ID_DL_CP_SECURITY_INFO 253 #define ASN1_S1AP_ID_UL_CP_SECURITY_INFO 254 +#define ASN1_S1AP_ID_EXTENDED_ERAB_MAXIMUM_BITRATE_DL 255 +#define ASN1_S1AP_ID_EXTENDED_ERAB_MAXIMUM_BITRATE_UL 256 +#define ASN1_S1AP_ID_EXTENDED_ERAB_GUARANTEED_BITRATE_DL 257 +#define ASN1_S1AP_ID_EXTENDED_ERAB_GUARANTEED_BITRATE_UL 258 +#define ASN1_S1AP_ID_EXTENDED_U_EAGGREGATE_MAXIMUM_BIT_RATE_DL 259 +#define ASN1_S1AP_ID_EXTENDED_U_EAGGREGATE_MAXIMUM_BIT_RATE_UL 260 +#define ASN1_S1AP_ID_NRRESTRICTIN_EP_SAS_SECONDARY_RAT 261 +#define ASN1_S1AP_ID_UE_APP_LAYER_MEAS_CFG 262 +#define ASN1_S1AP_ID_UE_APPLICATION_LAYER_MEAS_CAP 263 +#define ASN1_S1AP_ID_SECONDARY_RAT_DATA_USAGE_REPORT_LIST 264 +#define ASN1_S1AP_ID_SECONDARY_RAT_DATA_USAGE_REPORT_ITEM 265 +#define ASN1_S1AP_ID_HO_FLAG 266 +#define ASN1_S1AP_ID_ERABUSAGE_REPORT_ITEM 267 +#define ASN1_S1AP_ID_SECONDARY_RAT_DATA_USAGE_REQUEST 268 +#define ASN1_S1AP_ID_NRUE_SECURITY_CAP 269 +#define ASN1_S1AP_ID_UNLICENSED_SPEC_RESTRICT 270 #define ASN1_S1AP_ID_CE_MODE_BRESTRICTED 271 +#define ASN1_S1AP_ID_LTE_M_IND 272 +#define ASN1_S1AP_ID_DL_PACKET_LOSS_RATE 273 +#define ASN1_S1AP_ID_UL_PACKET_LOSS_RATE 274 +#define ASN1_S1AP_ID_UE_CAP_INFO_REQUEST 275 +#define ASN1_S1AP_ID_SERVICE_TYPE 276 +#define ASN1_S1AP_ID_AERIAL_UESUBSCRIPTION_INFO 277 +#define ASN1_S1AP_ID_SUBSCRIPTION_BASED_UE_DIFFERENTIATION_INFO 278 +#define ASN1_S1AP_ID_END_IND 280 +#define ASN1_S1AP_ID_EDT_SESSION 281 +#define ASN1_S1AP_ID_CN_TYPE_RESTRICTS 282 #define ASN1_S1AP_ID_PENDING_DATA_IND 283 +#define ASN1_S1AP_ID_BLUETOOTH_MEAS_CFG 284 +#define ASN1_S1AP_ID_WLAN_MEAS_CFG 285 +#define ASN1_S1AP_ID_WARNING_AREA_COORDINATES 286 +#define ASN1_S1AP_ID_NRRESTRICTIN5_GS 287 +#define ASN1_S1AP_ID_PS_CELL_INFO 288 +#define ASN1_S1AP_ID_LAST_NG_RANPLMN_ID 290 +#define ASN1_S1AP_ID_CONNECTEDENG_NB_LIST 291 +#define ASN1_S1AP_ID_CONNECTEDENG_NB_TO_ADD_LIST 292 +#define ASN1_S1AP_ID_CONNECTEDENG_NB_TO_REM_LIST 293 +#define ASN1_S1AP_ID_EN_DCSON_CFG_TRANSFER_ECT 294 +#define ASN1_S1AP_ID_EN_DCSON_CFG_TRANSFER_MCT 295 +#define ASN1_S1AP_ID_IM_SVOICE_EP_SFALLBACKFROM5_G 296 +#define ASN1_S1AP_ID_TIME_SINCE_SECONDARY_NODE_RELEASE 297 +#define ASN1_S1AP_ID_REQUEST_TYPE_ADD_INFO 298 +#define ASN1_S1AP_ID_ADD_RRM_PRIO_IDX 299 +#define ASN1_S1AP_ID_CONTEXTAT_SOURCE 300 #define ASN1_S1AP_MAXNOOF_IRAT_REPORT_CELLS 128 #define ASN1_S1AP_MAXNOOFCANDIDATE_CELLS 16 #define ASN1_S1AP_MAXNOOF_CELLINENB 256 @@ -562,6 +612,9 @@ struct s1ap_protocol_ext_empty_o { // GUMMEI-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o gummei_ext_ies_o; +// PLMNidentity ::= OCTET STRING +typedef fixed_octstring<3, true> plm_nid; + // Additional-GUTI-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o add_guti_ext_ies_o; @@ -838,6 +891,182 @@ private: void destroy_(); }; +// CellBasedQMC-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o cell_based_qmc_ext_ies_o; + +// CellIdListforQMC ::= SEQUENCE (SIZE (1..32)) OF EUTRAN-CGI +using cell_id_listfor_qmc_l = dyn_array; + +// PLMNAreaBasedQMC-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o plmn_area_based_qmc_ext_ies_o; + +// PLMNListforQMC ::= SEQUENCE (SIZE (1..16)) OF OCTET STRING (SIZE (3)) +using plmn_listfor_qmc_l = bounded_array, 16>; + +// TABasedQMC-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o ta_based_qmc_ext_ies_o; + +// TAIBasedQMC-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o tai_based_qmc_ext_ies_o; + +// TAIListforQMC ::= SEQUENCE (SIZE (1..8)) OF TAI +using tai_listfor_qmc_l = dyn_array; + +// TAListforQMC ::= SEQUENCE (SIZE (1..8)) OF OCTET STRING (SIZE (2)) +using ta_listfor_qmc_l = bounded_array, 8>; + +typedef protocol_ext_container_empty_l cell_based_qmc_ext_ies_container; + +// CellBasedQMC ::= SEQUENCE +struct cell_based_qmc_s { + bool ext = false; + bool ie_exts_present = false; + cell_id_listfor_qmc_l cell_id_listfor_qmc; + cell_based_qmc_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +typedef protocol_ext_container_empty_l plmn_area_based_qmc_ext_ies_container; + +// PLMNAreaBasedQMC ::= SEQUENCE +struct plmn_area_based_qmc_s { + bool ext = false; + bool ie_exts_present = false; + plmn_listfor_qmc_l plmn_listfor_qmc; + plmn_area_based_qmc_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +typedef protocol_ext_container_empty_l ta_based_qmc_ext_ies_container; + +// TABasedQMC ::= SEQUENCE +struct ta_based_qmc_s { + bool ext = false; + bool ie_exts_present = false; + ta_listfor_qmc_l talistfor_qmc; + ta_based_qmc_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +typedef protocol_ext_container_empty_l tai_based_qmc_ext_ies_container; + +// TAIBasedQMC ::= SEQUENCE +struct tai_based_qmc_s { + bool ext = false; + bool ie_exts_present = false; + tai_listfor_qmc_l tai_listfor_qmc; + tai_based_qmc_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// AreaScopeOfQMC ::= CHOICE +struct area_scope_of_qmc_c { + struct types_opts { + enum options { cell_based, tabased, tai_based, plmn_area_based, /*...*/ nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + area_scope_of_qmc_c() = default; + area_scope_of_qmc_c(const area_scope_of_qmc_c& other); + area_scope_of_qmc_c& operator=(const area_scope_of_qmc_c& other); + ~area_scope_of_qmc_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + cell_based_qmc_s& cell_based() + { + assert_choice_type("cellBased", type_.to_string(), "AreaScopeOfQMC"); + return c.get(); + } + ta_based_qmc_s& tabased() + { + assert_choice_type("tABased", type_.to_string(), "AreaScopeOfQMC"); + return c.get(); + } + tai_based_qmc_s& tai_based() + { + assert_choice_type("tAIBased", type_.to_string(), "AreaScopeOfQMC"); + return c.get(); + } + plmn_area_based_qmc_s& plmn_area_based() + { + assert_choice_type("pLMNAreaBased", type_.to_string(), "AreaScopeOfQMC"); + return c.get(); + } + const cell_based_qmc_s& cell_based() const + { + assert_choice_type("cellBased", type_.to_string(), "AreaScopeOfQMC"); + return c.get(); + } + const ta_based_qmc_s& tabased() const + { + assert_choice_type("tABased", type_.to_string(), "AreaScopeOfQMC"); + return c.get(); + } + const tai_based_qmc_s& tai_based() const + { + assert_choice_type("tAIBased", type_.to_string(), "AreaScopeOfQMC"); + return c.get(); + } + const plmn_area_based_qmc_s& plmn_area_based() const + { + assert_choice_type("pLMNAreaBased", type_.to_string(), "AreaScopeOfQMC"); + return c.get(); + } + cell_based_qmc_s& set_cell_based() + { + set(types::cell_based); + return c.get(); + } + ta_based_qmc_s& set_tabased() + { + set(types::tabased); + return c.get(); + } + tai_based_qmc_s& set_tai_based() + { + set(types::tai_based); + return c.get(); + } + plmn_area_based_qmc_s& set_plmn_area_based() + { + set(types::plmn_area_based); + return c.get(); + } + +private: + types type_; + choice_buffer_t c; + + void destroy_(); +}; + // CellIdentifierAndCELevelForCECapableUEs-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o cell_id_and_ce_level_for_ce_capable_ues_ext_ies_o; @@ -1230,6 +1459,48 @@ struct bearers_subject_to_status_transfer_item_ies_o { using bearers_subject_to_status_transfer_list_l = dyn_array >; +// BluetoothMeasConfigNameList ::= SEQUENCE (SIZE (1..4)) OF OCTET STRING (SIZE (1..248)) +using bluetooth_meas_cfg_name_list_l = bounded_array, 4>; + +// BluetoothMeasConfig ::= ENUMERATED +struct bluetooth_meas_cfg_opts { + enum options { setup, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated bluetooth_meas_cfg_e; + +// BluetoothMeasurementConfiguration-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o bluetooth_meas_cfg_ext_ies_o; + +typedef protocol_ext_container_empty_l bluetooth_meas_cfg_ext_ies_container; + +// BluetoothMeasurementConfiguration ::= SEQUENCE +struct bluetooth_meas_cfg_s { + struct bt_rssi_opts { + enum options { true_value, /*...*/ nulltype } value; + + std::string to_string() const; + }; + typedef enumerated bt_rssi_e_; + + // member variables + bool ext = false; + bool bluetooth_meas_cfg_name_list_present = false; + bool bt_rssi_present = false; + bool ie_exts_present = false; + bluetooth_meas_cfg_e bluetooth_meas_cfg; + bluetooth_meas_cfg_name_list_l bluetooth_meas_cfg_name_list; + bt_rssi_e_ bt_rssi; + bluetooth_meas_cfg_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CancelledCellinEAI-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o cancelled_cellin_eai_item_ext_ies_o; @@ -1626,6 +1897,39 @@ struct cgi_s { void to_json(json_writer& j) const; }; +// CNType ::= ENUMERATED +struct cn_type_opts { + enum options { five_gc_forbidden, /*...*/ epc_forbiddden, nulltype } value; + typedef uint8_t number_type; + + std::string to_string() const; + uint8_t to_number() const; +}; +typedef enumerated cn_type_e; + +// CNTypeRestrictions-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o cn_type_restricts_item_ext_ies_o; + +typedef protocol_ext_container_empty_l cn_type_restricts_item_ext_ies_container; + +// CNTypeRestrictions-Item ::= SEQUENCE +struct cn_type_restricts_item_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<3, true> plmn_id; + cn_type_e cntype; + cn_type_restricts_item_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CNTypeRestrictions ::= SEQUENCE (SIZE (1..16)) OF CNTypeRestrictions-Item +using cn_type_restricts_l = dyn_array; + // CSG-IdList-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o csg_id_list_item_ext_ies_o; @@ -2371,25 +2675,53 @@ struct cell_type_s { void to_json(json_writer& j) const; }; -// DL-CP-SecurityInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o dl_cp_security_info_ext_ies_o; - -// CE-ModeBRestricted ::= ENUMERATED -struct ce_mode_brestricted_opts { - enum options { restricted, not_restricted, /*...*/ nulltype } value; +// RAT-Type ::= ENUMERATED +struct rat_type_opts { + enum options { nbiot, /*...*/ nulltype } value; std::string to_string() const; }; -typedef enumerated ce_mode_brestricted_e; +typedef enumerated rat_type_e; -typedef protocol_ext_container_empty_l dl_cp_security_info_ext_ies_container; +// SupportedTAs-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +struct supported_tas_item_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { + struct types_opts { + enum options { rat_type, nulltype } value; -// DL-CP-SecurityInformation ::= SEQUENCE -struct dl_cp_security_info_s { - bool ext = false; - bool ie_exts_present = false; - fixed_bitstring<16, false, true> dl_nas_mac; - dl_cp_security_info_ext_ies_container ie_exts; + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + types type() const { return types::rat_type; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + rat_type_e& rat_type() { return c; } + const rat_type_e& rat_type() const { return c; } + + private: + rat_type_e c; + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + +// SupportedTAs-Item ::= SEQUENCE +struct supported_tas_item_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<2, true> tac; + bplmns_l broadcast_plmns; + protocol_ext_container_l ie_exts; // ... // sequence methods @@ -2398,26 +2730,42 @@ struct dl_cp_security_info_s { void to_json(json_writer& j) const; }; -// EnhancedCoverageRestricted ::= ENUMERATED -struct enhanced_coverage_restricted_opts { - enum options { restricted, /*...*/ nulltype } value; +// ConnectedengNBItem-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o connectedeng_nb_item_ext_ies_o; - std::string to_string() const; +// SupportedTAs ::= SEQUENCE (SIZE (1..256)) OF SupportedTAs-Item +using supported_tas_l = dyn_array; + +typedef protocol_ext_container_empty_l connectedeng_nb_item_ext_ies_container; + +// ConnectedengNBItem ::= SEQUENCE +struct connectedeng_nb_item_s { + bool ext = false; + bool ie_exts_present = false; + bounded_bitstring<22, 32, true, true> en_g_nb_id; + supported_tas_l supported_tas; + connectedeng_nb_item_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; }; -typedef enumerated enhanced_coverage_restricted_e; -// ConnectionEstablishmentIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES -struct conn_establishment_ind_ies_o { - // Value ::= OPEN TYPE - struct value_c { +// ConnectedengNBList ::= SEQUENCE (SIZE (1..256)) OF ConnectedengNBItem +using connectedeng_nb_list_l = dyn_array; + +// GBR-QosInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +struct gbr_qos_info_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { struct types_opts { enum options { - mme_ue_s1ap_id, - enb_ue_s1ap_id, - ue_radio_cap, - enhanced_coverage_restricted, - dl_cp_security_info, - ce_mode_brestricted, + extended_erab_maximum_bitrate_dl, + extended_erab_maximum_bitrate_ul, + extended_erab_guaranteed_bitrate_dl, + extended_erab_guaranteed_bitrate_ul, nulltype } value; @@ -2426,32 +2774,28 @@ struct conn_establishment_ind_ies_o { typedef enumerated types; // choice methods - value_c() = default; - value_c(const value_c& other); - value_c& operator=(const value_c& other); - ~value_c() { destroy_(); } + ext_c() = default; + ext_c(const ext_c& other); + ext_c& operator=(const ext_c& other); + ~ext_c() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - uint64_t& mme_ue_s1ap_id(); - uint32_t& enb_ue_s1ap_id(); - unbounded_octstring& ue_radio_cap(); - enhanced_coverage_restricted_e& enhanced_coverage_restricted(); - dl_cp_security_info_s& dl_cp_security_info(); - ce_mode_brestricted_e& ce_mode_brestricted(); - const uint64_t& mme_ue_s1ap_id() const; - const uint32_t& enb_ue_s1ap_id() const; - const unbounded_octstring& ue_radio_cap() const; - const enhanced_coverage_restricted_e& enhanced_coverage_restricted() const; - const dl_cp_security_info_s& dl_cp_security_info() const; - const ce_mode_brestricted_e& ce_mode_brestricted() const; + uint64_t& extended_erab_maximum_bitrate_dl(); + uint64_t& extended_erab_maximum_bitrate_ul(); + uint64_t& extended_erab_guaranteed_bitrate_dl(); + uint64_t& extended_erab_guaranteed_bitrate_ul(); + const uint64_t& extended_erab_maximum_bitrate_dl() const; + const uint64_t& extended_erab_maximum_bitrate_ul() const; + const uint64_t& extended_erab_guaranteed_bitrate_dl() const; + const uint64_t& extended_erab_guaranteed_bitrate_ul() const; private: - types type_; - choice_buffer_t > c; + types type_; + pod_choice_buffer_t c; void destroy_(); }; @@ -2460,37 +2804,88 @@ struct conn_establishment_ind_ies_o { static uint32_t idx_to_id(uint32_t idx); static bool is_id_valid(const uint32_t& id); static crit_e get_crit(const uint32_t& id); - static value_c get_value(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); static presence_e get_presence(const uint32_t& id); }; -struct conn_establishment_ind_ies_container { - template - using ie_field_s = protocol_ie_container_item_s; +// ScheduledCommunicationTime-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o sched_communication_time_ext_ies_o; - // member variables - bool ue_radio_cap_present = false; - bool enhanced_coverage_restricted_present = false; - bool dl_cp_security_info_present = false; - bool ce_mode_brestricted_present = false; - ie_field_s > mme_ue_s1ap_id; - ie_field_s > enb_ue_s1ap_id; - ie_field_s > ue_radio_cap; - ie_field_s enhanced_coverage_restricted; - ie_field_s dl_cp_security_info; - ie_field_s ce_mode_brestricted; +// DL-CP-SecurityInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o dl_cp_security_info_ext_ies_o; - // sequence methods - conn_establishment_ind_ies_container(); - SRSASN_CODE pack(bit_ref& bref) const; +// E-RABQoSParameters-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +struct erab_qos_params_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { + struct types_opts { + enum options { dl_packet_loss_rate, ul_packet_loss_rate, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + ext_c() = default; + ext_c(const ext_c& other); + ext_c& operator=(const ext_c& other); + ~ext_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + uint16_t& dl_packet_loss_rate(); + uint16_t& ul_packet_loss_rate(); + const uint16_t& dl_packet_loss_rate() const; + const uint16_t& ul_packet_loss_rate() const; + + private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + +struct gbr_qos_info_ext_ies_container { + template + using ie_field_s = protocol_ext_container_item_s; + + // member variables + bool extended_erab_maximum_bitrate_dl_present = false; + bool extended_erab_maximum_bitrate_ul_present = false; + bool extended_erab_guaranteed_bitrate_dl_present = false; + bool extended_erab_guaranteed_bitrate_ul_present = false; + ie_field_s > extended_erab_maximum_bitrate_dl; + ie_field_s > extended_erab_maximum_bitrate_ul; + ie_field_s > extended_erab_guaranteed_bitrate_dl; + ie_field_s > extended_erab_guaranteed_bitrate_ul; + + // sequence methods + gbr_qos_info_ext_ies_container(); + SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; -// ConnectionEstablishmentIndication ::= SEQUENCE -struct conn_establishment_ind_s { - bool ext = false; - conn_establishment_ind_ies_container protocol_ies; +// GBR-QosInformation ::= SEQUENCE +struct gbr_qos_info_s { + bool ext = false; + bool ie_exts_present = false; + uint64_t erab_maximum_bitrate_dl = 0; + uint64_t erab_maximum_bitrate_ul = 0; + uint64_t erab_guaranteed_bitrate_dl = 0; + uint64_t erab_guaranteed_bitrate_ul = 0; + gbr_qos_info_ext_ies_container ie_exts; // ... // sequence methods @@ -2499,27 +2894,46 @@ struct conn_establishment_ind_s { void to_json(json_writer& j) const; }; -// CriticalityDiagnostics-IE-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o crit_diagnostics_ie_item_ext_ies_o; +typedef protocol_ext_container_empty_l sched_communication_time_ext_ies_container; -// TypeOfError ::= ENUMERATED -struct type_of_error_opts { - enum options { not_understood, missing, /*...*/ nulltype } value; +// ScheduledCommunicationTime ::= SEQUENCE +struct sched_communication_time_s { + bool ext = false; + bool dayof_week_present = false; + bool timeof_day_start_present = false; + bool timeof_day_end_present = false; + bool ie_exts_present = false; + fixed_bitstring<7, false, true> dayof_week; + uint32_t timeof_day_start = 0; + uint32_t timeof_day_end = 0; + sched_communication_time_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// Subscription-Based-UE-DifferentiationInfo-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o subscription_based_ue_differentiation_info_ext_ies_o; + +// CE-ModeBRestricted ::= ENUMERATED +struct ce_mode_brestricted_opts { + enum options { restricted, not_restricted, /*...*/ nulltype } value; std::string to_string() const; }; -typedef enumerated type_of_error_e; +typedef enumerated ce_mode_brestricted_e; -typedef protocol_ext_container_empty_l crit_diagnostics_ie_item_ext_ies_container; +typedef protocol_ext_container_empty_l dl_cp_security_info_ext_ies_container; -// CriticalityDiagnostics-IE-Item ::= SEQUENCE -struct crit_diagnostics_ie_item_s { - bool ext = false; - bool ie_exts_present = false; - crit_e iecrit; - uint32_t ie_id = 0; - type_of_error_e type_of_error; - crit_diagnostics_ie_item_ext_ies_container ie_exts; +// DL-CP-SecurityInformation ::= SEQUENCE +struct dl_cp_security_info_s { + bool ext = false; + bool ie_exts_present = false; + fixed_bitstring<16, false, true> dl_nas_mac; + dl_cp_security_info_ext_ies_container ie_exts; // ... // sequence methods @@ -2528,35 +2942,106 @@ struct crit_diagnostics_ie_item_s { void to_json(json_writer& j) const; }; -// CriticalityDiagnostics-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o crit_diagnostics_ext_ies_o; +struct erab_qos_params_ext_ies_container { + template + using ie_field_s = protocol_ext_container_item_s; -// CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..256)) OF CriticalityDiagnostics-IE-Item -using crit_diagnostics_ie_list_l = dyn_array; + // member variables + bool dl_packet_loss_rate_present = false; + bool ul_packet_loss_rate_present = false; + ie_field_s > dl_packet_loss_rate; + ie_field_s > ul_packet_loss_rate; -// TriggeringMessage ::= ENUMERATED -struct trigger_msg_opts { - enum options { init_msg, successful_outcome, unsuccessfull_outcome, nulltype } value; + // sequence methods + erab_qos_params_ext_ies_container(); + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// E-RABLevelQoSParameters ::= SEQUENCE +struct erab_level_qos_params_s { + bool ext = false; + bool gbr_qos_info_present = false; + bool ie_exts_present = false; + uint16_t qci = 0; + alloc_and_retention_prio_s alloc_retention_prio; + gbr_qos_info_s gbr_qos_info; + erab_qos_params_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// EndIndication ::= ENUMERATED +struct end_ind_opts { + enum options { no_further_data, further_data_exists, /*...*/ nulltype } value; std::string to_string() const; }; -typedef enumerated trigger_msg_e; +typedef enumerated end_ind_e; -typedef protocol_ext_container_empty_l crit_diagnostics_ext_ies_container; +// EnhancedCoverageRestricted ::= ENUMERATED +struct enhanced_coverage_restricted_opts { + enum options { restricted, /*...*/ nulltype } value; -// CriticalityDiagnostics ::= SEQUENCE -struct crit_diagnostics_s { - bool ext = false; - bool proc_code_present = false; - bool trigger_msg_present = false; - bool proc_crit_present = false; - bool ies_crit_diagnostics_present = false; - bool ie_exts_present = false; - uint16_t proc_code = 0; - trigger_msg_e trigger_msg; - crit_e proc_crit; - crit_diagnostics_ie_list_l ies_crit_diagnostics; - crit_diagnostics_ext_ies_container ie_exts; + std::string to_string() const; +}; +typedef enumerated enhanced_coverage_restricted_e; + +typedef protocol_ext_container_empty_l subscription_based_ue_differentiation_info_ext_ies_container; + +// Subscription-Based-UE-DifferentiationInfo ::= SEQUENCE +struct subscription_based_ue_differentiation_info_s { + struct periodic_communication_ind_opts { + enum options { periodically, ondemand, /*...*/ nulltype } value; + + std::string to_string() const; + }; + typedef enumerated periodic_communication_ind_e_; + struct stationary_ind_opts { + enum options { stationary, mobile, /*...*/ nulltype } value; + + std::string to_string() const; + }; + typedef enumerated stationary_ind_e_; + struct traffic_profile_opts { + enum options { single_packet, dual_packets, multiple_packets, /*...*/ nulltype } value; + + std::string to_string() const; + }; + typedef enumerated traffic_profile_e_; + struct battery_ind_opts { + enum options { + battery_pwred, + battery_pwred_not_rechargeable_or_replaceable, + not_battery_pwred, + /*...*/ nulltype + } value; + + std::string to_string() const; + }; + typedef enumerated battery_ind_e_; + + // member variables + bool ext = false; + bool periodic_communication_ind_present = false; + bool periodic_time_present = false; + bool sched_communication_time_present = false; + bool stationary_ind_present = false; + bool traffic_profile_present = false; + bool battery_ind_present = false; + bool ie_exts_present = false; + periodic_communication_ind_e_ periodic_communication_ind; + uint16_t periodic_time = 1; + sched_communication_time_s sched_communication_time; + stationary_ind_e_ stationary_ind; + traffic_profile_e_ traffic_profile; + battery_ind_e_ battery_ind; + subscription_based_ue_differentiation_info_ext_ies_container ie_exts; // ... // sequence methods @@ -2565,12 +3050,23 @@ struct crit_diagnostics_s { void to_json(json_writer& j) const; }; -// DeactivateTraceIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES -struct deactiv_trace_ies_o { +// ConnectionEstablishmentIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +struct conn_establishment_ind_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { mme_ue_s1ap_id, enb_ue_s1ap_id, e_utran_trace_id, nulltype } value; + enum options { + mme_ue_s1ap_id, + enb_ue_s1ap_id, + ue_radio_cap, + enhanced_coverage_restricted, + dl_cp_security_info, + ce_mode_brestricted, + end_ind, + subscription_based_ue_differentiation_info, + ue_level_qos_params, + nulltype + } value; std::string to_string() const; }; @@ -2587,16 +3083,32 @@ struct deactiv_trace_ies_o { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - uint64_t& mme_ue_s1ap_id(); - uint32_t& enb_ue_s1ap_id(); - fixed_octstring<8, true>& e_utran_trace_id(); - const uint64_t& mme_ue_s1ap_id() const; - const uint32_t& enb_ue_s1ap_id() const; - const fixed_octstring<8, true>& e_utran_trace_id() const; + uint64_t& mme_ue_s1ap_id(); + uint32_t& enb_ue_s1ap_id(); + unbounded_octstring& ue_radio_cap(); + enhanced_coverage_restricted_e& enhanced_coverage_restricted(); + dl_cp_security_info_s& dl_cp_security_info(); + ce_mode_brestricted_e& ce_mode_brestricted(); + end_ind_e& end_ind(); + subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info(); + erab_level_qos_params_s& ue_level_qos_params(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; + const unbounded_octstring& ue_radio_cap() const; + const enhanced_coverage_restricted_e& enhanced_coverage_restricted() const; + const dl_cp_security_info_s& dl_cp_security_info() const; + const ce_mode_brestricted_e& ce_mode_brestricted() const; + const end_ind_e& end_ind() const; + const subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info() const; + const erab_level_qos_params_s& ue_level_qos_params() const; private: - types type_; - choice_buffer_t > c; + types type_; + choice_buffer_t > + c; void destroy_(); }; @@ -2609,26 +3121,39 @@ struct deactiv_trace_ies_o { static presence_e get_presence(const uint32_t& id); }; -struct deactiv_trace_ies_container { +struct conn_establishment_ind_ies_container { template using ie_field_s = protocol_ie_container_item_s; // member variables + bool ue_radio_cap_present = false; + bool enhanced_coverage_restricted_present = false; + bool dl_cp_security_info_present = false; + bool ce_mode_brestricted_present = false; + bool end_ind_present = false; + bool subscription_based_ue_differentiation_info_present = false; + bool ue_level_qos_params_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; - ie_field_s > e_utran_trace_id; + ie_field_s > ue_radio_cap; + ie_field_s enhanced_coverage_restricted; + ie_field_s dl_cp_security_info; + ie_field_s ce_mode_brestricted; + ie_field_s end_ind; + ie_field_s subscription_based_ue_differentiation_info; + ie_field_s ue_level_qos_params; // sequence methods - deactiv_trace_ies_container(); + conn_establishment_ind_ies_container(); SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; -// DeactivateTrace ::= SEQUENCE -struct deactiv_trace_s { - bool ext = false; - deactiv_trace_ies_container protocol_ies; +// ConnectionEstablishmentIndication ::= SEQUENCE +struct conn_establishment_ind_s { + bool ext = false; + conn_establishment_ind_ies_container protocol_ies; // ... // sequence methods @@ -2637,52 +3162,482 @@ struct deactiv_trace_s { void to_json(json_writer& j) const; }; -// ForbiddenLACs ::= SEQUENCE (SIZE (1..4096)) OF OCTET STRING (SIZE (2)) -using forbidden_lacs_l = dyn_array >; - -// ForbiddenLAs-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o forbidden_las_item_ext_ies_o; - -// ForbiddenTACs ::= SEQUENCE (SIZE (1..4096)) OF OCTET STRING (SIZE (2)) -using forbidden_tacs_l = dyn_array >; - -// ForbiddenTAs-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o forbidden_tas_item_ext_ies_o; - -typedef protocol_ext_container_empty_l forbidden_las_item_ext_ies_container; +// ENB-ID ::= CHOICE +struct enb_id_c { + struct types_opts { + enum options { macro_enb_id, home_enb_id, /*...*/ short_macro_enb_id, long_macro_enb_id, nulltype } value; -// ForbiddenLAs-Item ::= SEQUENCE -struct forbidden_las_item_s { - bool ext = false; - bool ie_exts_present = false; - fixed_octstring<3, true> plmn_id; - forbidden_lacs_l forbidden_lacs; - forbidden_las_item_ext_ies_container ie_exts; - // ... + std::string to_string() const; + }; + typedef enumerated types; - // sequence methods + // choice methods + enb_id_c() = default; + enb_id_c(const enb_id_c& other); + enb_id_c& operator=(const enb_id_c& other); + ~enb_id_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; -}; - -typedef protocol_ext_container_empty_l forbidden_tas_item_ext_ies_container; - -// ForbiddenTAs-Item ::= SEQUENCE -struct forbidden_tas_item_s { - bool ext = false; - bool ie_exts_present = false; - fixed_octstring<3, true> plmn_id; - forbidden_tacs_l forbidden_tacs; - forbidden_tas_item_ext_ies_container ie_exts; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; + // getters + fixed_bitstring<20, false, true>& macro_enb_id() + { + assert_choice_type("macroENB-ID", type_.to_string(), "ENB-ID"); + return c.get >(); + } + fixed_bitstring<28, false, true>& home_enb_id() + { + assert_choice_type("homeENB-ID", type_.to_string(), "ENB-ID"); + return c.get >(); + } + fixed_bitstring<18, false, true>& short_macro_enb_id() + { + assert_choice_type("short-macroENB-ID", type_.to_string(), "ENB-ID"); + return c.get >(); + } + fixed_bitstring<21, false, true>& long_macro_enb_id() + { + assert_choice_type("long-macroENB-ID", type_.to_string(), "ENB-ID"); + return c.get >(); + } + const fixed_bitstring<20, false, true>& macro_enb_id() const + { + assert_choice_type("macroENB-ID", type_.to_string(), "ENB-ID"); + return c.get >(); + } + const fixed_bitstring<28, false, true>& home_enb_id() const + { + assert_choice_type("homeENB-ID", type_.to_string(), "ENB-ID"); + return c.get >(); + } + const fixed_bitstring<18, false, true>& short_macro_enb_id() const + { + assert_choice_type("short-macroENB-ID", type_.to_string(), "ENB-ID"); + return c.get >(); + } + const fixed_bitstring<21, false, true>& long_macro_enb_id() const + { + assert_choice_type("long-macroENB-ID", type_.to_string(), "ENB-ID"); + return c.get >(); + } + fixed_bitstring<20, false, true>& set_macro_enb_id() + { + set(types::macro_enb_id); + return c.get >(); + } + fixed_bitstring<28, false, true>& set_home_enb_id() + { + set(types::home_enb_id); + return c.get >(); + } + fixed_bitstring<18, false, true>& set_short_macro_enb_id() + { + set(types::short_macro_enb_id); + return c.get >(); + } + fixed_bitstring<21, false, true>& set_long_macro_enb_id() + { + set(types::long_macro_enb_id); + return c.get >(); + } + +private: + types type_; + choice_buffer_t > c; + + void destroy_(); +}; + +// GNB-Identity ::= CHOICE +struct gnb_id_c { + struct types_opts { + enum options { gnb_id, /*...*/ nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + types type() const { return types::gnb_id; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + bounded_bitstring<22, 32, false, true>& gnb_id() { return c; } + const bounded_bitstring<22, 32, false, true>& gnb_id() const { return c; } + +private: + bounded_bitstring<22, 32, false, true> c; +}; + +// Global-GNB-ID-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o global_gnb_id_ext_ies_o; + +// GlobalENB-ID-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o global_enb_id_ext_ies_o; + +// GNB-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o gnb_ext_ies_o; + +typedef protocol_ext_container_empty_l global_enb_id_ext_ies_container; + +// Global-ENB-ID ::= SEQUENCE +struct global_enb_id_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<3, true> plm_nid; + enb_id_c enb_id; + global_enb_id_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +typedef protocol_ext_container_empty_l global_gnb_id_ext_ies_container; + +// Global-GNB-ID ::= SEQUENCE +struct global_gnb_id_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<3, true> plmn_id; + gnb_id_c gnb_id; + global_gnb_id_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NG-eNB-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o ng_enb_ext_ies_o; + +typedef protocol_ext_container_empty_l gnb_ext_ies_container; + +// GNB ::= SEQUENCE +struct gnb_s { + bool ext = false; + bool ie_exts_present = false; + global_gnb_id_s global_g_nb_id; + gnb_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +typedef protocol_ext_container_empty_l ng_enb_ext_ies_container; + +// NG-eNB ::= SEQUENCE +struct ng_enb_s { + bool ext = false; + bool ie_exts_present = false; + global_enb_id_s global_ng_enb_id; + ng_enb_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ContextatSource-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o contextat_source_ext_ies_o; + +// Global-RAN-NODE-ID ::= CHOICE +struct global_ran_node_id_c { + struct types_opts { + enum options { gnb, ng_enb, /*...*/ nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + global_ran_node_id_c() = default; + global_ran_node_id_c(const global_ran_node_id_c& other); + global_ran_node_id_c& operator=(const global_ran_node_id_c& other); + ~global_ran_node_id_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + gnb_s& gnb() + { + assert_choice_type("gNB", type_.to_string(), "Global-RAN-NODE-ID"); + return c.get(); + } + ng_enb_s& ng_enb() + { + assert_choice_type("ng-eNB", type_.to_string(), "Global-RAN-NODE-ID"); + return c.get(); + } + const gnb_s& gnb() const + { + assert_choice_type("gNB", type_.to_string(), "Global-RAN-NODE-ID"); + return c.get(); + } + const ng_enb_s& ng_enb() const + { + assert_choice_type("ng-eNB", type_.to_string(), "Global-RAN-NODE-ID"); + return c.get(); + } + gnb_s& set_gnb() + { + set(types::gnb); + return c.get(); + } + ng_enb_s& set_ng_enb() + { + set(types::ng_enb); + return c.get(); + } + +private: + types type_; + choice_buffer_t c; + + void destroy_(); +}; + +typedef protocol_ext_container_empty_l contextat_source_ext_ies_container; + +// ContextatSource ::= SEQUENCE +struct contextat_source_s { + bool ext = false; + bool ie_exts_present = false; + global_ran_node_id_c source_ng_ran_node_id; + uint64_t ran_ue_ngap_id = 0; + contextat_source_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CriticalityDiagnostics-IE-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o crit_diagnostics_ie_item_ext_ies_o; + +// TypeOfError ::= ENUMERATED +struct type_of_error_opts { + enum options { not_understood, missing, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated type_of_error_e; + +typedef protocol_ext_container_empty_l crit_diagnostics_ie_item_ext_ies_container; + +// CriticalityDiagnostics-IE-Item ::= SEQUENCE +struct crit_diagnostics_ie_item_s { + bool ext = false; + bool ie_exts_present = false; + crit_e iecrit; + uint32_t ie_id = 0; + type_of_error_e type_of_error; + crit_diagnostics_ie_item_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CriticalityDiagnostics-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o crit_diagnostics_ext_ies_o; + +// CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..256)) OF CriticalityDiagnostics-IE-Item +using crit_diagnostics_ie_list_l = dyn_array; + +// TriggeringMessage ::= ENUMERATED +struct trigger_msg_opts { + enum options { init_msg, successful_outcome, unsuccessfull_outcome, nulltype } value; + + std::string to_string() const; +}; +typedef enumerated trigger_msg_e; + +typedef protocol_ext_container_empty_l crit_diagnostics_ext_ies_container; + +// CriticalityDiagnostics ::= SEQUENCE +struct crit_diagnostics_s { + bool ext = false; + bool proc_code_present = false; + bool trigger_msg_present = false; + bool proc_crit_present = false; + bool ies_crit_diagnostics_present = false; + bool ie_exts_present = false; + uint16_t proc_code = 0; + trigger_msg_e trigger_msg; + crit_e proc_crit; + crit_diagnostics_ie_list_l ies_crit_diagnostics; + crit_diagnostics_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// DeactivateTraceIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +struct deactiv_trace_ies_o { + // Value ::= OPEN TYPE + struct value_c { + struct types_opts { + enum options { mme_ue_s1ap_id, enb_ue_s1ap_id, e_utran_trace_id, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + value_c() = default; + value_c(const value_c& other); + value_c& operator=(const value_c& other); + ~value_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + uint64_t& mme_ue_s1ap_id(); + uint32_t& enb_ue_s1ap_id(); + fixed_octstring<8, true>& e_utran_trace_id(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; + const fixed_octstring<8, true>& e_utran_trace_id() const; + + private: + types type_; + choice_buffer_t > c; + + void destroy_(); + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static value_c get_value(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + +struct deactiv_trace_ies_container { + template + using ie_field_s = protocol_ie_container_item_s; + + // member variables + ie_field_s > mme_ue_s1ap_id; + ie_field_s > enb_ue_s1ap_id; + ie_field_s > e_utran_trace_id; + + // sequence methods + deactiv_trace_ies_container(); + SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; +// DeactivateTrace ::= SEQUENCE +struct deactiv_trace_s { + bool ext = false; + deactiv_trace_ies_container protocol_ies; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ForbiddenLACs ::= SEQUENCE (SIZE (1..4096)) OF OCTET STRING (SIZE (2)) +using forbidden_lacs_l = dyn_array >; + +// ForbiddenLAs-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o forbidden_las_item_ext_ies_o; + +// ForbiddenTACs ::= SEQUENCE (SIZE (1..4096)) OF OCTET STRING (SIZE (2)) +using forbidden_tacs_l = dyn_array >; + +// ForbiddenTAs-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o forbidden_tas_item_ext_ies_o; + +typedef protocol_ext_container_empty_l forbidden_las_item_ext_ies_container; + +// ForbiddenLAs-Item ::= SEQUENCE +struct forbidden_las_item_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<3, true> plmn_id; + forbidden_lacs_l forbidden_lacs; + forbidden_las_item_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +typedef protocol_ext_container_empty_l forbidden_tas_item_ext_ies_container; + +// ForbiddenTAs-Item ::= SEQUENCE +struct forbidden_tas_item_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<3, true> plmn_id; + forbidden_tacs_l forbidden_tacs; + forbidden_tas_item_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NRrestrictionin5GS ::= ENUMERATED +struct nrrestrictin5_gs_opts { + enum options { nrrestrictedin5_gs, /*...*/ nulltype } value; + typedef uint8_t number_type; + + std::string to_string() const; + uint8_t to_number() const; +}; +typedef enumerated nrrestrictin5_gs_e; + +// NRrestrictioninEPSasSecondaryRAT ::= ENUMERATED +struct nrrestrictin_ep_sas_secondary_rat_opts { + enum options { nrrestrictedin_ep_sas_secondary_rat, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated nrrestrictin_ep_sas_secondary_rat_e; + +// UnlicensedSpectrumRestriction ::= ENUMERATED +struct unlicensed_spec_restrict_opts { + enum options { unlicensed_restricted, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated unlicensed_spec_restrict_e; + // EPLMNs ::= SEQUENCE (SIZE (1..15)) OF OCTET STRING (SIZE (3)) using eplmns_l = bounded_array, 15>; @@ -2701,7 +3656,64 @@ using forbidden_las_l = dyn_array; using forbidden_tas_l = dyn_array; // HandoverRestrictionList-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o ho_restrict_list_ext_ies_o; +struct ho_restrict_list_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { + struct types_opts { + enum options { + nrrestrictin_ep_sas_secondary_rat, + unlicensed_spec_restrict, + cn_type_restricts, + nrrestrictin5_gs, + last_ng_ranplmn_id, + nulltype + } value; + typedef uint8_t number_type; + + std::string to_string() const; + uint8_t to_number() const; + }; + typedef enumerated types; + + // choice methods + ext_c() = default; + ext_c(const ext_c& other); + ext_c& operator=(const ext_c& other); + ~ext_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + nrrestrictin_ep_sas_secondary_rat_e& nrrestrictin_ep_sas_secondary_rat(); + unlicensed_spec_restrict_e& unlicensed_spec_restrict(); + cn_type_restricts_l& cn_type_restricts(); + nrrestrictin5_gs_e& nrrestrictin5_gs(); + plm_nid& last_ng_ranplmn_id(); + const nrrestrictin_ep_sas_secondary_rat_e& nrrestrictin_ep_sas_secondary_rat() const; + const unlicensed_spec_restrict_e& unlicensed_spec_restrict() const; + const cn_type_restricts_l& cn_type_restricts() const; + const nrrestrictin5_gs_e& nrrestrictin5_gs() const; + const plm_nid& last_ng_ranplmn_id() const; + + private: + types type_; + choice_buffer_t c; + + void destroy_(); + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + +// NRUESecurityCapabilities-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o nrue_security_cap_ext_ies_o; // DLNASPDUDeliveryAckRequest ::= ENUMERATED struct dlnaspdu_delivery_ack_request_opts { @@ -2711,7 +3723,28 @@ struct dlnaspdu_delivery_ack_request_opts { }; typedef enumerated dlnaspdu_delivery_ack_request_e; -typedef protocol_ext_container_empty_l ho_restrict_list_ext_ies_container; +struct ho_restrict_list_ext_ies_container { + template + using ie_field_s = protocol_ext_container_item_s; + + // member variables + bool nrrestrictin_ep_sas_secondary_rat_present = false; + bool unlicensed_spec_restrict_present = false; + bool cn_type_restricts_present = false; + bool nrrestrictin5_gs_present = false; + bool last_ng_ranplmn_id_present = false; + ie_field_s nrrestrictin_ep_sas_secondary_rat; + ie_field_s unlicensed_spec_restrict; + ie_field_s > cn_type_restricts; + ie_field_s nrrestrictin5_gs; + ie_field_s last_ng_ranplmn_id; + + // sequence methods + ho_restrict_list_ext_ies_container(); + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; // HandoverRestrictionList ::= SEQUENCE struct ho_restrict_list_s { @@ -2735,6 +3768,23 @@ struct ho_restrict_list_s { void to_json(json_writer& j) const; }; +typedef protocol_ext_container_empty_l nrue_security_cap_ext_ies_container; + +// NRUESecurityCapabilities ::= SEQUENCE +struct nrue_security_cap_s { + bool ext = false; + bool ie_exts_present = false; + fixed_bitstring<16, true, true> nrencryption_algorithms; + fixed_bitstring<16, true, true> nrintegrity_protection_algorithms; + nrue_security_cap_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PendingDataIndication ::= ENUMERATED struct pending_data_ind_opts { enum options { true_value, /*...*/ nulltype } value; @@ -2751,6 +3801,14 @@ struct srvcc_operation_possible_opts { }; typedef enumerated srvcc_operation_possible_e; +// UECapabilityInfoRequest ::= ENUMERATED +struct ue_cap_info_request_opts { + enum options { requested, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated ue_cap_info_request_e; + // DownlinkNASTransport-IEs ::= OBJECT SET OF S1AP-PROTOCOL-IES struct dl_nas_transport_ies_o { // Value ::= OPEN TYPE @@ -2766,8 +3824,13 @@ struct dl_nas_transport_ies_o { ue_radio_cap, dlnaspdu_delivery_ack_request, enhanced_coverage_restricted, + nrue_security_cap, ce_mode_brestricted, + ue_cap_info_request, + end_ind, pending_data_ind, + subscription_based_ue_differentiation_info, + add_rrm_prio_idx, nulltype } value; @@ -2786,32 +3849,47 @@ struct dl_nas_transport_ies_o { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - uint64_t& mme_ue_s1ap_id(); - uint32_t& enb_ue_s1ap_id(); - unbounded_octstring& nas_pdu(); - ho_restrict_list_s& ho_restrict_list(); - uint16_t& subscriber_profile_idfor_rfp(); - srvcc_operation_possible_e& srvcc_operation_possible(); - unbounded_octstring& ue_radio_cap(); - dlnaspdu_delivery_ack_request_e& dlnaspdu_delivery_ack_request(); - enhanced_coverage_restricted_e& enhanced_coverage_restricted(); - ce_mode_brestricted_e& ce_mode_brestricted(); - pending_data_ind_e& pending_data_ind(); - const uint64_t& mme_ue_s1ap_id() const; - const uint32_t& enb_ue_s1ap_id() const; - const unbounded_octstring& nas_pdu() const; - const ho_restrict_list_s& ho_restrict_list() const; - const uint16_t& subscriber_profile_idfor_rfp() const; - const srvcc_operation_possible_e& srvcc_operation_possible() const; - const unbounded_octstring& ue_radio_cap() const; - const dlnaspdu_delivery_ack_request_e& dlnaspdu_delivery_ack_request() const; - const enhanced_coverage_restricted_e& enhanced_coverage_restricted() const; - const ce_mode_brestricted_e& ce_mode_brestricted() const; - const pending_data_ind_e& pending_data_ind() const; + uint64_t& mme_ue_s1ap_id(); + uint32_t& enb_ue_s1ap_id(); + unbounded_octstring& nas_pdu(); + ho_restrict_list_s& ho_restrict_list(); + uint16_t& subscriber_profile_idfor_rfp(); + srvcc_operation_possible_e& srvcc_operation_possible(); + unbounded_octstring& ue_radio_cap(); + dlnaspdu_delivery_ack_request_e& dlnaspdu_delivery_ack_request(); + enhanced_coverage_restricted_e& enhanced_coverage_restricted(); + nrue_security_cap_s& nrue_security_cap(); + ce_mode_brestricted_e& ce_mode_brestricted(); + ue_cap_info_request_e& ue_cap_info_request(); + end_ind_e& end_ind(); + pending_data_ind_e& pending_data_ind(); + subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info(); + fixed_bitstring<32, false, true>& add_rrm_prio_idx(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; + const unbounded_octstring& nas_pdu() const; + const ho_restrict_list_s& ho_restrict_list() const; + const uint16_t& subscriber_profile_idfor_rfp() const; + const srvcc_operation_possible_e& srvcc_operation_possible() const; + const unbounded_octstring& ue_radio_cap() const; + const dlnaspdu_delivery_ack_request_e& dlnaspdu_delivery_ack_request() const; + const enhanced_coverage_restricted_e& enhanced_coverage_restricted() const; + const nrue_security_cap_s& nrue_security_cap() const; + const ce_mode_brestricted_e& ce_mode_brestricted() const; + const ue_cap_info_request_e& ue_cap_info_request() const; + const end_ind_e& end_ind() const; + const pending_data_ind_e& pending_data_ind() const; + const subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info() const; + const fixed_bitstring<32, false, true>& add_rrm_prio_idx() const; private: - types type_; - choice_buffer_t > c; + types type_; + choice_buffer_t, + ho_restrict_list_s, + nrue_security_cap_s, + subscription_based_ue_differentiation_info_s, + unbounded_octstring > + c; void destroy_(); }; @@ -2829,14 +3907,19 @@ struct dl_nas_transport_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool ho_restrict_list_present = false; - bool subscriber_profile_idfor_rfp_present = false; - bool srvcc_operation_possible_present = false; - bool ue_radio_cap_present = false; - bool dlnaspdu_delivery_ack_request_present = false; - bool enhanced_coverage_restricted_present = false; - bool ce_mode_brestricted_present = false; - bool pending_data_ind_present = false; + bool ho_restrict_list_present = false; + bool subscriber_profile_idfor_rfp_present = false; + bool srvcc_operation_possible_present = false; + bool ue_radio_cap_present = false; + bool dlnaspdu_delivery_ack_request_present = false; + bool enhanced_coverage_restricted_present = false; + bool nrue_security_cap_present = false; + bool ce_mode_brestricted_present = false; + bool ue_cap_info_request_present = false; + bool end_ind_present = false; + bool pending_data_ind_present = false; + bool subscription_based_ue_differentiation_info_present = false; + bool add_rrm_prio_idx_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s > nas_pdu; @@ -2846,8 +3929,13 @@ struct dl_nas_transport_ies_container { ie_field_s > ue_radio_cap; ie_field_s dlnaspdu_delivery_ack_request; ie_field_s enhanced_coverage_restricted; + ie_field_s nrue_security_cap; ie_field_s ce_mode_brestricted; + ie_field_s ue_cap_info_request; + ie_field_s end_ind; ie_field_s pending_data_ind; + ie_field_s subscription_based_ue_differentiation_info; + ie_field_s > add_rrm_prio_idx; // sequence methods dl_nas_transport_ies_container(); @@ -3534,50 +4622,6 @@ struct erab_item_ies_o { static presence_e get_presence(const uint32_t& id); }; -// GBR-QosInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o gbr_qos_info_ext_ies_o; - -// E-RABQoSParameters-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o erab_qos_params_ext_ies_o; - -typedef protocol_ext_container_empty_l gbr_qos_info_ext_ies_container; - -// GBR-QosInformation ::= SEQUENCE -struct gbr_qos_info_s { - bool ext = false; - bool ie_exts_present = false; - uint64_t erab_maximum_bitrate_dl = 0; - uint64_t erab_maximum_bitrate_ul = 0; - uint64_t erab_guaranteed_bitrate_dl = 0; - uint64_t erab_guaranteed_bitrate_ul = 0; - gbr_qos_info_ext_ies_container ie_exts; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - -typedef protocol_ext_container_empty_l erab_qos_params_ext_ies_container; - -// E-RABLevelQoSParameters ::= SEQUENCE -struct erab_level_qos_params_s { - bool ext = false; - bool gbr_qos_info_present = false; - bool ie_exts_present = false; - uint16_t qci = 0; - alloc_and_retention_prio_s alloc_retention_prio; - gbr_qos_info_s gbr_qos_info; - erab_qos_params_ext_ies_container ie_exts; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - // E-RABList ::= SEQUENCE (SIZE (1..256)) OF ProtocolIE-SingleContainer{S1AP-PROTOCOL-IES : IEsSetParam} using erab_list_l = dyn_array >; @@ -3738,12 +4782,103 @@ struct erab_mod_confirm_s { void to_json(json_writer& j) const; }; +// E-RABUsageReportItem-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o erabusage_report_item_ext_ies_o; + +typedef protocol_ext_container_empty_l erabusage_report_item_ext_ies_container; + +// E-RABUsageReportItem ::= SEQUENCE +struct erabusage_report_item_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<4, true> start_timestamp; + fixed_octstring<4, true> end_timestamp; + uint64_t usage_count_ul = 0; + uint64_t usage_count_dl = 0; + erabusage_report_item_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// E-RABUsageReportItemIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +struct erabusage_report_item_ies_o { + // Value ::= OPEN TYPE + struct value_c { + struct types_opts { + enum options { erabusage_report_item, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + types type() const { return types::erabusage_report_item; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + erabusage_report_item_s& erabusage_report_item() { return c; } + const erabusage_report_item_s& erabusage_report_item() const { return c; } + + private: + erabusage_report_item_s c; + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static value_c get_value(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + +// NR-CGI-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o nr_cgi_ext_ies_o; + // E-RABNotToBeModifiedItemBearerModInd-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o erab_not_to_be_modified_item_bearer_mod_ind_ext_ies_o; // E-RABToBeModifiedItemBearerModInd-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o erab_to_be_modified_item_bearer_mod_ind_ext_ies_o; +// E-RABUsageReportList ::= SEQUENCE (SIZE (1..2)) OF ProtocolIE-SingleContainer{S1AP-PROTOCOL-IES : IEsSetParam} +using erabusage_report_list_l = bounded_array, 2>; + +typedef protocol_ext_container_empty_l nr_cgi_ext_ies_container; + +// NR-CGI ::= SEQUENCE +struct nr_cgi_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<3, true> plmn_id; + fixed_bitstring<36, false, true> nrcell_id; + nr_cgi_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PSCellInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o ps_cell_info_ext_ies_o; + +// SecondaryRATDataUsageReportItem-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o secondary_rat_data_usage_report_item_ext_ies_o; + +// SecondaryRATType ::= ENUMERATED +struct secondary_rat_type_opts { + enum options { nr, /*...*/ unlicensed, nulltype } value; + + std::string to_string() const; +}; +typedef enumerated secondary_rat_type_e; + typedef protocol_ext_container_empty_l erab_not_to_be_modified_item_bearer_mod_ind_ext_ies_container; // E-RABNotToBeModifiedItemBearerModInd ::= SEQUENCE @@ -3780,31 +4915,129 @@ struct erab_to_be_modified_item_bearer_mod_ind_s { void to_json(json_writer& j) const; }; -// E-RABNotToBeModifiedItemBearerModIndIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES -struct erab_not_to_be_modified_item_bearer_mod_ind_ies_o { +typedef protocol_ext_container_empty_l ps_cell_info_ext_ies_container; + +// PSCellInformation ::= SEQUENCE +struct ps_cell_info_s { + bool ext = false; + bool ie_exts_present = false; + nr_cgi_s ncgi; + ps_cell_info_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +typedef protocol_ext_container_empty_l secondary_rat_data_usage_report_item_ext_ies_container; + +// SecondaryRATDataUsageReportItem ::= SEQUENCE +struct secondary_rat_data_usage_report_item_s { + bool ext = false; + bool ie_exts_present = false; + uint8_t erab_id = 0; + secondary_rat_type_e secondary_rat_type; + erabusage_report_list_l erabusage_report_list; + secondary_rat_data_usage_report_item_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// E-RABNotToBeModifiedItemBearerModIndIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +struct erab_not_to_be_modified_item_bearer_mod_ind_ies_o { + // Value ::= OPEN TYPE + struct value_c { + struct types_opts { + enum options { erab_not_to_be_modified_item_bearer_mod_ind, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + types type() const { return types::erab_not_to_be_modified_item_bearer_mod_ind; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + erab_not_to_be_modified_item_bearer_mod_ind_s& erab_not_to_be_modified_item_bearer_mod_ind() { return c; } + const erab_not_to_be_modified_item_bearer_mod_ind_s& erab_not_to_be_modified_item_bearer_mod_ind() const + { + return c; + } + + private: + erab_not_to_be_modified_item_bearer_mod_ind_s c; + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static value_c get_value(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + +// E-RABToBeModifiedItemBearerModIndIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +struct erab_to_be_modified_item_bearer_mod_ind_ies_o { + // Value ::= OPEN TYPE + struct value_c { + struct types_opts { + enum options { erab_to_be_modified_item_bearer_mod_ind, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + types type() const { return types::erab_to_be_modified_item_bearer_mod_ind; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + erab_to_be_modified_item_bearer_mod_ind_s& erab_to_be_modified_item_bearer_mod_ind() { return c; } + const erab_to_be_modified_item_bearer_mod_ind_s& erab_to_be_modified_item_bearer_mod_ind() const { return c; } + + private: + erab_to_be_modified_item_bearer_mod_ind_s c; + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static value_c get_value(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + +// SecondaryRATDataUsageReportItemIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +struct secondary_rat_data_usage_report_item_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { erab_not_to_be_modified_item_bearer_mod_ind, nulltype } value; + enum options { secondary_rat_data_usage_report_item, nulltype } value; std::string to_string() const; }; typedef enumerated types; // choice methods - types type() const { return types::erab_not_to_be_modified_item_bearer_mod_ind; } + types type() const { return types::secondary_rat_data_usage_report_item; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - erab_not_to_be_modified_item_bearer_mod_ind_s& erab_not_to_be_modified_item_bearer_mod_ind() { return c; } - const erab_not_to_be_modified_item_bearer_mod_ind_s& erab_not_to_be_modified_item_bearer_mod_ind() const - { - return c; - } + secondary_rat_data_usage_report_item_s& secondary_rat_data_usage_report_item() { return c; } + const secondary_rat_data_usage_report_item_s& secondary_rat_data_usage_report_item() const { return c; } private: - erab_not_to_be_modified_item_bearer_mod_ind_s c; + secondary_rat_data_usage_report_item_s c; }; // members lookup methods @@ -3815,40 +5048,45 @@ struct erab_not_to_be_modified_item_bearer_mod_ind_ies_o { static presence_e get_presence(const uint32_t& id); }; -// E-RABToBeModifiedItemBearerModIndIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES -struct erab_to_be_modified_item_bearer_mod_ind_ies_o { - // Value ::= OPEN TYPE - struct value_c { +// Tunnel-Information-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o tunnel_info_ext_ies_o; + +// UserLocationInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +struct user_location_info_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { struct types_opts { - enum options { erab_to_be_modified_item_bearer_mod_ind, nulltype } value; + enum options { ps_cell_info, nulltype } value; std::string to_string() const; }; typedef enumerated types; // choice methods - types type() const { return types::erab_to_be_modified_item_bearer_mod_ind; } + types type() const { return types::ps_cell_info; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - erab_to_be_modified_item_bearer_mod_ind_s& erab_to_be_modified_item_bearer_mod_ind() { return c; } - const erab_to_be_modified_item_bearer_mod_ind_s& erab_to_be_modified_item_bearer_mod_ind() const { return c; } + ps_cell_info_s& ps_cell_info() { return c; } + const ps_cell_info_s& ps_cell_info() const { return c; } private: - erab_to_be_modified_item_bearer_mod_ind_s c; + ps_cell_info_s c; }; // members lookup methods static uint32_t idx_to_id(uint32_t idx); static bool is_id_valid(const uint32_t& id); static crit_e get_crit(const uint32_t& id); - static value_c get_value(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); static presence_e get_presence(const uint32_t& id); }; -// Tunnel-Information-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o tunnel_info_ext_ies_o; +// SecondaryRATDataUsageReportList ::= SEQUENCE (SIZE (1..256)) OF ProtocolIE-SingleContainer{S1AP-PROTOCOL-IES : +// IEsSetParam} +using secondary_rat_data_usage_report_list_l = + dyn_array >; typedef protocol_ext_container_empty_l tunnel_info_ext_ies_container; @@ -3868,6 +5106,21 @@ struct tunnel_info_s { void to_json(json_writer& j) const; }; +// UserLocationInformation ::= SEQUENCE +struct user_location_info_s { + bool ext = false; + bool ie_exts_present = false; + eutran_cgi_s eutran_cgi; + tai_s tai; + protocol_ext_container_l ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // E-RABModificationIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES struct erab_mod_ind_ies_o { // Value ::= OPEN TYPE @@ -3880,6 +5133,8 @@ struct erab_mod_ind_ies_o { erab_not_to_be_modified_list_bearer_mod_ind, csg_membership_info, tunnel_info_for_bbf, + secondary_rat_data_usage_report_list, + user_location_info, nulltype } value; @@ -3902,24 +5157,30 @@ struct erab_mod_ind_ies_o { uint32_t& enb_ue_s1ap_id(); erab_ie_container_list_l& erab_to_be_modified_list_bearer_mod_ind(); erab_ie_container_list_l& - erab_not_to_be_modified_list_bearer_mod_ind(); - csg_membership_info_s& csg_membership_info(); - tunnel_info_s& tunnel_info_for_bbf(); - const uint64_t& mme_ue_s1ap_id() const; - const uint32_t& enb_ue_s1ap_id() const; + erab_not_to_be_modified_list_bearer_mod_ind(); + csg_membership_info_s& csg_membership_info(); + tunnel_info_s& tunnel_info_for_bbf(); + secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list(); + user_location_info_s& user_location_info(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; const erab_ie_container_list_l& erab_to_be_modified_list_bearer_mod_ind() const; const erab_ie_container_list_l& - erab_not_to_be_modified_list_bearer_mod_ind() const; - const csg_membership_info_s& csg_membership_info() const; - const tunnel_info_s& tunnel_info_for_bbf() const; + erab_not_to_be_modified_list_bearer_mod_ind() const; + const csg_membership_info_s& csg_membership_info() const; + const tunnel_info_s& tunnel_info_for_bbf() const; + const secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list() const; + const user_location_info_s& user_location_info() const; private: types type_; choice_buffer_t, erab_ie_container_list_l, - tunnel_info_s> + secondary_rat_data_usage_report_list_l, + tunnel_info_s, + user_location_info_s> c; void destroy_(); @@ -3941,6 +5202,8 @@ struct erab_mod_ind_ies_container { bool erab_not_to_be_modified_list_bearer_mod_ind_present = false; bool csg_membership_info_present = false; bool tunnel_info_for_bbf_present = false; + bool secondary_rat_data_usage_report_list_present = false; + bool user_location_info_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s > @@ -3949,6 +5212,9 @@ struct erab_mod_ind_ies_container { erab_not_to_be_modified_list_bearer_mod_ind; ie_field_s csg_membership_info; ie_field_s tunnel_info_for_bbf; + ie_field_s, 1, 256, true> > + secondary_rat_data_usage_report_list; + ie_field_s user_location_info; // sequence methods erab_mod_ind_ies_container(); @@ -4119,14 +5385,80 @@ struct erab_to_be_modified_item_bearer_mod_req_ies_o { }; // UEAggregate-MaximumBitrates-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o ue_aggregate_maximum_bitrates_ext_ies_o; +struct ue_aggregate_maximum_bitrates_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { + struct types_opts { + enum options { + extended_u_eaggregate_maximum_bit_rate_dl, + extended_u_eaggregate_maximum_bit_rate_ul, + nulltype + } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + ext_c() = default; + ext_c(const ext_c& other); + ext_c& operator=(const ext_c& other); + ~ext_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + uint64_t& extended_u_eaggregate_maximum_bit_rate_dl(); + uint64_t& extended_u_eaggregate_maximum_bit_rate_ul(); + const uint64_t& extended_u_eaggregate_maximum_bit_rate_dl() const; + const uint64_t& extended_u_eaggregate_maximum_bit_rate_ul() const; + + private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; // E-RABToBeModifiedListBearerModReq ::= SEQUENCE (SIZE (1..256)) OF ProtocolIE-SingleContainer{S1AP-PROTOCOL-IES : // IEsSetParam} using erab_to_be_modified_list_bearer_mod_req_l = dyn_array >; -typedef protocol_ext_container_empty_l ue_aggregate_maximum_bitrates_ext_ies_container; +// SecondaryRATDataUsageRequest ::= ENUMERATED +struct secondary_rat_data_usage_request_opts { + enum options { requested, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated secondary_rat_data_usage_request_e; + +struct ue_aggregate_maximum_bitrates_ext_ies_container { + template + using ie_field_s = protocol_ext_container_item_s; + + // member variables + bool extended_u_eaggregate_maximum_bit_rate_dl_present = false; + bool extended_u_eaggregate_maximum_bit_rate_ul_present = false; + ie_field_s > extended_u_eaggregate_maximum_bit_rate_dl; + ie_field_s > extended_u_eaggregate_maximum_bit_rate_ul; + + // sequence methods + ue_aggregate_maximum_bitrates_ext_ies_container(); + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; // UEAggregateMaximumBitrate ::= SEQUENCE struct ue_aggregate_maximum_bitrate_s { @@ -4153,6 +5485,7 @@ struct erab_modify_request_ies_o { enb_ue_s1ap_id, ueaggregate_maximum_bitrate, erab_to_be_modified_list_bearer_mod_req, + secondary_rat_data_usage_request, nulltype } value; @@ -4175,10 +5508,12 @@ struct erab_modify_request_ies_o { uint32_t& enb_ue_s1ap_id(); ue_aggregate_maximum_bitrate_s& ueaggregate_maximum_bitrate(); erab_to_be_modified_list_bearer_mod_req_l& erab_to_be_modified_list_bearer_mod_req(); + secondary_rat_data_usage_request_e& secondary_rat_data_usage_request(); const uint64_t& mme_ue_s1ap_id() const; const uint32_t& enb_ue_s1ap_id() const; const ue_aggregate_maximum_bitrate_s& ueaggregate_maximum_bitrate() const; const erab_to_be_modified_list_bearer_mod_req_l& erab_to_be_modified_list_bearer_mod_req() const; + const secondary_rat_data_usage_request_e& secondary_rat_data_usage_request() const; private: types type_; @@ -4200,12 +5535,14 @@ struct erab_modify_request_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool ueaggregate_maximum_bitrate_present = false; + bool ueaggregate_maximum_bitrate_present = false; + bool secondary_rat_data_usage_request_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s ueaggregate_maximum_bitrate; ie_field_s, 1, 256, true> > - erab_to_be_modified_list_bearer_mod_req; + erab_to_be_modified_list_bearer_mod_req; + ie_field_s secondary_rat_data_usage_request; // sequence methods erab_modify_request_ies_container(); @@ -4237,6 +5574,7 @@ struct erab_modify_resp_ies_o { erab_modify_list_bearer_mod_res, erab_failed_to_modify_list, crit_diagnostics, + secondary_rat_data_usage_report_list, nulltype } value; @@ -4255,20 +5593,26 @@ struct erab_modify_resp_ies_o { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - uint64_t& mme_ue_s1ap_id(); - uint32_t& enb_ue_s1ap_id(); - erab_modify_list_bearer_mod_res_l& erab_modify_list_bearer_mod_res(); - erab_list_l& erab_failed_to_modify_list(); - crit_diagnostics_s& crit_diagnostics(); - const uint64_t& mme_ue_s1ap_id() const; - const uint32_t& enb_ue_s1ap_id() const; - const erab_modify_list_bearer_mod_res_l& erab_modify_list_bearer_mod_res() const; - const erab_list_l& erab_failed_to_modify_list() const; - const crit_diagnostics_s& crit_diagnostics() const; + uint64_t& mme_ue_s1ap_id(); + uint32_t& enb_ue_s1ap_id(); + erab_modify_list_bearer_mod_res_l& erab_modify_list_bearer_mod_res(); + erab_list_l& erab_failed_to_modify_list(); + crit_diagnostics_s& crit_diagnostics(); + secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; + const erab_modify_list_bearer_mod_res_l& erab_modify_list_bearer_mod_res() const; + const erab_list_l& erab_failed_to_modify_list() const; + const crit_diagnostics_s& crit_diagnostics() const; + const secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list() const; private: - types type_; - choice_buffer_t c; + types type_; + choice_buffer_t + c; void destroy_(); }; @@ -4286,15 +5630,18 @@ struct erab_modify_resp_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool erab_modify_list_bearer_mod_res_present = false; - bool erab_failed_to_modify_list_present = false; - bool crit_diagnostics_present = false; + bool erab_modify_list_bearer_mod_res_present = false; + bool erab_failed_to_modify_list_present = false; + bool crit_diagnostics_present = false; + bool secondary_rat_data_usage_report_list_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s, 1, 256, true> > erab_modify_list_bearer_mod_res; ie_field_s, 1, 256, true> > erab_failed_to_modify_list; ie_field_s crit_diagnostics; + ie_field_s, 1, 256, true> > + secondary_rat_data_usage_report_list; // sequence methods erab_modify_resp_ies_container(); @@ -4402,32 +5749,19 @@ struct erab_release_cmd_s { void to_json(json_writer& j) const; }; -// UserLocationInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o user_location_info_ext_ies_o; - -typedef protocol_ext_container_empty_l user_location_info_ext_ies_container; - -// UserLocationInformation ::= SEQUENCE -struct user_location_info_s { - bool ext = false; - bool ie_exts_present = false; - eutran_cgi_s eutran_cgi; - tai_s tai; - user_location_info_ext_ies_container ie_exts; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - // E-RABReleaseIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES struct erab_release_ind_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { mme_ue_s1ap_id, enb_ue_s1ap_id, erab_released_list, user_location_info, nulltype } value; + enum options { + mme_ue_s1ap_id, + enb_ue_s1ap_id, + erab_released_list, + user_location_info, + secondary_rat_data_usage_report_list, + nulltype + } value; std::string to_string() const; }; @@ -4444,18 +5778,20 @@ struct erab_release_ind_ies_o { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - uint64_t& mme_ue_s1ap_id(); - uint32_t& enb_ue_s1ap_id(); - erab_list_l& erab_released_list(); - user_location_info_s& user_location_info(); - const uint64_t& mme_ue_s1ap_id() const; - const uint32_t& enb_ue_s1ap_id() const; - const erab_list_l& erab_released_list() const; - const user_location_info_s& user_location_info() const; + uint64_t& mme_ue_s1ap_id(); + uint32_t& enb_ue_s1ap_id(); + erab_list_l& erab_released_list(); + user_location_info_s& user_location_info(); + secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; + const erab_list_l& erab_released_list() const; + const user_location_info_s& user_location_info() const; + const secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list() const; private: - types type_; - choice_buffer_t c; + types type_; + choice_buffer_t c; void destroy_(); }; @@ -4473,11 +5809,14 @@ struct erab_release_ind_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool user_location_info_present = false; + bool user_location_info_present = false; + bool secondary_rat_data_usage_report_list_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s, 1, 256, true> > erab_released_list; ie_field_s user_location_info; + ie_field_s, 1, 256, true> > + secondary_rat_data_usage_report_list; // sequence methods erab_release_ind_ies_container(); @@ -4566,6 +5905,7 @@ struct erab_release_resp_ies_o { erab_failed_to_release_list, crit_diagnostics, user_location_info, + secondary_rat_data_usage_report_list, nulltype } value; @@ -4584,22 +5924,29 @@ struct erab_release_resp_ies_o { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - uint64_t& mme_ue_s1ap_id(); - uint32_t& enb_ue_s1ap_id(); - erab_release_list_bearer_rel_comp_l& erab_release_list_bearer_rel_comp(); - erab_list_l& erab_failed_to_release_list(); - crit_diagnostics_s& crit_diagnostics(); - user_location_info_s& user_location_info(); - const uint64_t& mme_ue_s1ap_id() const; - const uint32_t& enb_ue_s1ap_id() const; - const erab_release_list_bearer_rel_comp_l& erab_release_list_bearer_rel_comp() const; - const erab_list_l& erab_failed_to_release_list() const; - const crit_diagnostics_s& crit_diagnostics() const; - const user_location_info_s& user_location_info() const; + uint64_t& mme_ue_s1ap_id(); + uint32_t& enb_ue_s1ap_id(); + erab_release_list_bearer_rel_comp_l& erab_release_list_bearer_rel_comp(); + erab_list_l& erab_failed_to_release_list(); + crit_diagnostics_s& crit_diagnostics(); + user_location_info_s& user_location_info(); + secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; + const erab_release_list_bearer_rel_comp_l& erab_release_list_bearer_rel_comp() const; + const erab_list_l& erab_failed_to_release_list() const; + const crit_diagnostics_s& crit_diagnostics() const; + const user_location_info_s& user_location_info() const; + const secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list() const; private: - types type_; - choice_buffer_t c; + types type_; + choice_buffer_t + c; void destroy_(); }; @@ -4617,10 +5964,11 @@ struct erab_release_resp_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool erab_release_list_bearer_rel_comp_present = false; - bool erab_failed_to_release_list_present = false; - bool crit_diagnostics_present = false; - bool user_location_info_present = false; + bool erab_release_list_bearer_rel_comp_present = false; + bool erab_failed_to_release_list_present = false; + bool crit_diagnostics_present = false; + bool user_location_info_present = false; + bool secondary_rat_data_usage_report_list_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s, 1, 256, true> > @@ -4628,6 +5976,8 @@ struct erab_release_resp_ies_container { ie_field_s, 1, 256, true> > erab_failed_to_release_list; ie_field_s crit_diagnostics; ie_field_s user_location_info; + ie_field_s, 1, 256, true> > + secondary_rat_data_usage_report_list; // sequence methods erab_release_resp_ies_container(); @@ -5343,133 +6693,23 @@ struct erab_to_be_switched_dl_item_ies_o { static uint32_t idx_to_id(uint32_t idx); static bool is_id_valid(const uint32_t& id); static crit_e get_crit(const uint32_t& id); - static value_c get_value(const uint32_t& id); - static presence_e get_presence(const uint32_t& id); -}; - -// E-RABToBeSwitchedULItem-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o erab_to_be_switched_ul_item_ext_ies_o; - -typedef protocol_ext_container_empty_l erab_to_be_switched_ul_item_ext_ies_container; - -// E-RABToBeSwitchedULItem ::= SEQUENCE -struct erab_to_be_switched_ul_item_s { - bool ext = false; - bool ie_exts_present = false; - uint8_t erab_id = 0; - bounded_bitstring<1, 160, true, true> transport_layer_address; - fixed_octstring<4, true> gtp_teid; - erab_to_be_switched_ul_item_ext_ies_container ie_exts; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - -// E-RABToBeSwitchedULItemIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES -struct erab_to_be_switched_ul_item_ies_o { - // Value ::= OPEN TYPE - struct value_c { - struct types_opts { - enum options { erab_to_be_switched_ul_item, nulltype } value; - - std::string to_string() const; - }; - typedef enumerated types; - - // choice methods - types type() const { return types::erab_to_be_switched_ul_item; } - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; - // getters - erab_to_be_switched_ul_item_s& erab_to_be_switched_ul_item() { return c; } - const erab_to_be_switched_ul_item_s& erab_to_be_switched_ul_item() const { return c; } - - private: - erab_to_be_switched_ul_item_s c; - }; - - // members lookup methods - static uint32_t idx_to_id(uint32_t idx); - static bool is_id_valid(const uint32_t& id); - static crit_e get_crit(const uint32_t& id); - static value_c get_value(const uint32_t& id); - static presence_e get_presence(const uint32_t& id); -}; - -// ECGI-List ::= SEQUENCE (SIZE (1..256)) OF EUTRAN-CGI -using ecgi_list_l = dyn_array; - -// ECGIListForRestart ::= SEQUENCE (SIZE (1..256)) OF EUTRAN-CGI -using ecgi_list_for_restart_l = dyn_array; - -// EHRPDMultiSectorLoadReportingResponseItem ::= SEQUENCE -struct ehrpd_multi_sector_load_report_resp_item_s { - bool ext = false; - fixed_octstring<16, true> ehrpd_sector_id; - ehrpd_sector_load_report_resp_s ehrpd_sector_load_report_resp; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - -// ENB-StatusTransfer-TransparentContainer-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o enb_status_transfer_transparent_container_ext_ies_o; - -typedef protocol_ext_container_empty_l enb_status_transfer_transparent_container_ext_ies_container; - -// ENB-StatusTransfer-TransparentContainer ::= SEQUENCE -struct enb_status_transfer_transparent_container_s { - bool ext = false; - bool ie_exts_present = false; - bearers_subject_to_status_transfer_list_l bearers_subject_to_status_transfer_list; - enb_status_transfer_transparent_container_ext_ies_container ie_exts; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - -// S-TMSI-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o s_tmsi_ext_ies_o; - -// UL-CP-SecurityInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o ul_cp_security_info_ext_ies_o; - -typedef protocol_ext_container_empty_l s_tmsi_ext_ies_container; - -// S-TMSI ::= SEQUENCE -struct s_tmsi_s { - bool ext = false; - bool ie_exts_present = false; - fixed_octstring<1, true> mmec; - fixed_octstring<4, true> m_tmsi; - s_tmsi_ext_ies_container ie_exts; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; + static value_c get_value(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); }; -typedef protocol_ext_container_empty_l ul_cp_security_info_ext_ies_container; +// E-RABToBeSwitchedULItem-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o erab_to_be_switched_ul_item_ext_ies_o; -// UL-CP-SecurityInformation ::= SEQUENCE -struct ul_cp_security_info_s { - bool ext = false; - bool ie_exts_present = false; - fixed_bitstring<16, false, true> ul_nas_mac; - fixed_bitstring<5, false, true> ul_nas_count; - ul_cp_security_info_ext_ies_container ie_exts; +typedef protocol_ext_container_empty_l erab_to_be_switched_ul_item_ext_ies_container; + +// E-RABToBeSwitchedULItem ::= SEQUENCE +struct erab_to_be_switched_ul_item_s { + bool ext = false; + bool ie_exts_present = false; + uint8_t erab_id = 0; + bounded_bitstring<1, 160, true, true> transport_layer_address; + fixed_octstring<4, true> gtp_teid; + erab_to_be_switched_ul_item_ext_ies_container ie_exts; // ... // sequence methods @@ -5478,46 +6718,28 @@ struct ul_cp_security_info_s { void to_json(json_writer& j) const; }; -// ENBCPRelocationIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES -struct enbcp_relocation_ind_ies_o { +// E-RABToBeSwitchedULItemIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +struct erab_to_be_switched_ul_item_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { enb_ue_s1ap_id, s_tmsi, eutran_cgi, tai, ul_cp_security_info, nulltype } value; - typedef uint8_t number_type; + enum options { erab_to_be_switched_ul_item, nulltype } value; std::string to_string() const; - uint8_t to_number() const; }; typedef enumerated types; // choice methods - value_c() = default; - value_c(const value_c& other); - value_c& operator=(const value_c& other); - ~value_c() { destroy_(); } - void set(types::options e = types::nulltype); - types type() const { return type_; } + types type() const { return types::erab_to_be_switched_ul_item; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - uint32_t& enb_ue_s1ap_id(); - s_tmsi_s& s_tmsi(); - eutran_cgi_s& eutran_cgi(); - tai_s& tai(); - ul_cp_security_info_s& ul_cp_security_info(); - const uint32_t& enb_ue_s1ap_id() const; - const s_tmsi_s& s_tmsi() const; - const eutran_cgi_s& eutran_cgi() const; - const tai_s& tai() const; - const ul_cp_security_info_s& ul_cp_security_info() const; + erab_to_be_switched_ul_item_s& erab_to_be_switched_ul_item() { return c; } + const erab_to_be_switched_ul_item_s& erab_to_be_switched_ul_item() const { return c; } private: - types type_; - choice_buffer_t c; - - void destroy_(); + erab_to_be_switched_ul_item_s c; }; // members lookup methods @@ -5528,28 +6750,17 @@ struct enbcp_relocation_ind_ies_o { static presence_e get_presence(const uint32_t& id); }; -struct enbcp_relocation_ind_ies_container { - template - using ie_field_s = protocol_ie_container_item_s; - - // member variables - ie_field_s > enb_ue_s1ap_id; - ie_field_s s_tmsi; - ie_field_s eutran_cgi; - ie_field_s tai; - ie_field_s ul_cp_security_info; +// ECGI-List ::= SEQUENCE (SIZE (1..256)) OF EUTRAN-CGI +using ecgi_list_l = dyn_array; - // sequence methods - enbcp_relocation_ind_ies_container(); - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; +// ECGIListForRestart ::= SEQUENCE (SIZE (1..256)) OF EUTRAN-CGI +using ecgi_list_for_restart_l = dyn_array; -// ENBCPRelocationIndication ::= SEQUENCE -struct enbcp_relocation_ind_s { - bool ext = false; - enbcp_relocation_ind_ies_container protocol_ies; +// EHRPDMultiSectorLoadReportingResponseItem ::= SEQUENCE +struct ehrpd_multi_sector_load_report_resp_item_s { + bool ext = false; + fixed_octstring<16, true> ehrpd_sector_id; + ehrpd_sector_load_report_resp_s ehrpd_sector_load_report_resp; // ... // sequence methods @@ -5600,6 +6811,9 @@ using enb_indirect_x2_transport_layer_addresses_l = bounded_array; +// Global-en-gNB-ID-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o global_en_g_nb_id_ext_ies_o; + // MutingPatternInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o muting_pattern_info_ext_ies_o; @@ -5661,11 +6875,34 @@ struct time_synchronisation_info_ext_ies_o { static presence_e get_presence(const uint32_t& id); }; +// EN-DCSONeNBIdentification-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o en_dcso_nenb_identif_ext_ies_o; + +// EN-DCSONengNBIdentification-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o en_dcso_neng_nb_identif_ext_ies_o; + // ENBX2TLAs ::= SEQUENCE (SIZE (1..2)) OF BIT STRING (SIZE (1..160,...)) using enbx2_tlas_l = bounded_array, 2>; -// ListeningSubframePattern-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o listening_sf_pattern_ext_ies_o; +// FiveGSTAI-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o five_gstai_ext_ies_o; + +typedef protocol_ext_container_empty_l global_en_g_nb_id_ext_ies_container; + +// Global-en-gNB-ID ::= SEQUENCE +struct global_en_g_nb_id_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<3, true> plm_nid; + bounded_bitstring<22, 32, true, true> en_g_nb_id; + global_en_g_nb_id_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; typedef protocol_ext_container_empty_l muting_pattern_info_ext_ies_container; @@ -5763,131 +7000,402 @@ struct x2_tnl_cfg_info_ext_ies_o { const enbx2_ext_tlas_l& enbx2_extended_transport_layer_addresses() const; const enb_indirect_x2_transport_layer_addresses_l& enb_indirect_x2_transport_layer_addresses() const; - private: - types type_; - choice_buffer_t c; + private: + types type_; + choice_buffer_t c; + + void destroy_(); + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + +typedef protocol_ext_container_empty_l en_dcso_nenb_identif_ext_ies_container; + +// EN-DCSONeNBIdentification ::= SEQUENCE +struct en_dcso_nenb_identif_s { + bool ext = false; + bool ie_exts_present = false; + global_enb_id_s globalenbid; + tai_s sel_tai; + en_dcso_nenb_identif_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +typedef protocol_ext_container_empty_l en_dcso_neng_nb_identif_ext_ies_container; + +// EN-DCSONengNBIdentification ::= SEQUENCE +struct en_dcso_neng_nb_identif_s { + bool ext = false; + bool ie_exts_present = false; + global_en_g_nb_id_s globaleng_nbid; + tai_s sel_tai; + en_dcso_neng_nb_identif_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// EN-DCTransferTypeReply-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o en_dc_transfer_type_reply_ext_ies_o; + +// EN-DCTransferTypeRequest-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o en_dc_transfer_type_request_ext_ies_o; + +typedef protocol_ext_container_empty_l five_gstai_ext_ies_container; + +// FiveGSTAI ::= SEQUENCE +struct five_gstai_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<3, true> plm_nid; + fixed_octstring<3, true> five_gstac; + five_gstai_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SONInformation-ExtensionIE ::= OBJECT SET OF S1AP-PROTOCOL-IES +struct son_info_ext_ie_o { + // Value ::= OPEN TYPE + struct value_c { + struct types_opts { + enum options { son_info_report, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + types type() const { return types::son_info_report; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + son_info_report_c& son_info_report() { return c; } + const son_info_report_c& son_info_report() const { return c; } + + private: + son_info_report_c c; + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static value_c get_value(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + +// SONInformationReply-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +struct son_info_reply_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { + struct types_opts { + enum options { time_synchronisation_info, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + types type() const { return types::time_synchronisation_info; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + time_synchronisation_info_s& time_synchronisation_info() { return c; } + const time_synchronisation_info_s& time_synchronisation_info() const { return c; } + + private: + time_synchronisation_info_s c; + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + +struct x2_tnl_cfg_info_ext_ies_container { + template + using ie_field_s = protocol_ext_container_item_s; + + // member variables + bool enbx2_extended_transport_layer_addresses_present = false; + bool enb_indirect_x2_transport_layer_addresses_present = false; + ie_field_s > enbx2_extended_transport_layer_addresses; + ie_field_s, 1, 2, true> > enb_indirect_x2_transport_layer_addresses; + + // sequence methods + x2_tnl_cfg_info_ext_ies_container(); + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// X2TNLConfigurationInfo ::= SEQUENCE +struct x2_tnl_cfg_info_s { + bool ext = false; + bool ie_exts_present = false; + enbx2_tlas_l enbx2_transport_layer_addresses; + x2_tnl_cfg_info_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +typedef protocol_ext_container_empty_l en_dc_transfer_type_reply_ext_ies_container; + +// EN-DCTransferTypeReply ::= SEQUENCE +struct en_dc_transfer_type_reply_s { + bool ext = false; + bool ie_exts_present = false; + en_dcso_neng_nb_identif_s sourceeng_nb; + en_dcso_nenb_identif_s targetenb; + en_dc_transfer_type_reply_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +typedef protocol_ext_container_empty_l en_dc_transfer_type_request_ext_ies_container; - void destroy_(); - }; +// EN-DCTransferTypeRequest ::= SEQUENCE +struct en_dc_transfer_type_request_s { + bool ext = false; + bool targetenb_present = false; + bool associated_tai_present = false; + bool broadcast5_gstai_present = false; + bool ie_exts_present = false; + en_dcso_nenb_identif_s sourceenb; + en_dcso_neng_nb_identif_s targeteng_nb; + en_dcso_nenb_identif_s targetenb; + tai_s associated_tai; + five_gstai_s broadcast5_gstai; + en_dc_transfer_type_request_ext_ies_container ie_exts; + // ... - // members lookup methods - static uint32_t idx_to_id(uint32_t idx); - static bool is_id_valid(const uint32_t& id); - static crit_e get_crit(const uint32_t& id); - static ext_c get_ext(const uint32_t& id); - static presence_e get_presence(const uint32_t& id); + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; }; -// ENB-ID ::= CHOICE -struct enb_id_c { +// SONInformationReply ::= SEQUENCE +struct son_info_reply_s { + bool ext = false; + bool x2_tnl_cfg_info_present = false; + bool ie_exts_present = false; + x2_tnl_cfg_info_s x2_tnl_cfg_info; + protocol_ext_container_l ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SONInformationRequest ::= ENUMERATED +struct son_info_request_opts { + enum options { x2_tnl_cfg_info, /*...*/ time_synchronisation_info, activ_muting, deactiv_muting, nulltype } value; + typedef uint8_t number_type; + + std::string to_string() const; + uint8_t to_number() const; +}; +typedef enumerated son_info_request_e; + +// EN-DCSONConfigurationTransfer-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o en_dcson_cfg_transfer_ext_ies_o; + +// EN-DCSONTransferType ::= CHOICE +struct en_dcson_transfer_type_c { struct types_opts { - enum options { macro_enb_id, home_enb_id, /*...*/ short_macro_enb_id, long_macro_enb_id, nulltype } value; + enum options { request, reply, /*...*/ nulltype } value; std::string to_string() const; }; - typedef enumerated types; + typedef enumerated types; // choice methods - enb_id_c() = default; - enb_id_c(const enb_id_c& other); - enb_id_c& operator=(const enb_id_c& other); - ~enb_id_c() { destroy_(); } + en_dcson_transfer_type_c() = default; + en_dcson_transfer_type_c(const en_dcson_transfer_type_c& other); + en_dcson_transfer_type_c& operator=(const en_dcson_transfer_type_c& other); + ~en_dcson_transfer_type_c() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - fixed_bitstring<20, false, true>& macro_enb_id() + en_dc_transfer_type_request_s& request() { - assert_choice_type("macroENB-ID", type_.to_string(), "ENB-ID"); - return c.get >(); + assert_choice_type("request", type_.to_string(), "EN-DCSONTransferType"); + return c.get(); } - fixed_bitstring<28, false, true>& home_enb_id() + en_dc_transfer_type_reply_s& reply() { - assert_choice_type("homeENB-ID", type_.to_string(), "ENB-ID"); - return c.get >(); + assert_choice_type("reply", type_.to_string(), "EN-DCSONTransferType"); + return c.get(); } - fixed_bitstring<18, false, true>& short_macro_enb_id() + const en_dc_transfer_type_request_s& request() const { - assert_choice_type("short-macroENB-ID", type_.to_string(), "ENB-ID"); - return c.get >(); + assert_choice_type("request", type_.to_string(), "EN-DCSONTransferType"); + return c.get(); } - fixed_bitstring<21, false, true>& long_macro_enb_id() + const en_dc_transfer_type_reply_s& reply() const { - assert_choice_type("long-macroENB-ID", type_.to_string(), "ENB-ID"); - return c.get >(); + assert_choice_type("reply", type_.to_string(), "EN-DCSONTransferType"); + return c.get(); } - const fixed_bitstring<20, false, true>& macro_enb_id() const + en_dc_transfer_type_request_s& set_request() { - assert_choice_type("macroENB-ID", type_.to_string(), "ENB-ID"); - return c.get >(); + set(types::request); + return c.get(); } - const fixed_bitstring<28, false, true>& home_enb_id() const + en_dc_transfer_type_reply_s& set_reply() { - assert_choice_type("homeENB-ID", type_.to_string(), "ENB-ID"); - return c.get >(); + set(types::reply); + return c.get(); } - const fixed_bitstring<18, false, true>& short_macro_enb_id() const + +private: + types type_; + choice_buffer_t c; + + void destroy_(); +}; + +// SONInformation ::= CHOICE +struct son_info_c { + struct types_opts { + enum options { son_info_request, son_info_reply, /*...*/ son_info_ext, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + son_info_c() = default; + son_info_c(const son_info_c& other); + son_info_c& operator=(const son_info_c& other); + ~son_info_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + son_info_request_e& son_info_request() { - assert_choice_type("short-macroENB-ID", type_.to_string(), "ENB-ID"); - return c.get >(); + assert_choice_type("sONInformationRequest", type_.to_string(), "SONInformation"); + return c.get(); } - const fixed_bitstring<21, false, true>& long_macro_enb_id() const + son_info_reply_s& son_info_reply() { - assert_choice_type("long-macroENB-ID", type_.to_string(), "ENB-ID"); - return c.get >(); + assert_choice_type("sONInformationReply", type_.to_string(), "SONInformation"); + return c.get(); } - fixed_bitstring<20, false, true>& set_macro_enb_id() + protocol_ie_single_container_s& son_info_ext() { - set(types::macro_enb_id); - return c.get >(); + assert_choice_type("sONInformation-Extension", type_.to_string(), "SONInformation"); + return c.get >(); } - fixed_bitstring<28, false, true>& set_home_enb_id() + const son_info_request_e& son_info_request() const { - set(types::home_enb_id); - return c.get >(); + assert_choice_type("sONInformationRequest", type_.to_string(), "SONInformation"); + return c.get(); } - fixed_bitstring<18, false, true>& set_short_macro_enb_id() + const son_info_reply_s& son_info_reply() const { - set(types::short_macro_enb_id); - return c.get >(); + assert_choice_type("sONInformationReply", type_.to_string(), "SONInformation"); + return c.get(); } - fixed_bitstring<21, false, true>& set_long_macro_enb_id() + const protocol_ie_single_container_s& son_info_ext() const { - set(types::long_macro_enb_id); - return c.get >(); + assert_choice_type("sONInformation-Extension", type_.to_string(), "SONInformation"); + return c.get >(); + } + son_info_request_e& set_son_info_request() + { + set(types::son_info_request); + return c.get(); + } + son_info_reply_s& set_son_info_reply() + { + set(types::son_info_reply); + return c.get(); + } + protocol_ie_single_container_s& set_son_info_ext() + { + set(types::son_info_ext); + return c.get >(); } private: - types type_; - choice_buffer_t > c; + types type_; + choice_buffer_t, son_info_reply_s> c; void destroy_(); }; -// GlobalENB-ID-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o global_enb_id_ext_ies_o; +typedef protocol_ext_container_empty_l en_dcson_cfg_transfer_ext_ies_container; -typedef protocol_ext_container_empty_l listening_sf_pattern_ext_ies_container; +// EN-DCSONConfigurationTransfer ::= SEQUENCE +struct en_dcson_cfg_transfer_s { + bool ext = false; + bool x2_tnl_cfg_info_present = false; + bool ie_exts_present = false; + en_dcson_transfer_type_c transfertype; + son_info_c son_info; + x2_tnl_cfg_info_s x2_tnl_cfg_info; + en_dcson_cfg_transfer_ext_ies_container ie_exts; + // ... -// ListeningSubframePattern ::= SEQUENCE -struct listening_sf_pattern_s { - struct pattern_period_opts { - enum options { ms1280, ms2560, ms5120, ms10240, /*...*/ nulltype } value; - typedef uint16_t number_type; + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; - std::string to_string() const; - uint16_t to_number() const; - }; - typedef enumerated pattern_period_e_; +// ENB-StatusTransfer-TransparentContainer-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o enb_status_transfer_transparent_container_ext_ies_o; - // member variables - bool ext = false; - bool ie_exts_present = false; - pattern_period_e_ pattern_period; - uint16_t pattern_offset = 0; - listening_sf_pattern_ext_ies_container ie_exts; +typedef protocol_ext_container_empty_l enb_status_transfer_transparent_container_ext_ies_container; + +// ENB-StatusTransfer-TransparentContainer ::= SEQUENCE +struct enb_status_transfer_transparent_container_s { + bool ext = false; + bool ie_exts_present = false; + bearers_subject_to_status_transfer_list_l bearers_subject_to_status_transfer_list; + enb_status_transfer_transparent_container_ext_ies_container ie_exts; // ... // sequence methods @@ -5896,96 +7404,118 @@ struct listening_sf_pattern_s { void to_json(json_writer& j) const; }; -// SONInformation-ExtensionIE ::= OBJECT SET OF S1AP-PROTOCOL-IES -struct son_info_ext_ie_o { - // Value ::= OPEN TYPE - struct value_c { - struct types_opts { - enum options { son_info_report, nulltype } value; +// S-TMSI-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o s_tmsi_ext_ies_o; - std::string to_string() const; - }; - typedef enumerated types; +// UL-CP-SecurityInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o ul_cp_security_info_ext_ies_o; - // choice methods - types type() const { return types::son_info_report; } - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; - // getters - son_info_report_c& son_info_report() { return c; } - const son_info_report_c& son_info_report() const { return c; } +typedef protocol_ext_container_empty_l s_tmsi_ext_ies_container; - private: - son_info_report_c c; - }; +// S-TMSI ::= SEQUENCE +struct s_tmsi_s { + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<1, true> mmec; + fixed_octstring<4, true> m_tmsi; + s_tmsi_ext_ies_container ie_exts; + // ... - // members lookup methods - static uint32_t idx_to_id(uint32_t idx); - static bool is_id_valid(const uint32_t& id); - static crit_e get_crit(const uint32_t& id); - static value_c get_value(const uint32_t& id); - static presence_e get_presence(const uint32_t& id); + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; }; -// SONInformationReply-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -struct son_info_reply_ext_ies_o { - // Extension ::= OPEN TYPE - struct ext_c { +typedef protocol_ext_container_empty_l ul_cp_security_info_ext_ies_container; + +// UL-CP-SecurityInformation ::= SEQUENCE +struct ul_cp_security_info_s { + bool ext = false; + bool ie_exts_present = false; + fixed_bitstring<16, false, true> ul_nas_mac; + fixed_bitstring<5, false, true> ul_nas_count; + ul_cp_security_info_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ENBCPRelocationIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +struct enbcp_relocation_ind_ies_o { + // Value ::= OPEN TYPE + struct value_c { struct types_opts { - enum options { time_synchronisation_info, nulltype } value; + enum options { enb_ue_s1ap_id, s_tmsi, eutran_cgi, tai, ul_cp_security_info, nulltype } value; + typedef uint8_t number_type; std::string to_string() const; + uint8_t to_number() const; }; typedef enumerated types; // choice methods - types type() const { return types::time_synchronisation_info; } + value_c() = default; + value_c(const value_c& other); + value_c& operator=(const value_c& other); + ~value_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - time_synchronisation_info_s& time_synchronisation_info() { return c; } - const time_synchronisation_info_s& time_synchronisation_info() const { return c; } + uint32_t& enb_ue_s1ap_id(); + s_tmsi_s& s_tmsi(); + eutran_cgi_s& eutran_cgi(); + tai_s& tai(); + ul_cp_security_info_s& ul_cp_security_info(); + const uint32_t& enb_ue_s1ap_id() const; + const s_tmsi_s& s_tmsi() const; + const eutran_cgi_s& eutran_cgi() const; + const tai_s& tai() const; + const ul_cp_security_info_s& ul_cp_security_info() const; private: - time_synchronisation_info_s c; + types type_; + choice_buffer_t c; + + void destroy_(); }; // members lookup methods static uint32_t idx_to_id(uint32_t idx); static bool is_id_valid(const uint32_t& id); static crit_e get_crit(const uint32_t& id); - static ext_c get_ext(const uint32_t& id); + static value_c get_value(const uint32_t& id); static presence_e get_presence(const uint32_t& id); }; -// SynchronisationInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o synchronisation_info_ext_ies_o; - -struct x2_tnl_cfg_info_ext_ies_container { - template - using ie_field_s = protocol_ext_container_item_s; +struct enbcp_relocation_ind_ies_container { + template + using ie_field_s = protocol_ie_container_item_s; // member variables - bool enbx2_extended_transport_layer_addresses_present = false; - bool enb_indirect_x2_transport_layer_addresses_present = false; - ie_field_s > enbx2_extended_transport_layer_addresses; - ie_field_s, 1, 2, true> > enb_indirect_x2_transport_layer_addresses; + ie_field_s > enb_ue_s1ap_id; + ie_field_s s_tmsi; + ie_field_s eutran_cgi; + ie_field_s tai; + ie_field_s ul_cp_security_info; // sequence methods - x2_tnl_cfg_info_ext_ies_container(); + enbcp_relocation_ind_ies_container(); SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; -// X2TNLConfigurationInfo ::= SEQUENCE -struct x2_tnl_cfg_info_s { - bool ext = false; - bool ie_exts_present = false; - enbx2_tlas_l enbx2_transport_layer_addresses; - x2_tnl_cfg_info_ext_ies_container ie_exts; +// ENBCPRelocationIndication ::= SEQUENCE +struct enbcp_relocation_ind_s { + bool ext = false; + enbcp_relocation_ind_ies_container protocol_ies; // ... // sequence methods @@ -5994,30 +7524,28 @@ struct x2_tnl_cfg_info_s { void to_json(json_writer& j) const; }; -typedef protocol_ext_container_empty_l global_enb_id_ext_ies_container; +// ListeningSubframePattern-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o listening_sf_pattern_ext_ies_o; -// Global-ENB-ID ::= SEQUENCE -struct global_enb_id_s { - bool ext = false; - bool ie_exts_present = false; - fixed_octstring<3, true> plm_nid; - enb_id_c enb_id; - global_enb_id_ext_ies_container ie_exts; - // ... +typedef protocol_ext_container_empty_l listening_sf_pattern_ext_ies_container; - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; +// ListeningSubframePattern ::= SEQUENCE +struct listening_sf_pattern_s { + struct pattern_period_opts { + enum options { ms1280, ms2560, ms5120, ms10240, /*...*/ nulltype } value; + typedef uint16_t number_type; -// SONInformationReply ::= SEQUENCE -struct son_info_reply_s { - bool ext = false; - bool x2_tnl_cfg_info_present = false; - bool ie_exts_present = false; - x2_tnl_cfg_info_s x2_tnl_cfg_info; - protocol_ext_container_l ie_exts; + std::string to_string() const; + uint16_t to_number() const; + }; + typedef enumerated pattern_period_e_; + + // member variables + bool ext = false; + bool ie_exts_present = false; + pattern_period_e_ pattern_period; + uint16_t pattern_offset = 0; + listening_sf_pattern_ext_ies_container ie_exts; // ... // sequence methods @@ -6026,15 +7554,8 @@ struct son_info_reply_s { void to_json(json_writer& j) const; }; -// SONInformationRequest ::= ENUMERATED -struct son_info_request_opts { - enum options { x2_tnl_cfg_info, /*...*/ time_synchronisation_info, activ_muting, deactiv_muting, nulltype } value; - typedef uint8_t number_type; - - std::string to_string() const; - uint8_t to_number() const; -}; -typedef enumerated son_info_request_e; +// SynchronisationInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o synchronisation_info_ext_ies_o; // SourceeNB-ID-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o sourceenb_id_ext_ies_o; @@ -6107,79 +7628,6 @@ struct son_cfg_transfer_ext_ies_o { static presence_e get_presence(const uint32_t& id); }; -// SONInformation ::= CHOICE -struct son_info_c { - struct types_opts { - enum options { son_info_request, son_info_reply, /*...*/ son_info_ext, nulltype } value; - - std::string to_string() const; - }; - typedef enumerated types; - - // choice methods - son_info_c() = default; - son_info_c(const son_info_c& other); - son_info_c& operator=(const son_info_c& other); - ~son_info_c() { destroy_(); } - void set(types::options e = types::nulltype); - types type() const { return type_; } - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; - // getters - son_info_request_e& son_info_request() - { - assert_choice_type("sONInformationRequest", type_.to_string(), "SONInformation"); - return c.get(); - } - son_info_reply_s& son_info_reply() - { - assert_choice_type("sONInformationReply", type_.to_string(), "SONInformation"); - return c.get(); - } - protocol_ie_single_container_s& son_info_ext() - { - assert_choice_type("sONInformation-Extension", type_.to_string(), "SONInformation"); - return c.get >(); - } - const son_info_request_e& son_info_request() const - { - assert_choice_type("sONInformationRequest", type_.to_string(), "SONInformation"); - return c.get(); - } - const son_info_reply_s& son_info_reply() const - { - assert_choice_type("sONInformationReply", type_.to_string(), "SONInformation"); - return c.get(); - } - const protocol_ie_single_container_s& son_info_ext() const - { - assert_choice_type("sONInformation-Extension", type_.to_string(), "SONInformation"); - return c.get >(); - } - son_info_request_e& set_son_info_request() - { - set(types::son_info_request); - return c.get(); - } - son_info_reply_s& set_son_info_reply() - { - set(types::son_info_reply); - return c.get(); - } - protocol_ie_single_container_s& set_son_info_ext() - { - set(types::son_info_ext); - return c.get >(); - } - -private: - types type_; - choice_buffer_t, son_info_reply_s> c; - - void destroy_(); -}; - typedef protocol_ext_container_empty_l sourceenb_id_ext_ies_container; // SourceeNB-ID ::= SEQUENCE @@ -6250,23 +7698,33 @@ struct enb_cfg_transfer_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { son_cfg_transfer_ect, nulltype } value; + enum options { son_cfg_transfer_ect, en_dcson_cfg_transfer_ect, nulltype } value; std::string to_string() const; }; typedef enumerated types; // choice methods - types type() const { return types::son_cfg_transfer_ect; } + value_c() = default; + value_c(const value_c& other); + value_c& operator=(const value_c& other); + ~value_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - son_cfg_transfer_s& son_cfg_transfer_ect() { return c; } - const son_cfg_transfer_s& son_cfg_transfer_ect() const { return c; } + son_cfg_transfer_s& son_cfg_transfer_ect(); + en_dcson_cfg_transfer_s& en_dcson_cfg_transfer_ect(); + const son_cfg_transfer_s& son_cfg_transfer_ect() const; + const en_dcson_cfg_transfer_s& en_dcson_cfg_transfer_ect() const; private: - son_cfg_transfer_s c; + types type_; + choice_buffer_t c; + + void destroy_(); }; // members lookup methods @@ -6277,65 +7735,27 @@ struct enb_cfg_transfer_ies_o { static presence_e get_presence(const uint32_t& id); }; -// ENBConfigurationTransfer ::= SEQUENCE -struct enb_cfg_transfer_s { - bool ext = false; - protocol_ie_container_l protocol_ies; - // ... +struct enb_cfg_transfer_ies_container { + template + using ie_field_s = protocol_ie_container_item_s; + + // member variables + bool son_cfg_transfer_ect_present = false; + bool en_dcson_cfg_transfer_ect_present = false; + ie_field_s son_cfg_transfer_ect; + ie_field_s en_dcson_cfg_transfer_ect; // sequence methods + enb_cfg_transfer_ies_container(); SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; -// RAT-Type ::= ENUMERATED -struct rat_type_opts { - enum options { nbiot, /*...*/ nulltype } value; - - std::string to_string() const; -}; -typedef enumerated rat_type_e; - -// SupportedTAs-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -struct supported_tas_item_ext_ies_o { - // Extension ::= OPEN TYPE - struct ext_c { - struct types_opts { - enum options { rat_type, nulltype } value; - - std::string to_string() const; - }; - typedef enumerated types; - - // choice methods - types type() const { return types::rat_type; } - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; - // getters - rat_type_e& rat_type() { return c; } - const rat_type_e& rat_type() const { return c; } - - private: - rat_type_e c; - }; - - // members lookup methods - static uint32_t idx_to_id(uint32_t idx); - static bool is_id_valid(const uint32_t& id); - static crit_e get_crit(const uint32_t& id); - static ext_c get_ext(const uint32_t& id); - static presence_e get_presence(const uint32_t& id); -}; - -// SupportedTAs-Item ::= SEQUENCE -struct supported_tas_item_s { - bool ext = false; - bool ie_exts_present = false; - fixed_octstring<2, true> tac; - bplmns_l broadcast_plmns; - protocol_ext_container_l ie_exts; +// ENBConfigurationTransfer ::= SEQUENCE +struct enb_cfg_transfer_s { + bool ext = false; + enb_cfg_transfer_ies_container protocol_ies; // ... // sequence methods @@ -6364,9 +7784,6 @@ struct paging_drx_opts { }; typedef enumerated paging_drx_e; -// SupportedTAs ::= SEQUENCE (SIZE (1..256)) OF SupportedTAs-Item -using supported_tas_l = dyn_array; - // ENBConfigurationUpdateIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES struct enb_cfg_upd_ies_o { // Value ::= OPEN TYPE @@ -6378,6 +7795,8 @@ struct enb_cfg_upd_ies_o { csg_id_list, default_paging_drx, nb_io_t_default_paging_drx, + connectedeng_nb_to_add_list, + connectedeng_nb_to_rem_list, nulltype } value; @@ -6401,15 +7820,19 @@ struct enb_cfg_upd_ies_o { csg_id_list_l& csg_id_list(); paging_drx_e& default_paging_drx(); nb_io_t_default_paging_drx_e& nb_io_t_default_paging_drx(); + connectedeng_nb_list_l& connectedeng_nb_to_add_list(); + connectedeng_nb_list_l& connectedeng_nb_to_rem_list(); const printable_string<1, 150, true, true>& enbname() const; const supported_tas_l& supported_tas() const; const csg_id_list_l& csg_id_list() const; const paging_drx_e& default_paging_drx() const; const nb_io_t_default_paging_drx_e& nb_io_t_default_paging_drx() const; + const connectedeng_nb_list_l& connectedeng_nb_to_add_list() const; + const connectedeng_nb_list_l& connectedeng_nb_to_rem_list() const; private: - types type_; - choice_buffer_t, supported_tas_l> c; + types type_; + choice_buffer_t, supported_tas_l> c; void destroy_(); }; @@ -6427,16 +7850,20 @@ struct enb_cfg_upd_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool enbname_present = false; - bool supported_tas_present = false; - bool csg_id_list_present = false; - bool default_paging_drx_present = false; - bool nb_io_t_default_paging_drx_present = false; - ie_field_s > enbname; - ie_field_s > supported_tas; - ie_field_s > csg_id_list; - ie_field_s default_paging_drx; - ie_field_s nb_io_t_default_paging_drx; + bool enbname_present = false; + bool supported_tas_present = false; + bool csg_id_list_present = false; + bool default_paging_drx_present = false; + bool nb_io_t_default_paging_drx_present = false; + bool connectedeng_nb_to_add_list_present = false; + bool connectedeng_nb_to_rem_list_present = false; + ie_field_s > enbname; + ie_field_s > supported_tas; + ie_field_s > csg_id_list; + ie_field_s default_paging_drx; + ie_field_s nb_io_t_default_paging_drx; + ie_field_s > connectedeng_nb_to_add_list; + ie_field_s > connectedeng_nb_to_rem_list; // sequence methods enb_cfg_upd_ies_container(); @@ -6906,7 +8333,7 @@ struct error_ind_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { mme_ue_s1ap_id, enb_ue_s1ap_id, cause, crit_diagnostics, nulltype } value; + enum options { mme_ue_s1ap_id, enb_ue_s1ap_id, cause, crit_diagnostics, s_tmsi, nulltype } value; std::string to_string() const; }; @@ -6927,14 +8354,16 @@ struct error_ind_ies_o { uint32_t& enb_ue_s1ap_id(); cause_c& cause(); crit_diagnostics_s& crit_diagnostics(); + s_tmsi_s& s_tmsi(); const uint64_t& mme_ue_s1ap_id() const; const uint32_t& enb_ue_s1ap_id() const; const cause_c& cause() const; const crit_diagnostics_s& crit_diagnostics() const; + const s_tmsi_s& s_tmsi() const; private: - types type_; - choice_buffer_t c; + types type_; + choice_buffer_t c; void destroy_(); }; @@ -6956,10 +8385,12 @@ struct error_ind_ies_container { bool enb_ue_s1ap_id_present = false; bool cause_present = false; bool crit_diagnostics_present = false; + bool s_tmsi_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s cause; ie_field_s crit_diagnostics; + ie_field_s s_tmsi; // sequence methods error_ind_ies_container(); @@ -7310,11 +8741,22 @@ struct ho_cancel_ack_s { // HandoverType ::= ENUMERATED struct handov_type_opts { - enum options { intralte, ltetoutran, ltetogeran, utrantolte, gerantolte, /*...*/ nulltype } value; + enum options { + intralte, + ltetoutran, + ltetogeran, + utrantolte, + gerantolte, + /*...*/ eps_to_minus5gs, + fivegs_to_eps, + nulltype + } value; + typedef int8_t number_type; std::string to_string() const; + int8_t to_number() const; }; -typedef enumerated handov_type_e; +typedef enumerated handov_type_e; // HandoverCommandIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES struct ho_cmd_ies_o { @@ -7506,7 +8948,16 @@ struct ho_notify_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { mme_ue_s1ap_id, enb_ue_s1ap_id, eutran_cgi, tai, tunnel_info_for_bbf, lhn_id, nulltype } value; + enum options { + mme_ue_s1ap_id, + enb_ue_s1ap_id, + eutran_cgi, + tai, + tunnel_info_for_bbf, + lhn_id, + ps_cell_info, + nulltype + } value; std::string to_string() const; }; @@ -7529,16 +8980,18 @@ struct ho_notify_ies_o { tai_s& tai(); tunnel_info_s& tunnel_info_for_bbf(); bounded_octstring<32, 256, true>& lhn_id(); + ps_cell_info_s& ps_cell_info(); const uint64_t& mme_ue_s1ap_id() const; const uint32_t& enb_ue_s1ap_id() const; const eutran_cgi_s& eutran_cgi() const; const tai_s& tai() const; const tunnel_info_s& tunnel_info_for_bbf() const; const bounded_octstring<32, 256, true>& lhn_id() const; + const ps_cell_info_s& ps_cell_info() const; private: - types type_; - choice_buffer_t, eutran_cgi_s, tai_s, tunnel_info_s> c; + types type_; + choice_buffer_t, eutran_cgi_s, ps_cell_info_s, tai_s, tunnel_info_s> c; void destroy_(); }; @@ -7558,12 +9011,14 @@ struct ho_notify_ies_container { // member variables bool tunnel_info_for_bbf_present = false; bool lhn_id_present = false; + bool ps_cell_info_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s eutran_cgi; ie_field_s tai; ie_field_s tunnel_info_for_bbf; ie_field_s > lhn_id; + ie_field_s ps_cell_info; // sequence methods ho_notify_ies_container(); @@ -7717,13 +9172,25 @@ typedef s1ap_protocol_ext_empty_o m3_cfg_ext_ies_o; // M3period ::= ENUMERATED struct m3period_opts { - enum options { ms100, ms1000, ms10000, /*...*/ nulltype } value; + enum options { + ms100, + ms1000, + ms10000, + /*...*/ ms1024, + ms1280, + ms2048, + ms2560, + ms5120, + ms10240, + min1, + nulltype + } value; typedef uint16_t number_type; std::string to_string() const; uint16_t to_number() const; }; -typedef enumerated m3period_e; +typedef enumerated m3period_e; // M4Configuration-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o m4_cfg_ext_ies_o; @@ -7780,6 +9247,20 @@ typedef s1ap_protocol_ext_empty_o m7_cfg_ext_ies_o; // MBSFN-ResultToLog ::= SEQUENCE (SIZE (1..8)) OF MBSFN-ResultToLogInfo using mbsfn_result_to_log_l = dyn_array; +// WLANMeasConfig ::= ENUMERATED +struct wlan_meas_cfg_opts { + enum options { setup, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated wlan_meas_cfg_e; + +// WLANMeasConfigNameList ::= SEQUENCE (SIZE (1..4)) OF OCTET STRING (SIZE (1..32)) +using wlan_meas_cfg_name_list_l = bounded_array, 4>; + +// WLANMeasurementConfiguration-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o wlan_meas_cfg_ext_ies_o; + typedef protocol_ext_container_empty_l logged_mbsfnmdt_ext_ies_container; // LoggedMBSFNMDT ::= SEQUENCE @@ -7984,12 +9465,58 @@ struct report_interv_mdt_opts { }; typedef enumerated report_interv_mdt_e; +typedef protocol_ext_container_empty_l wlan_meas_cfg_ext_ies_container; + +// WLANMeasurementConfiguration ::= SEQUENCE +struct wlan_meas_cfg_s { + struct wlan_rssi_opts { + enum options { true_value, /*...*/ nulltype } value; + + std::string to_string() const; + }; + typedef enumerated wlan_rssi_e_; + struct wlan_rtt_opts { + enum options { true_value, /*...*/ nulltype } value; + + std::string to_string() const; + }; + typedef enumerated wlan_rtt_e_; + + // member variables + bool ext = false; + bool wlan_meas_cfg_name_list_present = false; + bool wlan_rssi_present = false; + bool wlan_rtt_present = false; + bool ie_exts_present = false; + wlan_meas_cfg_e wlan_meas_cfg; + wlan_meas_cfg_name_list_l wlan_meas_cfg_name_list; + wlan_rssi_e_ wlan_rssi; + wlan_rtt_e_ wlan_rtt; + wlan_meas_cfg_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // ImmediateMDT-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION struct immediate_mdt_ext_ies_o { // Extension ::= OPEN TYPE struct ext_c { struct types_opts { - enum options { m3_cfg, m4_cfg, m5_cfg, mdt_location_info, m6_cfg, m7_cfg, nulltype } value; + enum options { + m3_cfg, + m4_cfg, + m5_cfg, + mdt_location_info, + m6_cfg, + m7_cfg, + bluetooth_meas_cfg, + wlan_meas_cfg, + nulltype + } value; typedef uint8_t number_type; std::string to_string() const; @@ -8014,16 +9541,28 @@ struct immediate_mdt_ext_ies_o { fixed_bitstring<8, false, true>& mdt_location_info(); m6_cfg_s& m6_cfg(); m7_cfg_s& m7_cfg(); + bluetooth_meas_cfg_s& bluetooth_meas_cfg(); + wlan_meas_cfg_s& wlan_meas_cfg(); const m3_cfg_s& m3_cfg() const; const m4_cfg_s& m4_cfg() const; const m5_cfg_s& m5_cfg() const; const fixed_bitstring<8, false, true>& mdt_location_info() const; const m6_cfg_s& m6_cfg() const; const m7_cfg_s& m7_cfg() const; + const bluetooth_meas_cfg_s& bluetooth_meas_cfg() const; + const wlan_meas_cfg_s& wlan_meas_cfg() const; private: - types type_; - choice_buffer_t, m3_cfg_s, m4_cfg_s, m5_cfg_s, m6_cfg_s, m7_cfg_s> c; + types type_; + choice_buffer_t, + m3_cfg_s, + m4_cfg_s, + m5_cfg_s, + m6_cfg_s, + m7_cfg_s, + wlan_meas_cfg_s> + c; void destroy_(); }; @@ -8037,7 +9576,46 @@ struct immediate_mdt_ext_ies_o { }; // LoggedMDT-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o logged_mdt_ext_ies_o; +struct logged_mdt_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { + struct types_opts { + enum options { bluetooth_meas_cfg, wlan_meas_cfg, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + ext_c() = default; + ext_c(const ext_c& other); + ext_c& operator=(const ext_c& other); + ~ext_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + bluetooth_meas_cfg_s& bluetooth_meas_cfg(); + wlan_meas_cfg_s& wlan_meas_cfg(); + const bluetooth_meas_cfg_s& bluetooth_meas_cfg() const; + const wlan_meas_cfg_s& wlan_meas_cfg() const; + + private: + types type_; + choice_buffer_t c; + + void destroy_(); + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; typedef protocol_ext_container_empty_l m1_periodic_report_ext_ies_container; @@ -8117,18 +9695,22 @@ struct immediate_mdt_ext_ies_container { using ie_field_s = protocol_ext_container_item_s; // member variables - bool m3_cfg_present = false; - bool m4_cfg_present = false; - bool m5_cfg_present = false; - bool mdt_location_info_present = false; - bool m6_cfg_present = false; - bool m7_cfg_present = false; + bool m3_cfg_present = false; + bool m4_cfg_present = false; + bool m5_cfg_present = false; + bool mdt_location_info_present = false; + bool m6_cfg_present = false; + bool m7_cfg_present = false; + bool bluetooth_meas_cfg_present = false; + bool wlan_meas_cfg_present = false; ie_field_s m3_cfg; ie_field_s m4_cfg; ie_field_s m5_cfg; ie_field_s > mdt_location_info; ie_field_s m6_cfg; ie_field_s m7_cfg; + ie_field_s bluetooth_meas_cfg; + ie_field_s wlan_meas_cfg; // sequence methods immediate_mdt_ext_ies_container(); @@ -8156,7 +9738,22 @@ struct immediate_mdt_s { void to_json(json_writer& j) const; }; -typedef protocol_ext_container_empty_l logged_mdt_ext_ies_container; +struct logged_mdt_ext_ies_container { + template + using ie_field_s = protocol_ext_container_item_s; + + // member variables + bool bluetooth_meas_cfg_present = false; + bool wlan_meas_cfg_present = false; + ie_field_s bluetooth_meas_cfg; + ie_field_s wlan_meas_cfg; + + // sequence methods + logged_mdt_ext_ies_container(); + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; // LoggedMDT ::= SEQUENCE struct logged_mdt_s { @@ -8176,6 +9773,14 @@ struct logged_mdt_s { // MDTPLMNList ::= SEQUENCE (SIZE (1..16)) OF OCTET STRING (SIZE (3)) using mdtplmn_list_l = bounded_array, 16>; +// ServiceType ::= ENUMERATED +struct service_type_opts { + enum options { qmc_for_streaming_service, qmc_for_mtsi_service, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated service_type_e; + // MDT-Activation ::= ENUMERATED struct mdt_activation_opts { enum options { @@ -8295,6 +9900,38 @@ private: void destroy_(); }; +// UEAppLayerMeasConfig-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +struct ue_app_layer_meas_cfg_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { + struct types_opts { + enum options { service_type, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + types type() const { return types::service_type; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + service_type_e& service_type() { return c; } + const service_type_e& service_type() const { return c; } + + private: + service_type_e c; + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + // MDT-Configuration ::= SEQUENCE struct mdt_cfg_s { bool ext = false; @@ -8319,6 +9956,29 @@ struct pro_se_ueto_network_relaying_opts { }; typedef enumerated pro_se_ueto_network_relaying_e; +// RequestTypeAdditionalInfo ::= ENUMERATED +struct request_type_add_info_opts { + enum options { include_ps_cell, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated request_type_add_info_e; + +// UEAppLayerMeasConfig ::= SEQUENCE +struct ue_app_layer_meas_cfg_s { + bool ext = false; + bool ie_exts_present = false; + bounded_octstring<1, 1000, true> container_for_app_layer_meas_cfg; + area_scope_of_qmc_c area_scope_of_qmc; + protocol_ext_container_l ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // EventType ::= ENUMERATED struct event_type_opts { enum options { direct, change_of_serve_cell, stop_change_of_serve_cell, /*...*/ nulltype } value; @@ -8394,7 +10054,36 @@ struct report_area_opts { typedef enumerated report_area_e; // RequestType-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o request_type_ext_ies_o; +struct request_type_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { + struct types_opts { + enum options { request_type_add_info, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + types type() const { return types::request_type_add_info; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + request_type_add_info_e& request_type_add_info() { return c; } + const request_type_add_info_e& request_type_add_info() const { return c; } + + private: + request_type_add_info_e c; + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; // SecurityContext-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION typedef s1ap_protocol_ext_empty_o security_context_ext_ies_o; @@ -8404,23 +10093,33 @@ struct trace_activation_ext_ies_o { // Extension ::= OPEN TYPE struct ext_c { struct types_opts { - enum options { mdt_cfg, nulltype } value; + enum options { mdt_cfg, ue_app_layer_meas_cfg, nulltype } value; std::string to_string() const; }; typedef enumerated types; // choice methods - types type() const { return types::mdt_cfg; } + ext_c() = default; + ext_c(const ext_c& other); + ext_c& operator=(const ext_c& other); + ~ext_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - mdt_cfg_s& mdt_cfg() { return c; } - const mdt_cfg_s& mdt_cfg() const { return c; } + mdt_cfg_s& mdt_cfg(); + ue_app_layer_meas_cfg_s& ue_app_layer_meas_cfg(); + const mdt_cfg_s& mdt_cfg() const; + const ue_app_layer_meas_cfg_s& ue_app_layer_meas_cfg() const; private: - mdt_cfg_s c; + types type_; + choice_buffer_t c; + + void destroy_(); }; // members lookup methods @@ -8465,6 +10164,14 @@ struct vehicle_ue_opts { }; typedef enumerated vehicle_ue_e; +// AerialUEsubscriptionInformation ::= ENUMERATED +struct aerial_uesubscription_info_opts { + enum options { allowed, not_allowed, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated aerial_uesubscription_info_e; + // ManagementBasedMDTAllowed ::= ENUMERATED struct management_based_mdt_allowed_opts { enum options { allowed, /*...*/ nulltype } value; @@ -8490,15 +10197,13 @@ struct pro_se_authorized_s { void to_json(json_writer& j) const; }; -typedef protocol_ext_container_empty_l request_type_ext_ies_container; - // RequestType ::= SEQUENCE struct request_type_s { - bool ext = false; - bool ie_exts_present = false; - event_type_e event_type; - report_area_e report_area; - request_type_ext_ies_container ie_exts; + bool ext = false; + bool ie_exts_present = false; + event_type_e event_type; + report_area_e report_area; + protocol_ext_container_l ie_exts; // ... // sequence methods @@ -8524,15 +10229,32 @@ struct security_context_s { void to_json(json_writer& j) const; }; +struct trace_activation_ext_ies_container { + template + using ie_field_s = protocol_ext_container_item_s; + + // member variables + bool mdt_cfg_present = false; + bool ue_app_layer_meas_cfg_present = false; + ie_field_s mdt_cfg; + ie_field_s ue_app_layer_meas_cfg; + + // sequence methods + trace_activation_ext_ies_container(); + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // TraceActivation ::= SEQUENCE struct trace_activation_s { - bool ext = false; - bool ie_exts_present = false; - fixed_octstring<8, true> e_utran_trace_id; - fixed_bitstring<8, false, true> interfaces_to_trace; - trace_depth_e trace_depth; - bounded_bitstring<1, 160, true, true> trace_collection_entity_ip_address; - protocol_ext_container_l ie_exts; + bool ext = false; + bool ie_exts_present = false; + fixed_octstring<8, true> e_utran_trace_id; + fixed_bitstring<8, false, true> interfaces_to_trace; + trace_depth_e trace_depth; + bounded_bitstring<1, 160, true, true> trace_collection_entity_ip_address; + trace_activation_ext_ies_container ie_exts; // ... // sequence methods @@ -8633,8 +10355,12 @@ struct ho_request_ies_o { v2xservices_authorized, ue_sidelink_aggregate_maximum_bitrate, enhanced_coverage_restricted, + nrue_security_cap, ce_mode_brestricted, + aerial_uesubscription_info, pending_data_ind, + subscription_based_ue_differentiation_info, + add_rrm_prio_idx, nulltype } value; @@ -8679,8 +10405,12 @@ struct ho_request_ies_o { v2xservices_authorized_s& v2xservices_authorized(); ue_sidelink_aggregate_maximum_bitrate_s& ue_sidelink_aggregate_maximum_bitrate(); enhanced_coverage_restricted_e& enhanced_coverage_restricted(); + nrue_security_cap_s& nrue_security_cap(); ce_mode_brestricted_e& ce_mode_brestricted(); + aerial_uesubscription_info_e& aerial_uesubscription_info(); pending_data_ind_e& pending_data_ind(); + subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info(); + fixed_bitstring<32, false, true>& add_rrm_prio_idx(); const uint64_t& mme_ue_s1ap_id() const; const handov_type_e& handov_type() const; const cause_c& cause() const; @@ -8707,8 +10437,12 @@ struct ho_request_ies_o { const v2xservices_authorized_s& v2xservices_authorized() const; const ue_sidelink_aggregate_maximum_bitrate_s& ue_sidelink_aggregate_maximum_bitrate() const; const enhanced_coverage_restricted_e& enhanced_coverage_restricted() const; + const nrue_security_cap_s& nrue_security_cap() const; const ce_mode_brestricted_e& ce_mode_brestricted() const; + const aerial_uesubscription_info_e& aerial_uesubscription_info() const; const pending_data_ind_e& pending_data_ind() const; + const subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info() const; + const fixed_bitstring<32, false, true>& add_rrm_prio_idx() const; private: types type_; @@ -8719,9 +10453,11 @@ struct ho_request_ies_o { gummei_s, ho_restrict_list_s, mdtplmn_list_l, + nrue_security_cap_s, pro_se_authorized_s, request_type_s, security_context_s, + subscription_based_ue_differentiation_info_s, trace_activation_s, ue_aggregate_maximum_bitrate_s, ue_security_cap_s, @@ -8746,26 +10482,30 @@ struct ho_request_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool ho_restrict_list_present = false; - bool trace_activation_present = false; - bool request_type_present = false; - bool srvcc_operation_possible_present = false; - bool nas_security_paramsto_e_utran_present = false; - bool csg_id_present = false; - bool csg_membership_status_present = false; - bool gummei_id_present = false; - bool mme_ue_s1ap_id_minus2_present = false; - bool management_based_mdt_allowed_present = false; - bool management_based_mdtplmn_list_present = false; - bool masked_imeisv_present = false; - bool expected_ue_behaviour_present = false; - bool pro_se_authorized_present = false; - bool ueuser_plane_cio_tsupport_ind_present = false; - bool v2xservices_authorized_present = false; - bool ue_sidelink_aggregate_maximum_bitrate_present = false; - bool enhanced_coverage_restricted_present = false; - bool ce_mode_brestricted_present = false; - bool pending_data_ind_present = false; + bool ho_restrict_list_present = false; + bool trace_activation_present = false; + bool request_type_present = false; + bool srvcc_operation_possible_present = false; + bool nas_security_paramsto_e_utran_present = false; + bool csg_id_present = false; + bool csg_membership_status_present = false; + bool gummei_id_present = false; + bool mme_ue_s1ap_id_minus2_present = false; + bool management_based_mdt_allowed_present = false; + bool management_based_mdtplmn_list_present = false; + bool masked_imeisv_present = false; + bool expected_ue_behaviour_present = false; + bool pro_se_authorized_present = false; + bool ueuser_plane_cio_tsupport_ind_present = false; + bool v2xservices_authorized_present = false; + bool ue_sidelink_aggregate_maximum_bitrate_present = false; + bool enhanced_coverage_restricted_present = false; + bool nrue_security_cap_present = false; + bool ce_mode_brestricted_present = false; + bool aerial_uesubscription_info_present = false; + bool pending_data_ind_present = false; + bool subscription_based_ue_differentiation_info_present = false; + bool add_rrm_prio_idx_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s handov_type; ie_field_s cause; @@ -8792,8 +10532,12 @@ struct ho_request_ies_container { ie_field_s v2xservices_authorized; ie_field_s ue_sidelink_aggregate_maximum_bitrate; ie_field_s enhanced_coverage_restricted; + ie_field_s nrue_security_cap; ie_field_s ce_mode_brestricted; + ie_field_s aerial_uesubscription_info; ie_field_s pending_data_ind; + ie_field_s subscription_based_ue_differentiation_info; + ie_field_s > add_rrm_prio_idx; // sequence methods ho_request_ies_container(); @@ -8934,6 +10678,26 @@ struct ho_request_ack_s { void to_json(json_writer& j) const; }; +// TargetNgRanNode-ID-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +typedef s1ap_protocol_ext_empty_o target_ng_ran_node_id_ext_ies_o; + +typedef protocol_ext_container_empty_l target_ng_ran_node_id_ext_ies_container; + +// TargetNgRanNode-ID ::= SEQUENCE +struct target_ng_ran_node_id_s { + bool ext = false; + bool ie_exts_present = false; + global_ran_node_id_c global_ran_node_id; + five_gstai_s sel_tai; + target_ng_ran_node_id_ext_ies_container ie_exts; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // Direct-Forwarding-Path-Availability ::= ENUMERATED struct direct_forwarding_path_availability_opts { enum options { direct_path_available, /*...*/ nulltype } value; @@ -8961,11 +10725,11 @@ typedef enumerated srvccho_ind_e; // TargetID ::= CHOICE struct target_id_c { struct types_opts { - enum options { targetenb_id, target_rnc_id, cgi, /*...*/ nulltype } value; + enum options { targetenb_id, target_rnc_id, cgi, /*...*/ targetg_ng_ran_node_id, nulltype } value; std::string to_string() const; }; - typedef enumerated types; + typedef enumerated types; // choice methods target_id_c() = default; @@ -8993,6 +10757,11 @@ struct target_id_c { assert_choice_type("cGI", type_.to_string(), "TargetID"); return c.get(); } + target_ng_ran_node_id_s& targetg_ng_ran_node_id() + { + assert_choice_type("targetgNgRanNode-ID", type_.to_string(), "TargetID"); + return c.get(); + } const targetenb_id_s& targetenb_id() const { assert_choice_type("targeteNB-ID", type_.to_string(), "TargetID"); @@ -9008,6 +10777,11 @@ struct target_id_c { assert_choice_type("cGI", type_.to_string(), "TargetID"); return c.get(); } + const target_ng_ran_node_id_s& targetg_ng_ran_node_id() const + { + assert_choice_type("targetgNgRanNode-ID", type_.to_string(), "TargetID"); + return c.get(); + } targetenb_id_s& set_targetenb_id() { set(types::targetenb_id); @@ -9023,10 +10797,15 @@ struct target_id_c { set(types::cgi); return c.get(); } + target_ng_ran_node_id_s& set_targetg_ng_ran_node_id() + { + set(types::targetg_ng_ran_node_id); + return c.get(); + } private: - types type_; - choice_buffer_t c; + types type_; + choice_buffer_t c; void destroy_(); }; @@ -9435,82 +11214,94 @@ struct init_context_setup_request_ies_o { v2xservices_authorized, ue_sidelink_aggregate_maximum_bitrate, enhanced_coverage_restricted, + nrue_security_cap, ce_mode_brestricted, - pending_data_ind, - nulltype - } value; - - std::string to_string() const; - }; - typedef enumerated types; - - // choice methods - value_c() = default; - value_c(const value_c& other); - value_c& operator=(const value_c& other); - ~value_c() { destroy_(); } - void set(types::options e = types::nulltype); - types type() const { return type_; } - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; - // getters - uint64_t& mme_ue_s1ap_id(); - uint32_t& enb_ue_s1ap_id(); - ue_aggregate_maximum_bitrate_s& ueaggregate_maximum_bitrate(); - erab_to_be_setup_list_ctxt_su_req_l& erab_to_be_setup_list_ctxt_su_req(); - ue_security_cap_s& ue_security_cap(); - fixed_bitstring<256, false, true>& security_key(); - trace_activation_s& trace_activation(); - ho_restrict_list_s& ho_restrict_list(); - unbounded_octstring& ue_radio_cap(); - uint16_t& subscriber_profile_idfor_rfp(); - cs_fallback_ind_e& cs_fallback_ind(); - srvcc_operation_possible_e& srvcc_operation_possible(); - csg_membership_status_e& csg_membership_status(); - lai_s& registered_lai(); - gummei_s& gummei_id(); - uint64_t& mme_ue_s1ap_id_minus2(); - management_based_mdt_allowed_e& management_based_mdt_allowed(); - mdtplmn_list_l& management_based_mdtplmn_list(); - add_cs_fallback_ind_e& add_cs_fallback_ind(); - fixed_bitstring<64, false, true>& masked_imeisv(); - expected_ue_behaviour_s& expected_ue_behaviour(); - pro_se_authorized_s& pro_se_authorized(); - ueuser_plane_cio_tsupport_ind_e& ueuser_plane_cio_tsupport_ind(); - v2xservices_authorized_s& v2xservices_authorized(); - ue_sidelink_aggregate_maximum_bitrate_s& ue_sidelink_aggregate_maximum_bitrate(); - enhanced_coverage_restricted_e& enhanced_coverage_restricted(); - ce_mode_brestricted_e& ce_mode_brestricted(); - pending_data_ind_e& pending_data_ind(); - const uint64_t& mme_ue_s1ap_id() const; - const uint32_t& enb_ue_s1ap_id() const; - const ue_aggregate_maximum_bitrate_s& ueaggregate_maximum_bitrate() const; - const erab_to_be_setup_list_ctxt_su_req_l& erab_to_be_setup_list_ctxt_su_req() const; - const ue_security_cap_s& ue_security_cap() const; - const fixed_bitstring<256, false, true>& security_key() const; - const trace_activation_s& trace_activation() const; - const ho_restrict_list_s& ho_restrict_list() const; - const unbounded_octstring& ue_radio_cap() const; - const uint16_t& subscriber_profile_idfor_rfp() const; - const cs_fallback_ind_e& cs_fallback_ind() const; - const srvcc_operation_possible_e& srvcc_operation_possible() const; - const csg_membership_status_e& csg_membership_status() const; - const lai_s& registered_lai() const; - const gummei_s& gummei_id() const; - const uint64_t& mme_ue_s1ap_id_minus2() const; - const management_based_mdt_allowed_e& management_based_mdt_allowed() const; - const mdtplmn_list_l& management_based_mdtplmn_list() const; - const add_cs_fallback_ind_e& add_cs_fallback_ind() const; - const fixed_bitstring<64, false, true>& masked_imeisv() const; - const expected_ue_behaviour_s& expected_ue_behaviour() const; - const pro_se_authorized_s& pro_se_authorized() const; - const ueuser_plane_cio_tsupport_ind_e& ueuser_plane_cio_tsupport_ind() const; - const v2xservices_authorized_s& v2xservices_authorized() const; - const ue_sidelink_aggregate_maximum_bitrate_s& ue_sidelink_aggregate_maximum_bitrate() const; - const enhanced_coverage_restricted_e& enhanced_coverage_restricted() const; - const ce_mode_brestricted_e& ce_mode_brestricted() const; - const pending_data_ind_e& pending_data_ind() const; + aerial_uesubscription_info, + pending_data_ind, + subscription_based_ue_differentiation_info, + add_rrm_prio_idx, + nulltype + } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + value_c() = default; + value_c(const value_c& other); + value_c& operator=(const value_c& other); + ~value_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + uint64_t& mme_ue_s1ap_id(); + uint32_t& enb_ue_s1ap_id(); + ue_aggregate_maximum_bitrate_s& ueaggregate_maximum_bitrate(); + erab_to_be_setup_list_ctxt_su_req_l& erab_to_be_setup_list_ctxt_su_req(); + ue_security_cap_s& ue_security_cap(); + fixed_bitstring<256, false, true>& security_key(); + trace_activation_s& trace_activation(); + ho_restrict_list_s& ho_restrict_list(); + unbounded_octstring& ue_radio_cap(); + uint16_t& subscriber_profile_idfor_rfp(); + cs_fallback_ind_e& cs_fallback_ind(); + srvcc_operation_possible_e& srvcc_operation_possible(); + csg_membership_status_e& csg_membership_status(); + lai_s& registered_lai(); + gummei_s& gummei_id(); + uint64_t& mme_ue_s1ap_id_minus2(); + management_based_mdt_allowed_e& management_based_mdt_allowed(); + mdtplmn_list_l& management_based_mdtplmn_list(); + add_cs_fallback_ind_e& add_cs_fallback_ind(); + fixed_bitstring<64, false, true>& masked_imeisv(); + expected_ue_behaviour_s& expected_ue_behaviour(); + pro_se_authorized_s& pro_se_authorized(); + ueuser_plane_cio_tsupport_ind_e& ueuser_plane_cio_tsupport_ind(); + v2xservices_authorized_s& v2xservices_authorized(); + ue_sidelink_aggregate_maximum_bitrate_s& ue_sidelink_aggregate_maximum_bitrate(); + enhanced_coverage_restricted_e& enhanced_coverage_restricted(); + nrue_security_cap_s& nrue_security_cap(); + ce_mode_brestricted_e& ce_mode_brestricted(); + aerial_uesubscription_info_e& aerial_uesubscription_info(); + pending_data_ind_e& pending_data_ind(); + subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info(); + fixed_bitstring<32, false, true>& add_rrm_prio_idx(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; + const ue_aggregate_maximum_bitrate_s& ueaggregate_maximum_bitrate() const; + const erab_to_be_setup_list_ctxt_su_req_l& erab_to_be_setup_list_ctxt_su_req() const; + const ue_security_cap_s& ue_security_cap() const; + const fixed_bitstring<256, false, true>& security_key() const; + const trace_activation_s& trace_activation() const; + const ho_restrict_list_s& ho_restrict_list() const; + const unbounded_octstring& ue_radio_cap() const; + const uint16_t& subscriber_profile_idfor_rfp() const; + const cs_fallback_ind_e& cs_fallback_ind() const; + const srvcc_operation_possible_e& srvcc_operation_possible() const; + const csg_membership_status_e& csg_membership_status() const; + const lai_s& registered_lai() const; + const gummei_s& gummei_id() const; + const uint64_t& mme_ue_s1ap_id_minus2() const; + const management_based_mdt_allowed_e& management_based_mdt_allowed() const; + const mdtplmn_list_l& management_based_mdtplmn_list() const; + const add_cs_fallback_ind_e& add_cs_fallback_ind() const; + const fixed_bitstring<64, false, true>& masked_imeisv() const; + const expected_ue_behaviour_s& expected_ue_behaviour() const; + const pro_se_authorized_s& pro_se_authorized() const; + const ueuser_plane_cio_tsupport_ind_e& ueuser_plane_cio_tsupport_ind() const; + const v2xservices_authorized_s& v2xservices_authorized() const; + const ue_sidelink_aggregate_maximum_bitrate_s& ue_sidelink_aggregate_maximum_bitrate() const; + const enhanced_coverage_restricted_e& enhanced_coverage_restricted() const; + const nrue_security_cap_s& nrue_security_cap() const; + const ce_mode_brestricted_e& ce_mode_brestricted() const; + const aerial_uesubscription_info_e& aerial_uesubscription_info() const; + const pending_data_ind_e& pending_data_ind() const; + const subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info() const; + const fixed_bitstring<32, false, true>& add_rrm_prio_idx() const; private: types type_; @@ -9521,7 +11312,9 @@ struct init_context_setup_request_ies_o { ho_restrict_list_s, lai_s, mdtplmn_list_l, + nrue_security_cap_s, pro_se_authorized_s, + subscription_based_ue_differentiation_info_s, trace_activation_s, ue_aggregate_maximum_bitrate_s, ue_security_cap_s, @@ -9546,28 +11339,32 @@ struct init_context_setup_request_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool trace_activation_present = false; - bool ho_restrict_list_present = false; - bool ue_radio_cap_present = false; - bool subscriber_profile_idfor_rfp_present = false; - bool cs_fallback_ind_present = false; - bool srvcc_operation_possible_present = false; - bool csg_membership_status_present = false; - bool registered_lai_present = false; - bool gummei_id_present = false; - bool mme_ue_s1ap_id_minus2_present = false; - bool management_based_mdt_allowed_present = false; - bool management_based_mdtplmn_list_present = false; - bool add_cs_fallback_ind_present = false; - bool masked_imeisv_present = false; - bool expected_ue_behaviour_present = false; - bool pro_se_authorized_present = false; - bool ueuser_plane_cio_tsupport_ind_present = false; - bool v2xservices_authorized_present = false; - bool ue_sidelink_aggregate_maximum_bitrate_present = false; - bool enhanced_coverage_restricted_present = false; - bool ce_mode_brestricted_present = false; - bool pending_data_ind_present = false; + bool trace_activation_present = false; + bool ho_restrict_list_present = false; + bool ue_radio_cap_present = false; + bool subscriber_profile_idfor_rfp_present = false; + bool cs_fallback_ind_present = false; + bool srvcc_operation_possible_present = false; + bool csg_membership_status_present = false; + bool registered_lai_present = false; + bool gummei_id_present = false; + bool mme_ue_s1ap_id_minus2_present = false; + bool management_based_mdt_allowed_present = false; + bool management_based_mdtplmn_list_present = false; + bool add_cs_fallback_ind_present = false; + bool masked_imeisv_present = false; + bool expected_ue_behaviour_present = false; + bool pro_se_authorized_present = false; + bool ueuser_plane_cio_tsupport_ind_present = false; + bool v2xservices_authorized_present = false; + bool ue_sidelink_aggregate_maximum_bitrate_present = false; + bool enhanced_coverage_restricted_present = false; + bool nrue_security_cap_present = false; + bool ce_mode_brestricted_present = false; + bool aerial_uesubscription_info_present = false; + bool pending_data_ind_present = false; + bool subscription_based_ue_differentiation_info_present = false; + bool add_rrm_prio_idx_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s ueaggregate_maximum_bitrate; @@ -9595,8 +11392,12 @@ struct init_context_setup_request_ies_container { ie_field_s v2xservices_authorized; ie_field_s ue_sidelink_aggregate_maximum_bitrate; ie_field_s enhanced_coverage_restricted; + ie_field_s nrue_security_cap; ie_field_s ce_mode_brestricted; + ie_field_s aerial_uesubscription_info; ie_field_s pending_data_ind; + ie_field_s subscription_based_ue_differentiation_info; + ie_field_s > add_rrm_prio_idx; // sequence methods init_context_setup_request_ies_container(); @@ -9714,13 +11515,23 @@ struct coverage_level_opts { }; typedef enumerated coverage_level_e; +// EDT-Session ::= ENUMERATED +struct edt_session_opts { + enum options { true_value, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated edt_session_e; + // GUMMEIType ::= ENUMERATED struct gummei_type_opts { - enum options { native, mapped, /*...*/ nulltype } value; + enum options { native, mapped, /*...*/ mapped_from5_g, nulltype } value; + typedef uint8_t number_type; std::string to_string() const; + uint8_t to_number() const; }; -typedef enumerated gummei_type_e; +typedef enumerated gummei_type_e; // RRC-Establishment-Cause ::= ENUMERATED struct rrc_establishment_cause_opts { @@ -9775,6 +11586,8 @@ struct init_ue_msg_ies_o { ce_mode_b_support_ind, dcn_id, coverage_level, + ue_application_layer_meas_cap, + edt_session, nulltype } value; @@ -9813,6 +11626,8 @@ struct init_ue_msg_ies_o { ce_mode_b_support_ind_e& ce_mode_b_support_ind(); uint32_t& dcn_id(); coverage_level_e& coverage_level(); + fixed_bitstring<8, false, true>& ue_application_layer_meas_cap(); + edt_session_e& edt_session(); const uint32_t& enb_ue_s1ap_id() const; const unbounded_octstring& nas_pdu() const; const tai_s& tai() const; @@ -9833,6 +11648,8 @@ struct init_ue_msg_ies_o { const ce_mode_b_support_ind_e& ce_mode_b_support_ind() const; const uint32_t& dcn_id() const; const coverage_level_e& coverage_level() const; + const fixed_bitstring<8, false, true>& ue_application_layer_meas_cap() const; + const edt_session_e& edt_session() const; private: types type_; @@ -9879,6 +11696,8 @@ struct init_ue_msg_ies_container { bool ce_mode_b_support_ind_present = false; bool dcn_id_present = false; bool coverage_level_present = false; + bool ue_application_layer_meas_cap_present = false; + bool edt_session_present = false; ie_field_s > enb_ue_s1ap_id; ie_field_s > nas_pdu; ie_field_s tai; @@ -9899,6 +11718,8 @@ struct init_ue_msg_ies_container { ie_field_s ce_mode_b_support_ind; ie_field_s > dcn_id; ie_field_s coverage_level; + ie_field_s > ue_application_layer_meas_cap; + ie_field_s edt_session; // sequence methods init_ue_msg_ies_container(); @@ -9948,7 +11769,36 @@ struct ue_associated_lc_s1_conn_item_s { typedef s1ap_protocol_ext_empty_o served_dcns_item_ext_ies_o; // ServedGUMMEIsItem-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -typedef s1ap_protocol_ext_empty_o served_gummeis_item_ext_ies_o; +struct served_gummeis_item_ext_ies_o { + // Extension ::= OPEN TYPE + struct ext_c { + struct types_opts { + enum options { gummei_type, nulltype } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + types type() const { return types::gummei_type; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + gummei_type_e& gummei_type() { return c; } + const gummei_type_e& gummei_type() const { return c; } + + private: + gummei_type_e c; + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static ext_c get_ext(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; // ServedGroupIDs ::= SEQUENCE (SIZE (1..65535)) OF OCTET STRING (SIZE (2)) using served_group_ids_l = dyn_array >; @@ -10134,16 +11984,14 @@ struct served_dcns_item_s { void to_json(json_writer& j) const; }; -typedef protocol_ext_container_empty_l served_gummeis_item_ext_ies_container; - // ServedGUMMEIsItem ::= SEQUENCE struct served_gummeis_item_s { - bool ext = false; - bool ie_exts_present = false; - served_plmns_l served_plmns; - served_group_ids_l served_group_ids; - served_mmecs_l served_mmecs; - served_gummeis_item_ext_ies_container ie_exts; + bool ext = false; + bool ie_exts_present = false; + served_plmns_l served_plmns; + served_group_ids_l served_group_ids; + served_mmecs_l served_mmecs; + protocol_ext_container_l ie_exts; // ... // sequence methods @@ -10275,6 +12123,14 @@ struct gw_context_release_ind_opts { }; typedef enumerated gw_context_release_ind_e; +// HandoverFlag ::= ENUMERATED +struct ho_flag_opts { + enum options { ho_prep, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated ho_flag_e; + // KillAllWarningMessages ::= ENUMERATED struct kill_all_warning_msgs_opts { enum options { true_value, nulltype } value; @@ -10283,6 +12139,14 @@ struct kill_all_warning_msgs_opts { }; typedef enumerated kill_all_warning_msgs_e; +// LTE-M-Indication ::= ENUMERATED +struct lte_m_ind_opts { + enum options { lte_m, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated lte_m_ind_e; + // MMERelaySupportIndicator ::= ENUMERATED struct mme_relay_support_ind_opts { enum options { true_value, /*...*/ nulltype } value; @@ -10758,7 +12622,7 @@ struct location_report_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { mme_ue_s1ap_id, enb_ue_s1ap_id, eutran_cgi, tai, request_type, nulltype } value; + enum options { mme_ue_s1ap_id, enb_ue_s1ap_id, eutran_cgi, tai, request_type, ps_cell_info, nulltype } value; std::string to_string() const; }; @@ -10780,15 +12644,17 @@ struct location_report_ies_o { eutran_cgi_s& eutran_cgi(); tai_s& tai(); request_type_s& request_type(); + ps_cell_info_s& ps_cell_info(); const uint64_t& mme_ue_s1ap_id() const; const uint32_t& enb_ue_s1ap_id() const; const eutran_cgi_s& eutran_cgi() const; const tai_s& tai() const; const request_type_s& request_type() const; + const ps_cell_info_s& ps_cell_info() const; private: - types type_; - choice_buffer_t c; + types type_; + choice_buffer_t c; void destroy_(); }; @@ -10936,23 +12802,33 @@ struct mme_cfg_transfer_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { son_cfg_transfer_mct, nulltype } value; + enum options { son_cfg_transfer_mct, en_dcson_cfg_transfer_mct, nulltype } value; std::string to_string() const; }; typedef enumerated types; // choice methods - types type() const { return types::son_cfg_transfer_mct; } + value_c() = default; + value_c(const value_c& other); + value_c& operator=(const value_c& other); + ~value_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - son_cfg_transfer_s& son_cfg_transfer_mct() { return c; } - const son_cfg_transfer_s& son_cfg_transfer_mct() const { return c; } + son_cfg_transfer_s& son_cfg_transfer_mct(); + en_dcson_cfg_transfer_s& en_dcson_cfg_transfer_mct(); + const son_cfg_transfer_s& son_cfg_transfer_mct() const; + const en_dcson_cfg_transfer_s& en_dcson_cfg_transfer_mct() const; private: - son_cfg_transfer_s c; + types type_; + choice_buffer_t c; + + void destroy_(); }; // members lookup methods @@ -11540,8 +13416,13 @@ struct path_switch_request_ack_ies_o { v2xservices_authorized, ue_sidelink_aggregate_maximum_bitrate, enhanced_coverage_restricted, + nrue_security_cap, ce_mode_brestricted, + aerial_uesubscription_info, pending_data_ind, + subscription_based_ue_differentiation_info, + ho_restrict_list, + add_rrm_prio_idx, nulltype } value; @@ -11574,8 +13455,13 @@ struct path_switch_request_ack_ies_o { v2xservices_authorized_s& v2xservices_authorized(); ue_sidelink_aggregate_maximum_bitrate_s& ue_sidelink_aggregate_maximum_bitrate(); enhanced_coverage_restricted_e& enhanced_coverage_restricted(); + nrue_security_cap_s& nrue_security_cap(); ce_mode_brestricted_e& ce_mode_brestricted(); + aerial_uesubscription_info_e& aerial_uesubscription_info(); pending_data_ind_e& pending_data_ind(); + subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info(); + ho_restrict_list_s& ho_restrict_list(); + fixed_bitstring<32, false, true>& add_rrm_prio_idx(); const uint64_t& mme_ue_s1ap_id() const; const uint32_t& enb_ue_s1ap_id() const; const ue_aggregate_maximum_bitrate_s& ueaggregate_maximum_bitrate() const; @@ -11590,16 +13476,25 @@ struct path_switch_request_ack_ies_o { const v2xservices_authorized_s& v2xservices_authorized() const; const ue_sidelink_aggregate_maximum_bitrate_s& ue_sidelink_aggregate_maximum_bitrate() const; const enhanced_coverage_restricted_e& enhanced_coverage_restricted() const; + const nrue_security_cap_s& nrue_security_cap() const; const ce_mode_brestricted_e& ce_mode_brestricted() const; + const aerial_uesubscription_info_e& aerial_uesubscription_info() const; const pending_data_ind_e& pending_data_ind() const; + const subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info() const; + const ho_restrict_list_s& ho_restrict_list() const; + const fixed_bitstring<32, false, true>& add_rrm_prio_idx() const; private: types type_; choice_buffer_t, erab_list_l, + fixed_bitstring<32, false, true>, + ho_restrict_list_s, + nrue_security_cap_s, pro_se_authorized_s, security_context_s, + subscription_based_ue_differentiation_info_s, ue_aggregate_maximum_bitrate_s, ue_sidelink_aggregate_maximum_bitrate_s, v2xservices_authorized_s> @@ -11681,6 +13576,8 @@ struct path_switch_request_ies_o { tunnel_info_for_bbf, lhn_id, rrc_resume_cause, + nrue_security_cap, + ps_cell_info, nulltype } value; @@ -11712,6 +13609,8 @@ struct path_switch_request_ies_o { tunnel_info_s& tunnel_info_for_bbf(); bounded_octstring<32, 256, true>& lhn_id(); rrc_establishment_cause_e& rrc_resume_cause(); + nrue_security_cap_s& nrue_security_cap(); + ps_cell_info_s& ps_cell_info(); const uint32_t& enb_ue_s1ap_id() const; const erab_ie_container_list_l& erab_to_be_switched_dl_list() const; const uint64_t& source_mme_ue_s1ap_id() const; @@ -11725,6 +13624,8 @@ struct path_switch_request_ies_o { const tunnel_info_s& tunnel_info_for_bbf() const; const bounded_octstring<32, 256, true>& lhn_id() const; const rrc_establishment_cause_e& rrc_resume_cause() const; + const nrue_security_cap_s& nrue_security_cap() const; + const ps_cell_info_s& ps_cell_info() const; private: types type_; @@ -11733,6 +13634,8 @@ struct path_switch_request_ies_o { eutran_cgi_s, fixed_bitstring<27, false, true>, gummei_s, + nrue_security_cap_s, + ps_cell_info_s, tai_s, tunnel_info_s, ue_security_cap_s> @@ -11994,6 +13897,7 @@ struct s1_setup_request_ies_o { csg_id_list, ue_retention_info, nb_io_t_default_paging_drx, + connectedeng_nb_list, nulltype } value; @@ -12019,6 +13923,7 @@ struct s1_setup_request_ies_o { csg_id_list_l& csg_id_list(); ue_retention_info_e& ue_retention_info(); nb_io_t_default_paging_drx_e& nb_io_t_default_paging_drx(); + connectedeng_nb_list_l& connectedeng_nb_list(); const global_enb_id_s& global_enb_id() const; const printable_string<1, 150, true, true>& enbname() const; const supported_tas_l& supported_tas() const; @@ -12026,10 +13931,16 @@ struct s1_setup_request_ies_o { const csg_id_list_l& csg_id_list() const; const ue_retention_info_e& ue_retention_info() const; const nb_io_t_default_paging_drx_e& nb_io_t_default_paging_drx() const; + const connectedeng_nb_list_l& connectedeng_nb_list() const; private: - types type_; - choice_buffer_t, supported_tas_l> c; + types type_; + choice_buffer_t, + supported_tas_l> + c; void destroy_(); }; @@ -12105,6 +14016,64 @@ struct s1_setup_resp_ies_o { static presence_e get_presence(const uint32_t& id); }; +// SecondaryRATDataUsageReportIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +struct secondary_rat_data_usage_report_ies_o { + // Value ::= OPEN TYPE + struct value_c { + struct types_opts { + enum options { + mme_ue_s1ap_id, + enb_ue_s1ap_id, + secondary_rat_data_usage_report_list, + ho_flag, + user_location_info, + time_since_secondary_node_release, + nulltype + } value; + + std::string to_string() const; + }; + typedef enumerated types; + + // choice methods + value_c() = default; + value_c(const value_c& other); + value_c& operator=(const value_c& other); + ~value_c() { destroy_(); } + void set(types::options e = types::nulltype); + types type() const { return type_; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + // getters + uint64_t& mme_ue_s1ap_id(); + uint32_t& enb_ue_s1ap_id(); + secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list(); + ho_flag_e& ho_flag(); + user_location_info_s& user_location_info(); + fixed_octstring<4, true>& time_since_secondary_node_release(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; + const secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list() const; + const ho_flag_e& ho_flag() const; + const user_location_info_s& user_location_info() const; + const fixed_octstring<4, true>& time_since_secondary_node_release() const; + + private: + types type_; + choice_buffer_t, secondary_rat_data_usage_report_list_l, user_location_info_s> c; + + void destroy_(); + }; + + // members lookup methods + static uint32_t idx_to_id(uint32_t idx); + static bool is_id_valid(const uint32_t& id); + static crit_e get_crit(const uint32_t& id); + static value_c get_value(const uint32_t& id); + static presence_e get_presence(const uint32_t& id); +}; + // TraceFailureIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES struct trace_fail_ind_ies_o { // Value ::= OPEN TYPE @@ -12200,7 +14169,15 @@ struct ue_cap_info_ind_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { mme_ue_s1ap_id, enb_ue_s1ap_id, ue_radio_cap, ue_radio_cap_for_paging, nulltype } value; + enum options { + mme_ue_s1ap_id, + enb_ue_s1ap_id, + ue_radio_cap, + ue_radio_cap_for_paging, + ue_application_layer_meas_cap, + lte_m_ind, + nulltype + } value; std::string to_string() const; }; @@ -12217,18 +14194,22 @@ struct ue_cap_info_ind_ies_o { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - uint64_t& mme_ue_s1ap_id(); - uint32_t& enb_ue_s1ap_id(); - unbounded_octstring& ue_radio_cap(); - unbounded_octstring& ue_radio_cap_for_paging(); - const uint64_t& mme_ue_s1ap_id() const; - const uint32_t& enb_ue_s1ap_id() const; - const unbounded_octstring& ue_radio_cap() const; - const unbounded_octstring& ue_radio_cap_for_paging() const; + uint64_t& mme_ue_s1ap_id(); + uint32_t& enb_ue_s1ap_id(); + unbounded_octstring& ue_radio_cap(); + unbounded_octstring& ue_radio_cap_for_paging(); + fixed_bitstring<8, false, true>& ue_application_layer_meas_cap(); + lte_m_ind_e& lte_m_ind(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; + const unbounded_octstring& ue_radio_cap() const; + const unbounded_octstring& ue_radio_cap_for_paging() const; + const fixed_bitstring<8, false, true>& ue_application_layer_meas_cap() const; + const lte_m_ind_e& lte_m_ind() const; private: - types type_; - choice_buffer_t > c; + types type_; + choice_buffer_t, unbounded_octstring > c; void destroy_(); }; @@ -12398,6 +14379,9 @@ struct ue_context_mod_request_ies_o { srvcc_operation_not_possible, v2xservices_authorized, ue_sidelink_aggregate_maximum_bitrate, + nrue_security_cap, + aerial_uesubscription_info, + add_rrm_prio_idx, nulltype } value; @@ -12431,6 +14415,9 @@ struct ue_context_mod_request_ies_o { srvcc_operation_not_possible_e& srvcc_operation_not_possible(); v2xservices_authorized_s& v2xservices_authorized(); ue_sidelink_aggregate_maximum_bitrate_s& ue_sidelink_aggregate_maximum_bitrate(); + nrue_security_cap_s& nrue_security_cap(); + aerial_uesubscription_info_e& aerial_uesubscription_info(); + fixed_bitstring<32, false, true>& add_rrm_prio_idx(); const uint64_t& mme_ue_s1ap_id() const; const uint32_t& enb_ue_s1ap_id() const; const fixed_bitstring<256, false, true>& security_key() const; @@ -12446,11 +14433,15 @@ struct ue_context_mod_request_ies_o { const srvcc_operation_not_possible_e& srvcc_operation_not_possible() const; const v2xservices_authorized_s& v2xservices_authorized() const; const ue_sidelink_aggregate_maximum_bitrate_s& ue_sidelink_aggregate_maximum_bitrate() const; + const nrue_security_cap_s& nrue_security_cap() const; + const aerial_uesubscription_info_e& aerial_uesubscription_info() const; + const fixed_bitstring<32, false, true>& add_rrm_prio_idx() const; private: types type_; choice_buffer_t, lai_s, + nrue_security_cap_s, pro_se_authorized_s, ue_aggregate_maximum_bitrate_s, ue_security_cap_s, @@ -12569,6 +14560,8 @@ struct ue_context_release_complete_ies_o { user_location_info, info_on_recommended_cells_and_enbs_for_paging, cell_id_and_ce_level_for_ce_capable_ues, + secondary_rat_data_usage_report_list, + time_since_secondary_node_release, nulltype } value; @@ -12593,18 +14586,24 @@ struct ue_context_release_complete_ies_o { user_location_info_s& user_location_info(); info_on_recommended_cells_and_enbs_for_paging_s& info_on_recommended_cells_and_enbs_for_paging(); cell_id_and_ce_level_for_ce_capable_ues_s& cell_id_and_ce_level_for_ce_capable_ues(); + secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list(); + fixed_octstring<4, true>& time_since_secondary_node_release(); const uint64_t& mme_ue_s1ap_id() const; const uint32_t& enb_ue_s1ap_id() const; const crit_diagnostics_s& crit_diagnostics() const; const user_location_info_s& user_location_info() const; const info_on_recommended_cells_and_enbs_for_paging_s& info_on_recommended_cells_and_enbs_for_paging() const; const cell_id_and_ce_level_for_ce_capable_ues_s& cell_id_and_ce_level_for_ce_capable_ues() const; + const secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list() const; + const fixed_octstring<4, true>& time_since_secondary_node_release() const; private: types type_; choice_buffer_t, info_on_recommended_cells_and_enbs_for_paging_s, + secondary_rat_data_usage_report_list_l, user_location_info_s> c; @@ -12624,7 +14623,14 @@ struct ue_context_release_request_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { mme_ue_s1ap_id, enb_ue_s1ap_id, cause, gw_context_release_ind, nulltype } value; + enum options { + mme_ue_s1ap_id, + enb_ue_s1ap_id, + cause, + gw_context_release_ind, + secondary_rat_data_usage_report_list, + nulltype + } value; std::string to_string() const; }; @@ -12641,18 +14647,20 @@ struct ue_context_release_request_ies_o { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - uint64_t& mme_ue_s1ap_id(); - uint32_t& enb_ue_s1ap_id(); - cause_c& cause(); - gw_context_release_ind_e& gw_context_release_ind(); - const uint64_t& mme_ue_s1ap_id() const; - const uint32_t& enb_ue_s1ap_id() const; - const cause_c& cause() const; - const gw_context_release_ind_e& gw_context_release_ind() const; + uint64_t& mme_ue_s1ap_id(); + uint32_t& enb_ue_s1ap_id(); + cause_c& cause(); + gw_context_release_ind_e& gw_context_release_ind(); + secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list(); + const uint64_t& mme_ue_s1ap_id() const; + const uint32_t& enb_ue_s1ap_id() const; + const cause_c& cause() const; + const gw_context_release_ind_e& gw_context_release_ind() const; + const secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list() const; private: - types type_; - choice_buffer_t c; + types type_; + choice_buffer_t c; void destroy_(); }; @@ -12836,6 +14844,9 @@ struct ue_context_suspend_request_ies_o { enb_ue_s1ap_id, info_on_recommended_cells_and_enbs_for_paging, cell_id_and_ce_level_for_ce_capable_ues, + secondary_rat_data_usage_report_list, + user_location_info, + time_since_secondary_node_release, nulltype } value; @@ -12858,14 +14869,25 @@ struct ue_context_suspend_request_ies_o { uint32_t& enb_ue_s1ap_id(); info_on_recommended_cells_and_enbs_for_paging_s& info_on_recommended_cells_and_enbs_for_paging(); cell_id_and_ce_level_for_ce_capable_ues_s& cell_id_and_ce_level_for_ce_capable_ues(); + secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list(); + user_location_info_s& user_location_info(); + fixed_octstring<4, true>& time_since_secondary_node_release(); const uint64_t& mme_ue_s1ap_id() const; const uint32_t& enb_ue_s1ap_id() const; const info_on_recommended_cells_and_enbs_for_paging_s& info_on_recommended_cells_and_enbs_for_paging() const; const cell_id_and_ce_level_for_ce_capable_ues_s& cell_id_and_ce_level_for_ce_capable_ues() const; + const secondary_rat_data_usage_report_list_l& secondary_rat_data_usage_report_list() const; + const user_location_info_s& user_location_info() const; + const fixed_octstring<4, true>& time_since_secondary_node_release() const; private: - types type_; - choice_buffer_t c; + types type_; + choice_buffer_t, + info_on_recommended_cells_and_enbs_for_paging_s, + secondary_rat_data_usage_report_list_l, + user_location_info_s> + c; void destroy_(); }; @@ -12929,7 +14951,14 @@ struct ue_info_transfer_ies_o { // Value ::= OPEN TYPE struct value_c { struct types_opts { - enum options { s_tmsi, ue_level_qos_params, ue_radio_cap, pending_data_ind, nulltype } value; + enum options { + s_tmsi, + ue_level_qos_params, + ue_radio_cap, + subscription_based_ue_differentiation_info, + pending_data_ind, + nulltype + } value; std::string to_string() const; }; @@ -12946,18 +14975,24 @@ struct ue_info_transfer_ies_o { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - s_tmsi_s& s_tmsi(); - erab_level_qos_params_s& ue_level_qos_params(); - unbounded_octstring& ue_radio_cap(); - pending_data_ind_e& pending_data_ind(); - const s_tmsi_s& s_tmsi() const; - const erab_level_qos_params_s& ue_level_qos_params() const; - const unbounded_octstring& ue_radio_cap() const; - const pending_data_ind_e& pending_data_ind() const; + s_tmsi_s& s_tmsi(); + erab_level_qos_params_s& ue_level_qos_params(); + unbounded_octstring& ue_radio_cap(); + subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info(); + pending_data_ind_e& pending_data_ind(); + const s_tmsi_s& s_tmsi() const; + const erab_level_qos_params_s& ue_level_qos_params() const; + const unbounded_octstring& ue_radio_cap() const; + const subscription_based_ue_differentiation_info_s& subscription_based_ue_differentiation_info() const; + const pending_data_ind_e& pending_data_ind() const; private: - types type_; - choice_buffer_t > c; + types type_; + choice_buffer_t > + c; void destroy_(); }; @@ -13074,6 +15109,7 @@ struct ul_nas_transport_ies_o { gw_transport_layer_address, sipto_l_gw_transport_layer_address, lhn_id, + ps_cell_info, nulltype } value; @@ -13100,6 +15136,7 @@ struct ul_nas_transport_ies_o { bounded_bitstring<1, 160, true, true>& gw_transport_layer_address(); bounded_bitstring<1, 160, true, true>& sipto_l_gw_transport_layer_address(); bounded_octstring<32, 256, true>& lhn_id(); + ps_cell_info_s& ps_cell_info(); const uint64_t& mme_ue_s1ap_id() const; const uint32_t& enb_ue_s1ap_id() const; const unbounded_octstring& nas_pdu() const; @@ -13108,12 +15145,14 @@ struct ul_nas_transport_ies_o { const bounded_bitstring<1, 160, true, true>& gw_transport_layer_address() const; const bounded_bitstring<1, 160, true, true>& sipto_l_gw_transport_layer_address() const; const bounded_octstring<32, 256, true>& lhn_id() const; + const ps_cell_info_s& ps_cell_info() const; private: types type_; choice_buffer_t, bounded_octstring<32, 256, true>, eutran_cgi_s, + ps_cell_info_s, tai_s, unbounded_octstring > c; @@ -13303,6 +15342,7 @@ struct write_replace_warning_request_ies_o { data_coding_scheme, warning_msg_contents, concurrent_warning_msg_ind, + warning_area_coordinates, nulltype } value; @@ -13332,6 +15372,7 @@ struct write_replace_warning_request_ies_o { fixed_bitstring<8, false, true>& data_coding_scheme(); bounded_octstring<1, 9600, true>& warning_msg_contents(); concurrent_warning_msg_ind_e& concurrent_warning_msg_ind(); + bounded_octstring<1, 1024, true>& warning_area_coordinates(); const fixed_bitstring<16, false, true>& msg_id() const; const fixed_bitstring<16, false, true>& serial_num() const; const warning_area_list_c& warning_area_list() const; @@ -13343,10 +15384,12 @@ struct write_replace_warning_request_ies_o { const fixed_bitstring<8, false, true>& data_coding_scheme() const; const bounded_octstring<1, 9600, true>& warning_msg_contents() const; const concurrent_warning_msg_ind_e& concurrent_warning_msg_ind() const; + const bounded_octstring<1, 1024, true>& warning_area_coordinates() const; private: types type_; - choice_buffer_t, + choice_buffer_t, + bounded_octstring<1, 9600, true>, fixed_bitstring<16, false, true>, fixed_octstring<2, true>, fixed_octstring<50, true>, @@ -13477,11 +15520,13 @@ struct location_report_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables + bool ps_cell_info_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s eutran_cgi; ie_field_s tai; ie_field_s request_type; + ie_field_s ps_cell_info; // sequence methods location_report_ies_container(); @@ -13585,10 +15630,27 @@ struct mmecp_relocation_ind_s { void to_json(json_writer& j) const; }; +struct mme_cfg_transfer_ies_container { + template + using ie_field_s = protocol_ie_container_item_s; + + // member variables + bool son_cfg_transfer_mct_present = false; + bool en_dcson_cfg_transfer_mct_present = false; + ie_field_s son_cfg_transfer_mct; + ie_field_s en_dcson_cfg_transfer_mct; + + // sequence methods + mme_cfg_transfer_ies_container(); + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MMEConfigurationTransfer ::= SEQUENCE struct mme_cfg_transfer_s { - bool ext = false; - protocol_ie_container_l protocol_ies; + bool ext = false; + mme_cfg_transfer_ies_container protocol_ies; // ... // sequence methods @@ -13930,6 +15992,8 @@ struct path_switch_request_ies_container { bool tunnel_info_for_bbf_present = false; bool lhn_id_present = false; bool rrc_resume_cause_present = false; + bool nrue_security_cap_present = false; + bool ps_cell_info_present = false; ie_field_s > enb_ue_s1ap_id; ie_field_s > erab_to_be_switched_dl_list; ie_field_s > source_mme_ue_s1ap_id; @@ -13943,6 +16007,8 @@ struct path_switch_request_ies_container { ie_field_s tunnel_info_for_bbf; ie_field_s > lhn_id; ie_field_s rrc_resume_cause; + ie_field_s nrue_security_cap; + ie_field_s ps_cell_info; // sequence methods path_switch_request_ies_container(); @@ -13968,19 +16034,24 @@ struct path_switch_request_ack_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool ueaggregate_maximum_bitrate_present = false; - bool erab_to_be_switched_ul_list_present = false; - bool erab_to_be_released_list_present = false; - bool crit_diagnostics_present = false; - bool mme_ue_s1ap_id_minus2_present = false; - bool csg_membership_status_present = false; - bool pro_se_authorized_present = false; - bool ueuser_plane_cio_tsupport_ind_present = false; - bool v2xservices_authorized_present = false; - bool ue_sidelink_aggregate_maximum_bitrate_present = false; - bool enhanced_coverage_restricted_present = false; - bool ce_mode_brestricted_present = false; - bool pending_data_ind_present = false; + bool ueaggregate_maximum_bitrate_present = false; + bool erab_to_be_switched_ul_list_present = false; + bool erab_to_be_released_list_present = false; + bool crit_diagnostics_present = false; + bool mme_ue_s1ap_id_minus2_present = false; + bool csg_membership_status_present = false; + bool pro_se_authorized_present = false; + bool ueuser_plane_cio_tsupport_ind_present = false; + bool v2xservices_authorized_present = false; + bool ue_sidelink_aggregate_maximum_bitrate_present = false; + bool enhanced_coverage_restricted_present = false; + bool nrue_security_cap_present = false; + bool ce_mode_brestricted_present = false; + bool aerial_uesubscription_info_present = false; + bool pending_data_ind_present = false; + bool subscription_based_ue_differentiation_info_present = false; + bool ho_restrict_list_present = false; + bool add_rrm_prio_idx_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s ueaggregate_maximum_bitrate; @@ -13993,10 +16064,15 @@ struct path_switch_request_ack_ies_container { ie_field_s pro_se_authorized; ie_field_s ueuser_plane_cio_tsupport_ind; ie_field_s v2xservices_authorized; - ie_field_s ue_sidelink_aggregate_maximum_bitrate; - ie_field_s enhanced_coverage_restricted; - ie_field_s ce_mode_brestricted; - ie_field_s pending_data_ind; + ie_field_s ue_sidelink_aggregate_maximum_bitrate; + ie_field_s enhanced_coverage_restricted; + ie_field_s nrue_security_cap; + ie_field_s ce_mode_brestricted; + ie_field_s aerial_uesubscription_info; + ie_field_s pending_data_ind; + ie_field_s subscription_based_ue_differentiation_info; + ie_field_s ho_restrict_list; + ie_field_s > add_rrm_prio_idx; // sequence methods path_switch_request_ack_ies_container(); @@ -14221,17 +16297,19 @@ struct s1_setup_request_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool enbname_present = false; - bool csg_id_list_present = false; - bool ue_retention_info_present = false; - bool nb_io_t_default_paging_drx_present = false; - ie_field_s global_enb_id; - ie_field_s > enbname; - ie_field_s > supported_tas; - ie_field_s default_paging_drx; - ie_field_s > csg_id_list; - ie_field_s ue_retention_info; - ie_field_s nb_io_t_default_paging_drx; + bool enbname_present = false; + bool csg_id_list_present = false; + bool ue_retention_info_present = false; + bool nb_io_t_default_paging_drx_present = false; + bool connectedeng_nb_list_present = false; + ie_field_s global_enb_id; + ie_field_s > enbname; + ie_field_s > supported_tas; + ie_field_s default_paging_drx; + ie_field_s > csg_id_list; + ie_field_s ue_retention_info; + ie_field_s nb_io_t_default_paging_drx; + ie_field_s > connectedeng_nb_list; // sequence methods s1_setup_request_ies_container(); @@ -14289,6 +16367,41 @@ struct s1_setup_resp_s { void to_json(json_writer& j) const; }; +struct secondary_rat_data_usage_report_ies_container { + template + using ie_field_s = protocol_ie_container_item_s; + + // member variables + bool ho_flag_present = false; + bool user_location_info_present = false; + bool time_since_secondary_node_release_present = false; + ie_field_s > mme_ue_s1ap_id; + ie_field_s > enb_ue_s1ap_id; + ie_field_s, 1, 256, true> > + secondary_rat_data_usage_report_list; + ie_field_s ho_flag; + ie_field_s user_location_info; + ie_field_s > time_since_secondary_node_release; + + // sequence methods + secondary_rat_data_usage_report_ies_container(); + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SecondaryRATDataUsageReport ::= SEQUENCE +struct secondary_rat_data_usage_report_s { + bool ext = false; + secondary_rat_data_usage_report_ies_container protocol_ies; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + struct trace_fail_ind_ies_container { template using ie_field_s = protocol_ie_container_item_s; @@ -14351,11 +16464,15 @@ struct ue_cap_info_ind_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool ue_radio_cap_for_paging_present = false; + bool ue_radio_cap_for_paging_present = false; + bool ue_application_layer_meas_cap_present = false; + bool lte_m_ind_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s > ue_radio_cap; ie_field_s > ue_radio_cap_for_paging; + ie_field_s > ue_application_layer_meas_cap; + ie_field_s lte_m_ind; // sequence methods ue_cap_info_ind_ies_container(); @@ -14484,6 +16601,9 @@ struct ue_context_mod_request_ies_container { bool srvcc_operation_not_possible_present = false; bool v2xservices_authorized_present = false; bool ue_sidelink_aggregate_maximum_bitrate_present = false; + bool nrue_security_cap_present = false; + bool aerial_uesubscription_info_present = false; + bool add_rrm_prio_idx_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s > security_key; @@ -14499,6 +16619,9 @@ struct ue_context_mod_request_ies_container { ie_field_s srvcc_operation_not_possible; ie_field_s v2xservices_authorized; ie_field_s ue_sidelink_aggregate_maximum_bitrate; + ie_field_s nrue_security_cap; + ie_field_s aerial_uesubscription_info; + ie_field_s > add_rrm_prio_idx; // sequence methods ue_context_mod_request_ies_container(); @@ -14584,12 +16707,17 @@ struct ue_context_release_complete_ies_container { bool user_location_info_present = false; bool info_on_recommended_cells_and_enbs_for_paging_present = false; bool cell_id_and_ce_level_for_ce_capable_ues_present = false; + bool secondary_rat_data_usage_report_list_present = false; + bool time_since_secondary_node_release_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s crit_diagnostics; ie_field_s user_location_info; ie_field_s info_on_recommended_cells_and_enbs_for_paging; ie_field_s cell_id_and_ce_level_for_ce_capable_ues; + ie_field_s, 1, 256, true> > + secondary_rat_data_usage_report_list; + ie_field_s > time_since_secondary_node_release; // sequence methods ue_context_release_complete_ies_container(); @@ -14615,11 +16743,14 @@ struct ue_context_release_request_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool gw_context_release_ind_present = false; + bool gw_context_release_ind_present = false; + bool secondary_rat_data_usage_report_list_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s cause; ie_field_s gw_context_release_ind; + ie_field_s, 1, 256, true> > + secondary_rat_data_usage_report_list; // sequence methods ue_context_release_request_ies_container(); @@ -14745,10 +16876,17 @@ struct ue_context_suspend_request_ies_container { // member variables bool info_on_recommended_cells_and_enbs_for_paging_present = false; bool cell_id_and_ce_level_for_ce_capable_ues_present = false; + bool secondary_rat_data_usage_report_list_present = false; + bool user_location_info_present = false; + bool time_since_secondary_node_release_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s info_on_recommended_cells_and_enbs_for_paging; ie_field_s cell_id_and_ce_level_for_ce_capable_ues; + ie_field_s, 1, 256, true> > + secondary_rat_data_usage_report_list; + ie_field_s user_location_info; + ie_field_s > time_since_secondary_node_release; // sequence methods ue_context_suspend_request_ies_container(); @@ -14805,13 +16943,15 @@ struct ue_info_transfer_ies_container { using ie_field_s = protocol_ie_container_item_s; // member variables - bool ue_level_qos_params_present = false; - bool ue_radio_cap_present = false; - bool pending_data_ind_present = false; - ie_field_s s_tmsi; - ie_field_s ue_level_qos_params; - ie_field_s > ue_radio_cap; - ie_field_s pending_data_ind; + bool ue_level_qos_params_present = false; + bool ue_radio_cap_present = false; + bool subscription_based_ue_differentiation_info_present = false; + bool pending_data_ind_present = false; + ie_field_s s_tmsi; + ie_field_s ue_level_qos_params; + ie_field_s > ue_radio_cap; + ie_field_s subscription_based_ue_differentiation_info; + ie_field_s pending_data_ind; // sequence methods ue_info_transfer_ies_container(); @@ -14899,6 +17039,7 @@ struct ul_nas_transport_ies_container { bool gw_transport_layer_address_present = false; bool sipto_l_gw_transport_layer_address_present = false; bool lhn_id_present = false; + bool ps_cell_info_present = false; ie_field_s > mme_ue_s1ap_id; ie_field_s > enb_ue_s1ap_id; ie_field_s > nas_pdu; @@ -14907,6 +17048,7 @@ struct ul_nas_transport_ies_container { ie_field_s > gw_transport_layer_address; ie_field_s > sipto_l_gw_transport_layer_address; ie_field_s > lhn_id; + ie_field_s ps_cell_info; // sequence methods ul_nas_transport_ies_container(); @@ -15033,6 +17175,7 @@ struct write_replace_warning_request_ies_container { bool data_coding_scheme_present = false; bool warning_msg_contents_present = false; bool concurrent_warning_msg_ind_present = false; + bool warning_area_coordinates_present = false; ie_field_s > msg_id; ie_field_s > serial_num; ie_field_s warning_area_list; @@ -15044,6 +17187,7 @@ struct write_replace_warning_request_ies_container { ie_field_s > data_coding_scheme; ie_field_s > warning_msg_contents; ie_field_s concurrent_warning_msg_ind; + ie_field_s > warning_area_coordinates; // sequence methods write_replace_warning_request_ies_container(); @@ -15578,11 +17722,11 @@ struct last_visited_geran_cell_info_c { // LastVisitedCell-Item ::= CHOICE struct last_visited_cell_item_c { struct types_opts { - enum options { e_utran_cell, utran_cell, geran_cell, /*...*/ nulltype } value; + enum options { e_utran_cell, utran_cell, geran_cell, /*...*/ ng_ran_cell, nulltype } value; std::string to_string() const; }; - typedef enumerated types; + typedef enumerated types; // choice methods last_visited_cell_item_c() = default; @@ -15610,6 +17754,11 @@ struct last_visited_cell_item_c { assert_choice_type("gERAN-Cell", type_.to_string(), "LastVisitedCell-Item"); return c.get(); } + unbounded_octstring& ng_ran_cell() + { + assert_choice_type("nG-RAN-Cell", type_.to_string(), "LastVisitedCell-Item"); + return c.get >(); + } const last_visited_eutran_cell_info_s& e_utran_cell() const { assert_choice_type("e-UTRAN-Cell", type_.to_string(), "LastVisitedCell-Item"); @@ -15625,6 +17774,11 @@ struct last_visited_cell_item_c { assert_choice_type("gERAN-Cell", type_.to_string(), "LastVisitedCell-Item"); return c.get(); } + const unbounded_octstring& ng_ran_cell() const + { + assert_choice_type("nG-RAN-Cell", type_.to_string(), "LastVisitedCell-Item"); + return c.get >(); + } last_visited_eutran_cell_info_s& set_e_utran_cell() { set(types::e_utran_cell); @@ -15640,6 +17794,11 @@ struct last_visited_cell_item_c { set(types::geran_cell); return c.get(); } + unbounded_octstring& set_ng_ran_cell() + { + set(types::ng_ran_cell); + return c.get >(); + } private: types type_; @@ -16291,14 +18450,31 @@ private: void destroy_(); }; +// IMSvoiceEPSfallbackfrom5G ::= ENUMERATED +struct im_svoice_ep_sfallbackfrom5_g_opts { + enum options { true_value, /*...*/ nulltype } value; + + std::string to_string() const; +}; +typedef enumerated im_svoice_ep_sfallbackfrom5_g_e; + // SourceeNB-ToTargeteNB-TransparentContainer-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION struct sourceenb_to_targetenb_transparent_container_ext_ies_o { // Extension ::= OPEN TYPE struct ext_c { struct types_opts { - enum options { mob_info, ue_history_info_from_the_ue, nulltype } value; + enum options { + mob_info, + ue_history_info_from_the_ue, + im_svoice_ep_sfallbackfrom5_g, + add_rrm_prio_idx, + contextat_source, + nulltype + } value; + typedef uint8_t number_type; std::string to_string() const; + uint8_t to_number() const; }; typedef enumerated types; @@ -16315,12 +18491,18 @@ struct sourceenb_to_targetenb_transparent_container_ext_ies_o { // getters fixed_bitstring<32, false, true>& mob_info(); unbounded_octstring& ue_history_info_from_the_ue(); + im_svoice_ep_sfallbackfrom5_g_e& im_svoice_ep_sfallbackfrom5_g(); + fixed_bitstring<32, false, true>& add_rrm_prio_idx(); + contextat_source_s& contextat_source(); const fixed_bitstring<32, false, true>& mob_info() const; const unbounded_octstring& ue_history_info_from_the_ue() const; + const im_svoice_ep_sfallbackfrom5_g_e& im_svoice_ep_sfallbackfrom5_g() const; + const fixed_bitstring<32, false, true>& add_rrm_prio_idx() const; + const contextat_source_s& contextat_source() const; private: - types type_; - choice_buffer_t, unbounded_octstring > c; + types type_; + choice_buffer_t, unbounded_octstring > c; void destroy_(); }; @@ -16341,10 +18523,16 @@ struct sourceenb_to_targetenb_transparent_container_ext_ies_container { using ie_field_s = protocol_ext_container_item_s; // member variables - bool mob_info_present = false; - bool ue_history_info_from_the_ue_present = false; + bool mob_info_present = false; + bool ue_history_info_from_the_ue_present = false; + bool im_svoice_ep_sfallbackfrom5_g_present = false; + bool add_rrm_prio_idx_present = false; + bool contextat_source_present = false; ie_field_s > mob_info; ie_field_s > ue_history_info_from_the_ue; + ie_field_s im_svoice_ep_sfallbackfrom5_g; + ie_field_s > add_rrm_prio_idx; + ie_field_s contextat_source; // sequence methods sourceenb_to_targetenb_transparent_container_ext_ies_container(); diff --git a/lib/src/asn1/s1ap.cc b/lib/src/asn1/s1ap.cc index 43b49c50a..f11d42ca4 100644 --- a/lib/src/asn1/s1ap.cc +++ b/lib/src/asn1/s1ap.cc @@ -956,6 +956,336 @@ std::string area_scope_of_mdt_c::types_opts::to_string() const return convert_enum_idx(options, 4, value, "area_scope_of_mdt_c::types"); } +// CellBasedQMC ::= SEQUENCE +SRSASN_CODE cell_based_qmc_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(pack_dyn_seq_of(bref, cell_id_listfor_qmc, 1, 32, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE cell_based_qmc_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(unpack_dyn_seq_of(cell_id_listfor_qmc, bref, 1, 32, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void cell_based_qmc_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("cellIdListforQMC"); + for (const auto& e1 : cell_id_listfor_qmc) { + e1.to_json(j); + } + j.end_array(); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// PLMNAreaBasedQMC ::= SEQUENCE +SRSASN_CODE plmn_area_based_qmc_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(pack_dyn_seq_of(bref, plmn_listfor_qmc, 1, 16, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE plmn_area_based_qmc_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(unpack_dyn_seq_of(plmn_listfor_qmc, bref, 1, 16, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void plmn_area_based_qmc_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("plmnListforQMC"); + for (const auto& e1 : plmn_listfor_qmc) { + j.write_str(e1.to_string()); + } + j.end_array(); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// TABasedQMC ::= SEQUENCE +SRSASN_CODE ta_based_qmc_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(pack_dyn_seq_of(bref, talistfor_qmc, 1, 8, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ta_based_qmc_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(unpack_dyn_seq_of(talistfor_qmc, bref, 1, 8, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ta_based_qmc_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("tAListforQMC"); + for (const auto& e1 : talistfor_qmc) { + j.write_str(e1.to_string()); + } + j.end_array(); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// TAIBasedQMC ::= SEQUENCE +SRSASN_CODE tai_based_qmc_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(pack_dyn_seq_of(bref, tai_listfor_qmc, 1, 8, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE tai_based_qmc_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(unpack_dyn_seq_of(tai_listfor_qmc, bref, 1, 8, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void tai_based_qmc_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("tAIListforQMC"); + for (const auto& e1 : tai_listfor_qmc) { + e1.to_json(j); + } + j.end_array(); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// AreaScopeOfQMC ::= CHOICE +void area_scope_of_qmc_c::destroy_() +{ + switch (type_) { + case types::cell_based: + c.destroy(); + break; + case types::tabased: + c.destroy(); + break; + case types::tai_based: + c.destroy(); + break; + case types::plmn_area_based: + c.destroy(); + break; + default: + break; + } +} +void area_scope_of_qmc_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::cell_based: + c.init(); + break; + case types::tabased: + c.init(); + break; + case types::tai_based: + c.init(); + break; + case types::plmn_area_based: + c.init(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "area_scope_of_qmc_c"); + } +} +area_scope_of_qmc_c::area_scope_of_qmc_c(const area_scope_of_qmc_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::cell_based: + c.init(other.c.get()); + break; + case types::tabased: + c.init(other.c.get()); + break; + case types::tai_based: + c.init(other.c.get()); + break; + case types::plmn_area_based: + c.init(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "area_scope_of_qmc_c"); + } +} +area_scope_of_qmc_c& area_scope_of_qmc_c::operator=(const area_scope_of_qmc_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::cell_based: + c.set(other.c.get()); + break; + case types::tabased: + c.set(other.c.get()); + break; + case types::tai_based: + c.set(other.c.get()); + break; + case types::plmn_area_based: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "area_scope_of_qmc_c"); + } + + return *this; +} +void area_scope_of_qmc_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::cell_based: + j.write_fieldname("cellBased"); + c.get().to_json(j); + break; + case types::tabased: + j.write_fieldname("tABased"); + c.get().to_json(j); + break; + case types::tai_based: + j.write_fieldname("tAIBased"); + c.get().to_json(j); + break; + case types::plmn_area_based: + j.write_fieldname("pLMNAreaBased"); + c.get().to_json(j); + break; + default: + log_invalid_choice_id(type_, "area_scope_of_qmc_c"); + } + j.end_obj(); +} +SRSASN_CODE area_scope_of_qmc_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::cell_based: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::tabased: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::tai_based: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::plmn_area_based: + HANDLE_CODE(c.get().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "area_scope_of_qmc_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE area_scope_of_qmc_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::cell_based: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::tabased: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::tai_based: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::plmn_area_based: + HANDLE_CODE(c.get().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "area_scope_of_qmc_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +std::string area_scope_of_qmc_c::types_opts::to_string() const +{ + static const char* options[] = {"cellBased", "tABased", "tAIBased", "pLMNAreaBased"}; + return convert_enum_idx(options, 4, value, "area_scope_of_qmc_c::types"); +} + // CellIdentifierAndCELevelForCECapableUEs ::= SEQUENCE SRSASN_CODE cell_id_and_ce_level_for_ce_capable_ues_s::pack(bit_ref& bref) const { @@ -2079,6 +2409,81 @@ std::string bearers_subject_to_status_transfer_item_ies_o::value_c::types_opts:: template struct asn1::s1ap::protocol_ie_single_container_s; +// BluetoothMeasConfig ::= ENUMERATED +std::string bluetooth_meas_cfg_opts::to_string() const +{ + static const char* options[] = {"setup"}; + return convert_enum_idx(options, 1, value, "bluetooth_meas_cfg_e"); +} + +// BluetoothMeasurementConfiguration ::= SEQUENCE +SRSASN_CODE bluetooth_meas_cfg_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(bluetooth_meas_cfg_name_list_present, 1)); + HANDLE_CODE(bref.pack(bt_rssi_present, 1)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(bluetooth_meas_cfg.pack(bref)); + if (bluetooth_meas_cfg_name_list_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, bluetooth_meas_cfg_name_list, 1, 4, true)); + } + if (bt_rssi_present) { + HANDLE_CODE(bt_rssi.pack(bref)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE bluetooth_meas_cfg_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(bluetooth_meas_cfg_name_list_present, 1)); + HANDLE_CODE(bref.unpack(bt_rssi_present, 1)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(bluetooth_meas_cfg.unpack(bref)); + if (bluetooth_meas_cfg_name_list_present) { + HANDLE_CODE(unpack_dyn_seq_of(bluetooth_meas_cfg_name_list, bref, 1, 4, true)); + } + if (bt_rssi_present) { + HANDLE_CODE(bt_rssi.unpack(bref)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void bluetooth_meas_cfg_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("bluetoothMeasConfig", "setup"); + if (bluetooth_meas_cfg_name_list_present) { + j.start_array("bluetoothMeasConfigNameList"); + for (const auto& e1 : bluetooth_meas_cfg_name_list) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (bt_rssi_present) { + j.write_str("bt-rssi", "true"); + } + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +std::string bluetooth_meas_cfg_s::bt_rssi_opts::to_string() const +{ + static const char* options[] = {"true"}; + return convert_enum_idx(options, 1, value, "bluetooth_meas_cfg_s::bt_rssi_e_"); +} + // CancelledCellinEAI-Item ::= SEQUENCE SRSASN_CODE cancelled_cellin_eai_item_s::pack(bit_ref& bref) const { @@ -2853,6 +3258,57 @@ void cgi_s::to_json(json_writer& j) const j.end_obj(); } +// CNType ::= ENUMERATED +std::string cn_type_opts::to_string() const +{ + static const char* options[] = {"fiveGCForbidden", "epc-Forbiddden"}; + return convert_enum_idx(options, 2, value, "cn_type_e"); +} +uint8_t cn_type_opts::to_number() const +{ + static const uint8_t options[] = {5}; + return map_enum_number(options, 1, value, "cn_type_e"); +} + +// CNTypeRestrictions-Item ::= SEQUENCE +SRSASN_CODE cn_type_restricts_item_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(plmn_id.pack(bref)); + HANDLE_CODE(cntype.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE cn_type_restricts_item_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(plmn_id.unpack(bref)); + HANDLE_CODE(cntype.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void cn_type_restricts_item_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("pLMN-Identity", plmn_id.to_string()); + j.write_str("cNType", cntype.to_string()); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + // CSG-IdList-Item ::= SEQUENCE SRSASN_CODE csg_id_list_item_s::pack(bit_ref& bref) const { @@ -4384,65 +4840,168 @@ void cell_type_s::to_json(json_writer& j) const j.end_obj(); } -// CE-ModeBRestricted ::= ENUMERATED -std::string ce_mode_brestricted_opts::to_string() const +// RAT-Type ::= ENUMERATED +std::string rat_type_opts::to_string() const { - static const char* options[] = {"restricted", "not-restricted"}; - return convert_enum_idx(options, 2, value, "ce_mode_brestricted_e"); + static const char* options[] = {"nbiot"}; + return convert_enum_idx(options, 1, value, "rat_type_e"); } -// DL-CP-SecurityInformation ::= SEQUENCE -SRSASN_CODE dl_cp_security_info_s::pack(bit_ref& bref) const +// SupportedTAs-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t supported_tas_item_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {232}; + return map_enum_number(options, 1, idx, "id"); +} +bool supported_tas_item_ext_ies_o::is_id_valid(const uint32_t& id) +{ + return 232 == id; +} +crit_e supported_tas_item_ext_ies_o::get_crit(const uint32_t& id) +{ + if (id == 232) { + return crit_e::reject; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} +supported_tas_item_ext_ies_o::ext_c supported_tas_item_ext_ies_o::get_ext(const uint32_t& id) +{ + ext_c ret{}; + if (id != 232) { + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e supported_tas_item_ext_ies_o::get_presence(const uint32_t& id) +{ + if (id == 232) { + return presence_e::optional; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} + +// Extension ::= OPEN TYPE +void supported_tas_item_ext_ies_o::ext_c::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("RAT-Type", "nbiot"); + j.end_obj(); +} +SRSASN_CODE supported_tas_item_ext_ies_o::ext_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE supported_tas_item_ext_ies_o::ext_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string supported_tas_item_ext_ies_o::ext_c::types_opts::to_string() const +{ + static const char* options[] = {"RAT-Type"}; + return convert_enum_idx(options, 1, value, "supported_tas_item_ext_ies_o::ext_c::types"); +} + +// SupportedTAs-Item ::= SEQUENCE +SRSASN_CODE supported_tas_item_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(dl_nas_mac.pack(bref)); + HANDLE_CODE(tac.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, broadcast_plmns, 1, 6, true)); if (ie_exts_present) { - HANDLE_CODE(ie_exts.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); } return SRSASN_SUCCESS; } -SRSASN_CODE dl_cp_security_info_s::unpack(cbit_ref& bref) +SRSASN_CODE supported_tas_item_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(dl_nas_mac.unpack(bref)); + HANDLE_CODE(tac.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(broadcast_plmns, bref, 1, 6, true)); if (ie_exts_present) { - HANDLE_CODE(ie_exts.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); } return SRSASN_SUCCESS; } -void dl_cp_security_info_s::to_json(json_writer& j) const +void supported_tas_item_s::to_json(json_writer& j) const { j.start_obj(); - j.write_str("dl-NAS-MAC", dl_nas_mac.to_string()); + j.write_str("tAC", tac.to_string()); + j.start_array("broadcastPLMNs"); + for (const auto& e1 : broadcast_plmns) { + j.write_str(e1.to_string()); + } + j.end_array(); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); - ie_exts.to_json(j); } j.end_obj(); } -// EnhancedCoverageRestricted ::= ENUMERATED -std::string enhanced_coverage_restricted_opts::to_string() const +// ConnectedengNBItem ::= SEQUENCE +SRSASN_CODE connectedeng_nb_item_s::pack(bit_ref& bref) const { - static const char* options[] = {"restricted"}; - return convert_enum_idx(options, 1, value, "enhanced_coverage_restricted_e"); + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(en_g_nb_id.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, supported_tas, 1, 256, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; } +SRSASN_CODE connectedeng_nb_item_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); -// ConnectionEstablishmentIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES -uint32_t conn_establishment_ind_ies_o::idx_to_id(uint32_t idx) + HANDLE_CODE(en_g_nb_id.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(supported_tas, bref, 1, 256, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void connectedeng_nb_item_s::to_json(json_writer& j) const { - static const uint32_t options[] = {0, 8, 74, 251, 253, 271}; - return map_enum_number(options, 6, idx, "id"); + j.start_obj(); + j.write_str("en-gNB-ID", en_g_nb_id.to_string()); + j.start_array("supportedTAs"); + for (const auto& e1 : supported_tas) { + e1.to_json(j); + } + j.end_array(); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); } -bool conn_establishment_ind_ies_o::is_id_valid(const uint32_t& id) + +// GBR-QosInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t gbr_qos_info_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {255, 256, 257, 258}; + return map_enum_number(options, 4, idx, "id"); +} +bool gbr_qos_info_ext_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 74, 251, 253, 271}; + static const uint32_t options[] = {255, 256, 257, 258}; for (const auto& o : options) { if (o == id) { return true; @@ -4450,67 +5009,53 @@ bool conn_establishment_ind_ies_o::is_id_valid(const uint32_t& id) } return false; } -crit_e conn_establishment_ind_ies_o::get_crit(const uint32_t& id) +crit_e gbr_qos_info_ext_ies_o::get_crit(const uint32_t& id) { switch (id) { - case 0: - return crit_e::ignore; - case 8: - return crit_e::ignore; - case 74: + case 255: return crit_e::ignore; - case 251: + case 256: return crit_e::ignore; - case 253: + case 257: return crit_e::ignore; - case 271: + case 258: return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } return {}; } -conn_establishment_ind_ies_o::value_c conn_establishment_ind_ies_o::get_value(const uint32_t& id) +gbr_qos_info_ext_ies_o::ext_c gbr_qos_info_ext_ies_o::get_ext(const uint32_t& id) { - value_c ret{}; + ext_c ret{}; switch (id) { - case 0: - ret.set(value_c::types::mme_ue_s1ap_id); + case 255: + ret.set(ext_c::types::extended_erab_maximum_bitrate_dl); break; - case 8: - ret.set(value_c::types::enb_ue_s1ap_id); - break; - case 74: - ret.set(value_c::types::ue_radio_cap); - break; - case 251: - ret.set(value_c::types::enhanced_coverage_restricted); + case 256: + ret.set(ext_c::types::extended_erab_maximum_bitrate_ul); break; - case 253: - ret.set(value_c::types::dl_cp_security_info); + case 257: + ret.set(ext_c::types::extended_erab_guaranteed_bitrate_dl); break; - case 271: - ret.set(value_c::types::ce_mode_brestricted); + case 258: + ret.set(ext_c::types::extended_erab_guaranteed_bitrate_ul); break; default: asn1::log_error("The id=%d is not recognized", id); } return ret; } -presence_e conn_establishment_ind_ies_o::get_presence(const uint32_t& id) +presence_e gbr_qos_info_ext_ies_o::get_presence(const uint32_t& id) { switch (id) { - case 0: - return presence_e::mandatory; - case 8: - return presence_e::mandatory; - case 74: + case 255: return presence_e::optional; - case 251: + case 256: return presence_e::optional; - case 253: + case 257: return presence_e::optional; - case 271: + case 258: return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); @@ -4518,449 +5063,598 @@ presence_e conn_establishment_ind_ies_o::get_presence(const uint32_t& id) return {}; } -// Value ::= OPEN TYPE -uint64_t& conn_establishment_ind_ies_o::value_c::mme_ue_s1ap_id() +// Extension ::= OPEN TYPE +uint64_t& gbr_qos_info_ext_ies_o::ext_c::extended_erab_maximum_bitrate_dl() { - assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); return c.get(); } -uint32_t& conn_establishment_ind_ies_o::value_c::enb_ue_s1ap_id() -{ - assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); - return c.get(); -} -unbounded_octstring& conn_establishment_ind_ies_o::value_c::ue_radio_cap() -{ - assert_choice_type("OCTET STRING", type_.to_string(), "Value"); - return c.get >(); -} -enhanced_coverage_restricted_e& conn_establishment_ind_ies_o::value_c::enhanced_coverage_restricted() +uint64_t& gbr_qos_info_ext_ies_o::ext_c::extended_erab_maximum_bitrate_ul() { - assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); - return c.get(); + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); + return c.get(); } -dl_cp_security_info_s& conn_establishment_ind_ies_o::value_c::dl_cp_security_info() +uint64_t& gbr_qos_info_ext_ies_o::ext_c::extended_erab_guaranteed_bitrate_dl() { - assert_choice_type("DL-CP-SecurityInformation", type_.to_string(), "Value"); - return c.get(); + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); + return c.get(); } -ce_mode_brestricted_e& conn_establishment_ind_ies_o::value_c::ce_mode_brestricted() +uint64_t& gbr_qos_info_ext_ies_o::ext_c::extended_erab_guaranteed_bitrate_ul() { - assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); - return c.get(); + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); + return c.get(); } -const uint64_t& conn_establishment_ind_ies_o::value_c::mme_ue_s1ap_id() const +const uint64_t& gbr_qos_info_ext_ies_o::ext_c::extended_erab_maximum_bitrate_dl() const { - assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); return c.get(); } -const uint32_t& conn_establishment_ind_ies_o::value_c::enb_ue_s1ap_id() const +const uint64_t& gbr_qos_info_ext_ies_o::ext_c::extended_erab_maximum_bitrate_ul() const { - assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); - return c.get(); + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); + return c.get(); } -const unbounded_octstring& conn_establishment_ind_ies_o::value_c::ue_radio_cap() const +const uint64_t& gbr_qos_info_ext_ies_o::ext_c::extended_erab_guaranteed_bitrate_dl() const { - assert_choice_type("OCTET STRING", type_.to_string(), "Value"); - return c.get >(); + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); + return c.get(); } -const enhanced_coverage_restricted_e& conn_establishment_ind_ies_o::value_c::enhanced_coverage_restricted() const +const uint64_t& gbr_qos_info_ext_ies_o::ext_c::extended_erab_guaranteed_bitrate_ul() const { - assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); - return c.get(); + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); + return c.get(); } -const dl_cp_security_info_s& conn_establishment_ind_ies_o::value_c::dl_cp_security_info() const +void gbr_qos_info_ext_ies_o::ext_c::destroy_() {} +void gbr_qos_info_ext_ies_o::ext_c::set(types::options e) { - assert_choice_type("DL-CP-SecurityInformation", type_.to_string(), "Value"); - return c.get(); + destroy_(); + type_ = e; } -const ce_mode_brestricted_e& conn_establishment_ind_ies_o::value_c::ce_mode_brestricted() const +gbr_qos_info_ext_ies_o::ext_c::ext_c(const gbr_qos_info_ext_ies_o::ext_c& other) { - assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); - return c.get(); + type_ = other.type(); + switch (type_) { + case types::extended_erab_maximum_bitrate_dl: + c.init(other.c.get()); + break; + case types::extended_erab_maximum_bitrate_ul: + c.init(other.c.get()); + break; + case types::extended_erab_guaranteed_bitrate_dl: + c.init(other.c.get()); + break; + case types::extended_erab_guaranteed_bitrate_ul: + c.init(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "gbr_qos_info_ext_ies_o::ext_c"); + } } -void conn_establishment_ind_ies_o::value_c::destroy_() +gbr_qos_info_ext_ies_o::ext_c& gbr_qos_info_ext_ies_o::ext_c::operator=(const gbr_qos_info_ext_ies_o::ext_c& other) { + if (this == &other) { + return *this; + } + set(other.type()); switch (type_) { - case types::ue_radio_cap: - c.destroy >(); + case types::extended_erab_maximum_bitrate_dl: + c.set(other.c.get()); break; - case types::dl_cp_security_info: - c.destroy(); + case types::extended_erab_maximum_bitrate_ul: + c.set(other.c.get()); break; - default: + case types::extended_erab_guaranteed_bitrate_dl: + c.set(other.c.get()); break; + case types::extended_erab_guaranteed_bitrate_ul: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "gbr_qos_info_ext_ies_o::ext_c"); } + + return *this; } -void conn_establishment_ind_ies_o::value_c::set(types::options e) +void gbr_qos_info_ext_ies_o::ext_c::to_json(json_writer& j) const { - destroy_(); - type_ = e; + j.start_obj(); switch (type_) { - case types::mme_ue_s1ap_id: + case types::extended_erab_maximum_bitrate_dl: + j.write_int("INTEGER (10000000001..4000000000000,...)", c.get()); break; - case types::enb_ue_s1ap_id: + case types::extended_erab_maximum_bitrate_ul: + j.write_int("INTEGER (10000000001..4000000000000,...)", c.get()); break; - case types::ue_radio_cap: - c.init >(); + case types::extended_erab_guaranteed_bitrate_dl: + j.write_int("INTEGER (10000000001..4000000000000,...)", c.get()); break; - case types::enhanced_coverage_restricted: + case types::extended_erab_guaranteed_bitrate_ul: + j.write_int("INTEGER (10000000001..4000000000000,...)", c.get()); break; - case types::dl_cp_security_info: - c.init(); + default: + log_invalid_choice_id(type_, "gbr_qos_info_ext_ies_o::ext_c"); + } + j.end_obj(); +} +SRSASN_CODE gbr_qos_info_ext_ies_o::ext_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + switch (type_) { + case types::extended_erab_maximum_bitrate_dl: + HANDLE_CODE(pack_integer(bref, c.get(), (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); break; - case types::ce_mode_brestricted: + case types::extended_erab_maximum_bitrate_ul: + HANDLE_CODE(pack_integer(bref, c.get(), (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); break; - case types::nulltype: + case types::extended_erab_guaranteed_bitrate_dl: + HANDLE_CODE(pack_integer(bref, c.get(), (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); + break; + case types::extended_erab_guaranteed_bitrate_ul: + HANDLE_CODE(pack_integer(bref, c.get(), (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); break; default: - log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); + log_invalid_choice_id(type_, "gbr_qos_info_ext_ies_o::ext_c"); + return SRSASN_ERROR_ENCODE_FAIL; } + return SRSASN_SUCCESS; } -conn_establishment_ind_ies_o::value_c::value_c(const conn_establishment_ind_ies_o::value_c& other) +SRSASN_CODE gbr_qos_info_ext_ies_o::ext_c::unpack(cbit_ref& bref) { - type_ = other.type(); + varlength_field_unpack_guard varlen_scope(bref, true); switch (type_) { - case types::mme_ue_s1ap_id: - c.init(other.c.get()); + case types::extended_erab_maximum_bitrate_dl: + HANDLE_CODE( + unpack_integer(c.get(), bref, (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); break; - case types::enb_ue_s1ap_id: - c.init(other.c.get()); + case types::extended_erab_maximum_bitrate_ul: + HANDLE_CODE( + unpack_integer(c.get(), bref, (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); break; - case types::ue_radio_cap: - c.init(other.c.get >()); + case types::extended_erab_guaranteed_bitrate_dl: + HANDLE_CODE( + unpack_integer(c.get(), bref, (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); break; - case types::enhanced_coverage_restricted: - c.init(other.c.get()); + case types::extended_erab_guaranteed_bitrate_ul: + HANDLE_CODE( + unpack_integer(c.get(), bref, (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); break; - case types::dl_cp_security_info: - c.init(other.c.get()); + default: + log_invalid_choice_id(type_, "gbr_qos_info_ext_ies_o::ext_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +std::string gbr_qos_info_ext_ies_o::ext_c::types_opts::to_string() const +{ + static const char* options[] = {"INTEGER (10000000001..4000000000000,...)", + "INTEGER (10000000001..4000000000000,...)", + "INTEGER (10000000001..4000000000000,...)", + "INTEGER (10000000001..4000000000000,...)"}; + return convert_enum_idx(options, 4, value, "gbr_qos_info_ext_ies_o::ext_c::types"); +} + +// E-RABQoSParameters-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t erab_qos_params_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {273, 274}; + return map_enum_number(options, 2, idx, "id"); +} +bool erab_qos_params_ext_ies_o::is_id_valid(const uint32_t& id) +{ + static const uint32_t options[] = {273, 274}; + for (const auto& o : options) { + if (o == id) { + return true; + } + } + return false; +} +crit_e erab_qos_params_ext_ies_o::get_crit(const uint32_t& id) +{ + switch (id) { + case 273: + return crit_e::ignore; + case 274: + return crit_e::ignore; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} +erab_qos_params_ext_ies_o::ext_c erab_qos_params_ext_ies_o::get_ext(const uint32_t& id) +{ + ext_c ret{}; + switch (id) { + case 273: + ret.set(ext_c::types::dl_packet_loss_rate); break; - case types::ce_mode_brestricted: - c.init(other.c.get()); + case 274: + ret.set(ext_c::types::ul_packet_loss_rate); + break; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e erab_qos_params_ext_ies_o::get_presence(const uint32_t& id) +{ + switch (id) { + case 273: + return presence_e::optional; + case 274: + return presence_e::optional; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} + +// Extension ::= OPEN TYPE +uint16_t& erab_qos_params_ext_ies_o::ext_c::dl_packet_loss_rate() +{ + assert_choice_type("INTEGER (0..1000)", type_.to_string(), "Extension"); + return c.get(); +} +uint16_t& erab_qos_params_ext_ies_o::ext_c::ul_packet_loss_rate() +{ + assert_choice_type("INTEGER (0..1000)", type_.to_string(), "Extension"); + return c.get(); +} +const uint16_t& erab_qos_params_ext_ies_o::ext_c::dl_packet_loss_rate() const +{ + assert_choice_type("INTEGER (0..1000)", type_.to_string(), "Extension"); + return c.get(); +} +const uint16_t& erab_qos_params_ext_ies_o::ext_c::ul_packet_loss_rate() const +{ + assert_choice_type("INTEGER (0..1000)", type_.to_string(), "Extension"); + return c.get(); +} +void erab_qos_params_ext_ies_o::ext_c::destroy_() {} +void erab_qos_params_ext_ies_o::ext_c::set(types::options e) +{ + destroy_(); + type_ = e; +} +erab_qos_params_ext_ies_o::ext_c::ext_c(const erab_qos_params_ext_ies_o::ext_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::dl_packet_loss_rate: + c.init(other.c.get()); + break; + case types::ul_packet_loss_rate: + c.init(other.c.get()); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); + log_invalid_choice_id(type_, "erab_qos_params_ext_ies_o::ext_c"); } } -conn_establishment_ind_ies_o::value_c& -conn_establishment_ind_ies_o::value_c::operator=(const conn_establishment_ind_ies_o::value_c& other) +erab_qos_params_ext_ies_o::ext_c& +erab_qos_params_ext_ies_o::ext_c::operator=(const erab_qos_params_ext_ies_o::ext_c& other) { if (this == &other) { return *this; } set(other.type()); switch (type_) { - case types::mme_ue_s1ap_id: - c.set(other.c.get()); - break; - case types::enb_ue_s1ap_id: - c.set(other.c.get()); - break; - case types::ue_radio_cap: - c.set(other.c.get >()); - break; - case types::enhanced_coverage_restricted: - c.set(other.c.get()); - break; - case types::dl_cp_security_info: - c.set(other.c.get()); + case types::dl_packet_loss_rate: + c.set(other.c.get()); break; - case types::ce_mode_brestricted: - c.set(other.c.get()); + case types::ul_packet_loss_rate: + c.set(other.c.get()); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); + log_invalid_choice_id(type_, "erab_qos_params_ext_ies_o::ext_c"); } return *this; } -void conn_establishment_ind_ies_o::value_c::to_json(json_writer& j) const +void erab_qos_params_ext_ies_o::ext_c::to_json(json_writer& j) const { j.start_obj(); switch (type_) { - case types::mme_ue_s1ap_id: - j.write_int("INTEGER (0..4294967295)", c.get()); - break; - case types::enb_ue_s1ap_id: - j.write_int("INTEGER (0..16777215)", c.get()); - break; - case types::ue_radio_cap: - j.write_str("OCTET STRING", c.get >().to_string()); + case types::dl_packet_loss_rate: + j.write_int("INTEGER (0..1000)", c.get()); break; - case types::enhanced_coverage_restricted: - j.write_str("EnhancedCoverageRestricted", "restricted"); - break; - case types::dl_cp_security_info: - j.write_fieldname("DL-CP-SecurityInformation"); - c.get().to_json(j); - break; - case types::ce_mode_brestricted: - j.write_str("CE-ModeBRestricted", c.get().to_string()); + case types::ul_packet_loss_rate: + j.write_int("INTEGER (0..1000)", c.get()); break; default: - log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); + log_invalid_choice_id(type_, "erab_qos_params_ext_ies_o::ext_c"); } j.end_obj(); } -SRSASN_CODE conn_establishment_ind_ies_o::value_c::pack(bit_ref& bref) const +SRSASN_CODE erab_qos_params_ext_ies_o::ext_c::pack(bit_ref& bref) const { varlength_field_pack_guard varlen_scope(bref, true); switch (type_) { - case types::mme_ue_s1ap_id: - HANDLE_CODE(pack_integer(bref, c.get(), (uint64_t)0u, (uint64_t)4294967295u, false, true)); - break; - case types::enb_ue_s1ap_id: - HANDLE_CODE(pack_integer(bref, c.get(), (uint32_t)0u, (uint32_t)16777215u, false, true)); + case types::dl_packet_loss_rate: + HANDLE_CODE(pack_integer(bref, c.get(), (uint16_t)0u, (uint16_t)1000u, false, true)); break; - case types::ue_radio_cap: - HANDLE_CODE(c.get >().pack(bref)); - break; - case types::enhanced_coverage_restricted: - HANDLE_CODE(c.get().pack(bref)); - break; - case types::dl_cp_security_info: - HANDLE_CODE(c.get().pack(bref)); - break; - case types::ce_mode_brestricted: - HANDLE_CODE(c.get().pack(bref)); + case types::ul_packet_loss_rate: + HANDLE_CODE(pack_integer(bref, c.get(), (uint16_t)0u, (uint16_t)1000u, false, true)); break; default: - log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); + log_invalid_choice_id(type_, "erab_qos_params_ext_ies_o::ext_c"); return SRSASN_ERROR_ENCODE_FAIL; } return SRSASN_SUCCESS; } -SRSASN_CODE conn_establishment_ind_ies_o::value_c::unpack(cbit_ref& bref) +SRSASN_CODE erab_qos_params_ext_ies_o::ext_c::unpack(cbit_ref& bref) { varlength_field_unpack_guard varlen_scope(bref, true); switch (type_) { - case types::mme_ue_s1ap_id: - HANDLE_CODE(unpack_integer(c.get(), bref, (uint64_t)0u, (uint64_t)4294967295u, false, true)); - break; - case types::enb_ue_s1ap_id: - HANDLE_CODE(unpack_integer(c.get(), bref, (uint32_t)0u, (uint32_t)16777215u, false, true)); - break; - case types::ue_radio_cap: - HANDLE_CODE(c.get >().unpack(bref)); - break; - case types::enhanced_coverage_restricted: - HANDLE_CODE(c.get().unpack(bref)); + case types::dl_packet_loss_rate: + HANDLE_CODE(unpack_integer(c.get(), bref, (uint16_t)0u, (uint16_t)1000u, false, true)); break; - case types::dl_cp_security_info: - HANDLE_CODE(c.get().unpack(bref)); - break; - case types::ce_mode_brestricted: - HANDLE_CODE(c.get().unpack(bref)); + case types::ul_packet_loss_rate: + HANDLE_CODE(unpack_integer(c.get(), bref, (uint16_t)0u, (uint16_t)1000u, false, true)); break; default: - log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); + log_invalid_choice_id(type_, "erab_qos_params_ext_ies_o::ext_c"); return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; } -std::string conn_establishment_ind_ies_o::value_c::types_opts::to_string() const +std::string erab_qos_params_ext_ies_o::ext_c::types_opts::to_string() const { - static const char* options[] = {"INTEGER (0..4294967295)", - "INTEGER (0..16777215)", - "OCTET STRING", - "EnhancedCoverageRestricted", - "DL-CP-SecurityInformation", - "CE-ModeBRestricted"}; - return convert_enum_idx(options, 6, value, "conn_establishment_ind_ies_o::value_c::types"); + static const char* options[] = {"INTEGER (0..1000)", "INTEGER (0..1000)"}; + return convert_enum_idx(options, 2, value, "erab_qos_params_ext_ies_o::ext_c::types"); } -template struct asn1::s1ap::protocol_ie_field_s; +template struct asn1::s1ap::protocol_ext_field_s; -conn_establishment_ind_ies_container::conn_establishment_ind_ies_container() : - mme_ue_s1ap_id(0, crit_e::ignore), - enb_ue_s1ap_id(8, crit_e::ignore), - ue_radio_cap(74, crit_e::ignore), - enhanced_coverage_restricted(251, crit_e::ignore), - dl_cp_security_info(253, crit_e::ignore), - ce_mode_brestricted(271, crit_e::ignore) +gbr_qos_info_ext_ies_container::gbr_qos_info_ext_ies_container() : + extended_erab_maximum_bitrate_dl(255, crit_e::ignore), + extended_erab_maximum_bitrate_ul(256, crit_e::ignore), + extended_erab_guaranteed_bitrate_dl(257, crit_e::ignore), + extended_erab_guaranteed_bitrate_ul(258, crit_e::ignore) {} -SRSASN_CODE conn_establishment_ind_ies_container::pack(bit_ref& bref) const +SRSASN_CODE gbr_qos_info_ext_ies_container::pack(bit_ref& bref) const { - uint32_t nof_ies = 2; - nof_ies += ue_radio_cap_present ? 1 : 0; - nof_ies += enhanced_coverage_restricted_present ? 1 : 0; - nof_ies += dl_cp_security_info_present ? 1 : 0; - nof_ies += ce_mode_brestricted_present ? 1 : 0; - pack_length(bref, nof_ies, 0u, 65535u, true); + uint32_t nof_ies = 0; + nof_ies += extended_erab_maximum_bitrate_dl_present ? 1 : 0; + nof_ies += extended_erab_maximum_bitrate_ul_present ? 1 : 0; + nof_ies += extended_erab_guaranteed_bitrate_dl_present ? 1 : 0; + nof_ies += extended_erab_guaranteed_bitrate_ul_present ? 1 : 0; + pack_length(bref, nof_ies, 1u, 65535u, true); - HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); - HANDLE_CODE(enb_ue_s1ap_id.pack(bref)); - if (ue_radio_cap_present) { - HANDLE_CODE(ue_radio_cap.pack(bref)); + if (extended_erab_maximum_bitrate_dl_present) { + HANDLE_CODE(extended_erab_maximum_bitrate_dl.pack(bref)); } - if (enhanced_coverage_restricted_present) { - HANDLE_CODE(enhanced_coverage_restricted.pack(bref)); + if (extended_erab_maximum_bitrate_ul_present) { + HANDLE_CODE(extended_erab_maximum_bitrate_ul.pack(bref)); } - if (dl_cp_security_info_present) { - HANDLE_CODE(dl_cp_security_info.pack(bref)); + if (extended_erab_guaranteed_bitrate_dl_present) { + HANDLE_CODE(extended_erab_guaranteed_bitrate_dl.pack(bref)); } - if (ce_mode_brestricted_present) { - HANDLE_CODE(ce_mode_brestricted.pack(bref)); + if (extended_erab_guaranteed_bitrate_ul_present) { + HANDLE_CODE(extended_erab_guaranteed_bitrate_ul.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE conn_establishment_ind_ies_container::unpack(cbit_ref& bref) +SRSASN_CODE gbr_qos_info_ext_ies_container::unpack(cbit_ref& bref) { uint32_t nof_ies = 0; - unpack_length(nof_ies, bref, 0u, 65535u, true); - - uint32_t nof_mandatory_ies = 2; + unpack_length(nof_ies, bref, 1u, 65535u, true); for (; nof_ies > 0; --nof_ies) { - protocol_ie_field_s c; + protocol_ext_field_s c; HANDLE_CODE(c.unpack(bref)); switch (c.id) { - case 0: - nof_mandatory_ies--; - mme_ue_s1ap_id.id = c.id; - mme_ue_s1ap_id.crit = c.crit; - mme_ue_s1ap_id.value = c.value.mme_ue_s1ap_id(); - break; - case 8: - nof_mandatory_ies--; - enb_ue_s1ap_id.id = c.id; - enb_ue_s1ap_id.crit = c.crit; - enb_ue_s1ap_id.value = c.value.enb_ue_s1ap_id(); - break; - case 74: - ue_radio_cap_present = true; - ue_radio_cap.id = c.id; - ue_radio_cap.crit = c.crit; - ue_radio_cap.value = c.value.ue_radio_cap(); - break; - case 251: - enhanced_coverage_restricted_present = true; - enhanced_coverage_restricted.id = c.id; - enhanced_coverage_restricted.crit = c.crit; - enhanced_coverage_restricted.value = c.value.enhanced_coverage_restricted(); - break; - case 253: - dl_cp_security_info_present = true; - dl_cp_security_info.id = c.id; - dl_cp_security_info.crit = c.crit; - dl_cp_security_info.value = c.value.dl_cp_security_info(); - break; - case 271: - ce_mode_brestricted_present = true; - ce_mode_brestricted.id = c.id; - ce_mode_brestricted.crit = c.crit; - ce_mode_brestricted.value = c.value.ce_mode_brestricted(); + case 255: + extended_erab_maximum_bitrate_dl_present = true; + extended_erab_maximum_bitrate_dl.id = c.id; + extended_erab_maximum_bitrate_dl.crit = c.crit; + extended_erab_maximum_bitrate_dl.ext = c.ext_value.extended_erab_maximum_bitrate_dl(); + break; + case 256: + extended_erab_maximum_bitrate_ul_present = true; + extended_erab_maximum_bitrate_ul.id = c.id; + extended_erab_maximum_bitrate_ul.crit = c.crit; + extended_erab_maximum_bitrate_ul.ext = c.ext_value.extended_erab_maximum_bitrate_ul(); + break; + case 257: + extended_erab_guaranteed_bitrate_dl_present = true; + extended_erab_guaranteed_bitrate_dl.id = c.id; + extended_erab_guaranteed_bitrate_dl.crit = c.crit; + extended_erab_guaranteed_bitrate_dl.ext = c.ext_value.extended_erab_guaranteed_bitrate_dl(); + break; + case 258: + extended_erab_guaranteed_bitrate_ul_present = true; + extended_erab_guaranteed_bitrate_ul.id = c.id; + extended_erab_guaranteed_bitrate_ul.crit = c.crit; + extended_erab_guaranteed_bitrate_ul.ext = c.ext_value.extended_erab_guaranteed_bitrate_ul(); break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; } } - if (nof_mandatory_ies > 0) { - asn1::log_error("Mandatory fields are missing\n"); - return SRSASN_ERROR_DECODE_FAIL; - } return SRSASN_SUCCESS; } -void conn_establishment_ind_ies_container::to_json(json_writer& j) const +void gbr_qos_info_ext_ies_container::to_json(json_writer& j) const { j.start_obj(); - j.write_fieldname(""); - mme_ue_s1ap_id.to_json(j); - j.write_fieldname(""); - enb_ue_s1ap_id.to_json(j); - if (ue_radio_cap_present) { + if (extended_erab_maximum_bitrate_dl_present) { j.write_fieldname(""); - ue_radio_cap.to_json(j); + extended_erab_maximum_bitrate_dl.to_json(j); } - if (enhanced_coverage_restricted_present) { + if (extended_erab_maximum_bitrate_ul_present) { j.write_fieldname(""); - enhanced_coverage_restricted.to_json(j); + extended_erab_maximum_bitrate_ul.to_json(j); } - if (dl_cp_security_info_present) { + if (extended_erab_guaranteed_bitrate_dl_present) { j.write_fieldname(""); - dl_cp_security_info.to_json(j); + extended_erab_guaranteed_bitrate_dl.to_json(j); } - if (ce_mode_brestricted_present) { + if (extended_erab_guaranteed_bitrate_ul_present) { j.write_fieldname(""); - ce_mode_brestricted.to_json(j); + extended_erab_guaranteed_bitrate_ul.to_json(j); } j.end_obj(); } -// ConnectionEstablishmentIndication ::= SEQUENCE -SRSASN_CODE conn_establishment_ind_s::pack(bit_ref& bref) const +// GBR-QosInformation ::= SEQUENCE +SRSASN_CODE gbr_qos_info_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(protocol_ies.pack(bref)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(pack_integer(bref, erab_maximum_bitrate_dl, (uint64_t)0u, (uint64_t)10000000000u, false, true)); + HANDLE_CODE(pack_integer(bref, erab_maximum_bitrate_ul, (uint64_t)0u, (uint64_t)10000000000u, false, true)); + HANDLE_CODE(pack_integer(bref, erab_guaranteed_bitrate_dl, (uint64_t)0u, (uint64_t)10000000000u, false, true)); + HANDLE_CODE(pack_integer(bref, erab_guaranteed_bitrate_ul, (uint64_t)0u, (uint64_t)10000000000u, false, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } return SRSASN_SUCCESS; } -SRSASN_CODE conn_establishment_ind_s::unpack(cbit_ref& bref) +SRSASN_CODE gbr_qos_info_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); - HANDLE_CODE(protocol_ies.unpack(bref)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(unpack_integer(erab_maximum_bitrate_dl, bref, (uint64_t)0u, (uint64_t)10000000000u, false, true)); + HANDLE_CODE(unpack_integer(erab_maximum_bitrate_ul, bref, (uint64_t)0u, (uint64_t)10000000000u, false, true)); + HANDLE_CODE(unpack_integer(erab_guaranteed_bitrate_dl, bref, (uint64_t)0u, (uint64_t)10000000000u, false, true)); + HANDLE_CODE(unpack_integer(erab_guaranteed_bitrate_ul, bref, (uint64_t)0u, (uint64_t)10000000000u, false, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } return SRSASN_SUCCESS; } -void conn_establishment_ind_s::to_json(json_writer& j) const +void gbr_qos_info_s::to_json(json_writer& j) const { j.start_obj(); - j.write_fieldname("protocolIEs"); - protocol_ies.to_json(j); + j.write_int("e-RAB-MaximumBitrateDL", erab_maximum_bitrate_dl); + j.write_int("e-RAB-MaximumBitrateUL", erab_maximum_bitrate_ul); + j.write_int("e-RAB-GuaranteedBitrateDL", erab_guaranteed_bitrate_dl); + j.write_int("e-RAB-GuaranteedBitrateUL", erab_guaranteed_bitrate_ul); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } j.end_obj(); } -// TypeOfError ::= ENUMERATED -std::string type_of_error_opts::to_string() const +// ScheduledCommunicationTime ::= SEQUENCE +SRSASN_CODE sched_communication_time_s::pack(bit_ref& bref) const { - static const char* options[] = {"not-understood", "missing"}; - return convert_enum_idx(options, 2, value, "type_of_error_e"); + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(dayof_week_present, 1)); + HANDLE_CODE(bref.pack(timeof_day_start_present, 1)); + HANDLE_CODE(bref.pack(timeof_day_end_present, 1)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + if (dayof_week_present) { + HANDLE_CODE(dayof_week.pack(bref)); + } + if (timeof_day_start_present) { + HANDLE_CODE(pack_integer(bref, timeof_day_start, (uint32_t)0u, (uint32_t)86399u, true, true)); + } + if (timeof_day_end_present) { + HANDLE_CODE(pack_integer(bref, timeof_day_end, (uint32_t)0u, (uint32_t)86399u, true, true)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; } +SRSASN_CODE sched_communication_time_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(dayof_week_present, 1)); + HANDLE_CODE(bref.unpack(timeof_day_start_present, 1)); + HANDLE_CODE(bref.unpack(timeof_day_end_present, 1)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); -// CriticalityDiagnostics-IE-Item ::= SEQUENCE -SRSASN_CODE crit_diagnostics_ie_item_s::pack(bit_ref& bref) const + if (dayof_week_present) { + HANDLE_CODE(dayof_week.unpack(bref)); + } + if (timeof_day_start_present) { + HANDLE_CODE(unpack_integer(timeof_day_start, bref, (uint32_t)0u, (uint32_t)86399u, true, true)); + } + if (timeof_day_end_present) { + HANDLE_CODE(unpack_integer(timeof_day_end, bref, (uint32_t)0u, (uint32_t)86399u, true, true)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sched_communication_time_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (dayof_week_present) { + j.write_str("dayofWeek", dayof_week.to_string()); + } + if (timeof_day_start_present) { + j.write_int("timeofDayStart", timeof_day_start); + } + if (timeof_day_end_present) { + j.write_int("timeofDayEnd", timeof_day_end); + } + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// CE-ModeBRestricted ::= ENUMERATED +std::string ce_mode_brestricted_opts::to_string() const +{ + static const char* options[] = {"restricted", "not-restricted"}; + return convert_enum_idx(options, 2, value, "ce_mode_brestricted_e"); +} + +// DL-CP-SecurityInformation ::= SEQUENCE +SRSASN_CODE dl_cp_security_info_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(iecrit.pack(bref)); - HANDLE_CODE(pack_integer(bref, ie_id, (uint32_t)0u, (uint32_t)65535u, false, true)); - HANDLE_CODE(type_of_error.pack(bref)); + HANDLE_CODE(dl_nas_mac.pack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE crit_diagnostics_ie_item_s::unpack(cbit_ref& bref) +SRSASN_CODE dl_cp_security_info_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(iecrit.unpack(bref)); - HANDLE_CODE(unpack_integer(ie_id, bref, (uint32_t)0u, (uint32_t)65535u, false, true)); - HANDLE_CODE(type_of_error.unpack(bref)); + HANDLE_CODE(dl_nas_mac.unpack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void crit_diagnostics_ie_item_s::to_json(json_writer& j) const +void dl_cp_security_info_s::to_json(json_writer& j) const { j.start_obj(); - j.write_str("iECriticality", iecrit.to_string()); - j.write_int("iE-ID", ie_id); - j.write_str("typeOfError", type_of_error.to_string()); + j.write_str("dl-NAS-MAC", dl_nas_mac.to_string()); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); ie_exts.to_json(j); @@ -4968,34 +5662,165 @@ void crit_diagnostics_ie_item_s::to_json(json_writer& j) const j.end_obj(); } -// TriggeringMessage ::= ENUMERATED -std::string trigger_msg_opts::to_string() const +template struct asn1::s1ap::protocol_ext_field_s; + +erab_qos_params_ext_ies_container::erab_qos_params_ext_ies_container() : + dl_packet_loss_rate(273, crit_e::ignore), ul_packet_loss_rate(274, crit_e::ignore) +{} +SRSASN_CODE erab_qos_params_ext_ies_container::pack(bit_ref& bref) const { - static const char* options[] = {"initiating-message", "successful-outcome", "unsuccessfull-outcome"}; - return convert_enum_idx(options, 3, value, "trigger_msg_e"); + uint32_t nof_ies = 0; + nof_ies += dl_packet_loss_rate_present ? 1 : 0; + nof_ies += ul_packet_loss_rate_present ? 1 : 0; + pack_length(bref, nof_ies, 1u, 65535u, true); + + if (dl_packet_loss_rate_present) { + HANDLE_CODE(dl_packet_loss_rate.pack(bref)); + } + if (ul_packet_loss_rate_present) { + HANDLE_CODE(ul_packet_loss_rate.pack(bref)); + } + + return SRSASN_SUCCESS; } +SRSASN_CODE erab_qos_params_ext_ies_container::unpack(cbit_ref& bref) +{ + uint32_t nof_ies = 0; + unpack_length(nof_ies, bref, 1u, 65535u, true); -// CriticalityDiagnostics ::= SEQUENCE -SRSASN_CODE crit_diagnostics_s::pack(bit_ref& bref) const + for (; nof_ies > 0; --nof_ies) { + protocol_ext_field_s c; + HANDLE_CODE(c.unpack(bref)); + switch (c.id) { + case 273: + dl_packet_loss_rate_present = true; + dl_packet_loss_rate.id = c.id; + dl_packet_loss_rate.crit = c.crit; + dl_packet_loss_rate.ext = c.ext_value.dl_packet_loss_rate(); + break; + case 274: + ul_packet_loss_rate_present = true; + ul_packet_loss_rate.id = c.id; + ul_packet_loss_rate.crit = c.crit; + ul_packet_loss_rate.ext = c.ext_value.ul_packet_loss_rate(); + break; + default: + asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); + return SRSASN_ERROR_DECODE_FAIL; + } + } + + return SRSASN_SUCCESS; +} +void erab_qos_params_ext_ies_container::to_json(json_writer& j) const +{ + j.start_obj(); + if (dl_packet_loss_rate_present) { + j.write_fieldname(""); + dl_packet_loss_rate.to_json(j); + } + if (ul_packet_loss_rate_present) { + j.write_fieldname(""); + ul_packet_loss_rate.to_json(j); + } + j.end_obj(); +} + +// E-RABLevelQoSParameters ::= SEQUENCE +SRSASN_CODE erab_level_qos_params_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(bref.pack(proc_code_present, 1)); - HANDLE_CODE(bref.pack(trigger_msg_present, 1)); - HANDLE_CODE(bref.pack(proc_crit_present, 1)); - HANDLE_CODE(bref.pack(ies_crit_diagnostics_present, 1)); + HANDLE_CODE(bref.pack(gbr_qos_info_present, 1)); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - if (proc_code_present) { - HANDLE_CODE(pack_integer(bref, proc_code, (uint16_t)0u, (uint16_t)255u, false, true)); + HANDLE_CODE(pack_integer(bref, qci, (uint16_t)0u, (uint16_t)255u, false, true)); + HANDLE_CODE(alloc_retention_prio.pack(bref)); + if (gbr_qos_info_present) { + HANDLE_CODE(gbr_qos_info.pack(bref)); } - if (trigger_msg_present) { - HANDLE_CODE(trigger_msg.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); } - if (proc_crit_present) { - HANDLE_CODE(proc_crit.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE erab_level_qos_params_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(gbr_qos_info_present, 1)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(unpack_integer(qci, bref, (uint16_t)0u, (uint16_t)255u, false, true)); + HANDLE_CODE(alloc_retention_prio.unpack(bref)); + if (gbr_qos_info_present) { + HANDLE_CODE(gbr_qos_info.unpack(bref)); } - if (ies_crit_diagnostics_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, ies_crit_diagnostics, 1, 256, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void erab_level_qos_params_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("qCI", qci); + j.write_fieldname("allocationRetentionPriority"); + alloc_retention_prio.to_json(j); + if (gbr_qos_info_present) { + j.write_fieldname("gbrQosInformation"); + gbr_qos_info.to_json(j); + } + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// EndIndication ::= ENUMERATED +std::string end_ind_opts::to_string() const +{ + static const char* options[] = {"no-further-data", "further-data-exists"}; + return convert_enum_idx(options, 2, value, "end_ind_e"); +} + +// EnhancedCoverageRestricted ::= ENUMERATED +std::string enhanced_coverage_restricted_opts::to_string() const +{ + static const char* options[] = {"restricted"}; + return convert_enum_idx(options, 1, value, "enhanced_coverage_restricted_e"); +} + +// Subscription-Based-UE-DifferentiationInfo ::= SEQUENCE +SRSASN_CODE subscription_based_ue_differentiation_info_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(periodic_communication_ind_present, 1)); + HANDLE_CODE(bref.pack(periodic_time_present, 1)); + HANDLE_CODE(bref.pack(sched_communication_time_present, 1)); + HANDLE_CODE(bref.pack(stationary_ind_present, 1)); + HANDLE_CODE(bref.pack(traffic_profile_present, 1)); + HANDLE_CODE(bref.pack(battery_ind_present, 1)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + if (periodic_communication_ind_present) { + HANDLE_CODE(periodic_communication_ind.pack(bref)); + } + if (periodic_time_present) { + HANDLE_CODE(pack_integer(bref, periodic_time, (uint16_t)1u, (uint16_t)3600u, true, true)); + } + if (sched_communication_time_present) { + HANDLE_CODE(sched_communication_time.pack(bref)); + } + if (stationary_ind_present) { + HANDLE_CODE(stationary_ind.pack(bref)); + } + if (traffic_profile_present) { + HANDLE_CODE(traffic_profile.pack(bref)); + } + if (battery_ind_present) { + HANDLE_CODE(battery_ind.pack(bref)); } if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); @@ -5003,26 +5828,34 @@ SRSASN_CODE crit_diagnostics_s::pack(bit_ref& bref) const return SRSASN_SUCCESS; } -SRSASN_CODE crit_diagnostics_s::unpack(cbit_ref& bref) +SRSASN_CODE subscription_based_ue_differentiation_info_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(proc_code_present, 1)); - HANDLE_CODE(bref.unpack(trigger_msg_present, 1)); - HANDLE_CODE(bref.unpack(proc_crit_present, 1)); - HANDLE_CODE(bref.unpack(ies_crit_diagnostics_present, 1)); + HANDLE_CODE(bref.unpack(periodic_communication_ind_present, 1)); + HANDLE_CODE(bref.unpack(periodic_time_present, 1)); + HANDLE_CODE(bref.unpack(sched_communication_time_present, 1)); + HANDLE_CODE(bref.unpack(stationary_ind_present, 1)); + HANDLE_CODE(bref.unpack(traffic_profile_present, 1)); + HANDLE_CODE(bref.unpack(battery_ind_present, 1)); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - if (proc_code_present) { - HANDLE_CODE(unpack_integer(proc_code, bref, (uint16_t)0u, (uint16_t)255u, false, true)); + if (periodic_communication_ind_present) { + HANDLE_CODE(periodic_communication_ind.unpack(bref)); } - if (trigger_msg_present) { - HANDLE_CODE(trigger_msg.unpack(bref)); + if (periodic_time_present) { + HANDLE_CODE(unpack_integer(periodic_time, bref, (uint16_t)1u, (uint16_t)3600u, true, true)); } - if (proc_crit_present) { - HANDLE_CODE(proc_crit.unpack(bref)); + if (sched_communication_time_present) { + HANDLE_CODE(sched_communication_time.unpack(bref)); } - if (ies_crit_diagnostics_present) { - HANDLE_CODE(unpack_dyn_seq_of(ies_crit_diagnostics, bref, 1, 256, true)); + if (stationary_ind_present) { + HANDLE_CODE(stationary_ind.unpack(bref)); + } + if (traffic_profile_present) { + HANDLE_CODE(traffic_profile.unpack(bref)); + } + if (battery_ind_present) { + HANDLE_CODE(battery_ind.unpack(bref)); } if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); @@ -5030,24 +5863,27 @@ SRSASN_CODE crit_diagnostics_s::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } -void crit_diagnostics_s::to_json(json_writer& j) const +void subscription_based_ue_differentiation_info_s::to_json(json_writer& j) const { j.start_obj(); - if (proc_code_present) { - j.write_int("procedureCode", proc_code); + if (periodic_communication_ind_present) { + j.write_str("periodicCommunicationIndicator", periodic_communication_ind.to_string()); } - if (trigger_msg_present) { - j.write_str("triggeringMessage", trigger_msg.to_string()); + if (periodic_time_present) { + j.write_int("periodicTime", periodic_time); } - if (proc_crit_present) { - j.write_str("procedureCriticality", proc_crit.to_string()); + if (sched_communication_time_present) { + j.write_fieldname("scheduledCommunicationTime"); + sched_communication_time.to_json(j); } - if (ies_crit_diagnostics_present) { - j.start_array("iEsCriticalityDiagnostics"); - for (const auto& e1 : ies_crit_diagnostics) { - e1.to_json(j); - } - j.end_array(); + if (stationary_ind_present) { + j.write_str("stationaryIndication", stationary_ind.to_string()); + } + if (traffic_profile_present) { + j.write_str("trafficProfile", traffic_profile.to_string()); + } + if (battery_ind_present) { + j.write_str("batteryIndication", battery_ind.to_string()); } if (ie_exts_present) { j.write_fieldname("iE-Extensions"); @@ -5056,15 +5892,41 @@ void crit_diagnostics_s::to_json(json_writer& j) const j.end_obj(); } -// DeactivateTraceIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES -uint32_t deactiv_trace_ies_o::idx_to_id(uint32_t idx) +std::string subscription_based_ue_differentiation_info_s::periodic_communication_ind_opts::to_string() const { - static const uint32_t options[] = {0, 8, 86}; - return map_enum_number(options, 3, idx, "id"); + static const char* options[] = {"periodically", "ondemand"}; + return convert_enum_idx( + options, 2, value, "subscription_based_ue_differentiation_info_s::periodic_communication_ind_e_"); } -bool deactiv_trace_ies_o::is_id_valid(const uint32_t& id) + +std::string subscription_based_ue_differentiation_info_s::stationary_ind_opts::to_string() const { - static const uint32_t options[] = {0, 8, 86}; + static const char* options[] = {"stationary", "mobile"}; + return convert_enum_idx(options, 2, value, "subscription_based_ue_differentiation_info_s::stationary_ind_e_"); +} + +std::string subscription_based_ue_differentiation_info_s::traffic_profile_opts::to_string() const +{ + static const char* options[] = {"single-packet", "dual-packets", "multiple-packets"}; + return convert_enum_idx(options, 3, value, "subscription_based_ue_differentiation_info_s::traffic_profile_e_"); +} + +std::string subscription_based_ue_differentiation_info_s::battery_ind_opts::to_string() const +{ + static const char* options[] = { + "battery-powered", "battery-powered-not-rechargeable-or-replaceable", "not-battery-powered"}; + return convert_enum_idx(options, 3, value, "subscription_based_ue_differentiation_info_s::battery_ind_e_"); +} + +// ConnectionEstablishmentIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +uint32_t conn_establishment_ind_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {0, 8, 74, 251, 253, 271, 280, 278, 252}; + return map_enum_number(options, 9, idx, "id"); +} +bool conn_establishment_ind_ies_o::is_id_valid(const uint32_t& id) +{ + static const uint32_t options[] = {0, 8, 74, 251, 253, 271, 280, 278, 252}; for (const auto& o : options) { if (o == id) { return true; @@ -5072,21 +5934,33 @@ bool deactiv_trace_ies_o::is_id_valid(const uint32_t& id) } return false; } -crit_e deactiv_trace_ies_o::get_crit(const uint32_t& id) +crit_e conn_establishment_ind_ies_o::get_crit(const uint32_t& id) { switch (id) { case 0: - return crit_e::reject; + return crit_e::ignore; case 8: - return crit_e::reject; - case 86: + return crit_e::ignore; + case 74: + return crit_e::ignore; + case 251: + return crit_e::ignore; + case 253: + return crit_e::ignore; + case 271: + return crit_e::ignore; + case 280: + return crit_e::ignore; + case 278: + return crit_e::ignore; + case 252: return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } return {}; } -deactiv_trace_ies_o::value_c deactiv_trace_ies_o::get_value(const uint32_t& id) +conn_establishment_ind_ies_o::value_c conn_establishment_ind_ies_o::get_value(const uint32_t& id) { value_c ret{}; switch (id) { @@ -5096,23 +5970,53 @@ deactiv_trace_ies_o::value_c deactiv_trace_ies_o::get_value(const uint32_t& id) case 8: ret.set(value_c::types::enb_ue_s1ap_id); break; - case 86: - ret.set(value_c::types::e_utran_trace_id); + case 74: + ret.set(value_c::types::ue_radio_cap); + break; + case 251: + ret.set(value_c::types::enhanced_coverage_restricted); + break; + case 253: + ret.set(value_c::types::dl_cp_security_info); + break; + case 271: + ret.set(value_c::types::ce_mode_brestricted); + break; + case 280: + ret.set(value_c::types::end_ind); + break; + case 278: + ret.set(value_c::types::subscription_based_ue_differentiation_info); + break; + case 252: + ret.set(value_c::types::ue_level_qos_params); break; default: asn1::log_error("The id=%d is not recognized", id); } return ret; } -presence_e deactiv_trace_ies_o::get_presence(const uint32_t& id) +presence_e conn_establishment_ind_ies_o::get_presence(const uint32_t& id) { switch (id) { case 0: return presence_e::mandatory; case 8: return presence_e::mandatory; - case 86: - return presence_e::mandatory; + case 74: + return presence_e::optional; + case 251: + return presence_e::optional; + case 253: + return presence_e::optional; + case 271: + return presence_e::optional; + case 280: + return presence_e::optional; + case 278: + return presence_e::optional; + case 252: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -5120,47 +6024,118 @@ presence_e deactiv_trace_ies_o::get_presence(const uint32_t& id) } // Value ::= OPEN TYPE -uint64_t& deactiv_trace_ies_o::value_c::mme_ue_s1ap_id() +uint64_t& conn_establishment_ind_ies_o::value_c::mme_ue_s1ap_id() { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); return c.get(); } -uint32_t& deactiv_trace_ies_o::value_c::enb_ue_s1ap_id() +uint32_t& conn_establishment_ind_ies_o::value_c::enb_ue_s1ap_id() { assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); return c.get(); } -fixed_octstring<8, true>& deactiv_trace_ies_o::value_c::e_utran_trace_id() +unbounded_octstring& conn_establishment_ind_ies_o::value_c::ue_radio_cap() { assert_choice_type("OCTET STRING", type_.to_string(), "Value"); - return c.get >(); + return c.get >(); } -const uint64_t& deactiv_trace_ies_o::value_c::mme_ue_s1ap_id() const +enhanced_coverage_restricted_e& conn_establishment_ind_ies_o::value_c::enhanced_coverage_restricted() +{ + assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); + return c.get(); +} +dl_cp_security_info_s& conn_establishment_ind_ies_o::value_c::dl_cp_security_info() +{ + assert_choice_type("DL-CP-SecurityInformation", type_.to_string(), "Value"); + return c.get(); +} +ce_mode_brestricted_e& conn_establishment_ind_ies_o::value_c::ce_mode_brestricted() +{ + assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); + return c.get(); +} +end_ind_e& conn_establishment_ind_ies_o::value_c::end_ind() +{ + assert_choice_type("EndIndication", type_.to_string(), "Value"); + return c.get(); +} +subscription_based_ue_differentiation_info_s& +conn_establishment_ind_ies_o::value_c::subscription_based_ue_differentiation_info() +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} +erab_level_qos_params_s& conn_establishment_ind_ies_o::value_c::ue_level_qos_params() +{ + assert_choice_type("E-RABLevelQoSParameters", type_.to_string(), "Value"); + return c.get(); +} +const uint64_t& conn_establishment_ind_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); return c.get(); } -const uint32_t& deactiv_trace_ies_o::value_c::enb_ue_s1ap_id() const +const uint32_t& conn_establishment_ind_ies_o::value_c::enb_ue_s1ap_id() const { assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); return c.get(); } -const fixed_octstring<8, true>& deactiv_trace_ies_o::value_c::e_utran_trace_id() const +const unbounded_octstring& conn_establishment_ind_ies_o::value_c::ue_radio_cap() const { assert_choice_type("OCTET STRING", type_.to_string(), "Value"); - return c.get >(); + return c.get >(); } -void deactiv_trace_ies_o::value_c::destroy_() +const enhanced_coverage_restricted_e& conn_establishment_ind_ies_o::value_c::enhanced_coverage_restricted() const +{ + assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); + return c.get(); +} +const dl_cp_security_info_s& conn_establishment_ind_ies_o::value_c::dl_cp_security_info() const +{ + assert_choice_type("DL-CP-SecurityInformation", type_.to_string(), "Value"); + return c.get(); +} +const ce_mode_brestricted_e& conn_establishment_ind_ies_o::value_c::ce_mode_brestricted() const +{ + assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); + return c.get(); +} +const end_ind_e& conn_establishment_ind_ies_o::value_c::end_ind() const +{ + assert_choice_type("EndIndication", type_.to_string(), "Value"); + return c.get(); +} +const subscription_based_ue_differentiation_info_s& +conn_establishment_ind_ies_o::value_c::subscription_based_ue_differentiation_info() const +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} +const erab_level_qos_params_s& conn_establishment_ind_ies_o::value_c::ue_level_qos_params() const +{ + assert_choice_type("E-RABLevelQoSParameters", type_.to_string(), "Value"); + return c.get(); +} +void conn_establishment_ind_ies_o::value_c::destroy_() { switch (type_) { - case types::e_utran_trace_id: - c.destroy >(); + case types::ue_radio_cap: + c.destroy >(); + break; + case types::dl_cp_security_info: + c.destroy(); + break; + case types::subscription_based_ue_differentiation_info: + c.destroy(); + break; + case types::ue_level_qos_params: + c.destroy(); break; default: break; } } -void deactiv_trace_ies_o::value_c::set(types::options e) +void conn_establishment_ind_ies_o::value_c::set(types::options e) { destroy_(); type_ = e; @@ -5169,16 +6144,31 @@ void deactiv_trace_ies_o::value_c::set(types::options e) break; case types::enb_ue_s1ap_id: break; - case types::e_utran_trace_id: - c.init >(); + case types::ue_radio_cap: + c.init >(); + break; + case types::enhanced_coverage_restricted: + break; + case types::dl_cp_security_info: + c.init(); + break; + case types::ce_mode_brestricted: + break; + case types::end_ind: + break; + case types::subscription_based_ue_differentiation_info: + c.init(); + break; + case types::ue_level_qos_params: + c.init(); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); } } -deactiv_trace_ies_o::value_c::value_c(const deactiv_trace_ies_o::value_c& other) +conn_establishment_ind_ies_o::value_c::value_c(const conn_establishment_ind_ies_o::value_c& other) { type_ = other.type(); switch (type_) { @@ -5188,16 +6178,35 @@ deactiv_trace_ies_o::value_c::value_c(const deactiv_trace_ies_o::value_c& other) case types::enb_ue_s1ap_id: c.init(other.c.get()); break; - case types::e_utran_trace_id: - c.init(other.c.get >()); + case types::ue_radio_cap: + c.init(other.c.get >()); + break; + case types::enhanced_coverage_restricted: + c.init(other.c.get()); + break; + case types::dl_cp_security_info: + c.init(other.c.get()); + break; + case types::ce_mode_brestricted: + c.init(other.c.get()); + break; + case types::end_ind: + c.init(other.c.get()); + break; + case types::subscription_based_ue_differentiation_info: + c.init(other.c.get()); + break; + case types::ue_level_qos_params: + c.init(other.c.get()); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); } } -deactiv_trace_ies_o::value_c& deactiv_trace_ies_o::value_c::operator=(const deactiv_trace_ies_o::value_c& other) +conn_establishment_ind_ies_o::value_c& +conn_establishment_ind_ies_o::value_c::operator=(const conn_establishment_ind_ies_o::value_c& other) { if (this == &other) { return *this; @@ -5210,18 +6219,36 @@ deactiv_trace_ies_o::value_c& deactiv_trace_ies_o::value_c::operator=(const deac case types::enb_ue_s1ap_id: c.set(other.c.get()); break; - case types::e_utran_trace_id: - c.set(other.c.get >()); + case types::ue_radio_cap: + c.set(other.c.get >()); break; - case types::nulltype: + case types::enhanced_coverage_restricted: + c.set(other.c.get()); break; - default: - log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + case types::dl_cp_security_info: + c.set(other.c.get()); + break; + case types::ce_mode_brestricted: + c.set(other.c.get()); + break; + case types::end_ind: + c.set(other.c.get()); + break; + case types::subscription_based_ue_differentiation_info: + c.set(other.c.get()); + break; + case types::ue_level_qos_params: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); } return *this; } -void deactiv_trace_ies_o::value_c::to_json(json_writer& j) const +void conn_establishment_ind_ies_o::value_c::to_json(json_writer& j) const { j.start_obj(); switch (type_) { @@ -5231,15 +6258,36 @@ void deactiv_trace_ies_o::value_c::to_json(json_writer& j) const case types::enb_ue_s1ap_id: j.write_int("INTEGER (0..16777215)", c.get()); break; - case types::e_utran_trace_id: - j.write_str("OCTET STRING", c.get >().to_string()); + case types::ue_radio_cap: + j.write_str("OCTET STRING", c.get >().to_string()); + break; + case types::enhanced_coverage_restricted: + j.write_str("EnhancedCoverageRestricted", "restricted"); + break; + case types::dl_cp_security_info: + j.write_fieldname("DL-CP-SecurityInformation"); + c.get().to_json(j); + break; + case types::ce_mode_brestricted: + j.write_str("CE-ModeBRestricted", c.get().to_string()); + break; + case types::end_ind: + j.write_str("EndIndication", c.get().to_string()); + break; + case types::subscription_based_ue_differentiation_info: + j.write_fieldname("Subscription-Based-UE-DifferentiationInfo"); + c.get().to_json(j); + break; + case types::ue_level_qos_params: + j.write_fieldname("E-RABLevelQoSParameters"); + c.get().to_json(j); break; default: - log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); } j.end_obj(); } -SRSASN_CODE deactiv_trace_ies_o::value_c::pack(bit_ref& bref) const +SRSASN_CODE conn_establishment_ind_ies_o::value_c::pack(bit_ref& bref) const { varlength_field_pack_guard varlen_scope(bref, true); switch (type_) { @@ -5249,16 +6297,34 @@ SRSASN_CODE deactiv_trace_ies_o::value_c::pack(bit_ref& bref) const case types::enb_ue_s1ap_id: HANDLE_CODE(pack_integer(bref, c.get(), (uint32_t)0u, (uint32_t)16777215u, false, true)); break; - case types::e_utran_trace_id: - HANDLE_CODE((c.get >().pack(bref))); + case types::ue_radio_cap: + HANDLE_CODE(c.get >().pack(bref)); + break; + case types::enhanced_coverage_restricted: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::dl_cp_security_info: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::ce_mode_brestricted: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::end_ind: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::ue_level_qos_params: + HANDLE_CODE(c.get().pack(bref)); break; default: - log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; } return SRSASN_SUCCESS; } -SRSASN_CODE deactiv_trace_ies_o::value_c::unpack(cbit_ref& bref) +SRSASN_CODE conn_establishment_ind_ies_o::value_c::unpack(cbit_ref& bref) { varlength_field_unpack_guard varlen_scope(bref, true); switch (type_) { @@ -5268,47 +6334,108 @@ SRSASN_CODE deactiv_trace_ies_o::value_c::unpack(cbit_ref& bref) case types::enb_ue_s1ap_id: HANDLE_CODE(unpack_integer(c.get(), bref, (uint32_t)0u, (uint32_t)16777215u, false, true)); break; - case types::e_utran_trace_id: - HANDLE_CODE((c.get >().unpack(bref))); + case types::ue_radio_cap: + HANDLE_CODE(c.get >().unpack(bref)); + break; + case types::enhanced_coverage_restricted: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::dl_cp_security_info: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::ce_mode_brestricted: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::end_ind: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::ue_level_qos_params: + HANDLE_CODE(c.get().unpack(bref)); break; default: - log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + log_invalid_choice_id(type_, "conn_establishment_ind_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; } -std::string deactiv_trace_ies_o::value_c::types_opts::to_string() const +std::string conn_establishment_ind_ies_o::value_c::types_opts::to_string() const { - static const char* options[] = {"INTEGER (0..4294967295)", "INTEGER (0..16777215)", "OCTET STRING"}; - return convert_enum_idx(options, 3, value, "deactiv_trace_ies_o::value_c::types"); + static const char* options[] = {"INTEGER (0..4294967295)", + "INTEGER (0..16777215)", + "OCTET STRING", + "EnhancedCoverageRestricted", + "DL-CP-SecurityInformation", + "CE-ModeBRestricted", + "EndIndication", + "Subscription-Based-UE-DifferentiationInfo", + "E-RABLevelQoSParameters"}; + return convert_enum_idx(options, 9, value, "conn_establishment_ind_ies_o::value_c::types"); } -template struct asn1::s1ap::protocol_ie_field_s; +template struct asn1::s1ap::protocol_ie_field_s; -deactiv_trace_ies_container::deactiv_trace_ies_container() : - mme_ue_s1ap_id(0, crit_e::reject), enb_ue_s1ap_id(8, crit_e::reject), e_utran_trace_id(86, crit_e::ignore) +conn_establishment_ind_ies_container::conn_establishment_ind_ies_container() : + mme_ue_s1ap_id(0, crit_e::ignore), + enb_ue_s1ap_id(8, crit_e::ignore), + ue_radio_cap(74, crit_e::ignore), + enhanced_coverage_restricted(251, crit_e::ignore), + dl_cp_security_info(253, crit_e::ignore), + ce_mode_brestricted(271, crit_e::ignore), + end_ind(280, crit_e::ignore), + subscription_based_ue_differentiation_info(278, crit_e::ignore), + ue_level_qos_params(252, crit_e::ignore) {} -SRSASN_CODE deactiv_trace_ies_container::pack(bit_ref& bref) const +SRSASN_CODE conn_establishment_ind_ies_container::pack(bit_ref& bref) const { - uint32_t nof_ies = 3; + uint32_t nof_ies = 2; + nof_ies += ue_radio_cap_present ? 1 : 0; + nof_ies += enhanced_coverage_restricted_present ? 1 : 0; + nof_ies += dl_cp_security_info_present ? 1 : 0; + nof_ies += ce_mode_brestricted_present ? 1 : 0; + nof_ies += end_ind_present ? 1 : 0; + nof_ies += subscription_based_ue_differentiation_info_present ? 1 : 0; + nof_ies += ue_level_qos_params_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); HANDLE_CODE(enb_ue_s1ap_id.pack(bref)); - HANDLE_CODE(e_utran_trace_id.pack(bref)); + if (ue_radio_cap_present) { + HANDLE_CODE(ue_radio_cap.pack(bref)); + } + if (enhanced_coverage_restricted_present) { + HANDLE_CODE(enhanced_coverage_restricted.pack(bref)); + } + if (dl_cp_security_info_present) { + HANDLE_CODE(dl_cp_security_info.pack(bref)); + } + if (ce_mode_brestricted_present) { + HANDLE_CODE(ce_mode_brestricted.pack(bref)); + } + if (end_ind_present) { + HANDLE_CODE(end_ind.pack(bref)); + } + if (subscription_based_ue_differentiation_info_present) { + HANDLE_CODE(subscription_based_ue_differentiation_info.pack(bref)); + } + if (ue_level_qos_params_present) { + HANDLE_CODE(ue_level_qos_params.pack(bref)); + } return SRSASN_SUCCESS; } -SRSASN_CODE deactiv_trace_ies_container::unpack(cbit_ref& bref) +SRSASN_CODE conn_establishment_ind_ies_container::unpack(cbit_ref& bref) { uint32_t nof_ies = 0; unpack_length(nof_ies, bref, 0u, 65535u, true); - uint32_t nof_mandatory_ies = 3; + uint32_t nof_mandatory_ies = 2; for (; nof_ies > 0; --nof_ies) { - protocol_ie_field_s c; + protocol_ie_field_s c; HANDLE_CODE(c.unpack(bref)); switch (c.id) { case 0: @@ -5323,11 +6450,47 @@ SRSASN_CODE deactiv_trace_ies_container::unpack(cbit_ref& bref) enb_ue_s1ap_id.crit = c.crit; enb_ue_s1ap_id.value = c.value.enb_ue_s1ap_id(); break; - case 86: - nof_mandatory_ies--; - e_utran_trace_id.id = c.id; - e_utran_trace_id.crit = c.crit; - e_utran_trace_id.value = c.value.e_utran_trace_id(); + case 74: + ue_radio_cap_present = true; + ue_radio_cap.id = c.id; + ue_radio_cap.crit = c.crit; + ue_radio_cap.value = c.value.ue_radio_cap(); + break; + case 251: + enhanced_coverage_restricted_present = true; + enhanced_coverage_restricted.id = c.id; + enhanced_coverage_restricted.crit = c.crit; + enhanced_coverage_restricted.value = c.value.enhanced_coverage_restricted(); + break; + case 253: + dl_cp_security_info_present = true; + dl_cp_security_info.id = c.id; + dl_cp_security_info.crit = c.crit; + dl_cp_security_info.value = c.value.dl_cp_security_info(); + break; + case 271: + ce_mode_brestricted_present = true; + ce_mode_brestricted.id = c.id; + ce_mode_brestricted.crit = c.crit; + ce_mode_brestricted.value = c.value.ce_mode_brestricted(); + break; + case 280: + end_ind_present = true; + end_ind.id = c.id; + end_ind.crit = c.crit; + end_ind.value = c.value.end_ind(); + break; + case 278: + subscription_based_ue_differentiation_info_present = true; + subscription_based_ue_differentiation_info.id = c.id; + subscription_based_ue_differentiation_info.crit = c.crit; + subscription_based_ue_differentiation_info.value = c.value.subscription_based_ue_differentiation_info(); + break; + case 252: + ue_level_qos_params_present = true; + ue_level_qos_params.id = c.id; + ue_level_qos_params.crit = c.crit; + ue_level_qos_params.value = c.value.ue_level_qos_params(); break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); @@ -5341,34 +6504,60 @@ SRSASN_CODE deactiv_trace_ies_container::unpack(cbit_ref& bref) } return SRSASN_SUCCESS; } -void deactiv_trace_ies_container::to_json(json_writer& j) const +void conn_establishment_ind_ies_container::to_json(json_writer& j) const { j.start_obj(); j.write_fieldname(""); mme_ue_s1ap_id.to_json(j); j.write_fieldname(""); enb_ue_s1ap_id.to_json(j); - j.write_fieldname(""); - e_utran_trace_id.to_json(j); + if (ue_radio_cap_present) { + j.write_fieldname(""); + ue_radio_cap.to_json(j); + } + if (enhanced_coverage_restricted_present) { + j.write_fieldname(""); + enhanced_coverage_restricted.to_json(j); + } + if (dl_cp_security_info_present) { + j.write_fieldname(""); + dl_cp_security_info.to_json(j); + } + if (ce_mode_brestricted_present) { + j.write_fieldname(""); + ce_mode_brestricted.to_json(j); + } + if (end_ind_present) { + j.write_fieldname(""); + end_ind.to_json(j); + } + if (subscription_based_ue_differentiation_info_present) { + j.write_fieldname(""); + subscription_based_ue_differentiation_info.to_json(j); + } + if (ue_level_qos_params_present) { + j.write_fieldname(""); + ue_level_qos_params.to_json(j); + } j.end_obj(); } -// DeactivateTrace ::= SEQUENCE -SRSASN_CODE deactiv_trace_s::pack(bit_ref& bref) const +// ConnectionEstablishmentIndication ::= SEQUENCE +SRSASN_CODE conn_establishment_ind_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(protocol_ies.pack(bref)); return SRSASN_SUCCESS; } -SRSASN_CODE deactiv_trace_s::unpack(cbit_ref& bref) +SRSASN_CODE conn_establishment_ind_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); HANDLE_CODE(protocol_ies.unpack(bref)); return SRSASN_SUCCESS; } -void deactiv_trace_s::to_json(json_writer& j) const +void conn_establishment_ind_s::to_json(json_writer& j) const { j.start_obj(); j.write_fieldname("protocolIEs"); @@ -5376,42 +6565,240 @@ void deactiv_trace_s::to_json(json_writer& j) const j.end_obj(); } -// ForbiddenLAs-Item ::= SEQUENCE -SRSASN_CODE forbidden_las_item_s::pack(bit_ref& bref) const +// ENB-ID ::= CHOICE +void enb_id_c::destroy_() +{ + switch (type_) { + case types::macro_enb_id: + c.destroy >(); + break; + case types::home_enb_id: + c.destroy >(); + break; + case types::short_macro_enb_id: + c.destroy >(); + break; + case types::long_macro_enb_id: + c.destroy >(); + break; + default: + break; + } +} +void enb_id_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::macro_enb_id: + c.init >(); + break; + case types::home_enb_id: + c.init >(); + break; + case types::short_macro_enb_id: + c.init >(); + break; + case types::long_macro_enb_id: + c.init >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "enb_id_c"); + } +} +enb_id_c::enb_id_c(const enb_id_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::macro_enb_id: + c.init(other.c.get >()); + break; + case types::home_enb_id: + c.init(other.c.get >()); + break; + case types::short_macro_enb_id: + c.init(other.c.get >()); + break; + case types::long_macro_enb_id: + c.init(other.c.get >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "enb_id_c"); + } +} +enb_id_c& enb_id_c::operator=(const enb_id_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::macro_enb_id: + c.set(other.c.get >()); + break; + case types::home_enb_id: + c.set(other.c.get >()); + break; + case types::short_macro_enb_id: + c.set(other.c.get >()); + break; + case types::long_macro_enb_id: + c.set(other.c.get >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "enb_id_c"); + } + + return *this; +} +void enb_id_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::macro_enb_id: + j.write_str("macroENB-ID", c.get >().to_string()); + break; + case types::home_enb_id: + j.write_str("homeENB-ID", c.get >().to_string()); + break; + case types::short_macro_enb_id: + j.write_str("short-macroENB-ID", c.get >().to_string()); + break; + case types::long_macro_enb_id: + j.write_str("long-macroENB-ID", c.get >().to_string()); + break; + default: + log_invalid_choice_id(type_, "enb_id_c"); + } + j.end_obj(); +} +SRSASN_CODE enb_id_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::macro_enb_id: + HANDLE_CODE((c.get >().pack(bref))); + break; + case types::home_enb_id: + HANDLE_CODE((c.get >().pack(bref))); + break; + case types::short_macro_enb_id: { + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE((c.get >().pack(bref))); + } break; + case types::long_macro_enb_id: { + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE((c.get >().pack(bref))); + } break; + default: + log_invalid_choice_id(type_, "enb_id_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE enb_id_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::macro_enb_id: + HANDLE_CODE((c.get >().unpack(bref))); + break; + case types::home_enb_id: + HANDLE_CODE((c.get >().unpack(bref))); + break; + case types::short_macro_enb_id: { + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE((c.get >().unpack(bref))); + } break; + case types::long_macro_enb_id: { + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE((c.get >().unpack(bref))); + } break; + default: + log_invalid_choice_id(type_, "enb_id_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +std::string enb_id_c::types_opts::to_string() const +{ + static const char* options[] = {"macroENB-ID", "homeENB-ID", "short-macroENB-ID", "long-macroENB-ID"}; + return convert_enum_idx(options, 4, value, "enb_id_c::types"); +} + +// GNB-Identity ::= CHOICE +void gnb_id_c::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("gNB-ID", c.to_string()); + j.end_obj(); +} +SRSASN_CODE gnb_id_c::pack(bit_ref& bref) const +{ + pack_enum(bref, type()); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE gnb_id_c::unpack(cbit_ref& bref) +{ + types e; + unpack_enum(e, bref); + if (e != type()) { + log_invalid_choice_id(e, "gnb_id_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string gnb_id_c::types_opts::to_string() const +{ + static const char* options[] = {"gNB-ID"}; + return convert_enum_idx(options, 1, value, "gnb_id_c::types"); +} + +// Global-ENB-ID ::= SEQUENCE +SRSASN_CODE global_enb_id_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(plmn_id.pack(bref)); - HANDLE_CODE(pack_dyn_seq_of(bref, forbidden_lacs, 1, 4096, true)); + HANDLE_CODE(plm_nid.pack(bref)); + HANDLE_CODE(enb_id.pack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE forbidden_las_item_s::unpack(cbit_ref& bref) +SRSASN_CODE global_enb_id_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(plmn_id.unpack(bref)); - HANDLE_CODE(unpack_dyn_seq_of(forbidden_lacs, bref, 1, 4096, true)); + HANDLE_CODE(plm_nid.unpack(bref)); + HANDLE_CODE(enb_id.unpack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void forbidden_las_item_s::to_json(json_writer& j) const +void global_enb_id_s::to_json(json_writer& j) const { j.start_obj(); - j.write_str("pLMN-Identity", plmn_id.to_string()); - j.start_array("forbiddenLACs"); - for (const auto& e1 : forbidden_lacs) { - j.write_str(e1.to_string()); - } - j.end_array(); + j.write_str("pLMNidentity", plm_nid.to_string()); + j.write_fieldname("eNB-ID"); + enb_id.to_json(j); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); ie_exts.to_json(j); @@ -5419,42 +6806,39 @@ void forbidden_las_item_s::to_json(json_writer& j) const j.end_obj(); } -// ForbiddenTAs-Item ::= SEQUENCE -SRSASN_CODE forbidden_tas_item_s::pack(bit_ref& bref) const +// Global-GNB-ID ::= SEQUENCE +SRSASN_CODE global_gnb_id_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(bref.pack(ie_exts_present, 1)); HANDLE_CODE(plmn_id.pack(bref)); - HANDLE_CODE(pack_dyn_seq_of(bref, forbidden_tacs, 1, 4096, true)); + HANDLE_CODE(gnb_id.pack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE forbidden_tas_item_s::unpack(cbit_ref& bref) +SRSASN_CODE global_gnb_id_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); HANDLE_CODE(plmn_id.unpack(bref)); - HANDLE_CODE(unpack_dyn_seq_of(forbidden_tacs, bref, 1, 4096, true)); + HANDLE_CODE(gnb_id.unpack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void forbidden_tas_item_s::to_json(json_writer& j) const +void global_gnb_id_s::to_json(json_writer& j) const { j.start_obj(); j.write_str("pLMN-Identity", plmn_id.to_string()); - j.start_array("forbiddenTACs"); - for (const auto& e1 : forbidden_tacs) { - j.write_str(e1.to_string()); - } - j.end_array(); + j.write_fieldname("gNB-ID"); + gnb_id.to_json(j); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); ie_exts.to_json(j); @@ -5462,85 +6846,1321 @@ void forbidden_tas_item_s::to_json(json_writer& j) const j.end_obj(); } -// ForbiddenInterRATs ::= ENUMERATED -std::string forbidden_inter_rats_opts::to_string() const +// GNB ::= SEQUENCE +SRSASN_CODE gnb_s::pack(bit_ref& bref) const { - static const char* options[] = {"all", "geran", "utran", "cdma2000", "geranandutran", "cdma2000andutran"}; - return convert_enum_idx(options, 6, value, "forbidden_inter_rats_e"); + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(global_g_nb_id.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; } +SRSASN_CODE gnb_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); -// DLNASPDUDeliveryAckRequest ::= ENUMERATED -std::string dlnaspdu_delivery_ack_request_opts::to_string() const + HANDLE_CODE(global_g_nb_id.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void gnb_s::to_json(json_writer& j) const { - static const char* options[] = {"requested"}; - return convert_enum_idx(options, 1, value, "dlnaspdu_delivery_ack_request_e"); + j.start_obj(); + j.write_fieldname("global-gNB-ID"); + global_g_nb_id.to_json(j); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); } -// HandoverRestrictionList ::= SEQUENCE -SRSASN_CODE ho_restrict_list_s::pack(bit_ref& bref) const +// NG-eNB ::= SEQUENCE +SRSASN_CODE ng_enb_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(bref.pack(equivalent_plmns_present, 1)); - HANDLE_CODE(bref.pack(forbidden_tas_present, 1)); - HANDLE_CODE(bref.pack(forbidden_las_present, 1)); - HANDLE_CODE(bref.pack(forbidden_inter_rats_present, 1)); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(serving_plmn.pack(bref)); - if (equivalent_plmns_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, equivalent_plmns, 1, 15, true)); - } - if (forbidden_tas_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, forbidden_tas, 1, 16, true)); - } - if (forbidden_las_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, forbidden_las, 1, 16, true)); - } - if (forbidden_inter_rats_present) { - HANDLE_CODE(forbidden_inter_rats.pack(bref)); - } + HANDLE_CODE(global_ng_enb_id.pack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE ho_restrict_list_s::unpack(cbit_ref& bref) +SRSASN_CODE ng_enb_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(equivalent_plmns_present, 1)); - HANDLE_CODE(bref.unpack(forbidden_tas_present, 1)); - HANDLE_CODE(bref.unpack(forbidden_las_present, 1)); - HANDLE_CODE(bref.unpack(forbidden_inter_rats_present, 1)); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(serving_plmn.unpack(bref)); - if (equivalent_plmns_present) { - HANDLE_CODE(unpack_dyn_seq_of(equivalent_plmns, bref, 1, 15, true)); - } - if (forbidden_tas_present) { - HANDLE_CODE(unpack_dyn_seq_of(forbidden_tas, bref, 1, 16, true)); - } - if (forbidden_las_present) { - HANDLE_CODE(unpack_dyn_seq_of(forbidden_las, bref, 1, 16, true)); - } - if (forbidden_inter_rats_present) { - HANDLE_CODE(forbidden_inter_rats.unpack(bref)); - } + HANDLE_CODE(global_ng_enb_id.unpack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void ho_restrict_list_s::to_json(json_writer& j) const +void ng_enb_s::to_json(json_writer& j) const { j.start_obj(); - j.write_str("servingPLMN", serving_plmn.to_string()); - if (equivalent_plmns_present) { - j.start_array("equivalentPLMNs"); - for (const auto& e1 : equivalent_plmns) { - j.write_str(e1.to_string()); + j.write_fieldname("global-ng-eNB-ID"); + global_ng_enb_id.to_json(j); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// Global-RAN-NODE-ID ::= CHOICE +void global_ran_node_id_c::destroy_() +{ + switch (type_) { + case types::gnb: + c.destroy(); + break; + case types::ng_enb: + c.destroy(); + break; + default: + break; + } +} +void global_ran_node_id_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::gnb: + c.init(); + break; + case types::ng_enb: + c.init(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "global_ran_node_id_c"); + } +} +global_ran_node_id_c::global_ran_node_id_c(const global_ran_node_id_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::gnb: + c.init(other.c.get()); + break; + case types::ng_enb: + c.init(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "global_ran_node_id_c"); + } +} +global_ran_node_id_c& global_ran_node_id_c::operator=(const global_ran_node_id_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::gnb: + c.set(other.c.get()); + break; + case types::ng_enb: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "global_ran_node_id_c"); + } + + return *this; +} +void global_ran_node_id_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::gnb: + j.write_fieldname("gNB"); + c.get().to_json(j); + break; + case types::ng_enb: + j.write_fieldname("ng-eNB"); + c.get().to_json(j); + break; + default: + log_invalid_choice_id(type_, "global_ran_node_id_c"); + } + j.end_obj(); +} +SRSASN_CODE global_ran_node_id_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::gnb: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::ng_enb: + HANDLE_CODE(c.get().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "global_ran_node_id_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE global_ran_node_id_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::gnb: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::ng_enb: + HANDLE_CODE(c.get().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "global_ran_node_id_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +std::string global_ran_node_id_c::types_opts::to_string() const +{ + static const char* options[] = {"gNB", "ng-eNB"}; + return convert_enum_idx(options, 2, value, "global_ran_node_id_c::types"); +} + +// ContextatSource ::= SEQUENCE +SRSASN_CODE contextat_source_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(source_ng_ran_node_id.pack(bref)); + HANDLE_CODE(pack_integer(bref, ran_ue_ngap_id, (uint64_t)0u, (uint64_t)4294967295u, false, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE contextat_source_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(source_ng_ran_node_id.unpack(bref)); + HANDLE_CODE(unpack_integer(ran_ue_ngap_id, bref, (uint64_t)0u, (uint64_t)4294967295u, false, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void contextat_source_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("sourceNG-RAN-node-ID"); + source_ng_ran_node_id.to_json(j); + j.write_int("rAN-UE-NGAP-ID", ran_ue_ngap_id); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// TypeOfError ::= ENUMERATED +std::string type_of_error_opts::to_string() const +{ + static const char* options[] = {"not-understood", "missing"}; + return convert_enum_idx(options, 2, value, "type_of_error_e"); +} + +// CriticalityDiagnostics-IE-Item ::= SEQUENCE +SRSASN_CODE crit_diagnostics_ie_item_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(iecrit.pack(bref)); + HANDLE_CODE(pack_integer(bref, ie_id, (uint32_t)0u, (uint32_t)65535u, false, true)); + HANDLE_CODE(type_of_error.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE crit_diagnostics_ie_item_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(iecrit.unpack(bref)); + HANDLE_CODE(unpack_integer(ie_id, bref, (uint32_t)0u, (uint32_t)65535u, false, true)); + HANDLE_CODE(type_of_error.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void crit_diagnostics_ie_item_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("iECriticality", iecrit.to_string()); + j.write_int("iE-ID", ie_id); + j.write_str("typeOfError", type_of_error.to_string()); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// TriggeringMessage ::= ENUMERATED +std::string trigger_msg_opts::to_string() const +{ + static const char* options[] = {"initiating-message", "successful-outcome", "unsuccessfull-outcome"}; + return convert_enum_idx(options, 3, value, "trigger_msg_e"); +} + +// CriticalityDiagnostics ::= SEQUENCE +SRSASN_CODE crit_diagnostics_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(proc_code_present, 1)); + HANDLE_CODE(bref.pack(trigger_msg_present, 1)); + HANDLE_CODE(bref.pack(proc_crit_present, 1)); + HANDLE_CODE(bref.pack(ies_crit_diagnostics_present, 1)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + if (proc_code_present) { + HANDLE_CODE(pack_integer(bref, proc_code, (uint16_t)0u, (uint16_t)255u, false, true)); + } + if (trigger_msg_present) { + HANDLE_CODE(trigger_msg.pack(bref)); + } + if (proc_crit_present) { + HANDLE_CODE(proc_crit.pack(bref)); + } + if (ies_crit_diagnostics_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, ies_crit_diagnostics, 1, 256, true)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE crit_diagnostics_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(proc_code_present, 1)); + HANDLE_CODE(bref.unpack(trigger_msg_present, 1)); + HANDLE_CODE(bref.unpack(proc_crit_present, 1)); + HANDLE_CODE(bref.unpack(ies_crit_diagnostics_present, 1)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + if (proc_code_present) { + HANDLE_CODE(unpack_integer(proc_code, bref, (uint16_t)0u, (uint16_t)255u, false, true)); + } + if (trigger_msg_present) { + HANDLE_CODE(trigger_msg.unpack(bref)); + } + if (proc_crit_present) { + HANDLE_CODE(proc_crit.unpack(bref)); + } + if (ies_crit_diagnostics_present) { + HANDLE_CODE(unpack_dyn_seq_of(ies_crit_diagnostics, bref, 1, 256, true)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void crit_diagnostics_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (proc_code_present) { + j.write_int("procedureCode", proc_code); + } + if (trigger_msg_present) { + j.write_str("triggeringMessage", trigger_msg.to_string()); + } + if (proc_crit_present) { + j.write_str("procedureCriticality", proc_crit.to_string()); + } + if (ies_crit_diagnostics_present) { + j.start_array("iEsCriticalityDiagnostics"); + for (const auto& e1 : ies_crit_diagnostics) { + e1.to_json(j); + } + j.end_array(); + } + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// DeactivateTraceIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +uint32_t deactiv_trace_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {0, 8, 86}; + return map_enum_number(options, 3, idx, "id"); +} +bool deactiv_trace_ies_o::is_id_valid(const uint32_t& id) +{ + static const uint32_t options[] = {0, 8, 86}; + for (const auto& o : options) { + if (o == id) { + return true; + } + } + return false; +} +crit_e deactiv_trace_ies_o::get_crit(const uint32_t& id) +{ + switch (id) { + case 0: + return crit_e::reject; + case 8: + return crit_e::reject; + case 86: + return crit_e::ignore; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} +deactiv_trace_ies_o::value_c deactiv_trace_ies_o::get_value(const uint32_t& id) +{ + value_c ret{}; + switch (id) { + case 0: + ret.set(value_c::types::mme_ue_s1ap_id); + break; + case 8: + ret.set(value_c::types::enb_ue_s1ap_id); + break; + case 86: + ret.set(value_c::types::e_utran_trace_id); + break; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e deactiv_trace_ies_o::get_presence(const uint32_t& id) +{ + switch (id) { + case 0: + return presence_e::mandatory; + case 8: + return presence_e::mandatory; + case 86: + return presence_e::mandatory; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} + +// Value ::= OPEN TYPE +uint64_t& deactiv_trace_ies_o::value_c::mme_ue_s1ap_id() +{ + assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); + return c.get(); +} +uint32_t& deactiv_trace_ies_o::value_c::enb_ue_s1ap_id() +{ + assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); + return c.get(); +} +fixed_octstring<8, true>& deactiv_trace_ies_o::value_c::e_utran_trace_id() +{ + assert_choice_type("OCTET STRING", type_.to_string(), "Value"); + return c.get >(); +} +const uint64_t& deactiv_trace_ies_o::value_c::mme_ue_s1ap_id() const +{ + assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); + return c.get(); +} +const uint32_t& deactiv_trace_ies_o::value_c::enb_ue_s1ap_id() const +{ + assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); + return c.get(); +} +const fixed_octstring<8, true>& deactiv_trace_ies_o::value_c::e_utran_trace_id() const +{ + assert_choice_type("OCTET STRING", type_.to_string(), "Value"); + return c.get >(); +} +void deactiv_trace_ies_o::value_c::destroy_() +{ + switch (type_) { + case types::e_utran_trace_id: + c.destroy >(); + break; + default: + break; + } +} +void deactiv_trace_ies_o::value_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::mme_ue_s1ap_id: + break; + case types::enb_ue_s1ap_id: + break; + case types::e_utran_trace_id: + c.init >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + } +} +deactiv_trace_ies_o::value_c::value_c(const deactiv_trace_ies_o::value_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::mme_ue_s1ap_id: + c.init(other.c.get()); + break; + case types::enb_ue_s1ap_id: + c.init(other.c.get()); + break; + case types::e_utran_trace_id: + c.init(other.c.get >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + } +} +deactiv_trace_ies_o::value_c& deactiv_trace_ies_o::value_c::operator=(const deactiv_trace_ies_o::value_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::mme_ue_s1ap_id: + c.set(other.c.get()); + break; + case types::enb_ue_s1ap_id: + c.set(other.c.get()); + break; + case types::e_utran_trace_id: + c.set(other.c.get >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + } + + return *this; +} +void deactiv_trace_ies_o::value_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::mme_ue_s1ap_id: + j.write_int("INTEGER (0..4294967295)", c.get()); + break; + case types::enb_ue_s1ap_id: + j.write_int("INTEGER (0..16777215)", c.get()); + break; + case types::e_utran_trace_id: + j.write_str("OCTET STRING", c.get >().to_string()); + break; + default: + log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + } + j.end_obj(); +} +SRSASN_CODE deactiv_trace_ies_o::value_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + switch (type_) { + case types::mme_ue_s1ap_id: + HANDLE_CODE(pack_integer(bref, c.get(), (uint64_t)0u, (uint64_t)4294967295u, false, true)); + break; + case types::enb_ue_s1ap_id: + HANDLE_CODE(pack_integer(bref, c.get(), (uint32_t)0u, (uint32_t)16777215u, false, true)); + break; + case types::e_utran_trace_id: + HANDLE_CODE((c.get >().pack(bref))); + break; + default: + log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE deactiv_trace_ies_o::value_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + switch (type_) { + case types::mme_ue_s1ap_id: + HANDLE_CODE(unpack_integer(c.get(), bref, (uint64_t)0u, (uint64_t)4294967295u, false, true)); + break; + case types::enb_ue_s1ap_id: + HANDLE_CODE(unpack_integer(c.get(), bref, (uint32_t)0u, (uint32_t)16777215u, false, true)); + break; + case types::e_utran_trace_id: + HANDLE_CODE((c.get >().unpack(bref))); + break; + default: + log_invalid_choice_id(type_, "deactiv_trace_ies_o::value_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +std::string deactiv_trace_ies_o::value_c::types_opts::to_string() const +{ + static const char* options[] = {"INTEGER (0..4294967295)", "INTEGER (0..16777215)", "OCTET STRING"}; + return convert_enum_idx(options, 3, value, "deactiv_trace_ies_o::value_c::types"); +} + +template struct asn1::s1ap::protocol_ie_field_s; + +deactiv_trace_ies_container::deactiv_trace_ies_container() : + mme_ue_s1ap_id(0, crit_e::reject), enb_ue_s1ap_id(8, crit_e::reject), e_utran_trace_id(86, crit_e::ignore) +{} +SRSASN_CODE deactiv_trace_ies_container::pack(bit_ref& bref) const +{ + uint32_t nof_ies = 3; + pack_length(bref, nof_ies, 0u, 65535u, true); + + HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); + HANDLE_CODE(enb_ue_s1ap_id.pack(bref)); + HANDLE_CODE(e_utran_trace_id.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE deactiv_trace_ies_container::unpack(cbit_ref& bref) +{ + uint32_t nof_ies = 0; + unpack_length(nof_ies, bref, 0u, 65535u, true); + + uint32_t nof_mandatory_ies = 3; + + for (; nof_ies > 0; --nof_ies) { + protocol_ie_field_s c; + HANDLE_CODE(c.unpack(bref)); + switch (c.id) { + case 0: + nof_mandatory_ies--; + mme_ue_s1ap_id.id = c.id; + mme_ue_s1ap_id.crit = c.crit; + mme_ue_s1ap_id.value = c.value.mme_ue_s1ap_id(); + break; + case 8: + nof_mandatory_ies--; + enb_ue_s1ap_id.id = c.id; + enb_ue_s1ap_id.crit = c.crit; + enb_ue_s1ap_id.value = c.value.enb_ue_s1ap_id(); + break; + case 86: + nof_mandatory_ies--; + e_utran_trace_id.id = c.id; + e_utran_trace_id.crit = c.crit; + e_utran_trace_id.value = c.value.e_utran_trace_id(); + break; + default: + asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); + return SRSASN_ERROR_DECODE_FAIL; + } + } + if (nof_mandatory_ies > 0) { + asn1::log_error("Mandatory fields are missing\n"); + + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} +void deactiv_trace_ies_container::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname(""); + mme_ue_s1ap_id.to_json(j); + j.write_fieldname(""); + enb_ue_s1ap_id.to_json(j); + j.write_fieldname(""); + e_utran_trace_id.to_json(j); + j.end_obj(); +} + +// DeactivateTrace ::= SEQUENCE +SRSASN_CODE deactiv_trace_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(protocol_ies.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE deactiv_trace_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(protocol_ies.unpack(bref)); + + return SRSASN_SUCCESS; +} +void deactiv_trace_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("protocolIEs"); + protocol_ies.to_json(j); + j.end_obj(); +} + +// ForbiddenLAs-Item ::= SEQUENCE +SRSASN_CODE forbidden_las_item_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(plmn_id.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, forbidden_lacs, 1, 4096, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE forbidden_las_item_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(plmn_id.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(forbidden_lacs, bref, 1, 4096, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void forbidden_las_item_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("pLMN-Identity", plmn_id.to_string()); + j.start_array("forbiddenLACs"); + for (const auto& e1 : forbidden_lacs) { + j.write_str(e1.to_string()); + } + j.end_array(); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// ForbiddenTAs-Item ::= SEQUENCE +SRSASN_CODE forbidden_tas_item_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(plmn_id.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, forbidden_tacs, 1, 4096, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE forbidden_tas_item_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(plmn_id.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(forbidden_tacs, bref, 1, 4096, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void forbidden_tas_item_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("pLMN-Identity", plmn_id.to_string()); + j.start_array("forbiddenTACs"); + for (const auto& e1 : forbidden_tacs) { + j.write_str(e1.to_string()); + } + j.end_array(); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// NRrestrictionin5GS ::= ENUMERATED +std::string nrrestrictin5_gs_opts::to_string() const +{ + static const char* options[] = {"nRrestrictedin5GS"}; + return convert_enum_idx(options, 1, value, "nrrestrictin5_gs_e"); +} +uint8_t nrrestrictin5_gs_opts::to_number() const +{ + static const uint8_t options[] = {5}; + return map_enum_number(options, 1, value, "nrrestrictin5_gs_e"); +} + +// NRrestrictioninEPSasSecondaryRAT ::= ENUMERATED +std::string nrrestrictin_ep_sas_secondary_rat_opts::to_string() const +{ + static const char* options[] = {"nRrestrictedinEPSasSecondaryRAT"}; + return convert_enum_idx(options, 1, value, "nrrestrictin_ep_sas_secondary_rat_e"); +} + +// UnlicensedSpectrumRestriction ::= ENUMERATED +std::string unlicensed_spec_restrict_opts::to_string() const +{ + static const char* options[] = {"unlicensed-restricted"}; + return convert_enum_idx(options, 1, value, "unlicensed_spec_restrict_e"); +} + +// ForbiddenInterRATs ::= ENUMERATED +std::string forbidden_inter_rats_opts::to_string() const +{ + static const char* options[] = {"all", "geran", "utran", "cdma2000", "geranandutran", "cdma2000andutran"}; + return convert_enum_idx(options, 6, value, "forbidden_inter_rats_e"); +} + +// HandoverRestrictionList-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t ho_restrict_list_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {261, 270, 282, 287, 290}; + return map_enum_number(options, 5, idx, "id"); +} +bool ho_restrict_list_ext_ies_o::is_id_valid(const uint32_t& id) +{ + static const uint32_t options[] = {261, 270, 282, 287, 290}; + for (const auto& o : options) { + if (o == id) { + return true; + } + } + return false; +} +crit_e ho_restrict_list_ext_ies_o::get_crit(const uint32_t& id) +{ + switch (id) { + case 261: + return crit_e::ignore; + case 270: + return crit_e::ignore; + case 282: + return crit_e::ignore; + case 287: + return crit_e::ignore; + case 290: + return crit_e::ignore; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} +ho_restrict_list_ext_ies_o::ext_c ho_restrict_list_ext_ies_o::get_ext(const uint32_t& id) +{ + ext_c ret{}; + switch (id) { + case 261: + ret.set(ext_c::types::nrrestrictin_ep_sas_secondary_rat); + break; + case 270: + ret.set(ext_c::types::unlicensed_spec_restrict); + break; + case 282: + ret.set(ext_c::types::cn_type_restricts); + break; + case 287: + ret.set(ext_c::types::nrrestrictin5_gs); + break; + case 290: + ret.set(ext_c::types::last_ng_ranplmn_id); + break; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e ho_restrict_list_ext_ies_o::get_presence(const uint32_t& id) +{ + switch (id) { + case 261: + return presence_e::optional; + case 270: + return presence_e::optional; + case 282: + return presence_e::optional; + case 287: + return presence_e::optional; + case 290: + return presence_e::optional; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} + +// Extension ::= OPEN TYPE +nrrestrictin_ep_sas_secondary_rat_e& ho_restrict_list_ext_ies_o::ext_c::nrrestrictin_ep_sas_secondary_rat() +{ + assert_choice_type("NRrestrictioninEPSasSecondaryRAT", type_.to_string(), "Extension"); + return c.get(); +} +unlicensed_spec_restrict_e& ho_restrict_list_ext_ies_o::ext_c::unlicensed_spec_restrict() +{ + assert_choice_type("UnlicensedSpectrumRestriction", type_.to_string(), "Extension"); + return c.get(); +} +cn_type_restricts_l& ho_restrict_list_ext_ies_o::ext_c::cn_type_restricts() +{ + assert_choice_type("CNTypeRestrictions", type_.to_string(), "Extension"); + return c.get(); +} +nrrestrictin5_gs_e& ho_restrict_list_ext_ies_o::ext_c::nrrestrictin5_gs() +{ + assert_choice_type("NRrestrictionin5GS", type_.to_string(), "Extension"); + return c.get(); +} +plm_nid& ho_restrict_list_ext_ies_o::ext_c::last_ng_ranplmn_id() +{ + assert_choice_type("PLMNidentity", type_.to_string(), "Extension"); + return c.get(); +} +const nrrestrictin_ep_sas_secondary_rat_e& ho_restrict_list_ext_ies_o::ext_c::nrrestrictin_ep_sas_secondary_rat() const +{ + assert_choice_type("NRrestrictioninEPSasSecondaryRAT", type_.to_string(), "Extension"); + return c.get(); +} +const unlicensed_spec_restrict_e& ho_restrict_list_ext_ies_o::ext_c::unlicensed_spec_restrict() const +{ + assert_choice_type("UnlicensedSpectrumRestriction", type_.to_string(), "Extension"); + return c.get(); +} +const cn_type_restricts_l& ho_restrict_list_ext_ies_o::ext_c::cn_type_restricts() const +{ + assert_choice_type("CNTypeRestrictions", type_.to_string(), "Extension"); + return c.get(); +} +const nrrestrictin5_gs_e& ho_restrict_list_ext_ies_o::ext_c::nrrestrictin5_gs() const +{ + assert_choice_type("NRrestrictionin5GS", type_.to_string(), "Extension"); + return c.get(); +} +const plm_nid& ho_restrict_list_ext_ies_o::ext_c::last_ng_ranplmn_id() const +{ + assert_choice_type("PLMNidentity", type_.to_string(), "Extension"); + return c.get(); +} +void ho_restrict_list_ext_ies_o::ext_c::destroy_() +{ + switch (type_) { + case types::cn_type_restricts: + c.destroy(); + break; + case types::last_ng_ranplmn_id: + c.destroy(); + break; + default: + break; + } +} +void ho_restrict_list_ext_ies_o::ext_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::nrrestrictin_ep_sas_secondary_rat: + break; + case types::unlicensed_spec_restrict: + break; + case types::cn_type_restricts: + c.init(); + break; + case types::nrrestrictin5_gs: + break; + case types::last_ng_ranplmn_id: + c.init(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ho_restrict_list_ext_ies_o::ext_c"); + } +} +ho_restrict_list_ext_ies_o::ext_c::ext_c(const ho_restrict_list_ext_ies_o::ext_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::nrrestrictin_ep_sas_secondary_rat: + c.init(other.c.get()); + break; + case types::unlicensed_spec_restrict: + c.init(other.c.get()); + break; + case types::cn_type_restricts: + c.init(other.c.get()); + break; + case types::nrrestrictin5_gs: + c.init(other.c.get()); + break; + case types::last_ng_ranplmn_id: + c.init(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ho_restrict_list_ext_ies_o::ext_c"); + } +} +ho_restrict_list_ext_ies_o::ext_c& +ho_restrict_list_ext_ies_o::ext_c::operator=(const ho_restrict_list_ext_ies_o::ext_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::nrrestrictin_ep_sas_secondary_rat: + c.set(other.c.get()); + break; + case types::unlicensed_spec_restrict: + c.set(other.c.get()); + break; + case types::cn_type_restricts: + c.set(other.c.get()); + break; + case types::nrrestrictin5_gs: + c.set(other.c.get()); + break; + case types::last_ng_ranplmn_id: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ho_restrict_list_ext_ies_o::ext_c"); + } + + return *this; +} +void ho_restrict_list_ext_ies_o::ext_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::nrrestrictin_ep_sas_secondary_rat: + j.write_str("NRrestrictioninEPSasSecondaryRAT", "nRrestrictedinEPSasSecondaryRAT"); + break; + case types::unlicensed_spec_restrict: + j.write_str("UnlicensedSpectrumRestriction", "unlicensed-restricted"); + break; + case types::cn_type_restricts: + j.start_array("CNTypeRestrictions"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; + case types::nrrestrictin5_gs: + j.write_str("NRrestrictionin5GS", "nRrestrictedin5GS"); + break; + case types::last_ng_ranplmn_id: + j.write_str("PLMNidentity", c.get().to_string()); + break; + default: + log_invalid_choice_id(type_, "ho_restrict_list_ext_ies_o::ext_c"); + } + j.end_obj(); +} +SRSASN_CODE ho_restrict_list_ext_ies_o::ext_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + switch (type_) { + case types::nrrestrictin_ep_sas_secondary_rat: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::unlicensed_spec_restrict: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::cn_type_restricts: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 16, true)); + break; + case types::nrrestrictin5_gs: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::last_ng_ranplmn_id: + HANDLE_CODE(c.get().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "ho_restrict_list_ext_ies_o::ext_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE ho_restrict_list_ext_ies_o::ext_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + switch (type_) { + case types::nrrestrictin_ep_sas_secondary_rat: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::unlicensed_spec_restrict: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::cn_type_restricts: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 16, true)); + break; + case types::nrrestrictin5_gs: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::last_ng_ranplmn_id: + HANDLE_CODE(c.get().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "ho_restrict_list_ext_ies_o::ext_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +std::string ho_restrict_list_ext_ies_o::ext_c::types_opts::to_string() const +{ + static const char* options[] = {"NRrestrictioninEPSasSecondaryRAT", + "UnlicensedSpectrumRestriction", + "CNTypeRestrictions", + "NRrestrictionin5GS", + "PLMNidentity"}; + return convert_enum_idx(options, 5, value, "ho_restrict_list_ext_ies_o::ext_c::types"); +} +uint8_t ho_restrict_list_ext_ies_o::ext_c::types_opts::to_number() const +{ + if (value == nrrestrictin5_gs) { + return 5; + } + invalid_enum_number(value, "ho_restrict_list_ext_ies_o::ext_c::types"); + return 0; +} + +// DLNASPDUDeliveryAckRequest ::= ENUMERATED +std::string dlnaspdu_delivery_ack_request_opts::to_string() const +{ + static const char* options[] = {"requested"}; + return convert_enum_idx(options, 1, value, "dlnaspdu_delivery_ack_request_e"); +} + +template struct asn1::s1ap::protocol_ext_field_s; + +ho_restrict_list_ext_ies_container::ho_restrict_list_ext_ies_container() : + nrrestrictin_ep_sas_secondary_rat(261, crit_e::ignore), + unlicensed_spec_restrict(270, crit_e::ignore), + cn_type_restricts(282, crit_e::ignore), + nrrestrictin5_gs(287, crit_e::ignore), + last_ng_ranplmn_id(290, crit_e::ignore) +{} +SRSASN_CODE ho_restrict_list_ext_ies_container::pack(bit_ref& bref) const +{ + uint32_t nof_ies = 0; + nof_ies += nrrestrictin_ep_sas_secondary_rat_present ? 1 : 0; + nof_ies += unlicensed_spec_restrict_present ? 1 : 0; + nof_ies += cn_type_restricts_present ? 1 : 0; + nof_ies += nrrestrictin5_gs_present ? 1 : 0; + nof_ies += last_ng_ranplmn_id_present ? 1 : 0; + pack_length(bref, nof_ies, 1u, 65535u, true); + + if (nrrestrictin_ep_sas_secondary_rat_present) { + HANDLE_CODE(nrrestrictin_ep_sas_secondary_rat.pack(bref)); + } + if (unlicensed_spec_restrict_present) { + HANDLE_CODE(unlicensed_spec_restrict.pack(bref)); + } + if (cn_type_restricts_present) { + HANDLE_CODE(cn_type_restricts.pack(bref)); + } + if (nrrestrictin5_gs_present) { + HANDLE_CODE(nrrestrictin5_gs.pack(bref)); + } + if (last_ng_ranplmn_id_present) { + HANDLE_CODE(last_ng_ranplmn_id.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ho_restrict_list_ext_ies_container::unpack(cbit_ref& bref) +{ + uint32_t nof_ies = 0; + unpack_length(nof_ies, bref, 1u, 65535u, true); + + for (; nof_ies > 0; --nof_ies) { + protocol_ext_field_s c; + HANDLE_CODE(c.unpack(bref)); + switch (c.id) { + case 261: + nrrestrictin_ep_sas_secondary_rat_present = true; + nrrestrictin_ep_sas_secondary_rat.id = c.id; + nrrestrictin_ep_sas_secondary_rat.crit = c.crit; + nrrestrictin_ep_sas_secondary_rat.ext = c.ext_value.nrrestrictin_ep_sas_secondary_rat(); + break; + case 270: + unlicensed_spec_restrict_present = true; + unlicensed_spec_restrict.id = c.id; + unlicensed_spec_restrict.crit = c.crit; + unlicensed_spec_restrict.ext = c.ext_value.unlicensed_spec_restrict(); + break; + case 282: + cn_type_restricts_present = true; + cn_type_restricts.id = c.id; + cn_type_restricts.crit = c.crit; + cn_type_restricts.ext = c.ext_value.cn_type_restricts(); + break; + case 287: + nrrestrictin5_gs_present = true; + nrrestrictin5_gs.id = c.id; + nrrestrictin5_gs.crit = c.crit; + nrrestrictin5_gs.ext = c.ext_value.nrrestrictin5_gs(); + break; + case 290: + last_ng_ranplmn_id_present = true; + last_ng_ranplmn_id.id = c.id; + last_ng_ranplmn_id.crit = c.crit; + last_ng_ranplmn_id.ext = c.ext_value.last_ng_ranplmn_id(); + break; + default: + asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); + return SRSASN_ERROR_DECODE_FAIL; + } + } + + return SRSASN_SUCCESS; +} +void ho_restrict_list_ext_ies_container::to_json(json_writer& j) const +{ + j.start_obj(); + if (nrrestrictin_ep_sas_secondary_rat_present) { + j.write_fieldname(""); + nrrestrictin_ep_sas_secondary_rat.to_json(j); + } + if (unlicensed_spec_restrict_present) { + j.write_fieldname(""); + unlicensed_spec_restrict.to_json(j); + } + if (cn_type_restricts_present) { + j.write_fieldname(""); + cn_type_restricts.to_json(j); + } + if (nrrestrictin5_gs_present) { + j.write_fieldname(""); + nrrestrictin5_gs.to_json(j); + } + if (last_ng_ranplmn_id_present) { + j.write_fieldname(""); + last_ng_ranplmn_id.to_json(j); + } + j.end_obj(); +} + +// HandoverRestrictionList ::= SEQUENCE +SRSASN_CODE ho_restrict_list_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(equivalent_plmns_present, 1)); + HANDLE_CODE(bref.pack(forbidden_tas_present, 1)); + HANDLE_CODE(bref.pack(forbidden_las_present, 1)); + HANDLE_CODE(bref.pack(forbidden_inter_rats_present, 1)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(serving_plmn.pack(bref)); + if (equivalent_plmns_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, equivalent_plmns, 1, 15, true)); + } + if (forbidden_tas_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, forbidden_tas, 1, 16, true)); + } + if (forbidden_las_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, forbidden_las, 1, 16, true)); + } + if (forbidden_inter_rats_present) { + HANDLE_CODE(forbidden_inter_rats.pack(bref)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ho_restrict_list_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(equivalent_plmns_present, 1)); + HANDLE_CODE(bref.unpack(forbidden_tas_present, 1)); + HANDLE_CODE(bref.unpack(forbidden_las_present, 1)); + HANDLE_CODE(bref.unpack(forbidden_inter_rats_present, 1)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(serving_plmn.unpack(bref)); + if (equivalent_plmns_present) { + HANDLE_CODE(unpack_dyn_seq_of(equivalent_plmns, bref, 1, 15, true)); + } + if (forbidden_tas_present) { + HANDLE_CODE(unpack_dyn_seq_of(forbidden_tas, bref, 1, 16, true)); + } + if (forbidden_las_present) { + HANDLE_CODE(unpack_dyn_seq_of(forbidden_las, bref, 1, 16, true)); + } + if (forbidden_inter_rats_present) { + HANDLE_CODE(forbidden_inter_rats.unpack(bref)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ho_restrict_list_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("servingPLMN", serving_plmn.to_string()); + if (equivalent_plmns_present) { + j.start_array("equivalentPLMNs"); + for (const auto& e1 : equivalent_plmns) { + j.write_str(e1.to_string()); } j.end_array(); } @@ -5568,6 +8188,45 @@ void ho_restrict_list_s::to_json(json_writer& j) const j.end_obj(); } +// NRUESecurityCapabilities ::= SEQUENCE +SRSASN_CODE nrue_security_cap_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(nrencryption_algorithms.pack(bref)); + HANDLE_CODE(nrintegrity_protection_algorithms.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE nrue_security_cap_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(nrencryption_algorithms.unpack(bref)); + HANDLE_CODE(nrintegrity_protection_algorithms.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void nrue_security_cap_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("nRencryptionAlgorithms", nrencryption_algorithms.to_string()); + j.write_str("nRintegrityProtectionAlgorithms", nrintegrity_protection_algorithms.to_string()); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + // PendingDataIndication ::= ENUMERATED std::string pending_data_ind_opts::to_string() const { @@ -5582,15 +8241,22 @@ std::string srvcc_operation_possible_opts::to_string() const return convert_enum_idx(options, 1, value, "srvcc_operation_possible_e"); } +// UECapabilityInfoRequest ::= ENUMERATED +std::string ue_cap_info_request_opts::to_string() const +{ + static const char* options[] = {"requested"}; + return convert_enum_idx(options, 1, value, "ue_cap_info_request_e"); +} + // DownlinkNASTransport-IEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t dl_nas_transport_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 26, 41, 106, 124, 74, 249, 251, 271, 283}; - return map_enum_number(options, 11, idx, "id"); + static const uint32_t options[] = {0, 8, 26, 41, 106, 124, 74, 249, 251, 269, 271, 275, 280, 283, 278, 299}; + return map_enum_number(options, 16, idx, "id"); } bool dl_nas_transport_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 26, 41, 106, 124, 74, 249, 251, 271, 283}; + static const uint32_t options[] = {0, 8, 26, 41, 106, 124, 74, 249, 251, 269, 271, 275, 280, 283, 278, 299}; for (const auto& o : options) { if (o == id) { return true; @@ -5619,10 +8285,20 @@ crit_e dl_nas_transport_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 251: return crit_e::ignore; + case 269: + return crit_e::ignore; case 271: return crit_e::ignore; + case 275: + return crit_e::ignore; + case 280: + return crit_e::ignore; case 283: return crit_e::ignore; + case 278: + return crit_e::ignore; + case 299: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -5659,12 +8335,27 @@ dl_nas_transport_ies_o::value_c dl_nas_transport_ies_o::get_value(const uint32_t case 251: ret.set(value_c::types::enhanced_coverage_restricted); break; + case 269: + ret.set(value_c::types::nrue_security_cap); + break; case 271: ret.set(value_c::types::ce_mode_brestricted); break; + case 275: + ret.set(value_c::types::ue_cap_info_request); + break; + case 280: + ret.set(value_c::types::end_ind); + break; case 283: ret.set(value_c::types::pending_data_ind); break; + case 278: + ret.set(value_c::types::subscription_based_ue_differentiation_info); + break; + case 299: + ret.set(value_c::types::add_rrm_prio_idx); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -5691,10 +8382,20 @@ presence_e dl_nas_transport_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 251: return presence_e::optional; + case 269: + return presence_e::optional; case 271: return presence_e::optional; + case 275: + return presence_e::optional; + case 280: + return presence_e::optional; case 283: return presence_e::optional; + case 278: + return presence_e::optional; + case 299: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -5747,16 +8448,42 @@ enhanced_coverage_restricted_e& dl_nas_transport_ies_o::value_c::enhanced_covera assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); return c.get(); } +nrue_security_cap_s& dl_nas_transport_ies_o::value_c::nrue_security_cap() +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} ce_mode_brestricted_e& dl_nas_transport_ies_o::value_c::ce_mode_brestricted() { assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); return c.get(); } +ue_cap_info_request_e& dl_nas_transport_ies_o::value_c::ue_cap_info_request() +{ + assert_choice_type("UECapabilityInfoRequest", type_.to_string(), "Value"); + return c.get(); +} +end_ind_e& dl_nas_transport_ies_o::value_c::end_ind() +{ + assert_choice_type("EndIndication", type_.to_string(), "Value"); + return c.get(); +} pending_data_ind_e& dl_nas_transport_ies_o::value_c::pending_data_ind() { assert_choice_type("PendingDataIndication", type_.to_string(), "Value"); return c.get(); } +subscription_based_ue_differentiation_info_s& +dl_nas_transport_ies_o::value_c::subscription_based_ue_differentiation_info() +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} +fixed_bitstring<32, false, true>& dl_nas_transport_ies_o::value_c::add_rrm_prio_idx() +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} const uint64_t& dl_nas_transport_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -5802,16 +8529,42 @@ const enhanced_coverage_restricted_e& dl_nas_transport_ies_o::value_c::enhanced_ assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); return c.get(); } +const nrue_security_cap_s& dl_nas_transport_ies_o::value_c::nrue_security_cap() const +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} const ce_mode_brestricted_e& dl_nas_transport_ies_o::value_c::ce_mode_brestricted() const { assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); return c.get(); } +const ue_cap_info_request_e& dl_nas_transport_ies_o::value_c::ue_cap_info_request() const +{ + assert_choice_type("UECapabilityInfoRequest", type_.to_string(), "Value"); + return c.get(); +} +const end_ind_e& dl_nas_transport_ies_o::value_c::end_ind() const +{ + assert_choice_type("EndIndication", type_.to_string(), "Value"); + return c.get(); +} const pending_data_ind_e& dl_nas_transport_ies_o::value_c::pending_data_ind() const { assert_choice_type("PendingDataIndication", type_.to_string(), "Value"); return c.get(); } +const subscription_based_ue_differentiation_info_s& +dl_nas_transport_ies_o::value_c::subscription_based_ue_differentiation_info() const +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} +const fixed_bitstring<32, false, true>& dl_nas_transport_ies_o::value_c::add_rrm_prio_idx() const +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} void dl_nas_transport_ies_o::value_c::destroy_() { switch (type_) { @@ -5824,6 +8577,15 @@ void dl_nas_transport_ies_o::value_c::destroy_() case types::ue_radio_cap: c.destroy >(); break; + case types::nrue_security_cap: + c.destroy(); + break; + case types::subscription_based_ue_differentiation_info: + c.destroy(); + break; + case types::add_rrm_prio_idx: + c.destroy >(); + break; default: break; } @@ -5854,10 +8616,23 @@ void dl_nas_transport_ies_o::value_c::set(types::options e) break; case types::enhanced_coverage_restricted: break; + case types::nrue_security_cap: + c.init(); + break; case types::ce_mode_brestricted: break; + case types::ue_cap_info_request: + break; + case types::end_ind: + break; case types::pending_data_ind: break; + case types::subscription_based_ue_differentiation_info: + c.init(); + break; + case types::add_rrm_prio_idx: + c.init >(); + break; case types::nulltype: break; default: @@ -5895,12 +8670,27 @@ dl_nas_transport_ies_o::value_c::value_c(const dl_nas_transport_ies_o::value_c& case types::enhanced_coverage_restricted: c.init(other.c.get()); break; + case types::nrue_security_cap: + c.init(other.c.get()); + break; case types::ce_mode_brestricted: c.init(other.c.get()); break; + case types::ue_cap_info_request: + c.init(other.c.get()); + break; + case types::end_ind: + c.init(other.c.get()); + break; case types::pending_data_ind: c.init(other.c.get()); break; + case types::subscription_based_ue_differentiation_info: + c.init(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.init(other.c.get >()); + break; case types::nulltype: break; default: @@ -5942,12 +8732,27 @@ dl_nas_transport_ies_o::value_c::operator=(const dl_nas_transport_ies_o::value_c case types::enhanced_coverage_restricted: c.set(other.c.get()); break; + case types::nrue_security_cap: + c.set(other.c.get()); + break; case types::ce_mode_brestricted: c.set(other.c.get()); break; + case types::ue_cap_info_request: + c.set(other.c.get()); + break; + case types::end_ind: + c.set(other.c.get()); + break; case types::pending_data_ind: c.set(other.c.get()); break; + case types::subscription_based_ue_differentiation_info: + c.set(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.set(other.c.get >()); + break; case types::nulltype: break; default: @@ -5988,12 +8793,29 @@ void dl_nas_transport_ies_o::value_c::to_json(json_writer& j) const case types::enhanced_coverage_restricted: j.write_str("EnhancedCoverageRestricted", "restricted"); break; + case types::nrue_security_cap: + j.write_fieldname("NRUESecurityCapabilities"); + c.get().to_json(j); + break; case types::ce_mode_brestricted: j.write_str("CE-ModeBRestricted", c.get().to_string()); break; + case types::ue_cap_info_request: + j.write_str("UECapabilityInfoRequest", "requested"); + break; + case types::end_ind: + j.write_str("EndIndication", c.get().to_string()); + break; case types::pending_data_ind: j.write_str("PendingDataIndication", "true"); break; + case types::subscription_based_ue_differentiation_info: + j.write_fieldname("Subscription-Based-UE-DifferentiationInfo"); + c.get().to_json(j); + break; + case types::add_rrm_prio_idx: + j.write_str("BIT STRING", c.get >().to_string()); + break; default: log_invalid_choice_id(type_, "dl_nas_transport_ies_o::value_c"); } @@ -6030,12 +8852,27 @@ SRSASN_CODE dl_nas_transport_ies_o::value_c::pack(bit_ref& bref) const case types::enhanced_coverage_restricted: HANDLE_CODE(c.get().pack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().pack(bref)); + break; case types::ce_mode_brestricted: HANDLE_CODE(c.get().pack(bref)); break; + case types::ue_cap_info_request: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::end_ind: + HANDLE_CODE(c.get().pack(bref)); + break; case types::pending_data_ind: HANDLE_CODE(c.get().pack(bref)); break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().pack(bref))); + break; default: log_invalid_choice_id(type_, "dl_nas_transport_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -6073,12 +8910,27 @@ SRSASN_CODE dl_nas_transport_ies_o::value_c::unpack(cbit_ref& bref) case types::enhanced_coverage_restricted: HANDLE_CODE(c.get().unpack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().unpack(bref)); + break; case types::ce_mode_brestricted: HANDLE_CODE(c.get().unpack(bref)); break; + case types::ue_cap_info_request: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::end_ind: + HANDLE_CODE(c.get().unpack(bref)); + break; case types::pending_data_ind: HANDLE_CODE(c.get().unpack(bref)); break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().unpack(bref))); + break; default: log_invalid_choice_id(type_, "dl_nas_transport_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -6097,9 +8949,14 @@ std::string dl_nas_transport_ies_o::value_c::types_opts::to_string() const "OCTET STRING", "DLNASPDUDeliveryAckRequest", "EnhancedCoverageRestricted", + "NRUESecurityCapabilities", "CE-ModeBRestricted", - "PendingDataIndication"}; - return convert_enum_idx(options, 11, value, "dl_nas_transport_ies_o::value_c::types"); + "UECapabilityInfoRequest", + "EndIndication", + "PendingDataIndication", + "Subscription-Based-UE-DifferentiationInfo", + "BIT STRING"}; + return convert_enum_idx(options, 16, value, "dl_nas_transport_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -6114,8 +8971,13 @@ dl_nas_transport_ies_container::dl_nas_transport_ies_container() : ue_radio_cap(74, crit_e::ignore), dlnaspdu_delivery_ack_request(249, crit_e::ignore), enhanced_coverage_restricted(251, crit_e::ignore), + nrue_security_cap(269, crit_e::ignore), ce_mode_brestricted(271, crit_e::ignore), - pending_data_ind(283, crit_e::ignore) + ue_cap_info_request(275, crit_e::ignore), + end_ind(280, crit_e::ignore), + pending_data_ind(283, crit_e::ignore), + subscription_based_ue_differentiation_info(278, crit_e::ignore), + add_rrm_prio_idx(299, crit_e::ignore) {} SRSASN_CODE dl_nas_transport_ies_container::pack(bit_ref& bref) const { @@ -6126,8 +8988,13 @@ SRSASN_CODE dl_nas_transport_ies_container::pack(bit_ref& bref) const nof_ies += ue_radio_cap_present ? 1 : 0; nof_ies += dlnaspdu_delivery_ack_request_present ? 1 : 0; nof_ies += enhanced_coverage_restricted_present ? 1 : 0; + nof_ies += nrue_security_cap_present ? 1 : 0; nof_ies += ce_mode_brestricted_present ? 1 : 0; + nof_ies += ue_cap_info_request_present ? 1 : 0; + nof_ies += end_ind_present ? 1 : 0; nof_ies += pending_data_ind_present ? 1 : 0; + nof_ies += subscription_based_ue_differentiation_info_present ? 1 : 0; + nof_ies += add_rrm_prio_idx_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -6151,12 +9018,27 @@ SRSASN_CODE dl_nas_transport_ies_container::pack(bit_ref& bref) const if (enhanced_coverage_restricted_present) { HANDLE_CODE(enhanced_coverage_restricted.pack(bref)); } + if (nrue_security_cap_present) { + HANDLE_CODE(nrue_security_cap.pack(bref)); + } if (ce_mode_brestricted_present) { HANDLE_CODE(ce_mode_brestricted.pack(bref)); } + if (ue_cap_info_request_present) { + HANDLE_CODE(ue_cap_info_request.pack(bref)); + } + if (end_ind_present) { + HANDLE_CODE(end_ind.pack(bref)); + } if (pending_data_ind_present) { HANDLE_CODE(pending_data_ind.pack(bref)); } + if (subscription_based_ue_differentiation_info_present) { + HANDLE_CODE(subscription_based_ue_differentiation_info.pack(bref)); + } + if (add_rrm_prio_idx_present) { + HANDLE_CODE(add_rrm_prio_idx.pack(bref)); + } return SRSASN_SUCCESS; } @@ -6225,18 +9107,48 @@ SRSASN_CODE dl_nas_transport_ies_container::unpack(cbit_ref& bref) enhanced_coverage_restricted.crit = c.crit; enhanced_coverage_restricted.value = c.value.enhanced_coverage_restricted(); break; + case 269: + nrue_security_cap_present = true; + nrue_security_cap.id = c.id; + nrue_security_cap.crit = c.crit; + nrue_security_cap.value = c.value.nrue_security_cap(); + break; case 271: ce_mode_brestricted_present = true; ce_mode_brestricted.id = c.id; ce_mode_brestricted.crit = c.crit; ce_mode_brestricted.value = c.value.ce_mode_brestricted(); break; + case 275: + ue_cap_info_request_present = true; + ue_cap_info_request.id = c.id; + ue_cap_info_request.crit = c.crit; + ue_cap_info_request.value = c.value.ue_cap_info_request(); + break; + case 280: + end_ind_present = true; + end_ind.id = c.id; + end_ind.crit = c.crit; + end_ind.value = c.value.end_ind(); + break; case 283: pending_data_ind_present = true; pending_data_ind.id = c.id; pending_data_ind.crit = c.crit; pending_data_ind.value = c.value.pending_data_ind(); break; + case 278: + subscription_based_ue_differentiation_info_present = true; + subscription_based_ue_differentiation_info.id = c.id; + subscription_based_ue_differentiation_info.crit = c.crit; + subscription_based_ue_differentiation_info.value = c.value.subscription_based_ue_differentiation_info(); + break; + case 299: + add_rrm_prio_idx_present = true; + add_rrm_prio_idx.id = c.id; + add_rrm_prio_idx.crit = c.crit; + add_rrm_prio_idx.value = c.value.add_rrm_prio_idx(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -6282,14 +9194,34 @@ void dl_nas_transport_ies_container::to_json(json_writer& j) const j.write_fieldname(""); enhanced_coverage_restricted.to_json(j); } + if (nrue_security_cap_present) { + j.write_fieldname(""); + nrue_security_cap.to_json(j); + } if (ce_mode_brestricted_present) { j.write_fieldname(""); ce_mode_brestricted.to_json(j); } + if (ue_cap_info_request_present) { + j.write_fieldname(""); + ue_cap_info_request.to_json(j); + } + if (end_ind_present) { + j.write_fieldname(""); + end_ind.to_json(j); + } if (pending_data_ind_present) { j.write_fieldname(""); pending_data_ind.to_json(j); } + if (subscription_based_ue_differentiation_info_present) { + j.write_fieldname(""); + subscription_based_ue_differentiation_info.to_json(j); + } + if (add_rrm_prio_idx_present) { + j.write_fieldname(""); + add_rrm_prio_idx.to_json(j); + } j.end_obj(); } @@ -8288,103 +11220,6 @@ std::string erab_item_ies_o::value_c::types_opts::to_string() const return convert_enum_idx(options, 1, value, "erab_item_ies_o::value_c::types"); } -// GBR-QosInformation ::= SEQUENCE -SRSASN_CODE gbr_qos_info_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(ie_exts_present, 1)); - - HANDLE_CODE(pack_integer(bref, erab_maximum_bitrate_dl, (uint64_t)0u, (uint64_t)10000000000u, false, true)); - HANDLE_CODE(pack_integer(bref, erab_maximum_bitrate_ul, (uint64_t)0u, (uint64_t)10000000000u, false, true)); - HANDLE_CODE(pack_integer(bref, erab_guaranteed_bitrate_dl, (uint64_t)0u, (uint64_t)10000000000u, false, true)); - HANDLE_CODE(pack_integer(bref, erab_guaranteed_bitrate_ul, (uint64_t)0u, (uint64_t)10000000000u, false, true)); - if (ie_exts_present) { - HANDLE_CODE(ie_exts.pack(bref)); - } - - return SRSASN_SUCCESS; -} -SRSASN_CODE gbr_qos_info_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - - HANDLE_CODE(unpack_integer(erab_maximum_bitrate_dl, bref, (uint64_t)0u, (uint64_t)10000000000u, false, true)); - HANDLE_CODE(unpack_integer(erab_maximum_bitrate_ul, bref, (uint64_t)0u, (uint64_t)10000000000u, false, true)); - HANDLE_CODE(unpack_integer(erab_guaranteed_bitrate_dl, bref, (uint64_t)0u, (uint64_t)10000000000u, false, true)); - HANDLE_CODE(unpack_integer(erab_guaranteed_bitrate_ul, bref, (uint64_t)0u, (uint64_t)10000000000u, false, true)); - if (ie_exts_present) { - HANDLE_CODE(ie_exts.unpack(bref)); - } - - return SRSASN_SUCCESS; -} -void gbr_qos_info_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_int("e-RAB-MaximumBitrateDL", erab_maximum_bitrate_dl); - j.write_int("e-RAB-MaximumBitrateUL", erab_maximum_bitrate_ul); - j.write_int("e-RAB-GuaranteedBitrateDL", erab_guaranteed_bitrate_dl); - j.write_int("e-RAB-GuaranteedBitrateUL", erab_guaranteed_bitrate_ul); - if (ie_exts_present) { - j.write_fieldname("iE-Extensions"); - ie_exts.to_json(j); - } - j.end_obj(); -} - -// E-RABLevelQoSParameters ::= SEQUENCE -SRSASN_CODE erab_level_qos_params_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(gbr_qos_info_present, 1)); - HANDLE_CODE(bref.pack(ie_exts_present, 1)); - - HANDLE_CODE(pack_integer(bref, qci, (uint16_t)0u, (uint16_t)255u, false, true)); - HANDLE_CODE(alloc_retention_prio.pack(bref)); - if (gbr_qos_info_present) { - HANDLE_CODE(gbr_qos_info.pack(bref)); - } - if (ie_exts_present) { - HANDLE_CODE(ie_exts.pack(bref)); - } - - return SRSASN_SUCCESS; -} -SRSASN_CODE erab_level_qos_params_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(gbr_qos_info_present, 1)); - HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - - HANDLE_CODE(unpack_integer(qci, bref, (uint16_t)0u, (uint16_t)255u, false, true)); - HANDLE_CODE(alloc_retention_prio.unpack(bref)); - if (gbr_qos_info_present) { - HANDLE_CODE(gbr_qos_info.unpack(bref)); - } - if (ie_exts_present) { - HANDLE_CODE(ie_exts.unpack(bref)); - } - - return SRSASN_SUCCESS; -} -void erab_level_qos_params_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_int("qCI", qci); - j.write_fieldname("allocationRetentionPriority"); - alloc_retention_prio.to_json(j); - if (gbr_qos_info_present) { - j.write_fieldname("gbrQosInformation"); - gbr_qos_info.to_json(j); - } - if (ie_exts_present) { - j.write_fieldname("iE-Extensions"); - ie_exts.to_json(j); - } - j.end_obj(); -} - template struct asn1::s1ap::protocol_ie_single_container_s; // E-RABModifyItemBearerModConf ::= SEQUENCE @@ -9042,6 +11877,161 @@ void erab_mod_confirm_s::to_json(json_writer& j) const j.end_obj(); } +// E-RABUsageReportItem ::= SEQUENCE +SRSASN_CODE erabusage_report_item_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(start_timestamp.pack(bref)); + HANDLE_CODE(end_timestamp.pack(bref)); + HANDLE_CODE(pack_integer(bref, usage_count_ul, (uint64_t)0u, (uint64_t)18446744073709551615u, false, true)); + HANDLE_CODE(pack_integer(bref, usage_count_dl, (uint64_t)0u, (uint64_t)18446744073709551615u, false, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE erabusage_report_item_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(start_timestamp.unpack(bref)); + HANDLE_CODE(end_timestamp.unpack(bref)); + HANDLE_CODE(unpack_integer(usage_count_ul, bref, (uint64_t)0u, (uint64_t)18446744073709551615u, false, true)); + HANDLE_CODE(unpack_integer(usage_count_dl, bref, (uint64_t)0u, (uint64_t)18446744073709551615u, false, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void erabusage_report_item_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("startTimestamp", start_timestamp.to_string()); + j.write_str("endTimestamp", end_timestamp.to_string()); + j.write_int("usageCountUL", usage_count_ul); + j.write_int("usageCountDL", usage_count_dl); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// E-RABUsageReportItemIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +uint32_t erabusage_report_item_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {267}; + return map_enum_number(options, 1, idx, "id"); +} +bool erabusage_report_item_ies_o::is_id_valid(const uint32_t& id) +{ + return 267 == id; +} +crit_e erabusage_report_item_ies_o::get_crit(const uint32_t& id) +{ + if (id == 267) { + return crit_e::ignore; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} +erabusage_report_item_ies_o::value_c erabusage_report_item_ies_o::get_value(const uint32_t& id) +{ + value_c ret{}; + if (id != 267) { + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e erabusage_report_item_ies_o::get_presence(const uint32_t& id) +{ + if (id == 267) { + return presence_e::mandatory; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} + +// Value ::= OPEN TYPE +void erabusage_report_item_ies_o::value_c::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("E-RABUsageReportItem"); + c.to_json(j); + j.end_obj(); +} +SRSASN_CODE erabusage_report_item_ies_o::value_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE erabusage_report_item_ies_o::value_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string erabusage_report_item_ies_o::value_c::types_opts::to_string() const +{ + static const char* options[] = {"E-RABUsageReportItem"}; + return convert_enum_idx(options, 1, value, "erabusage_report_item_ies_o::value_c::types"); +} + +template struct asn1::s1ap::protocol_ie_single_container_s; + +// NR-CGI ::= SEQUENCE +SRSASN_CODE nr_cgi_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(plmn_id.pack(bref)); + HANDLE_CODE(nrcell_id.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE nr_cgi_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(plmn_id.unpack(bref)); + HANDLE_CODE(nrcell_id.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void nr_cgi_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("pLMNIdentity", plmn_id.to_string()); + j.write_str("nRCellIdentity", nrcell_id.to_string()); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// SecondaryRATType ::= ENUMERATED +std::string secondary_rat_type_opts::to_string() const +{ + static const char* options[] = {"nR", "unlicensed"}; + return convert_enum_idx(options, 2, value, "secondary_rat_type_e"); +} + // E-RABNotToBeModifiedItemBearerModInd ::= SEQUENCE SRSASN_CODE erab_not_to_be_modified_item_bearer_mod_ind_s::pack(bit_ref& bref) const { @@ -9126,6 +12116,89 @@ void erab_to_be_modified_item_bearer_mod_ind_s::to_json(json_writer& j) const j.end_obj(); } +// PSCellInformation ::= SEQUENCE +SRSASN_CODE ps_cell_info_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(ncgi.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ps_cell_info_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(ncgi.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ps_cell_info_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("nCGI"); + ncgi.to_json(j); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// SecondaryRATDataUsageReportItem ::= SEQUENCE +SRSASN_CODE secondary_rat_data_usage_report_item_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(pack_integer(bref, erab_id, (uint8_t)0u, (uint8_t)15u, true, true)); + HANDLE_CODE(secondary_rat_type.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, erabusage_report_list, 1, 2, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE secondary_rat_data_usage_report_item_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(unpack_integer(erab_id, bref, (uint8_t)0u, (uint8_t)15u, true, true)); + HANDLE_CODE(secondary_rat_type.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(erabusage_report_list, bref, 1, 2, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void secondary_rat_data_usage_report_item_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("e-RAB-ID", erab_id); + j.write_str("secondaryRATType", secondary_rat_type.to_string()); + j.start_array("e-RABUsageReportList"); + for (const auto& e1 : erabusage_report_list) { + e1.to_json(j); + } + j.end_array(); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + // E-RABNotToBeModifiedItemBearerModIndIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t erab_not_to_be_modified_item_bearer_mod_ind_ies_o::idx_to_id(uint32_t idx) { @@ -9252,6 +12325,133 @@ std::string erab_to_be_modified_item_bearer_mod_ind_ies_o::value_c::types_opts:: return convert_enum_idx(options, 1, value, "erab_to_be_modified_item_bearer_mod_ind_ies_o::value_c::types"); } +// SecondaryRATDataUsageReportItemIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +uint32_t secondary_rat_data_usage_report_item_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {265}; + return map_enum_number(options, 1, idx, "id"); +} +bool secondary_rat_data_usage_report_item_ies_o::is_id_valid(const uint32_t& id) +{ + return 265 == id; +} +crit_e secondary_rat_data_usage_report_item_ies_o::get_crit(const uint32_t& id) +{ + if (id == 265) { + return crit_e::ignore; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} +secondary_rat_data_usage_report_item_ies_o::value_c +secondary_rat_data_usage_report_item_ies_o::get_value(const uint32_t& id) +{ + value_c ret{}; + if (id != 265) { + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e secondary_rat_data_usage_report_item_ies_o::get_presence(const uint32_t& id) +{ + if (id == 265) { + return presence_e::mandatory; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} + +// Value ::= OPEN TYPE +void secondary_rat_data_usage_report_item_ies_o::value_c::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("SecondaryRATDataUsageReportItem"); + c.to_json(j); + j.end_obj(); +} +SRSASN_CODE secondary_rat_data_usage_report_item_ies_o::value_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE secondary_rat_data_usage_report_item_ies_o::value_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string secondary_rat_data_usage_report_item_ies_o::value_c::types_opts::to_string() const +{ + static const char* options[] = {"SecondaryRATDataUsageReportItem"}; + return convert_enum_idx(options, 1, value, "secondary_rat_data_usage_report_item_ies_o::value_c::types"); +} + +// UserLocationInformation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t user_location_info_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {288}; + return map_enum_number(options, 1, idx, "id"); +} +bool user_location_info_ext_ies_o::is_id_valid(const uint32_t& id) +{ + return 288 == id; +} +crit_e user_location_info_ext_ies_o::get_crit(const uint32_t& id) +{ + if (id == 288) { + return crit_e::ignore; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} +user_location_info_ext_ies_o::ext_c user_location_info_ext_ies_o::get_ext(const uint32_t& id) +{ + ext_c ret{}; + if (id != 288) { + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e user_location_info_ext_ies_o::get_presence(const uint32_t& id) +{ + if (id == 288) { + return presence_e::optional; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} + +// Extension ::= OPEN TYPE +void user_location_info_ext_ies_o::ext_c::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("PSCellInformation"); + c.to_json(j); + j.end_obj(); +} +SRSASN_CODE user_location_info_ext_ies_o::ext_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE user_location_info_ext_ies_o::ext_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string user_location_info_ext_ies_o::ext_c::types_opts::to_string() const +{ + static const char* options[] = {"PSCellInformation"}; + return convert_enum_idx(options, 1, value, "user_location_info_ext_ies_o::ext_c::types"); +} + +template struct asn1::s1ap::protocol_ie_single_container_s; + // TunnelInformation ::= SEQUENCE SRSASN_CODE tunnel_info_s::pack(bit_ref& bref) const { @@ -9299,15 +12499,55 @@ void tunnel_info_s::to_json(json_writer& j) const j.end_obj(); } +// UserLocationInformation ::= SEQUENCE +SRSASN_CODE user_location_info_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(eutran_cgi.pack(bref)); + HANDLE_CODE(tai.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE user_location_info_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(eutran_cgi.unpack(bref)); + HANDLE_CODE(tai.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); + } + + return SRSASN_SUCCESS; +} +void user_location_info_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("eutran-cgi"); + eutran_cgi.to_json(j); + j.write_fieldname("tai"); + tai.to_json(j); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + } + j.end_obj(); +} + // E-RABModificationIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t erab_mod_ind_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 199, 201, 226, 176}; - return map_enum_number(options, 6, idx, "id"); + static const uint32_t options[] = {0, 8, 199, 201, 226, 176, 264, 189}; + return map_enum_number(options, 8, idx, "id"); } bool erab_mod_ind_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 199, 201, 226, 176}; + static const uint32_t options[] = {0, 8, 199, 201, 226, 176, 264, 189}; for (const auto& o : options) { if (o == id) { return true; @@ -9330,6 +12570,10 @@ crit_e erab_mod_ind_ies_o::get_crit(const uint32_t& id) return crit_e::reject; case 176: return crit_e::ignore; + case 264: + return crit_e::ignore; + case 189: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -9357,6 +12601,12 @@ erab_mod_ind_ies_o::value_c erab_mod_ind_ies_o::get_value(const uint32_t& id) case 176: ret.set(value_c::types::tunnel_info_for_bbf); break; + case 264: + ret.set(value_c::types::secondary_rat_data_usage_report_list); + break; + case 189: + ret.set(value_c::types::user_location_info); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -9377,6 +12627,10 @@ presence_e erab_mod_ind_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 176: return presence_e::optional; + case 264: + return presence_e::optional; + case 189: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -9416,6 +12670,16 @@ tunnel_info_s& erab_mod_ind_ies_o::value_c::tunnel_info_for_bbf() assert_choice_type("TunnelInformation", type_.to_string(), "Value"); return c.get(); } +secondary_rat_data_usage_report_list_l& erab_mod_ind_ies_o::value_c::secondary_rat_data_usage_report_list() +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} +user_location_info_s& erab_mod_ind_ies_o::value_c::user_location_info() +{ + assert_choice_type("UserLocationInformation", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& erab_mod_ind_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -9448,6 +12712,16 @@ const tunnel_info_s& erab_mod_ind_ies_o::value_c::tunnel_info_for_bbf() const assert_choice_type("TunnelInformation", type_.to_string(), "Value"); return c.get(); } +const secondary_rat_data_usage_report_list_l& erab_mod_ind_ies_o::value_c::secondary_rat_data_usage_report_list() const +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} +const user_location_info_s& erab_mod_ind_ies_o::value_c::user_location_info() const +{ + assert_choice_type("UserLocationInformation", type_.to_string(), "Value"); + return c.get(); +} void erab_mod_ind_ies_o::value_c::destroy_() { switch (type_) { @@ -9463,6 +12737,12 @@ void erab_mod_ind_ies_o::value_c::destroy_() case types::tunnel_info_for_bbf: c.destroy(); break; + case types::secondary_rat_data_usage_report_list: + c.destroy(); + break; + case types::user_location_info: + c.destroy(); + break; default: break; } @@ -9488,6 +12768,12 @@ void erab_mod_ind_ies_o::value_c::set(types::options e) case types::tunnel_info_for_bbf: c.init(); break; + case types::secondary_rat_data_usage_report_list: + c.init(); + break; + case types::user_location_info: + c.init(); + break; case types::nulltype: break; default: @@ -9516,6 +12802,12 @@ erab_mod_ind_ies_o::value_c::value_c(const erab_mod_ind_ies_o::value_c& other) case types::tunnel_info_for_bbf: c.init(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.init(other.c.get()); + break; + case types::user_location_info: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -9547,6 +12839,12 @@ erab_mod_ind_ies_o::value_c& erab_mod_ind_ies_o::value_c::operator=(const erab_m case types::tunnel_info_for_bbf: c.set(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.set(other.c.get()); + break; + case types::user_location_info: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -9579,6 +12877,17 @@ void erab_mod_ind_ies_o::value_c::to_json(json_writer& j) const j.write_fieldname("TunnelInformation"); c.get().to_json(j); break; + case types::secondary_rat_data_usage_report_list: + j.start_array("SecondaryRATDataUsageReportList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; + case types::user_location_info: + j.write_fieldname("UserLocationInformation"); + c.get().to_json(j); + break; default: log_invalid_choice_id(type_, "erab_mod_ind_ies_o::value_c"); } @@ -9608,6 +12917,12 @@ SRSASN_CODE erab_mod_ind_ies_o::value_c::pack(bit_ref& bref) const case types::tunnel_info_for_bbf: HANDLE_CODE(c.get().pack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; + case types::user_location_info: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "erab_mod_ind_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -9638,6 +12953,12 @@ SRSASN_CODE erab_mod_ind_ies_o::value_c::unpack(cbit_ref& bref) case types::tunnel_info_for_bbf: HANDLE_CODE(c.get().unpack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; + case types::user_location_info: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "erab_mod_ind_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -9652,8 +12973,10 @@ std::string erab_mod_ind_ies_o::value_c::types_opts::to_string() const "E-RAB-IE-ContainerList{{E-RABToBeModifiedItemBearerModIndIEs}}", "E-RAB-IE-ContainerList{{E-RABNotToBeModifiedItemBearerModIndIEs}}", "CSGMembershipInfo", - "TunnelInformation"}; - return convert_enum_idx(options, 6, value, "erab_mod_ind_ies_o::value_c::types"); + "TunnelInformation", + "SecondaryRATDataUsageReportList", + "UserLocationInformation"}; + return convert_enum_idx(options, 8, value, "erab_mod_ind_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -9664,7 +12987,9 @@ erab_mod_ind_ies_container::erab_mod_ind_ies_container() : erab_to_be_modified_list_bearer_mod_ind(199, crit_e::reject), erab_not_to_be_modified_list_bearer_mod_ind(201, crit_e::reject), csg_membership_info(226, crit_e::reject), - tunnel_info_for_bbf(176, crit_e::ignore) + tunnel_info_for_bbf(176, crit_e::ignore), + secondary_rat_data_usage_report_list(264, crit_e::ignore), + user_location_info(189, crit_e::ignore) {} SRSASN_CODE erab_mod_ind_ies_container::pack(bit_ref& bref) const { @@ -9672,6 +12997,8 @@ SRSASN_CODE erab_mod_ind_ies_container::pack(bit_ref& bref) const nof_ies += erab_not_to_be_modified_list_bearer_mod_ind_present ? 1 : 0; nof_ies += csg_membership_info_present ? 1 : 0; nof_ies += tunnel_info_for_bbf_present ? 1 : 0; + nof_ies += secondary_rat_data_usage_report_list_present ? 1 : 0; + nof_ies += user_location_info_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -9686,6 +13013,12 @@ SRSASN_CODE erab_mod_ind_ies_container::pack(bit_ref& bref) const if (tunnel_info_for_bbf_present) { HANDLE_CODE(tunnel_info_for_bbf.pack(bref)); } + if (secondary_rat_data_usage_report_list_present) { + HANDLE_CODE(secondary_rat_data_usage_report_list.pack(bref)); + } + if (user_location_info_present) { + HANDLE_CODE(user_location_info.pack(bref)); + } return SRSASN_SUCCESS; } @@ -9736,6 +13069,18 @@ SRSASN_CODE erab_mod_ind_ies_container::unpack(cbit_ref& bref) tunnel_info_for_bbf.crit = c.crit; tunnel_info_for_bbf.value = c.value.tunnel_info_for_bbf(); break; + case 264: + secondary_rat_data_usage_report_list_present = true; + secondary_rat_data_usage_report_list.id = c.id; + secondary_rat_data_usage_report_list.crit = c.crit; + secondary_rat_data_usage_report_list.value = c.value.secondary_rat_data_usage_report_list(); + break; + case 189: + user_location_info_present = true; + user_location_info.id = c.id; + user_location_info.crit = c.crit; + user_location_info.value = c.value.user_location_info(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -9769,6 +13114,14 @@ void erab_mod_ind_ies_container::to_json(json_writer& j) const j.write_fieldname(""); tunnel_info_for_bbf.to_json(j); } + if (secondary_rat_data_usage_report_list_present) { + j.write_fieldname(""); + secondary_rat_data_usage_report_list.to_json(j); + } + if (user_location_info_present) { + j.write_fieldname(""); + user_location_info.to_json(j); + } j.end_obj(); } @@ -10088,8 +13441,258 @@ std::string erab_to_be_modified_item_bearer_mod_req_ies_o::value_c::types_opts:: return convert_enum_idx(options, 1, value, "erab_to_be_modified_item_bearer_mod_req_ies_o::value_c::types"); } +// UEAggregate-MaximumBitrates-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t ue_aggregate_maximum_bitrates_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {259, 260}; + return map_enum_number(options, 2, idx, "id"); +} +bool ue_aggregate_maximum_bitrates_ext_ies_o::is_id_valid(const uint32_t& id) +{ + static const uint32_t options[] = {259, 260}; + for (const auto& o : options) { + if (o == id) { + return true; + } + } + return false; +} +crit_e ue_aggregate_maximum_bitrates_ext_ies_o::get_crit(const uint32_t& id) +{ + switch (id) { + case 259: + return crit_e::ignore; + case 260: + return crit_e::ignore; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} +ue_aggregate_maximum_bitrates_ext_ies_o::ext_c ue_aggregate_maximum_bitrates_ext_ies_o::get_ext(const uint32_t& id) +{ + ext_c ret{}; + switch (id) { + case 259: + ret.set(ext_c::types::extended_u_eaggregate_maximum_bit_rate_dl); + break; + case 260: + ret.set(ext_c::types::extended_u_eaggregate_maximum_bit_rate_ul); + break; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e ue_aggregate_maximum_bitrates_ext_ies_o::get_presence(const uint32_t& id) +{ + switch (id) { + case 259: + return presence_e::optional; + case 260: + return presence_e::optional; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} + +// Extension ::= OPEN TYPE +uint64_t& ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::extended_u_eaggregate_maximum_bit_rate_dl() +{ + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); + return c.get(); +} +uint64_t& ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::extended_u_eaggregate_maximum_bit_rate_ul() +{ + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); + return c.get(); +} +const uint64_t& ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::extended_u_eaggregate_maximum_bit_rate_dl() const +{ + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); + return c.get(); +} +const uint64_t& ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::extended_u_eaggregate_maximum_bit_rate_ul() const +{ + assert_choice_type("INTEGER (10000000001..4000000000000,...)", type_.to_string(), "Extension"); + return c.get(); +} +void ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::destroy_() {} +void ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::set(types::options e) +{ + destroy_(); + type_ = e; +} +ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::ext_c(const ue_aggregate_maximum_bitrates_ext_ies_o::ext_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::extended_u_eaggregate_maximum_bit_rate_dl: + c.init(other.c.get()); + break; + case types::extended_u_eaggregate_maximum_bit_rate_ul: + c.init(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ue_aggregate_maximum_bitrates_ext_ies_o::ext_c"); + } +} +ue_aggregate_maximum_bitrates_ext_ies_o::ext_c& +ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::operator=(const ue_aggregate_maximum_bitrates_ext_ies_o::ext_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::extended_u_eaggregate_maximum_bit_rate_dl: + c.set(other.c.get()); + break; + case types::extended_u_eaggregate_maximum_bit_rate_ul: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ue_aggregate_maximum_bitrates_ext_ies_o::ext_c"); + } + + return *this; +} +void ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::extended_u_eaggregate_maximum_bit_rate_dl: + j.write_int("INTEGER (10000000001..4000000000000,...)", c.get()); + break; + case types::extended_u_eaggregate_maximum_bit_rate_ul: + j.write_int("INTEGER (10000000001..4000000000000,...)", c.get()); + break; + default: + log_invalid_choice_id(type_, "ue_aggregate_maximum_bitrates_ext_ies_o::ext_c"); + } + j.end_obj(); +} +SRSASN_CODE ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + switch (type_) { + case types::extended_u_eaggregate_maximum_bit_rate_dl: + HANDLE_CODE(pack_integer(bref, c.get(), (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); + break; + case types::extended_u_eaggregate_maximum_bit_rate_ul: + HANDLE_CODE(pack_integer(bref, c.get(), (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); + break; + default: + log_invalid_choice_id(type_, "ue_aggregate_maximum_bitrates_ext_ies_o::ext_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + switch (type_) { + case types::extended_u_eaggregate_maximum_bit_rate_dl: + HANDLE_CODE( + unpack_integer(c.get(), bref, (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); + break; + case types::extended_u_eaggregate_maximum_bit_rate_ul: + HANDLE_CODE( + unpack_integer(c.get(), bref, (uint64_t)10000000001u, (uint64_t)4000000000000u, true, true)); + break; + default: + log_invalid_choice_id(type_, "ue_aggregate_maximum_bitrates_ext_ies_o::ext_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +std::string ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::types_opts::to_string() const +{ + static const char* options[] = {"INTEGER (10000000001..4000000000000,...)", + "INTEGER (10000000001..4000000000000,...)"}; + return convert_enum_idx(options, 2, value, "ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::types"); +} + template struct asn1::s1ap::protocol_ie_single_container_s; +// SecondaryRATDataUsageRequest ::= ENUMERATED +std::string secondary_rat_data_usage_request_opts::to_string() const +{ + static const char* options[] = {"requested"}; + return convert_enum_idx(options, 1, value, "secondary_rat_data_usage_request_e"); +} + +template struct asn1::s1ap::protocol_ext_field_s; + +ue_aggregate_maximum_bitrates_ext_ies_container::ue_aggregate_maximum_bitrates_ext_ies_container() : + extended_u_eaggregate_maximum_bit_rate_dl(259, crit_e::ignore), + extended_u_eaggregate_maximum_bit_rate_ul(260, crit_e::ignore) +{} +SRSASN_CODE ue_aggregate_maximum_bitrates_ext_ies_container::pack(bit_ref& bref) const +{ + uint32_t nof_ies = 0; + nof_ies += extended_u_eaggregate_maximum_bit_rate_dl_present ? 1 : 0; + nof_ies += extended_u_eaggregate_maximum_bit_rate_ul_present ? 1 : 0; + pack_length(bref, nof_ies, 1u, 65535u, true); + + if (extended_u_eaggregate_maximum_bit_rate_dl_present) { + HANDLE_CODE(extended_u_eaggregate_maximum_bit_rate_dl.pack(bref)); + } + if (extended_u_eaggregate_maximum_bit_rate_ul_present) { + HANDLE_CODE(extended_u_eaggregate_maximum_bit_rate_ul.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_aggregate_maximum_bitrates_ext_ies_container::unpack(cbit_ref& bref) +{ + uint32_t nof_ies = 0; + unpack_length(nof_ies, bref, 1u, 65535u, true); + + for (; nof_ies > 0; --nof_ies) { + protocol_ext_field_s c; + HANDLE_CODE(c.unpack(bref)); + switch (c.id) { + case 259: + extended_u_eaggregate_maximum_bit_rate_dl_present = true; + extended_u_eaggregate_maximum_bit_rate_dl.id = c.id; + extended_u_eaggregate_maximum_bit_rate_dl.crit = c.crit; + extended_u_eaggregate_maximum_bit_rate_dl.ext = c.ext_value.extended_u_eaggregate_maximum_bit_rate_dl(); + break; + case 260: + extended_u_eaggregate_maximum_bit_rate_ul_present = true; + extended_u_eaggregate_maximum_bit_rate_ul.id = c.id; + extended_u_eaggregate_maximum_bit_rate_ul.crit = c.crit; + extended_u_eaggregate_maximum_bit_rate_ul.ext = c.ext_value.extended_u_eaggregate_maximum_bit_rate_ul(); + break; + default: + asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); + return SRSASN_ERROR_DECODE_FAIL; + } + } + + return SRSASN_SUCCESS; +} +void ue_aggregate_maximum_bitrates_ext_ies_container::to_json(json_writer& j) const +{ + j.start_obj(); + if (extended_u_eaggregate_maximum_bit_rate_dl_present) { + j.write_fieldname(""); + extended_u_eaggregate_maximum_bit_rate_dl.to_json(j); + } + if (extended_u_eaggregate_maximum_bit_rate_ul_present) { + j.write_fieldname(""); + extended_u_eaggregate_maximum_bit_rate_ul.to_json(j); + } + j.end_obj(); +} + // UEAggregateMaximumBitrate ::= SEQUENCE SRSASN_CODE ue_aggregate_maximum_bitrate_s::pack(bit_ref& bref) const { @@ -10132,12 +13735,12 @@ void ue_aggregate_maximum_bitrate_s::to_json(json_writer& j) const // E-RABModifyRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t erab_modify_request_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 66, 30}; - return map_enum_number(options, 4, idx, "id"); + static const uint32_t options[] = {0, 8, 66, 30, 268}; + return map_enum_number(options, 5, idx, "id"); } bool erab_modify_request_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 66, 30}; + static const uint32_t options[] = {0, 8, 66, 30, 268}; for (const auto& o : options) { if (o == id) { return true; @@ -10156,6 +13759,8 @@ crit_e erab_modify_request_ies_o::get_crit(const uint32_t& id) return crit_e::reject; case 30: return crit_e::reject; + case 268: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -10177,6 +13782,9 @@ erab_modify_request_ies_o::value_c erab_modify_request_ies_o::get_value(const ui case 30: ret.set(value_c::types::erab_to_be_modified_list_bearer_mod_req); break; + case 268: + ret.set(value_c::types::secondary_rat_data_usage_request); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -10193,6 +13801,8 @@ presence_e erab_modify_request_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 30: return presence_e::mandatory; + case 268: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -10220,6 +13830,11 @@ erab_to_be_modified_list_bearer_mod_req_l& erab_modify_request_ies_o::value_c::e assert_choice_type("E-RABToBeModifiedListBearerModReq", type_.to_string(), "Value"); return c.get(); } +secondary_rat_data_usage_request_e& erab_modify_request_ies_o::value_c::secondary_rat_data_usage_request() +{ + assert_choice_type("SecondaryRATDataUsageRequest", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& erab_modify_request_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -10241,6 +13856,11 @@ erab_modify_request_ies_o::value_c::erab_to_be_modified_list_bearer_mod_req() co assert_choice_type("E-RABToBeModifiedListBearerModReq", type_.to_string(), "Value"); return c.get(); } +const secondary_rat_data_usage_request_e& erab_modify_request_ies_o::value_c::secondary_rat_data_usage_request() const +{ + assert_choice_type("SecondaryRATDataUsageRequest", type_.to_string(), "Value"); + return c.get(); +} void erab_modify_request_ies_o::value_c::destroy_() { switch (type_) { @@ -10269,6 +13889,8 @@ void erab_modify_request_ies_o::value_c::set(types::options e) case types::erab_to_be_modified_list_bearer_mod_req: c.init(); break; + case types::secondary_rat_data_usage_request: + break; case types::nulltype: break; default: @@ -10291,6 +13913,9 @@ erab_modify_request_ies_o::value_c::value_c(const erab_modify_request_ies_o::val case types::erab_to_be_modified_list_bearer_mod_req: c.init(other.c.get()); break; + case types::secondary_rat_data_usage_request: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -10317,6 +13942,9 @@ erab_modify_request_ies_o::value_c::operator=(const erab_modify_request_ies_o::v case types::erab_to_be_modified_list_bearer_mod_req: c.set(other.c.get()); break; + case types::secondary_rat_data_usage_request: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -10346,6 +13974,9 @@ void erab_modify_request_ies_o::value_c::to_json(json_writer& j) const } j.end_array(); break; + case types::secondary_rat_data_usage_request: + j.write_str("SecondaryRATDataUsageRequest", "requested"); + break; default: log_invalid_choice_id(type_, "erab_modify_request_ies_o::value_c"); } @@ -10367,6 +13998,9 @@ SRSASN_CODE erab_modify_request_ies_o::value_c::pack(bit_ref& bref) const case types::erab_to_be_modified_list_bearer_mod_req: HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); break; + case types::secondary_rat_data_usage_request: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "erab_modify_request_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -10389,6 +14023,9 @@ SRSASN_CODE erab_modify_request_ies_o::value_c::unpack(cbit_ref& bref) case types::erab_to_be_modified_list_bearer_mod_req: HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); break; + case types::secondary_rat_data_usage_request: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "erab_modify_request_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -10401,8 +14038,9 @@ std::string erab_modify_request_ies_o::value_c::types_opts::to_string() const static const char* options[] = {"INTEGER (0..4294967295)", "INTEGER (0..16777215)", "UEAggregateMaximumBitrate", - "E-RABToBeModifiedListBearerModReq"}; - return convert_enum_idx(options, 4, value, "erab_modify_request_ies_o::value_c::types"); + "E-RABToBeModifiedListBearerModReq", + "SecondaryRATDataUsageRequest"}; + return convert_enum_idx(options, 5, value, "erab_modify_request_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -10411,12 +14049,14 @@ erab_modify_request_ies_container::erab_modify_request_ies_container() : mme_ue_s1ap_id(0, crit_e::reject), enb_ue_s1ap_id(8, crit_e::reject), ueaggregate_maximum_bitrate(66, crit_e::reject), - erab_to_be_modified_list_bearer_mod_req(30, crit_e::reject) + erab_to_be_modified_list_bearer_mod_req(30, crit_e::reject), + secondary_rat_data_usage_request(268, crit_e::ignore) {} SRSASN_CODE erab_modify_request_ies_container::pack(bit_ref& bref) const { uint32_t nof_ies = 3; nof_ies += ueaggregate_maximum_bitrate_present ? 1 : 0; + nof_ies += secondary_rat_data_usage_request_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -10425,6 +14065,9 @@ SRSASN_CODE erab_modify_request_ies_container::pack(bit_ref& bref) const HANDLE_CODE(ueaggregate_maximum_bitrate.pack(bref)); } HANDLE_CODE(erab_to_be_modified_list_bearer_mod_req.pack(bref)); + if (secondary_rat_data_usage_request_present) { + HANDLE_CODE(secondary_rat_data_usage_request.pack(bref)); + } return SRSASN_SUCCESS; } @@ -10463,6 +14106,12 @@ SRSASN_CODE erab_modify_request_ies_container::unpack(cbit_ref& bref) erab_to_be_modified_list_bearer_mod_req.crit = c.crit; erab_to_be_modified_list_bearer_mod_req.value = c.value.erab_to_be_modified_list_bearer_mod_req(); break; + case 268: + secondary_rat_data_usage_request_present = true; + secondary_rat_data_usage_request.id = c.id; + secondary_rat_data_usage_request.crit = c.crit; + secondary_rat_data_usage_request.value = c.value.secondary_rat_data_usage_request(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -10488,6 +14137,10 @@ void erab_modify_request_ies_container::to_json(json_writer& j) const } j.write_fieldname(""); erab_to_be_modified_list_bearer_mod_req.to_json(j); + if (secondary_rat_data_usage_request_present) { + j.write_fieldname(""); + secondary_rat_data_usage_request.to_json(j); + } j.end_obj(); } @@ -10517,12 +14170,12 @@ void erab_modify_request_s::to_json(json_writer& j) const // E-RABModifyResponseIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t erab_modify_resp_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 31, 32, 58}; - return map_enum_number(options, 5, idx, "id"); + static const uint32_t options[] = {0, 8, 31, 32, 58, 264}; + return map_enum_number(options, 6, idx, "id"); } bool erab_modify_resp_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 31, 32, 58}; + static const uint32_t options[] = {0, 8, 31, 32, 58, 264}; for (const auto& o : options) { if (o == id) { return true; @@ -10543,6 +14196,8 @@ crit_e erab_modify_resp_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 58: return crit_e::ignore; + case 264: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -10567,6 +14222,9 @@ erab_modify_resp_ies_o::value_c erab_modify_resp_ies_o::get_value(const uint32_t case 58: ret.set(value_c::types::crit_diagnostics); break; + case 264: + ret.set(value_c::types::secondary_rat_data_usage_report_list); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -10585,6 +14243,8 @@ presence_e erab_modify_resp_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 58: return presence_e::optional; + case 264: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -10617,6 +14277,11 @@ crit_diagnostics_s& erab_modify_resp_ies_o::value_c::crit_diagnostics() assert_choice_type("CriticalityDiagnostics", type_.to_string(), "Value"); return c.get(); } +secondary_rat_data_usage_report_list_l& erab_modify_resp_ies_o::value_c::secondary_rat_data_usage_report_list() +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& erab_modify_resp_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -10642,6 +14307,12 @@ const crit_diagnostics_s& erab_modify_resp_ies_o::value_c::crit_diagnostics() co assert_choice_type("CriticalityDiagnostics", type_.to_string(), "Value"); return c.get(); } +const secondary_rat_data_usage_report_list_l& +erab_modify_resp_ies_o::value_c::secondary_rat_data_usage_report_list() const +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} void erab_modify_resp_ies_o::value_c::destroy_() { switch (type_) { @@ -10654,6 +14325,9 @@ void erab_modify_resp_ies_o::value_c::destroy_() case types::crit_diagnostics: c.destroy(); break; + case types::secondary_rat_data_usage_report_list: + c.destroy(); + break; default: break; } @@ -10676,6 +14350,9 @@ void erab_modify_resp_ies_o::value_c::set(types::options e) case types::crit_diagnostics: c.init(); break; + case types::secondary_rat_data_usage_report_list: + c.init(); + break; case types::nulltype: break; default: @@ -10701,6 +14378,9 @@ erab_modify_resp_ies_o::value_c::value_c(const erab_modify_resp_ies_o::value_c& case types::crit_diagnostics: c.init(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -10730,6 +14410,9 @@ erab_modify_resp_ies_o::value_c::operator=(const erab_modify_resp_ies_o::value_c case types::crit_diagnostics: c.set(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -10766,6 +14449,13 @@ void erab_modify_resp_ies_o::value_c::to_json(json_writer& j) const j.write_fieldname("CriticalityDiagnostics"); c.get().to_json(j); break; + case types::secondary_rat_data_usage_report_list: + j.start_array("SecondaryRATDataUsageReportList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; default: log_invalid_choice_id(type_, "erab_modify_resp_ies_o::value_c"); } @@ -10790,6 +14480,9 @@ SRSASN_CODE erab_modify_resp_ies_o::value_c::pack(bit_ref& bref) const case types::crit_diagnostics: HANDLE_CODE(c.get().pack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; default: log_invalid_choice_id(type_, "erab_modify_resp_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -10815,6 +14508,9 @@ SRSASN_CODE erab_modify_resp_ies_o::value_c::unpack(cbit_ref& bref) case types::crit_diagnostics: HANDLE_CODE(c.get().unpack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; default: log_invalid_choice_id(type_, "erab_modify_resp_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -10828,8 +14524,9 @@ std::string erab_modify_resp_ies_o::value_c::types_opts::to_string() const "INTEGER (0..16777215)", "E-RABModifyListBearerModRes", "E-RABList", - "CriticalityDiagnostics"}; - return convert_enum_idx(options, 5, value, "erab_modify_resp_ies_o::value_c::types"); + "CriticalityDiagnostics", + "SecondaryRATDataUsageReportList"}; + return convert_enum_idx(options, 6, value, "erab_modify_resp_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -10839,7 +14536,8 @@ erab_modify_resp_ies_container::erab_modify_resp_ies_container() : enb_ue_s1ap_id(8, crit_e::ignore), erab_modify_list_bearer_mod_res(31, crit_e::ignore), erab_failed_to_modify_list(32, crit_e::ignore), - crit_diagnostics(58, crit_e::ignore) + crit_diagnostics(58, crit_e::ignore), + secondary_rat_data_usage_report_list(264, crit_e::ignore) {} SRSASN_CODE erab_modify_resp_ies_container::pack(bit_ref& bref) const { @@ -10847,6 +14545,7 @@ SRSASN_CODE erab_modify_resp_ies_container::pack(bit_ref& bref) const nof_ies += erab_modify_list_bearer_mod_res_present ? 1 : 0; nof_ies += erab_failed_to_modify_list_present ? 1 : 0; nof_ies += crit_diagnostics_present ? 1 : 0; + nof_ies += secondary_rat_data_usage_report_list_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -10860,6 +14559,9 @@ SRSASN_CODE erab_modify_resp_ies_container::pack(bit_ref& bref) const if (crit_diagnostics_present) { HANDLE_CODE(crit_diagnostics.pack(bref)); } + if (secondary_rat_data_usage_report_list_present) { + HANDLE_CODE(secondary_rat_data_usage_report_list.pack(bref)); + } return SRSASN_SUCCESS; } @@ -10904,6 +14606,12 @@ SRSASN_CODE erab_modify_resp_ies_container::unpack(cbit_ref& bref) crit_diagnostics.crit = c.crit; crit_diagnostics.value = c.value.crit_diagnostics(); break; + case 264: + secondary_rat_data_usage_report_list_present = true; + secondary_rat_data_usage_report_list.id = c.id; + secondary_rat_data_usage_report_list.crit = c.crit; + secondary_rat_data_usage_report_list.value = c.value.secondary_rat_data_usage_report_list(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -10935,6 +14643,10 @@ void erab_modify_resp_ies_container::to_json(json_writer& j) const j.write_fieldname(""); crit_diagnostics.to_json(j); } + if (secondary_rat_data_usage_report_list_present) { + j.write_fieldname(""); + secondary_rat_data_usage_report_list.to_json(j); + } j.end_obj(); } @@ -11396,56 +15108,15 @@ void erab_release_cmd_s::to_json(json_writer& j) const j.end_obj(); } -// UserLocationInformation ::= SEQUENCE -SRSASN_CODE user_location_info_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(ie_exts_present, 1)); - - HANDLE_CODE(eutran_cgi.pack(bref)); - HANDLE_CODE(tai.pack(bref)); - if (ie_exts_present) { - HANDLE_CODE(ie_exts.pack(bref)); - } - - return SRSASN_SUCCESS; -} -SRSASN_CODE user_location_info_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - - HANDLE_CODE(eutran_cgi.unpack(bref)); - HANDLE_CODE(tai.unpack(bref)); - if (ie_exts_present) { - HANDLE_CODE(ie_exts.unpack(bref)); - } - - return SRSASN_SUCCESS; -} -void user_location_info_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_fieldname("eutran-cgi"); - eutran_cgi.to_json(j); - j.write_fieldname("tai"); - tai.to_json(j); - if (ie_exts_present) { - j.write_fieldname("iE-Extensions"); - ie_exts.to_json(j); - } - j.end_obj(); -} - // E-RABReleaseIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t erab_release_ind_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 110, 189}; - return map_enum_number(options, 4, idx, "id"); + static const uint32_t options[] = {0, 8, 110, 189, 264}; + return map_enum_number(options, 5, idx, "id"); } bool erab_release_ind_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 110, 189}; + static const uint32_t options[] = {0, 8, 110, 189, 264}; for (const auto& o : options) { if (o == id) { return true; @@ -11464,6 +15135,8 @@ crit_e erab_release_ind_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 189: return crit_e::ignore; + case 264: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -11485,6 +15158,9 @@ erab_release_ind_ies_o::value_c erab_release_ind_ies_o::get_value(const uint32_t case 189: ret.set(value_c::types::user_location_info); break; + case 264: + ret.set(value_c::types::secondary_rat_data_usage_report_list); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -11501,6 +15177,8 @@ presence_e erab_release_ind_ies_o::get_presence(const uint32_t& id) return presence_e::mandatory; case 189: return presence_e::optional; + case 264: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -11528,6 +15206,11 @@ user_location_info_s& erab_release_ind_ies_o::value_c::user_location_info() assert_choice_type("UserLocationInformation", type_.to_string(), "Value"); return c.get(); } +secondary_rat_data_usage_report_list_l& erab_release_ind_ies_o::value_c::secondary_rat_data_usage_report_list() +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& erab_release_ind_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -11548,6 +15231,12 @@ const user_location_info_s& erab_release_ind_ies_o::value_c::user_location_info( assert_choice_type("UserLocationInformation", type_.to_string(), "Value"); return c.get(); } +const secondary_rat_data_usage_report_list_l& +erab_release_ind_ies_o::value_c::secondary_rat_data_usage_report_list() const +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} void erab_release_ind_ies_o::value_c::destroy_() { switch (type_) { @@ -11557,6 +15246,9 @@ void erab_release_ind_ies_o::value_c::destroy_() case types::user_location_info: c.destroy(); break; + case types::secondary_rat_data_usage_report_list: + c.destroy(); + break; default: break; } @@ -11576,6 +15268,9 @@ void erab_release_ind_ies_o::value_c::set(types::options e) case types::user_location_info: c.init(); break; + case types::secondary_rat_data_usage_report_list: + c.init(); + break; case types::nulltype: break; default: @@ -11598,6 +15293,9 @@ erab_release_ind_ies_o::value_c::value_c(const erab_release_ind_ies_o::value_c& case types::user_location_info: c.init(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -11624,6 +15322,9 @@ erab_release_ind_ies_o::value_c::operator=(const erab_release_ind_ies_o::value_c case types::user_location_info: c.set(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -11653,6 +15354,13 @@ void erab_release_ind_ies_o::value_c::to_json(json_writer& j) const j.write_fieldname("UserLocationInformation"); c.get().to_json(j); break; + case types::secondary_rat_data_usage_report_list: + j.start_array("SecondaryRATDataUsageReportList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; default: log_invalid_choice_id(type_, "erab_release_ind_ies_o::value_c"); } @@ -11674,6 +15382,9 @@ SRSASN_CODE erab_release_ind_ies_o::value_c::pack(bit_ref& bref) const case types::user_location_info: HANDLE_CODE(c.get().pack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; default: log_invalid_choice_id(type_, "erab_release_ind_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -11696,6 +15407,9 @@ SRSASN_CODE erab_release_ind_ies_o::value_c::unpack(cbit_ref& bref) case types::user_location_info: HANDLE_CODE(c.get().unpack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; default: log_invalid_choice_id(type_, "erab_release_ind_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -11705,9 +15419,12 @@ SRSASN_CODE erab_release_ind_ies_o::value_c::unpack(cbit_ref& bref) std::string erab_release_ind_ies_o::value_c::types_opts::to_string() const { - static const char* options[] = { - "INTEGER (0..4294967295)", "INTEGER (0..16777215)", "E-RABList", "UserLocationInformation"}; - return convert_enum_idx(options, 4, value, "erab_release_ind_ies_o::value_c::types"); + static const char* options[] = {"INTEGER (0..4294967295)", + "INTEGER (0..16777215)", + "E-RABList", + "UserLocationInformation", + "SecondaryRATDataUsageReportList"}; + return convert_enum_idx(options, 5, value, "erab_release_ind_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -11716,12 +15433,14 @@ erab_release_ind_ies_container::erab_release_ind_ies_container() : mme_ue_s1ap_id(0, crit_e::reject), enb_ue_s1ap_id(8, crit_e::reject), erab_released_list(110, crit_e::ignore), - user_location_info(189, crit_e::ignore) + user_location_info(189, crit_e::ignore), + secondary_rat_data_usage_report_list(264, crit_e::ignore) {} SRSASN_CODE erab_release_ind_ies_container::pack(bit_ref& bref) const { uint32_t nof_ies = 3; nof_ies += user_location_info_present ? 1 : 0; + nof_ies += secondary_rat_data_usage_report_list_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -11730,6 +15449,9 @@ SRSASN_CODE erab_release_ind_ies_container::pack(bit_ref& bref) const if (user_location_info_present) { HANDLE_CODE(user_location_info.pack(bref)); } + if (secondary_rat_data_usage_report_list_present) { + HANDLE_CODE(secondary_rat_data_usage_report_list.pack(bref)); + } return SRSASN_SUCCESS; } @@ -11768,6 +15490,12 @@ SRSASN_CODE erab_release_ind_ies_container::unpack(cbit_ref& bref) user_location_info.crit = c.crit; user_location_info.value = c.value.user_location_info(); break; + case 264: + secondary_rat_data_usage_report_list_present = true; + secondary_rat_data_usage_report_list.id = c.id; + secondary_rat_data_usage_report_list.crit = c.crit; + secondary_rat_data_usage_report_list.value = c.value.secondary_rat_data_usage_report_list(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -11793,6 +15521,10 @@ void erab_release_ind_ies_container::to_json(json_writer& j) const j.write_fieldname(""); user_location_info.to_json(j); } + if (secondary_rat_data_usage_report_list_present) { + j.write_fieldname(""); + secondary_rat_data_usage_report_list.to_json(j); + } j.end_obj(); } @@ -11922,12 +15654,12 @@ template struct asn1::s1ap::protocol_ie_single_container_s(); } +secondary_rat_data_usage_report_list_l& erab_release_resp_ies_o::value_c::secondary_rat_data_usage_report_list() +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& erab_release_resp_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -12064,6 +15808,12 @@ const user_location_info_s& erab_release_resp_ies_o::value_c::user_location_info assert_choice_type("UserLocationInformation", type_.to_string(), "Value"); return c.get(); } +const secondary_rat_data_usage_report_list_l& +erab_release_resp_ies_o::value_c::secondary_rat_data_usage_report_list() const +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} void erab_release_resp_ies_o::value_c::destroy_() { switch (type_) { @@ -12079,6 +15829,9 @@ void erab_release_resp_ies_o::value_c::destroy_() case types::user_location_info: c.destroy(); break; + case types::secondary_rat_data_usage_report_list: + c.destroy(); + break; default: break; } @@ -12104,6 +15857,9 @@ void erab_release_resp_ies_o::value_c::set(types::options e) case types::user_location_info: c.init(); break; + case types::secondary_rat_data_usage_report_list: + c.init(); + break; case types::nulltype: break; default: @@ -12132,6 +15888,9 @@ erab_release_resp_ies_o::value_c::value_c(const erab_release_resp_ies_o::value_c case types::user_location_info: c.init(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -12164,6 +15923,9 @@ erab_release_resp_ies_o::value_c::operator=(const erab_release_resp_ies_o::value case types::user_location_info: c.set(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -12204,6 +15966,13 @@ void erab_release_resp_ies_o::value_c::to_json(json_writer& j) const j.write_fieldname("UserLocationInformation"); c.get().to_json(j); break; + case types::secondary_rat_data_usage_report_list: + j.start_array("SecondaryRATDataUsageReportList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; default: log_invalid_choice_id(type_, "erab_release_resp_ies_o::value_c"); } @@ -12231,6 +16000,9 @@ SRSASN_CODE erab_release_resp_ies_o::value_c::pack(bit_ref& bref) const case types::user_location_info: HANDLE_CODE(c.get().pack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; default: log_invalid_choice_id(type_, "erab_release_resp_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -12259,6 +16031,9 @@ SRSASN_CODE erab_release_resp_ies_o::value_c::unpack(cbit_ref& bref) case types::user_location_info: HANDLE_CODE(c.get().unpack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; default: log_invalid_choice_id(type_, "erab_release_resp_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -12273,8 +16048,9 @@ std::string erab_release_resp_ies_o::value_c::types_opts::to_string() const "E-RABReleaseListBearerRelComp", "E-RABList", "CriticalityDiagnostics", - "UserLocationInformation"}; - return convert_enum_idx(options, 6, value, "erab_release_resp_ies_o::value_c::types"); + "UserLocationInformation", + "SecondaryRATDataUsageReportList"}; + return convert_enum_idx(options, 7, value, "erab_release_resp_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -12285,7 +16061,8 @@ erab_release_resp_ies_container::erab_release_resp_ies_container() : erab_release_list_bearer_rel_comp(69, crit_e::ignore), erab_failed_to_release_list(34, crit_e::ignore), crit_diagnostics(58, crit_e::ignore), - user_location_info(189, crit_e::ignore) + user_location_info(189, crit_e::ignore), + secondary_rat_data_usage_report_list(264, crit_e::ignore) {} SRSASN_CODE erab_release_resp_ies_container::pack(bit_ref& bref) const { @@ -12294,6 +16071,7 @@ SRSASN_CODE erab_release_resp_ies_container::pack(bit_ref& bref) const nof_ies += erab_failed_to_release_list_present ? 1 : 0; nof_ies += crit_diagnostics_present ? 1 : 0; nof_ies += user_location_info_present ? 1 : 0; + nof_ies += secondary_rat_data_usage_report_list_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -12310,6 +16088,9 @@ SRSASN_CODE erab_release_resp_ies_container::pack(bit_ref& bref) const if (user_location_info_present) { HANDLE_CODE(user_location_info.pack(bref)); } + if (secondary_rat_data_usage_report_list_present) { + HANDLE_CODE(secondary_rat_data_usage_report_list.pack(bref)); + } return SRSASN_SUCCESS; } @@ -12360,6 +16141,12 @@ SRSASN_CODE erab_release_resp_ies_container::unpack(cbit_ref& bref) user_location_info.crit = c.crit; user_location_info.value = c.value.user_location_info(); break; + case 264: + secondary_rat_data_usage_report_list_present = true; + secondary_rat_data_usage_report_list.id = c.id; + secondary_rat_data_usage_report_list.crit = c.crit; + secondary_rat_data_usage_report_list.value = c.value.secondary_rat_data_usage_report_list(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -12395,6 +16182,10 @@ void erab_release_resp_ies_container::to_json(json_writer& j) const j.write_fieldname(""); user_location_info.to_json(j); } + if (secondary_rat_data_usage_report_list_present) { + j.write_fieldname(""); + secondary_rat_data_usage_report_list.to_json(j); + } j.end_obj(); } @@ -14870,88 +18661,268 @@ presence_e erab_to_be_switched_ul_item_ies_o::get_presence(const uint32_t& id) void erab_to_be_switched_ul_item_ies_o::value_c::to_json(json_writer& j) const { j.start_obj(); - j.write_fieldname("E-RABToBeSwitchedULItem"); - c.to_json(j); + j.write_fieldname("E-RABToBeSwitchedULItem"); + c.to_json(j); + j.end_obj(); +} +SRSASN_CODE erab_to_be_switched_ul_item_ies_o::value_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE erab_to_be_switched_ul_item_ies_o::value_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string erab_to_be_switched_ul_item_ies_o::value_c::types_opts::to_string() const +{ + static const char* options[] = {"E-RABToBeSwitchedULItem"}; + return convert_enum_idx(options, 1, value, "erab_to_be_switched_ul_item_ies_o::value_c::types"); +} + +// EHRPDMultiSectorLoadReportingResponseItem ::= SEQUENCE +SRSASN_CODE ehrpd_multi_sector_load_report_resp_item_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(ehrpd_sector_id.pack(bref)); + HANDLE_CODE(ehrpd_sector_load_report_resp.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ehrpd_multi_sector_load_report_resp_item_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(ehrpd_sector_id.unpack(bref)); + HANDLE_CODE(ehrpd_sector_load_report_resp.unpack(bref)); + + return SRSASN_SUCCESS; +} +void ehrpd_multi_sector_load_report_resp_item_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("eHRPD-Sector-ID", ehrpd_sector_id.to_string()); + j.write_fieldname("eHRPDSectorLoadReportingResponse"); + ehrpd_sector_load_report_resp.to_json(j); + j.end_obj(); +} + +// ENBX2ExtTLA ::= SEQUENCE +SRSASN_CODE enbx2_ext_tla_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ipsec_tla_present, 1)); + HANDLE_CODE(bref.pack(gtptl_aa_present, 1)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + if (ipsec_tla_present) { + HANDLE_CODE(ipsec_tla.pack(bref)); + } + if (gtptl_aa_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, gtptl_aa, 1, 16, true)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE enbx2_ext_tla_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ipsec_tla_present, 1)); + HANDLE_CODE(bref.unpack(gtptl_aa_present, 1)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + if (ipsec_tla_present) { + HANDLE_CODE(ipsec_tla.unpack(bref)); + } + if (gtptl_aa_present) { + HANDLE_CODE(unpack_dyn_seq_of(gtptl_aa, bref, 1, 16, true)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void enbx2_ext_tla_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ipsec_tla_present) { + j.write_str("iPsecTLA", ipsec_tla.to_string()); + } + if (gtptl_aa_present) { + j.start_array("gTPTLAa"); + for (const auto& e1 : gtptl_aa) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// MutingAvailabilityIndication ::= ENUMERATED +std::string muting_availability_ind_opts::to_string() const +{ + static const char* options[] = {"available", "unavailable"}; + return convert_enum_idx(options, 2, value, "muting_availability_ind_e"); +} + +// RLFReportInformation ::= SEQUENCE +SRSASN_CODE rlf_report_info_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ue_rlf_report_container_for_extended_bands_present, 1)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(ue_rlf_report_container.pack(bref)); + if (ue_rlf_report_container_for_extended_bands_present) { + HANDLE_CODE(ue_rlf_report_container_for_extended_bands.pack(bref)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rlf_report_info_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ue_rlf_report_container_for_extended_bands_present, 1)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(ue_rlf_report_container.unpack(bref)); + if (ue_rlf_report_container_for_extended_bands_present) { + HANDLE_CODE(ue_rlf_report_container_for_extended_bands.unpack(bref)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rlf_report_info_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("uE-RLF-Report-Container", ue_rlf_report_container.to_string()); + if (ue_rlf_report_container_for_extended_bands_present) { + j.write_str("uE-RLF-Report-Container-for-extended-bands", ue_rlf_report_container_for_extended_bands.to_string()); + } + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// SynchronisationStatus ::= ENUMERATED +std::string synchronisation_status_opts::to_string() const +{ + static const char* options[] = {"synchronous", "asynchronous"}; + return convert_enum_idx(options, 2, value, "synchronisation_status_e"); +} + +// TimeSynchronisationInfo-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t time_synchronisation_info_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {207}; + return map_enum_number(options, 1, idx, "id"); +} +bool time_synchronisation_info_ext_ies_o::is_id_valid(const uint32_t& id) +{ + return 207 == id; +} +crit_e time_synchronisation_info_ext_ies_o::get_crit(const uint32_t& id) +{ + if (id == 207) { + return crit_e::ignore; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} +time_synchronisation_info_ext_ies_o::ext_c time_synchronisation_info_ext_ies_o::get_ext(const uint32_t& id) +{ + ext_c ret{}; + if (id != 207) { + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e time_synchronisation_info_ext_ies_o::get_presence(const uint32_t& id) +{ + if (id == 207) { + return presence_e::optional; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} + +// Extension ::= OPEN TYPE +void time_synchronisation_info_ext_ies_o::ext_c::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("MutingAvailabilityIndication", c.to_string()); j.end_obj(); } -SRSASN_CODE erab_to_be_switched_ul_item_ies_o::value_c::pack(bit_ref& bref) const +SRSASN_CODE time_synchronisation_info_ext_ies_o::ext_c::pack(bit_ref& bref) const { varlength_field_pack_guard varlen_scope(bref, true); HANDLE_CODE(c.pack(bref)); return SRSASN_SUCCESS; } -SRSASN_CODE erab_to_be_switched_ul_item_ies_o::value_c::unpack(cbit_ref& bref) +SRSASN_CODE time_synchronisation_info_ext_ies_o::ext_c::unpack(cbit_ref& bref) { varlength_field_unpack_guard varlen_scope(bref, true); HANDLE_CODE(c.unpack(bref)); return SRSASN_SUCCESS; } -std::string erab_to_be_switched_ul_item_ies_o::value_c::types_opts::to_string() const -{ - static const char* options[] = {"E-RABToBeSwitchedULItem"}; - return convert_enum_idx(options, 1, value, "erab_to_be_switched_ul_item_ies_o::value_c::types"); -} - -// EHRPDMultiSectorLoadReportingResponseItem ::= SEQUENCE -SRSASN_CODE ehrpd_multi_sector_load_report_resp_item_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(ehrpd_sector_id.pack(bref)); - HANDLE_CODE(ehrpd_sector_load_report_resp.pack(bref)); - - return SRSASN_SUCCESS; -} -SRSASN_CODE ehrpd_multi_sector_load_report_resp_item_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(ehrpd_sector_id.unpack(bref)); - HANDLE_CODE(ehrpd_sector_load_report_resp.unpack(bref)); - - return SRSASN_SUCCESS; -} -void ehrpd_multi_sector_load_report_resp_item_s::to_json(json_writer& j) const +std::string time_synchronisation_info_ext_ies_o::ext_c::types_opts::to_string() const { - j.start_obj(); - j.write_str("eHRPD-Sector-ID", ehrpd_sector_id.to_string()); - j.write_fieldname("eHRPDSectorLoadReportingResponse"); - ehrpd_sector_load_report_resp.to_json(j); - j.end_obj(); + static const char* options[] = {"MutingAvailabilityIndication"}; + return convert_enum_idx(options, 1, value, "time_synchronisation_info_ext_ies_o::ext_c::types"); } -// ENB-StatusTransfer-TransparentContainer ::= SEQUENCE -SRSASN_CODE enb_status_transfer_transparent_container_s::pack(bit_ref& bref) const +// Global-en-gNB-ID ::= SEQUENCE +SRSASN_CODE global_en_g_nb_id_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(pack_dyn_seq_of(bref, bearers_subject_to_status_transfer_list, 1, 256, true)); + HANDLE_CODE(plm_nid.pack(bref)); + HANDLE_CODE(en_g_nb_id.pack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE enb_status_transfer_transparent_container_s::unpack(cbit_ref& bref) +SRSASN_CODE global_en_g_nb_id_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(unpack_dyn_seq_of(bearers_subject_to_status_transfer_list, bref, 1, 256, true)); + HANDLE_CODE(plm_nid.unpack(bref)); + HANDLE_CODE(en_g_nb_id.unpack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void enb_status_transfer_transparent_container_s::to_json(json_writer& j) const +void global_en_g_nb_id_s::to_json(json_writer& j) const { j.start_obj(); - j.start_array("bearers-SubjectToStatusTransferList"); - for (const auto& e1 : bearers_subject_to_status_transfer_list) { - e1.to_json(j); - } - j.end_array(); + j.write_str("pLMNidentity", plm_nid.to_string()); + j.write_str("en-gNB-ID", en_g_nb_id.to_string()); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); ie_exts.to_json(j); @@ -14959,38 +18930,46 @@ void enb_status_transfer_transparent_container_s::to_json(json_writer& j) const j.end_obj(); } -// S-TMSI ::= SEQUENCE -SRSASN_CODE s_tmsi_s::pack(bit_ref& bref) const +// MutingPatternInformation ::= SEQUENCE +SRSASN_CODE muting_pattern_info_s::pack(bit_ref& bref) const { bref.pack(ext, 1); + HANDLE_CODE(bref.pack(muting_pattern_offset_present, 1)); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(mmec.pack(bref)); - HANDLE_CODE(m_tmsi.pack(bref)); + HANDLE_CODE(muting_pattern_period.pack(bref)); + if (muting_pattern_offset_present) { + HANDLE_CODE(pack_integer(bref, muting_pattern_offset, (uint16_t)0u, (uint16_t)10239u, true, true)); + } if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE s_tmsi_s::unpack(cbit_ref& bref) +SRSASN_CODE muting_pattern_info_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(muting_pattern_offset_present, 1)); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(mmec.unpack(bref)); - HANDLE_CODE(m_tmsi.unpack(bref)); + HANDLE_CODE(muting_pattern_period.unpack(bref)); + if (muting_pattern_offset_present) { + HANDLE_CODE(unpack_integer(muting_pattern_offset, bref, (uint16_t)0u, (uint16_t)10239u, true, true)); + } if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void s_tmsi_s::to_json(json_writer& j) const +void muting_pattern_info_s::to_json(json_writer& j) const { j.start_obj(); - j.write_str("mMEC", mmec.to_string()); - j.write_str("m-TMSI", m_tmsi.to_string()); + j.write_str("muting-pattern-period", muting_pattern_period.to_string()); + if (muting_pattern_offset_present) { + j.write_int("muting-pattern-offset", muting_pattern_offset); + } if (ie_exts_present) { j.write_fieldname("iE-Extensions"); ie_exts.to_json(j); @@ -14998,54 +18977,96 @@ void s_tmsi_s::to_json(json_writer& j) const j.end_obj(); } -// UL-CP-SecurityInformation ::= SEQUENCE -SRSASN_CODE ul_cp_security_info_s::pack(bit_ref& bref) const +std::string muting_pattern_info_s::muting_pattern_period_opts::to_string() const +{ + static const char* options[] = {"ms0", "ms1280", "ms2560", "ms5120", "ms10240"}; + return convert_enum_idx(options, 5, value, "muting_pattern_info_s::muting_pattern_period_e_"); +} +uint16_t muting_pattern_info_s::muting_pattern_period_opts::to_number() const +{ + static const uint16_t options[] = {0, 1280, 2560, 5120, 10240}; + return map_enum_number(options, 5, value, "muting_pattern_info_s::muting_pattern_period_e_"); +} + +// SONInformationReport ::= CHOICE +void son_info_report_c::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("rLFReportInformation"); + c.to_json(j); + j.end_obj(); +} +SRSASN_CODE son_info_report_c::pack(bit_ref& bref) const +{ + pack_enum(bref, type()); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE son_info_report_c::unpack(cbit_ref& bref) +{ + types e; + unpack_enum(e, bref); + if (e != type()) { + log_invalid_choice_id(e, "son_info_report_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string son_info_report_c::types_opts::to_string() const +{ + static const char* options[] = {"rLFReportInformation"}; + return convert_enum_idx(options, 1, value, "son_info_report_c::types"); +} + +// TimeSynchronisationInfo ::= SEQUENCE +SRSASN_CODE time_synchronisation_info_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(ul_nas_mac.pack(bref)); - HANDLE_CODE(ul_nas_count.pack(bref)); + HANDLE_CODE(pack_integer(bref, stratum_level, (uint8_t)0u, (uint8_t)3u, true, true)); + HANDLE_CODE(synchronisation_status.pack(bref)); if (ie_exts_present) { - HANDLE_CODE(ie_exts.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); } return SRSASN_SUCCESS; } -SRSASN_CODE ul_cp_security_info_s::unpack(cbit_ref& bref) +SRSASN_CODE time_synchronisation_info_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(ul_nas_mac.unpack(bref)); - HANDLE_CODE(ul_nas_count.unpack(bref)); + HANDLE_CODE(unpack_integer(stratum_level, bref, (uint8_t)0u, (uint8_t)3u, true, true)); + HANDLE_CODE(synchronisation_status.unpack(bref)); if (ie_exts_present) { - HANDLE_CODE(ie_exts.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); } return SRSASN_SUCCESS; } -void ul_cp_security_info_s::to_json(json_writer& j) const +void time_synchronisation_info_s::to_json(json_writer& j) const { j.start_obj(); - j.write_str("ul-NAS-MAC", ul_nas_mac.to_string()); - j.write_str("ul-NAS-Count", ul_nas_count.to_string()); + j.write_int("stratumLevel", stratum_level); + j.write_str("synchronisationStatus", synchronisation_status.to_string()); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); - ie_exts.to_json(j); } j.end_obj(); } -// ENBCPRelocationIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES -uint32_t enbcp_relocation_ind_ies_o::idx_to_id(uint32_t idx) +// X2TNLConfigurationInfo-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t x2_tnl_cfg_info_ext_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {8, 96, 100, 67, 254}; - return map_enum_number(options, 5, idx, "id"); + static const uint32_t options[] = {153, 193}; + return map_enum_number(options, 2, idx, "id"); } -bool enbcp_relocation_ind_ies_o::is_id_valid(const uint32_t& id) +bool x2_tnl_cfg_info_ext_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {8, 96, 100, 67, 254}; + static const uint32_t options[] = {153, 193}; for (const auto& o : options) { if (o == id) { return true; @@ -15053,474 +19074,274 @@ bool enbcp_relocation_ind_ies_o::is_id_valid(const uint32_t& id) } return false; } -crit_e enbcp_relocation_ind_ies_o::get_crit(const uint32_t& id) +crit_e x2_tnl_cfg_info_ext_ies_o::get_crit(const uint32_t& id) { switch (id) { - case 8: - return crit_e::reject; - case 96: - return crit_e::reject; - case 100: + case 153: return crit_e::ignore; - case 67: + case 193: return crit_e::ignore; - case 254: - return crit_e::reject; default: asn1::log_error("The id=%d is not recognized", id); } return {}; } -enbcp_relocation_ind_ies_o::value_c enbcp_relocation_ind_ies_o::get_value(const uint32_t& id) +x2_tnl_cfg_info_ext_ies_o::ext_c x2_tnl_cfg_info_ext_ies_o::get_ext(const uint32_t& id) { - value_c ret{}; + ext_c ret{}; switch (id) { - case 8: - ret.set(value_c::types::enb_ue_s1ap_id); - break; - case 96: - ret.set(value_c::types::s_tmsi); - break; - case 100: - ret.set(value_c::types::eutran_cgi); - break; - case 67: - ret.set(value_c::types::tai); + case 153: + ret.set(ext_c::types::enbx2_extended_transport_layer_addresses); break; - case 254: - ret.set(value_c::types::ul_cp_security_info); + case 193: + ret.set(ext_c::types::enb_indirect_x2_transport_layer_addresses); break; default: asn1::log_error("The id=%d is not recognized", id); } return ret; } -presence_e enbcp_relocation_ind_ies_o::get_presence(const uint32_t& id) +presence_e x2_tnl_cfg_info_ext_ies_o::get_presence(const uint32_t& id) { switch (id) { - case 8: - return presence_e::mandatory; - case 96: - return presence_e::mandatory; - case 100: - return presence_e::mandatory; - case 67: - return presence_e::mandatory; - case 254: - return presence_e::mandatory; + case 153: + return presence_e::optional; + case 193: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } return {}; } -// Value ::= OPEN TYPE -uint32_t& enbcp_relocation_ind_ies_o::value_c::enb_ue_s1ap_id() -{ - assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); - return c.get(); -} -s_tmsi_s& enbcp_relocation_ind_ies_o::value_c::s_tmsi() -{ - assert_choice_type("S-TMSI", type_.to_string(), "Value"); - return c.get(); -} -eutran_cgi_s& enbcp_relocation_ind_ies_o::value_c::eutran_cgi() -{ - assert_choice_type("EUTRAN-CGI", type_.to_string(), "Value"); - return c.get(); -} -tai_s& enbcp_relocation_ind_ies_o::value_c::tai() -{ - assert_choice_type("TAI", type_.to_string(), "Value"); - return c.get(); -} -ul_cp_security_info_s& enbcp_relocation_ind_ies_o::value_c::ul_cp_security_info() -{ - assert_choice_type("UL-CP-SecurityInformation", type_.to_string(), "Value"); - return c.get(); -} -const uint32_t& enbcp_relocation_ind_ies_o::value_c::enb_ue_s1ap_id() const -{ - assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); - return c.get(); -} -const s_tmsi_s& enbcp_relocation_ind_ies_o::value_c::s_tmsi() const +// Extension ::= OPEN TYPE +enbx2_ext_tlas_l& x2_tnl_cfg_info_ext_ies_o::ext_c::enbx2_extended_transport_layer_addresses() { - assert_choice_type("S-TMSI", type_.to_string(), "Value"); - return c.get(); + assert_choice_type("ENBX2ExtTLAs", type_.to_string(), "Extension"); + return c.get(); } -const eutran_cgi_s& enbcp_relocation_ind_ies_o::value_c::eutran_cgi() const +enb_indirect_x2_transport_layer_addresses_l& +x2_tnl_cfg_info_ext_ies_o::ext_c::enb_indirect_x2_transport_layer_addresses() { - assert_choice_type("EUTRAN-CGI", type_.to_string(), "Value"); - return c.get(); + assert_choice_type("ENBIndirectX2TransportLayerAddresses", type_.to_string(), "Extension"); + return c.get(); } -const tai_s& enbcp_relocation_ind_ies_o::value_c::tai() const +const enbx2_ext_tlas_l& x2_tnl_cfg_info_ext_ies_o::ext_c::enbx2_extended_transport_layer_addresses() const { - assert_choice_type("TAI", type_.to_string(), "Value"); - return c.get(); + assert_choice_type("ENBX2ExtTLAs", type_.to_string(), "Extension"); + return c.get(); } -const ul_cp_security_info_s& enbcp_relocation_ind_ies_o::value_c::ul_cp_security_info() const +const enb_indirect_x2_transport_layer_addresses_l& +x2_tnl_cfg_info_ext_ies_o::ext_c::enb_indirect_x2_transport_layer_addresses() const { - assert_choice_type("UL-CP-SecurityInformation", type_.to_string(), "Value"); - return c.get(); + assert_choice_type("ENBIndirectX2TransportLayerAddresses", type_.to_string(), "Extension"); + return c.get(); } -void enbcp_relocation_ind_ies_o::value_c::destroy_() +void x2_tnl_cfg_info_ext_ies_o::ext_c::destroy_() { switch (type_) { - case types::s_tmsi: - c.destroy(); - break; - case types::eutran_cgi: - c.destroy(); - break; - case types::tai: - c.destroy(); + case types::enbx2_extended_transport_layer_addresses: + c.destroy(); break; - case types::ul_cp_security_info: - c.destroy(); + case types::enb_indirect_x2_transport_layer_addresses: + c.destroy(); break; default: break; } } -void enbcp_relocation_ind_ies_o::value_c::set(types::options e) +void x2_tnl_cfg_info_ext_ies_o::ext_c::set(types::options e) { destroy_(); type_ = e; switch (type_) { - case types::enb_ue_s1ap_id: - break; - case types::s_tmsi: - c.init(); - break; - case types::eutran_cgi: - c.init(); - break; - case types::tai: - c.init(); + case types::enbx2_extended_transport_layer_addresses: + c.init(); break; - case types::ul_cp_security_info: - c.init(); + case types::enb_indirect_x2_transport_layer_addresses: + c.init(); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); + log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); } } -enbcp_relocation_ind_ies_o::value_c::value_c(const enbcp_relocation_ind_ies_o::value_c& other) +x2_tnl_cfg_info_ext_ies_o::ext_c::ext_c(const x2_tnl_cfg_info_ext_ies_o::ext_c& other) { type_ = other.type(); switch (type_) { - case types::enb_ue_s1ap_id: - c.init(other.c.get()); - break; - case types::s_tmsi: - c.init(other.c.get()); - break; - case types::eutran_cgi: - c.init(other.c.get()); - break; - case types::tai: - c.init(other.c.get()); + case types::enbx2_extended_transport_layer_addresses: + c.init(other.c.get()); break; - case types::ul_cp_security_info: - c.init(other.c.get()); + case types::enb_indirect_x2_transport_layer_addresses: + c.init(other.c.get()); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); + log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); } } -enbcp_relocation_ind_ies_o::value_c& -enbcp_relocation_ind_ies_o::value_c::operator=(const enbcp_relocation_ind_ies_o::value_c& other) +x2_tnl_cfg_info_ext_ies_o::ext_c& +x2_tnl_cfg_info_ext_ies_o::ext_c::operator=(const x2_tnl_cfg_info_ext_ies_o::ext_c& other) { if (this == &other) { return *this; } set(other.type()); switch (type_) { - case types::enb_ue_s1ap_id: - c.set(other.c.get()); - break; - case types::s_tmsi: - c.set(other.c.get()); - break; - case types::eutran_cgi: - c.set(other.c.get()); - break; - case types::tai: - c.set(other.c.get()); + case types::enbx2_extended_transport_layer_addresses: + c.set(other.c.get()); break; - case types::ul_cp_security_info: - c.set(other.c.get()); + case types::enb_indirect_x2_transport_layer_addresses: + c.set(other.c.get()); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); + log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); } return *this; } -void enbcp_relocation_ind_ies_o::value_c::to_json(json_writer& j) const +void x2_tnl_cfg_info_ext_ies_o::ext_c::to_json(json_writer& j) const { j.start_obj(); switch (type_) { - case types::enb_ue_s1ap_id: - j.write_int("INTEGER (0..16777215)", c.get()); - break; - case types::s_tmsi: - j.write_fieldname("S-TMSI"); - c.get().to_json(j); - break; - case types::eutran_cgi: - j.write_fieldname("EUTRAN-CGI"); - c.get().to_json(j); - break; - case types::tai: - j.write_fieldname("TAI"); - c.get().to_json(j); + case types::enbx2_extended_transport_layer_addresses: + j.start_array("ENBX2ExtTLAs"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); break; - case types::ul_cp_security_info: - j.write_fieldname("UL-CP-SecurityInformation"); - c.get().to_json(j); + case types::enb_indirect_x2_transport_layer_addresses: + j.start_array("ENBIndirectX2TransportLayerAddresses"); + for (const auto& e1 : c.get()) { + j.write_str(e1.to_string()); + } + j.end_array(); break; default: - log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); + log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); } j.end_obj(); } -SRSASN_CODE enbcp_relocation_ind_ies_o::value_c::pack(bit_ref& bref) const +SRSASN_CODE x2_tnl_cfg_info_ext_ies_o::ext_c::pack(bit_ref& bref) const { varlength_field_pack_guard varlen_scope(bref, true); switch (type_) { - case types::enb_ue_s1ap_id: - HANDLE_CODE(pack_integer(bref, c.get(), (uint32_t)0u, (uint32_t)16777215u, false, true)); - break; - case types::s_tmsi: - HANDLE_CODE(c.get().pack(bref)); - break; - case types::eutran_cgi: - HANDLE_CODE(c.get().pack(bref)); - break; - case types::tai: - HANDLE_CODE(c.get().pack(bref)); - break; - case types::ul_cp_security_info: - HANDLE_CODE(c.get().pack(bref)); - break; - default: - log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); - return SRSASN_ERROR_ENCODE_FAIL; - } - return SRSASN_SUCCESS; -} -SRSASN_CODE enbcp_relocation_ind_ies_o::value_c::unpack(cbit_ref& bref) -{ - varlength_field_unpack_guard varlen_scope(bref, true); - switch (type_) { - case types::enb_ue_s1ap_id: - HANDLE_CODE(unpack_integer(c.get(), bref, (uint32_t)0u, (uint32_t)16777215u, false, true)); - break; - case types::s_tmsi: - HANDLE_CODE(c.get().unpack(bref)); - break; - case types::eutran_cgi: - HANDLE_CODE(c.get().unpack(bref)); - break; - case types::tai: - HANDLE_CODE(c.get().unpack(bref)); - break; - case types::ul_cp_security_info: - HANDLE_CODE(c.get().unpack(bref)); - break; - default: - log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); - return SRSASN_ERROR_DECODE_FAIL; - } - return SRSASN_SUCCESS; -} - -std::string enbcp_relocation_ind_ies_o::value_c::types_opts::to_string() const -{ - static const char* options[] = {"INTEGER (0..16777215)", "S-TMSI", "EUTRAN-CGI", "TAI", "UL-CP-SecurityInformation"}; - return convert_enum_idx(options, 5, value, "enbcp_relocation_ind_ies_o::value_c::types"); -} -uint8_t enbcp_relocation_ind_ies_o::value_c::types_opts::to_number() const -{ - static const uint8_t options[] = {0}; - return map_enum_number(options, 1, value, "enbcp_relocation_ind_ies_o::value_c::types"); -} - -template struct asn1::s1ap::protocol_ie_field_s; - -enbcp_relocation_ind_ies_container::enbcp_relocation_ind_ies_container() : - enb_ue_s1ap_id(8, crit_e::reject), - s_tmsi(96, crit_e::reject), - eutran_cgi(100, crit_e::ignore), - tai(67, crit_e::ignore), - ul_cp_security_info(254, crit_e::reject) -{} -SRSASN_CODE enbcp_relocation_ind_ies_container::pack(bit_ref& bref) const -{ - uint32_t nof_ies = 5; - pack_length(bref, nof_ies, 0u, 65535u, true); - - HANDLE_CODE(enb_ue_s1ap_id.pack(bref)); - HANDLE_CODE(s_tmsi.pack(bref)); - HANDLE_CODE(eutran_cgi.pack(bref)); - HANDLE_CODE(tai.pack(bref)); - HANDLE_CODE(ul_cp_security_info.pack(bref)); - - return SRSASN_SUCCESS; -} -SRSASN_CODE enbcp_relocation_ind_ies_container::unpack(cbit_ref& bref) -{ - uint32_t nof_ies = 0; - unpack_length(nof_ies, bref, 0u, 65535u, true); - - uint32_t nof_mandatory_ies = 5; - - for (; nof_ies > 0; --nof_ies) { - protocol_ie_field_s c; - HANDLE_CODE(c.unpack(bref)); - switch (c.id) { - case 8: - nof_mandatory_ies--; - enb_ue_s1ap_id.id = c.id; - enb_ue_s1ap_id.crit = c.crit; - enb_ue_s1ap_id.value = c.value.enb_ue_s1ap_id(); - break; - case 96: - nof_mandatory_ies--; - s_tmsi.id = c.id; - s_tmsi.crit = c.crit; - s_tmsi.value = c.value.s_tmsi(); - break; - case 100: - nof_mandatory_ies--; - eutran_cgi.id = c.id; - eutran_cgi.crit = c.crit; - eutran_cgi.value = c.value.eutran_cgi(); - break; - case 67: - nof_mandatory_ies--; - tai.id = c.id; - tai.crit = c.crit; - tai.value = c.value.tai(); - break; - case 254: - nof_mandatory_ies--; - ul_cp_security_info.id = c.id; - ul_cp_security_info.crit = c.crit; - ul_cp_security_info.value = c.value.ul_cp_security_info(); - break; - default: - asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); - return SRSASN_ERROR_DECODE_FAIL; - } + case types::enbx2_extended_transport_layer_addresses: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 16, true)); + break; + case types::enb_indirect_x2_transport_layer_addresses: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 2, true)); + break; + default: + log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); + return SRSASN_ERROR_ENCODE_FAIL; } - if (nof_mandatory_ies > 0) { - asn1::log_error("Mandatory fields are missing\n"); - - return SRSASN_ERROR_DECODE_FAIL; + return SRSASN_SUCCESS; +} +SRSASN_CODE x2_tnl_cfg_info_ext_ies_o::ext_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + switch (type_) { + case types::enbx2_extended_transport_layer_addresses: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 16, true)); + break; + case types::enb_indirect_x2_transport_layer_addresses: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 2, true)); + break; + default: + log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); + return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; } -void enbcp_relocation_ind_ies_container::to_json(json_writer& j) const + +std::string x2_tnl_cfg_info_ext_ies_o::ext_c::types_opts::to_string() const { - j.start_obj(); - j.write_fieldname(""); - enb_ue_s1ap_id.to_json(j); - j.write_fieldname(""); - s_tmsi.to_json(j); - j.write_fieldname(""); - eutran_cgi.to_json(j); - j.write_fieldname(""); - tai.to_json(j); - j.write_fieldname(""); - ul_cp_security_info.to_json(j); - j.end_obj(); + static const char* options[] = {"ENBX2ExtTLAs", "ENBIndirectX2TransportLayerAddresses"}; + return convert_enum_idx(options, 2, value, "x2_tnl_cfg_info_ext_ies_o::ext_c::types"); } -// ENBCPRelocationIndication ::= SEQUENCE -SRSASN_CODE enbcp_relocation_ind_s::pack(bit_ref& bref) const +// EN-DCSONeNBIdentification ::= SEQUENCE +SRSASN_CODE en_dcso_nenb_identif_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(protocol_ies.pack(bref)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(globalenbid.pack(bref)); + HANDLE_CODE(sel_tai.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } return SRSASN_SUCCESS; } -SRSASN_CODE enbcp_relocation_ind_s::unpack(cbit_ref& bref) +SRSASN_CODE en_dcso_nenb_identif_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); - HANDLE_CODE(protocol_ies.unpack(bref)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(globalenbid.unpack(bref)); + HANDLE_CODE(sel_tai.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } return SRSASN_SUCCESS; } -void enbcp_relocation_ind_s::to_json(json_writer& j) const +void en_dcso_nenb_identif_s::to_json(json_writer& j) const { j.start_obj(); - j.write_fieldname("protocolIEs"); - protocol_ies.to_json(j); + j.write_fieldname("globaleNBID"); + globalenbid.to_json(j); + j.write_fieldname("selectedTAI"); + sel_tai.to_json(j); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } j.end_obj(); } -// ENBX2ExtTLA ::= SEQUENCE -SRSASN_CODE enbx2_ext_tla_s::pack(bit_ref& bref) const +// EN-DCSONengNBIdentification ::= SEQUENCE +SRSASN_CODE en_dcso_neng_nb_identif_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(bref.pack(ipsec_tla_present, 1)); - HANDLE_CODE(bref.pack(gtptl_aa_present, 1)); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - if (ipsec_tla_present) { - HANDLE_CODE(ipsec_tla.pack(bref)); - } - if (gtptl_aa_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, gtptl_aa, 1, 16, true)); - } + HANDLE_CODE(globaleng_nbid.pack(bref)); + HANDLE_CODE(sel_tai.pack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE enbx2_ext_tla_s::unpack(cbit_ref& bref) +SRSASN_CODE en_dcso_neng_nb_identif_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(ipsec_tla_present, 1)); - HANDLE_CODE(bref.unpack(gtptl_aa_present, 1)); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - if (ipsec_tla_present) { - HANDLE_CODE(ipsec_tla.unpack(bref)); - } - if (gtptl_aa_present) { - HANDLE_CODE(unpack_dyn_seq_of(gtptl_aa, bref, 1, 16, true)); - } + HANDLE_CODE(globaleng_nbid.unpack(bref)); + HANDLE_CODE(sel_tai.unpack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void enbx2_ext_tla_s::to_json(json_writer& j) const +void en_dcso_neng_nb_identif_s::to_json(json_writer& j) const { j.start_obj(); - if (ipsec_tla_present) { - j.write_str("iPsecTLA", ipsec_tla.to_string()); - } - if (gtptl_aa_present) { - j.start_array("gTPTLAa"); - for (const auto& e1 : gtptl_aa) { - j.write_str(e1.to_string()); - } - j.end_array(); - } + j.write_fieldname("globalengNBID"); + globaleng_nbid.to_json(j); + j.write_fieldname("selectedTAI"); + sel_tai.to_json(j); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); ie_exts.to_json(j); @@ -15528,53 +19349,38 @@ void enbx2_ext_tla_s::to_json(json_writer& j) const j.end_obj(); } -// MutingAvailabilityIndication ::= ENUMERATED -std::string muting_availability_ind_opts::to_string() const -{ - static const char* options[] = {"available", "unavailable"}; - return convert_enum_idx(options, 2, value, "muting_availability_ind_e"); -} - -// RLFReportInformation ::= SEQUENCE -SRSASN_CODE rlf_report_info_s::pack(bit_ref& bref) const +// FiveGSTAI ::= SEQUENCE +SRSASN_CODE five_gstai_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(bref.pack(ue_rlf_report_container_for_extended_bands_present, 1)); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(ue_rlf_report_container.pack(bref)); - if (ue_rlf_report_container_for_extended_bands_present) { - HANDLE_CODE(ue_rlf_report_container_for_extended_bands.pack(bref)); - } + HANDLE_CODE(plm_nid.pack(bref)); + HANDLE_CODE(five_gstac.pack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE rlf_report_info_s::unpack(cbit_ref& bref) +SRSASN_CODE five_gstai_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(ue_rlf_report_container_for_extended_bands_present, 1)); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(ue_rlf_report_container.unpack(bref)); - if (ue_rlf_report_container_for_extended_bands_present) { - HANDLE_CODE(ue_rlf_report_container_for_extended_bands.unpack(bref)); - } + HANDLE_CODE(plm_nid.unpack(bref)); + HANDLE_CODE(five_gstac.unpack(bref)); if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void rlf_report_info_s::to_json(json_writer& j) const +void five_gstai_s::to_json(json_writer& j) const { j.start_obj(); - j.write_str("uE-RLF-Report-Container", ue_rlf_report_container.to_string()); - if (ue_rlf_report_container_for_extended_bands_present) { - j.write_str("uE-RLF-Report-Container-for-extended-bands", ue_rlf_report_container_for_extended_bands.to_string()); - } + j.write_str("pLMNidentity", plm_nid.to_string()); + j.write_str("fiveGSTAC", five_gstac.to_string()); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); ie_exts.to_json(j); @@ -15582,42 +19388,97 @@ void rlf_report_info_s::to_json(json_writer& j) const j.end_obj(); } -// SynchronisationStatus ::= ENUMERATED -std::string synchronisation_status_opts::to_string() const +// SONInformation-ExtensionIE ::= OBJECT SET OF S1AP-PROTOCOL-IES +uint32_t son_info_ext_ie_o::idx_to_id(uint32_t idx) { - static const char* options[] = {"synchronous", "asynchronous"}; - return convert_enum_idx(options, 2, value, "synchronisation_status_e"); + static const uint32_t options[] = {206}; + return map_enum_number(options, 1, idx, "id"); +} +bool son_info_ext_ie_o::is_id_valid(const uint32_t& id) +{ + return 206 == id; +} +crit_e son_info_ext_ie_o::get_crit(const uint32_t& id) +{ + if (id == 206) { + return crit_e::ignore; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} +son_info_ext_ie_o::value_c son_info_ext_ie_o::get_value(const uint32_t& id) +{ + value_c ret{}; + if (id != 206) { + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e son_info_ext_ie_o::get_presence(const uint32_t& id) +{ + if (id == 206) { + return presence_e::mandatory; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; } -// TimeSynchronisationInfo-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -uint32_t time_synchronisation_info_ext_ies_o::idx_to_id(uint32_t idx) +// Value ::= OPEN TYPE +void son_info_ext_ie_o::value_c::to_json(json_writer& j) const { - static const uint32_t options[] = {207}; + j.start_obj(); + j.write_fieldname("SONInformationReport"); + c.to_json(j); + j.end_obj(); +} +SRSASN_CODE son_info_ext_ie_o::value_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE son_info_ext_ie_o::value_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string son_info_ext_ie_o::value_c::types_opts::to_string() const +{ + static const char* options[] = {"SONInformationReport"}; + return convert_enum_idx(options, 1, value, "son_info_ext_ie_o::value_c::types"); +} + +// SONInformationReply-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t son_info_reply_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {149}; return map_enum_number(options, 1, idx, "id"); } -bool time_synchronisation_info_ext_ies_o::is_id_valid(const uint32_t& id) +bool son_info_reply_ext_ies_o::is_id_valid(const uint32_t& id) { - return 207 == id; + return 149 == id; } -crit_e time_synchronisation_info_ext_ies_o::get_crit(const uint32_t& id) +crit_e son_info_reply_ext_ies_o::get_crit(const uint32_t& id) { - if (id == 207) { + if (id == 149) { return crit_e::ignore; } asn1::log_error("The id=%d is not recognized", id); return {}; } -time_synchronisation_info_ext_ies_o::ext_c time_synchronisation_info_ext_ies_o::get_ext(const uint32_t& id) +son_info_reply_ext_ies_o::ext_c son_info_reply_ext_ies_o::get_ext(const uint32_t& id) { ext_c ret{}; - if (id != 207) { + if (id != 149) { asn1::log_error("The id=%d is not recognized", id); } return ret; } -presence_e time_synchronisation_info_ext_ies_o::get_presence(const uint32_t& id) +presence_e son_info_reply_ext_ies_o::get_presence(const uint32_t& id) { - if (id == 207) { + if (id == 149) { return presence_e::optional; } asn1::log_error("The id=%d is not recognized", id); @@ -15625,71 +19486,130 @@ presence_e time_synchronisation_info_ext_ies_o::get_presence(const uint32_t& id) } // Extension ::= OPEN TYPE -void time_synchronisation_info_ext_ies_o::ext_c::to_json(json_writer& j) const +void son_info_reply_ext_ies_o::ext_c::to_json(json_writer& j) const { j.start_obj(); - j.write_str("MutingAvailabilityIndication", c.to_string()); + j.write_fieldname("TimeSynchronisationInfo"); + c.to_json(j); j.end_obj(); } -SRSASN_CODE time_synchronisation_info_ext_ies_o::ext_c::pack(bit_ref& bref) const +SRSASN_CODE son_info_reply_ext_ies_o::ext_c::pack(bit_ref& bref) const { varlength_field_pack_guard varlen_scope(bref, true); HANDLE_CODE(c.pack(bref)); return SRSASN_SUCCESS; } -SRSASN_CODE time_synchronisation_info_ext_ies_o::ext_c::unpack(cbit_ref& bref) +SRSASN_CODE son_info_reply_ext_ies_o::ext_c::unpack(cbit_ref& bref) { varlength_field_unpack_guard varlen_scope(bref, true); HANDLE_CODE(c.unpack(bref)); return SRSASN_SUCCESS; } -std::string time_synchronisation_info_ext_ies_o::ext_c::types_opts::to_string() const +std::string son_info_reply_ext_ies_o::ext_c::types_opts::to_string() const { - static const char* options[] = {"MutingAvailabilityIndication"}; - return convert_enum_idx(options, 1, value, "time_synchronisation_info_ext_ies_o::ext_c::types"); + static const char* options[] = {"TimeSynchronisationInfo"}; + return convert_enum_idx(options, 1, value, "son_info_reply_ext_ies_o::ext_c::types"); } -// MutingPatternInformation ::= SEQUENCE -SRSASN_CODE muting_pattern_info_s::pack(bit_ref& bref) const +template struct asn1::s1ap::protocol_ext_field_s; + +x2_tnl_cfg_info_ext_ies_container::x2_tnl_cfg_info_ext_ies_container() : + enbx2_extended_transport_layer_addresses(153, crit_e::ignore), + enb_indirect_x2_transport_layer_addresses(193, crit_e::ignore) +{} +SRSASN_CODE x2_tnl_cfg_info_ext_ies_container::pack(bit_ref& bref) const +{ + uint32_t nof_ies = 0; + nof_ies += enbx2_extended_transport_layer_addresses_present ? 1 : 0; + nof_ies += enb_indirect_x2_transport_layer_addresses_present ? 1 : 0; + pack_length(bref, nof_ies, 1u, 65535u, true); + + if (enbx2_extended_transport_layer_addresses_present) { + HANDLE_CODE(enbx2_extended_transport_layer_addresses.pack(bref)); + } + if (enb_indirect_x2_transport_layer_addresses_present) { + HANDLE_CODE(enb_indirect_x2_transport_layer_addresses.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE x2_tnl_cfg_info_ext_ies_container::unpack(cbit_ref& bref) +{ + uint32_t nof_ies = 0; + unpack_length(nof_ies, bref, 1u, 65535u, true); + + for (; nof_ies > 0; --nof_ies) { + protocol_ext_field_s c; + HANDLE_CODE(c.unpack(bref)); + switch (c.id) { + case 153: + enbx2_extended_transport_layer_addresses_present = true; + enbx2_extended_transport_layer_addresses.id = c.id; + enbx2_extended_transport_layer_addresses.crit = c.crit; + enbx2_extended_transport_layer_addresses.ext = c.ext_value.enbx2_extended_transport_layer_addresses(); + break; + case 193: + enb_indirect_x2_transport_layer_addresses_present = true; + enb_indirect_x2_transport_layer_addresses.id = c.id; + enb_indirect_x2_transport_layer_addresses.crit = c.crit; + enb_indirect_x2_transport_layer_addresses.ext = c.ext_value.enb_indirect_x2_transport_layer_addresses(); + break; + default: + asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); + return SRSASN_ERROR_DECODE_FAIL; + } + } + + return SRSASN_SUCCESS; +} +void x2_tnl_cfg_info_ext_ies_container::to_json(json_writer& j) const +{ + j.start_obj(); + if (enbx2_extended_transport_layer_addresses_present) { + j.write_fieldname(""); + enbx2_extended_transport_layer_addresses.to_json(j); + } + if (enb_indirect_x2_transport_layer_addresses_present) { + j.write_fieldname(""); + enb_indirect_x2_transport_layer_addresses.to_json(j); + } + j.end_obj(); +} + +// X2TNLConfigurationInfo ::= SEQUENCE +SRSASN_CODE x2_tnl_cfg_info_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(bref.pack(muting_pattern_offset_present, 1)); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(muting_pattern_period.pack(bref)); - if (muting_pattern_offset_present) { - HANDLE_CODE(pack_integer(bref, muting_pattern_offset, (uint16_t)0u, (uint16_t)10239u, true, true)); - } + HANDLE_CODE(pack_dyn_seq_of(bref, enbx2_transport_layer_addresses, 1, 2, true)); if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE muting_pattern_info_s::unpack(cbit_ref& bref) +SRSASN_CODE x2_tnl_cfg_info_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(muting_pattern_offset_present, 1)); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(muting_pattern_period.unpack(bref)); - if (muting_pattern_offset_present) { - HANDLE_CODE(unpack_integer(muting_pattern_offset, bref, (uint16_t)0u, (uint16_t)10239u, true, true)); - } + HANDLE_CODE(unpack_dyn_seq_of(enbx2_transport_layer_addresses, bref, 1, 2, true)); if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void muting_pattern_info_s::to_json(json_writer& j) const +void x2_tnl_cfg_info_s::to_json(json_writer& j) const { j.start_obj(); - j.write_str("muting-pattern-period", muting_pattern_period.to_string()); - if (muting_pattern_offset_present) { - j.write_int("muting-pattern-offset", muting_pattern_offset); + j.start_array("eNBX2TransportLayerAddresses"); + for (const auto& e1 : enbx2_transport_layer_addresses) { + j.write_str(e1.to_string()); } + j.end_array(); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); ie_exts.to_json(j); @@ -15697,498 +19617,500 @@ void muting_pattern_info_s::to_json(json_writer& j) const j.end_obj(); } -std::string muting_pattern_info_s::muting_pattern_period_opts::to_string() const -{ - static const char* options[] = {"ms0", "ms1280", "ms2560", "ms5120", "ms10240"}; - return convert_enum_idx(options, 5, value, "muting_pattern_info_s::muting_pattern_period_e_"); -} -uint16_t muting_pattern_info_s::muting_pattern_period_opts::to_number() const +// EN-DCTransferTypeReply ::= SEQUENCE +SRSASN_CODE en_dc_transfer_type_reply_s::pack(bit_ref& bref) const { - static const uint16_t options[] = {0, 1280, 2560, 5120, 10240}; - return map_enum_number(options, 5, value, "muting_pattern_info_s::muting_pattern_period_e_"); -} + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(sourceeng_nb.pack(bref)); + HANDLE_CODE(targetenb.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } -// SONInformationReport ::= CHOICE -void son_info_report_c::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_fieldname("rLFReportInformation"); - c.to_json(j); - j.end_obj(); -} -SRSASN_CODE son_info_report_c::pack(bit_ref& bref) const -{ - pack_enum(bref, type()); - HANDLE_CODE(c.pack(bref)); return SRSASN_SUCCESS; } -SRSASN_CODE son_info_report_c::unpack(cbit_ref& bref) +SRSASN_CODE en_dc_transfer_type_reply_s::unpack(cbit_ref& bref) { - types e; - unpack_enum(e, bref); - if (e != type()) { - log_invalid_choice_id(e, "son_info_report_c"); - return SRSASN_ERROR_DECODE_FAIL; + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(sourceeng_nb.unpack(bref)); + HANDLE_CODE(targetenb.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); } - HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; } - -std::string son_info_report_c::types_opts::to_string() const +void en_dc_transfer_type_reply_s::to_json(json_writer& j) const { - static const char* options[] = {"rLFReportInformation"}; - return convert_enum_idx(options, 1, value, "son_info_report_c::types"); + j.start_obj(); + j.write_fieldname("sourceengNB"); + sourceeng_nb.to_json(j); + j.write_fieldname("targeteNB"); + targetenb.to_json(j); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); } -// TimeSynchronisationInfo ::= SEQUENCE -SRSASN_CODE time_synchronisation_info_s::pack(bit_ref& bref) const +// EN-DCTransferTypeRequest ::= SEQUENCE +SRSASN_CODE en_dc_transfer_type_request_s::pack(bit_ref& bref) const { bref.pack(ext, 1); + HANDLE_CODE(bref.pack(targetenb_present, 1)); + HANDLE_CODE(bref.pack(associated_tai_present, 1)); + HANDLE_CODE(bref.pack(broadcast5_gstai_present, 1)); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(pack_integer(bref, stratum_level, (uint8_t)0u, (uint8_t)3u, true, true)); - HANDLE_CODE(synchronisation_status.pack(bref)); + HANDLE_CODE(sourceenb.pack(bref)); + HANDLE_CODE(targeteng_nb.pack(bref)); + if (targetenb_present) { + HANDLE_CODE(targetenb.pack(bref)); + } + if (associated_tai_present) { + HANDLE_CODE(associated_tai.pack(bref)); + } + if (broadcast5_gstai_present) { + HANDLE_CODE(broadcast5_gstai.pack(bref)); + } if (ie_exts_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); + HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE time_synchronisation_info_s::unpack(cbit_ref& bref) +SRSASN_CODE en_dc_transfer_type_request_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(targetenb_present, 1)); + HANDLE_CODE(bref.unpack(associated_tai_present, 1)); + HANDLE_CODE(bref.unpack(broadcast5_gstai_present, 1)); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(unpack_integer(stratum_level, bref, (uint8_t)0u, (uint8_t)3u, true, true)); - HANDLE_CODE(synchronisation_status.unpack(bref)); + HANDLE_CODE(sourceenb.unpack(bref)); + HANDLE_CODE(targeteng_nb.unpack(bref)); + if (targetenb_present) { + HANDLE_CODE(targetenb.unpack(bref)); + } + if (associated_tai_present) { + HANDLE_CODE(associated_tai.unpack(bref)); + } + if (broadcast5_gstai_present) { + HANDLE_CODE(broadcast5_gstai.unpack(bref)); + } if (ie_exts_present) { - HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); + HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void time_synchronisation_info_s::to_json(json_writer& j) const +void en_dc_transfer_type_request_s::to_json(json_writer& j) const { j.start_obj(); - j.write_int("stratumLevel", stratum_level); - j.write_str("synchronisationStatus", synchronisation_status.to_string()); + j.write_fieldname("sourceeNB"); + sourceenb.to_json(j); + j.write_fieldname("targetengNB"); + targeteng_nb.to_json(j); + if (targetenb_present) { + j.write_fieldname("targeteNB"); + targetenb.to_json(j); + } + if (associated_tai_present) { + j.write_fieldname("associatedTAI"); + associated_tai.to_json(j); + } + if (broadcast5_gstai_present) { + j.write_fieldname("broadcast5GSTAI"); + broadcast5_gstai.to_json(j); + } if (ie_exts_present) { j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); } j.end_obj(); } -// X2TNLConfigurationInfo-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -uint32_t x2_tnl_cfg_info_ext_ies_o::idx_to_id(uint32_t idx) -{ - static const uint32_t options[] = {153, 193}; - return map_enum_number(options, 2, idx, "id"); -} -bool x2_tnl_cfg_info_ext_ies_o::is_id_valid(const uint32_t& id) +template struct asn1::s1ap::protocol_ie_single_container_s; + +// SONInformationReply ::= SEQUENCE +SRSASN_CODE son_info_reply_s::pack(bit_ref& bref) const { - static const uint32_t options[] = {153, 193}; - for (const auto& o : options) { - if (o == id) { - return true; - } + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(x2_tnl_cfg_info_present, 1)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + if (x2_tnl_cfg_info_present) { + HANDLE_CODE(x2_tnl_cfg_info.pack(bref)); } - return false; -} -crit_e x2_tnl_cfg_info_ext_ies_o::get_crit(const uint32_t& id) -{ - switch (id) { - case 153: - return crit_e::ignore; - case 193: - return crit_e::ignore; - default: - asn1::log_error("The id=%d is not recognized", id); + if (ie_exts_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); } - return {}; + + return SRSASN_SUCCESS; } -x2_tnl_cfg_info_ext_ies_o::ext_c x2_tnl_cfg_info_ext_ies_o::get_ext(const uint32_t& id) +SRSASN_CODE son_info_reply_s::unpack(cbit_ref& bref) { - ext_c ret{}; - switch (id) { - case 153: - ret.set(ext_c::types::enbx2_extended_transport_layer_addresses); - break; - case 193: - ret.set(ext_c::types::enb_indirect_x2_transport_layer_addresses); - break; - default: - asn1::log_error("The id=%d is not recognized", id); + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(x2_tnl_cfg_info_present, 1)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + if (x2_tnl_cfg_info_present) { + HANDLE_CODE(x2_tnl_cfg_info.unpack(bref)); } - return ret; -} -presence_e x2_tnl_cfg_info_ext_ies_o::get_presence(const uint32_t& id) -{ - switch (id) { - case 153: - return presence_e::optional; - case 193: - return presence_e::optional; - default: - asn1::log_error("The id=%d is not recognized", id); + if (ie_exts_present) { + HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); } - return {}; -} -// Extension ::= OPEN TYPE -enbx2_ext_tlas_l& x2_tnl_cfg_info_ext_ies_o::ext_c::enbx2_extended_transport_layer_addresses() -{ - assert_choice_type("ENBX2ExtTLAs", type_.to_string(), "Extension"); - return c.get(); + return SRSASN_SUCCESS; } -enb_indirect_x2_transport_layer_addresses_l& -x2_tnl_cfg_info_ext_ies_o::ext_c::enb_indirect_x2_transport_layer_addresses() +void son_info_reply_s::to_json(json_writer& j) const { - assert_choice_type("ENBIndirectX2TransportLayerAddresses", type_.to_string(), "Extension"); - return c.get(); + j.start_obj(); + if (x2_tnl_cfg_info_present) { + j.write_fieldname("x2TNLConfigurationInfo"); + x2_tnl_cfg_info.to_json(j); + } + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + } + j.end_obj(); } -const enbx2_ext_tlas_l& x2_tnl_cfg_info_ext_ies_o::ext_c::enbx2_extended_transport_layer_addresses() const + +// SONInformationRequest ::= ENUMERATED +std::string son_info_request_opts::to_string() const { - assert_choice_type("ENBX2ExtTLAs", type_.to_string(), "Extension"); - return c.get(); + static const char* options[] = { + "x2TNL-Configuration-Info", "time-Synchronisation-Info", "activate-Muting", "deactivate-Muting"}; + return convert_enum_idx(options, 4, value, "son_info_request_e"); } -const enb_indirect_x2_transport_layer_addresses_l& -x2_tnl_cfg_info_ext_ies_o::ext_c::enb_indirect_x2_transport_layer_addresses() const +uint8_t son_info_request_opts::to_number() const { - assert_choice_type("ENBIndirectX2TransportLayerAddresses", type_.to_string(), "Extension"); - return c.get(); + static const uint8_t options[] = {2}; + return map_enum_number(options, 1, value, "son_info_request_e"); } -void x2_tnl_cfg_info_ext_ies_o::ext_c::destroy_() + +// EN-DCSONTransferType ::= CHOICE +void en_dcson_transfer_type_c::destroy_() { switch (type_) { - case types::enbx2_extended_transport_layer_addresses: - c.destroy(); + case types::request: + c.destroy(); break; - case types::enb_indirect_x2_transport_layer_addresses: - c.destroy(); + case types::reply: + c.destroy(); break; default: break; } } -void x2_tnl_cfg_info_ext_ies_o::ext_c::set(types::options e) +void en_dcson_transfer_type_c::set(types::options e) { destroy_(); type_ = e; switch (type_) { - case types::enbx2_extended_transport_layer_addresses: - c.init(); - break; - case types::enb_indirect_x2_transport_layer_addresses: - c.init(); + case types::request: + c.init(); + break; + case types::reply: + c.init(); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); + log_invalid_choice_id(type_, "en_dcson_transfer_type_c"); } } -x2_tnl_cfg_info_ext_ies_o::ext_c::ext_c(const x2_tnl_cfg_info_ext_ies_o::ext_c& other) +en_dcson_transfer_type_c::en_dcson_transfer_type_c(const en_dcson_transfer_type_c& other) { type_ = other.type(); switch (type_) { - case types::enbx2_extended_transport_layer_addresses: - c.init(other.c.get()); + case types::request: + c.init(other.c.get()); break; - case types::enb_indirect_x2_transport_layer_addresses: - c.init(other.c.get()); + case types::reply: + c.init(other.c.get()); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); + log_invalid_choice_id(type_, "en_dcson_transfer_type_c"); } } -x2_tnl_cfg_info_ext_ies_o::ext_c& -x2_tnl_cfg_info_ext_ies_o::ext_c::operator=(const x2_tnl_cfg_info_ext_ies_o::ext_c& other) +en_dcson_transfer_type_c& en_dcson_transfer_type_c::operator=(const en_dcson_transfer_type_c& other) { if (this == &other) { return *this; } set(other.type()); switch (type_) { - case types::enbx2_extended_transport_layer_addresses: - c.set(other.c.get()); + case types::request: + c.set(other.c.get()); break; - case types::enb_indirect_x2_transport_layer_addresses: - c.set(other.c.get()); + case types::reply: + c.set(other.c.get()); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); + log_invalid_choice_id(type_, "en_dcson_transfer_type_c"); } return *this; } -void x2_tnl_cfg_info_ext_ies_o::ext_c::to_json(json_writer& j) const +void en_dcson_transfer_type_c::to_json(json_writer& j) const { j.start_obj(); switch (type_) { - case types::enbx2_extended_transport_layer_addresses: - j.start_array("ENBX2ExtTLAs"); - for (const auto& e1 : c.get()) { - e1.to_json(j); - } - j.end_array(); + case types::request: + j.write_fieldname("request"); + c.get().to_json(j); break; - case types::enb_indirect_x2_transport_layer_addresses: - j.start_array("ENBIndirectX2TransportLayerAddresses"); - for (const auto& e1 : c.get()) { - j.write_str(e1.to_string()); - } - j.end_array(); + case types::reply: + j.write_fieldname("reply"); + c.get().to_json(j); break; default: - log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); + log_invalid_choice_id(type_, "en_dcson_transfer_type_c"); } j.end_obj(); } -SRSASN_CODE x2_tnl_cfg_info_ext_ies_o::ext_c::pack(bit_ref& bref) const +SRSASN_CODE en_dcson_transfer_type_c::pack(bit_ref& bref) const { - varlength_field_pack_guard varlen_scope(bref, true); + type_.pack(bref); switch (type_) { - case types::enbx2_extended_transport_layer_addresses: - HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 16, true)); + case types::request: + HANDLE_CODE(c.get().pack(bref)); break; - case types::enb_indirect_x2_transport_layer_addresses: - HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 2, true)); + case types::reply: + HANDLE_CODE(c.get().pack(bref)); break; default: - log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); + log_invalid_choice_id(type_, "en_dcson_transfer_type_c"); return SRSASN_ERROR_ENCODE_FAIL; } return SRSASN_SUCCESS; } -SRSASN_CODE x2_tnl_cfg_info_ext_ies_o::ext_c::unpack(cbit_ref& bref) +SRSASN_CODE en_dcson_transfer_type_c::unpack(cbit_ref& bref) { - varlength_field_unpack_guard varlen_scope(bref, true); + types e; + e.unpack(bref); + set(e); switch (type_) { - case types::enbx2_extended_transport_layer_addresses: - HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 16, true)); + case types::request: + HANDLE_CODE(c.get().unpack(bref)); break; - case types::enb_indirect_x2_transport_layer_addresses: - HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 2, true)); + case types::reply: + HANDLE_CODE(c.get().unpack(bref)); break; default: - log_invalid_choice_id(type_, "x2_tnl_cfg_info_ext_ies_o::ext_c"); + log_invalid_choice_id(type_, "en_dcson_transfer_type_c"); return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; } -std::string x2_tnl_cfg_info_ext_ies_o::ext_c::types_opts::to_string() const +std::string en_dcson_transfer_type_c::types_opts::to_string() const { - static const char* options[] = {"ENBX2ExtTLAs", "ENBIndirectX2TransportLayerAddresses"}; - return convert_enum_idx(options, 2, value, "x2_tnl_cfg_info_ext_ies_o::ext_c::types"); + static const char* options[] = {"request", "reply"}; + return convert_enum_idx(options, 2, value, "en_dcson_transfer_type_c::types"); } -// ENB-ID ::= CHOICE -void enb_id_c::destroy_() +// SONInformation ::= CHOICE +void son_info_c::destroy_() { switch (type_) { - case types::macro_enb_id: - c.destroy >(); - break; - case types::home_enb_id: - c.destroy >(); - break; - case types::short_macro_enb_id: - c.destroy >(); + case types::son_info_reply: + c.destroy(); break; - case types::long_macro_enb_id: - c.destroy >(); + case types::son_info_ext: + c.destroy >(); break; default: break; } } -void enb_id_c::set(types::options e) +void son_info_c::set(types::options e) { destroy_(); type_ = e; switch (type_) { - case types::macro_enb_id: - c.init >(); - break; - case types::home_enb_id: - c.init >(); + case types::son_info_request: break; - case types::short_macro_enb_id: - c.init >(); + case types::son_info_reply: + c.init(); break; - case types::long_macro_enb_id: - c.init >(); + case types::son_info_ext: + c.init >(); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "enb_id_c"); + log_invalid_choice_id(type_, "son_info_c"); } } -enb_id_c::enb_id_c(const enb_id_c& other) +son_info_c::son_info_c(const son_info_c& other) { type_ = other.type(); switch (type_) { - case types::macro_enb_id: - c.init(other.c.get >()); - break; - case types::home_enb_id: - c.init(other.c.get >()); + case types::son_info_request: + c.init(other.c.get()); break; - case types::short_macro_enb_id: - c.init(other.c.get >()); + case types::son_info_reply: + c.init(other.c.get()); break; - case types::long_macro_enb_id: - c.init(other.c.get >()); + case types::son_info_ext: + c.init(other.c.get >()); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "enb_id_c"); + log_invalid_choice_id(type_, "son_info_c"); } } -enb_id_c& enb_id_c::operator=(const enb_id_c& other) +son_info_c& son_info_c::operator=(const son_info_c& other) { if (this == &other) { return *this; } set(other.type()); switch (type_) { - case types::macro_enb_id: - c.set(other.c.get >()); - break; - case types::home_enb_id: - c.set(other.c.get >()); + case types::son_info_request: + c.set(other.c.get()); break; - case types::short_macro_enb_id: - c.set(other.c.get >()); + case types::son_info_reply: + c.set(other.c.get()); break; - case types::long_macro_enb_id: - c.set(other.c.get >()); + case types::son_info_ext: + c.set(other.c.get >()); break; case types::nulltype: break; default: - log_invalid_choice_id(type_, "enb_id_c"); + log_invalid_choice_id(type_, "son_info_c"); } return *this; } -void enb_id_c::to_json(json_writer& j) const +void son_info_c::to_json(json_writer& j) const { j.start_obj(); switch (type_) { - case types::macro_enb_id: - j.write_str("macroENB-ID", c.get >().to_string()); - break; - case types::home_enb_id: - j.write_str("homeENB-ID", c.get >().to_string()); + case types::son_info_request: + j.write_str("sONInformationRequest", c.get().to_string()); break; - case types::short_macro_enb_id: - j.write_str("short-macroENB-ID", c.get >().to_string()); + case types::son_info_reply: + j.write_fieldname("sONInformationReply"); + c.get().to_json(j); break; - case types::long_macro_enb_id: - j.write_str("long-macroENB-ID", c.get >().to_string()); + case types::son_info_ext: + j.write_fieldname("sONInformation-Extension"); + c.get >().to_json(j); break; default: - log_invalid_choice_id(type_, "enb_id_c"); + log_invalid_choice_id(type_, "son_info_c"); } j.end_obj(); } -SRSASN_CODE enb_id_c::pack(bit_ref& bref) const +SRSASN_CODE son_info_c::pack(bit_ref& bref) const { type_.pack(bref); switch (type_) { - case types::macro_enb_id: - HANDLE_CODE((c.get >().pack(bref))); + case types::son_info_request: + HANDLE_CODE(c.get().pack(bref)); break; - case types::home_enb_id: - HANDLE_CODE((c.get >().pack(bref))); + case types::son_info_reply: + HANDLE_CODE(c.get().pack(bref)); break; - case types::short_macro_enb_id: { - varlength_field_pack_guard varlen_scope(bref, true); - HANDLE_CODE((c.get >().pack(bref))); - } break; - case types::long_macro_enb_id: { + case types::son_info_ext: { varlength_field_pack_guard varlen_scope(bref, true); - HANDLE_CODE((c.get >().pack(bref))); + HANDLE_CODE(c.get >().pack(bref)); } break; default: - log_invalid_choice_id(type_, "enb_id_c"); + log_invalid_choice_id(type_, "son_info_c"); return SRSASN_ERROR_ENCODE_FAIL; } return SRSASN_SUCCESS; } -SRSASN_CODE enb_id_c::unpack(cbit_ref& bref) +SRSASN_CODE son_info_c::unpack(cbit_ref& bref) { types e; e.unpack(bref); set(e); switch (type_) { - case types::macro_enb_id: - HANDLE_CODE((c.get >().unpack(bref))); + case types::son_info_request: + HANDLE_CODE(c.get().unpack(bref)); break; - case types::home_enb_id: - HANDLE_CODE((c.get >().unpack(bref))); + case types::son_info_reply: + HANDLE_CODE(c.get().unpack(bref)); break; - case types::short_macro_enb_id: { - varlength_field_unpack_guard varlen_scope(bref, true); - HANDLE_CODE((c.get >().unpack(bref))); - } break; - case types::long_macro_enb_id: { + case types::son_info_ext: { varlength_field_unpack_guard varlen_scope(bref, true); - HANDLE_CODE((c.get >().unpack(bref))); + HANDLE_CODE(c.get >().unpack(bref)); } break; default: - log_invalid_choice_id(type_, "enb_id_c"); + log_invalid_choice_id(type_, "son_info_c"); return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; } -std::string enb_id_c::types_opts::to_string() const +std::string son_info_c::types_opts::to_string() const { - static const char* options[] = {"macroENB-ID", "homeENB-ID", "short-macroENB-ID", "long-macroENB-ID"}; - return convert_enum_idx(options, 4, value, "enb_id_c::types"); + static const char* options[] = {"sONInformationRequest", "sONInformationReply", "sONInformation-Extension"}; + return convert_enum_idx(options, 3, value, "son_info_c::types"); } -// ListeningSubframePattern ::= SEQUENCE -SRSASN_CODE listening_sf_pattern_s::pack(bit_ref& bref) const +// EN-DCSONConfigurationTransfer ::= SEQUENCE +SRSASN_CODE en_dcson_cfg_transfer_s::pack(bit_ref& bref) const { bref.pack(ext, 1); + HANDLE_CODE(bref.pack(x2_tnl_cfg_info_present, 1)); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(pattern_period.pack(bref)); - HANDLE_CODE(pack_integer(bref, pattern_offset, (uint16_t)0u, (uint16_t)10239u, true, true)); + HANDLE_CODE(transfertype.pack(bref)); + HANDLE_CODE(son_info.pack(bref)); + if (x2_tnl_cfg_info_present) { + HANDLE_CODE(x2_tnl_cfg_info.pack(bref)); + } if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE listening_sf_pattern_s::unpack(cbit_ref& bref) +SRSASN_CODE en_dcson_cfg_transfer_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(x2_tnl_cfg_info_present, 1)); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(pattern_period.unpack(bref)); - HANDLE_CODE(unpack_integer(pattern_offset, bref, (uint16_t)0u, (uint16_t)10239u, true, true)); + HANDLE_CODE(transfertype.unpack(bref)); + HANDLE_CODE(son_info.unpack(bref)); + if (x2_tnl_cfg_info_present) { + HANDLE_CODE(x2_tnl_cfg_info.unpack(bref)); + } if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void listening_sf_pattern_s::to_json(json_writer& j) const +void en_dcson_cfg_transfer_s::to_json(json_writer& j) const { j.start_obj(); - j.write_str("pattern-period", pattern_period.to_string()); - j.write_int("pattern-offset", pattern_offset); + j.write_fieldname("transfertype"); + transfertype.to_json(j); + j.write_fieldname("sONInformation"); + son_info.to_json(j); + if (x2_tnl_cfg_info_present) { + j.write_fieldname("x2TNLConfigInfo"); + x2_tnl_cfg_info.to_json(j); + } if (ie_exts_present) { j.write_fieldname("iE-Extensions"); ie_exts.to_json(j); @@ -16196,279 +20118,588 @@ void listening_sf_pattern_s::to_json(json_writer& j) const j.end_obj(); } -std::string listening_sf_pattern_s::pattern_period_opts::to_string() const +// ENB-StatusTransfer-TransparentContainer ::= SEQUENCE +SRSASN_CODE enb_status_transfer_transparent_container_s::pack(bit_ref& bref) const { - static const char* options[] = {"ms1280", "ms2560", "ms5120", "ms10240"}; - return convert_enum_idx(options, 4, value, "listening_sf_pattern_s::pattern_period_e_"); + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(pack_dyn_seq_of(bref, bearers_subject_to_status_transfer_list, 1, 256, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; } -uint16_t listening_sf_pattern_s::pattern_period_opts::to_number() const +SRSASN_CODE enb_status_transfer_transparent_container_s::unpack(cbit_ref& bref) { - static const uint16_t options[] = {1280, 2560, 5120, 10240}; - return map_enum_number(options, 4, value, "listening_sf_pattern_s::pattern_period_e_"); + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(unpack_dyn_seq_of(bearers_subject_to_status_transfer_list, bref, 1, 256, true)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void enb_status_transfer_transparent_container_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("bearers-SubjectToStatusTransferList"); + for (const auto& e1 : bearers_subject_to_status_transfer_list) { + e1.to_json(j); + } + j.end_array(); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); } -// SONInformation-ExtensionIE ::= OBJECT SET OF S1AP-PROTOCOL-IES -uint32_t son_info_ext_ie_o::idx_to_id(uint32_t idx) +// S-TMSI ::= SEQUENCE +SRSASN_CODE s_tmsi_s::pack(bit_ref& bref) const { - static const uint32_t options[] = {206}; - return map_enum_number(options, 1, idx, "id"); + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(mmec.pack(bref)); + HANDLE_CODE(m_tmsi.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; } -bool son_info_ext_ie_o::is_id_valid(const uint32_t& id) +SRSASN_CODE s_tmsi_s::unpack(cbit_ref& bref) { - return 206 == id; + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(mmec.unpack(bref)); + HANDLE_CODE(m_tmsi.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; } -crit_e son_info_ext_ie_o::get_crit(const uint32_t& id) +void s_tmsi_s::to_json(json_writer& j) const { - if (id == 206) { - return crit_e::ignore; + j.start_obj(); + j.write_str("mMEC", mmec.to_string()); + j.write_str("m-TMSI", m_tmsi.to_string()); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// UL-CP-SecurityInformation ::= SEQUENCE +SRSASN_CODE ul_cp_security_info_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(ul_nas_mac.pack(bref)); + HANDLE_CODE(ul_nas_count.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_cp_security_info_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(ul_nas_mac.unpack(bref)); + HANDLE_CODE(ul_nas_count.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ul_cp_security_info_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("ul-NAS-MAC", ul_nas_mac.to_string()); + j.write_str("ul-NAS-Count", ul_nas_count.to_string()); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +// ENBCPRelocationIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +uint32_t enbcp_relocation_ind_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {8, 96, 100, 67, 254}; + return map_enum_number(options, 5, idx, "id"); +} +bool enbcp_relocation_ind_ies_o::is_id_valid(const uint32_t& id) +{ + static const uint32_t options[] = {8, 96, 100, 67, 254}; + for (const auto& o : options) { + if (o == id) { + return true; + } + } + return false; +} +crit_e enbcp_relocation_ind_ies_o::get_crit(const uint32_t& id) +{ + switch (id) { + case 8: + return crit_e::reject; + case 96: + return crit_e::reject; + case 100: + return crit_e::ignore; + case 67: + return crit_e::ignore; + case 254: + return crit_e::reject; + default: + asn1::log_error("The id=%d is not recognized", id); } - asn1::log_error("The id=%d is not recognized", id); return {}; } -son_info_ext_ie_o::value_c son_info_ext_ie_o::get_value(const uint32_t& id) +enbcp_relocation_ind_ies_o::value_c enbcp_relocation_ind_ies_o::get_value(const uint32_t& id) { value_c ret{}; - if (id != 206) { - asn1::log_error("The id=%d is not recognized", id); + switch (id) { + case 8: + ret.set(value_c::types::enb_ue_s1ap_id); + break; + case 96: + ret.set(value_c::types::s_tmsi); + break; + case 100: + ret.set(value_c::types::eutran_cgi); + break; + case 67: + ret.set(value_c::types::tai); + break; + case 254: + ret.set(value_c::types::ul_cp_security_info); + break; + default: + asn1::log_error("The id=%d is not recognized", id); } return ret; } -presence_e son_info_ext_ie_o::get_presence(const uint32_t& id) +presence_e enbcp_relocation_ind_ies_o::get_presence(const uint32_t& id) { - if (id == 206) { - return presence_e::mandatory; + switch (id) { + case 8: + return presence_e::mandatory; + case 96: + return presence_e::mandatory; + case 100: + return presence_e::mandatory; + case 67: + return presence_e::mandatory; + case 254: + return presence_e::mandatory; + default: + asn1::log_error("The id=%d is not recognized", id); } - asn1::log_error("The id=%d is not recognized", id); return {}; } // Value ::= OPEN TYPE -void son_info_ext_ie_o::value_c::to_json(json_writer& j) const +uint32_t& enbcp_relocation_ind_ies_o::value_c::enb_ue_s1ap_id() { - j.start_obj(); - j.write_fieldname("SONInformationReport"); - c.to_json(j); - j.end_obj(); + assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); + return c.get(); } -SRSASN_CODE son_info_ext_ie_o::value_c::pack(bit_ref& bref) const +s_tmsi_s& enbcp_relocation_ind_ies_o::value_c::s_tmsi() { - varlength_field_pack_guard varlen_scope(bref, true); - HANDLE_CODE(c.pack(bref)); - return SRSASN_SUCCESS; + assert_choice_type("S-TMSI", type_.to_string(), "Value"); + return c.get(); } -SRSASN_CODE son_info_ext_ie_o::value_c::unpack(cbit_ref& bref) +eutran_cgi_s& enbcp_relocation_ind_ies_o::value_c::eutran_cgi() { - varlength_field_unpack_guard varlen_scope(bref, true); - HANDLE_CODE(c.unpack(bref)); - return SRSASN_SUCCESS; + assert_choice_type("EUTRAN-CGI", type_.to_string(), "Value"); + return c.get(); } - -std::string son_info_ext_ie_o::value_c::types_opts::to_string() const +tai_s& enbcp_relocation_ind_ies_o::value_c::tai() { - static const char* options[] = {"SONInformationReport"}; - return convert_enum_idx(options, 1, value, "son_info_ext_ie_o::value_c::types"); + assert_choice_type("TAI", type_.to_string(), "Value"); + return c.get(); } - -// SONInformationReply-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -uint32_t son_info_reply_ext_ies_o::idx_to_id(uint32_t idx) +ul_cp_security_info_s& enbcp_relocation_ind_ies_o::value_c::ul_cp_security_info() { - static const uint32_t options[] = {149}; - return map_enum_number(options, 1, idx, "id"); + assert_choice_type("UL-CP-SecurityInformation", type_.to_string(), "Value"); + return c.get(); } -bool son_info_reply_ext_ies_o::is_id_valid(const uint32_t& id) +const uint32_t& enbcp_relocation_ind_ies_o::value_c::enb_ue_s1ap_id() const { - return 149 == id; + assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); + return c.get(); } -crit_e son_info_reply_ext_ies_o::get_crit(const uint32_t& id) +const s_tmsi_s& enbcp_relocation_ind_ies_o::value_c::s_tmsi() const { - if (id == 149) { - return crit_e::ignore; + assert_choice_type("S-TMSI", type_.to_string(), "Value"); + return c.get(); +} +const eutran_cgi_s& enbcp_relocation_ind_ies_o::value_c::eutran_cgi() const +{ + assert_choice_type("EUTRAN-CGI", type_.to_string(), "Value"); + return c.get(); +} +const tai_s& enbcp_relocation_ind_ies_o::value_c::tai() const +{ + assert_choice_type("TAI", type_.to_string(), "Value"); + return c.get(); +} +const ul_cp_security_info_s& enbcp_relocation_ind_ies_o::value_c::ul_cp_security_info() const +{ + assert_choice_type("UL-CP-SecurityInformation", type_.to_string(), "Value"); + return c.get(); +} +void enbcp_relocation_ind_ies_o::value_c::destroy_() +{ + switch (type_) { + case types::s_tmsi: + c.destroy(); + break; + case types::eutran_cgi: + c.destroy(); + break; + case types::tai: + c.destroy(); + break; + case types::ul_cp_security_info: + c.destroy(); + break; + default: + break; + } +} +void enbcp_relocation_ind_ies_o::value_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::enb_ue_s1ap_id: + break; + case types::s_tmsi: + c.init(); + break; + case types::eutran_cgi: + c.init(); + break; + case types::tai: + c.init(); + break; + case types::ul_cp_security_info: + c.init(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); } - asn1::log_error("The id=%d is not recognized", id); - return {}; } -son_info_reply_ext_ies_o::ext_c son_info_reply_ext_ies_o::get_ext(const uint32_t& id) +enbcp_relocation_ind_ies_o::value_c::value_c(const enbcp_relocation_ind_ies_o::value_c& other) { - ext_c ret{}; - if (id != 149) { - asn1::log_error("The id=%d is not recognized", id); + type_ = other.type(); + switch (type_) { + case types::enb_ue_s1ap_id: + c.init(other.c.get()); + break; + case types::s_tmsi: + c.init(other.c.get()); + break; + case types::eutran_cgi: + c.init(other.c.get()); + break; + case types::tai: + c.init(other.c.get()); + break; + case types::ul_cp_security_info: + c.init(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); } - return ret; } -presence_e son_info_reply_ext_ies_o::get_presence(const uint32_t& id) +enbcp_relocation_ind_ies_o::value_c& +enbcp_relocation_ind_ies_o::value_c::operator=(const enbcp_relocation_ind_ies_o::value_c& other) { - if (id == 149) { - return presence_e::optional; + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::enb_ue_s1ap_id: + c.set(other.c.get()); + break; + case types::s_tmsi: + c.set(other.c.get()); + break; + case types::eutran_cgi: + c.set(other.c.get()); + break; + case types::tai: + c.set(other.c.get()); + break; + case types::ul_cp_security_info: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); } - asn1::log_error("The id=%d is not recognized", id); - return {}; -} -// Extension ::= OPEN TYPE -void son_info_reply_ext_ies_o::ext_c::to_json(json_writer& j) const + return *this; +} +void enbcp_relocation_ind_ies_o::value_c::to_json(json_writer& j) const { j.start_obj(); - j.write_fieldname("TimeSynchronisationInfo"); - c.to_json(j); + switch (type_) { + case types::enb_ue_s1ap_id: + j.write_int("INTEGER (0..16777215)", c.get()); + break; + case types::s_tmsi: + j.write_fieldname("S-TMSI"); + c.get().to_json(j); + break; + case types::eutran_cgi: + j.write_fieldname("EUTRAN-CGI"); + c.get().to_json(j); + break; + case types::tai: + j.write_fieldname("TAI"); + c.get().to_json(j); + break; + case types::ul_cp_security_info: + j.write_fieldname("UL-CP-SecurityInformation"); + c.get().to_json(j); + break; + default: + log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); + } j.end_obj(); } -SRSASN_CODE son_info_reply_ext_ies_o::ext_c::pack(bit_ref& bref) const +SRSASN_CODE enbcp_relocation_ind_ies_o::value_c::pack(bit_ref& bref) const { varlength_field_pack_guard varlen_scope(bref, true); - HANDLE_CODE(c.pack(bref)); + switch (type_) { + case types::enb_ue_s1ap_id: + HANDLE_CODE(pack_integer(bref, c.get(), (uint32_t)0u, (uint32_t)16777215u, false, true)); + break; + case types::s_tmsi: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::eutran_cgi: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::tai: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::ul_cp_security_info: + HANDLE_CODE(c.get().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } return SRSASN_SUCCESS; } -SRSASN_CODE son_info_reply_ext_ies_o::ext_c::unpack(cbit_ref& bref) +SRSASN_CODE enbcp_relocation_ind_ies_o::value_c::unpack(cbit_ref& bref) { varlength_field_unpack_guard varlen_scope(bref, true); - HANDLE_CODE(c.unpack(bref)); + switch (type_) { + case types::enb_ue_s1ap_id: + HANDLE_CODE(unpack_integer(c.get(), bref, (uint32_t)0u, (uint32_t)16777215u, false, true)); + break; + case types::s_tmsi: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::eutran_cgi: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::tai: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::ul_cp_security_info: + HANDLE_CODE(c.get().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "enbcp_relocation_ind_ies_o::value_c"); + return SRSASN_ERROR_DECODE_FAIL; + } return SRSASN_SUCCESS; } -std::string son_info_reply_ext_ies_o::ext_c::types_opts::to_string() const +std::string enbcp_relocation_ind_ies_o::value_c::types_opts::to_string() const { - static const char* options[] = {"TimeSynchronisationInfo"}; - return convert_enum_idx(options, 1, value, "son_info_reply_ext_ies_o::ext_c::types"); + static const char* options[] = {"INTEGER (0..16777215)", "S-TMSI", "EUTRAN-CGI", "TAI", "UL-CP-SecurityInformation"}; + return convert_enum_idx(options, 5, value, "enbcp_relocation_ind_ies_o::value_c::types"); +} +uint8_t enbcp_relocation_ind_ies_o::value_c::types_opts::to_number() const +{ + static const uint8_t options[] = {0}; + return map_enum_number(options, 1, value, "enbcp_relocation_ind_ies_o::value_c::types"); } -template struct asn1::s1ap::protocol_ext_field_s; +template struct asn1::s1ap::protocol_ie_field_s; -x2_tnl_cfg_info_ext_ies_container::x2_tnl_cfg_info_ext_ies_container() : - enbx2_extended_transport_layer_addresses(153, crit_e::ignore), - enb_indirect_x2_transport_layer_addresses(193, crit_e::ignore) +enbcp_relocation_ind_ies_container::enbcp_relocation_ind_ies_container() : + enb_ue_s1ap_id(8, crit_e::reject), + s_tmsi(96, crit_e::reject), + eutran_cgi(100, crit_e::ignore), + tai(67, crit_e::ignore), + ul_cp_security_info(254, crit_e::reject) {} -SRSASN_CODE x2_tnl_cfg_info_ext_ies_container::pack(bit_ref& bref) const +SRSASN_CODE enbcp_relocation_ind_ies_container::pack(bit_ref& bref) const { - uint32_t nof_ies = 0; - nof_ies += enbx2_extended_transport_layer_addresses_present ? 1 : 0; - nof_ies += enb_indirect_x2_transport_layer_addresses_present ? 1 : 0; - pack_length(bref, nof_ies, 1u, 65535u, true); + uint32_t nof_ies = 5; + pack_length(bref, nof_ies, 0u, 65535u, true); - if (enbx2_extended_transport_layer_addresses_present) { - HANDLE_CODE(enbx2_extended_transport_layer_addresses.pack(bref)); - } - if (enb_indirect_x2_transport_layer_addresses_present) { - HANDLE_CODE(enb_indirect_x2_transport_layer_addresses.pack(bref)); - } + HANDLE_CODE(enb_ue_s1ap_id.pack(bref)); + HANDLE_CODE(s_tmsi.pack(bref)); + HANDLE_CODE(eutran_cgi.pack(bref)); + HANDLE_CODE(tai.pack(bref)); + HANDLE_CODE(ul_cp_security_info.pack(bref)); return SRSASN_SUCCESS; } -SRSASN_CODE x2_tnl_cfg_info_ext_ies_container::unpack(cbit_ref& bref) +SRSASN_CODE enbcp_relocation_ind_ies_container::unpack(cbit_ref& bref) { uint32_t nof_ies = 0; - unpack_length(nof_ies, bref, 1u, 65535u, true); + unpack_length(nof_ies, bref, 0u, 65535u, true); + + uint32_t nof_mandatory_ies = 5; for (; nof_ies > 0; --nof_ies) { - protocol_ext_field_s c; + protocol_ie_field_s c; HANDLE_CODE(c.unpack(bref)); switch (c.id) { - case 153: - enbx2_extended_transport_layer_addresses_present = true; - enbx2_extended_transport_layer_addresses.id = c.id; - enbx2_extended_transport_layer_addresses.crit = c.crit; - enbx2_extended_transport_layer_addresses.ext = c.ext_value.enbx2_extended_transport_layer_addresses(); + case 8: + nof_mandatory_ies--; + enb_ue_s1ap_id.id = c.id; + enb_ue_s1ap_id.crit = c.crit; + enb_ue_s1ap_id.value = c.value.enb_ue_s1ap_id(); break; - case 193: - enb_indirect_x2_transport_layer_addresses_present = true; - enb_indirect_x2_transport_layer_addresses.id = c.id; - enb_indirect_x2_transport_layer_addresses.crit = c.crit; - enb_indirect_x2_transport_layer_addresses.ext = c.ext_value.enb_indirect_x2_transport_layer_addresses(); + case 96: + nof_mandatory_ies--; + s_tmsi.id = c.id; + s_tmsi.crit = c.crit; + s_tmsi.value = c.value.s_tmsi(); + break; + case 100: + nof_mandatory_ies--; + eutran_cgi.id = c.id; + eutran_cgi.crit = c.crit; + eutran_cgi.value = c.value.eutran_cgi(); + break; + case 67: + nof_mandatory_ies--; + tai.id = c.id; + tai.crit = c.crit; + tai.value = c.value.tai(); + break; + case 254: + nof_mandatory_ies--; + ul_cp_security_info.id = c.id; + ul_cp_security_info.crit = c.crit; + ul_cp_security_info.value = c.value.ul_cp_security_info(); break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; } } + if (nof_mandatory_ies > 0) { + asn1::log_error("Mandatory fields are missing\n"); + return SRSASN_ERROR_DECODE_FAIL; + } return SRSASN_SUCCESS; } -void x2_tnl_cfg_info_ext_ies_container::to_json(json_writer& j) const +void enbcp_relocation_ind_ies_container::to_json(json_writer& j) const { j.start_obj(); - if (enbx2_extended_transport_layer_addresses_present) { - j.write_fieldname(""); - enbx2_extended_transport_layer_addresses.to_json(j); - } - if (enb_indirect_x2_transport_layer_addresses_present) { - j.write_fieldname(""); - enb_indirect_x2_transport_layer_addresses.to_json(j); - } + j.write_fieldname(""); + enb_ue_s1ap_id.to_json(j); + j.write_fieldname(""); + s_tmsi.to_json(j); + j.write_fieldname(""); + eutran_cgi.to_json(j); + j.write_fieldname(""); + tai.to_json(j); + j.write_fieldname(""); + ul_cp_security_info.to_json(j); j.end_obj(); } -// X2TNLConfigurationInfo ::= SEQUENCE -SRSASN_CODE x2_tnl_cfg_info_s::pack(bit_ref& bref) const +// ENBCPRelocationIndication ::= SEQUENCE +SRSASN_CODE enbcp_relocation_ind_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(bref.pack(ie_exts_present, 1)); - - HANDLE_CODE(pack_dyn_seq_of(bref, enbx2_transport_layer_addresses, 1, 2, true)); - if (ie_exts_present) { - HANDLE_CODE(ie_exts.pack(bref)); - } + HANDLE_CODE(protocol_ies.pack(bref)); return SRSASN_SUCCESS; } -SRSASN_CODE x2_tnl_cfg_info_s::unpack(cbit_ref& bref) +SRSASN_CODE enbcp_relocation_ind_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - - HANDLE_CODE(unpack_dyn_seq_of(enbx2_transport_layer_addresses, bref, 1, 2, true)); - if (ie_exts_present) { - HANDLE_CODE(ie_exts.unpack(bref)); - } + HANDLE_CODE(protocol_ies.unpack(bref)); return SRSASN_SUCCESS; } -void x2_tnl_cfg_info_s::to_json(json_writer& j) const +void enbcp_relocation_ind_s::to_json(json_writer& j) const { j.start_obj(); - j.start_array("eNBX2TransportLayerAddresses"); - for (const auto& e1 : enbx2_transport_layer_addresses) { - j.write_str(e1.to_string()); - } - j.end_array(); - if (ie_exts_present) { - j.write_fieldname("iE-Extensions"); - ie_exts.to_json(j); - } + j.write_fieldname("protocolIEs"); + protocol_ies.to_json(j); j.end_obj(); } -// Global-ENB-ID ::= SEQUENCE -SRSASN_CODE global_enb_id_s::pack(bit_ref& bref) const +// ListeningSubframePattern ::= SEQUENCE +SRSASN_CODE listening_sf_pattern_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(bref.pack(ie_exts_present, 1)); - HANDLE_CODE(plm_nid.pack(bref)); - HANDLE_CODE(enb_id.pack(bref)); + HANDLE_CODE(pattern_period.pack(bref)); + HANDLE_CODE(pack_integer(bref, pattern_offset, (uint16_t)0u, (uint16_t)10239u, true, true)); if (ie_exts_present) { HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE global_enb_id_s::unpack(cbit_ref& bref) +SRSASN_CODE listening_sf_pattern_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - HANDLE_CODE(plm_nid.unpack(bref)); - HANDLE_CODE(enb_id.unpack(bref)); + HANDLE_CODE(pattern_period.unpack(bref)); + HANDLE_CODE(unpack_integer(pattern_offset, bref, (uint16_t)0u, (uint16_t)10239u, true, true)); if (ie_exts_present) { HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; } -void global_enb_id_s::to_json(json_writer& j) const +void listening_sf_pattern_s::to_json(json_writer& j) const { j.start_obj(); - j.write_str("pLMNidentity", plm_nid.to_string()); - j.write_fieldname("eNB-ID"); - enb_id.to_json(j); + j.write_str("pattern-period", pattern_period.to_string()); + j.write_int("pattern-offset", pattern_offset); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); ie_exts.to_json(j); @@ -16476,63 +20707,15 @@ void global_enb_id_s::to_json(json_writer& j) const j.end_obj(); } -template struct asn1::s1ap::protocol_ie_single_container_s; - -// SONInformationReply ::= SEQUENCE -SRSASN_CODE son_info_reply_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(x2_tnl_cfg_info_present, 1)); - HANDLE_CODE(bref.pack(ie_exts_present, 1)); - - if (x2_tnl_cfg_info_present) { - HANDLE_CODE(x2_tnl_cfg_info.pack(bref)); - } - if (ie_exts_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); - } - - return SRSASN_SUCCESS; -} -SRSASN_CODE son_info_reply_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(x2_tnl_cfg_info_present, 1)); - HANDLE_CODE(bref.unpack(ie_exts_present, 1)); - - if (x2_tnl_cfg_info_present) { - HANDLE_CODE(x2_tnl_cfg_info.unpack(bref)); - } - if (ie_exts_present) { - HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); - } - - return SRSASN_SUCCESS; -} -void son_info_reply_s::to_json(json_writer& j) const -{ - j.start_obj(); - if (x2_tnl_cfg_info_present) { - j.write_fieldname("x2TNLConfigurationInfo"); - x2_tnl_cfg_info.to_json(j); - } - if (ie_exts_present) { - j.write_fieldname("iE-Extensions"); - } - j.end_obj(); -} - -// SONInformationRequest ::= ENUMERATED -std::string son_info_request_opts::to_string() const +std::string listening_sf_pattern_s::pattern_period_opts::to_string() const { - static const char* options[] = { - "x2TNL-Configuration-Info", "time-Synchronisation-Info", "activate-Muting", "deactivate-Muting"}; - return convert_enum_idx(options, 4, value, "son_info_request_e"); + static const char* options[] = {"ms1280", "ms2560", "ms5120", "ms10240"}; + return convert_enum_idx(options, 4, value, "listening_sf_pattern_s::pattern_period_e_"); } -uint8_t son_info_request_opts::to_number() const +uint16_t listening_sf_pattern_s::pattern_period_opts::to_number() const { - static const uint8_t options[] = {2}; - return map_enum_number(options, 1, value, "son_info_request_e"); + static const uint16_t options[] = {1280, 2560, 5120, 10240}; + return map_enum_number(options, 4, value, "listening_sf_pattern_s::pattern_period_e_"); } // SynchronisationInformation ::= SEQUENCE @@ -16812,151 +20995,6 @@ uint8_t son_cfg_transfer_ext_ies_o::ext_c::types_opts::to_number() const return map_enum_number(options, 1, value, "son_cfg_transfer_ext_ies_o::ext_c::types"); } -// SONInformation ::= CHOICE -void son_info_c::destroy_() -{ - switch (type_) { - case types::son_info_reply: - c.destroy(); - break; - case types::son_info_ext: - c.destroy >(); - break; - default: - break; - } -} -void son_info_c::set(types::options e) -{ - destroy_(); - type_ = e; - switch (type_) { - case types::son_info_request: - break; - case types::son_info_reply: - c.init(); - break; - case types::son_info_ext: - c.init >(); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "son_info_c"); - } -} -son_info_c::son_info_c(const son_info_c& other) -{ - type_ = other.type(); - switch (type_) { - case types::son_info_request: - c.init(other.c.get()); - break; - case types::son_info_reply: - c.init(other.c.get()); - break; - case types::son_info_ext: - c.init(other.c.get >()); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "son_info_c"); - } -} -son_info_c& son_info_c::operator=(const son_info_c& other) -{ - if (this == &other) { - return *this; - } - set(other.type()); - switch (type_) { - case types::son_info_request: - c.set(other.c.get()); - break; - case types::son_info_reply: - c.set(other.c.get()); - break; - case types::son_info_ext: - c.set(other.c.get >()); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "son_info_c"); - } - - return *this; -} -void son_info_c::to_json(json_writer& j) const -{ - j.start_obj(); - switch (type_) { - case types::son_info_request: - j.write_str("sONInformationRequest", c.get().to_string()); - break; - case types::son_info_reply: - j.write_fieldname("sONInformationReply"); - c.get().to_json(j); - break; - case types::son_info_ext: - j.write_fieldname("sONInformation-Extension"); - c.get >().to_json(j); - break; - default: - log_invalid_choice_id(type_, "son_info_c"); - } - j.end_obj(); -} -SRSASN_CODE son_info_c::pack(bit_ref& bref) const -{ - type_.pack(bref); - switch (type_) { - case types::son_info_request: - HANDLE_CODE(c.get().pack(bref)); - break; - case types::son_info_reply: - HANDLE_CODE(c.get().pack(bref)); - break; - case types::son_info_ext: { - varlength_field_pack_guard varlen_scope(bref, true); - HANDLE_CODE(c.get >().pack(bref)); - } break; - default: - log_invalid_choice_id(type_, "son_info_c"); - return SRSASN_ERROR_ENCODE_FAIL; - } - return SRSASN_SUCCESS; -} -SRSASN_CODE son_info_c::unpack(cbit_ref& bref) -{ - types e; - e.unpack(bref); - set(e); - switch (type_) { - case types::son_info_request: - HANDLE_CODE(c.get().unpack(bref)); - break; - case types::son_info_reply: - HANDLE_CODE(c.get().unpack(bref)); - break; - case types::son_info_ext: { - varlength_field_unpack_guard varlen_scope(bref, true); - HANDLE_CODE(c.get >().unpack(bref)); - } break; - default: - log_invalid_choice_id(type_, "son_info_c"); - return SRSASN_ERROR_DECODE_FAIL; - } - return SRSASN_SUCCESS; -} - -std::string son_info_c::types_opts::to_string() const -{ - static const char* options[] = {"sONInformationRequest", "sONInformationReply", "sONInformation-Extension"}; - return convert_enum_idx(options, 3, value, "son_info_c::types"); -} - // SourceeNB-ID ::= SEQUENCE SRSASN_CODE sourceenb_id_s::pack(bit_ref& bref) const { @@ -17149,197 +21187,291 @@ void son_cfg_transfer_s::to_json(json_writer& j) const // ENBConfigurationTransferIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t enb_cfg_transfer_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {129}; - return map_enum_number(options, 1, idx, "id"); + static const uint32_t options[] = {129, 294}; + return map_enum_number(options, 2, idx, "id"); } bool enb_cfg_transfer_ies_o::is_id_valid(const uint32_t& id) { - return 129 == id; + static const uint32_t options[] = {129, 294}; + for (const auto& o : options) { + if (o == id) { + return true; + } + } + return false; } crit_e enb_cfg_transfer_ies_o::get_crit(const uint32_t& id) { - if (id == 129) { - return crit_e::ignore; + switch (id) { + case 129: + return crit_e::ignore; + case 294: + return crit_e::ignore; + default: + asn1::log_error("The id=%d is not recognized", id); } - asn1::log_error("The id=%d is not recognized", id); return {}; } enb_cfg_transfer_ies_o::value_c enb_cfg_transfer_ies_o::get_value(const uint32_t& id) { value_c ret{}; - if (id != 129) { - asn1::log_error("The id=%d is not recognized", id); + switch (id) { + case 129: + ret.set(value_c::types::son_cfg_transfer_ect); + break; + case 294: + ret.set(value_c::types::en_dcson_cfg_transfer_ect); + break; + default: + asn1::log_error("The id=%d is not recognized", id); } return ret; } presence_e enb_cfg_transfer_ies_o::get_presence(const uint32_t& id) { - if (id == 129) { - return presence_e::optional; + switch (id) { + case 129: + return presence_e::optional; + case 294: + return presence_e::optional; + default: + asn1::log_error("The id=%d is not recognized", id); } - asn1::log_error("The id=%d is not recognized", id); return {}; } // Value ::= OPEN TYPE -void enb_cfg_transfer_ies_o::value_c::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_fieldname("SONConfigurationTransfer"); - c.to_json(j); - j.end_obj(); -} -SRSASN_CODE enb_cfg_transfer_ies_o::value_c::pack(bit_ref& bref) const +son_cfg_transfer_s& enb_cfg_transfer_ies_o::value_c::son_cfg_transfer_ect() { - varlength_field_pack_guard varlen_scope(bref, true); - HANDLE_CODE(c.pack(bref)); - return SRSASN_SUCCESS; + assert_choice_type("SONConfigurationTransfer", type_.to_string(), "Value"); + return c.get(); } -SRSASN_CODE enb_cfg_transfer_ies_o::value_c::unpack(cbit_ref& bref) +en_dcson_cfg_transfer_s& enb_cfg_transfer_ies_o::value_c::en_dcson_cfg_transfer_ect() { - varlength_field_unpack_guard varlen_scope(bref, true); - HANDLE_CODE(c.unpack(bref)); - return SRSASN_SUCCESS; + assert_choice_type("EN-DCSONConfigurationTransfer", type_.to_string(), "Value"); + return c.get(); } - -std::string enb_cfg_transfer_ies_o::value_c::types_opts::to_string() const +const son_cfg_transfer_s& enb_cfg_transfer_ies_o::value_c::son_cfg_transfer_ect() const { - static const char* options[] = {"SONConfigurationTransfer"}; - return convert_enum_idx(options, 1, value, "enb_cfg_transfer_ies_o::value_c::types"); + assert_choice_type("SONConfigurationTransfer", type_.to_string(), "Value"); + return c.get(); } - -// ENBConfigurationTransfer ::= SEQUENCE -SRSASN_CODE enb_cfg_transfer_s::pack(bit_ref& bref) const +const en_dcson_cfg_transfer_s& enb_cfg_transfer_ies_o::value_c::en_dcson_cfg_transfer_ect() const { - bref.pack(ext, 1); - HANDLE_CODE(pack_dyn_seq_of(bref, protocol_ies, 0, 65535, true)); - - return SRSASN_SUCCESS; + assert_choice_type("EN-DCSONConfigurationTransfer", type_.to_string(), "Value"); + return c.get(); } -SRSASN_CODE enb_cfg_transfer_s::unpack(cbit_ref& bref) +void enb_cfg_transfer_ies_o::value_c::destroy_() { - bref.unpack(ext, 1); - HANDLE_CODE(unpack_dyn_seq_of(protocol_ies, bref, 0, 65535, true)); - - return SRSASN_SUCCESS; -} -void enb_cfg_transfer_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_fieldname("protocolIEs"); - j.end_obj(); -} - -// RAT-Type ::= ENUMERATED -std::string rat_type_opts::to_string() const -{ - static const char* options[] = {"nbiot"}; - return convert_enum_idx(options, 1, value, "rat_type_e"); -} - -// SupportedTAs-Item-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -uint32_t supported_tas_item_ext_ies_o::idx_to_id(uint32_t idx) -{ - static const uint32_t options[] = {232}; - return map_enum_number(options, 1, idx, "id"); -} -bool supported_tas_item_ext_ies_o::is_id_valid(const uint32_t& id) -{ - return 232 == id; + switch (type_) { + case types::son_cfg_transfer_ect: + c.destroy(); + break; + case types::en_dcson_cfg_transfer_ect: + c.destroy(); + break; + default: + break; + } } -crit_e supported_tas_item_ext_ies_o::get_crit(const uint32_t& id) +void enb_cfg_transfer_ies_o::value_c::set(types::options e) { - if (id == 232) { - return crit_e::reject; + destroy_(); + type_ = e; + switch (type_) { + case types::son_cfg_transfer_ect: + c.init(); + break; + case types::en_dcson_cfg_transfer_ect: + c.init(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "enb_cfg_transfer_ies_o::value_c"); } - asn1::log_error("The id=%d is not recognized", id); - return {}; } -supported_tas_item_ext_ies_o::ext_c supported_tas_item_ext_ies_o::get_ext(const uint32_t& id) +enb_cfg_transfer_ies_o::value_c::value_c(const enb_cfg_transfer_ies_o::value_c& other) { - ext_c ret{}; - if (id != 232) { - asn1::log_error("The id=%d is not recognized", id); + type_ = other.type(); + switch (type_) { + case types::son_cfg_transfer_ect: + c.init(other.c.get()); + break; + case types::en_dcson_cfg_transfer_ect: + c.init(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "enb_cfg_transfer_ies_o::value_c"); } - return ret; } -presence_e supported_tas_item_ext_ies_o::get_presence(const uint32_t& id) +enb_cfg_transfer_ies_o::value_c& +enb_cfg_transfer_ies_o::value_c::operator=(const enb_cfg_transfer_ies_o::value_c& other) { - if (id == 232) { - return presence_e::optional; + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::son_cfg_transfer_ect: + c.set(other.c.get()); + break; + case types::en_dcson_cfg_transfer_ect: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "enb_cfg_transfer_ies_o::value_c"); } - asn1::log_error("The id=%d is not recognized", id); - return {}; -} -// Extension ::= OPEN TYPE -void supported_tas_item_ext_ies_o::ext_c::to_json(json_writer& j) const + return *this; +} +void enb_cfg_transfer_ies_o::value_c::to_json(json_writer& j) const { j.start_obj(); - j.write_str("RAT-Type", "nbiot"); + switch (type_) { + case types::son_cfg_transfer_ect: + j.write_fieldname("SONConfigurationTransfer"); + c.get().to_json(j); + break; + case types::en_dcson_cfg_transfer_ect: + j.write_fieldname("EN-DCSONConfigurationTransfer"); + c.get().to_json(j); + break; + default: + log_invalid_choice_id(type_, "enb_cfg_transfer_ies_o::value_c"); + } j.end_obj(); } -SRSASN_CODE supported_tas_item_ext_ies_o::ext_c::pack(bit_ref& bref) const +SRSASN_CODE enb_cfg_transfer_ies_o::value_c::pack(bit_ref& bref) const { varlength_field_pack_guard varlen_scope(bref, true); - HANDLE_CODE(c.pack(bref)); + switch (type_) { + case types::son_cfg_transfer_ect: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::en_dcson_cfg_transfer_ect: + HANDLE_CODE(c.get().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "enb_cfg_transfer_ies_o::value_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } return SRSASN_SUCCESS; } -SRSASN_CODE supported_tas_item_ext_ies_o::ext_c::unpack(cbit_ref& bref) +SRSASN_CODE enb_cfg_transfer_ies_o::value_c::unpack(cbit_ref& bref) { varlength_field_unpack_guard varlen_scope(bref, true); - HANDLE_CODE(c.unpack(bref)); + switch (type_) { + case types::son_cfg_transfer_ect: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::en_dcson_cfg_transfer_ect: + HANDLE_CODE(c.get().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "enb_cfg_transfer_ies_o::value_c"); + return SRSASN_ERROR_DECODE_FAIL; + } return SRSASN_SUCCESS; } -std::string supported_tas_item_ext_ies_o::ext_c::types_opts::to_string() const +std::string enb_cfg_transfer_ies_o::value_c::types_opts::to_string() const { - static const char* options[] = {"RAT-Type"}; - return convert_enum_idx(options, 1, value, "supported_tas_item_ext_ies_o::ext_c::types"); + static const char* options[] = {"SONConfigurationTransfer", "EN-DCSONConfigurationTransfer"}; + return convert_enum_idx(options, 2, value, "enb_cfg_transfer_ies_o::value_c::types"); } -// SupportedTAs-Item ::= SEQUENCE -SRSASN_CODE supported_tas_item_s::pack(bit_ref& bref) const +template struct asn1::s1ap::protocol_ie_field_s; + +enb_cfg_transfer_ies_container::enb_cfg_transfer_ies_container() : + son_cfg_transfer_ect(129, crit_e::ignore), en_dcson_cfg_transfer_ect(294, crit_e::ignore) +{} +SRSASN_CODE enb_cfg_transfer_ies_container::pack(bit_ref& bref) const { - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(ie_exts_present, 1)); + uint32_t nof_ies = 0; + nof_ies += son_cfg_transfer_ect_present ? 1 : 0; + nof_ies += en_dcson_cfg_transfer_ect_present ? 1 : 0; + pack_length(bref, nof_ies, 0u, 65535u, true); - HANDLE_CODE(tac.pack(bref)); - HANDLE_CODE(pack_dyn_seq_of(bref, broadcast_plmns, 1, 6, true)); - if (ie_exts_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); + if (son_cfg_transfer_ect_present) { + HANDLE_CODE(son_cfg_transfer_ect.pack(bref)); + } + if (en_dcson_cfg_transfer_ect_present) { + HANDLE_CODE(en_dcson_cfg_transfer_ect.pack(bref)); } return SRSASN_SUCCESS; } -SRSASN_CODE supported_tas_item_s::unpack(cbit_ref& bref) +SRSASN_CODE enb_cfg_transfer_ies_container::unpack(cbit_ref& bref) { - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + uint32_t nof_ies = 0; + unpack_length(nof_ies, bref, 0u, 65535u, true); - HANDLE_CODE(tac.unpack(bref)); - HANDLE_CODE(unpack_dyn_seq_of(broadcast_plmns, bref, 1, 6, true)); - if (ie_exts_present) { - HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); + for (; nof_ies > 0; --nof_ies) { + protocol_ie_field_s c; + HANDLE_CODE(c.unpack(bref)); + switch (c.id) { + case 129: + son_cfg_transfer_ect_present = true; + son_cfg_transfer_ect.id = c.id; + son_cfg_transfer_ect.crit = c.crit; + son_cfg_transfer_ect.value = c.value.son_cfg_transfer_ect(); + break; + case 294: + en_dcson_cfg_transfer_ect_present = true; + en_dcson_cfg_transfer_ect.id = c.id; + en_dcson_cfg_transfer_ect.crit = c.crit; + en_dcson_cfg_transfer_ect.value = c.value.en_dcson_cfg_transfer_ect(); + break; + default: + asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); + return SRSASN_ERROR_DECODE_FAIL; + } } return SRSASN_SUCCESS; } -void supported_tas_item_s::to_json(json_writer& j) const +void enb_cfg_transfer_ies_container::to_json(json_writer& j) const { j.start_obj(); - j.write_str("tAC", tac.to_string()); - j.start_array("broadcastPLMNs"); - for (const auto& e1 : broadcast_plmns) { - j.write_str(e1.to_string()); + if (son_cfg_transfer_ect_present) { + j.write_fieldname(""); + son_cfg_transfer_ect.to_json(j); } - j.end_array(); - if (ie_exts_present) { - j.write_fieldname("iE-Extensions"); + if (en_dcson_cfg_transfer_ect_present) { + j.write_fieldname(""); + en_dcson_cfg_transfer_ect.to_json(j); } j.end_obj(); } +// ENBConfigurationTransfer ::= SEQUENCE +SRSASN_CODE enb_cfg_transfer_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(protocol_ies.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE enb_cfg_transfer_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(protocol_ies.unpack(bref)); + + return SRSASN_SUCCESS; +} +void enb_cfg_transfer_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("protocolIEs"); + protocol_ies.to_json(j); + j.end_obj(); +} + // NB-IoT-DefaultPagingDRX ::= ENUMERATED std::string nb_io_t_default_paging_drx_opts::to_string() const { @@ -17367,12 +21499,12 @@ uint16_t paging_drx_opts::to_number() const // ENBConfigurationUpdateIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t enb_cfg_upd_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {60, 64, 128, 137, 234}; - return map_enum_number(options, 5, idx, "id"); + static const uint32_t options[] = {60, 64, 128, 137, 234, 292, 293}; + return map_enum_number(options, 7, idx, "id"); } bool enb_cfg_upd_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {60, 64, 128, 137, 234}; + static const uint32_t options[] = {60, 64, 128, 137, 234, 292, 293}; for (const auto& o : options) { if (o == id) { return true; @@ -17393,6 +21525,10 @@ crit_e enb_cfg_upd_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 234: return crit_e::ignore; + case 292: + return crit_e::ignore; + case 293: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -17417,6 +21553,12 @@ enb_cfg_upd_ies_o::value_c enb_cfg_upd_ies_o::get_value(const uint32_t& id) case 234: ret.set(value_c::types::nb_io_t_default_paging_drx); break; + case 292: + ret.set(value_c::types::connectedeng_nb_to_add_list); + break; + case 293: + ret.set(value_c::types::connectedeng_nb_to_rem_list); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -17435,6 +21577,10 @@ presence_e enb_cfg_upd_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 234: return presence_e::optional; + case 292: + return presence_e::optional; + case 293: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -17467,6 +21613,16 @@ nb_io_t_default_paging_drx_e& enb_cfg_upd_ies_o::value_c::nb_io_t_default_paging assert_choice_type("NB-IoT-DefaultPagingDRX", type_.to_string(), "Value"); return c.get(); } +connectedeng_nb_list_l& enb_cfg_upd_ies_o::value_c::connectedeng_nb_to_add_list() +{ + assert_choice_type("ConnectedengNBList", type_.to_string(), "Value"); + return c.get(); +} +connectedeng_nb_list_l& enb_cfg_upd_ies_o::value_c::connectedeng_nb_to_rem_list() +{ + assert_choice_type("ConnectedengNBList", type_.to_string(), "Value"); + return c.get(); +} const printable_string<1, 150, true, true>& enb_cfg_upd_ies_o::value_c::enbname() const { assert_choice_type("PrintableString", type_.to_string(), "Value"); @@ -17492,6 +21648,16 @@ const nb_io_t_default_paging_drx_e& enb_cfg_upd_ies_o::value_c::nb_io_t_default_ assert_choice_type("NB-IoT-DefaultPagingDRX", type_.to_string(), "Value"); return c.get(); } +const connectedeng_nb_list_l& enb_cfg_upd_ies_o::value_c::connectedeng_nb_to_add_list() const +{ + assert_choice_type("ConnectedengNBList", type_.to_string(), "Value"); + return c.get(); +} +const connectedeng_nb_list_l& enb_cfg_upd_ies_o::value_c::connectedeng_nb_to_rem_list() const +{ + assert_choice_type("ConnectedengNBList", type_.to_string(), "Value"); + return c.get(); +} void enb_cfg_upd_ies_o::value_c::destroy_() { switch (type_) { @@ -17504,6 +21670,12 @@ void enb_cfg_upd_ies_o::value_c::destroy_() case types::csg_id_list: c.destroy(); break; + case types::connectedeng_nb_to_add_list: + c.destroy(); + break; + case types::connectedeng_nb_to_rem_list: + c.destroy(); + break; default: break; } @@ -17526,6 +21698,12 @@ void enb_cfg_upd_ies_o::value_c::set(types::options e) break; case types::nb_io_t_default_paging_drx: break; + case types::connectedeng_nb_to_add_list: + c.init(); + break; + case types::connectedeng_nb_to_rem_list: + c.init(); + break; case types::nulltype: break; default: @@ -17551,6 +21729,12 @@ enb_cfg_upd_ies_o::value_c::value_c(const enb_cfg_upd_ies_o::value_c& other) case types::nb_io_t_default_paging_drx: c.init(other.c.get()); break; + case types::connectedeng_nb_to_add_list: + c.init(other.c.get()); + break; + case types::connectedeng_nb_to_rem_list: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -17579,6 +21763,12 @@ enb_cfg_upd_ies_o::value_c& enb_cfg_upd_ies_o::value_c::operator=(const enb_cfg_ case types::nb_io_t_default_paging_drx: c.set(other.c.get()); break; + case types::connectedeng_nb_to_add_list: + c.set(other.c.get()); + break; + case types::connectedeng_nb_to_rem_list: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -17614,6 +21804,20 @@ void enb_cfg_upd_ies_o::value_c::to_json(json_writer& j) const case types::nb_io_t_default_paging_drx: j.write_str("NB-IoT-DefaultPagingDRX", c.get().to_string()); break; + case types::connectedeng_nb_to_add_list: + j.start_array("ConnectedengNBList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; + case types::connectedeng_nb_to_rem_list: + j.start_array("ConnectedengNBList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; default: log_invalid_choice_id(type_, "enb_cfg_upd_ies_o::value_c"); } @@ -17638,6 +21842,12 @@ SRSASN_CODE enb_cfg_upd_ies_o::value_c::pack(bit_ref& bref) const case types::nb_io_t_default_paging_drx: HANDLE_CODE(c.get().pack(bref)); break; + case types::connectedeng_nb_to_add_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; + case types::connectedeng_nb_to_rem_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; default: log_invalid_choice_id(type_, "enb_cfg_upd_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -17663,6 +21873,12 @@ SRSASN_CODE enb_cfg_upd_ies_o::value_c::unpack(cbit_ref& bref) case types::nb_io_t_default_paging_drx: HANDLE_CODE(c.get().unpack(bref)); break; + case types::connectedeng_nb_to_add_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; + case types::connectedeng_nb_to_rem_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; default: log_invalid_choice_id(type_, "enb_cfg_upd_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -17672,9 +21888,14 @@ SRSASN_CODE enb_cfg_upd_ies_o::value_c::unpack(cbit_ref& bref) std::string enb_cfg_upd_ies_o::value_c::types_opts::to_string() const { - static const char* options[] = { - "PrintableString", "SupportedTAs", "CSG-IdList", "PagingDRX", "NB-IoT-DefaultPagingDRX"}; - return convert_enum_idx(options, 5, value, "enb_cfg_upd_ies_o::value_c::types"); + static const char* options[] = {"PrintableString", + "SupportedTAs", + "CSG-IdList", + "PagingDRX", + "NB-IoT-DefaultPagingDRX", + "ConnectedengNBList", + "ConnectedengNBList"}; + return convert_enum_idx(options, 7, value, "enb_cfg_upd_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -17684,7 +21905,9 @@ enb_cfg_upd_ies_container::enb_cfg_upd_ies_container() : supported_tas(64, crit_e::reject), csg_id_list(128, crit_e::reject), default_paging_drx(137, crit_e::ignore), - nb_io_t_default_paging_drx(234, crit_e::ignore) + nb_io_t_default_paging_drx(234, crit_e::ignore), + connectedeng_nb_to_add_list(292, crit_e::ignore), + connectedeng_nb_to_rem_list(293, crit_e::ignore) {} SRSASN_CODE enb_cfg_upd_ies_container::pack(bit_ref& bref) const { @@ -17694,6 +21917,8 @@ SRSASN_CODE enb_cfg_upd_ies_container::pack(bit_ref& bref) const nof_ies += csg_id_list_present ? 1 : 0; nof_ies += default_paging_drx_present ? 1 : 0; nof_ies += nb_io_t_default_paging_drx_present ? 1 : 0; + nof_ies += connectedeng_nb_to_add_list_present ? 1 : 0; + nof_ies += connectedeng_nb_to_rem_list_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); if (enbname_present) { @@ -17711,6 +21936,12 @@ SRSASN_CODE enb_cfg_upd_ies_container::pack(bit_ref& bref) const if (nb_io_t_default_paging_drx_present) { HANDLE_CODE(nb_io_t_default_paging_drx.pack(bref)); } + if (connectedeng_nb_to_add_list_present) { + HANDLE_CODE(connectedeng_nb_to_add_list.pack(bref)); + } + if (connectedeng_nb_to_rem_list_present) { + HANDLE_CODE(connectedeng_nb_to_rem_list.pack(bref)); + } return SRSASN_SUCCESS; } @@ -17753,6 +21984,18 @@ SRSASN_CODE enb_cfg_upd_ies_container::unpack(cbit_ref& bref) nb_io_t_default_paging_drx.crit = c.crit; nb_io_t_default_paging_drx.value = c.value.nb_io_t_default_paging_drx(); break; + case 292: + connectedeng_nb_to_add_list_present = true; + connectedeng_nb_to_add_list.id = c.id; + connectedeng_nb_to_add_list.crit = c.crit; + connectedeng_nb_to_add_list.value = c.value.connectedeng_nb_to_add_list(); + break; + case 293: + connectedeng_nb_to_rem_list_present = true; + connectedeng_nb_to_rem_list.id = c.id; + connectedeng_nb_to_rem_list.crit = c.crit; + connectedeng_nb_to_rem_list.value = c.value.connectedeng_nb_to_rem_list(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -17784,6 +22027,14 @@ void enb_cfg_upd_ies_container::to_json(json_writer& j) const j.write_fieldname(""); nb_io_t_default_paging_drx.to_json(j); } + if (connectedeng_nb_to_add_list_present) { + j.write_fieldname(""); + connectedeng_nb_to_add_list.to_json(j); + } + if (connectedeng_nb_to_rem_list_present) { + j.write_fieldname(""); + connectedeng_nb_to_rem_list.to_json(j); + } j.end_obj(); } @@ -19058,12 +23309,12 @@ void eutran_resp_s::to_json(json_writer& j) const // ErrorIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t error_ind_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 2, 58}; - return map_enum_number(options, 4, idx, "id"); + static const uint32_t options[] = {0, 8, 2, 58, 96}; + return map_enum_number(options, 5, idx, "id"); } bool error_ind_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 2, 58}; + static const uint32_t options[] = {0, 8, 2, 58, 96}; for (const auto& o : options) { if (o == id) { return true; @@ -19082,6 +23333,8 @@ crit_e error_ind_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 58: return crit_e::ignore; + case 96: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -19103,6 +23356,9 @@ error_ind_ies_o::value_c error_ind_ies_o::get_value(const uint32_t& id) case 58: ret.set(value_c::types::crit_diagnostics); break; + case 96: + ret.set(value_c::types::s_tmsi); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -19119,6 +23375,8 @@ presence_e error_ind_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 58: return presence_e::optional; + case 96: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -19146,6 +23404,11 @@ crit_diagnostics_s& error_ind_ies_o::value_c::crit_diagnostics() assert_choice_type("CriticalityDiagnostics", type_.to_string(), "Value"); return c.get(); } +s_tmsi_s& error_ind_ies_o::value_c::s_tmsi() +{ + assert_choice_type("S-TMSI", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& error_ind_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -19166,6 +23429,11 @@ const crit_diagnostics_s& error_ind_ies_o::value_c::crit_diagnostics() const assert_choice_type("CriticalityDiagnostics", type_.to_string(), "Value"); return c.get(); } +const s_tmsi_s& error_ind_ies_o::value_c::s_tmsi() const +{ + assert_choice_type("S-TMSI", type_.to_string(), "Value"); + return c.get(); +} void error_ind_ies_o::value_c::destroy_() { switch (type_) { @@ -19175,6 +23443,9 @@ void error_ind_ies_o::value_c::destroy_() case types::crit_diagnostics: c.destroy(); break; + case types::s_tmsi: + c.destroy(); + break; default: break; } @@ -19194,6 +23465,9 @@ void error_ind_ies_o::value_c::set(types::options e) case types::crit_diagnostics: c.init(); break; + case types::s_tmsi: + c.init(); + break; case types::nulltype: break; default: @@ -19216,6 +23490,9 @@ error_ind_ies_o::value_c::value_c(const error_ind_ies_o::value_c& other) case types::crit_diagnostics: c.init(other.c.get()); break; + case types::s_tmsi: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -19241,6 +23518,9 @@ error_ind_ies_o::value_c& error_ind_ies_o::value_c::operator=(const error_ind_ie case types::crit_diagnostics: c.set(other.c.get()); break; + case types::s_tmsi: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -19267,6 +23547,10 @@ void error_ind_ies_o::value_c::to_json(json_writer& j) const j.write_fieldname("CriticalityDiagnostics"); c.get().to_json(j); break; + case types::s_tmsi: + j.write_fieldname("S-TMSI"); + c.get().to_json(j); + break; default: log_invalid_choice_id(type_, "error_ind_ies_o::value_c"); } @@ -19288,6 +23572,9 @@ SRSASN_CODE error_ind_ies_o::value_c::pack(bit_ref& bref) const case types::crit_diagnostics: HANDLE_CODE(c.get().pack(bref)); break; + case types::s_tmsi: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "error_ind_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -19310,6 +23597,9 @@ SRSASN_CODE error_ind_ies_o::value_c::unpack(cbit_ref& bref) case types::crit_diagnostics: HANDLE_CODE(c.get().unpack(bref)); break; + case types::s_tmsi: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "error_ind_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -19320,8 +23610,8 @@ SRSASN_CODE error_ind_ies_o::value_c::unpack(cbit_ref& bref) std::string error_ind_ies_o::value_c::types_opts::to_string() const { static const char* options[] = { - "INTEGER (0..4294967295)", "INTEGER (0..16777215)", "Cause", "CriticalityDiagnostics"}; - return convert_enum_idx(options, 4, value, "error_ind_ies_o::value_c::types"); + "INTEGER (0..4294967295)", "INTEGER (0..16777215)", "Cause", "CriticalityDiagnostics", "S-TMSI"}; + return convert_enum_idx(options, 5, value, "error_ind_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -19330,7 +23620,8 @@ error_ind_ies_container::error_ind_ies_container() : mme_ue_s1ap_id(0, crit_e::ignore), enb_ue_s1ap_id(8, crit_e::ignore), cause(2, crit_e::ignore), - crit_diagnostics(58, crit_e::ignore) + crit_diagnostics(58, crit_e::ignore), + s_tmsi(96, crit_e::ignore) {} SRSASN_CODE error_ind_ies_container::pack(bit_ref& bref) const { @@ -19339,6 +23630,7 @@ SRSASN_CODE error_ind_ies_container::pack(bit_ref& bref) const nof_ies += enb_ue_s1ap_id_present ? 1 : 0; nof_ies += cause_present ? 1 : 0; nof_ies += crit_diagnostics_present ? 1 : 0; + nof_ies += s_tmsi_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); if (mme_ue_s1ap_id_present) { @@ -19353,6 +23645,9 @@ SRSASN_CODE error_ind_ies_container::pack(bit_ref& bref) const if (crit_diagnostics_present) { HANDLE_CODE(crit_diagnostics.pack(bref)); } + if (s_tmsi_present) { + HANDLE_CODE(s_tmsi.pack(bref)); + } return SRSASN_SUCCESS; } @@ -19389,6 +23684,12 @@ SRSASN_CODE error_ind_ies_container::unpack(cbit_ref& bref) crit_diagnostics.crit = c.crit; crit_diagnostics.value = c.value.crit_diagnostics(); break; + case 96: + s_tmsi_present = true; + s_tmsi.id = c.id; + s_tmsi.crit = c.crit; + s_tmsi.value = c.value.s_tmsi(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -19416,6 +23717,10 @@ void error_ind_ies_container::to_json(json_writer& j) const j.write_fieldname(""); crit_diagnostics.to_json(j); } + if (s_tmsi_present) { + j.write_fieldname(""); + s_tmsi.to_json(j); + } j.end_obj(); } @@ -20456,8 +24761,21 @@ void ho_cancel_ack_s::to_json(json_writer& j) const // HandoverType ::= ENUMERATED std::string handov_type_opts::to_string() const { - static const char* options[] = {"intralte", "ltetoutran", "ltetogeran", "utrantolte", "gerantolte"}; - return convert_enum_idx(options, 5, value, "handov_type_e"); + static const char* options[] = { + "intralte", "ltetoutran", "ltetogeran", "utrantolte", "gerantolte", "eps-to-5gs", "fivegs-to-eps"}; + return convert_enum_idx(options, 7, value, "handov_type_e"); +} +int8_t handov_type_opts::to_number() const +{ + switch (value) { + case eps_to_minus5gs: + return -5; + case fivegs_to_eps: + return 5; + default: + invalid_enum_number(value, "handov_type_e"); + } + return 0; } // HandoverCommandIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -21447,12 +25765,12 @@ void ho_fail_s::to_json(json_writer& j) const // HandoverNotifyIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t ho_notify_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 100, 67, 176, 186}; - return map_enum_number(options, 6, idx, "id"); + static const uint32_t options[] = {0, 8, 100, 67, 176, 186, 288}; + return map_enum_number(options, 7, idx, "id"); } bool ho_notify_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 100, 67, 176, 186}; + static const uint32_t options[] = {0, 8, 100, 67, 176, 186, 288}; for (const auto& o : options) { if (o == id) { return true; @@ -21475,6 +25793,8 @@ crit_e ho_notify_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 186: return crit_e::ignore; + case 288: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -21502,6 +25822,9 @@ ho_notify_ies_o::value_c ho_notify_ies_o::get_value(const uint32_t& id) case 186: ret.set(value_c::types::lhn_id); break; + case 288: + ret.set(value_c::types::ps_cell_info); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -21522,6 +25845,8 @@ presence_e ho_notify_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 186: return presence_e::optional; + case 288: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -21559,6 +25884,11 @@ bounded_octstring<32, 256, true>& ho_notify_ies_o::value_c::lhn_id() assert_choice_type("OCTET STRING", type_.to_string(), "Value"); return c.get >(); } +ps_cell_info_s& ho_notify_ies_o::value_c::ps_cell_info() +{ + assert_choice_type("PSCellInformation", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& ho_notify_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -21589,6 +25919,11 @@ const bounded_octstring<32, 256, true>& ho_notify_ies_o::value_c::lhn_id() const assert_choice_type("OCTET STRING", type_.to_string(), "Value"); return c.get >(); } +const ps_cell_info_s& ho_notify_ies_o::value_c::ps_cell_info() const +{ + assert_choice_type("PSCellInformation", type_.to_string(), "Value"); + return c.get(); +} void ho_notify_ies_o::value_c::destroy_() { switch (type_) { @@ -21604,6 +25939,9 @@ void ho_notify_ies_o::value_c::destroy_() case types::lhn_id: c.destroy >(); break; + case types::ps_cell_info: + c.destroy(); + break; default: break; } @@ -21629,6 +25967,9 @@ void ho_notify_ies_o::value_c::set(types::options e) case types::lhn_id: c.init >(); break; + case types::ps_cell_info: + c.init(); + break; case types::nulltype: break; default: @@ -21657,6 +25998,9 @@ ho_notify_ies_o::value_c::value_c(const ho_notify_ies_o::value_c& other) case types::lhn_id: c.init(other.c.get >()); break; + case types::ps_cell_info: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -21688,6 +26032,9 @@ ho_notify_ies_o::value_c& ho_notify_ies_o::value_c::operator=(const ho_notify_ie case types::lhn_id: c.set(other.c.get >()); break; + case types::ps_cell_info: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -21721,6 +26068,10 @@ void ho_notify_ies_o::value_c::to_json(json_writer& j) const case types::lhn_id: j.write_str("OCTET STRING", c.get >().to_string()); break; + case types::ps_cell_info: + j.write_fieldname("PSCellInformation"); + c.get().to_json(j); + break; default: log_invalid_choice_id(type_, "ho_notify_ies_o::value_c"); } @@ -21748,6 +26099,9 @@ SRSASN_CODE ho_notify_ies_o::value_c::pack(bit_ref& bref) const case types::lhn_id: HANDLE_CODE((c.get >().pack(bref))); break; + case types::ps_cell_info: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "ho_notify_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -21776,6 +26130,9 @@ SRSASN_CODE ho_notify_ies_o::value_c::unpack(cbit_ref& bref) case types::lhn_id: HANDLE_CODE((c.get >().unpack(bref))); break; + case types::ps_cell_info: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "ho_notify_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -21785,9 +26142,14 @@ SRSASN_CODE ho_notify_ies_o::value_c::unpack(cbit_ref& bref) std::string ho_notify_ies_o::value_c::types_opts::to_string() const { - static const char* options[] = { - "INTEGER (0..4294967295)", "INTEGER (0..16777215)", "EUTRAN-CGI", "TAI", "TunnelInformation", "OCTET STRING"}; - return convert_enum_idx(options, 6, value, "ho_notify_ies_o::value_c::types"); + static const char* options[] = {"INTEGER (0..4294967295)", + "INTEGER (0..16777215)", + "EUTRAN-CGI", + "TAI", + "TunnelInformation", + "OCTET STRING", + "PSCellInformation"}; + return convert_enum_idx(options, 7, value, "ho_notify_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -21798,13 +26160,15 @@ ho_notify_ies_container::ho_notify_ies_container() : eutran_cgi(100, crit_e::ignore), tai(67, crit_e::ignore), tunnel_info_for_bbf(176, crit_e::ignore), - lhn_id(186, crit_e::ignore) + lhn_id(186, crit_e::ignore), + ps_cell_info(288, crit_e::ignore) {} SRSASN_CODE ho_notify_ies_container::pack(bit_ref& bref) const { uint32_t nof_ies = 4; nof_ies += tunnel_info_for_bbf_present ? 1 : 0; nof_ies += lhn_id_present ? 1 : 0; + nof_ies += ps_cell_info_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -21817,6 +26181,9 @@ SRSASN_CODE ho_notify_ies_container::pack(bit_ref& bref) const if (lhn_id_present) { HANDLE_CODE(lhn_id.pack(bref)); } + if (ps_cell_info_present) { + HANDLE_CODE(ps_cell_info.pack(bref)); + } return SRSASN_SUCCESS; } @@ -21867,6 +26234,12 @@ SRSASN_CODE ho_notify_ies_container::unpack(cbit_ref& bref) lhn_id.crit = c.crit; lhn_id.value = c.value.lhn_id(); break; + case 288: + ps_cell_info_present = true; + ps_cell_info.id = c.id; + ps_cell_info.crit = c.crit; + ps_cell_info.value = c.value.ps_cell_info(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -21898,6 +26271,10 @@ void ho_notify_ies_container::to_json(json_writer& j) const j.write_fieldname(""); lhn_id.to_json(j); } + if (ps_cell_info_present) { + j.write_fieldname(""); + ps_cell_info.to_json(j); + } j.end_obj(); } @@ -22383,13 +26760,14 @@ uint16_t logging_interv_opts::to_number() const // M3period ::= ENUMERATED std::string m3period_opts::to_string() const { - static const char* options[] = {"ms100", "ms1000", "ms10000"}; - return convert_enum_idx(options, 3, value, "m3period_e"); + static const char* options[] = { + "ms100", "ms1000", "ms10000", "ms1024", "ms1280", "ms2048", "ms2560", "ms5120", "ms10240", "min1"}; + return convert_enum_idx(options, 10, value, "m3period_e"); } uint16_t m3period_opts::to_number() const { - static const uint16_t options[] = {100, 1000, 10000}; - return map_enum_number(options, 3, value, "m3period_e"); + static const uint16_t options[] = {100, 1000, 10000, 1024, 1280, 2048, 2560, 5120, 10240, 1}; + return map_enum_number(options, 10, value, "m3period_e"); } // M4period ::= ENUMERATED @@ -22441,6 +26819,13 @@ uint16_t m6report_interv_opts::to_number() const return map_enum_number(options, 4, value, "m6report_interv_e"); } +// WLANMeasConfig ::= ENUMERATED +std::string wlan_meas_cfg_opts::to_string() const +{ + static const char* options[] = {"setup"}; + return convert_enum_idx(options, 1, value, "wlan_meas_cfg_e"); +} + // LoggedMBSFNMDT ::= SEQUENCE SRSASN_CODE logged_mbsfnmdt_s::pack(bit_ref& bref) const { @@ -22834,15 +27219,100 @@ uint16_t report_interv_mdt_opts::to_number() const return map_enum_number(options, 13, value, "report_interv_mdt_e"); } +// WLANMeasurementConfiguration ::= SEQUENCE +SRSASN_CODE wlan_meas_cfg_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(wlan_meas_cfg_name_list_present, 1)); + HANDLE_CODE(bref.pack(wlan_rssi_present, 1)); + HANDLE_CODE(bref.pack(wlan_rtt_present, 1)); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(wlan_meas_cfg.pack(bref)); + if (wlan_meas_cfg_name_list_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, wlan_meas_cfg_name_list, 1, 4, true)); + } + if (wlan_rssi_present) { + HANDLE_CODE(wlan_rssi.pack(bref)); + } + if (wlan_rtt_present) { + HANDLE_CODE(wlan_rtt.pack(bref)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE wlan_meas_cfg_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(wlan_meas_cfg_name_list_present, 1)); + HANDLE_CODE(bref.unpack(wlan_rssi_present, 1)); + HANDLE_CODE(bref.unpack(wlan_rtt_present, 1)); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(wlan_meas_cfg.unpack(bref)); + if (wlan_meas_cfg_name_list_present) { + HANDLE_CODE(unpack_dyn_seq_of(wlan_meas_cfg_name_list, bref, 1, 4, true)); + } + if (wlan_rssi_present) { + HANDLE_CODE(wlan_rssi.unpack(bref)); + } + if (wlan_rtt_present) { + HANDLE_CODE(wlan_rtt.unpack(bref)); + } + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void wlan_meas_cfg_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("wlanMeasConfig", "setup"); + if (wlan_meas_cfg_name_list_present) { + j.start_array("wlanMeasConfigNameList"); + for (const auto& e1 : wlan_meas_cfg_name_list) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (wlan_rssi_present) { + j.write_str("wlan-rssi", "true"); + } + if (wlan_rtt_present) { + j.write_str("wlan-rtt", "true"); + } + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + +std::string wlan_meas_cfg_s::wlan_rssi_opts::to_string() const +{ + static const char* options[] = {"true"}; + return convert_enum_idx(options, 1, value, "wlan_meas_cfg_s::wlan_rssi_e_"); +} + +std::string wlan_meas_cfg_s::wlan_rtt_opts::to_string() const +{ + static const char* options[] = {"true"}; + return convert_enum_idx(options, 1, value, "wlan_meas_cfg_s::wlan_rtt_e_"); +} + // ImmediateMDT-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION uint32_t immediate_mdt_ext_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {171, 172, 173, 174, 220, 221}; - return map_enum_number(options, 6, idx, "id"); + static const uint32_t options[] = {171, 172, 173, 174, 220, 221, 284, 285}; + return map_enum_number(options, 8, idx, "id"); } bool immediate_mdt_ext_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {171, 172, 173, 174, 220, 221}; + static const uint32_t options[] = {171, 172, 173, 174, 220, 221, 284, 285}; for (const auto& o : options) { if (o == id) { return true; @@ -22865,6 +27335,10 @@ crit_e immediate_mdt_ext_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 221: return crit_e::ignore; + case 284: + return crit_e::ignore; + case 285: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -22892,6 +27366,12 @@ immediate_mdt_ext_ies_o::ext_c immediate_mdt_ext_ies_o::get_ext(const uint32_t& case 221: ret.set(ext_c::types::m7_cfg); break; + case 284: + ret.set(ext_c::types::bluetooth_meas_cfg); + break; + case 285: + ret.set(ext_c::types::wlan_meas_cfg); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -22912,6 +27392,10 @@ presence_e immediate_mdt_ext_ies_o::get_presence(const uint32_t& id) return presence_e::conditional; case 221: return presence_e::conditional; + case 284: + return presence_e::optional; + case 285: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -22949,6 +27433,16 @@ m7_cfg_s& immediate_mdt_ext_ies_o::ext_c::m7_cfg() assert_choice_type("M7Configuration", type_.to_string(), "Extension"); return c.get(); } +bluetooth_meas_cfg_s& immediate_mdt_ext_ies_o::ext_c::bluetooth_meas_cfg() +{ + assert_choice_type("BluetoothMeasurementConfiguration", type_.to_string(), "Extension"); + return c.get(); +} +wlan_meas_cfg_s& immediate_mdt_ext_ies_o::ext_c::wlan_meas_cfg() +{ + assert_choice_type("WLANMeasurementConfiguration", type_.to_string(), "Extension"); + return c.get(); +} const m3_cfg_s& immediate_mdt_ext_ies_o::ext_c::m3_cfg() const { assert_choice_type("M3Configuration", type_.to_string(), "Extension"); @@ -22979,6 +27473,16 @@ const m7_cfg_s& immediate_mdt_ext_ies_o::ext_c::m7_cfg() const assert_choice_type("M7Configuration", type_.to_string(), "Extension"); return c.get(); } +const bluetooth_meas_cfg_s& immediate_mdt_ext_ies_o::ext_c::bluetooth_meas_cfg() const +{ + assert_choice_type("BluetoothMeasurementConfiguration", type_.to_string(), "Extension"); + return c.get(); +} +const wlan_meas_cfg_s& immediate_mdt_ext_ies_o::ext_c::wlan_meas_cfg() const +{ + assert_choice_type("WLANMeasurementConfiguration", type_.to_string(), "Extension"); + return c.get(); +} void immediate_mdt_ext_ies_o::ext_c::destroy_() { switch (type_) { @@ -23000,6 +27504,12 @@ void immediate_mdt_ext_ies_o::ext_c::destroy_() case types::m7_cfg: c.destroy(); break; + case types::bluetooth_meas_cfg: + c.destroy(); + break; + case types::wlan_meas_cfg: + c.destroy(); + break; default: break; } @@ -23027,6 +27537,12 @@ void immediate_mdt_ext_ies_o::ext_c::set(types::options e) case types::m7_cfg: c.init(); break; + case types::bluetooth_meas_cfg: + c.init(); + break; + case types::wlan_meas_cfg: + c.init(); + break; case types::nulltype: break; default: @@ -23055,6 +27571,12 @@ immediate_mdt_ext_ies_o::ext_c::ext_c(const immediate_mdt_ext_ies_o::ext_c& othe case types::m7_cfg: c.init(other.c.get()); break; + case types::bluetooth_meas_cfg: + c.init(other.c.get()); + break; + case types::wlan_meas_cfg: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -23086,6 +27608,12 @@ immediate_mdt_ext_ies_o::ext_c& immediate_mdt_ext_ies_o::ext_c::operator=(const case types::m7_cfg: c.set(other.c.get()); break; + case types::bluetooth_meas_cfg: + c.set(other.c.get()); + break; + case types::wlan_meas_cfg: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -23121,6 +27649,14 @@ void immediate_mdt_ext_ies_o::ext_c::to_json(json_writer& j) const j.write_fieldname("M7Configuration"); c.get().to_json(j); break; + case types::bluetooth_meas_cfg: + j.write_fieldname("BluetoothMeasurementConfiguration"); + c.get().to_json(j); + break; + case types::wlan_meas_cfg: + j.write_fieldname("WLANMeasurementConfiguration"); + c.get().to_json(j); + break; default: log_invalid_choice_id(type_, "immediate_mdt_ext_ies_o::ext_c"); } @@ -23148,6 +27684,12 @@ SRSASN_CODE immediate_mdt_ext_ies_o::ext_c::pack(bit_ref& bref) const case types::m7_cfg: HANDLE_CODE(c.get().pack(bref)); break; + case types::bluetooth_meas_cfg: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::wlan_meas_cfg: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "immediate_mdt_ext_ies_o::ext_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -23176,6 +27718,12 @@ SRSASN_CODE immediate_mdt_ext_ies_o::ext_c::unpack(cbit_ref& bref) case types::m7_cfg: HANDLE_CODE(c.get().unpack(bref)); break; + case types::bluetooth_meas_cfg: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::wlan_meas_cfg: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "immediate_mdt_ext_ies_o::ext_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -23185,9 +27733,15 @@ SRSASN_CODE immediate_mdt_ext_ies_o::ext_c::unpack(cbit_ref& bref) std::string immediate_mdt_ext_ies_o::ext_c::types_opts::to_string() const { - static const char* options[] = { - "M3Configuration", "M4Configuration", "M5Configuration", "BIT STRING", "M6Configuration", "M7Configuration"}; - return convert_enum_idx(options, 6, value, "immediate_mdt_ext_ies_o::ext_c::types"); + static const char* options[] = {"M3Configuration", + "M4Configuration", + "M5Configuration", + "BIT STRING", + "M6Configuration", + "M7Configuration", + "BluetoothMeasurementConfiguration", + "WLANMeasurementConfiguration"}; + return convert_enum_idx(options, 8, value, "immediate_mdt_ext_ies_o::ext_c::types"); } uint8_t immediate_mdt_ext_ies_o::ext_c::types_opts::to_number() const { @@ -23208,6 +27762,206 @@ uint8_t immediate_mdt_ext_ies_o::ext_c::types_opts::to_number() const return 0; } +// LoggedMDT-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t logged_mdt_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {284, 285}; + return map_enum_number(options, 2, idx, "id"); +} +bool logged_mdt_ext_ies_o::is_id_valid(const uint32_t& id) +{ + static const uint32_t options[] = {284, 285}; + for (const auto& o : options) { + if (o == id) { + return true; + } + } + return false; +} +crit_e logged_mdt_ext_ies_o::get_crit(const uint32_t& id) +{ + switch (id) { + case 284: + return crit_e::ignore; + case 285: + return crit_e::ignore; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} +logged_mdt_ext_ies_o::ext_c logged_mdt_ext_ies_o::get_ext(const uint32_t& id) +{ + ext_c ret{}; + switch (id) { + case 284: + ret.set(ext_c::types::bluetooth_meas_cfg); + break; + case 285: + ret.set(ext_c::types::wlan_meas_cfg); + break; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e logged_mdt_ext_ies_o::get_presence(const uint32_t& id) +{ + switch (id) { + case 284: + return presence_e::optional; + case 285: + return presence_e::optional; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} + +// Extension ::= OPEN TYPE +bluetooth_meas_cfg_s& logged_mdt_ext_ies_o::ext_c::bluetooth_meas_cfg() +{ + assert_choice_type("BluetoothMeasurementConfiguration", type_.to_string(), "Extension"); + return c.get(); +} +wlan_meas_cfg_s& logged_mdt_ext_ies_o::ext_c::wlan_meas_cfg() +{ + assert_choice_type("WLANMeasurementConfiguration", type_.to_string(), "Extension"); + return c.get(); +} +const bluetooth_meas_cfg_s& logged_mdt_ext_ies_o::ext_c::bluetooth_meas_cfg() const +{ + assert_choice_type("BluetoothMeasurementConfiguration", type_.to_string(), "Extension"); + return c.get(); +} +const wlan_meas_cfg_s& logged_mdt_ext_ies_o::ext_c::wlan_meas_cfg() const +{ + assert_choice_type("WLANMeasurementConfiguration", type_.to_string(), "Extension"); + return c.get(); +} +void logged_mdt_ext_ies_o::ext_c::destroy_() +{ + switch (type_) { + case types::bluetooth_meas_cfg: + c.destroy(); + break; + case types::wlan_meas_cfg: + c.destroy(); + break; + default: + break; + } +} +void logged_mdt_ext_ies_o::ext_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::bluetooth_meas_cfg: + c.init(); + break; + case types::wlan_meas_cfg: + c.init(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "logged_mdt_ext_ies_o::ext_c"); + } +} +logged_mdt_ext_ies_o::ext_c::ext_c(const logged_mdt_ext_ies_o::ext_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::bluetooth_meas_cfg: + c.init(other.c.get()); + break; + case types::wlan_meas_cfg: + c.init(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "logged_mdt_ext_ies_o::ext_c"); + } +} +logged_mdt_ext_ies_o::ext_c& logged_mdt_ext_ies_o::ext_c::operator=(const logged_mdt_ext_ies_o::ext_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::bluetooth_meas_cfg: + c.set(other.c.get()); + break; + case types::wlan_meas_cfg: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "logged_mdt_ext_ies_o::ext_c"); + } + + return *this; +} +void logged_mdt_ext_ies_o::ext_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::bluetooth_meas_cfg: + j.write_fieldname("BluetoothMeasurementConfiguration"); + c.get().to_json(j); + break; + case types::wlan_meas_cfg: + j.write_fieldname("WLANMeasurementConfiguration"); + c.get().to_json(j); + break; + default: + log_invalid_choice_id(type_, "logged_mdt_ext_ies_o::ext_c"); + } + j.end_obj(); +} +SRSASN_CODE logged_mdt_ext_ies_o::ext_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + switch (type_) { + case types::bluetooth_meas_cfg: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::wlan_meas_cfg: + HANDLE_CODE(c.get().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "logged_mdt_ext_ies_o::ext_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE logged_mdt_ext_ies_o::ext_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + switch (type_) { + case types::bluetooth_meas_cfg: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::wlan_meas_cfg: + HANDLE_CODE(c.get().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "logged_mdt_ext_ies_o::ext_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +std::string logged_mdt_ext_ies_o::ext_c::types_opts::to_string() const +{ + static const char* options[] = {"BluetoothMeasurementConfiguration", "WLANMeasurementConfiguration"}; + return convert_enum_idx(options, 2, value, "logged_mdt_ext_ies_o::ext_c::types"); +} + // M1PeriodicReporting ::= SEQUENCE SRSASN_CODE m1_periodic_report_s::pack(bit_ref& bref) const { @@ -23361,7 +28115,9 @@ immediate_mdt_ext_ies_container::immediate_mdt_ext_ies_container() : m5_cfg(173, crit_e::ignore), mdt_location_info(174, crit_e::ignore), m6_cfg(220, crit_e::ignore), - m7_cfg(221, crit_e::ignore) + m7_cfg(221, crit_e::ignore), + bluetooth_meas_cfg(284, crit_e::ignore), + wlan_meas_cfg(285, crit_e::ignore) {} SRSASN_CODE immediate_mdt_ext_ies_container::pack(bit_ref& bref) const { @@ -23372,6 +28128,8 @@ SRSASN_CODE immediate_mdt_ext_ies_container::pack(bit_ref& bref) const nof_ies += mdt_location_info_present ? 1 : 0; nof_ies += m6_cfg_present ? 1 : 0; nof_ies += m7_cfg_present ? 1 : 0; + nof_ies += bluetooth_meas_cfg_present ? 1 : 0; + nof_ies += wlan_meas_cfg_present ? 1 : 0; pack_length(bref, nof_ies, 1u, 65535u, true); if (m3_cfg_present) { @@ -23392,6 +28150,12 @@ SRSASN_CODE immediate_mdt_ext_ies_container::pack(bit_ref& bref) const if (m7_cfg_present) { HANDLE_CODE(m7_cfg.pack(bref)); } + if (bluetooth_meas_cfg_present) { + HANDLE_CODE(bluetooth_meas_cfg.pack(bref)); + } + if (wlan_meas_cfg_present) { + HANDLE_CODE(wlan_meas_cfg.pack(bref)); + } return SRSASN_SUCCESS; } @@ -23440,6 +28204,18 @@ SRSASN_CODE immediate_mdt_ext_ies_container::unpack(cbit_ref& bref) m7_cfg.crit = c.crit; m7_cfg.ext = c.ext_value.m7_cfg(); break; + case 284: + bluetooth_meas_cfg_present = true; + bluetooth_meas_cfg.id = c.id; + bluetooth_meas_cfg.crit = c.crit; + bluetooth_meas_cfg.ext = c.ext_value.bluetooth_meas_cfg(); + break; + case 285: + wlan_meas_cfg_present = true; + wlan_meas_cfg.id = c.id; + wlan_meas_cfg.crit = c.crit; + wlan_meas_cfg.ext = c.ext_value.wlan_meas_cfg(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -23475,6 +28251,14 @@ void immediate_mdt_ext_ies_container::to_json(json_writer& j) const j.write_fieldname(""); m7_cfg.to_json(j); } + if (bluetooth_meas_cfg_present) { + j.write_fieldname(""); + bluetooth_meas_cfg.to_json(j); + } + if (wlan_meas_cfg_present) { + j.write_fieldname(""); + wlan_meas_cfg.to_json(j); + } j.end_obj(); } @@ -23541,6 +28325,70 @@ void immediate_mdt_s::to_json(json_writer& j) const j.end_obj(); } +template struct asn1::s1ap::protocol_ext_field_s; + +logged_mdt_ext_ies_container::logged_mdt_ext_ies_container() : + bluetooth_meas_cfg(284, crit_e::ignore), wlan_meas_cfg(285, crit_e::ignore) +{} +SRSASN_CODE logged_mdt_ext_ies_container::pack(bit_ref& bref) const +{ + uint32_t nof_ies = 0; + nof_ies += bluetooth_meas_cfg_present ? 1 : 0; + nof_ies += wlan_meas_cfg_present ? 1 : 0; + pack_length(bref, nof_ies, 1u, 65535u, true); + + if (bluetooth_meas_cfg_present) { + HANDLE_CODE(bluetooth_meas_cfg.pack(bref)); + } + if (wlan_meas_cfg_present) { + HANDLE_CODE(wlan_meas_cfg.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE logged_mdt_ext_ies_container::unpack(cbit_ref& bref) +{ + uint32_t nof_ies = 0; + unpack_length(nof_ies, bref, 1u, 65535u, true); + + for (; nof_ies > 0; --nof_ies) { + protocol_ext_field_s c; + HANDLE_CODE(c.unpack(bref)); + switch (c.id) { + case 284: + bluetooth_meas_cfg_present = true; + bluetooth_meas_cfg.id = c.id; + bluetooth_meas_cfg.crit = c.crit; + bluetooth_meas_cfg.ext = c.ext_value.bluetooth_meas_cfg(); + break; + case 285: + wlan_meas_cfg_present = true; + wlan_meas_cfg.id = c.id; + wlan_meas_cfg.crit = c.crit; + wlan_meas_cfg.ext = c.ext_value.wlan_meas_cfg(); + break; + default: + asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); + return SRSASN_ERROR_DECODE_FAIL; + } + } + + return SRSASN_SUCCESS; +} +void logged_mdt_ext_ies_container::to_json(json_writer& j) const +{ + j.start_obj(); + if (bluetooth_meas_cfg_present) { + j.write_fieldname(""); + bluetooth_meas_cfg.to_json(j); + } + if (wlan_meas_cfg_present) { + j.write_fieldname(""); + wlan_meas_cfg.to_json(j); + } + j.end_obj(); +} + // LoggedMDT ::= SEQUENCE SRSASN_CODE logged_mdt_s::pack(bit_ref& bref) const { @@ -23582,6 +28430,13 @@ void logged_mdt_s::to_json(json_writer& j) const template struct asn1::s1ap::protocol_ie_single_container_s; +// ServiceType ::= ENUMERATED +std::string service_type_opts::to_string() const +{ + static const char* options[] = {"qMC-for-streaming-service", "qMC-for-MTSI-service"}; + return convert_enum_idx(options, 2, value, "service_type_e"); +} + // MDT-Activation ::= ENUMERATED std::string mdt_activation_opts::to_string() const { @@ -23805,6 +28660,67 @@ std::string mdt_mode_c::types_opts::to_string() const return convert_enum_idx(options, 3, value, "mdt_mode_c::types"); } +// UEAppLayerMeasConfig-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t ue_app_layer_meas_cfg_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {276}; + return map_enum_number(options, 1, idx, "id"); +} +bool ue_app_layer_meas_cfg_ext_ies_o::is_id_valid(const uint32_t& id) +{ + return 276 == id; +} +crit_e ue_app_layer_meas_cfg_ext_ies_o::get_crit(const uint32_t& id) +{ + if (id == 276) { + return crit_e::ignore; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} +ue_app_layer_meas_cfg_ext_ies_o::ext_c ue_app_layer_meas_cfg_ext_ies_o::get_ext(const uint32_t& id) +{ + ext_c ret{}; + if (id != 276) { + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e ue_app_layer_meas_cfg_ext_ies_o::get_presence(const uint32_t& id) +{ + if (id == 276) { + return presence_e::optional; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} + +// Extension ::= OPEN TYPE +void ue_app_layer_meas_cfg_ext_ies_o::ext_c::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("ServiceType", c.to_string()); + j.end_obj(); +} +SRSASN_CODE ue_app_layer_meas_cfg_ext_ies_o::ext_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_app_layer_meas_cfg_ext_ies_o::ext_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string ue_app_layer_meas_cfg_ext_ies_o::ext_c::types_opts::to_string() const +{ + static const char* options[] = {"ServiceType"}; + return convert_enum_idx(options, 1, value, "ue_app_layer_meas_cfg_ext_ies_o::ext_c::types"); +} + // MDT-Configuration ::= SEQUENCE SRSASN_CODE mdt_cfg_s::pack(bit_ref& bref) const { @@ -23855,6 +28771,52 @@ std::string pro_se_ueto_network_relaying_opts::to_string() const return convert_enum_idx(options, 2, value, "pro_se_ueto_network_relaying_e"); } +// RequestTypeAdditionalInfo ::= ENUMERATED +std::string request_type_add_info_opts::to_string() const +{ + static const char* options[] = {"includePSCell"}; + return convert_enum_idx(options, 1, value, "request_type_add_info_e"); +} + +// UEAppLayerMeasConfig ::= SEQUENCE +SRSASN_CODE ue_app_layer_meas_cfg_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(container_for_app_layer_meas_cfg.pack(bref)); + HANDLE_CODE(area_scope_of_qmc.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_app_layer_meas_cfg_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(container_for_app_layer_meas_cfg.unpack(bref)); + HANDLE_CODE(area_scope_of_qmc.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); + } + + return SRSASN_SUCCESS; +} +void ue_app_layer_meas_cfg_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("containerForAppLayerMeasConfig", container_for_app_layer_meas_cfg.to_string()); + j.write_fieldname("areaScopeOfQMC"); + area_scope_of_qmc.to_json(j); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + } + j.end_obj(); +} + // EventType ::= ENUMERATED std::string event_type_opts::to_string() const { @@ -23956,35 +28918,35 @@ std::string report_area_opts::to_string() const return convert_enum_idx(options, 1, value, "report_area_e"); } -// TraceActivation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION -uint32_t trace_activation_ext_ies_o::idx_to_id(uint32_t idx) +// RequestType-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t request_type_ext_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {162}; + static const uint32_t options[] = {298}; return map_enum_number(options, 1, idx, "id"); } -bool trace_activation_ext_ies_o::is_id_valid(const uint32_t& id) +bool request_type_ext_ies_o::is_id_valid(const uint32_t& id) { - return 162 == id; + return 298 == id; } -crit_e trace_activation_ext_ies_o::get_crit(const uint32_t& id) +crit_e request_type_ext_ies_o::get_crit(const uint32_t& id) { - if (id == 162) { + if (id == 298) { return crit_e::ignore; } asn1::log_error("The id=%d is not recognized", id); return {}; } -trace_activation_ext_ies_o::ext_c trace_activation_ext_ies_o::get_ext(const uint32_t& id) +request_type_ext_ies_o::ext_c request_type_ext_ies_o::get_ext(const uint32_t& id) { ext_c ret{}; - if (id != 162) { + if (id != 298) { asn1::log_error("The id=%d is not recognized", id); } return ret; } -presence_e trace_activation_ext_ies_o::get_presence(const uint32_t& id) +presence_e request_type_ext_ies_o::get_presence(const uint32_t& id) { - if (id == 162) { + if (id == 298) { return presence_e::optional; } asn1::log_error("The id=%d is not recognized", id); @@ -23992,30 +28954,230 @@ presence_e trace_activation_ext_ies_o::get_presence(const uint32_t& id) } // Extension ::= OPEN TYPE +void request_type_ext_ies_o::ext_c::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("RequestTypeAdditionalInfo", "includePSCell"); + j.end_obj(); +} +SRSASN_CODE request_type_ext_ies_o::ext_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE request_type_ext_ies_o::ext_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string request_type_ext_ies_o::ext_c::types_opts::to_string() const +{ + static const char* options[] = {"RequestTypeAdditionalInfo"}; + return convert_enum_idx(options, 1, value, "request_type_ext_ies_o::ext_c::types"); +} + +// TraceActivation-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t trace_activation_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {162, 262}; + return map_enum_number(options, 2, idx, "id"); +} +bool trace_activation_ext_ies_o::is_id_valid(const uint32_t& id) +{ + static const uint32_t options[] = {162, 262}; + for (const auto& o : options) { + if (o == id) { + return true; + } + } + return false; +} +crit_e trace_activation_ext_ies_o::get_crit(const uint32_t& id) +{ + switch (id) { + case 162: + return crit_e::ignore; + case 262: + return crit_e::ignore; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} +trace_activation_ext_ies_o::ext_c trace_activation_ext_ies_o::get_ext(const uint32_t& id) +{ + ext_c ret{}; + switch (id) { + case 162: + ret.set(ext_c::types::mdt_cfg); + break; + case 262: + ret.set(ext_c::types::ue_app_layer_meas_cfg); + break; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e trace_activation_ext_ies_o::get_presence(const uint32_t& id) +{ + switch (id) { + case 162: + return presence_e::optional; + case 262: + return presence_e::optional; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} + +// Extension ::= OPEN TYPE +mdt_cfg_s& trace_activation_ext_ies_o::ext_c::mdt_cfg() +{ + assert_choice_type("MDT-Configuration", type_.to_string(), "Extension"); + return c.get(); +} +ue_app_layer_meas_cfg_s& trace_activation_ext_ies_o::ext_c::ue_app_layer_meas_cfg() +{ + assert_choice_type("UEAppLayerMeasConfig", type_.to_string(), "Extension"); + return c.get(); +} +const mdt_cfg_s& trace_activation_ext_ies_o::ext_c::mdt_cfg() const +{ + assert_choice_type("MDT-Configuration", type_.to_string(), "Extension"); + return c.get(); +} +const ue_app_layer_meas_cfg_s& trace_activation_ext_ies_o::ext_c::ue_app_layer_meas_cfg() const +{ + assert_choice_type("UEAppLayerMeasConfig", type_.to_string(), "Extension"); + return c.get(); +} +void trace_activation_ext_ies_o::ext_c::destroy_() +{ + switch (type_) { + case types::mdt_cfg: + c.destroy(); + break; + case types::ue_app_layer_meas_cfg: + c.destroy(); + break; + default: + break; + } +} +void trace_activation_ext_ies_o::ext_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::mdt_cfg: + c.init(); + break; + case types::ue_app_layer_meas_cfg: + c.init(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "trace_activation_ext_ies_o::ext_c"); + } +} +trace_activation_ext_ies_o::ext_c::ext_c(const trace_activation_ext_ies_o::ext_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::mdt_cfg: + c.init(other.c.get()); + break; + case types::ue_app_layer_meas_cfg: + c.init(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "trace_activation_ext_ies_o::ext_c"); + } +} +trace_activation_ext_ies_o::ext_c& +trace_activation_ext_ies_o::ext_c::operator=(const trace_activation_ext_ies_o::ext_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::mdt_cfg: + c.set(other.c.get()); + break; + case types::ue_app_layer_meas_cfg: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "trace_activation_ext_ies_o::ext_c"); + } + + return *this; +} void trace_activation_ext_ies_o::ext_c::to_json(json_writer& j) const { j.start_obj(); - j.write_fieldname("MDT-Configuration"); - c.to_json(j); + switch (type_) { + case types::mdt_cfg: + j.write_fieldname("MDT-Configuration"); + c.get().to_json(j); + break; + case types::ue_app_layer_meas_cfg: + j.write_fieldname("UEAppLayerMeasConfig"); + c.get().to_json(j); + break; + default: + log_invalid_choice_id(type_, "trace_activation_ext_ies_o::ext_c"); + } j.end_obj(); } SRSASN_CODE trace_activation_ext_ies_o::ext_c::pack(bit_ref& bref) const { varlength_field_pack_guard varlen_scope(bref, true); - HANDLE_CODE(c.pack(bref)); + switch (type_) { + case types::mdt_cfg: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::ue_app_layer_meas_cfg: + HANDLE_CODE(c.get().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "trace_activation_ext_ies_o::ext_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } return SRSASN_SUCCESS; } SRSASN_CODE trace_activation_ext_ies_o::ext_c::unpack(cbit_ref& bref) { varlength_field_unpack_guard varlen_scope(bref, true); - HANDLE_CODE(c.unpack(bref)); + switch (type_) { + case types::mdt_cfg: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::ue_app_layer_meas_cfg: + HANDLE_CODE(c.get().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "trace_activation_ext_ies_o::ext_c"); + return SRSASN_ERROR_DECODE_FAIL; + } return SRSASN_SUCCESS; } std::string trace_activation_ext_ies_o::ext_c::types_opts::to_string() const { - static const char* options[] = {"MDT-Configuration"}; - return convert_enum_idx(options, 1, value, "trace_activation_ext_ies_o::ext_c::types"); + static const char* options[] = {"MDT-Configuration", "UEAppLayerMeasConfig"}; + return convert_enum_idx(options, 2, value, "trace_activation_ext_ies_o::ext_c::types"); } // TraceDepth ::= ENUMERATED @@ -24037,6 +29199,13 @@ std::string vehicle_ue_opts::to_string() const return convert_enum_idx(options, 2, value, "vehicle_ue_e"); } +// AerialUEsubscriptionInformation ::= ENUMERATED +std::string aerial_uesubscription_info_opts::to_string() const +{ + static const char* options[] = {"allowed", "not-allowed"}; + return convert_enum_idx(options, 2, value, "aerial_uesubscription_info_e"); +} + // ManagementBasedMDTAllowed ::= ENUMERATED std::string management_based_mdt_allowed_opts::to_string() const { @@ -24107,7 +29276,7 @@ SRSASN_CODE request_type_s::pack(bit_ref& bref) const HANDLE_CODE(event_type.pack(bref)); HANDLE_CODE(report_area.pack(bref)); if (ie_exts_present) { - HANDLE_CODE(ie_exts.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); } return SRSASN_SUCCESS; @@ -24120,7 +29289,7 @@ SRSASN_CODE request_type_s::unpack(cbit_ref& bref) HANDLE_CODE(event_type.unpack(bref)); HANDLE_CODE(report_area.unpack(bref)); if (ie_exts_present) { - HANDLE_CODE(ie_exts.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); } return SRSASN_SUCCESS; @@ -24132,7 +29301,6 @@ void request_type_s::to_json(json_writer& j) const j.write_str("reportArea", "ecgi"); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); - ie_exts.to_json(j); } j.end_obj(); } @@ -24176,6 +29344,70 @@ void security_context_s::to_json(json_writer& j) const j.end_obj(); } +template struct asn1::s1ap::protocol_ext_field_s; + +trace_activation_ext_ies_container::trace_activation_ext_ies_container() : + mdt_cfg(162, crit_e::ignore), ue_app_layer_meas_cfg(262, crit_e::ignore) +{} +SRSASN_CODE trace_activation_ext_ies_container::pack(bit_ref& bref) const +{ + uint32_t nof_ies = 0; + nof_ies += mdt_cfg_present ? 1 : 0; + nof_ies += ue_app_layer_meas_cfg_present ? 1 : 0; + pack_length(bref, nof_ies, 1u, 65535u, true); + + if (mdt_cfg_present) { + HANDLE_CODE(mdt_cfg.pack(bref)); + } + if (ue_app_layer_meas_cfg_present) { + HANDLE_CODE(ue_app_layer_meas_cfg.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE trace_activation_ext_ies_container::unpack(cbit_ref& bref) +{ + uint32_t nof_ies = 0; + unpack_length(nof_ies, bref, 1u, 65535u, true); + + for (; nof_ies > 0; --nof_ies) { + protocol_ext_field_s c; + HANDLE_CODE(c.unpack(bref)); + switch (c.id) { + case 162: + mdt_cfg_present = true; + mdt_cfg.id = c.id; + mdt_cfg.crit = c.crit; + mdt_cfg.ext = c.ext_value.mdt_cfg(); + break; + case 262: + ue_app_layer_meas_cfg_present = true; + ue_app_layer_meas_cfg.id = c.id; + ue_app_layer_meas_cfg.crit = c.crit; + ue_app_layer_meas_cfg.ext = c.ext_value.ue_app_layer_meas_cfg(); + break; + default: + asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); + return SRSASN_ERROR_DECODE_FAIL; + } + } + + return SRSASN_SUCCESS; +} +void trace_activation_ext_ies_container::to_json(json_writer& j) const +{ + j.start_obj(); + if (mdt_cfg_present) { + j.write_fieldname(""); + mdt_cfg.to_json(j); + } + if (ue_app_layer_meas_cfg_present) { + j.write_fieldname(""); + ue_app_layer_meas_cfg.to_json(j); + } + j.end_obj(); +} + // TraceActivation ::= SEQUENCE SRSASN_CODE trace_activation_s::pack(bit_ref& bref) const { @@ -24187,7 +29419,7 @@ SRSASN_CODE trace_activation_s::pack(bit_ref& bref) const HANDLE_CODE(trace_depth.pack(bref)); HANDLE_CODE(trace_collection_entity_ip_address.pack(bref)); if (ie_exts_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); + HANDLE_CODE(ie_exts.pack(bref)); } return SRSASN_SUCCESS; @@ -24202,7 +29434,7 @@ SRSASN_CODE trace_activation_s::unpack(cbit_ref& bref) HANDLE_CODE(trace_depth.unpack(bref)); HANDLE_CODE(trace_collection_entity_ip_address.unpack(bref)); if (ie_exts_present) { - HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); + HANDLE_CODE(ie_exts.unpack(bref)); } return SRSASN_SUCCESS; @@ -24216,6 +29448,7 @@ void trace_activation_s::to_json(json_writer& j) const j.write_str("traceCollectionEntityIPAddress", trace_collection_entity_ip_address.to_string()); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); } j.end_obj(); } @@ -24362,14 +29595,14 @@ void v2xservices_authorized_s::to_json(json_writer& j) const // HandoverRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t ho_request_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 1, 2, 66, 53, 104, 107, 41, 25, 98, 124, 40, 136, 127, - 146, 75, 158, 165, 177, 192, 196, 195, 241, 240, 248, 251, 271, 283}; - return map_enum_number(options, 28, idx, "id"); + static const uint32_t options[] = {0, 1, 2, 66, 53, 104, 107, 41, 25, 98, 124, 40, 136, 127, 146, 75, + 158, 165, 177, 192, 196, 195, 241, 240, 248, 251, 269, 271, 277, 283, 278, 299}; + return map_enum_number(options, 32, idx, "id"); } bool ho_request_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 1, 2, 66, 53, 104, 107, 41, 25, 98, 124, 40, 136, 127, - 146, 75, 158, 165, 177, 192, 196, 195, 241, 240, 248, 251, 271, 283}; + static const uint32_t options[] = {0, 1, 2, 66, 53, 104, 107, 41, 25, 98, 124, 40, 136, 127, 146, 75, + 158, 165, 177, 192, 196, 195, 241, 240, 248, 251, 269, 271, 277, 283, 278, 299}; for (const auto& o : options) { if (o == id) { return true; @@ -24432,10 +29665,18 @@ crit_e ho_request_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 251: return crit_e::ignore; + case 269: + return crit_e::ignore; case 271: return crit_e::ignore; + case 277: + return crit_e::ignore; case 283: return crit_e::ignore; + case 278: + return crit_e::ignore; + case 299: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -24523,12 +29764,24 @@ ho_request_ies_o::value_c ho_request_ies_o::get_value(const uint32_t& id) case 251: ret.set(value_c::types::enhanced_coverage_restricted); break; + case 269: + ret.set(value_c::types::nrue_security_cap); + break; case 271: ret.set(value_c::types::ce_mode_brestricted); break; + case 277: + ret.set(value_c::types::aerial_uesubscription_info); + break; case 283: ret.set(value_c::types::pending_data_ind); break; + case 278: + ret.set(value_c::types::subscription_based_ue_differentiation_info); + break; + case 299: + ret.set(value_c::types::add_rrm_prio_idx); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -24589,10 +29842,18 @@ presence_e ho_request_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 251: return presence_e::optional; + case 269: + return presence_e::optional; case 271: return presence_e::optional; + case 277: + return presence_e::optional; case 283: return presence_e::optional; + case 278: + return presence_e::optional; + case 299: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -24730,16 +29991,36 @@ enhanced_coverage_restricted_e& ho_request_ies_o::value_c::enhanced_coverage_res assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); return c.get(); } +nrue_security_cap_s& ho_request_ies_o::value_c::nrue_security_cap() +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} ce_mode_brestricted_e& ho_request_ies_o::value_c::ce_mode_brestricted() { assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); return c.get(); } +aerial_uesubscription_info_e& ho_request_ies_o::value_c::aerial_uesubscription_info() +{ + assert_choice_type("AerialUEsubscriptionInformation", type_.to_string(), "Value"); + return c.get(); +} pending_data_ind_e& ho_request_ies_o::value_c::pending_data_ind() { assert_choice_type("PendingDataIndication", type_.to_string(), "Value"); return c.get(); } +subscription_based_ue_differentiation_info_s& ho_request_ies_o::value_c::subscription_based_ue_differentiation_info() +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} +fixed_bitstring<32, false, true>& ho_request_ies_o::value_c::add_rrm_prio_idx() +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} const uint64_t& ho_request_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -24871,16 +30152,37 @@ const enhanced_coverage_restricted_e& ho_request_ies_o::value_c::enhanced_covera assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); return c.get(); } +const nrue_security_cap_s& ho_request_ies_o::value_c::nrue_security_cap() const +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} const ce_mode_brestricted_e& ho_request_ies_o::value_c::ce_mode_brestricted() const { assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); return c.get(); } +const aerial_uesubscription_info_e& ho_request_ies_o::value_c::aerial_uesubscription_info() const +{ + assert_choice_type("AerialUEsubscriptionInformation", type_.to_string(), "Value"); + return c.get(); +} const pending_data_ind_e& ho_request_ies_o::value_c::pending_data_ind() const { assert_choice_type("PendingDataIndication", type_.to_string(), "Value"); return c.get(); } +const subscription_based_ue_differentiation_info_s& +ho_request_ies_o::value_c::subscription_based_ue_differentiation_info() const +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} +const fixed_bitstring<32, false, true>& ho_request_ies_o::value_c::add_rrm_prio_idx() const +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} void ho_request_ies_o::value_c::destroy_() { switch (type_) { @@ -24938,6 +30240,15 @@ void ho_request_ies_o::value_c::destroy_() case types::ue_sidelink_aggregate_maximum_bitrate: c.destroy(); break; + case types::nrue_security_cap: + c.destroy(); + break; + case types::subscription_based_ue_differentiation_info: + c.destroy(); + break; + case types::add_rrm_prio_idx: + c.destroy >(); + break; default: break; } @@ -25017,10 +30328,21 @@ void ho_request_ies_o::value_c::set(types::options e) break; case types::enhanced_coverage_restricted: break; + case types::nrue_security_cap: + c.init(); + break; case types::ce_mode_brestricted: break; + case types::aerial_uesubscription_info: + break; case types::pending_data_ind: break; + case types::subscription_based_ue_differentiation_info: + c.init(); + break; + case types::add_rrm_prio_idx: + c.init >(); + break; case types::nulltype: break; default: @@ -25109,12 +30431,24 @@ ho_request_ies_o::value_c::value_c(const ho_request_ies_o::value_c& other) case types::enhanced_coverage_restricted: c.init(other.c.get()); break; + case types::nrue_security_cap: + c.init(other.c.get()); + break; case types::ce_mode_brestricted: c.init(other.c.get()); break; + case types::aerial_uesubscription_info: + c.init(other.c.get()); + break; case types::pending_data_ind: c.init(other.c.get()); break; + case types::subscription_based_ue_differentiation_info: + c.init(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.init(other.c.get >()); + break; case types::nulltype: break; default: @@ -25206,12 +30540,24 @@ ho_request_ies_o::value_c& ho_request_ies_o::value_c::operator=(const ho_request case types::enhanced_coverage_restricted: c.set(other.c.get()); break; + case types::nrue_security_cap: + c.set(other.c.get()); + break; case types::ce_mode_brestricted: c.set(other.c.get()); break; + case types::aerial_uesubscription_info: + c.set(other.c.get()); + break; case types::pending_data_ind: c.set(other.c.get()); break; + case types::subscription_based_ue_differentiation_info: + c.set(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.set(other.c.get >()); + break; case types::nulltype: break; default: @@ -25318,12 +30664,26 @@ void ho_request_ies_o::value_c::to_json(json_writer& j) const case types::enhanced_coverage_restricted: j.write_str("EnhancedCoverageRestricted", "restricted"); break; + case types::nrue_security_cap: + j.write_fieldname("NRUESecurityCapabilities"); + c.get().to_json(j); + break; case types::ce_mode_brestricted: j.write_str("CE-ModeBRestricted", c.get().to_string()); break; + case types::aerial_uesubscription_info: + j.write_str("AerialUEsubscriptionInformation", c.get().to_string()); + break; case types::pending_data_ind: j.write_str("PendingDataIndication", "true"); break; + case types::subscription_based_ue_differentiation_info: + j.write_fieldname("Subscription-Based-UE-DifferentiationInfo"); + c.get().to_json(j); + break; + case types::add_rrm_prio_idx: + j.write_str("BIT STRING", c.get >().to_string()); + break; default: log_invalid_choice_id(type_, "ho_request_ies_o::value_c"); } @@ -25412,12 +30772,24 @@ SRSASN_CODE ho_request_ies_o::value_c::pack(bit_ref& bref) const case types::enhanced_coverage_restricted: HANDLE_CODE(c.get().pack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().pack(bref)); + break; case types::ce_mode_brestricted: HANDLE_CODE(c.get().pack(bref)); break; + case types::aerial_uesubscription_info: + HANDLE_CODE(c.get().pack(bref)); + break; case types::pending_data_ind: HANDLE_CODE(c.get().pack(bref)); break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().pack(bref))); + break; default: log_invalid_choice_id(type_, "ho_request_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -25507,12 +30879,24 @@ SRSASN_CODE ho_request_ies_o::value_c::unpack(cbit_ref& bref) case types::enhanced_coverage_restricted: HANDLE_CODE(c.get().unpack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().unpack(bref)); + break; case types::ce_mode_brestricted: HANDLE_CODE(c.get().unpack(bref)); break; + case types::aerial_uesubscription_info: + HANDLE_CODE(c.get().unpack(bref)); + break; case types::pending_data_ind: HANDLE_CODE(c.get().unpack(bref)); break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().unpack(bref))); + break; default: log_invalid_choice_id(type_, "ho_request_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -25548,9 +30932,13 @@ std::string ho_request_ies_o::value_c::types_opts::to_string() const "V2XServicesAuthorized", "UESidelinkAggregateMaximumBitrate", "EnhancedCoverageRestricted", + "NRUESecurityCapabilities", "CE-ModeBRestricted", - "PendingDataIndication"}; - return convert_enum_idx(options, 28, value, "ho_request_ies_o::value_c::types"); + "AerialUEsubscriptionInformation", + "PendingDataIndication", + "Subscription-Based-UE-DifferentiationInfo", + "BIT STRING"}; + return convert_enum_idx(options, 32, value, "ho_request_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -25582,8 +30970,12 @@ ho_request_ies_container::ho_request_ies_container() : v2xservices_authorized(240, crit_e::ignore), ue_sidelink_aggregate_maximum_bitrate(248, crit_e::ignore), enhanced_coverage_restricted(251, crit_e::ignore), + nrue_security_cap(269, crit_e::ignore), ce_mode_brestricted(271, crit_e::ignore), - pending_data_ind(283, crit_e::ignore) + aerial_uesubscription_info(277, crit_e::ignore), + pending_data_ind(283, crit_e::ignore), + subscription_based_ue_differentiation_info(278, crit_e::ignore), + add_rrm_prio_idx(299, crit_e::ignore) {} SRSASN_CODE ho_request_ies_container::pack(bit_ref& bref) const { @@ -25606,8 +30998,12 @@ SRSASN_CODE ho_request_ies_container::pack(bit_ref& bref) const nof_ies += v2xservices_authorized_present ? 1 : 0; nof_ies += ue_sidelink_aggregate_maximum_bitrate_present ? 1 : 0; nof_ies += enhanced_coverage_restricted_present ? 1 : 0; + nof_ies += nrue_security_cap_present ? 1 : 0; nof_ies += ce_mode_brestricted_present ? 1 : 0; + nof_ies += aerial_uesubscription_info_present ? 1 : 0; nof_ies += pending_data_ind_present ? 1 : 0; + nof_ies += subscription_based_ue_differentiation_info_present ? 1 : 0; + nof_ies += add_rrm_prio_idx_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -25672,12 +31068,24 @@ SRSASN_CODE ho_request_ies_container::pack(bit_ref& bref) const if (enhanced_coverage_restricted_present) { HANDLE_CODE(enhanced_coverage_restricted.pack(bref)); } + if (nrue_security_cap_present) { + HANDLE_CODE(nrue_security_cap.pack(bref)); + } if (ce_mode_brestricted_present) { HANDLE_CODE(ce_mode_brestricted.pack(bref)); } + if (aerial_uesubscription_info_present) { + HANDLE_CODE(aerial_uesubscription_info.pack(bref)); + } if (pending_data_ind_present) { HANDLE_CODE(pending_data_ind.pack(bref)); } + if (subscription_based_ue_differentiation_info_present) { + HANDLE_CODE(subscription_based_ue_differentiation_info.pack(bref)); + } + if (add_rrm_prio_idx_present) { + HANDLE_CODE(add_rrm_prio_idx.pack(bref)); + } return SRSASN_SUCCESS; } @@ -25848,18 +31256,42 @@ SRSASN_CODE ho_request_ies_container::unpack(cbit_ref& bref) enhanced_coverage_restricted.crit = c.crit; enhanced_coverage_restricted.value = c.value.enhanced_coverage_restricted(); break; + case 269: + nrue_security_cap_present = true; + nrue_security_cap.id = c.id; + nrue_security_cap.crit = c.crit; + nrue_security_cap.value = c.value.nrue_security_cap(); + break; case 271: ce_mode_brestricted_present = true; ce_mode_brestricted.id = c.id; ce_mode_brestricted.crit = c.crit; ce_mode_brestricted.value = c.value.ce_mode_brestricted(); break; + case 277: + aerial_uesubscription_info_present = true; + aerial_uesubscription_info.id = c.id; + aerial_uesubscription_info.crit = c.crit; + aerial_uesubscription_info.value = c.value.aerial_uesubscription_info(); + break; case 283: pending_data_ind_present = true; pending_data_ind.id = c.id; pending_data_ind.crit = c.crit; pending_data_ind.value = c.value.pending_data_ind(); break; + case 278: + subscription_based_ue_differentiation_info_present = true; + subscription_based_ue_differentiation_info.id = c.id; + subscription_based_ue_differentiation_info.crit = c.crit; + subscription_based_ue_differentiation_info.value = c.value.subscription_based_ue_differentiation_info(); + break; + case 299: + add_rrm_prio_idx_present = true; + add_rrm_prio_idx.id = c.id; + add_rrm_prio_idx.crit = c.crit; + add_rrm_prio_idx.value = c.value.add_rrm_prio_idx(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -25963,14 +31395,30 @@ void ho_request_ies_container::to_json(json_writer& j) const j.write_fieldname(""); enhanced_coverage_restricted.to_json(j); } + if (nrue_security_cap_present) { + j.write_fieldname(""); + nrue_security_cap.to_json(j); + } if (ce_mode_brestricted_present) { j.write_fieldname(""); ce_mode_brestricted.to_json(j); } + if (aerial_uesubscription_info_present) { + j.write_fieldname(""); + aerial_uesubscription_info.to_json(j); + } if (pending_data_ind_present) { j.write_fieldname(""); pending_data_ind.to_json(j); } + if (subscription_based_ue_differentiation_info_present) { + j.write_fieldname(""); + subscription_based_ue_differentiation_info.to_json(j); + } + if (add_rrm_prio_idx_present) { + j.write_fieldname(""); + add_rrm_prio_idx.to_json(j); + } j.end_obj(); } @@ -26644,6 +32092,47 @@ void ho_request_ack_s::to_json(json_writer& j) const j.end_obj(); } +// TargetNgRanNode-ID ::= SEQUENCE +SRSASN_CODE target_ng_ran_node_id_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ie_exts_present, 1)); + + HANDLE_CODE(global_ran_node_id.pack(bref)); + HANDLE_CODE(sel_tai.pack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE target_ng_ran_node_id_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ie_exts_present, 1)); + + HANDLE_CODE(global_ran_node_id.unpack(bref)); + HANDLE_CODE(sel_tai.unpack(bref)); + if (ie_exts_present) { + HANDLE_CODE(ie_exts.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void target_ng_ran_node_id_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("global-RAN-NODE-ID"); + global_ran_node_id.to_json(j); + j.write_fieldname("selected-TAI"); + sel_tai.to_json(j); + if (ie_exts_present) { + j.write_fieldname("iE-Extensions"); + ie_exts.to_json(j); + } + j.end_obj(); +} + // Direct-Forwarding-Path-Availability ::= ENUMERATED std::string direct_forwarding_path_availability_opts::to_string() const { @@ -26678,6 +32167,9 @@ void target_id_c::destroy_() case types::cgi: c.destroy(); break; + case types::targetg_ng_ran_node_id: + c.destroy(); + break; default: break; } @@ -26696,6 +32188,9 @@ void target_id_c::set(types::options e) case types::cgi: c.init(); break; + case types::targetg_ng_ran_node_id: + c.init(); + break; case types::nulltype: break; default: @@ -26715,6 +32210,9 @@ target_id_c::target_id_c(const target_id_c& other) case types::cgi: c.init(other.c.get()); break; + case types::targetg_ng_ran_node_id: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -26737,6 +32235,9 @@ target_id_c& target_id_c::operator=(const target_id_c& other) case types::cgi: c.set(other.c.get()); break; + case types::targetg_ng_ran_node_id: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -26761,6 +32262,10 @@ void target_id_c::to_json(json_writer& j) const j.write_fieldname("cGI"); c.get().to_json(j); break; + case types::targetg_ng_ran_node_id: + j.write_fieldname("targetgNgRanNode-ID"); + c.get().to_json(j); + break; default: log_invalid_choice_id(type_, "target_id_c"); } @@ -26779,6 +32284,10 @@ SRSASN_CODE target_id_c::pack(bit_ref& bref) const case types::cgi: HANDLE_CODE(c.get().pack(bref)); break; + case types::targetg_ng_ran_node_id: { + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.get().pack(bref)); + } break; default: log_invalid_choice_id(type_, "target_id_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -26800,6 +32309,10 @@ SRSASN_CODE target_id_c::unpack(cbit_ref& bref) case types::cgi: HANDLE_CODE(c.get().unpack(bref)); break; + case types::targetg_ng_ran_node_id: { + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.get().unpack(bref)); + } break; default: log_invalid_choice_id(type_, "target_id_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -26809,8 +32322,8 @@ SRSASN_CODE target_id_c::unpack(cbit_ref& bref) std::string target_id_c::types_opts::to_string() const { - static const char* options[] = {"targeteNB-ID", "targetRNC-ID", "cGI"}; - return convert_enum_idx(options, 3, value, "target_id_c::types"); + static const char* options[] = {"targeteNB-ID", "targetRNC-ID", "cGI", "targetgNgRanNode-ID"}; + return convert_enum_idx(options, 4, value, "target_id_c::types"); } // HandoverRequiredIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -28403,14 +33916,14 @@ std::string cs_fallback_ind_opts::to_string() const // InitialContextSetupRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t init_context_setup_request_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 66, 24, 107, 73, 25, 41, 74, 106, 108, 124, 146, 159, - 75, 158, 165, 177, 187, 192, 196, 195, 241, 240, 248, 251, 271, 283}; - return map_enum_number(options, 28, idx, "id"); + static const uint32_t options[] = {0, 8, 66, 24, 107, 73, 25, 41, 74, 106, 108, 124, 146, 159, 75, 158, + 165, 177, 187, 192, 196, 195, 241, 240, 248, 251, 269, 271, 277, 283, 278, 299}; + return map_enum_number(options, 32, idx, "id"); } bool init_context_setup_request_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 66, 24, 107, 73, 25, 41, 74, 106, 108, 124, 146, 159, - 75, 158, 165, 177, 187, 192, 196, 195, 241, 240, 248, 251, 271, 283}; + static const uint32_t options[] = {0, 8, 66, 24, 107, 73, 25, 41, 74, 106, 108, 124, 146, 159, 75, 158, + 165, 177, 187, 192, 196, 195, 241, 240, 248, 251, 269, 271, 277, 283, 278, 299}; for (const auto& o : options) { if (o == id) { return true; @@ -28473,10 +33986,18 @@ crit_e init_context_setup_request_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 251: return crit_e::ignore; + case 269: + return crit_e::ignore; case 271: return crit_e::ignore; + case 277: + return crit_e::ignore; case 283: return crit_e::ignore; + case 278: + return crit_e::ignore; + case 299: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -28564,12 +34085,24 @@ init_context_setup_request_ies_o::value_c init_context_setup_request_ies_o::get_ case 251: ret.set(value_c::types::enhanced_coverage_restricted); break; + case 269: + ret.set(value_c::types::nrue_security_cap); + break; case 271: ret.set(value_c::types::ce_mode_brestricted); break; + case 277: + ret.set(value_c::types::aerial_uesubscription_info); + break; case 283: ret.set(value_c::types::pending_data_ind); break; + case 278: + ret.set(value_c::types::subscription_based_ue_differentiation_info); + break; + case 299: + ret.set(value_c::types::add_rrm_prio_idx); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -28630,10 +34163,18 @@ presence_e init_context_setup_request_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 251: return presence_e::optional; + case 269: + return presence_e::optional; case 271: return presence_e::optional; + case 277: + return presence_e::optional; case 283: return presence_e::optional; + case 278: + return presence_e::optional; + case 299: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -28772,16 +34313,37 @@ enhanced_coverage_restricted_e& init_context_setup_request_ies_o::value_c::enhan assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); return c.get(); } +nrue_security_cap_s& init_context_setup_request_ies_o::value_c::nrue_security_cap() +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} ce_mode_brestricted_e& init_context_setup_request_ies_o::value_c::ce_mode_brestricted() { assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); return c.get(); } +aerial_uesubscription_info_e& init_context_setup_request_ies_o::value_c::aerial_uesubscription_info() +{ + assert_choice_type("AerialUEsubscriptionInformation", type_.to_string(), "Value"); + return c.get(); +} pending_data_ind_e& init_context_setup_request_ies_o::value_c::pending_data_ind() { assert_choice_type("PendingDataIndication", type_.to_string(), "Value"); return c.get(); } +subscription_based_ue_differentiation_info_s& +init_context_setup_request_ies_o::value_c::subscription_based_ue_differentiation_info() +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} +fixed_bitstring<32, false, true>& init_context_setup_request_ies_o::value_c::add_rrm_prio_idx() +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} const uint64_t& init_context_setup_request_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -28914,16 +34476,37 @@ const enhanced_coverage_restricted_e& init_context_setup_request_ies_o::value_c: assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); return c.get(); } +const nrue_security_cap_s& init_context_setup_request_ies_o::value_c::nrue_security_cap() const +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} const ce_mode_brestricted_e& init_context_setup_request_ies_o::value_c::ce_mode_brestricted() const { assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); return c.get(); } +const aerial_uesubscription_info_e& init_context_setup_request_ies_o::value_c::aerial_uesubscription_info() const +{ + assert_choice_type("AerialUEsubscriptionInformation", type_.to_string(), "Value"); + return c.get(); +} const pending_data_ind_e& init_context_setup_request_ies_o::value_c::pending_data_ind() const { assert_choice_type("PendingDataIndication", type_.to_string(), "Value"); return c.get(); } +const subscription_based_ue_differentiation_info_s& +init_context_setup_request_ies_o::value_c::subscription_based_ue_differentiation_info() const +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} +const fixed_bitstring<32, false, true>& init_context_setup_request_ies_o::value_c::add_rrm_prio_idx() const +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} void init_context_setup_request_ies_o::value_c::destroy_() { switch (type_) { @@ -28972,6 +34555,15 @@ void init_context_setup_request_ies_o::value_c::destroy_() case types::ue_sidelink_aggregate_maximum_bitrate: c.destroy(); break; + case types::nrue_security_cap: + c.destroy(); + break; + case types::subscription_based_ue_differentiation_info: + c.destroy(); + break; + case types::add_rrm_prio_idx: + c.destroy >(); + break; default: break; } @@ -29048,10 +34640,21 @@ void init_context_setup_request_ies_o::value_c::set(types::options e) break; case types::enhanced_coverage_restricted: break; + case types::nrue_security_cap: + c.init(); + break; case types::ce_mode_brestricted: break; + case types::aerial_uesubscription_info: + break; case types::pending_data_ind: break; + case types::subscription_based_ue_differentiation_info: + c.init(); + break; + case types::add_rrm_prio_idx: + c.init >(); + break; case types::nulltype: break; default: @@ -29140,12 +34743,24 @@ init_context_setup_request_ies_o::value_c::value_c(const init_context_setup_requ case types::enhanced_coverage_restricted: c.init(other.c.get()); break; + case types::nrue_security_cap: + c.init(other.c.get()); + break; case types::ce_mode_brestricted: c.init(other.c.get()); break; + case types::aerial_uesubscription_info: + c.init(other.c.get()); + break; case types::pending_data_ind: c.init(other.c.get()); break; + case types::subscription_based_ue_differentiation_info: + c.init(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.init(other.c.get >()); + break; case types::nulltype: break; default: @@ -29238,12 +34853,24 @@ init_context_setup_request_ies_o::value_c::operator=(const init_context_setup_re case types::enhanced_coverage_restricted: c.set(other.c.get()); break; + case types::nrue_security_cap: + c.set(other.c.get()); + break; case types::ce_mode_brestricted: c.set(other.c.get()); break; + case types::aerial_uesubscription_info: + c.set(other.c.get()); + break; case types::pending_data_ind: c.set(other.c.get()); break; + case types::subscription_based_ue_differentiation_info: + c.set(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.set(other.c.get >()); + break; case types::nulltype: break; default: @@ -29352,12 +34979,26 @@ void init_context_setup_request_ies_o::value_c::to_json(json_writer& j) const case types::enhanced_coverage_restricted: j.write_str("EnhancedCoverageRestricted", "restricted"); break; + case types::nrue_security_cap: + j.write_fieldname("NRUESecurityCapabilities"); + c.get().to_json(j); + break; case types::ce_mode_brestricted: j.write_str("CE-ModeBRestricted", c.get().to_string()); break; + case types::aerial_uesubscription_info: + j.write_str("AerialUEsubscriptionInformation", c.get().to_string()); + break; case types::pending_data_ind: j.write_str("PendingDataIndication", "true"); break; + case types::subscription_based_ue_differentiation_info: + j.write_fieldname("Subscription-Based-UE-DifferentiationInfo"); + c.get().to_json(j); + break; + case types::add_rrm_prio_idx: + j.write_str("BIT STRING", c.get >().to_string()); + break; default: log_invalid_choice_id(type_, "init_context_setup_request_ies_o::value_c"); } @@ -29445,12 +35086,24 @@ SRSASN_CODE init_context_setup_request_ies_o::value_c::pack(bit_ref& bref) const case types::enhanced_coverage_restricted: HANDLE_CODE(c.get().pack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().pack(bref)); + break; case types::ce_mode_brestricted: HANDLE_CODE(c.get().pack(bref)); break; + case types::aerial_uesubscription_info: + HANDLE_CODE(c.get().pack(bref)); + break; case types::pending_data_ind: HANDLE_CODE(c.get().pack(bref)); break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().pack(bref))); + break; default: log_invalid_choice_id(type_, "init_context_setup_request_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -29539,12 +35192,24 @@ SRSASN_CODE init_context_setup_request_ies_o::value_c::unpack(cbit_ref& bref) case types::enhanced_coverage_restricted: HANDLE_CODE(c.get().unpack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().unpack(bref)); + break; case types::ce_mode_brestricted: HANDLE_CODE(c.get().unpack(bref)); break; + case types::aerial_uesubscription_info: + HANDLE_CODE(c.get().unpack(bref)); + break; case types::pending_data_ind: HANDLE_CODE(c.get().unpack(bref)); break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().unpack(bref))); + break; default: log_invalid_choice_id(type_, "init_context_setup_request_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -29580,9 +35245,13 @@ std::string init_context_setup_request_ies_o::value_c::types_opts::to_string() c "V2XServicesAuthorized", "UESidelinkAggregateMaximumBitrate", "EnhancedCoverageRestricted", + "NRUESecurityCapabilities", "CE-ModeBRestricted", - "PendingDataIndication"}; - return convert_enum_idx(options, 28, value, "init_context_setup_request_ies_o::value_c::types"); + "AerialUEsubscriptionInformation", + "PendingDataIndication", + "Subscription-Based-UE-DifferentiationInfo", + "BIT STRING"}; + return convert_enum_idx(options, 32, value, "init_context_setup_request_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -29614,8 +35283,12 @@ init_context_setup_request_ies_container::init_context_setup_request_ies_contain v2xservices_authorized(240, crit_e::ignore), ue_sidelink_aggregate_maximum_bitrate(248, crit_e::ignore), enhanced_coverage_restricted(251, crit_e::ignore), + nrue_security_cap(269, crit_e::ignore), ce_mode_brestricted(271, crit_e::ignore), - pending_data_ind(283, crit_e::ignore) + aerial_uesubscription_info(277, crit_e::ignore), + pending_data_ind(283, crit_e::ignore), + subscription_based_ue_differentiation_info(278, crit_e::ignore), + add_rrm_prio_idx(299, crit_e::ignore) {} SRSASN_CODE init_context_setup_request_ies_container::pack(bit_ref& bref) const { @@ -29640,8 +35313,12 @@ SRSASN_CODE init_context_setup_request_ies_container::pack(bit_ref& bref) const nof_ies += v2xservices_authorized_present ? 1 : 0; nof_ies += ue_sidelink_aggregate_maximum_bitrate_present ? 1 : 0; nof_ies += enhanced_coverage_restricted_present ? 1 : 0; + nof_ies += nrue_security_cap_present ? 1 : 0; nof_ies += ce_mode_brestricted_present ? 1 : 0; + nof_ies += aerial_uesubscription_info_present ? 1 : 0; nof_ies += pending_data_ind_present ? 1 : 0; + nof_ies += subscription_based_ue_differentiation_info_present ? 1 : 0; + nof_ies += add_rrm_prio_idx_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -29710,12 +35387,24 @@ SRSASN_CODE init_context_setup_request_ies_container::pack(bit_ref& bref) const if (enhanced_coverage_restricted_present) { HANDLE_CODE(enhanced_coverage_restricted.pack(bref)); } + if (nrue_security_cap_present) { + HANDLE_CODE(nrue_security_cap.pack(bref)); + } if (ce_mode_brestricted_present) { HANDLE_CODE(ce_mode_brestricted.pack(bref)); } + if (aerial_uesubscription_info_present) { + HANDLE_CODE(aerial_uesubscription_info.pack(bref)); + } if (pending_data_ind_present) { HANDLE_CODE(pending_data_ind.pack(bref)); } + if (subscription_based_ue_differentiation_info_present) { + HANDLE_CODE(subscription_based_ue_differentiation_info.pack(bref)); + } + if (add_rrm_prio_idx_present) { + HANDLE_CODE(add_rrm_prio_idx.pack(bref)); + } return SRSASN_SUCCESS; } @@ -29886,18 +35575,42 @@ SRSASN_CODE init_context_setup_request_ies_container::unpack(cbit_ref& bref) enhanced_coverage_restricted.crit = c.crit; enhanced_coverage_restricted.value = c.value.enhanced_coverage_restricted(); break; + case 269: + nrue_security_cap_present = true; + nrue_security_cap.id = c.id; + nrue_security_cap.crit = c.crit; + nrue_security_cap.value = c.value.nrue_security_cap(); + break; case 271: ce_mode_brestricted_present = true; ce_mode_brestricted.id = c.id; ce_mode_brestricted.crit = c.crit; ce_mode_brestricted.value = c.value.ce_mode_brestricted(); break; + case 277: + aerial_uesubscription_info_present = true; + aerial_uesubscription_info.id = c.id; + aerial_uesubscription_info.crit = c.crit; + aerial_uesubscription_info.value = c.value.aerial_uesubscription_info(); + break; case 283: pending_data_ind_present = true; pending_data_ind.id = c.id; pending_data_ind.crit = c.crit; pending_data_ind.value = c.value.pending_data_ind(); break; + case 278: + subscription_based_ue_differentiation_info_present = true; + subscription_based_ue_differentiation_info.id = c.id; + subscription_based_ue_differentiation_info.crit = c.crit; + subscription_based_ue_differentiation_info.value = c.value.subscription_based_ue_differentiation_info(); + break; + case 299: + add_rrm_prio_idx_present = true; + add_rrm_prio_idx.id = c.id; + add_rrm_prio_idx.crit = c.crit; + add_rrm_prio_idx.value = c.value.add_rrm_prio_idx(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -30005,14 +35718,30 @@ void init_context_setup_request_ies_container::to_json(json_writer& j) const j.write_fieldname(""); enhanced_coverage_restricted.to_json(j); } + if (nrue_security_cap_present) { + j.write_fieldname(""); + nrue_security_cap.to_json(j); + } if (ce_mode_brestricted_present) { j.write_fieldname(""); ce_mode_brestricted.to_json(j); } + if (aerial_uesubscription_info_present) { + j.write_fieldname(""); + aerial_uesubscription_info.to_json(j); + } if (pending_data_ind_present) { j.write_fieldname(""); pending_data_ind.to_json(j); } + if (subscription_based_ue_differentiation_info_present) { + j.write_fieldname(""); + subscription_based_ue_differentiation_info.to_json(j); + } + if (add_rrm_prio_idx_present) { + j.write_fieldname(""); + add_rrm_prio_idx.to_json(j); + } j.end_obj(); } @@ -30488,11 +36217,26 @@ std::string coverage_level_opts::to_string() const return convert_enum_idx(options, 1, value, "coverage_level_e"); } +// EDT-Session ::= ENUMERATED +std::string edt_session_opts::to_string() const +{ + static const char* options[] = {"true"}; + return convert_enum_idx(options, 1, value, "edt_session_e"); +} + // GUMMEIType ::= ENUMERATED std::string gummei_type_opts::to_string() const { - static const char* options[] = {"native", "mapped"}; - return convert_enum_idx(options, 2, value, "gummei_type_e"); + static const char* options[] = {"native", "mapped", "mappedFrom5G"}; + return convert_enum_idx(options, 3, value, "gummei_type_e"); +} +uint8_t gummei_type_opts::to_number() const +{ + if (value == mapped_from5_g) { + return 5; + } + invalid_enum_number(value, "gummei_type_e"); + return 0; } // RRC-Establishment-Cause ::= ENUMERATED @@ -30519,14 +36263,14 @@ std::string relay_node_ind_opts::to_string() const // InitialUEMessage-IEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t init_ue_msg_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {8, 26, 67, 100, 134, 96, 127, 75, 145, 155, - 160, 170, 176, 184, 186, 223, 230, 242, 246, 250}; - return map_enum_number(options, 20, idx, "id"); + static const uint32_t options[] = {8, 26, 67, 100, 134, 96, 127, 75, 145, 155, 160, + 170, 176, 184, 186, 223, 230, 242, 246, 250, 263, 281}; + return map_enum_number(options, 22, idx, "id"); } bool init_ue_msg_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {8, 26, 67, 100, 134, 96, 127, 75, 145, 155, - 160, 170, 176, 184, 186, 223, 230, 242, 246, 250}; + static const uint32_t options[] = {8, 26, 67, 100, 134, 96, 127, 75, 145, 155, 160, + 170, 176, 184, 186, 223, 230, 242, 246, 250, 263, 281}; for (const auto& o : options) { if (o == id) { return true; @@ -30577,6 +36321,10 @@ crit_e init_ue_msg_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 250: return crit_e::ignore; + case 263: + return crit_e::ignore; + case 281: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -30646,6 +36394,12 @@ init_ue_msg_ies_o::value_c init_ue_msg_ies_o::get_value(const uint32_t& id) case 250: ret.set(value_c::types::coverage_level); break; + case 263: + ret.set(value_c::types::ue_application_layer_meas_cap); + break; + case 281: + ret.set(value_c::types::edt_session); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -30694,6 +36448,10 @@ presence_e init_ue_msg_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 250: return presence_e::optional; + case 263: + return presence_e::optional; + case 281: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -30801,6 +36559,16 @@ coverage_level_e& init_ue_msg_ies_o::value_c::coverage_level() assert_choice_type("Coverage-Level", type_.to_string(), "Value"); return c.get(); } +fixed_bitstring<8, false, true>& init_ue_msg_ies_o::value_c::ue_application_layer_meas_cap() +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} +edt_session_e& init_ue_msg_ies_o::value_c::edt_session() +{ + assert_choice_type("EDT-Session", type_.to_string(), "Value"); + return c.get(); +} const uint32_t& init_ue_msg_ies_o::value_c::enb_ue_s1ap_id() const { assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); @@ -30901,6 +36669,16 @@ const coverage_level_e& init_ue_msg_ies_o::value_c::coverage_level() const assert_choice_type("Coverage-Level", type_.to_string(), "Value"); return c.get(); } +const fixed_bitstring<8, false, true>& init_ue_msg_ies_o::value_c::ue_application_layer_meas_cap() const +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} +const edt_session_e& init_ue_msg_ies_o::value_c::edt_session() const +{ + assert_choice_type("EDT-Session", type_.to_string(), "Value"); + return c.get(); +} void init_ue_msg_ies_o::value_c::destroy_() { switch (type_) { @@ -30937,6 +36715,9 @@ void init_ue_msg_ies_o::value_c::destroy_() case types::mme_group_id: c.destroy >(); break; + case types::ue_application_layer_meas_cap: + c.destroy >(); + break; default: break; } @@ -30997,6 +36778,11 @@ void init_ue_msg_ies_o::value_c::set(types::options e) break; case types::coverage_level: break; + case types::ue_application_layer_meas_cap: + c.init >(); + break; + case types::edt_session: + break; case types::nulltype: break; default: @@ -31067,6 +36853,12 @@ init_ue_msg_ies_o::value_c::value_c(const init_ue_msg_ies_o::value_c& other) case types::coverage_level: c.init(other.c.get()); break; + case types::ue_application_layer_meas_cap: + c.init(other.c.get >()); + break; + case types::edt_session: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -31140,6 +36932,12 @@ init_ue_msg_ies_o::value_c& init_ue_msg_ies_o::value_c::operator=(const init_ue_ case types::coverage_level: c.set(other.c.get()); break; + case types::ue_application_layer_meas_cap: + c.set(other.c.get >()); + break; + case types::edt_session: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -31217,6 +37015,12 @@ void init_ue_msg_ies_o::value_c::to_json(json_writer& j) const case types::coverage_level: j.write_str("Coverage-Level", "extendedcoverage"); break; + case types::ue_application_layer_meas_cap: + j.write_str("BIT STRING", c.get >().to_string()); + break; + case types::edt_session: + j.write_str("EDT-Session", "true"); + break; default: log_invalid_choice_id(type_, "init_ue_msg_ies_o::value_c"); } @@ -31286,6 +37090,12 @@ SRSASN_CODE init_ue_msg_ies_o::value_c::pack(bit_ref& bref) const case types::coverage_level: HANDLE_CODE(c.get().pack(bref)); break; + case types::ue_application_layer_meas_cap: + HANDLE_CODE((c.get >().pack(bref))); + break; + case types::edt_session: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "init_ue_msg_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -31356,6 +37166,12 @@ SRSASN_CODE init_ue_msg_ies_o::value_c::unpack(cbit_ref& bref) case types::coverage_level: HANDLE_CODE(c.get().unpack(bref)); break; + case types::ue_application_layer_meas_cap: + HANDLE_CODE((c.get >().unpack(bref))); + break; + case types::edt_session: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "init_ue_msg_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -31384,8 +37200,10 @@ std::string init_ue_msg_ies_o::value_c::types_opts::to_string() const "INTEGER (0..255)", "CE-mode-B-SupportIndicator", "INTEGER (0..65535)", - "Coverage-Level"}; - return convert_enum_idx(options, 20, value, "init_ue_msg_ies_o::value_c::types"); + "Coverage-Level", + "BIT STRING", + "EDT-Session"}; + return convert_enum_idx(options, 22, value, "init_ue_msg_ies_o::value_c::types"); } template struct asn1::s1ap::protocol_ie_field_s; @@ -31410,7 +37228,9 @@ init_ue_msg_ies_container::init_ue_msg_ies_container() : ue_usage_type(230, crit_e::ignore), ce_mode_b_support_ind(242, crit_e::ignore), dcn_id(246, crit_e::ignore), - coverage_level(250, crit_e::ignore) + coverage_level(250, crit_e::ignore), + ue_application_layer_meas_cap(263, crit_e::ignore), + edt_session(281, crit_e::ignore) {} SRSASN_CODE init_ue_msg_ies_container::pack(bit_ref& bref) const { @@ -31430,6 +37250,8 @@ SRSASN_CODE init_ue_msg_ies_container::pack(bit_ref& bref) const nof_ies += ce_mode_b_support_ind_present ? 1 : 0; nof_ies += dcn_id_present ? 1 : 0; nof_ies += coverage_level_present ? 1 : 0; + nof_ies += ue_application_layer_meas_cap_present ? 1 : 0; + nof_ies += edt_session_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(enb_ue_s1ap_id.pack(bref)); @@ -31482,6 +37304,12 @@ SRSASN_CODE init_ue_msg_ies_container::pack(bit_ref& bref) const if (coverage_level_present) { HANDLE_CODE(coverage_level.pack(bref)); } + if (ue_application_layer_meas_cap_present) { + HANDLE_CODE(ue_application_layer_meas_cap.pack(bref)); + } + if (edt_session_present) { + HANDLE_CODE(edt_session.pack(bref)); + } return SRSASN_SUCCESS; } @@ -31616,6 +37444,18 @@ SRSASN_CODE init_ue_msg_ies_container::unpack(cbit_ref& bref) coverage_level.crit = c.crit; coverage_level.value = c.value.coverage_level(); break; + case 263: + ue_application_layer_meas_cap_present = true; + ue_application_layer_meas_cap.id = c.id; + ue_application_layer_meas_cap.crit = c.crit; + ue_application_layer_meas_cap.value = c.value.ue_application_layer_meas_cap(); + break; + case 281: + edt_session_present = true; + edt_session.id = c.id; + edt_session.crit = c.crit; + edt_session.value = c.value.edt_session(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -31701,6 +37541,14 @@ void init_ue_msg_ies_container::to_json(json_writer& j) const j.write_fieldname(""); coverage_level.to_json(j); } + if (ue_application_layer_meas_cap_present) { + j.write_fieldname(""); + ue_application_layer_meas_cap.to_json(j); + } + if (edt_session_present) { + j.write_fieldname(""); + edt_session.to_json(j); + } j.end_obj(); } @@ -31790,6 +37638,67 @@ void ue_associated_lc_s1_conn_item_s::to_json(json_writer& j) const j.end_obj(); } +// ServedGUMMEIsItem-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION +uint32_t served_gummeis_item_ext_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {170}; + return map_enum_number(options, 1, idx, "id"); +} +bool served_gummeis_item_ext_ies_o::is_id_valid(const uint32_t& id) +{ + return 170 == id; +} +crit_e served_gummeis_item_ext_ies_o::get_crit(const uint32_t& id) +{ + if (id == 170) { + return crit_e::ignore; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} +served_gummeis_item_ext_ies_o::ext_c served_gummeis_item_ext_ies_o::get_ext(const uint32_t& id) +{ + ext_c ret{}; + if (id != 170) { + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e served_gummeis_item_ext_ies_o::get_presence(const uint32_t& id) +{ + if (id == 170) { + return presence_e::optional; + } + asn1::log_error("The id=%d is not recognized", id); + return {}; +} + +// Extension ::= OPEN TYPE +void served_gummeis_item_ext_ies_o::ext_c::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("GUMMEIType", c.to_string()); + j.end_obj(); +} +SRSASN_CODE served_gummeis_item_ext_ies_o::ext_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE served_gummeis_item_ext_ies_o::ext_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.unpack(bref)); + return SRSASN_SUCCESS; +} + +std::string served_gummeis_item_ext_ies_o::ext_c::types_opts::to_string() const +{ + static const char* options[] = {"GUMMEIType"}; + return convert_enum_idx(options, 1, value, "served_gummeis_item_ext_ies_o::ext_c::types"); +} + // TAIItem ::= SEQUENCE SRSASN_CODE tai_item_s::pack(bit_ref& bref) const { @@ -32021,7 +37930,7 @@ SRSASN_CODE served_gummeis_item_s::pack(bit_ref& bref) const HANDLE_CODE(pack_dyn_seq_of(bref, served_group_ids, 1, 65535, true)); HANDLE_CODE(pack_dyn_seq_of(bref, served_mmecs, 1, 256, true)); if (ie_exts_present) { - HANDLE_CODE(ie_exts.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, ie_exts, 1, 65535, true)); } return SRSASN_SUCCESS; @@ -32035,7 +37944,7 @@ SRSASN_CODE served_gummeis_item_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_dyn_seq_of(served_group_ids, bref, 1, 65535, true)); HANDLE_CODE(unpack_dyn_seq_of(served_mmecs, bref, 1, 256, true)); if (ie_exts_present) { - HANDLE_CODE(ie_exts.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(ie_exts, bref, 1, 65535, true)); } return SRSASN_SUCCESS; @@ -32060,7 +37969,6 @@ void served_gummeis_item_s::to_json(json_writer& j) const j.end_array(); if (ie_exts_present) { j.write_fieldname("iE-Extensions"); - ie_exts.to_json(j); } j.end_obj(); } @@ -32263,6 +38171,13 @@ std::string gw_context_release_ind_opts::to_string() const return convert_enum_idx(options, 1, value, "gw_context_release_ind_e"); } +// HandoverFlag ::= ENUMERATED +std::string ho_flag_opts::to_string() const +{ + static const char* options[] = {"handoverPreparation"}; + return convert_enum_idx(options, 1, value, "ho_flag_e"); +} + // KillAllWarningMessages ::= ENUMERATED std::string kill_all_warning_msgs_opts::to_string() const { @@ -32270,6 +38185,13 @@ std::string kill_all_warning_msgs_opts::to_string() const return convert_enum_idx(options, 1, value, "kill_all_warning_msgs_e"); } +// LTE-M-Indication ::= ENUMERATED +std::string lte_m_ind_opts::to_string() const +{ + static const char* options[] = {"lte-m"}; + return convert_enum_idx(options, 1, value, "lte_m_ind_e"); +} + // MMERelaySupportIndicator ::= ENUMERATED std::string mme_relay_support_ind_opts::to_string() const { @@ -33517,12 +39439,12 @@ std::string kill_resp_ies_o::value_c::types_opts::to_string() const // LocationReportIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t location_report_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 100, 67, 98}; - return map_enum_number(options, 5, idx, "id"); + static const uint32_t options[] = {0, 8, 100, 67, 98, 288}; + return map_enum_number(options, 6, idx, "id"); } bool location_report_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 100, 67, 98}; + static const uint32_t options[] = {0, 8, 100, 67, 98, 288}; for (const auto& o : options) { if (o == id) { return true; @@ -33543,6 +39465,8 @@ crit_e location_report_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 98: return crit_e::ignore; + case 288: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -33567,6 +39491,9 @@ location_report_ies_o::value_c location_report_ies_o::get_value(const uint32_t& case 98: ret.set(value_c::types::request_type); break; + case 288: + ret.set(value_c::types::ps_cell_info); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -33585,6 +39512,8 @@ presence_e location_report_ies_o::get_presence(const uint32_t& id) return presence_e::mandatory; case 98: return presence_e::mandatory; + case 288: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -33617,6 +39546,11 @@ request_type_s& location_report_ies_o::value_c::request_type() assert_choice_type("RequestType", type_.to_string(), "Value"); return c.get(); } +ps_cell_info_s& location_report_ies_o::value_c::ps_cell_info() +{ + assert_choice_type("PSCellInformation", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& location_report_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -33642,6 +39576,11 @@ const request_type_s& location_report_ies_o::value_c::request_type() const assert_choice_type("RequestType", type_.to_string(), "Value"); return c.get(); } +const ps_cell_info_s& location_report_ies_o::value_c::ps_cell_info() const +{ + assert_choice_type("PSCellInformation", type_.to_string(), "Value"); + return c.get(); +} void location_report_ies_o::value_c::destroy_() { switch (type_) { @@ -33654,6 +39593,9 @@ void location_report_ies_o::value_c::destroy_() case types::request_type: c.destroy(); break; + case types::ps_cell_info: + c.destroy(); + break; default: break; } @@ -33676,6 +39618,9 @@ void location_report_ies_o::value_c::set(types::options e) case types::request_type: c.init(); break; + case types::ps_cell_info: + c.init(); + break; case types::nulltype: break; default: @@ -33701,6 +39646,9 @@ location_report_ies_o::value_c::value_c(const location_report_ies_o::value_c& ot case types::request_type: c.init(other.c.get()); break; + case types::ps_cell_info: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -33729,6 +39677,9 @@ location_report_ies_o::value_c& location_report_ies_o::value_c::operator=(const case types::request_type: c.set(other.c.get()); break; + case types::ps_cell_info: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -33759,6 +39710,10 @@ void location_report_ies_o::value_c::to_json(json_writer& j) const j.write_fieldname("RequestType"); c.get().to_json(j); break; + case types::ps_cell_info: + j.write_fieldname("PSCellInformation"); + c.get().to_json(j); + break; default: log_invalid_choice_id(type_, "location_report_ies_o::value_c"); } @@ -33783,6 +39738,9 @@ SRSASN_CODE location_report_ies_o::value_c::pack(bit_ref& bref) const case types::request_type: HANDLE_CODE(c.get().pack(bref)); break; + case types::ps_cell_info: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "location_report_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -33808,6 +39766,9 @@ SRSASN_CODE location_report_ies_o::value_c::unpack(cbit_ref& bref) case types::request_type: HANDLE_CODE(c.get().unpack(bref)); break; + case types::ps_cell_info: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "location_report_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -33818,8 +39779,8 @@ SRSASN_CODE location_report_ies_o::value_c::unpack(cbit_ref& bref) std::string location_report_ies_o::value_c::types_opts::to_string() const { static const char* options[] = { - "INTEGER (0..4294967295)", "INTEGER (0..16777215)", "EUTRAN-CGI", "TAI", "RequestType"}; - return convert_enum_idx(options, 5, value, "location_report_ies_o::value_c::types"); + "INTEGER (0..4294967295)", "INTEGER (0..16777215)", "EUTRAN-CGI", "TAI", "RequestType", "PSCellInformation"}; + return convert_enum_idx(options, 6, value, "location_report_ies_o::value_c::types"); } // LocationReportingControlIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -34460,63 +40421,202 @@ std::string mmecp_relocation_ind_ies_o::value_c::types_opts::to_string() const // MMEConfigurationTransferIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t mme_cfg_transfer_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {130}; - return map_enum_number(options, 1, idx, "id"); + static const uint32_t options[] = {130, 295}; + return map_enum_number(options, 2, idx, "id"); } bool mme_cfg_transfer_ies_o::is_id_valid(const uint32_t& id) { - return 130 == id; + static const uint32_t options[] = {130, 295}; + for (const auto& o : options) { + if (o == id) { + return true; + } + } + return false; } crit_e mme_cfg_transfer_ies_o::get_crit(const uint32_t& id) { - if (id == 130) { - return crit_e::ignore; + switch (id) { + case 130: + return crit_e::ignore; + case 295: + return crit_e::ignore; + default: + asn1::log_error("The id=%d is not recognized", id); } - asn1::log_error("The id=%d is not recognized", id); return {}; } mme_cfg_transfer_ies_o::value_c mme_cfg_transfer_ies_o::get_value(const uint32_t& id) { value_c ret{}; - if (id != 130) { - asn1::log_error("The id=%d is not recognized", id); + switch (id) { + case 130: + ret.set(value_c::types::son_cfg_transfer_mct); + break; + case 295: + ret.set(value_c::types::en_dcson_cfg_transfer_mct); + break; + default: + asn1::log_error("The id=%d is not recognized", id); } return ret; } presence_e mme_cfg_transfer_ies_o::get_presence(const uint32_t& id) { - if (id == 130) { - return presence_e::optional; + switch (id) { + case 130: + return presence_e::optional; + case 295: + return presence_e::optional; + default: + asn1::log_error("The id=%d is not recognized", id); } - asn1::log_error("The id=%d is not recognized", id); return {}; } // Value ::= OPEN TYPE +son_cfg_transfer_s& mme_cfg_transfer_ies_o::value_c::son_cfg_transfer_mct() +{ + assert_choice_type("SONConfigurationTransfer", type_.to_string(), "Value"); + return c.get(); +} +en_dcson_cfg_transfer_s& mme_cfg_transfer_ies_o::value_c::en_dcson_cfg_transfer_mct() +{ + assert_choice_type("EN-DCSONConfigurationTransfer", type_.to_string(), "Value"); + return c.get(); +} +const son_cfg_transfer_s& mme_cfg_transfer_ies_o::value_c::son_cfg_transfer_mct() const +{ + assert_choice_type("SONConfigurationTransfer", type_.to_string(), "Value"); + return c.get(); +} +const en_dcson_cfg_transfer_s& mme_cfg_transfer_ies_o::value_c::en_dcson_cfg_transfer_mct() const +{ + assert_choice_type("EN-DCSONConfigurationTransfer", type_.to_string(), "Value"); + return c.get(); +} +void mme_cfg_transfer_ies_o::value_c::destroy_() +{ + switch (type_) { + case types::son_cfg_transfer_mct: + c.destroy(); + break; + case types::en_dcson_cfg_transfer_mct: + c.destroy(); + break; + default: + break; + } +} +void mme_cfg_transfer_ies_o::value_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::son_cfg_transfer_mct: + c.init(); + break; + case types::en_dcson_cfg_transfer_mct: + c.init(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mme_cfg_transfer_ies_o::value_c"); + } +} +mme_cfg_transfer_ies_o::value_c::value_c(const mme_cfg_transfer_ies_o::value_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::son_cfg_transfer_mct: + c.init(other.c.get()); + break; + case types::en_dcson_cfg_transfer_mct: + c.init(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mme_cfg_transfer_ies_o::value_c"); + } +} +mme_cfg_transfer_ies_o::value_c& +mme_cfg_transfer_ies_o::value_c::operator=(const mme_cfg_transfer_ies_o::value_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::son_cfg_transfer_mct: + c.set(other.c.get()); + break; + case types::en_dcson_cfg_transfer_mct: + c.set(other.c.get()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mme_cfg_transfer_ies_o::value_c"); + } + + return *this; +} void mme_cfg_transfer_ies_o::value_c::to_json(json_writer& j) const { j.start_obj(); - j.write_fieldname("SONConfigurationTransfer"); - c.to_json(j); + switch (type_) { + case types::son_cfg_transfer_mct: + j.write_fieldname("SONConfigurationTransfer"); + c.get().to_json(j); + break; + case types::en_dcson_cfg_transfer_mct: + j.write_fieldname("EN-DCSONConfigurationTransfer"); + c.get().to_json(j); + break; + default: + log_invalid_choice_id(type_, "mme_cfg_transfer_ies_o::value_c"); + } j.end_obj(); } SRSASN_CODE mme_cfg_transfer_ies_o::value_c::pack(bit_ref& bref) const { varlength_field_pack_guard varlen_scope(bref, true); - HANDLE_CODE(c.pack(bref)); + switch (type_) { + case types::son_cfg_transfer_mct: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::en_dcson_cfg_transfer_mct: + HANDLE_CODE(c.get().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "mme_cfg_transfer_ies_o::value_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } return SRSASN_SUCCESS; } SRSASN_CODE mme_cfg_transfer_ies_o::value_c::unpack(cbit_ref& bref) { varlength_field_unpack_guard varlen_scope(bref, true); - HANDLE_CODE(c.unpack(bref)); + switch (type_) { + case types::son_cfg_transfer_mct: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::en_dcson_cfg_transfer_mct: + HANDLE_CODE(c.get().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "mme_cfg_transfer_ies_o::value_c"); + return SRSASN_ERROR_DECODE_FAIL; + } return SRSASN_SUCCESS; } std::string mme_cfg_transfer_ies_o::value_c::types_opts::to_string() const { - static const char* options[] = {"SONConfigurationTransfer"}; - return convert_enum_idx(options, 1, value, "mme_cfg_transfer_ies_o::value_c::types"); + static const char* options[] = {"SONConfigurationTransfer", "EN-DCSONConfigurationTransfer"}; + return convert_enum_idx(options, 2, value, "mme_cfg_transfer_ies_o::value_c::types"); } // MMEConfigurationUpdateAcknowledgeIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -37342,12 +43442,14 @@ std::string paging_ies_o::value_c::types_opts::to_string() const // PathSwitchRequestAcknowledgeIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t path_switch_request_ack_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 66, 95, 33, 40, 58, 158, 146, 195, 241, 240, 248, 251, 271, 283}; - return map_enum_number(options, 16, idx, "id"); + static const uint32_t options[] = {0, 8, 66, 95, 33, 40, 58, 158, 146, 195, 241, + 240, 248, 251, 269, 271, 277, 283, 278, 41, 299}; + return map_enum_number(options, 21, idx, "id"); } bool path_switch_request_ack_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 66, 95, 33, 40, 58, 158, 146, 195, 241, 240, 248, 251, 271, 283}; + static const uint32_t options[] = {0, 8, 66, 95, 33, 40, 58, 158, 146, 195, 241, + 240, 248, 251, 269, 271, 277, 283, 278, 41, 299}; for (const auto& o : options) { if (o == id) { return true; @@ -37386,10 +43488,20 @@ crit_e path_switch_request_ack_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 251: return crit_e::ignore; + case 269: + return crit_e::ignore; case 271: return crit_e::ignore; + case 277: + return crit_e::ignore; case 283: return crit_e::ignore; + case 278: + return crit_e::ignore; + case 41: + return crit_e::ignore; + case 299: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -37441,12 +43553,27 @@ path_switch_request_ack_ies_o::value_c path_switch_request_ack_ies_o::get_value( case 251: ret.set(value_c::types::enhanced_coverage_restricted); break; + case 269: + ret.set(value_c::types::nrue_security_cap); + break; case 271: ret.set(value_c::types::ce_mode_brestricted); break; + case 277: + ret.set(value_c::types::aerial_uesubscription_info); + break; case 283: ret.set(value_c::types::pending_data_ind); break; + case 278: + ret.set(value_c::types::subscription_based_ue_differentiation_info); + break; + case 41: + ret.set(value_c::types::ho_restrict_list); + break; + case 299: + ret.set(value_c::types::add_rrm_prio_idx); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -37483,10 +43610,20 @@ presence_e path_switch_request_ack_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 251: return presence_e::optional; + case 269: + return presence_e::optional; case 271: return presence_e::optional; + case 277: + return presence_e::optional; case 283: return presence_e::optional; + case 278: + return presence_e::optional; + case 41: + return presence_e::optional; + case 299: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -37565,16 +43702,42 @@ enhanced_coverage_restricted_e& path_switch_request_ack_ies_o::value_c::enhanced assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); return c.get(); } +nrue_security_cap_s& path_switch_request_ack_ies_o::value_c::nrue_security_cap() +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} ce_mode_brestricted_e& path_switch_request_ack_ies_o::value_c::ce_mode_brestricted() { assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); return c.get(); } +aerial_uesubscription_info_e& path_switch_request_ack_ies_o::value_c::aerial_uesubscription_info() +{ + assert_choice_type("AerialUEsubscriptionInformation", type_.to_string(), "Value"); + return c.get(); +} pending_data_ind_e& path_switch_request_ack_ies_o::value_c::pending_data_ind() { assert_choice_type("PendingDataIndication", type_.to_string(), "Value"); return c.get(); } +subscription_based_ue_differentiation_info_s& +path_switch_request_ack_ies_o::value_c::subscription_based_ue_differentiation_info() +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} +ho_restrict_list_s& path_switch_request_ack_ies_o::value_c::ho_restrict_list() +{ + assert_choice_type("HandoverRestrictionList", type_.to_string(), "Value"); + return c.get(); +} +fixed_bitstring<32, false, true>& path_switch_request_ack_ies_o::value_c::add_rrm_prio_idx() +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} const uint64_t& path_switch_request_ack_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -37647,16 +43810,42 @@ const enhanced_coverage_restricted_e& path_switch_request_ack_ies_o::value_c::en assert_choice_type("EnhancedCoverageRestricted", type_.to_string(), "Value"); return c.get(); } +const nrue_security_cap_s& path_switch_request_ack_ies_o::value_c::nrue_security_cap() const +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} const ce_mode_brestricted_e& path_switch_request_ack_ies_o::value_c::ce_mode_brestricted() const { assert_choice_type("CE-ModeBRestricted", type_.to_string(), "Value"); return c.get(); } +const aerial_uesubscription_info_e& path_switch_request_ack_ies_o::value_c::aerial_uesubscription_info() const +{ + assert_choice_type("AerialUEsubscriptionInformation", type_.to_string(), "Value"); + return c.get(); +} const pending_data_ind_e& path_switch_request_ack_ies_o::value_c::pending_data_ind() const { assert_choice_type("PendingDataIndication", type_.to_string(), "Value"); return c.get(); } +const subscription_based_ue_differentiation_info_s& +path_switch_request_ack_ies_o::value_c::subscription_based_ue_differentiation_info() const +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} +const ho_restrict_list_s& path_switch_request_ack_ies_o::value_c::ho_restrict_list() const +{ + assert_choice_type("HandoverRestrictionList", type_.to_string(), "Value"); + return c.get(); +} +const fixed_bitstring<32, false, true>& path_switch_request_ack_ies_o::value_c::add_rrm_prio_idx() const +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} void path_switch_request_ack_ies_o::value_c::destroy_() { switch (type_) { @@ -37684,6 +43873,18 @@ void path_switch_request_ack_ies_o::value_c::destroy_() case types::ue_sidelink_aggregate_maximum_bitrate: c.destroy(); break; + case types::nrue_security_cap: + c.destroy(); + break; + case types::subscription_based_ue_differentiation_info: + c.destroy(); + break; + case types::ho_restrict_list: + c.destroy(); + break; + case types::add_rrm_prio_idx: + c.destroy >(); + break; default: break; } @@ -37729,10 +43930,24 @@ void path_switch_request_ack_ies_o::value_c::set(types::options e) break; case types::enhanced_coverage_restricted: break; + case types::nrue_security_cap: + c.init(); + break; case types::ce_mode_brestricted: break; + case types::aerial_uesubscription_info: + break; case types::pending_data_ind: break; + case types::subscription_based_ue_differentiation_info: + c.init(); + break; + case types::ho_restrict_list: + c.init(); + break; + case types::add_rrm_prio_idx: + c.init >(); + break; case types::nulltype: break; default: @@ -37785,12 +44000,27 @@ path_switch_request_ack_ies_o::value_c::value_c(const path_switch_request_ack_ie case types::enhanced_coverage_restricted: c.init(other.c.get()); break; + case types::nrue_security_cap: + c.init(other.c.get()); + break; case types::ce_mode_brestricted: c.init(other.c.get()); break; + case types::aerial_uesubscription_info: + c.init(other.c.get()); + break; case types::pending_data_ind: c.init(other.c.get()); break; + case types::subscription_based_ue_differentiation_info: + c.init(other.c.get()); + break; + case types::ho_restrict_list: + c.init(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.init(other.c.get >()); + break; case types::nulltype: break; default: @@ -37847,12 +44077,27 @@ path_switch_request_ack_ies_o::value_c::operator=(const path_switch_request_ack_ case types::enhanced_coverage_restricted: c.set(other.c.get()); break; + case types::nrue_security_cap: + c.set(other.c.get()); + break; case types::ce_mode_brestricted: c.set(other.c.get()); break; + case types::aerial_uesubscription_info: + c.set(other.c.get()); + break; case types::pending_data_ind: c.set(other.c.get()); break; + case types::subscription_based_ue_differentiation_info: + c.set(other.c.get()); + break; + case types::ho_restrict_list: + c.set(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.set(other.c.get >()); + break; case types::nulltype: break; default: @@ -37917,12 +44162,30 @@ void path_switch_request_ack_ies_o::value_c::to_json(json_writer& j) const case types::enhanced_coverage_restricted: j.write_str("EnhancedCoverageRestricted", "restricted"); break; + case types::nrue_security_cap: + j.write_fieldname("NRUESecurityCapabilities"); + c.get().to_json(j); + break; case types::ce_mode_brestricted: j.write_str("CE-ModeBRestricted", c.get().to_string()); break; + case types::aerial_uesubscription_info: + j.write_str("AerialUEsubscriptionInformation", c.get().to_string()); + break; case types::pending_data_ind: j.write_str("PendingDataIndication", "true"); break; + case types::subscription_based_ue_differentiation_info: + j.write_fieldname("Subscription-Based-UE-DifferentiationInfo"); + c.get().to_json(j); + break; + case types::ho_restrict_list: + j.write_fieldname("HandoverRestrictionList"); + c.get().to_json(j); + break; + case types::add_rrm_prio_idx: + j.write_str("BIT STRING", c.get >().to_string()); + break; default: log_invalid_choice_id(type_, "path_switch_request_ack_ies_o::value_c"); } @@ -37975,12 +44238,27 @@ SRSASN_CODE path_switch_request_ack_ies_o::value_c::pack(bit_ref& bref) const case types::enhanced_coverage_restricted: HANDLE_CODE(c.get().pack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().pack(bref)); + break; case types::ce_mode_brestricted: HANDLE_CODE(c.get().pack(bref)); break; + case types::aerial_uesubscription_info: + HANDLE_CODE(c.get().pack(bref)); + break; case types::pending_data_ind: HANDLE_CODE(c.get().pack(bref)); break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::ho_restrict_list: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().pack(bref))); + break; default: log_invalid_choice_id(type_, "path_switch_request_ack_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -38034,12 +44312,27 @@ SRSASN_CODE path_switch_request_ack_ies_o::value_c::unpack(cbit_ref& bref) case types::enhanced_coverage_restricted: HANDLE_CODE(c.get().unpack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().unpack(bref)); + break; case types::ce_mode_brestricted: HANDLE_CODE(c.get().unpack(bref)); break; + case types::aerial_uesubscription_info: + HANDLE_CODE(c.get().unpack(bref)); + break; case types::pending_data_ind: HANDLE_CODE(c.get().unpack(bref)); break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::ho_restrict_list: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().unpack(bref))); + break; default: log_invalid_choice_id(type_, "path_switch_request_ack_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -38063,9 +44356,14 @@ std::string path_switch_request_ack_ies_o::value_c::types_opts::to_string() cons "V2XServicesAuthorized", "UESidelinkAggregateMaximumBitrate", "EnhancedCoverageRestricted", + "NRUESecurityCapabilities", "CE-ModeBRestricted", - "PendingDataIndication"}; - return convert_enum_idx(options, 16, value, "path_switch_request_ack_ies_o::value_c::types"); + "AerialUEsubscriptionInformation", + "PendingDataIndication", + "Subscription-Based-UE-DifferentiationInfo", + "HandoverRestrictionList", + "BIT STRING"}; + return convert_enum_idx(options, 21, value, "path_switch_request_ack_ies_o::value_c::types"); } // PathSwitchRequestFailureIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -38341,12 +44639,12 @@ std::string path_switch_request_fail_ies_o::value_c::types_opts::to_string() con // PathSwitchRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t path_switch_request_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {8, 22, 88, 100, 67, 107, 127, 145, 157, 146, 176, 186, 245}; - return map_enum_number(options, 13, idx, "id"); + static const uint32_t options[] = {8, 22, 88, 100, 67, 107, 127, 145, 157, 146, 176, 186, 245, 269, 288}; + return map_enum_number(options, 15, idx, "id"); } bool path_switch_request_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {8, 22, 88, 100, 67, 107, 127, 145, 157, 146, 176, 186, 245}; + static const uint32_t options[] = {8, 22, 88, 100, 67, 107, 127, 145, 157, 146, 176, 186, 245, 269, 288}; for (const auto& o : options) { if (o == id) { return true; @@ -38383,6 +44681,10 @@ crit_e path_switch_request_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 245: return crit_e::ignore; + case 269: + return crit_e::ignore; + case 288: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -38431,6 +44733,12 @@ path_switch_request_ies_o::value_c path_switch_request_ies_o::get_value(const ui case 245: ret.set(value_c::types::rrc_resume_cause); break; + case 269: + ret.set(value_c::types::nrue_security_cap); + break; + case 288: + ret.set(value_c::types::ps_cell_info); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -38465,6 +44773,10 @@ presence_e path_switch_request_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 245: return presence_e::optional; + case 269: + return presence_e::optional; + case 288: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -38538,6 +44850,16 @@ rrc_establishment_cause_e& path_switch_request_ies_o::value_c::rrc_resume_cause( assert_choice_type("RRC-Establishment-Cause", type_.to_string(), "Value"); return c.get(); } +nrue_security_cap_s& path_switch_request_ies_o::value_c::nrue_security_cap() +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} +ps_cell_info_s& path_switch_request_ies_o::value_c::ps_cell_info() +{ + assert_choice_type("PSCellInformation", type_.to_string(), "Value"); + return c.get(); +} const uint32_t& path_switch_request_ies_o::value_c::enb_ue_s1ap_id() const { assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); @@ -38604,6 +44926,16 @@ const rrc_establishment_cause_e& path_switch_request_ies_o::value_c::rrc_resume_ assert_choice_type("RRC-Establishment-Cause", type_.to_string(), "Value"); return c.get(); } +const nrue_security_cap_s& path_switch_request_ies_o::value_c::nrue_security_cap() const +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} +const ps_cell_info_s& path_switch_request_ies_o::value_c::ps_cell_info() const +{ + assert_choice_type("PSCellInformation", type_.to_string(), "Value"); + return c.get(); +} void path_switch_request_ies_o::value_c::destroy_() { switch (type_) { @@ -38631,6 +44963,12 @@ void path_switch_request_ies_o::value_c::destroy_() case types::lhn_id: c.destroy >(); break; + case types::nrue_security_cap: + c.destroy(); + break; + case types::ps_cell_info: + c.destroy(); + break; default: break; } @@ -38674,6 +45012,12 @@ void path_switch_request_ies_o::value_c::set(types::options e) break; case types::rrc_resume_cause: break; + case types::nrue_security_cap: + c.init(); + break; + case types::ps_cell_info: + c.init(); + break; case types::nulltype: break; default: @@ -38723,6 +45067,12 @@ path_switch_request_ies_o::value_c::value_c(const path_switch_request_ies_o::val case types::rrc_resume_cause: c.init(other.c.get()); break; + case types::nrue_security_cap: + c.init(other.c.get()); + break; + case types::ps_cell_info: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -38776,6 +45126,12 @@ path_switch_request_ies_o::value_c::operator=(const path_switch_request_ies_o::v case types::rrc_resume_cause: c.set(other.c.get()); break; + case types::nrue_security_cap: + c.set(other.c.get()); + break; + case types::ps_cell_info: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -38832,6 +45188,14 @@ void path_switch_request_ies_o::value_c::to_json(json_writer& j) const case types::rrc_resume_cause: j.write_str("RRC-Establishment-Cause", c.get().to_string()); break; + case types::nrue_security_cap: + j.write_fieldname("NRUESecurityCapabilities"); + c.get().to_json(j); + break; + case types::ps_cell_info: + j.write_fieldname("PSCellInformation"); + c.get().to_json(j); + break; default: log_invalid_choice_id(type_, "path_switch_request_ies_o::value_c"); } @@ -38881,6 +45245,12 @@ SRSASN_CODE path_switch_request_ies_o::value_c::pack(bit_ref& bref) const case types::rrc_resume_cause: HANDLE_CODE(c.get().pack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::ps_cell_info: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "path_switch_request_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -38931,6 +45301,12 @@ SRSASN_CODE path_switch_request_ies_o::value_c::unpack(cbit_ref& bref) case types::rrc_resume_cause: HANDLE_CODE(c.get().unpack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::ps_cell_info: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "path_switch_request_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -38952,8 +45328,10 @@ std::string path_switch_request_ies_o::value_c::types_opts::to_string() const "CSGMembershipStatus", "TunnelInformation", "OCTET STRING", - "RRC-Establishment-Cause"}; - return convert_enum_idx(options, 13, value, "path_switch_request_ies_o::value_c::types"); + "RRC-Establishment-Cause", + "NRUESecurityCapabilities", + "PSCellInformation"}; + return convert_enum_idx(options, 15, value, "path_switch_request_ies_o::value_c::types"); } // Value ::= OPEN TYPE @@ -40031,12 +46409,12 @@ std::string s1_setup_fail_ies_o::value_c::types_opts::to_string() const // S1SetupRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t s1_setup_request_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {59, 60, 64, 137, 128, 228, 234}; - return map_enum_number(options, 7, idx, "id"); + static const uint32_t options[] = {59, 60, 64, 137, 128, 228, 234, 291}; + return map_enum_number(options, 8, idx, "id"); } bool s1_setup_request_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {59, 60, 64, 137, 128, 228, 234}; + static const uint32_t options[] = {59, 60, 64, 137, 128, 228, 234, 291}; for (const auto& o : options) { if (o == id) { return true; @@ -40061,6 +46439,8 @@ crit_e s1_setup_request_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 234: return crit_e::ignore; + case 291: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -40091,6 +46471,9 @@ s1_setup_request_ies_o::value_c s1_setup_request_ies_o::get_value(const uint32_t case 234: ret.set(value_c::types::nb_io_t_default_paging_drx); break; + case 291: + ret.set(value_c::types::connectedeng_nb_list); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -40113,6 +46496,8 @@ presence_e s1_setup_request_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 234: return presence_e::optional; + case 291: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -40155,6 +46540,11 @@ nb_io_t_default_paging_drx_e& s1_setup_request_ies_o::value_c::nb_io_t_default_p assert_choice_type("NB-IoT-DefaultPagingDRX", type_.to_string(), "Value"); return c.get(); } +connectedeng_nb_list_l& s1_setup_request_ies_o::value_c::connectedeng_nb_list() +{ + assert_choice_type("ConnectedengNBList", type_.to_string(), "Value"); + return c.get(); +} const global_enb_id_s& s1_setup_request_ies_o::value_c::global_enb_id() const { assert_choice_type("Global-ENB-ID", type_.to_string(), "Value"); @@ -40190,6 +46580,11 @@ const nb_io_t_default_paging_drx_e& s1_setup_request_ies_o::value_c::nb_io_t_def assert_choice_type("NB-IoT-DefaultPagingDRX", type_.to_string(), "Value"); return c.get(); } +const connectedeng_nb_list_l& s1_setup_request_ies_o::value_c::connectedeng_nb_list() const +{ + assert_choice_type("ConnectedengNBList", type_.to_string(), "Value"); + return c.get(); +} void s1_setup_request_ies_o::value_c::destroy_() { switch (type_) { @@ -40205,6 +46600,9 @@ void s1_setup_request_ies_o::value_c::destroy_() case types::csg_id_list: c.destroy(); break; + case types::connectedeng_nb_list: + c.destroy(); + break; default: break; } @@ -40232,6 +46630,9 @@ void s1_setup_request_ies_o::value_c::set(types::options e) break; case types::nb_io_t_default_paging_drx: break; + case types::connectedeng_nb_list: + c.init(); + break; case types::nulltype: break; default: @@ -40263,6 +46664,9 @@ s1_setup_request_ies_o::value_c::value_c(const s1_setup_request_ies_o::value_c& case types::nb_io_t_default_paging_drx: c.init(other.c.get()); break; + case types::connectedeng_nb_list: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -40298,6 +46702,9 @@ s1_setup_request_ies_o::value_c::operator=(const s1_setup_request_ies_o::value_c case types::nb_io_t_default_paging_drx: c.set(other.c.get()); break; + case types::connectedeng_nb_list: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -40340,6 +46747,13 @@ void s1_setup_request_ies_o::value_c::to_json(json_writer& j) const case types::nb_io_t_default_paging_drx: j.write_str("NB-IoT-DefaultPagingDRX", c.get().to_string()); break; + case types::connectedeng_nb_list: + j.start_array("ConnectedengNBList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; default: log_invalid_choice_id(type_, "s1_setup_request_ies_o::value_c"); } @@ -40370,6 +46784,9 @@ SRSASN_CODE s1_setup_request_ies_o::value_c::pack(bit_ref& bref) const case types::nb_io_t_default_paging_drx: HANDLE_CODE(c.get().pack(bref)); break; + case types::connectedeng_nb_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; default: log_invalid_choice_id(type_, "s1_setup_request_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -40401,6 +46818,9 @@ SRSASN_CODE s1_setup_request_ies_o::value_c::unpack(cbit_ref& bref) case types::nb_io_t_default_paging_drx: HANDLE_CODE(c.get().unpack(bref)); break; + case types::connectedeng_nb_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; default: log_invalid_choice_id(type_, "s1_setup_request_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -40416,8 +46836,9 @@ std::string s1_setup_request_ies_o::value_c::types_opts::to_string() const "PagingDRX", "CSG-IdList", "UE-RetentionInformation", - "NB-IoT-DefaultPagingDRX"}; - return convert_enum_idx(options, 7, value, "s1_setup_request_ies_o::value_c::types"); + "NB-IoT-DefaultPagingDRX", + "ConnectedengNBList"}; + return convert_enum_idx(options, 8, value, "s1_setup_request_ies_o::value_c::types"); } // S1SetupResponseIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -40819,6 +47240,358 @@ uint8_t s1_setup_resp_ies_o::value_c::types_opts::to_number() const return 0; } +// SecondaryRATDataUsageReportIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES +uint32_t secondary_rat_data_usage_report_ies_o::idx_to_id(uint32_t idx) +{ + static const uint32_t options[] = {0, 8, 264, 266, 189, 297}; + return map_enum_number(options, 6, idx, "id"); +} +bool secondary_rat_data_usage_report_ies_o::is_id_valid(const uint32_t& id) +{ + static const uint32_t options[] = {0, 8, 264, 266, 189, 297}; + for (const auto& o : options) { + if (o == id) { + return true; + } + } + return false; +} +crit_e secondary_rat_data_usage_report_ies_o::get_crit(const uint32_t& id) +{ + switch (id) { + case 0: + return crit_e::ignore; + case 8: + return crit_e::ignore; + case 264: + return crit_e::ignore; + case 266: + return crit_e::ignore; + case 189: + return crit_e::ignore; + case 297: + return crit_e::ignore; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} +secondary_rat_data_usage_report_ies_o::value_c secondary_rat_data_usage_report_ies_o::get_value(const uint32_t& id) +{ + value_c ret{}; + switch (id) { + case 0: + ret.set(value_c::types::mme_ue_s1ap_id); + break; + case 8: + ret.set(value_c::types::enb_ue_s1ap_id); + break; + case 264: + ret.set(value_c::types::secondary_rat_data_usage_report_list); + break; + case 266: + ret.set(value_c::types::ho_flag); + break; + case 189: + ret.set(value_c::types::user_location_info); + break; + case 297: + ret.set(value_c::types::time_since_secondary_node_release); + break; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return ret; +} +presence_e secondary_rat_data_usage_report_ies_o::get_presence(const uint32_t& id) +{ + switch (id) { + case 0: + return presence_e::mandatory; + case 8: + return presence_e::mandatory; + case 264: + return presence_e::mandatory; + case 266: + return presence_e::optional; + case 189: + return presence_e::optional; + case 297: + return presence_e::optional; + default: + asn1::log_error("The id=%d is not recognized", id); + } + return {}; +} + +// Value ::= OPEN TYPE +uint64_t& secondary_rat_data_usage_report_ies_o::value_c::mme_ue_s1ap_id() +{ + assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); + return c.get(); +} +uint32_t& secondary_rat_data_usage_report_ies_o::value_c::enb_ue_s1ap_id() +{ + assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); + return c.get(); +} +secondary_rat_data_usage_report_list_l& +secondary_rat_data_usage_report_ies_o::value_c::secondary_rat_data_usage_report_list() +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} +ho_flag_e& secondary_rat_data_usage_report_ies_o::value_c::ho_flag() +{ + assert_choice_type("HandoverFlag", type_.to_string(), "Value"); + return c.get(); +} +user_location_info_s& secondary_rat_data_usage_report_ies_o::value_c::user_location_info() +{ + assert_choice_type("UserLocationInformation", type_.to_string(), "Value"); + return c.get(); +} +fixed_octstring<4, true>& secondary_rat_data_usage_report_ies_o::value_c::time_since_secondary_node_release() +{ + assert_choice_type("OCTET STRING", type_.to_string(), "Value"); + return c.get >(); +} +const uint64_t& secondary_rat_data_usage_report_ies_o::value_c::mme_ue_s1ap_id() const +{ + assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); + return c.get(); +} +const uint32_t& secondary_rat_data_usage_report_ies_o::value_c::enb_ue_s1ap_id() const +{ + assert_choice_type("INTEGER (0..16777215)", type_.to_string(), "Value"); + return c.get(); +} +const secondary_rat_data_usage_report_list_l& +secondary_rat_data_usage_report_ies_o::value_c::secondary_rat_data_usage_report_list() const +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} +const ho_flag_e& secondary_rat_data_usage_report_ies_o::value_c::ho_flag() const +{ + assert_choice_type("HandoverFlag", type_.to_string(), "Value"); + return c.get(); +} +const user_location_info_s& secondary_rat_data_usage_report_ies_o::value_c::user_location_info() const +{ + assert_choice_type("UserLocationInformation", type_.to_string(), "Value"); + return c.get(); +} +const fixed_octstring<4, true>& +secondary_rat_data_usage_report_ies_o::value_c::time_since_secondary_node_release() const +{ + assert_choice_type("OCTET STRING", type_.to_string(), "Value"); + return c.get >(); +} +void secondary_rat_data_usage_report_ies_o::value_c::destroy_() +{ + switch (type_) { + case types::secondary_rat_data_usage_report_list: + c.destroy(); + break; + case types::user_location_info: + c.destroy(); + break; + case types::time_since_secondary_node_release: + c.destroy >(); + break; + default: + break; + } +} +void secondary_rat_data_usage_report_ies_o::value_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::mme_ue_s1ap_id: + break; + case types::enb_ue_s1ap_id: + break; + case types::secondary_rat_data_usage_report_list: + c.init(); + break; + case types::ho_flag: + break; + case types::user_location_info: + c.init(); + break; + case types::time_since_secondary_node_release: + c.init >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "secondary_rat_data_usage_report_ies_o::value_c"); + } +} +secondary_rat_data_usage_report_ies_o::value_c::value_c(const secondary_rat_data_usage_report_ies_o::value_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::mme_ue_s1ap_id: + c.init(other.c.get()); + break; + case types::enb_ue_s1ap_id: + c.init(other.c.get()); + break; + case types::secondary_rat_data_usage_report_list: + c.init(other.c.get()); + break; + case types::ho_flag: + c.init(other.c.get()); + break; + case types::user_location_info: + c.init(other.c.get()); + break; + case types::time_since_secondary_node_release: + c.init(other.c.get >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "secondary_rat_data_usage_report_ies_o::value_c"); + } +} +secondary_rat_data_usage_report_ies_o::value_c& +secondary_rat_data_usage_report_ies_o::value_c::operator=(const secondary_rat_data_usage_report_ies_o::value_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::mme_ue_s1ap_id: + c.set(other.c.get()); + break; + case types::enb_ue_s1ap_id: + c.set(other.c.get()); + break; + case types::secondary_rat_data_usage_report_list: + c.set(other.c.get()); + break; + case types::ho_flag: + c.set(other.c.get()); + break; + case types::user_location_info: + c.set(other.c.get()); + break; + case types::time_since_secondary_node_release: + c.set(other.c.get >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "secondary_rat_data_usage_report_ies_o::value_c"); + } + + return *this; +} +void secondary_rat_data_usage_report_ies_o::value_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::mme_ue_s1ap_id: + j.write_int("INTEGER (0..4294967295)", c.get()); + break; + case types::enb_ue_s1ap_id: + j.write_int("INTEGER (0..16777215)", c.get()); + break; + case types::secondary_rat_data_usage_report_list: + j.start_array("SecondaryRATDataUsageReportList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; + case types::ho_flag: + j.write_str("HandoverFlag", "handoverPreparation"); + break; + case types::user_location_info: + j.write_fieldname("UserLocationInformation"); + c.get().to_json(j); + break; + case types::time_since_secondary_node_release: + j.write_str("OCTET STRING", c.get >().to_string()); + break; + default: + log_invalid_choice_id(type_, "secondary_rat_data_usage_report_ies_o::value_c"); + } + j.end_obj(); +} +SRSASN_CODE secondary_rat_data_usage_report_ies_o::value_c::pack(bit_ref& bref) const +{ + varlength_field_pack_guard varlen_scope(bref, true); + switch (type_) { + case types::mme_ue_s1ap_id: + HANDLE_CODE(pack_integer(bref, c.get(), (uint64_t)0u, (uint64_t)4294967295u, false, true)); + break; + case types::enb_ue_s1ap_id: + HANDLE_CODE(pack_integer(bref, c.get(), (uint32_t)0u, (uint32_t)16777215u, false, true)); + break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; + case types::ho_flag: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::user_location_info: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::time_since_secondary_node_release: + HANDLE_CODE((c.get >().pack(bref))); + break; + default: + log_invalid_choice_id(type_, "secondary_rat_data_usage_report_ies_o::value_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE secondary_rat_data_usage_report_ies_o::value_c::unpack(cbit_ref& bref) +{ + varlength_field_unpack_guard varlen_scope(bref, true); + switch (type_) { + case types::mme_ue_s1ap_id: + HANDLE_CODE(unpack_integer(c.get(), bref, (uint64_t)0u, (uint64_t)4294967295u, false, true)); + break; + case types::enb_ue_s1ap_id: + HANDLE_CODE(unpack_integer(c.get(), bref, (uint32_t)0u, (uint32_t)16777215u, false, true)); + break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; + case types::ho_flag: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::user_location_info: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::time_since_secondary_node_release: + HANDLE_CODE((c.get >().unpack(bref))); + break; + default: + log_invalid_choice_id(type_, "secondary_rat_data_usage_report_ies_o::value_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +std::string secondary_rat_data_usage_report_ies_o::value_c::types_opts::to_string() const +{ + static const char* options[] = {"INTEGER (0..4294967295)", + "INTEGER (0..16777215)", + "SecondaryRATDataUsageReportList", + "HandoverFlag", + "UserLocationInformation", + "OCTET STRING"}; + return convert_enum_idx(options, 6, value, "secondary_rat_data_usage_report_ies_o::value_c::types"); +} + // TraceFailureIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t trace_fail_ind_ies_o::idx_to_id(uint32_t idx) { @@ -41318,12 +48091,12 @@ std::string trace_start_ies_o::value_c::types_opts::to_string() const // UECapabilityInfoIndicationIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t ue_cap_info_ind_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 74, 198}; - return map_enum_number(options, 4, idx, "id"); + static const uint32_t options[] = {0, 8, 74, 198, 263, 272}; + return map_enum_number(options, 6, idx, "id"); } bool ue_cap_info_ind_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 74, 198}; + static const uint32_t options[] = {0, 8, 74, 198, 263, 272}; for (const auto& o : options) { if (o == id) { return true; @@ -41342,6 +48115,10 @@ crit_e ue_cap_info_ind_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 198: return crit_e::ignore; + case 263: + return crit_e::ignore; + case 272: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -41363,6 +48140,12 @@ ue_cap_info_ind_ies_o::value_c ue_cap_info_ind_ies_o::get_value(const uint32_t& case 198: ret.set(value_c::types::ue_radio_cap_for_paging); break; + case 263: + ret.set(value_c::types::ue_application_layer_meas_cap); + break; + case 272: + ret.set(value_c::types::lte_m_ind); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -41379,6 +48162,10 @@ presence_e ue_cap_info_ind_ies_o::get_presence(const uint32_t& id) return presence_e::mandatory; case 198: return presence_e::optional; + case 263: + return presence_e::optional; + case 272: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -41406,6 +48193,16 @@ unbounded_octstring& ue_cap_info_ind_ies_o::value_c::ue_radio_cap_for_pagi assert_choice_type("OCTET STRING", type_.to_string(), "Value"); return c.get >(); } +fixed_bitstring<8, false, true>& ue_cap_info_ind_ies_o::value_c::ue_application_layer_meas_cap() +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} +lte_m_ind_e& ue_cap_info_ind_ies_o::value_c::lte_m_ind() +{ + assert_choice_type("LTE-M-Indication", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& ue_cap_info_ind_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -41426,6 +48223,16 @@ const unbounded_octstring& ue_cap_info_ind_ies_o::value_c::ue_radio_cap_fo assert_choice_type("OCTET STRING", type_.to_string(), "Value"); return c.get >(); } +const fixed_bitstring<8, false, true>& ue_cap_info_ind_ies_o::value_c::ue_application_layer_meas_cap() const +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} +const lte_m_ind_e& ue_cap_info_ind_ies_o::value_c::lte_m_ind() const +{ + assert_choice_type("LTE-M-Indication", type_.to_string(), "Value"); + return c.get(); +} void ue_cap_info_ind_ies_o::value_c::destroy_() { switch (type_) { @@ -41435,6 +48242,9 @@ void ue_cap_info_ind_ies_o::value_c::destroy_() case types::ue_radio_cap_for_paging: c.destroy >(); break; + case types::ue_application_layer_meas_cap: + c.destroy >(); + break; default: break; } @@ -41454,6 +48264,11 @@ void ue_cap_info_ind_ies_o::value_c::set(types::options e) case types::ue_radio_cap_for_paging: c.init >(); break; + case types::ue_application_layer_meas_cap: + c.init >(); + break; + case types::lte_m_ind: + break; case types::nulltype: break; default: @@ -41476,6 +48291,12 @@ ue_cap_info_ind_ies_o::value_c::value_c(const ue_cap_info_ind_ies_o::value_c& ot case types::ue_radio_cap_for_paging: c.init(other.c.get >()); break; + case types::ue_application_layer_meas_cap: + c.init(other.c.get >()); + break; + case types::lte_m_ind: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -41501,6 +48322,12 @@ ue_cap_info_ind_ies_o::value_c& ue_cap_info_ind_ies_o::value_c::operator=(const case types::ue_radio_cap_for_paging: c.set(other.c.get >()); break; + case types::ue_application_layer_meas_cap: + c.set(other.c.get >()); + break; + case types::lte_m_ind: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -41525,6 +48352,12 @@ void ue_cap_info_ind_ies_o::value_c::to_json(json_writer& j) const case types::ue_radio_cap_for_paging: j.write_str("OCTET STRING", c.get >().to_string()); break; + case types::ue_application_layer_meas_cap: + j.write_str("BIT STRING", c.get >().to_string()); + break; + case types::lte_m_ind: + j.write_str("LTE-M-Indication", "lte-m"); + break; default: log_invalid_choice_id(type_, "ue_cap_info_ind_ies_o::value_c"); } @@ -41546,6 +48379,12 @@ SRSASN_CODE ue_cap_info_ind_ies_o::value_c::pack(bit_ref& bref) const case types::ue_radio_cap_for_paging: HANDLE_CODE(c.get >().pack(bref)); break; + case types::ue_application_layer_meas_cap: + HANDLE_CODE((c.get >().pack(bref))); + break; + case types::lte_m_ind: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "ue_cap_info_ind_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -41568,6 +48407,12 @@ SRSASN_CODE ue_cap_info_ind_ies_o::value_c::unpack(cbit_ref& bref) case types::ue_radio_cap_for_paging: HANDLE_CODE(c.get >().unpack(bref)); break; + case types::ue_application_layer_meas_cap: + HANDLE_CODE((c.get >().unpack(bref))); + break; + case types::lte_m_ind: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "ue_cap_info_ind_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -41577,8 +48422,13 @@ SRSASN_CODE ue_cap_info_ind_ies_o::value_c::unpack(cbit_ref& bref) std::string ue_cap_info_ind_ies_o::value_c::types_opts::to_string() const { - static const char* options[] = {"INTEGER (0..4294967295)", "INTEGER (0..16777215)", "OCTET STRING", "OCTET STRING"}; - return convert_enum_idx(options, 4, value, "ue_cap_info_ind_ies_o::value_c::types"); + static const char* options[] = {"INTEGER (0..4294967295)", + "INTEGER (0..16777215)", + "OCTET STRING", + "OCTET STRING", + "BIT STRING", + "LTE-M-Indication"}; + return convert_enum_idx(options, 6, value, "ue_cap_info_ind_ies_o::value_c::types"); } // UEContextModificationConfirmIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -42349,12 +49199,14 @@ std::string ue_context_mod_ind_ies_o::value_c::types_opts::to_string() const // UEContextModificationRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t ue_context_mod_request_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 73, 106, 66, 108, 107, 146, 159, 187, 195, 124, 243, 240, 248}; - return map_enum_number(options, 15, idx, "id"); + static const uint32_t options[] = { + 0, 8, 73, 106, 66, 108, 107, 146, 159, 187, 195, 124, 243, 240, 248, 269, 277, 299}; + return map_enum_number(options, 18, idx, "id"); } bool ue_context_mod_request_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 73, 106, 66, 108, 107, 146, 159, 187, 195, 124, 243, 240, 248}; + static const uint32_t options[] = { + 0, 8, 73, 106, 66, 108, 107, 146, 159, 187, 195, 124, 243, 240, 248, 269, 277, 299}; for (const auto& o : options) { if (o == id) { return true; @@ -42395,6 +49247,12 @@ crit_e ue_context_mod_request_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 248: return crit_e::ignore; + case 269: + return crit_e::ignore; + case 277: + return crit_e::ignore; + case 299: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -42449,6 +49307,15 @@ ue_context_mod_request_ies_o::value_c ue_context_mod_request_ies_o::get_value(co case 248: ret.set(value_c::types::ue_sidelink_aggregate_maximum_bitrate); break; + case 269: + ret.set(value_c::types::nrue_security_cap); + break; + case 277: + ret.set(value_c::types::aerial_uesubscription_info); + break; + case 299: + ret.set(value_c::types::add_rrm_prio_idx); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -42487,6 +49354,12 @@ presence_e ue_context_mod_request_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 248: return presence_e::optional; + case 269: + return presence_e::optional; + case 277: + return presence_e::optional; + case 299: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -42569,6 +49442,21 @@ ue_sidelink_aggregate_maximum_bitrate_s& ue_context_mod_request_ies_o::value_c:: assert_choice_type("UESidelinkAggregateMaximumBitrate", type_.to_string(), "Value"); return c.get(); } +nrue_security_cap_s& ue_context_mod_request_ies_o::value_c::nrue_security_cap() +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} +aerial_uesubscription_info_e& ue_context_mod_request_ies_o::value_c::aerial_uesubscription_info() +{ + assert_choice_type("AerialUEsubscriptionInformation", type_.to_string(), "Value"); + return c.get(); +} +fixed_bitstring<32, false, true>& ue_context_mod_request_ies_o::value_c::add_rrm_prio_idx() +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} const uint64_t& ue_context_mod_request_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -42645,6 +49533,21 @@ ue_context_mod_request_ies_o::value_c::ue_sidelink_aggregate_maximum_bitrate() c assert_choice_type("UESidelinkAggregateMaximumBitrate", type_.to_string(), "Value"); return c.get(); } +const nrue_security_cap_s& ue_context_mod_request_ies_o::value_c::nrue_security_cap() const +{ + assert_choice_type("NRUESecurityCapabilities", type_.to_string(), "Value"); + return c.get(); +} +const aerial_uesubscription_info_e& ue_context_mod_request_ies_o::value_c::aerial_uesubscription_info() const +{ + assert_choice_type("AerialUEsubscriptionInformation", type_.to_string(), "Value"); + return c.get(); +} +const fixed_bitstring<32, false, true>& ue_context_mod_request_ies_o::value_c::add_rrm_prio_idx() const +{ + assert_choice_type("BIT STRING", type_.to_string(), "Value"); + return c.get >(); +} void ue_context_mod_request_ies_o::value_c::destroy_() { switch (type_) { @@ -42669,6 +49572,12 @@ void ue_context_mod_request_ies_o::value_c::destroy_() case types::ue_sidelink_aggregate_maximum_bitrate: c.destroy(); break; + case types::nrue_security_cap: + c.destroy(); + break; + case types::add_rrm_prio_idx: + c.destroy >(); + break; default: break; } @@ -42715,6 +49624,14 @@ void ue_context_mod_request_ies_o::value_c::set(types::options e) case types::ue_sidelink_aggregate_maximum_bitrate: c.init(); break; + case types::nrue_security_cap: + c.init(); + break; + case types::aerial_uesubscription_info: + break; + case types::add_rrm_prio_idx: + c.init >(); + break; case types::nulltype: break; default: @@ -42770,6 +49687,15 @@ ue_context_mod_request_ies_o::value_c::value_c(const ue_context_mod_request_ies_ case types::ue_sidelink_aggregate_maximum_bitrate: c.init(other.c.get()); break; + case types::nrue_security_cap: + c.init(other.c.get()); + break; + case types::aerial_uesubscription_info: + c.init(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.init(other.c.get >()); + break; case types::nulltype: break; default: @@ -42829,6 +49755,15 @@ ue_context_mod_request_ies_o::value_c::operator=(const ue_context_mod_request_ie case types::ue_sidelink_aggregate_maximum_bitrate: c.set(other.c.get()); break; + case types::nrue_security_cap: + c.set(other.c.get()); + break; + case types::aerial_uesubscription_info: + c.set(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.set(other.c.get >()); + break; case types::nulltype: break; default: @@ -42892,6 +49827,16 @@ void ue_context_mod_request_ies_o::value_c::to_json(json_writer& j) const j.write_fieldname("UESidelinkAggregateMaximumBitrate"); c.get().to_json(j); break; + case types::nrue_security_cap: + j.write_fieldname("NRUESecurityCapabilities"); + c.get().to_json(j); + break; + case types::aerial_uesubscription_info: + j.write_str("AerialUEsubscriptionInformation", c.get().to_string()); + break; + case types::add_rrm_prio_idx: + j.write_str("BIT STRING", c.get >().to_string()); + break; default: log_invalid_choice_id(type_, "ue_context_mod_request_ies_o::value_c"); } @@ -42946,6 +49891,15 @@ SRSASN_CODE ue_context_mod_request_ies_o::value_c::pack(bit_ref& bref) const case types::ue_sidelink_aggregate_maximum_bitrate: HANDLE_CODE(c.get().pack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::aerial_uesubscription_info: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().pack(bref))); + break; default: log_invalid_choice_id(type_, "ue_context_mod_request_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -43001,6 +49955,15 @@ SRSASN_CODE ue_context_mod_request_ies_o::value_c::unpack(cbit_ref& bref) case types::ue_sidelink_aggregate_maximum_bitrate: HANDLE_CODE(c.get().unpack(bref)); break; + case types::nrue_security_cap: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::aerial_uesubscription_info: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().unpack(bref))); + break; default: log_invalid_choice_id(type_, "ue_context_mod_request_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -43024,8 +49987,11 @@ std::string ue_context_mod_request_ies_o::value_c::types_opts::to_string() const "SRVCCOperationPossible", "SRVCCOperationNotPossible", "V2XServicesAuthorized", - "UESidelinkAggregateMaximumBitrate"}; - return convert_enum_idx(options, 15, value, "ue_context_mod_request_ies_o::value_c::types"); + "UESidelinkAggregateMaximumBitrate", + "NRUESecurityCapabilities", + "AerialUEsubscriptionInformation", + "BIT STRING"}; + return convert_enum_idx(options, 18, value, "ue_context_mod_request_ies_o::value_c::types"); } // UEContextModificationResponseIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -43467,12 +50433,12 @@ uint8_t ue_context_release_cmd_ies_o::value_c::types_opts::to_number() const // UEContextReleaseComplete-IEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t ue_context_release_complete_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 58, 189, 213, 212}; - return map_enum_number(options, 6, idx, "id"); + static const uint32_t options[] = {0, 8, 58, 189, 213, 212, 264, 297}; + return map_enum_number(options, 8, idx, "id"); } bool ue_context_release_complete_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 58, 189, 213, 212}; + static const uint32_t options[] = {0, 8, 58, 189, 213, 212, 264, 297}; for (const auto& o : options) { if (o == id) { return true; @@ -43495,6 +50461,10 @@ crit_e ue_context_release_complete_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 212: return crit_e::ignore; + case 264: + return crit_e::ignore; + case 297: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -43522,6 +50492,12 @@ ue_context_release_complete_ies_o::value_c ue_context_release_complete_ies_o::ge case 212: ret.set(value_c::types::cell_id_and_ce_level_for_ce_capable_ues); break; + case 264: + ret.set(value_c::types::secondary_rat_data_usage_report_list); + break; + case 297: + ret.set(value_c::types::time_since_secondary_node_release); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -43542,6 +50518,10 @@ presence_e ue_context_release_complete_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 212: return presence_e::optional; + case 264: + return presence_e::optional; + case 297: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -43581,6 +50561,17 @@ ue_context_release_complete_ies_o::value_c::cell_id_and_ce_level_for_ce_capable_ assert_choice_type("CellIdentifierAndCELevelForCECapableUEs", type_.to_string(), "Value"); return c.get(); } +secondary_rat_data_usage_report_list_l& +ue_context_release_complete_ies_o::value_c::secondary_rat_data_usage_report_list() +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} +fixed_octstring<4, true>& ue_context_release_complete_ies_o::value_c::time_since_secondary_node_release() +{ + assert_choice_type("OCTET STRING", type_.to_string(), "Value"); + return c.get >(); +} const uint64_t& ue_context_release_complete_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -43613,6 +50604,17 @@ ue_context_release_complete_ies_o::value_c::cell_id_and_ce_level_for_ce_capable_ assert_choice_type("CellIdentifierAndCELevelForCECapableUEs", type_.to_string(), "Value"); return c.get(); } +const secondary_rat_data_usage_report_list_l& +ue_context_release_complete_ies_o::value_c::secondary_rat_data_usage_report_list() const +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} +const fixed_octstring<4, true>& ue_context_release_complete_ies_o::value_c::time_since_secondary_node_release() const +{ + assert_choice_type("OCTET STRING", type_.to_string(), "Value"); + return c.get >(); +} void ue_context_release_complete_ies_o::value_c::destroy_() { switch (type_) { @@ -43628,6 +50630,12 @@ void ue_context_release_complete_ies_o::value_c::destroy_() case types::cell_id_and_ce_level_for_ce_capable_ues: c.destroy(); break; + case types::secondary_rat_data_usage_report_list: + c.destroy(); + break; + case types::time_since_secondary_node_release: + c.destroy >(); + break; default: break; } @@ -43653,6 +50661,12 @@ void ue_context_release_complete_ies_o::value_c::set(types::options e) case types::cell_id_and_ce_level_for_ce_capable_ues: c.init(); break; + case types::secondary_rat_data_usage_report_list: + c.init(); + break; + case types::time_since_secondary_node_release: + c.init >(); + break; case types::nulltype: break; default: @@ -43681,6 +50695,12 @@ ue_context_release_complete_ies_o::value_c::value_c(const ue_context_release_com case types::cell_id_and_ce_level_for_ce_capable_ues: c.init(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.init(other.c.get()); + break; + case types::time_since_secondary_node_release: + c.init(other.c.get >()); + break; case types::nulltype: break; default: @@ -43713,6 +50733,12 @@ ue_context_release_complete_ies_o::value_c::operator=(const ue_context_release_c case types::cell_id_and_ce_level_for_ce_capable_ues: c.set(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.set(other.c.get()); + break; + case types::time_since_secondary_node_release: + c.set(other.c.get >()); + break; case types::nulltype: break; default: @@ -43747,6 +50773,16 @@ void ue_context_release_complete_ies_o::value_c::to_json(json_writer& j) const j.write_fieldname("CellIdentifierAndCELevelForCECapableUEs"); c.get().to_json(j); break; + case types::secondary_rat_data_usage_report_list: + j.start_array("SecondaryRATDataUsageReportList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; + case types::time_since_secondary_node_release: + j.write_str("OCTET STRING", c.get >().to_string()); + break; default: log_invalid_choice_id(type_, "ue_context_release_complete_ies_o::value_c"); } @@ -43774,6 +50810,12 @@ SRSASN_CODE ue_context_release_complete_ies_o::value_c::pack(bit_ref& bref) cons case types::cell_id_and_ce_level_for_ce_capable_ues: HANDLE_CODE(c.get().pack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; + case types::time_since_secondary_node_release: + HANDLE_CODE((c.get >().pack(bref))); + break; default: log_invalid_choice_id(type_, "ue_context_release_complete_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -43802,6 +50844,12 @@ SRSASN_CODE ue_context_release_complete_ies_o::value_c::unpack(cbit_ref& bref) case types::cell_id_and_ce_level_for_ce_capable_ues: HANDLE_CODE(c.get().unpack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; + case types::time_since_secondary_node_release: + HANDLE_CODE((c.get >().unpack(bref))); + break; default: log_invalid_choice_id(type_, "ue_context_release_complete_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -43816,19 +50864,21 @@ std::string ue_context_release_complete_ies_o::value_c::types_opts::to_string() "CriticalityDiagnostics", "UserLocationInformation", "InformationOnRecommendedCellsAndENBsForPaging", - "CellIdentifierAndCELevelForCECapableUEs"}; - return convert_enum_idx(options, 6, value, "ue_context_release_complete_ies_o::value_c::types"); + "CellIdentifierAndCELevelForCECapableUEs", + "SecondaryRATDataUsageReportList", + "OCTET STRING"}; + return convert_enum_idx(options, 8, value, "ue_context_release_complete_ies_o::value_c::types"); } // UEContextReleaseRequest-IEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t ue_context_release_request_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 2, 164}; - return map_enum_number(options, 4, idx, "id"); + static const uint32_t options[] = {0, 8, 2, 164, 264}; + return map_enum_number(options, 5, idx, "id"); } bool ue_context_release_request_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 2, 164}; + static const uint32_t options[] = {0, 8, 2, 164, 264}; for (const auto& o : options) { if (o == id) { return true; @@ -43847,6 +50897,8 @@ crit_e ue_context_release_request_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 164: return crit_e::reject; + case 264: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -43868,6 +50920,9 @@ ue_context_release_request_ies_o::value_c ue_context_release_request_ies_o::get_ case 164: ret.set(value_c::types::gw_context_release_ind); break; + case 264: + ret.set(value_c::types::secondary_rat_data_usage_report_list); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -43884,6 +50939,8 @@ presence_e ue_context_release_request_ies_o::get_presence(const uint32_t& id) return presence_e::mandatory; case 164: return presence_e::optional; + case 264: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -43911,6 +50968,12 @@ gw_context_release_ind_e& ue_context_release_request_ies_o::value_c::gw_context_ assert_choice_type("GWContextReleaseIndication", type_.to_string(), "Value"); return c.get(); } +secondary_rat_data_usage_report_list_l& +ue_context_release_request_ies_o::value_c::secondary_rat_data_usage_report_list() +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& ue_context_release_request_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -43931,12 +50994,21 @@ const gw_context_release_ind_e& ue_context_release_request_ies_o::value_c::gw_co assert_choice_type("GWContextReleaseIndication", type_.to_string(), "Value"); return c.get(); } +const secondary_rat_data_usage_report_list_l& +ue_context_release_request_ies_o::value_c::secondary_rat_data_usage_report_list() const +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} void ue_context_release_request_ies_o::value_c::destroy_() { switch (type_) { case types::cause: c.destroy(); break; + case types::secondary_rat_data_usage_report_list: + c.destroy(); + break; default: break; } @@ -43955,6 +51027,9 @@ void ue_context_release_request_ies_o::value_c::set(types::options e) break; case types::gw_context_release_ind: break; + case types::secondary_rat_data_usage_report_list: + c.init(); + break; case types::nulltype: break; default: @@ -43977,6 +51052,9 @@ ue_context_release_request_ies_o::value_c::value_c(const ue_context_release_requ case types::gw_context_release_ind: c.init(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -44003,6 +51081,9 @@ ue_context_release_request_ies_o::value_c::operator=(const ue_context_release_re case types::gw_context_release_ind: c.set(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -44028,6 +51109,13 @@ void ue_context_release_request_ies_o::value_c::to_json(json_writer& j) const case types::gw_context_release_ind: j.write_str("GWContextReleaseIndication", "true"); break; + case types::secondary_rat_data_usage_report_list: + j.start_array("SecondaryRATDataUsageReportList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; default: log_invalid_choice_id(type_, "ue_context_release_request_ies_o::value_c"); } @@ -44049,6 +51137,9 @@ SRSASN_CODE ue_context_release_request_ies_o::value_c::pack(bit_ref& bref) const case types::gw_context_release_ind: HANDLE_CODE(c.get().pack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; default: log_invalid_choice_id(type_, "ue_context_release_request_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -44071,6 +51162,9 @@ SRSASN_CODE ue_context_release_request_ies_o::value_c::unpack(cbit_ref& bref) case types::gw_context_release_ind: HANDLE_CODE(c.get().unpack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; default: log_invalid_choice_id(type_, "ue_context_release_request_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -44080,9 +51174,12 @@ SRSASN_CODE ue_context_release_request_ies_o::value_c::unpack(cbit_ref& bref) std::string ue_context_release_request_ies_o::value_c::types_opts::to_string() const { - static const char* options[] = { - "INTEGER (0..4294967295)", "INTEGER (0..16777215)", "Cause", "GWContextReleaseIndication"}; - return convert_enum_idx(options, 4, value, "ue_context_release_request_ies_o::value_c::types"); + static const char* options[] = {"INTEGER (0..4294967295)", + "INTEGER (0..16777215)", + "Cause", + "GWContextReleaseIndication", + "SecondaryRATDataUsageReportList"}; + return convert_enum_idx(options, 5, value, "ue_context_release_request_ies_o::value_c::types"); } // UEContextResumeFailureIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -44978,12 +52075,12 @@ std::string ue_context_resume_resp_ies_o::value_c::types_opts::to_string() const // UEContextSuspendRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t ue_context_suspend_request_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 213, 212}; - return map_enum_number(options, 4, idx, "id"); + static const uint32_t options[] = {0, 8, 213, 212, 264, 189, 297}; + return map_enum_number(options, 7, idx, "id"); } bool ue_context_suspend_request_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 213, 212}; + static const uint32_t options[] = {0, 8, 213, 212, 264, 189, 297}; for (const auto& o : options) { if (o == id) { return true; @@ -45002,6 +52099,12 @@ crit_e ue_context_suspend_request_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 212: return crit_e::ignore; + case 264: + return crit_e::ignore; + case 189: + return crit_e::ignore; + case 297: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -45023,6 +52126,15 @@ ue_context_suspend_request_ies_o::value_c ue_context_suspend_request_ies_o::get_ case 212: ret.set(value_c::types::cell_id_and_ce_level_for_ce_capable_ues); break; + case 264: + ret.set(value_c::types::secondary_rat_data_usage_report_list); + break; + case 189: + ret.set(value_c::types::user_location_info); + break; + case 297: + ret.set(value_c::types::time_since_secondary_node_release); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -45039,6 +52151,12 @@ presence_e ue_context_suspend_request_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 212: return presence_e::optional; + case 264: + return presence_e::optional; + case 189: + return presence_e::optional; + case 297: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -45068,6 +52186,22 @@ ue_context_suspend_request_ies_o::value_c::cell_id_and_ce_level_for_ce_capable_u assert_choice_type("CellIdentifierAndCELevelForCECapableUEs", type_.to_string(), "Value"); return c.get(); } +secondary_rat_data_usage_report_list_l& +ue_context_suspend_request_ies_o::value_c::secondary_rat_data_usage_report_list() +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} +user_location_info_s& ue_context_suspend_request_ies_o::value_c::user_location_info() +{ + assert_choice_type("UserLocationInformation", type_.to_string(), "Value"); + return c.get(); +} +fixed_octstring<4, true>& ue_context_suspend_request_ies_o::value_c::time_since_secondary_node_release() +{ + assert_choice_type("OCTET STRING", type_.to_string(), "Value"); + return c.get >(); +} const uint64_t& ue_context_suspend_request_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -45090,6 +52224,22 @@ ue_context_suspend_request_ies_o::value_c::cell_id_and_ce_level_for_ce_capable_u assert_choice_type("CellIdentifierAndCELevelForCECapableUEs", type_.to_string(), "Value"); return c.get(); } +const secondary_rat_data_usage_report_list_l& +ue_context_suspend_request_ies_o::value_c::secondary_rat_data_usage_report_list() const +{ + assert_choice_type("SecondaryRATDataUsageReportList", type_.to_string(), "Value"); + return c.get(); +} +const user_location_info_s& ue_context_suspend_request_ies_o::value_c::user_location_info() const +{ + assert_choice_type("UserLocationInformation", type_.to_string(), "Value"); + return c.get(); +} +const fixed_octstring<4, true>& ue_context_suspend_request_ies_o::value_c::time_since_secondary_node_release() const +{ + assert_choice_type("OCTET STRING", type_.to_string(), "Value"); + return c.get >(); +} void ue_context_suspend_request_ies_o::value_c::destroy_() { switch (type_) { @@ -45099,6 +52249,15 @@ void ue_context_suspend_request_ies_o::value_c::destroy_() case types::cell_id_and_ce_level_for_ce_capable_ues: c.destroy(); break; + case types::secondary_rat_data_usage_report_list: + c.destroy(); + break; + case types::user_location_info: + c.destroy(); + break; + case types::time_since_secondary_node_release: + c.destroy >(); + break; default: break; } @@ -45118,6 +52277,15 @@ void ue_context_suspend_request_ies_o::value_c::set(types::options e) case types::cell_id_and_ce_level_for_ce_capable_ues: c.init(); break; + case types::secondary_rat_data_usage_report_list: + c.init(); + break; + case types::user_location_info: + c.init(); + break; + case types::time_since_secondary_node_release: + c.init >(); + break; case types::nulltype: break; default: @@ -45140,6 +52308,15 @@ ue_context_suspend_request_ies_o::value_c::value_c(const ue_context_suspend_requ case types::cell_id_and_ce_level_for_ce_capable_ues: c.init(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.init(other.c.get()); + break; + case types::user_location_info: + c.init(other.c.get()); + break; + case types::time_since_secondary_node_release: + c.init(other.c.get >()); + break; case types::nulltype: break; default: @@ -45166,6 +52343,15 @@ ue_context_suspend_request_ies_o::value_c::operator=(const ue_context_suspend_re case types::cell_id_and_ce_level_for_ce_capable_ues: c.set(other.c.get()); break; + case types::secondary_rat_data_usage_report_list: + c.set(other.c.get()); + break; + case types::user_location_info: + c.set(other.c.get()); + break; + case types::time_since_secondary_node_release: + c.set(other.c.get >()); + break; case types::nulltype: break; default: @@ -45192,6 +52378,20 @@ void ue_context_suspend_request_ies_o::value_c::to_json(json_writer& j) const j.write_fieldname("CellIdentifierAndCELevelForCECapableUEs"); c.get().to_json(j); break; + case types::secondary_rat_data_usage_report_list: + j.start_array("SecondaryRATDataUsageReportList"); + for (const auto& e1 : c.get()) { + e1.to_json(j); + } + j.end_array(); + break; + case types::user_location_info: + j.write_fieldname("UserLocationInformation"); + c.get().to_json(j); + break; + case types::time_since_secondary_node_release: + j.write_str("OCTET STRING", c.get >().to_string()); + break; default: log_invalid_choice_id(type_, "ue_context_suspend_request_ies_o::value_c"); } @@ -45213,6 +52413,15 @@ SRSASN_CODE ue_context_suspend_request_ies_o::value_c::pack(bit_ref& bref) const case types::cell_id_and_ce_level_for_ce_capable_ues: HANDLE_CODE(c.get().pack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get(), 1, 256, true)); + break; + case types::user_location_info: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::time_since_secondary_node_release: + HANDLE_CODE((c.get >().pack(bref))); + break; default: log_invalid_choice_id(type_, "ue_context_suspend_request_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -45235,6 +52444,15 @@ SRSASN_CODE ue_context_suspend_request_ies_o::value_c::unpack(cbit_ref& bref) case types::cell_id_and_ce_level_for_ce_capable_ues: HANDLE_CODE(c.get().unpack(bref)); break; + case types::secondary_rat_data_usage_report_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get(), bref, 1, 256, true)); + break; + case types::user_location_info: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::time_since_secondary_node_release: + HANDLE_CODE((c.get >().unpack(bref))); + break; default: log_invalid_choice_id(type_, "ue_context_suspend_request_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -45247,8 +52465,11 @@ std::string ue_context_suspend_request_ies_o::value_c::types_opts::to_string() c static const char* options[] = {"INTEGER (0..4294967295)", "INTEGER (0..16777215)", "InformationOnRecommendedCellsAndENBsForPaging", - "CellIdentifierAndCELevelForCECapableUEs"}; - return convert_enum_idx(options, 4, value, "ue_context_suspend_request_ies_o::value_c::types"); + "CellIdentifierAndCELevelForCECapableUEs", + "SecondaryRATDataUsageReportList", + "UserLocationInformation", + "OCTET STRING"}; + return convert_enum_idx(options, 7, value, "ue_context_suspend_request_ies_o::value_c::types"); } // UEContextSuspendResponseIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -45524,12 +52745,12 @@ std::string ue_context_suspend_resp_ies_o::value_c::types_opts::to_string() cons // UEInformationTransferIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t ue_info_transfer_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {96, 252, 74, 283}; - return map_enum_number(options, 4, idx, "id"); + static const uint32_t options[] = {96, 252, 74, 278, 283}; + return map_enum_number(options, 5, idx, "id"); } bool ue_info_transfer_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {96, 252, 74, 283}; + static const uint32_t options[] = {96, 252, 74, 278, 283}; for (const auto& o : options) { if (o == id) { return true; @@ -45546,6 +52767,8 @@ crit_e ue_info_transfer_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 74: return crit_e::ignore; + case 278: + return crit_e::ignore; case 283: return crit_e::ignore; default: @@ -45566,6 +52789,9 @@ ue_info_transfer_ies_o::value_c ue_info_transfer_ies_o::get_value(const uint32_t case 74: ret.set(value_c::types::ue_radio_cap); break; + case 278: + ret.set(value_c::types::subscription_based_ue_differentiation_info); + break; case 283: ret.set(value_c::types::pending_data_ind); break; @@ -45583,6 +52809,8 @@ presence_e ue_info_transfer_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 74: return presence_e::optional; + case 278: + return presence_e::optional; case 283: return presence_e::optional; default: @@ -45607,6 +52835,12 @@ unbounded_octstring& ue_info_transfer_ies_o::value_c::ue_radio_cap() assert_choice_type("OCTET STRING", type_.to_string(), "Value"); return c.get >(); } +subscription_based_ue_differentiation_info_s& +ue_info_transfer_ies_o::value_c::subscription_based_ue_differentiation_info() +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} pending_data_ind_e& ue_info_transfer_ies_o::value_c::pending_data_ind() { assert_choice_type("PendingDataIndication", type_.to_string(), "Value"); @@ -45627,6 +52861,12 @@ const unbounded_octstring& ue_info_transfer_ies_o::value_c::ue_radio_cap() assert_choice_type("OCTET STRING", type_.to_string(), "Value"); return c.get >(); } +const subscription_based_ue_differentiation_info_s& +ue_info_transfer_ies_o::value_c::subscription_based_ue_differentiation_info() const +{ + assert_choice_type("Subscription-Based-UE-DifferentiationInfo", type_.to_string(), "Value"); + return c.get(); +} const pending_data_ind_e& ue_info_transfer_ies_o::value_c::pending_data_ind() const { assert_choice_type("PendingDataIndication", type_.to_string(), "Value"); @@ -45644,6 +52884,9 @@ void ue_info_transfer_ies_o::value_c::destroy_() case types::ue_radio_cap: c.destroy >(); break; + case types::subscription_based_ue_differentiation_info: + c.destroy(); + break; default: break; } @@ -45662,6 +52905,9 @@ void ue_info_transfer_ies_o::value_c::set(types::options e) case types::ue_radio_cap: c.init >(); break; + case types::subscription_based_ue_differentiation_info: + c.init(); + break; case types::pending_data_ind: break; case types::nulltype: @@ -45683,6 +52929,9 @@ ue_info_transfer_ies_o::value_c::value_c(const ue_info_transfer_ies_o::value_c& case types::ue_radio_cap: c.init(other.c.get >()); break; + case types::subscription_based_ue_differentiation_info: + c.init(other.c.get()); + break; case types::pending_data_ind: c.init(other.c.get()); break; @@ -45709,6 +52958,9 @@ ue_info_transfer_ies_o::value_c::operator=(const ue_info_transfer_ies_o::value_c case types::ue_radio_cap: c.set(other.c.get >()); break; + case types::subscription_based_ue_differentiation_info: + c.set(other.c.get()); + break; case types::pending_data_ind: c.set(other.c.get()); break; @@ -45735,6 +52987,10 @@ void ue_info_transfer_ies_o::value_c::to_json(json_writer& j) const case types::ue_radio_cap: j.write_str("OCTET STRING", c.get >().to_string()); break; + case types::subscription_based_ue_differentiation_info: + j.write_fieldname("Subscription-Based-UE-DifferentiationInfo"); + c.get().to_json(j); + break; case types::pending_data_ind: j.write_str("PendingDataIndication", "true"); break; @@ -45756,6 +53012,9 @@ SRSASN_CODE ue_info_transfer_ies_o::value_c::pack(bit_ref& bref) const case types::ue_radio_cap: HANDLE_CODE(c.get >().pack(bref)); break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().pack(bref)); + break; case types::pending_data_ind: HANDLE_CODE(c.get().pack(bref)); break; @@ -45778,6 +53037,9 @@ SRSASN_CODE ue_info_transfer_ies_o::value_c::unpack(cbit_ref& bref) case types::ue_radio_cap: HANDLE_CODE(c.get >().unpack(bref)); break; + case types::subscription_based_ue_differentiation_info: + HANDLE_CODE(c.get().unpack(bref)); + break; case types::pending_data_ind: HANDLE_CODE(c.get().unpack(bref)); break; @@ -45790,8 +53052,12 @@ SRSASN_CODE ue_info_transfer_ies_o::value_c::unpack(cbit_ref& bref) std::string ue_info_transfer_ies_o::value_c::types_opts::to_string() const { - static const char* options[] = {"S-TMSI", "E-RABLevelQoSParameters", "OCTET STRING", "PendingDataIndication"}; - return convert_enum_idx(options, 4, value, "ue_info_transfer_ies_o::value_c::types"); + static const char* options[] = {"S-TMSI", + "E-RABLevelQoSParameters", + "OCTET STRING", + "Subscription-Based-UE-DifferentiationInfo", + "PendingDataIndication"}; + return convert_enum_idx(options, 5, value, "ue_info_transfer_ies_o::value_c::types"); } // UERadioCapabilityMatchRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -46291,12 +53557,12 @@ std::string ue_radio_cap_match_resp_ies_o::value_c::types_opts::to_string() cons // UplinkNASTransport-IEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t ul_nas_transport_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {0, 8, 26, 100, 67, 155, 184, 186}; - return map_enum_number(options, 8, idx, "id"); + static const uint32_t options[] = {0, 8, 26, 100, 67, 155, 184, 186, 288}; + return map_enum_number(options, 9, idx, "id"); } bool ul_nas_transport_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {0, 8, 26, 100, 67, 155, 184, 186}; + static const uint32_t options[] = {0, 8, 26, 100, 67, 155, 184, 186, 288}; for (const auto& o : options) { if (o == id) { return true; @@ -46323,6 +53589,8 @@ crit_e ul_nas_transport_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 186: return crit_e::ignore; + case 288: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -46356,6 +53624,9 @@ ul_nas_transport_ies_o::value_c ul_nas_transport_ies_o::get_value(const uint32_t case 186: ret.set(value_c::types::lhn_id); break; + case 288: + ret.set(value_c::types::ps_cell_info); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -46380,6 +53651,8 @@ presence_e ul_nas_transport_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 186: return presence_e::optional; + case 288: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -46427,6 +53700,11 @@ bounded_octstring<32, 256, true>& ul_nas_transport_ies_o::value_c::lhn_id() assert_choice_type("OCTET STRING", type_.to_string(), "Value"); return c.get >(); } +ps_cell_info_s& ul_nas_transport_ies_o::value_c::ps_cell_info() +{ + assert_choice_type("PSCellInformation", type_.to_string(), "Value"); + return c.get(); +} const uint64_t& ul_nas_transport_ies_o::value_c::mme_ue_s1ap_id() const { assert_choice_type("INTEGER (0..4294967295)", type_.to_string(), "Value"); @@ -46467,6 +53745,11 @@ const bounded_octstring<32, 256, true>& ul_nas_transport_ies_o::value_c::lhn_id( assert_choice_type("OCTET STRING", type_.to_string(), "Value"); return c.get >(); } +const ps_cell_info_s& ul_nas_transport_ies_o::value_c::ps_cell_info() const +{ + assert_choice_type("PSCellInformation", type_.to_string(), "Value"); + return c.get(); +} void ul_nas_transport_ies_o::value_c::destroy_() { switch (type_) { @@ -46488,6 +53771,9 @@ void ul_nas_transport_ies_o::value_c::destroy_() case types::lhn_id: c.destroy >(); break; + case types::ps_cell_info: + c.destroy(); + break; default: break; } @@ -46519,6 +53805,9 @@ void ul_nas_transport_ies_o::value_c::set(types::options e) case types::lhn_id: c.init >(); break; + case types::ps_cell_info: + c.init(); + break; case types::nulltype: break; default: @@ -46553,6 +53842,9 @@ ul_nas_transport_ies_o::value_c::value_c(const ul_nas_transport_ies_o::value_c& case types::lhn_id: c.init(other.c.get >()); break; + case types::ps_cell_info: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -46591,6 +53883,9 @@ ul_nas_transport_ies_o::value_c::operator=(const ul_nas_transport_ies_o::value_c case types::lhn_id: c.set(other.c.get >()); break; + case types::ps_cell_info: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -46629,6 +53924,10 @@ void ul_nas_transport_ies_o::value_c::to_json(json_writer& j) const case types::lhn_id: j.write_str("OCTET STRING", c.get >().to_string()); break; + case types::ps_cell_info: + j.write_fieldname("PSCellInformation"); + c.get().to_json(j); + break; default: log_invalid_choice_id(type_, "ul_nas_transport_ies_o::value_c"); } @@ -46662,6 +53961,9 @@ SRSASN_CODE ul_nas_transport_ies_o::value_c::pack(bit_ref& bref) const case types::lhn_id: HANDLE_CODE((c.get >().pack(bref))); break; + case types::ps_cell_info: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "ul_nas_transport_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -46696,6 +53998,9 @@ SRSASN_CODE ul_nas_transport_ies_o::value_c::unpack(cbit_ref& bref) case types::lhn_id: HANDLE_CODE((c.get >().unpack(bref))); break; + case types::ps_cell_info: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "ul_nas_transport_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -46712,8 +54017,9 @@ std::string ul_nas_transport_ies_o::value_c::types_opts::to_string() const "TAI", "BIT STRING", "BIT STRING", - "OCTET STRING"}; - return convert_enum_idx(options, 8, value, "ul_nas_transport_ies_o::value_c::types"); + "OCTET STRING", + "PSCellInformation"}; + return convert_enum_idx(options, 9, value, "ul_nas_transport_ies_o::value_c::types"); } // UplinkNonUEAssociatedLPPaTransport-IEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -47639,12 +54945,12 @@ std::string ul_ueassociated_lp_pa_transport_ies_o::value_c::types_opts::to_strin // WriteReplaceWarningRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES uint32_t write_replace_warning_request_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {111, 112, 113, 114, 144, 115, 116, 117, 118, 119, 142}; - return map_enum_number(options, 11, idx, "id"); + static const uint32_t options[] = {111, 112, 113, 114, 144, 115, 116, 117, 118, 119, 142, 286}; + return map_enum_number(options, 12, idx, "id"); } bool write_replace_warning_request_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {111, 112, 113, 114, 144, 115, 116, 117, 118, 119, 142}; + static const uint32_t options[] = {111, 112, 113, 114, 144, 115, 116, 117, 118, 119, 142, 286}; for (const auto& o : options) { if (o == id) { return true; @@ -47677,6 +54983,8 @@ crit_e write_replace_warning_request_ies_o::get_crit(const uint32_t& id) return crit_e::ignore; case 142: return crit_e::reject; + case 286: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -47719,6 +55027,9 @@ write_replace_warning_request_ies_o::value_c write_replace_warning_request_ies_o case 142: ret.set(value_c::types::concurrent_warning_msg_ind); break; + case 286: + ret.set(value_c::types::warning_area_coordinates); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -47749,6 +55060,8 @@ presence_e write_replace_warning_request_ies_o::get_presence(const uint32_t& id) return presence_e::optional; case 142: return presence_e::optional; + case 286: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -47811,6 +55124,11 @@ concurrent_warning_msg_ind_e& write_replace_warning_request_ies_o::value_c::conc assert_choice_type("ConcurrentWarningMessageIndicator", type_.to_string(), "Value"); return c.get(); } +bounded_octstring<1, 1024, true>& write_replace_warning_request_ies_o::value_c::warning_area_coordinates() +{ + assert_choice_type("OCTET STRING", type_.to_string(), "Value"); + return c.get >(); +} const fixed_bitstring<16, false, true>& write_replace_warning_request_ies_o::value_c::msg_id() const { assert_choice_type("BIT STRING", type_.to_string(), "Value"); @@ -47866,6 +55184,11 @@ const concurrent_warning_msg_ind_e& write_replace_warning_request_ies_o::value_c assert_choice_type("ConcurrentWarningMessageIndicator", type_.to_string(), "Value"); return c.get(); } +const bounded_octstring<1, 1024, true>& write_replace_warning_request_ies_o::value_c::warning_area_coordinates() const +{ + assert_choice_type("OCTET STRING", type_.to_string(), "Value"); + return c.get >(); +} void write_replace_warning_request_ies_o::value_c::destroy_() { switch (type_) { @@ -47890,6 +55213,9 @@ void write_replace_warning_request_ies_o::value_c::destroy_() case types::warning_msg_contents: c.destroy >(); break; + case types::warning_area_coordinates: + c.destroy >(); + break; default: break; } @@ -47928,6 +55254,9 @@ void write_replace_warning_request_ies_o::value_c::set(types::options e) break; case types::concurrent_warning_msg_ind: break; + case types::warning_area_coordinates: + c.init >(); + break; case types::nulltype: break; default: @@ -47971,6 +55300,9 @@ write_replace_warning_request_ies_o::value_c::value_c(const write_replace_warnin case types::concurrent_warning_msg_ind: c.init(other.c.get()); break; + case types::warning_area_coordinates: + c.init(other.c.get >()); + break; case types::nulltype: break; default: @@ -48018,6 +55350,9 @@ write_replace_warning_request_ies_o::value_c::operator=(const write_replace_warn case types::concurrent_warning_msg_ind: c.set(other.c.get()); break; + case types::warning_area_coordinates: + c.set(other.c.get >()); + break; case types::nulltype: break; default: @@ -48064,6 +55399,9 @@ void write_replace_warning_request_ies_o::value_c::to_json(json_writer& j) const case types::concurrent_warning_msg_ind: j.write_str("ConcurrentWarningMessageIndicator", "true"); break; + case types::warning_area_coordinates: + j.write_str("OCTET STRING", c.get >().to_string()); + break; default: log_invalid_choice_id(type_, "write_replace_warning_request_ies_o::value_c"); } @@ -48106,6 +55444,9 @@ SRSASN_CODE write_replace_warning_request_ies_o::value_c::pack(bit_ref& bref) co case types::concurrent_warning_msg_ind: HANDLE_CODE(c.get().pack(bref)); break; + case types::warning_area_coordinates: + HANDLE_CODE((c.get >().pack(bref))); + break; default: log_invalid_choice_id(type_, "write_replace_warning_request_ies_o::value_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -48149,6 +55490,9 @@ SRSASN_CODE write_replace_warning_request_ies_o::value_c::unpack(cbit_ref& bref) case types::concurrent_warning_msg_ind: HANDLE_CODE(c.get().unpack(bref)); break; + case types::warning_area_coordinates: + HANDLE_CODE((c.get >().unpack(bref))); + break; default: log_invalid_choice_id(type_, "write_replace_warning_request_ies_o::value_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -48168,8 +55512,9 @@ std::string write_replace_warning_request_ies_o::value_c::types_opts::to_string( "OCTET STRING", "BIT STRING", "OCTET STRING", - "ConcurrentWarningMessageIndicator"}; - return convert_enum_idx(options, 11, value, "write_replace_warning_request_ies_o::value_c::types"); + "ConcurrentWarningMessageIndicator", + "OCTET STRING"}; + return convert_enum_idx(options, 12, value, "write_replace_warning_request_ies_o::value_c::types"); } // WriteReplaceWarningResponseIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES @@ -48684,11 +56029,13 @@ location_report_ies_container::location_report_ies_container() : enb_ue_s1ap_id(8, crit_e::reject), eutran_cgi(100, crit_e::ignore), tai(67, crit_e::ignore), - request_type(98, crit_e::ignore) + request_type(98, crit_e::ignore), + ps_cell_info(288, crit_e::ignore) {} SRSASN_CODE location_report_ies_container::pack(bit_ref& bref) const { uint32_t nof_ies = 5; + nof_ies += ps_cell_info_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -48696,6 +56043,9 @@ SRSASN_CODE location_report_ies_container::pack(bit_ref& bref) const HANDLE_CODE(eutran_cgi.pack(bref)); HANDLE_CODE(tai.pack(bref)); HANDLE_CODE(request_type.pack(bref)); + if (ps_cell_info_present) { + HANDLE_CODE(ps_cell_info.pack(bref)); + } return SRSASN_SUCCESS; } @@ -48740,6 +56090,12 @@ SRSASN_CODE location_report_ies_container::unpack(cbit_ref& bref) request_type.crit = c.crit; request_type.value = c.value.request_type(); break; + case 288: + ps_cell_info_present = true; + ps_cell_info.id = c.id; + ps_cell_info.crit = c.crit; + ps_cell_info.value = c.value.ps_cell_info(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -48765,6 +56121,10 @@ void location_report_ies_container::to_json(json_writer& j) const tai.to_json(j); j.write_fieldname(""); request_type.to_json(j); + if (ps_cell_info_present) { + j.write_fieldname(""); + ps_cell_info.to_json(j); + } j.end_obj(); } @@ -49058,18 +56418,82 @@ void mmecp_relocation_ind_s::to_json(json_writer& j) const j.end_obj(); } +template struct asn1::s1ap::protocol_ie_field_s; + +mme_cfg_transfer_ies_container::mme_cfg_transfer_ies_container() : + son_cfg_transfer_mct(130, crit_e::ignore), en_dcson_cfg_transfer_mct(295, crit_e::ignore) +{} +SRSASN_CODE mme_cfg_transfer_ies_container::pack(bit_ref& bref) const +{ + uint32_t nof_ies = 0; + nof_ies += son_cfg_transfer_mct_present ? 1 : 0; + nof_ies += en_dcson_cfg_transfer_mct_present ? 1 : 0; + pack_length(bref, nof_ies, 0u, 65535u, true); + + if (son_cfg_transfer_mct_present) { + HANDLE_CODE(son_cfg_transfer_mct.pack(bref)); + } + if (en_dcson_cfg_transfer_mct_present) { + HANDLE_CODE(en_dcson_cfg_transfer_mct.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE mme_cfg_transfer_ies_container::unpack(cbit_ref& bref) +{ + uint32_t nof_ies = 0; + unpack_length(nof_ies, bref, 0u, 65535u, true); + + for (; nof_ies > 0; --nof_ies) { + protocol_ie_field_s c; + HANDLE_CODE(c.unpack(bref)); + switch (c.id) { + case 130: + son_cfg_transfer_mct_present = true; + son_cfg_transfer_mct.id = c.id; + son_cfg_transfer_mct.crit = c.crit; + son_cfg_transfer_mct.value = c.value.son_cfg_transfer_mct(); + break; + case 295: + en_dcson_cfg_transfer_mct_present = true; + en_dcson_cfg_transfer_mct.id = c.id; + en_dcson_cfg_transfer_mct.crit = c.crit; + en_dcson_cfg_transfer_mct.value = c.value.en_dcson_cfg_transfer_mct(); + break; + default: + asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); + return SRSASN_ERROR_DECODE_FAIL; + } + } + + return SRSASN_SUCCESS; +} +void mme_cfg_transfer_ies_container::to_json(json_writer& j) const +{ + j.start_obj(); + if (son_cfg_transfer_mct_present) { + j.write_fieldname(""); + son_cfg_transfer_mct.to_json(j); + } + if (en_dcson_cfg_transfer_mct_present) { + j.write_fieldname(""); + en_dcson_cfg_transfer_mct.to_json(j); + } + j.end_obj(); +} + // MMEConfigurationTransfer ::= SEQUENCE SRSASN_CODE mme_cfg_transfer_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(pack_dyn_seq_of(bref, protocol_ies, 0, 65535, true)); + HANDLE_CODE(protocol_ies.pack(bref)); return SRSASN_SUCCESS; } SRSASN_CODE mme_cfg_transfer_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); - HANDLE_CODE(unpack_dyn_seq_of(protocol_ies, bref, 0, 65535, true)); + HANDLE_CODE(protocol_ies.unpack(bref)); return SRSASN_SUCCESS; } @@ -49077,6 +56501,7 @@ void mme_cfg_transfer_s::to_json(json_writer& j) const { j.start_obj(); j.write_fieldname("protocolIEs"); + protocol_ies.to_json(j); j.end_obj(); } @@ -50225,7 +57650,9 @@ path_switch_request_ies_container::path_switch_request_ies_container() : csg_membership_status(146, crit_e::ignore), tunnel_info_for_bbf(176, crit_e::ignore), lhn_id(186, crit_e::ignore), - rrc_resume_cause(245, crit_e::ignore) + rrc_resume_cause(245, crit_e::ignore), + nrue_security_cap(269, crit_e::ignore), + ps_cell_info(288, crit_e::ignore) {} SRSASN_CODE path_switch_request_ies_container::pack(bit_ref& bref) const { @@ -50237,6 +57664,8 @@ SRSASN_CODE path_switch_request_ies_container::pack(bit_ref& bref) const nof_ies += tunnel_info_for_bbf_present ? 1 : 0; nof_ies += lhn_id_present ? 1 : 0; nof_ies += rrc_resume_cause_present ? 1 : 0; + nof_ies += nrue_security_cap_present ? 1 : 0; + nof_ies += ps_cell_info_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(enb_ue_s1ap_id.pack(bref)); @@ -50266,6 +57695,12 @@ SRSASN_CODE path_switch_request_ies_container::pack(bit_ref& bref) const if (rrc_resume_cause_present) { HANDLE_CODE(rrc_resume_cause.pack(bref)); } + if (nrue_security_cap_present) { + HANDLE_CODE(nrue_security_cap.pack(bref)); + } + if (ps_cell_info_present) { + HANDLE_CODE(ps_cell_info.pack(bref)); + } return SRSASN_SUCCESS; } @@ -50358,6 +57793,18 @@ SRSASN_CODE path_switch_request_ies_container::unpack(cbit_ref& bref) rrc_resume_cause.crit = c.crit; rrc_resume_cause.value = c.value.rrc_resume_cause(); break; + case 269: + nrue_security_cap_present = true; + nrue_security_cap.id = c.id; + nrue_security_cap.crit = c.crit; + nrue_security_cap.value = c.value.nrue_security_cap(); + break; + case 288: + ps_cell_info_present = true; + ps_cell_info.id = c.id; + ps_cell_info.crit = c.crit; + ps_cell_info.value = c.value.ps_cell_info(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -50413,6 +57860,14 @@ void path_switch_request_ies_container::to_json(json_writer& j) const j.write_fieldname(""); rrc_resume_cause.to_json(j); } + if (nrue_security_cap_present) { + j.write_fieldname(""); + nrue_security_cap.to_json(j); + } + if (ps_cell_info_present) { + j.write_fieldname(""); + ps_cell_info.to_json(j); + } j.end_obj(); } @@ -50456,8 +57911,13 @@ path_switch_request_ack_ies_container::path_switch_request_ack_ies_container() : v2xservices_authorized(240, crit_e::ignore), ue_sidelink_aggregate_maximum_bitrate(248, crit_e::ignore), enhanced_coverage_restricted(251, crit_e::ignore), + nrue_security_cap(269, crit_e::ignore), ce_mode_brestricted(271, crit_e::ignore), - pending_data_ind(283, crit_e::ignore) + aerial_uesubscription_info(277, crit_e::ignore), + pending_data_ind(283, crit_e::ignore), + subscription_based_ue_differentiation_info(278, crit_e::ignore), + ho_restrict_list(41, crit_e::ignore), + add_rrm_prio_idx(299, crit_e::ignore) {} SRSASN_CODE path_switch_request_ack_ies_container::pack(bit_ref& bref) const { @@ -50473,8 +57933,13 @@ SRSASN_CODE path_switch_request_ack_ies_container::pack(bit_ref& bref) const nof_ies += v2xservices_authorized_present ? 1 : 0; nof_ies += ue_sidelink_aggregate_maximum_bitrate_present ? 1 : 0; nof_ies += enhanced_coverage_restricted_present ? 1 : 0; + nof_ies += nrue_security_cap_present ? 1 : 0; nof_ies += ce_mode_brestricted_present ? 1 : 0; + nof_ies += aerial_uesubscription_info_present ? 1 : 0; nof_ies += pending_data_ind_present ? 1 : 0; + nof_ies += subscription_based_ue_differentiation_info_present ? 1 : 0; + nof_ies += ho_restrict_list_present ? 1 : 0; + nof_ies += add_rrm_prio_idx_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -50513,12 +57978,27 @@ SRSASN_CODE path_switch_request_ack_ies_container::pack(bit_ref& bref) const if (enhanced_coverage_restricted_present) { HANDLE_CODE(enhanced_coverage_restricted.pack(bref)); } + if (nrue_security_cap_present) { + HANDLE_CODE(nrue_security_cap.pack(bref)); + } if (ce_mode_brestricted_present) { HANDLE_CODE(ce_mode_brestricted.pack(bref)); } + if (aerial_uesubscription_info_present) { + HANDLE_CODE(aerial_uesubscription_info.pack(bref)); + } if (pending_data_ind_present) { HANDLE_CODE(pending_data_ind.pack(bref)); } + if (subscription_based_ue_differentiation_info_present) { + HANDLE_CODE(subscription_based_ue_differentiation_info.pack(bref)); + } + if (ho_restrict_list_present) { + HANDLE_CODE(ho_restrict_list.pack(bref)); + } + if (add_rrm_prio_idx_present) { + HANDLE_CODE(add_rrm_prio_idx.pack(bref)); + } return SRSASN_SUCCESS; } @@ -50617,18 +58097,48 @@ SRSASN_CODE path_switch_request_ack_ies_container::unpack(cbit_ref& bref) enhanced_coverage_restricted.crit = c.crit; enhanced_coverage_restricted.value = c.value.enhanced_coverage_restricted(); break; + case 269: + nrue_security_cap_present = true; + nrue_security_cap.id = c.id; + nrue_security_cap.crit = c.crit; + nrue_security_cap.value = c.value.nrue_security_cap(); + break; case 271: ce_mode_brestricted_present = true; ce_mode_brestricted.id = c.id; ce_mode_brestricted.crit = c.crit; ce_mode_brestricted.value = c.value.ce_mode_brestricted(); break; + case 277: + aerial_uesubscription_info_present = true; + aerial_uesubscription_info.id = c.id; + aerial_uesubscription_info.crit = c.crit; + aerial_uesubscription_info.value = c.value.aerial_uesubscription_info(); + break; case 283: pending_data_ind_present = true; pending_data_ind.id = c.id; pending_data_ind.crit = c.crit; pending_data_ind.value = c.value.pending_data_ind(); break; + case 278: + subscription_based_ue_differentiation_info_present = true; + subscription_based_ue_differentiation_info.id = c.id; + subscription_based_ue_differentiation_info.crit = c.crit; + subscription_based_ue_differentiation_info.value = c.value.subscription_based_ue_differentiation_info(); + break; + case 41: + ho_restrict_list_present = true; + ho_restrict_list.id = c.id; + ho_restrict_list.crit = c.crit; + ho_restrict_list.value = c.value.ho_restrict_list(); + break; + case 299: + add_rrm_prio_idx_present = true; + add_rrm_prio_idx.id = c.id; + add_rrm_prio_idx.crit = c.crit; + add_rrm_prio_idx.value = c.value.add_rrm_prio_idx(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -50694,14 +58204,34 @@ void path_switch_request_ack_ies_container::to_json(json_writer& j) const j.write_fieldname(""); enhanced_coverage_restricted.to_json(j); } + if (nrue_security_cap_present) { + j.write_fieldname(""); + nrue_security_cap.to_json(j); + } if (ce_mode_brestricted_present) { j.write_fieldname(""); ce_mode_brestricted.to_json(j); } + if (aerial_uesubscription_info_present) { + j.write_fieldname(""); + aerial_uesubscription_info.to_json(j); + } if (pending_data_ind_present) { j.write_fieldname(""); pending_data_ind.to_json(j); } + if (subscription_based_ue_differentiation_info_present) { + j.write_fieldname(""); + subscription_based_ue_differentiation_info.to_json(j); + } + if (ho_restrict_list_present) { + j.write_fieldname(""); + ho_restrict_list.to_json(j); + } + if (add_rrm_prio_idx_present) { + j.write_fieldname(""); + add_rrm_prio_idx.to_json(j); + } j.end_obj(); } @@ -51367,7 +58897,8 @@ s1_setup_request_ies_container::s1_setup_request_ies_container() : default_paging_drx(137, crit_e::ignore), csg_id_list(128, crit_e::reject), ue_retention_info(228, crit_e::ignore), - nb_io_t_default_paging_drx(234, crit_e::ignore) + nb_io_t_default_paging_drx(234, crit_e::ignore), + connectedeng_nb_list(291, crit_e::ignore) {} SRSASN_CODE s1_setup_request_ies_container::pack(bit_ref& bref) const { @@ -51376,6 +58907,7 @@ SRSASN_CODE s1_setup_request_ies_container::pack(bit_ref& bref) const nof_ies += csg_id_list_present ? 1 : 0; nof_ies += ue_retention_info_present ? 1 : 0; nof_ies += nb_io_t_default_paging_drx_present ? 1 : 0; + nof_ies += connectedeng_nb_list_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(global_enb_id.pack(bref)); @@ -51393,6 +58925,9 @@ SRSASN_CODE s1_setup_request_ies_container::pack(bit_ref& bref) const if (nb_io_t_default_paging_drx_present) { HANDLE_CODE(nb_io_t_default_paging_drx.pack(bref)); } + if (connectedeng_nb_list_present) { + HANDLE_CODE(connectedeng_nb_list.pack(bref)); + } return SRSASN_SUCCESS; } @@ -51449,6 +58984,12 @@ SRSASN_CODE s1_setup_request_ies_container::unpack(cbit_ref& bref) nb_io_t_default_paging_drx.crit = c.crit; nb_io_t_default_paging_drx.value = c.value.nb_io_t_default_paging_drx(); break; + case 291: + connectedeng_nb_list_present = true; + connectedeng_nb_list.id = c.id; + connectedeng_nb_list.crit = c.crit; + connectedeng_nb_list.value = c.value.connectedeng_nb_list(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -51486,6 +59027,10 @@ void s1_setup_request_ies_container::to_json(json_writer& j) const j.write_fieldname(""); nb_io_t_default_paging_drx.to_json(j); } + if (connectedeng_nb_list_present) { + j.write_fieldname(""); + connectedeng_nb_list.to_json(j); + } j.end_obj(); } @@ -51671,6 +59216,145 @@ void s1_setup_resp_s::to_json(json_writer& j) const j.end_obj(); } +template struct asn1::s1ap::protocol_ie_field_s; + +secondary_rat_data_usage_report_ies_container::secondary_rat_data_usage_report_ies_container() : + mme_ue_s1ap_id(0, crit_e::ignore), + enb_ue_s1ap_id(8, crit_e::ignore), + secondary_rat_data_usage_report_list(264, crit_e::ignore), + ho_flag(266, crit_e::ignore), + user_location_info(189, crit_e::ignore), + time_since_secondary_node_release(297, crit_e::ignore) +{} +SRSASN_CODE secondary_rat_data_usage_report_ies_container::pack(bit_ref& bref) const +{ + uint32_t nof_ies = 3; + nof_ies += ho_flag_present ? 1 : 0; + nof_ies += user_location_info_present ? 1 : 0; + nof_ies += time_since_secondary_node_release_present ? 1 : 0; + pack_length(bref, nof_ies, 0u, 65535u, true); + + HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); + HANDLE_CODE(enb_ue_s1ap_id.pack(bref)); + HANDLE_CODE(secondary_rat_data_usage_report_list.pack(bref)); + if (ho_flag_present) { + HANDLE_CODE(ho_flag.pack(bref)); + } + if (user_location_info_present) { + HANDLE_CODE(user_location_info.pack(bref)); + } + if (time_since_secondary_node_release_present) { + HANDLE_CODE(time_since_secondary_node_release.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE secondary_rat_data_usage_report_ies_container::unpack(cbit_ref& bref) +{ + uint32_t nof_ies = 0; + unpack_length(nof_ies, bref, 0u, 65535u, true); + + uint32_t nof_mandatory_ies = 3; + + for (; nof_ies > 0; --nof_ies) { + protocol_ie_field_s c; + HANDLE_CODE(c.unpack(bref)); + switch (c.id) { + case 0: + nof_mandatory_ies--; + mme_ue_s1ap_id.id = c.id; + mme_ue_s1ap_id.crit = c.crit; + mme_ue_s1ap_id.value = c.value.mme_ue_s1ap_id(); + break; + case 8: + nof_mandatory_ies--; + enb_ue_s1ap_id.id = c.id; + enb_ue_s1ap_id.crit = c.crit; + enb_ue_s1ap_id.value = c.value.enb_ue_s1ap_id(); + break; + case 264: + nof_mandatory_ies--; + secondary_rat_data_usage_report_list.id = c.id; + secondary_rat_data_usage_report_list.crit = c.crit; + secondary_rat_data_usage_report_list.value = c.value.secondary_rat_data_usage_report_list(); + break; + case 266: + ho_flag_present = true; + ho_flag.id = c.id; + ho_flag.crit = c.crit; + ho_flag.value = c.value.ho_flag(); + break; + case 189: + user_location_info_present = true; + user_location_info.id = c.id; + user_location_info.crit = c.crit; + user_location_info.value = c.value.user_location_info(); + break; + case 297: + time_since_secondary_node_release_present = true; + time_since_secondary_node_release.id = c.id; + time_since_secondary_node_release.crit = c.crit; + time_since_secondary_node_release.value = c.value.time_since_secondary_node_release(); + break; + default: + asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); + return SRSASN_ERROR_DECODE_FAIL; + } + } + if (nof_mandatory_ies > 0) { + asn1::log_error("Mandatory fields are missing\n"); + + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} +void secondary_rat_data_usage_report_ies_container::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname(""); + mme_ue_s1ap_id.to_json(j); + j.write_fieldname(""); + enb_ue_s1ap_id.to_json(j); + j.write_fieldname(""); + secondary_rat_data_usage_report_list.to_json(j); + if (ho_flag_present) { + j.write_fieldname(""); + ho_flag.to_json(j); + } + if (user_location_info_present) { + j.write_fieldname(""); + user_location_info.to_json(j); + } + if (time_since_secondary_node_release_present) { + j.write_fieldname(""); + time_since_secondary_node_release.to_json(j); + } + j.end_obj(); +} + +// SecondaryRATDataUsageReport ::= SEQUENCE +SRSASN_CODE secondary_rat_data_usage_report_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(protocol_ies.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE secondary_rat_data_usage_report_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(protocol_ies.unpack(bref)); + + return SRSASN_SUCCESS; +} +void secondary_rat_data_usage_report_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("protocolIEs"); + protocol_ies.to_json(j); + j.end_obj(); +} + template struct asn1::s1ap::protocol_ie_field_s; trace_fail_ind_ies_container::trace_fail_ind_ies_container() : @@ -51873,12 +59557,16 @@ ue_cap_info_ind_ies_container::ue_cap_info_ind_ies_container() : mme_ue_s1ap_id(0, crit_e::reject), enb_ue_s1ap_id(8, crit_e::reject), ue_radio_cap(74, crit_e::ignore), - ue_radio_cap_for_paging(198, crit_e::ignore) + ue_radio_cap_for_paging(198, crit_e::ignore), + ue_application_layer_meas_cap(263, crit_e::ignore), + lte_m_ind(272, crit_e::ignore) {} SRSASN_CODE ue_cap_info_ind_ies_container::pack(bit_ref& bref) const { uint32_t nof_ies = 3; nof_ies += ue_radio_cap_for_paging_present ? 1 : 0; + nof_ies += ue_application_layer_meas_cap_present ? 1 : 0; + nof_ies += lte_m_ind_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -51887,6 +59575,12 @@ SRSASN_CODE ue_cap_info_ind_ies_container::pack(bit_ref& bref) const if (ue_radio_cap_for_paging_present) { HANDLE_CODE(ue_radio_cap_for_paging.pack(bref)); } + if (ue_application_layer_meas_cap_present) { + HANDLE_CODE(ue_application_layer_meas_cap.pack(bref)); + } + if (lte_m_ind_present) { + HANDLE_CODE(lte_m_ind.pack(bref)); + } return SRSASN_SUCCESS; } @@ -51925,6 +59619,18 @@ SRSASN_CODE ue_cap_info_ind_ies_container::unpack(cbit_ref& bref) ue_radio_cap_for_paging.crit = c.crit; ue_radio_cap_for_paging.value = c.value.ue_radio_cap_for_paging(); break; + case 263: + ue_application_layer_meas_cap_present = true; + ue_application_layer_meas_cap.id = c.id; + ue_application_layer_meas_cap.crit = c.crit; + ue_application_layer_meas_cap.value = c.value.ue_application_layer_meas_cap(); + break; + case 272: + lte_m_ind_present = true; + lte_m_ind.id = c.id; + lte_m_ind.crit = c.crit; + lte_m_ind.value = c.value.lte_m_ind(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -51950,6 +59656,14 @@ void ue_cap_info_ind_ies_container::to_json(json_writer& j) const j.write_fieldname(""); ue_radio_cap_for_paging.to_json(j); } + if (ue_application_layer_meas_cap_present) { + j.write_fieldname(""); + ue_application_layer_meas_cap.to_json(j); + } + if (lte_m_ind_present) { + j.write_fieldname(""); + lte_m_ind.to_json(j); + } j.end_obj(); } @@ -52313,7 +60027,10 @@ ue_context_mod_request_ies_container::ue_context_mod_request_ies_container() : srvcc_operation_possible(124, crit_e::ignore), srvcc_operation_not_possible(243, crit_e::ignore), v2xservices_authorized(240, crit_e::ignore), - ue_sidelink_aggregate_maximum_bitrate(248, crit_e::ignore) + ue_sidelink_aggregate_maximum_bitrate(248, crit_e::ignore), + nrue_security_cap(269, crit_e::ignore), + aerial_uesubscription_info(277, crit_e::ignore), + add_rrm_prio_idx(299, crit_e::ignore) {} SRSASN_CODE ue_context_mod_request_ies_container::pack(bit_ref& bref) const { @@ -52331,6 +60048,9 @@ SRSASN_CODE ue_context_mod_request_ies_container::pack(bit_ref& bref) const nof_ies += srvcc_operation_not_possible_present ? 1 : 0; nof_ies += v2xservices_authorized_present ? 1 : 0; nof_ies += ue_sidelink_aggregate_maximum_bitrate_present ? 1 : 0; + nof_ies += nrue_security_cap_present ? 1 : 0; + nof_ies += aerial_uesubscription_info_present ? 1 : 0; + nof_ies += add_rrm_prio_idx_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -52374,6 +60094,15 @@ SRSASN_CODE ue_context_mod_request_ies_container::pack(bit_ref& bref) const if (ue_sidelink_aggregate_maximum_bitrate_present) { HANDLE_CODE(ue_sidelink_aggregate_maximum_bitrate.pack(bref)); } + if (nrue_security_cap_present) { + HANDLE_CODE(nrue_security_cap.pack(bref)); + } + if (aerial_uesubscription_info_present) { + HANDLE_CODE(aerial_uesubscription_info.pack(bref)); + } + if (add_rrm_prio_idx_present) { + HANDLE_CODE(add_rrm_prio_idx.pack(bref)); + } return SRSASN_SUCCESS; } @@ -52478,6 +60207,24 @@ SRSASN_CODE ue_context_mod_request_ies_container::unpack(cbit_ref& bref) ue_sidelink_aggregate_maximum_bitrate.crit = c.crit; ue_sidelink_aggregate_maximum_bitrate.value = c.value.ue_sidelink_aggregate_maximum_bitrate(); break; + case 269: + nrue_security_cap_present = true; + nrue_security_cap.id = c.id; + nrue_security_cap.crit = c.crit; + nrue_security_cap.value = c.value.nrue_security_cap(); + break; + case 277: + aerial_uesubscription_info_present = true; + aerial_uesubscription_info.id = c.id; + aerial_uesubscription_info.crit = c.crit; + aerial_uesubscription_info.value = c.value.aerial_uesubscription_info(); + break; + case 299: + add_rrm_prio_idx_present = true; + add_rrm_prio_idx.id = c.id; + add_rrm_prio_idx.crit = c.crit; + add_rrm_prio_idx.value = c.value.add_rrm_prio_idx(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -52549,6 +60296,18 @@ void ue_context_mod_request_ies_container::to_json(json_writer& j) const j.write_fieldname(""); ue_sidelink_aggregate_maximum_bitrate.to_json(j); } + if (nrue_security_cap_present) { + j.write_fieldname(""); + nrue_security_cap.to_json(j); + } + if (aerial_uesubscription_info_present) { + j.write_fieldname(""); + aerial_uesubscription_info.to_json(j); + } + if (add_rrm_prio_idx_present) { + j.write_fieldname(""); + add_rrm_prio_idx.to_json(j); + } j.end_obj(); } @@ -52763,7 +60522,9 @@ ue_context_release_complete_ies_container::ue_context_release_complete_ies_conta crit_diagnostics(58, crit_e::ignore), user_location_info(189, crit_e::ignore), info_on_recommended_cells_and_enbs_for_paging(213, crit_e::ignore), - cell_id_and_ce_level_for_ce_capable_ues(212, crit_e::ignore) + cell_id_and_ce_level_for_ce_capable_ues(212, crit_e::ignore), + secondary_rat_data_usage_report_list(264, crit_e::ignore), + time_since_secondary_node_release(297, crit_e::ignore) {} SRSASN_CODE ue_context_release_complete_ies_container::pack(bit_ref& bref) const { @@ -52772,6 +60533,8 @@ SRSASN_CODE ue_context_release_complete_ies_container::pack(bit_ref& bref) const nof_ies += user_location_info_present ? 1 : 0; nof_ies += info_on_recommended_cells_and_enbs_for_paging_present ? 1 : 0; nof_ies += cell_id_and_ce_level_for_ce_capable_ues_present ? 1 : 0; + nof_ies += secondary_rat_data_usage_report_list_present ? 1 : 0; + nof_ies += time_since_secondary_node_release_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -52788,6 +60551,12 @@ SRSASN_CODE ue_context_release_complete_ies_container::pack(bit_ref& bref) const if (cell_id_and_ce_level_for_ce_capable_ues_present) { HANDLE_CODE(cell_id_and_ce_level_for_ce_capable_ues.pack(bref)); } + if (secondary_rat_data_usage_report_list_present) { + HANDLE_CODE(secondary_rat_data_usage_report_list.pack(bref)); + } + if (time_since_secondary_node_release_present) { + HANDLE_CODE(time_since_secondary_node_release.pack(bref)); + } return SRSASN_SUCCESS; } @@ -52838,6 +60607,18 @@ SRSASN_CODE ue_context_release_complete_ies_container::unpack(cbit_ref& bref) cell_id_and_ce_level_for_ce_capable_ues.crit = c.crit; cell_id_and_ce_level_for_ce_capable_ues.value = c.value.cell_id_and_ce_level_for_ce_capable_ues(); break; + case 264: + secondary_rat_data_usage_report_list_present = true; + secondary_rat_data_usage_report_list.id = c.id; + secondary_rat_data_usage_report_list.crit = c.crit; + secondary_rat_data_usage_report_list.value = c.value.secondary_rat_data_usage_report_list(); + break; + case 297: + time_since_secondary_node_release_present = true; + time_since_secondary_node_release.id = c.id; + time_since_secondary_node_release.crit = c.crit; + time_since_secondary_node_release.value = c.value.time_since_secondary_node_release(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -52873,6 +60654,14 @@ void ue_context_release_complete_ies_container::to_json(json_writer& j) const j.write_fieldname(""); cell_id_and_ce_level_for_ce_capable_ues.to_json(j); } + if (secondary_rat_data_usage_report_list_present) { + j.write_fieldname(""); + secondary_rat_data_usage_report_list.to_json(j); + } + if (time_since_secondary_node_release_present) { + j.write_fieldname(""); + time_since_secondary_node_release.to_json(j); + } j.end_obj(); } @@ -52905,12 +60694,14 @@ ue_context_release_request_ies_container::ue_context_release_request_ies_contain mme_ue_s1ap_id(0, crit_e::reject), enb_ue_s1ap_id(8, crit_e::reject), cause(2, crit_e::ignore), - gw_context_release_ind(164, crit_e::reject) + gw_context_release_ind(164, crit_e::reject), + secondary_rat_data_usage_report_list(264, crit_e::ignore) {} SRSASN_CODE ue_context_release_request_ies_container::pack(bit_ref& bref) const { uint32_t nof_ies = 3; nof_ies += gw_context_release_ind_present ? 1 : 0; + nof_ies += secondary_rat_data_usage_report_list_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -52919,6 +60710,9 @@ SRSASN_CODE ue_context_release_request_ies_container::pack(bit_ref& bref) const if (gw_context_release_ind_present) { HANDLE_CODE(gw_context_release_ind.pack(bref)); } + if (secondary_rat_data_usage_report_list_present) { + HANDLE_CODE(secondary_rat_data_usage_report_list.pack(bref)); + } return SRSASN_SUCCESS; } @@ -52957,6 +60751,12 @@ SRSASN_CODE ue_context_release_request_ies_container::unpack(cbit_ref& bref) gw_context_release_ind.crit = c.crit; gw_context_release_ind.value = c.value.gw_context_release_ind(); break; + case 264: + secondary_rat_data_usage_report_list_present = true; + secondary_rat_data_usage_report_list.id = c.id; + secondary_rat_data_usage_report_list.crit = c.crit; + secondary_rat_data_usage_report_list.value = c.value.secondary_rat_data_usage_report_list(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -52982,6 +60782,10 @@ void ue_context_release_request_ies_container::to_json(json_writer& j) const j.write_fieldname(""); gw_context_release_ind.to_json(j); } + if (secondary_rat_data_usage_report_list_present) { + j.write_fieldname(""); + secondary_rat_data_usage_report_list.to_json(j); + } j.end_obj(); } @@ -53381,13 +61185,19 @@ ue_context_suspend_request_ies_container::ue_context_suspend_request_ies_contain mme_ue_s1ap_id(0, crit_e::reject), enb_ue_s1ap_id(8, crit_e::reject), info_on_recommended_cells_and_enbs_for_paging(213, crit_e::ignore), - cell_id_and_ce_level_for_ce_capable_ues(212, crit_e::ignore) + cell_id_and_ce_level_for_ce_capable_ues(212, crit_e::ignore), + secondary_rat_data_usage_report_list(264, crit_e::ignore), + user_location_info(189, crit_e::ignore), + time_since_secondary_node_release(297, crit_e::ignore) {} SRSASN_CODE ue_context_suspend_request_ies_container::pack(bit_ref& bref) const { uint32_t nof_ies = 2; nof_ies += info_on_recommended_cells_and_enbs_for_paging_present ? 1 : 0; nof_ies += cell_id_and_ce_level_for_ce_capable_ues_present ? 1 : 0; + nof_ies += secondary_rat_data_usage_report_list_present ? 1 : 0; + nof_ies += user_location_info_present ? 1 : 0; + nof_ies += time_since_secondary_node_release_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -53398,6 +61208,15 @@ SRSASN_CODE ue_context_suspend_request_ies_container::pack(bit_ref& bref) const if (cell_id_and_ce_level_for_ce_capable_ues_present) { HANDLE_CODE(cell_id_and_ce_level_for_ce_capable_ues.pack(bref)); } + if (secondary_rat_data_usage_report_list_present) { + HANDLE_CODE(secondary_rat_data_usage_report_list.pack(bref)); + } + if (user_location_info_present) { + HANDLE_CODE(user_location_info.pack(bref)); + } + if (time_since_secondary_node_release_present) { + HANDLE_CODE(time_since_secondary_node_release.pack(bref)); + } return SRSASN_SUCCESS; } @@ -53436,6 +61255,24 @@ SRSASN_CODE ue_context_suspend_request_ies_container::unpack(cbit_ref& bref) cell_id_and_ce_level_for_ce_capable_ues.crit = c.crit; cell_id_and_ce_level_for_ce_capable_ues.value = c.value.cell_id_and_ce_level_for_ce_capable_ues(); break; + case 264: + secondary_rat_data_usage_report_list_present = true; + secondary_rat_data_usage_report_list.id = c.id; + secondary_rat_data_usage_report_list.crit = c.crit; + secondary_rat_data_usage_report_list.value = c.value.secondary_rat_data_usage_report_list(); + break; + case 189: + user_location_info_present = true; + user_location_info.id = c.id; + user_location_info.crit = c.crit; + user_location_info.value = c.value.user_location_info(); + break; + case 297: + time_since_secondary_node_release_present = true; + time_since_secondary_node_release.id = c.id; + time_since_secondary_node_release.crit = c.crit; + time_since_secondary_node_release.value = c.value.time_since_secondary_node_release(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -53463,6 +61300,18 @@ void ue_context_suspend_request_ies_container::to_json(json_writer& j) const j.write_fieldname(""); cell_id_and_ce_level_for_ce_capable_ues.to_json(j); } + if (secondary_rat_data_usage_report_list_present) { + j.write_fieldname(""); + secondary_rat_data_usage_report_list.to_json(j); + } + if (user_location_info_present) { + j.write_fieldname(""); + user_location_info.to_json(j); + } + if (time_since_secondary_node_release_present) { + j.write_fieldname(""); + time_since_secondary_node_release.to_json(j); + } j.end_obj(); } @@ -53609,6 +61458,7 @@ ue_info_transfer_ies_container::ue_info_transfer_ies_container() : s_tmsi(96, crit_e::reject), ue_level_qos_params(252, crit_e::ignore), ue_radio_cap(74, crit_e::ignore), + subscription_based_ue_differentiation_info(278, crit_e::ignore), pending_data_ind(283, crit_e::ignore) {} SRSASN_CODE ue_info_transfer_ies_container::pack(bit_ref& bref) const @@ -53616,6 +61466,7 @@ SRSASN_CODE ue_info_transfer_ies_container::pack(bit_ref& bref) const uint32_t nof_ies = 1; nof_ies += ue_level_qos_params_present ? 1 : 0; nof_ies += ue_radio_cap_present ? 1 : 0; + nof_ies += subscription_based_ue_differentiation_info_present ? 1 : 0; nof_ies += pending_data_ind_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); @@ -53626,6 +61477,9 @@ SRSASN_CODE ue_info_transfer_ies_container::pack(bit_ref& bref) const if (ue_radio_cap_present) { HANDLE_CODE(ue_radio_cap.pack(bref)); } + if (subscription_based_ue_differentiation_info_present) { + HANDLE_CODE(subscription_based_ue_differentiation_info.pack(bref)); + } if (pending_data_ind_present) { HANDLE_CODE(pending_data_ind.pack(bref)); } @@ -53661,6 +61515,12 @@ SRSASN_CODE ue_info_transfer_ies_container::unpack(cbit_ref& bref) ue_radio_cap.crit = c.crit; ue_radio_cap.value = c.value.ue_radio_cap(); break; + case 278: + subscription_based_ue_differentiation_info_present = true; + subscription_based_ue_differentiation_info.id = c.id; + subscription_based_ue_differentiation_info.crit = c.crit; + subscription_based_ue_differentiation_info.value = c.value.subscription_based_ue_differentiation_info(); + break; case 283: pending_data_ind_present = true; pending_data_ind.id = c.id; @@ -53692,6 +61552,10 @@ void ue_info_transfer_ies_container::to_json(json_writer& j) const j.write_fieldname(""); ue_radio_cap.to_json(j); } + if (subscription_based_ue_differentiation_info_present) { + j.write_fieldname(""); + subscription_based_ue_differentiation_info.to_json(j); + } if (pending_data_ind_present) { j.write_fieldname(""); pending_data_ind.to_json(j); @@ -53938,7 +61802,8 @@ ul_nas_transport_ies_container::ul_nas_transport_ies_container() : tai(67, crit_e::ignore), gw_transport_layer_address(155, crit_e::ignore), sipto_l_gw_transport_layer_address(184, crit_e::ignore), - lhn_id(186, crit_e::ignore) + lhn_id(186, crit_e::ignore), + ps_cell_info(288, crit_e::ignore) {} SRSASN_CODE ul_nas_transport_ies_container::pack(bit_ref& bref) const { @@ -53946,6 +61811,7 @@ SRSASN_CODE ul_nas_transport_ies_container::pack(bit_ref& bref) const nof_ies += gw_transport_layer_address_present ? 1 : 0; nof_ies += sipto_l_gw_transport_layer_address_present ? 1 : 0; nof_ies += lhn_id_present ? 1 : 0; + nof_ies += ps_cell_info_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(mme_ue_s1ap_id.pack(bref)); @@ -53962,6 +61828,9 @@ SRSASN_CODE ul_nas_transport_ies_container::pack(bit_ref& bref) const if (lhn_id_present) { HANDLE_CODE(lhn_id.pack(bref)); } + if (ps_cell_info_present) { + HANDLE_CODE(ps_cell_info.pack(bref)); + } return SRSASN_SUCCESS; } @@ -54024,6 +61893,12 @@ SRSASN_CODE ul_nas_transport_ies_container::unpack(cbit_ref& bref) lhn_id.crit = c.crit; lhn_id.value = c.value.lhn_id(); break; + case 288: + ps_cell_info_present = true; + ps_cell_info.id = c.id; + ps_cell_info.crit = c.crit; + ps_cell_info.value = c.value.ps_cell_info(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -54061,6 +61936,10 @@ void ul_nas_transport_ies_container::to_json(json_writer& j) const j.write_fieldname(""); lhn_id.to_json(j); } + if (ps_cell_info_present) { + j.write_fieldname(""); + ps_cell_info.to_json(j); + } j.end_obj(); } @@ -54461,7 +62340,8 @@ write_replace_warning_request_ies_container::write_replace_warning_request_ies_c warning_security_info(117, crit_e::ignore), data_coding_scheme(118, crit_e::ignore), warning_msg_contents(119, crit_e::ignore), - concurrent_warning_msg_ind(142, crit_e::reject) + concurrent_warning_msg_ind(142, crit_e::reject), + warning_area_coordinates(286, crit_e::ignore) {} SRSASN_CODE write_replace_warning_request_ies_container::pack(bit_ref& bref) const { @@ -54473,6 +62353,7 @@ SRSASN_CODE write_replace_warning_request_ies_container::pack(bit_ref& bref) con nof_ies += data_coding_scheme_present ? 1 : 0; nof_ies += warning_msg_contents_present ? 1 : 0; nof_ies += concurrent_warning_msg_ind_present ? 1 : 0; + nof_ies += warning_area_coordinates_present ? 1 : 0; pack_length(bref, nof_ies, 0u, 65535u, true); HANDLE_CODE(msg_id.pack(bref)); @@ -54500,6 +62381,9 @@ SRSASN_CODE write_replace_warning_request_ies_container::pack(bit_ref& bref) con if (concurrent_warning_msg_ind_present) { HANDLE_CODE(concurrent_warning_msg_ind.pack(bref)); } + if (warning_area_coordinates_present) { + HANDLE_CODE(warning_area_coordinates.pack(bref)); + } return SRSASN_SUCCESS; } @@ -54580,6 +62464,12 @@ SRSASN_CODE write_replace_warning_request_ies_container::unpack(cbit_ref& bref) concurrent_warning_msg_ind.crit = c.crit; concurrent_warning_msg_ind.value = c.value.concurrent_warning_msg_ind(); break; + case 286: + warning_area_coordinates_present = true; + warning_area_coordinates.id = c.id; + warning_area_coordinates.crit = c.crit; + warning_area_coordinates.value = c.value.warning_area_coordinates(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -54631,6 +62521,10 @@ void write_replace_warning_request_ies_container::to_json(json_writer& j) const j.write_fieldname(""); concurrent_warning_msg_ind.to_json(j); } + if (warning_area_coordinates_present) { + j.write_fieldname(""); + warning_area_coordinates.to_json(j); + } j.end_obj(); } @@ -58008,6 +65902,9 @@ void last_visited_cell_item_c::destroy_() case types::geran_cell: c.destroy(); break; + case types::ng_ran_cell: + c.destroy >(); + break; default: break; } @@ -58026,6 +65923,9 @@ void last_visited_cell_item_c::set(types::options e) case types::geran_cell: c.init(); break; + case types::ng_ran_cell: + c.init >(); + break; case types::nulltype: break; default: @@ -58045,6 +65945,9 @@ last_visited_cell_item_c::last_visited_cell_item_c(const last_visited_cell_item_ case types::geran_cell: c.init(other.c.get()); break; + case types::ng_ran_cell: + c.init(other.c.get >()); + break; case types::nulltype: break; default: @@ -58067,6 +65970,9 @@ last_visited_cell_item_c& last_visited_cell_item_c::operator=(const last_visited case types::geran_cell: c.set(other.c.get()); break; + case types::ng_ran_cell: + c.set(other.c.get >()); + break; case types::nulltype: break; default: @@ -58090,6 +65996,9 @@ void last_visited_cell_item_c::to_json(json_writer& j) const j.write_fieldname("gERAN-Cell"); c.get().to_json(j); break; + case types::ng_ran_cell: + j.write_str("nG-RAN-Cell", c.get >().to_string()); + break; default: log_invalid_choice_id(type_, "last_visited_cell_item_c"); } @@ -58108,6 +66017,10 @@ SRSASN_CODE last_visited_cell_item_c::pack(bit_ref& bref) const case types::geran_cell: HANDLE_CODE(c.get().pack(bref)); break; + case types::ng_ran_cell: { + varlength_field_pack_guard varlen_scope(bref, true); + HANDLE_CODE(c.get >().pack(bref)); + } break; default: log_invalid_choice_id(type_, "last_visited_cell_item_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -58129,6 +66042,10 @@ SRSASN_CODE last_visited_cell_item_c::unpack(cbit_ref& bref) case types::geran_cell: HANDLE_CODE(c.get().unpack(bref)); break; + case types::ng_ran_cell: { + varlength_field_unpack_guard varlen_scope(bref, true); + HANDLE_CODE(c.get >().unpack(bref)); + } break; default: log_invalid_choice_id(type_, "last_visited_cell_item_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -58138,8 +66055,8 @@ SRSASN_CODE last_visited_cell_item_c::unpack(cbit_ref& bref) std::string last_visited_cell_item_c::types_opts::to_string() const { - static const char* options[] = {"e-UTRAN-Cell", "uTRAN-Cell", "gERAN-Cell"}; - return convert_enum_idx(options, 3, value, "last_visited_cell_item_c::types"); + static const char* options[] = {"e-UTRAN-Cell", "uTRAN-Cell", "gERAN-Cell", "nG-RAN-Cell"}; + return convert_enum_idx(options, 4, value, "last_visited_cell_item_c::types"); } // MultiCellLoadReportingRequest ::= SEQUENCE @@ -59287,15 +67204,22 @@ std::string so_ntransfer_resp_container_c::types_opts::to_string() const return convert_enum_idx(options, 7, value, "so_ntransfer_resp_container_c::types"); } +// IMSvoiceEPSfallbackfrom5G ::= ENUMERATED +std::string im_svoice_ep_sfallbackfrom5_g_opts::to_string() const +{ + static const char* options[] = {"true"}; + return convert_enum_idx(options, 1, value, "im_svoice_ep_sfallbackfrom5_g_e"); +} + // SourceeNB-ToTargeteNB-TransparentContainer-ExtIEs ::= OBJECT SET OF S1AP-PROTOCOL-EXTENSION uint32_t sourceenb_to_targetenb_transparent_container_ext_ies_o::idx_to_id(uint32_t idx) { - static const uint32_t options[] = {175, 194}; - return map_enum_number(options, 2, idx, "id"); + static const uint32_t options[] = {175, 194, 296, 299, 300}; + return map_enum_number(options, 5, idx, "id"); } bool sourceenb_to_targetenb_transparent_container_ext_ies_o::is_id_valid(const uint32_t& id) { - static const uint32_t options[] = {175, 194}; + static const uint32_t options[] = {175, 194, 296, 299, 300}; for (const auto& o : options) { if (o == id) { return true; @@ -59310,6 +67234,12 @@ crit_e sourceenb_to_targetenb_transparent_container_ext_ies_o::get_crit(const ui return crit_e::ignore; case 194: return crit_e::ignore; + case 296: + return crit_e::ignore; + case 299: + return crit_e::ignore; + case 300: + return crit_e::ignore; default: asn1::log_error("The id=%d is not recognized", id); } @@ -59326,6 +67256,15 @@ sourceenb_to_targetenb_transparent_container_ext_ies_o::get_ext(const uint32_t& case 194: ret.set(ext_c::types::ue_history_info_from_the_ue); break; + case 296: + ret.set(ext_c::types::im_svoice_ep_sfallbackfrom5_g); + break; + case 299: + ret.set(ext_c::types::add_rrm_prio_idx); + break; + case 300: + ret.set(ext_c::types::contextat_source); + break; default: asn1::log_error("The id=%d is not recognized", id); } @@ -59338,6 +67277,12 @@ presence_e sourceenb_to_targetenb_transparent_container_ext_ies_o::get_presence( return presence_e::optional; case 194: return presence_e::optional; + case 296: + return presence_e::optional; + case 299: + return presence_e::optional; + case 300: + return presence_e::optional; default: asn1::log_error("The id=%d is not recognized", id); } @@ -59355,6 +67300,22 @@ unbounded_octstring& sourceenb_to_targetenb_transparent_container_ext_ies_ assert_choice_type("OCTET STRING", type_.to_string(), "Extension"); return c.get >(); } +im_svoice_ep_sfallbackfrom5_g_e& +sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::im_svoice_ep_sfallbackfrom5_g() +{ + assert_choice_type("IMSvoiceEPSfallbackfrom5G", type_.to_string(), "Extension"); + return c.get(); +} +fixed_bitstring<32, false, true>& sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::add_rrm_prio_idx() +{ + assert_choice_type("BIT STRING", type_.to_string(), "Extension"); + return c.get >(); +} +contextat_source_s& sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::contextat_source() +{ + assert_choice_type("ContextatSource", type_.to_string(), "Extension"); + return c.get(); +} const fixed_bitstring<32, false, true>& sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::mob_info() const { assert_choice_type("BIT STRING", type_.to_string(), "Extension"); @@ -59366,6 +67327,23 @@ sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::ue_history_info_f assert_choice_type("OCTET STRING", type_.to_string(), "Extension"); return c.get >(); } +const im_svoice_ep_sfallbackfrom5_g_e& +sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::im_svoice_ep_sfallbackfrom5_g() const +{ + assert_choice_type("IMSvoiceEPSfallbackfrom5G", type_.to_string(), "Extension"); + return c.get(); +} +const fixed_bitstring<32, false, true>& +sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::add_rrm_prio_idx() const +{ + assert_choice_type("BIT STRING", type_.to_string(), "Extension"); + return c.get >(); +} +const contextat_source_s& sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::contextat_source() const +{ + assert_choice_type("ContextatSource", type_.to_string(), "Extension"); + return c.get(); +} void sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::destroy_() { switch (type_) { @@ -59375,6 +67353,12 @@ void sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::destroy_() case types::ue_history_info_from_the_ue: c.destroy >(); break; + case types::add_rrm_prio_idx: + c.destroy >(); + break; + case types::contextat_source: + c.destroy(); + break; default: break; } @@ -59390,6 +67374,14 @@ void sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::set(types::o case types::ue_history_info_from_the_ue: c.init >(); break; + case types::im_svoice_ep_sfallbackfrom5_g: + break; + case types::add_rrm_prio_idx: + c.init >(); + break; + case types::contextat_source: + c.init(); + break; case types::nulltype: break; default: @@ -59407,6 +67399,15 @@ sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::ext_c( case types::ue_history_info_from_the_ue: c.init(other.c.get >()); break; + case types::im_svoice_ep_sfallbackfrom5_g: + c.init(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.init(other.c.get >()); + break; + case types::contextat_source: + c.init(other.c.get()); + break; case types::nulltype: break; default: @@ -59428,6 +67429,15 @@ sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::operator=( case types::ue_history_info_from_the_ue: c.set(other.c.get >()); break; + case types::im_svoice_ep_sfallbackfrom5_g: + c.set(other.c.get()); + break; + case types::add_rrm_prio_idx: + c.set(other.c.get >()); + break; + case types::contextat_source: + c.set(other.c.get()); + break; case types::nulltype: break; default: @@ -59446,6 +67456,16 @@ void sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::to_json(json case types::ue_history_info_from_the_ue: j.write_str("OCTET STRING", c.get >().to_string()); break; + case types::im_svoice_ep_sfallbackfrom5_g: + j.write_str("IMSvoiceEPSfallbackfrom5G", "true"); + break; + case types::add_rrm_prio_idx: + j.write_str("BIT STRING", c.get >().to_string()); + break; + case types::contextat_source: + j.write_fieldname("ContextatSource"); + c.get().to_json(j); + break; default: log_invalid_choice_id(type_, "sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c"); } @@ -59461,6 +67481,15 @@ SRSASN_CODE sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::pack( case types::ue_history_info_from_the_ue: HANDLE_CODE(c.get >().pack(bref)); break; + case types::im_svoice_ep_sfallbackfrom5_g: + HANDLE_CODE(c.get().pack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().pack(bref))); + break; + case types::contextat_source: + HANDLE_CODE(c.get().pack(bref)); + break; default: log_invalid_choice_id(type_, "sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -59477,6 +67506,15 @@ SRSASN_CODE sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::unpac case types::ue_history_info_from_the_ue: HANDLE_CODE(c.get >().unpack(bref)); break; + case types::im_svoice_ep_sfallbackfrom5_g: + HANDLE_CODE(c.get().unpack(bref)); + break; + case types::add_rrm_prio_idx: + HANDLE_CODE((c.get >().unpack(bref))); + break; + case types::contextat_source: + HANDLE_CODE(c.get().unpack(bref)); + break; default: log_invalid_choice_id(type_, "sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -59486,21 +67524,37 @@ SRSASN_CODE sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::unpac std::string sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::types_opts::to_string() const { - static const char* options[] = {"BIT STRING", "OCTET STRING"}; - return convert_enum_idx(options, 2, value, "sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::types"); + static const char* options[] = { + "BIT STRING", "OCTET STRING", "IMSvoiceEPSfallbackfrom5G", "BIT STRING", "ContextatSource"}; + return convert_enum_idx(options, 5, value, "sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::types"); +} +uint8_t sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::types_opts::to_number() const +{ + if (value == im_svoice_ep_sfallbackfrom5_g) { + return 5; + } + invalid_enum_number(value, "sourceenb_to_targetenb_transparent_container_ext_ies_o::ext_c::types"); + return 0; } template struct asn1::s1ap::protocol_ext_field_s; sourceenb_to_targetenb_transparent_container_ext_ies_container:: sourceenb_to_targetenb_transparent_container_ext_ies_container() : - mob_info(175, crit_e::ignore), ue_history_info_from_the_ue(194, crit_e::ignore) + mob_info(175, crit_e::ignore), + ue_history_info_from_the_ue(194, crit_e::ignore), + im_svoice_ep_sfallbackfrom5_g(296, crit_e::ignore), + add_rrm_prio_idx(299, crit_e::ignore), + contextat_source(300, crit_e::ignore) {} SRSASN_CODE sourceenb_to_targetenb_transparent_container_ext_ies_container::pack(bit_ref& bref) const { uint32_t nof_ies = 0; nof_ies += mob_info_present ? 1 : 0; nof_ies += ue_history_info_from_the_ue_present ? 1 : 0; + nof_ies += im_svoice_ep_sfallbackfrom5_g_present ? 1 : 0; + nof_ies += add_rrm_prio_idx_present ? 1 : 0; + nof_ies += contextat_source_present ? 1 : 0; pack_length(bref, nof_ies, 1u, 65535u, true); if (mob_info_present) { @@ -59509,6 +67563,15 @@ SRSASN_CODE sourceenb_to_targetenb_transparent_container_ext_ies_container::pack if (ue_history_info_from_the_ue_present) { HANDLE_CODE(ue_history_info_from_the_ue.pack(bref)); } + if (im_svoice_ep_sfallbackfrom5_g_present) { + HANDLE_CODE(im_svoice_ep_sfallbackfrom5_g.pack(bref)); + } + if (add_rrm_prio_idx_present) { + HANDLE_CODE(add_rrm_prio_idx.pack(bref)); + } + if (contextat_source_present) { + HANDLE_CODE(contextat_source.pack(bref)); + } return SRSASN_SUCCESS; } @@ -59533,6 +67596,24 @@ SRSASN_CODE sourceenb_to_targetenb_transparent_container_ext_ies_container::unpa ue_history_info_from_the_ue.crit = c.crit; ue_history_info_from_the_ue.ext = c.ext_value.ue_history_info_from_the_ue(); break; + case 296: + im_svoice_ep_sfallbackfrom5_g_present = true; + im_svoice_ep_sfallbackfrom5_g.id = c.id; + im_svoice_ep_sfallbackfrom5_g.crit = c.crit; + im_svoice_ep_sfallbackfrom5_g.ext = c.ext_value.im_svoice_ep_sfallbackfrom5_g(); + break; + case 299: + add_rrm_prio_idx_present = true; + add_rrm_prio_idx.id = c.id; + add_rrm_prio_idx.crit = c.crit; + add_rrm_prio_idx.ext = c.ext_value.add_rrm_prio_idx(); + break; + case 300: + contextat_source_present = true; + contextat_source.id = c.id; + contextat_source.crit = c.crit; + contextat_source.ext = c.ext_value.contextat_source(); + break; default: asn1::log_error("Unpacked object ID=%d is not recognized\n", c.id); return SRSASN_ERROR_DECODE_FAIL; @@ -59552,6 +67633,18 @@ void sourceenb_to_targetenb_transparent_container_ext_ies_container::to_json(jso j.write_fieldname(""); ue_history_info_from_the_ue.to_json(j); } + if (im_svoice_ep_sfallbackfrom5_g_present) { + j.write_fieldname(""); + im_svoice_ep_sfallbackfrom5_g.to_json(j); + } + if (add_rrm_prio_idx_present) { + j.write_fieldname(""); + add_rrm_prio_idx.to_json(j); + } + if (contextat_source_present) { + j.write_fieldname(""); + contextat_source.to_json(j); + } j.end_obj(); } diff --git a/lib/test/asn1/CMakeLists.txt b/lib/test/asn1/CMakeLists.txt index ca33b7377..05c297dd4 100644 --- a/lib/test/asn1/CMakeLists.txt +++ b/lib/test/asn1/CMakeLists.txt @@ -6,9 +6,9 @@ # the distribution. # -add_executable(s1ap_test s1ap_test.cc) -target_link_libraries(s1ap_test srslte_common srslte_asn1 s1ap_asn1) -add_test(s1ap_test s1ap_test) +add_executable(s1ap_asn1_test s1ap_test.cc) +target_link_libraries(s1ap_asn1_test srslte_common srslte_asn1 s1ap_asn1) +add_test(s1ap_asn1_test s1ap_asn1_test) add_executable(srslte_asn1_rrc_mcch_test srslte_asn1_rrc_mcch_test.cc) target_link_libraries(srslte_asn1_rrc_mcch_test rrc_asn1 srslte_common)