asn1: move protocol_ie_single_container_s to asn1_utils, so it can be used by ngap, s1ap, and other layers

master
Francisco Paisana 3 years ago
parent c8f7976014
commit 6b181e7a94

@ -1445,6 +1445,82 @@ int test_pack_unpack_consistency(const Msg& msg)
return SRSASN_SUCCESS; return SRSASN_SUCCESS;
} }
/************************
General Layer Types
************************/
/// Enumerated used in RRC and RRC NR that distinguishes Release and Setup modes
struct setup_release_opts {
enum options { release, setup, nulltype } value;
const char* to_string() const
{
static const char* options[] = {"release", "setup"};
return convert_enum_idx(options, 2, value, "setup_release_c::types");
}
};
using setup_release_e = enumerated<setup_release_opts>;
// Criticality ::= ENUMERATED
struct crit_opts {
enum options { reject, ignore, notify, nulltype } value;
const char* to_string() const
{
static const char* options[] = {"reject", "ignore", "notify"};
return convert_enum_idx(options, 3, value, "crit_e");
}
};
typedef enumerated<crit_opts> crit_e;
// ProtocolIE-SingleContainer{LAYER-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE{{LAYER-PROTOCOL-IES}}
template <class ies_set_paramT_>
struct protocol_ie_single_container_s {
using value_type = typename ies_set_paramT_::value_c;
value_type value;
uint32_t id() const { return id_; }
crit_e crit() const { return ies_set_paramT_::get_crit(id_); }
value_type* operator->() { return &value; }
const value_type* operator->() const { return &value; }
value_type& operator*() { return value; }
const value_type& operator*() const { return value; }
SRSASN_CODE pack(bit_ref& bref) const
{
HANDLE_CODE(pack_integer(bref, id_, (uint32_t)0u, (uint32_t)65535u, false, true));
HANDLE_CODE(ies_set_paramT_::get_crit(id_).pack(bref));
HANDLE_CODE(value.pack(bref));
return SRSASN_SUCCESS;
}
SRSASN_CODE unpack(cbit_ref& bref)
{
HANDLE_CODE(unpack_integer(id_, bref, (uint32_t)0u, (uint32_t)65535u, false, true));
HANDLE_CODE(crit().unpack(bref));
value = ies_set_paramT_::get_value(id_);
HANDLE_CODE(value.unpack(bref));
return SRSASN_SUCCESS;
}
void to_json(json_writer& j) const
{
j.start_obj();
j.write_int("id", id_);
j.write_str("criticality", crit().to_string());
j.end_obj();
}
bool load_info_obj(const uint32_t& id_val)
{
if (not ies_set_paramT_::is_id_valid(id_val)) {
return false;
}
id_ = id_val;
value = ies_set_paramT_::get_value(id_);
return value.type().value != ies_set_paramT_::value_c::types_opts::nulltype;
}
private:
uint32_t id_ = 0;
};
} // namespace asn1 } // namespace asn1
#endif // SRSASN_COMMON_UTILS_H #endif // SRSASN_COMMON_UTILS_H

@ -291,14 +291,6 @@ namespace ngap {
* Struct Definitions * Struct Definitions
******************************************************************************/ ******************************************************************************/
// Criticality ::= ENUMERATED
struct crit_opts {
enum options { reject, ignore, notify, nulltype } value;
const char* to_string() const;
};
typedef enumerated<crit_opts> crit_e;
// Presence ::= ENUMERATED // Presence ::= ENUMERATED
struct presence_opts { struct presence_opts {
enum options { optional, conditional, mandatory, nulltype } value; enum options { optional, conditional, mandatory, nulltype } value;
@ -360,19 +352,6 @@ struct protocol_ext_field_s {
bool load_info_obj(const uint32_t& id_); bool load_info_obj(const uint32_t& id_);
}; };
// ProtocolIE-SingleContainer{NGAP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE{{NGAP-PROTOCOL-IES}}
template <class ies_set_paramT_>
struct protocol_ie_single_container_s {
uint32_t id = 0;
crit_e crit;
typename ies_set_paramT_::value_c value;
SRSASN_CODE pack(bit_ref& bref) const;
SRSASN_CODE unpack(cbit_ref& bref);
void to_json(json_writer& j) const;
bool load_info_obj(const uint32_t& id_);
};
struct ngap_protocol_ext_empty_o { struct ngap_protocol_ext_empty_o {
// Extension ::= OPEN TYPE // Extension ::= OPEN TYPE
struct ext_c { struct ext_c {

@ -428,14 +428,6 @@ namespace s1ap {
* Struct Definitions * Struct Definitions
******************************************************************************/ ******************************************************************************/
// Criticality ::= ENUMERATED
struct crit_opts {
enum options { reject, ignore, notify, nulltype } value;
const char* to_string() const;
};
typedef enumerated<crit_opts> crit_e;
// Presence ::= ENUMERATED // Presence ::= ENUMERATED
struct presence_opts { struct presence_opts {
enum options { optional, conditional, mandatory, nulltype } value; enum options { optional, conditional, mandatory, nulltype } value;
@ -530,19 +522,6 @@ struct protocol_ie_field_s {
template <class ies_set_paramT_> template <class ies_set_paramT_>
using protocol_ie_container_l = dyn_seq_of<protocol_ie_field_s<ies_set_paramT_>, 0, 65535, true>; using protocol_ie_container_l = dyn_seq_of<protocol_ie_field_s<ies_set_paramT_>, 0, 65535, true>;
// ProtocolIE-SingleContainer{S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE{{S1AP-PROTOCOL-IES}}
template <class ies_set_paramT_>
struct protocol_ie_single_container_s {
uint32_t id = 0;
crit_e crit;
typename ies_set_paramT_::value_c value;
SRSASN_CODE pack(bit_ref& bref) const;
SRSASN_CODE unpack(cbit_ref& bref);
void to_json(json_writer& j) const;
bool load_info_obj(const uint32_t& id_);
};
// ProtocolIE-FieldPair{S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE{{S1AP-PROTOCOL-IES-PAIR}} // ProtocolIE-FieldPair{S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE{{S1AP-PROTOCOL-IES-PAIR}}
template <class ies_set_paramT_> template <class ies_set_paramT_>
struct protocol_ie_field_pair_s { struct protocol_ie_field_pair_s {
@ -18228,4 +18207,25 @@ struct targetenb_to_sourceenb_transparent_container_s {
} // namespace s1ap } // namespace s1ap
} // namespace asn1 } // namespace asn1
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::recommended_cell_item_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::bearers_subject_to_status_transfer_item_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erab_info_list_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erab_item_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erab_modify_item_bearer_mod_conf_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erabusage_report_item_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::secondary_rat_data_usage_report_item_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erab_modify_item_bearer_mod_res_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erab_to_be_modified_item_bearer_mod_req_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erab_release_item_bearer_rel_comp_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erab_setup_item_bearer_su_res_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erab_setup_item_ctxt_su_res_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erab_to_be_setup_item_bearer_su_req_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::erab_to_be_setup_item_ctxt_su_req_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::son_info_ext_ie_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::mdt_mode_ext_ie_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::recommended_enb_item_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::ue_associated_lc_s1_conn_item_res_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::tai_item_ies_o>;
extern template struct asn1::protocol_ie_single_container_s<asn1::s1ap::ue_associated_lc_s1_conn_item_res_ack_o>;
#endif // SRSASN1_S1AP_H #endif // SRSASN1_S1AP_H

@ -43,8 +43,6 @@ struct cause_c;
struct erab_item_s; struct erab_item_s;
struct ue_aggregate_maximum_bitrate_s; struct ue_aggregate_maximum_bitrate_s;
template <class ies_set_paramT_>
struct protocol_ie_single_container_s;
using bearers_subject_to_status_transfer_list_l = using bearers_subject_to_status_transfer_list_l =
dyn_array<protocol_ie_single_container_s<bearers_subject_to_status_transfer_item_ies_o> >; dyn_array<protocol_ie_single_container_s<bearers_subject_to_status_transfer_item_ies_o> >;
using rrc_establishment_cause_e = enumerated<rrc_establishment_cause_opts, true, 3>; using rrc_establishment_cause_e = enumerated<rrc_establishment_cause_opts, true, 3>;

@ -20,13 +20,6 @@ using namespace asn1::ngap;
* Struct Methods * Struct Methods
******************************************************************************/ ******************************************************************************/
// Criticality ::= ENUMERATED
const char* crit_opts::to_string() const
{
static const char* options[] = {"reject", "ignore", "notify"};
return convert_enum_idx(options, 3, value, "crit_e");
}
// Presence ::= ENUMERATED // Presence ::= ENUMERATED
const char* presence_opts::to_string() const const char* presence_opts::to_string() const
{ {
@ -162,47 +155,6 @@ bool protocol_ext_field_s<ext_set_paramT_>::load_info_obj(const uint32_t& id_)
return ext_value.type().value != ext_set_paramT_::ext_c::types_opts::nulltype; return ext_value.type().value != ext_set_paramT_::ext_c::types_opts::nulltype;
} }
// ProtocolIE-SingleContainer{NGAP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE{{NGAP-PROTOCOL-IES}}
template <class ies_set_paramT_>
SRSASN_CODE protocol_ie_single_container_s<ies_set_paramT_>::pack(bit_ref& bref) const
{
HANDLE_CODE(pack_integer(bref, id, (uint32_t)0u, (uint32_t)65535u, false, true));
warn_assert(crit != ies_set_paramT_::get_crit(id), __func__, __LINE__);
HANDLE_CODE(crit.pack(bref));
HANDLE_CODE(value.pack(bref));
return SRSASN_SUCCESS;
}
template <class ies_set_paramT_>
SRSASN_CODE protocol_ie_single_container_s<ies_set_paramT_>::unpack(cbit_ref& bref)
{
HANDLE_CODE(unpack_integer(id, bref, (uint32_t)0u, (uint32_t)65535u, false, true));
HANDLE_CODE(crit.unpack(bref));
value = ies_set_paramT_::get_value(id);
HANDLE_CODE(value.unpack(bref));
return SRSASN_SUCCESS;
}
template <class ies_set_paramT_>
void protocol_ie_single_container_s<ies_set_paramT_>::to_json(json_writer& j) const
{
j.start_obj();
j.write_int("id", id);
j.write_str("criticality", crit.to_string());
j.end_obj();
}
template <class ies_set_paramT_>
bool protocol_ie_single_container_s<ies_set_paramT_>::load_info_obj(const uint32_t& id_)
{
if (not ies_set_paramT_::is_id_valid(id_)) {
return false;
}
id = id_;
crit = ies_set_paramT_::get_crit(id);
value = ies_set_paramT_::get_value(id);
return value.type().value != ies_set_paramT_::value_c::types_opts::nulltype;
}
uint32_t ngap_protocol_ext_empty_o::idx_to_id(uint32_t idx) uint32_t ngap_protocol_ext_empty_o::idx_to_id(uint32_t idx)
{ {
asn1::log_error("object set is empty\n"); asn1::log_error("object set is empty\n");

@ -20,13 +20,6 @@ using namespace asn1::s1ap;
* Struct Methods * Struct Methods
******************************************************************************/ ******************************************************************************/
// Criticality ::= ENUMERATED
const char* crit_opts::to_string() const
{
static const char* options[] = {"reject", "ignore", "notify"};
return convert_enum_idx(options, 3, value, "crit_e");
}
// Presence ::= ENUMERATED // Presence ::= ENUMERATED
const char* presence_opts::to_string() const const char* presence_opts::to_string() const
{ {
@ -212,48 +205,6 @@ bool protocol_ie_field_s<ies_set_paramT_>::load_info_obj(const uint32_t& id_)
return value.type().value != ies_set_paramT_::value_c::types_opts::nulltype; return value.type().value != ies_set_paramT_::value_c::types_opts::nulltype;
} }
// ProtocolIE-SingleContainer{S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE{{S1AP-PROTOCOL-IES}}
template <class ies_set_paramT_>
SRSASN_CODE protocol_ie_single_container_s<ies_set_paramT_>::pack(bit_ref& bref) const
{
HANDLE_CODE(pack_integer(bref, id, (uint32_t)0u, (uint32_t)65535u, false, true));
warn_assert(crit != ies_set_paramT_::get_crit(id), __func__, __LINE__);
HANDLE_CODE(crit.pack(bref));
HANDLE_CODE(value.pack(bref));
return SRSASN_SUCCESS;
}
template <class ies_set_paramT_>
SRSASN_CODE protocol_ie_single_container_s<ies_set_paramT_>::unpack(cbit_ref& bref)
{
HANDLE_CODE(unpack_integer(id, bref, (uint32_t)0u, (uint32_t)65535u, false, true));
HANDLE_CODE(crit.unpack(bref));
value = ies_set_paramT_::get_value(id);
HANDLE_CODE(value.unpack(bref));
return SRSASN_SUCCESS;
}
template <class ies_set_paramT_>
void protocol_ie_single_container_s<ies_set_paramT_>::to_json(json_writer& j) const
{
j.start_obj();
j.write_int("id", id);
j.write_str("criticality", crit.to_string());
j.end_obj();
}
template <class ies_set_paramT_>
bool protocol_ie_single_container_s<ies_set_paramT_>::load_info_obj(const uint32_t& id_)
{
if (not ies_set_paramT_::is_id_valid(id_)) {
return false;
}
id = id_;
crit = ies_set_paramT_::get_crit(id);
value = ies_set_paramT_::get_value(id);
return value.type().value != ies_set_paramT_::value_c::types_opts::nulltype;
}
template bool protocol_ie_single_container_s<erab_admitted_item_ies_o>::load_info_obj(const uint32_t& id_);
// ProtocolIE-FieldPair{S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE{{S1AP-PROTOCOL-IES-PAIR}} // ProtocolIE-FieldPair{S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE{{S1AP-PROTOCOL-IES-PAIR}}
template <class ies_set_paramT_> template <class ies_set_paramT_>
SRSASN_CODE protocol_ie_field_pair_s<ies_set_paramT_>::pack(bit_ref& bref) const SRSASN_CODE protocol_ie_field_pair_s<ies_set_paramT_>::pack(bit_ref& bref) const
@ -1484,7 +1435,7 @@ const char* recommended_cell_item_ies_o::value_c::types_opts::to_string() const
return convert_enum_idx(options, 1, value, "recommended_cell_item_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "recommended_cell_item_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<recommended_cell_item_ies_o>; template struct asn1::protocol_ie_single_container_s<recommended_cell_item_ies_o>;
// NextPagingAreaScope ::= ENUMERATED // NextPagingAreaScope ::= ENUMERATED
const char* next_paging_area_scope_opts::to_string() const const char* next_paging_area_scope_opts::to_string() const
@ -2418,7 +2369,7 @@ const char* bearers_subject_to_status_transfer_item_ies_o::value_c::types_opts::
return convert_enum_idx(options, 1, value, "bearers_subject_to_status_transfer_item_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "bearers_subject_to_status_transfer_item_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<bearers_subject_to_status_transfer_item_ies_o>; template struct asn1::protocol_ie_single_container_s<bearers_subject_to_status_transfer_item_ies_o>;
// BluetoothMeasConfig ::= ENUMERATED // BluetoothMeasConfig ::= ENUMERATED
const char* bluetooth_meas_cfg_opts::to_string() const const char* bluetooth_meas_cfg_opts::to_string() const
@ -11252,7 +11203,7 @@ const char* erab_info_list_ies_o::value_c::types_opts::to_string() const
return convert_enum_idx(options, 1, value, "erab_info_list_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "erab_info_list_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<erab_info_list_ies_o>; template struct asn1::protocol_ie_single_container_s<erab_info_list_ies_o>;
// E-RABItem ::= SEQUENCE // E-RABItem ::= SEQUENCE
SRSASN_CODE erab_item_s::pack(bit_ref& bref) const SRSASN_CODE erab_item_s::pack(bit_ref& bref) const
@ -11356,7 +11307,7 @@ const char* 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"); return convert_enum_idx(options, 1, value, "erab_item_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<erab_item_ies_o>; template struct asn1::protocol_ie_single_container_s<erab_item_ies_o>;
// E-RABModifyItemBearerModConf ::= SEQUENCE // E-RABModifyItemBearerModConf ::= SEQUENCE
SRSASN_CODE erab_modify_item_bearer_mod_conf_s::pack(bit_ref& bref) const SRSASN_CODE erab_modify_item_bearer_mod_conf_s::pack(bit_ref& bref) const
@ -11456,7 +11407,7 @@ const char* erab_modify_item_bearer_mod_conf_ies_o::value_c::types_opts::to_stri
return convert_enum_idx(options, 1, value, "erab_modify_item_bearer_mod_conf_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "erab_modify_item_bearer_mod_conf_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<erab_modify_item_bearer_mod_conf_ies_o>; template struct asn1::protocol_ie_single_container_s<erab_modify_item_bearer_mod_conf_ies_o>;
// E-RABModificationConfirmIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES // E-RABModificationConfirmIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES
uint32_t erab_mod_confirm_ies_o::idx_to_id(uint32_t idx) uint32_t erab_mod_confirm_ies_o::idx_to_id(uint32_t idx)
@ -12120,7 +12071,7 @@ const char* erabusage_report_item_ies_o::value_c::types_opts::to_string() const
return convert_enum_idx(options, 1, value, "erabusage_report_item_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "erabusage_report_item_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<erabusage_report_item_ies_o>; template struct asn1::protocol_ie_single_container_s<erabusage_report_item_ies_o>;
// NR-CGI ::= SEQUENCE // NR-CGI ::= SEQUENCE
SRSASN_CODE nr_cgi_s::pack(bit_ref& bref) const SRSASN_CODE nr_cgi_s::pack(bit_ref& bref) const
@ -12586,7 +12537,7 @@ const char* user_location_info_ext_ies_o::ext_c::types_opts::to_string() const
return convert_enum_idx(options, 1, value, "user_location_info_ext_ies_o::ext_c::types"); 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<secondary_rat_data_usage_report_item_ies_o>; template struct asn1::protocol_ie_single_container_s<secondary_rat_data_usage_report_item_ies_o>;
// TunnelInformation ::= SEQUENCE // TunnelInformation ::= SEQUENCE
SRSASN_CODE tunnel_info_s::pack(bit_ref& bref) const SRSASN_CODE tunnel_info_s::pack(bit_ref& bref) const
@ -13382,7 +13333,7 @@ const char* erab_modify_item_bearer_mod_res_ies_o::value_c::types_opts::to_strin
return convert_enum_idx(options, 1, value, "erab_modify_item_bearer_mod_res_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "erab_modify_item_bearer_mod_res_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<erab_modify_item_bearer_mod_res_ies_o>; template struct asn1::protocol_ie_single_container_s<erab_modify_item_bearer_mod_res_ies_o>;
// TransportInformation ::= SEQUENCE // TransportInformation ::= SEQUENCE
SRSASN_CODE transport_info_s::pack(bit_ref& bref) const SRSASN_CODE transport_info_s::pack(bit_ref& bref) const
@ -13755,7 +13706,7 @@ const char* ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::types_opts::to_strin
return convert_enum_idx(options, 2, value, "ue_aggregate_maximum_bitrates_ext_ies_o::ext_c::types"); 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<erab_to_be_modified_item_bearer_mod_req_ies_o>; template struct asn1::protocol_ie_single_container_s<erab_to_be_modified_item_bearer_mod_req_ies_o>;
// SecondaryRATDataUsageRequest ::= ENUMERATED // SecondaryRATDataUsageRequest ::= ENUMERATED
const char* secondary_rat_data_usage_request_opts::to_string() const const char* secondary_rat_data_usage_request_opts::to_string() const
@ -14666,7 +14617,6 @@ const char* erab_modify_resp_ies_o::value_c::types_opts::to_string() const
} }
template struct asn1::s1ap::protocol_ie_field_s<erab_modify_resp_ies_o>; template struct asn1::s1ap::protocol_ie_field_s<erab_modify_resp_ies_o>;
template struct asn1::s1ap::protocol_ie_single_container_s<asn1::s1ap::erab_failedto_setup_item_ho_req_ack_ies_o>;
erab_modify_resp_ies_container::erab_modify_resp_ies_container() : erab_modify_resp_ies_container::erab_modify_resp_ies_container() :
mme_ue_s1ap_id(0, crit_e::ignore), mme_ue_s1ap_id(0, crit_e::ignore),
@ -15786,7 +15736,7 @@ const char* erab_release_item_bearer_rel_comp_ies_o::value_c::types_opts::to_str
return convert_enum_idx(options, 1, value, "erab_release_item_bearer_rel_comp_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "erab_release_item_bearer_rel_comp_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<erab_release_item_bearer_rel_comp_ies_o>; template struct asn1::protocol_ie_single_container_s<erab_release_item_bearer_rel_comp_ies_o>;
// E-RABReleaseResponseIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES // E-RABReleaseResponseIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES
uint32_t erab_release_resp_ies_o::idx_to_id(uint32_t idx) uint32_t erab_release_resp_ies_o::idx_to_id(uint32_t idx)
@ -16557,9 +16507,9 @@ const char* erab_setup_item_ctxt_su_res_ies_o::value_c::types_opts::to_string()
return convert_enum_idx(options, 1, value, "erab_setup_item_ctxt_su_res_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "erab_setup_item_ctxt_su_res_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<erab_setup_item_bearer_su_res_ies_o>; template struct asn1::protocol_ie_single_container_s<erab_setup_item_bearer_su_res_ies_o>;
template struct asn1::s1ap::protocol_ie_single_container_s<erab_setup_item_ctxt_su_res_ies_o>; template struct asn1::protocol_ie_single_container_s<erab_setup_item_ctxt_su_res_ies_o>;
// BearerType ::= ENUMERATED // BearerType ::= ENUMERATED
const char* bearer_type_opts::to_string() const const char* bearer_type_opts::to_string() const
@ -16993,7 +16943,7 @@ const char* erab_to_be_setup_item_bearer_su_req_ies_o::value_c::types_opts::to_s
return convert_enum_idx(options, 1, value, "erab_to_be_setup_item_bearer_su_req_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "erab_to_be_setup_item_bearer_su_req_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<erab_to_be_setup_item_bearer_su_req_ies_o>; template struct asn1::protocol_ie_single_container_s<erab_to_be_setup_item_bearer_su_req_ies_o>;
// E-RABSetupRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES // E-RABSetupRequestIEs ::= OBJECT SET OF S1AP-PROTOCOL-IES
uint32_t erab_setup_request_ies_o::idx_to_id(uint32_t idx) uint32_t erab_setup_request_ies_o::idx_to_id(uint32_t idx)
@ -18611,7 +18561,7 @@ const char* erab_to_be_setup_item_ho_req_ies_o::value_c::types_opts::to_string()
return convert_enum_idx(options, 1, value, "erab_to_be_setup_item_ho_req_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "erab_to_be_setup_item_ho_req_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<erab_to_be_setup_item_ctxt_su_req_ies_o>; template struct asn1::protocol_ie_single_container_s<erab_to_be_setup_item_ctxt_su_req_ies_o>;
// E-RABToBeSwitchedDLItem ::= SEQUENCE // E-RABToBeSwitchedDLItem ::= SEQUENCE
SRSASN_CODE erab_to_be_switched_dl_item_s::pack(bit_ref& bref) const SRSASN_CODE erab_to_be_switched_dl_item_s::pack(bit_ref& bref) const
@ -19872,7 +19822,7 @@ void en_dc_transfer_type_request_s::to_json(json_writer& j) const
j.end_obj(); j.end_obj();
} }
template struct asn1::s1ap::protocol_ie_single_container_s<son_info_ext_ie_o>; template struct asn1::protocol_ie_single_container_s<son_info_ext_ie_o>;
// SONInformationReply ::= SEQUENCE // SONInformationReply ::= SEQUENCE
SRSASN_CODE son_info_reply_s::pack(bit_ref& bref) const SRSASN_CODE son_info_reply_s::pack(bit_ref& bref) const
@ -28615,7 +28565,7 @@ void logged_mdt_s::to_json(json_writer& j) const
j.end_obj(); j.end_obj();
} }
template struct asn1::s1ap::protocol_ie_single_container_s<mdt_mode_ext_ie_o>; template struct asn1::protocol_ie_single_container_s<mdt_mode_ext_ie_o>;
// ServiceType ::= ENUMERATED // ServiceType ::= ENUMERATED
const char* service_type_opts::to_string() const const char* service_type_opts::to_string() const
@ -33669,7 +33619,7 @@ const char* recommended_enb_item_ies_o::value_c::types_opts::to_string() const
return convert_enum_idx(options, 1, value, "recommended_enb_item_ies_o::value_c::types"); return convert_enum_idx(options, 1, value, "recommended_enb_item_ies_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<recommended_enb_item_ies_o>; template struct asn1::protocol_ie_single_container_s<recommended_enb_item_ies_o>;
// RecommendedENBsForPaging ::= SEQUENCE // RecommendedENBsForPaging ::= SEQUENCE
SRSASN_CODE recommended_enbs_for_paging_s::pack(bit_ref& bref) const SRSASN_CODE recommended_enbs_for_paging_s::pack(bit_ref& bref) const
@ -38373,7 +38323,7 @@ uint8_t ue_associated_lc_s1_conn_item_res_ack_o::value_c::types_opts::to_number(
return map_enum_number(options, 1, value, "ue_associated_lc_s1_conn_item_res_ack_o::value_c::types"); return map_enum_number(options, 1, value, "ue_associated_lc_s1_conn_item_res_ack_o::value_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<ue_associated_lc_s1_conn_item_res_o>; template struct asn1::protocol_ie_single_container_s<ue_associated_lc_s1_conn_item_res_o>;
// CNDomain ::= ENUMERATED // CNDomain ::= ENUMERATED
const char* cn_domain_opts::to_string() const const char* cn_domain_opts::to_string() const
@ -38710,7 +38660,7 @@ const char* srvcc_operation_not_possible_opts::to_string() const
return convert_enum_idx(options, 1, value, "srvcc_operation_not_possible_e"); return convert_enum_idx(options, 1, value, "srvcc_operation_not_possible_e");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<tai_item_ies_o>; template struct asn1::protocol_ie_single_container_s<tai_item_ies_o>;
// UE-RetentionInformation ::= ENUMERATED // UE-RetentionInformation ::= ENUMERATED
const char* ue_retention_info_opts::to_string() const const char* ue_retention_info_opts::to_string() const
@ -38850,7 +38800,7 @@ const char* ue_s1ap_ids_c::types_opts::to_string() const
return convert_enum_idx(options, 2, value, "ue_s1ap_ids_c::types"); return convert_enum_idx(options, 2, value, "ue_s1ap_ids_c::types");
} }
template struct asn1::s1ap::protocol_ie_single_container_s<ue_associated_lc_s1_conn_item_res_ack_o>; template struct asn1::protocol_ie_single_container_s<ue_associated_lc_s1_conn_item_res_ack_o>;
// UEPagingID ::= CHOICE // UEPagingID ::= CHOICE
void ue_paging_id_c::destroy_() void ue_paging_id_c::destroy_()

@ -255,7 +255,7 @@ int test_load_info_obj()
container.erab_failed_to_setup_list_ctxt_su_res.value.resize(1); container.erab_failed_to_setup_list_ctxt_su_res.value.resize(1);
container.erab_failed_to_setup_list_ctxt_su_res.value[0].load_info_obj(ASN1_S1AP_ID_ERAB_ITEM); container.erab_failed_to_setup_list_ctxt_su_res.value[0].load_info_obj(ASN1_S1AP_ID_ERAB_ITEM);
TESTASSERT(container.erab_failed_to_setup_list_ctxt_su_res.value[0].id == ASN1_S1AP_ID_ERAB_ITEM); TESTASSERT_EQ(ASN1_S1AP_ID_ERAB_ITEM, container.erab_failed_to_setup_list_ctxt_su_res.value[0].id());
return SRSRAN_SUCCESS; return SRSRAN_SUCCESS;
} }

@ -863,12 +863,12 @@ void rrc::ue::rrc_mobility::handle_ho_requested(idle_st& s, const ho_req_rx_ev&
// Establish GTPU Forwarding Paths // Establish GTPU Forwarding Paths
if (ho_req.transparent_container->erab_info_list_present) { if (ho_req.transparent_container->erab_info_list_present) {
const auto& lst = ho_req.transparent_container->erab_info_list; const auto& lst = ho_req.transparent_container->erab_info_list;
const auto* it = std::find_if( const auto* it =
lst.begin(), std::find_if(lst.begin(),
lst.end(), lst.end(),
[&erab](const asn1::s1ap::protocol_ie_single_container_s<asn1::s1ap::erab_info_list_ies_o>& fwd_erab) { [&erab](const asn1::protocol_ie_single_container_s<asn1::s1ap::erab_info_list_ies_o>& fwd_erab) {
return fwd_erab.value.erab_info_list_item().erab_id == erab.second.id; return fwd_erab.value.erab_info_list_item().erab_id == erab.second.id;
}); });
if (it == lst.end()) { if (it == lst.end()) {
continue; continue;
} }

@ -186,7 +186,7 @@ bool s1ap_ctx_mngmt_proc::handle_initial_context_setup_response(
srsran::console("Received Initial Context Setup Response\n"); srsran::console("Received Initial Context Setup Response\n");
// Setup E-RABs // Setup E-RABs
for (const asn1::s1ap::protocol_ie_single_container_s<asn1::s1ap::erab_setup_item_ctxt_su_res_ies_o>& ie_container : for (const asn1::protocol_ie_single_container_s<asn1::s1ap::erab_setup_item_ctxt_su_res_ies_o>& ie_container :
in_ctxt_resp.protocol_ies.erab_setup_list_ctxt_su_res.value) { in_ctxt_resp.protocol_ies.erab_setup_list_ctxt_su_res.value) {
// Get E-RAB setup context item and E-RAB Id // Get E-RAB setup context item and E-RAB Id
const asn1::s1ap::erab_setup_item_ctxt_su_res_s& erab_setup_item_ctxt = const asn1::s1ap::erab_setup_item_ctxt_su_res_s& erab_setup_item_ctxt =

Loading…
Cancel
Save