asn1: update procotol_ie_single_container interface to use -> operator instead of .value to access container content

master
Francisco Paisana 3 years ago
parent 6b181e7a94
commit 2d2a5bee03

@ -1476,10 +1476,9 @@ typedef enumerated<crit_opts> crit_e;
template <class ies_set_paramT_> template <class ies_set_paramT_>
struct protocol_ie_single_container_s { struct protocol_ie_single_container_s {
using value_type = typename ies_set_paramT_::value_c; using value_type = typename ies_set_paramT_::value_c;
value_type value;
uint32_t id() const { return id_; } uint32_t id() const { return ies_set_paramT_::idx_to_id(value.type().value); }
crit_e crit() const { return ies_set_paramT_::get_crit(id_); } crit_e crit() const { return ies_set_paramT_::get_crit(id()); }
value_type* operator->() { return &value; } value_type* operator->() { return &value; }
const value_type* operator->() const { return &value; } const value_type* operator->() const { return &value; }
value_type& operator*() { return value; } value_type& operator*() { return value; }
@ -1487,23 +1486,24 @@ struct protocol_ie_single_container_s {
SRSASN_CODE pack(bit_ref& bref) const SRSASN_CODE pack(bit_ref& bref) const
{ {
HANDLE_CODE(pack_integer(bref, id_, (uint32_t)0u, (uint32_t)65535u, false, true)); 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(crit().pack(bref));
HANDLE_CODE(value.pack(bref)); HANDLE_CODE(value.pack(bref));
return SRSASN_SUCCESS; return SRSASN_SUCCESS;
} }
SRSASN_CODE unpack(cbit_ref& bref) SRSASN_CODE unpack(cbit_ref& bref)
{ {
HANDLE_CODE(unpack_integer(id_, bref, (uint32_t)0u, (uint32_t)65535u, false, true)); uint32_t id_val;
HANDLE_CODE(unpack_integer(id_val, bref, (uint32_t)0u, (uint32_t)65535u, false, true));
HANDLE_CODE(crit().unpack(bref)); HANDLE_CODE(crit().unpack(bref));
value = ies_set_paramT_::get_value(id_); value = ies_set_paramT_::get_value(id_val);
HANDLE_CODE(value.unpack(bref)); HANDLE_CODE(value.unpack(bref));
return SRSASN_SUCCESS; return SRSASN_SUCCESS;
} }
void to_json(json_writer& j) const void to_json(json_writer& j) const
{ {
j.start_obj(); j.start_obj();
j.write_int("id", id_); j.write_int("id", id());
j.write_str("criticality", crit().to_string()); j.write_str("criticality", crit().to_string());
j.end_obj(); j.end_obj();
} }
@ -1512,13 +1512,12 @@ struct protocol_ie_single_container_s {
if (not ies_set_paramT_::is_id_valid(id_val)) { if (not ies_set_paramT_::is_id_valid(id_val)) {
return false; return false;
} }
id_ = id_val; value = ies_set_paramT_::get_value(id_val);
value = ies_set_paramT_::get_value(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;
} }
private: private:
uint32_t id_ = 0; value_type value;
}; };
} // namespace asn1 } // namespace asn1

@ -26,21 +26,21 @@ template <>
uint32_t get_obj_id<protocol_ie_single_container_s<erab_to_be_setup_item_ctxt_su_req_ies_o> >( uint32_t get_obj_id<protocol_ie_single_container_s<erab_to_be_setup_item_ctxt_su_req_ies_o> >(
const protocol_ie_single_container_s<erab_to_be_setup_item_ctxt_su_req_ies_o>& obj) const protocol_ie_single_container_s<erab_to_be_setup_item_ctxt_su_req_ies_o>& obj)
{ {
return obj.value.erab_to_be_setup_item_ctxt_su_req().erab_id; return obj->erab_to_be_setup_item_ctxt_su_req().erab_id;
} }
template <> template <>
uint32_t get_obj_id<protocol_ie_single_container_s<erab_to_be_setup_item_bearer_su_req_ies_o> >( uint32_t get_obj_id<protocol_ie_single_container_s<erab_to_be_setup_item_bearer_su_req_ies_o> >(
const protocol_ie_single_container_s<erab_to_be_setup_item_bearer_su_req_ies_o>& obj) const protocol_ie_single_container_s<erab_to_be_setup_item_bearer_su_req_ies_o>& obj)
{ {
return obj.value.erab_to_be_setup_item_bearer_su_req().erab_id; return obj->erab_to_be_setup_item_bearer_su_req().erab_id;
} }
template <> template <>
uint32_t get_obj_id<protocol_ie_single_container_s<erab_to_be_modified_item_bearer_mod_req_ies_o> >( uint32_t get_obj_id<protocol_ie_single_container_s<erab_to_be_modified_item_bearer_mod_req_ies_o> >(
const protocol_ie_single_container_s<erab_to_be_modified_item_bearer_mod_req_ies_o>& obj) const protocol_ie_single_container_s<erab_to_be_modified_item_bearer_mod_req_ies_o>& obj)
{ {
return obj.value.erab_to_be_modified_item_bearer_mod_req().erab_id; return obj->erab_to_be_modified_item_bearer_mod_req().erab_id;
} }
} // namespace s1ap } // namespace s1ap

@ -180,7 +180,7 @@ int test_ho_request()
TESTASSERT(pdu.init_msg().crit.value == crit_opts::reject); TESTASSERT(pdu.init_msg().crit.value == crit_opts::reject);
auto& horeq = pdu.init_msg().value.ho_request().protocol_ies; auto& horeq = pdu.init_msg().value.ho_request().protocol_ies;
auto& erab_item = horeq.erab_to_be_setup_list_ho_req.value[0].value.erab_to_be_setup_item_ho_req(); auto& erab_item = horeq.erab_to_be_setup_list_ho_req.value[0]->erab_to_be_setup_item_ho_req();
TESTASSERT(erab_item.erab_id == 5); TESTASSERT(erab_item.erab_id == 5);
TESTASSERT(erab_item.gtp_teid.to_string() == "b7361c56"); TESTASSERT(erab_item.gtp_teid.to_string() == "b7361c56");
@ -202,7 +202,7 @@ int test_enb_status_transfer()
enb_status_transfer.enb_status_transfer_transparent_container.value.bearers_subject_to_status_transfer_list[0]; enb_status_transfer.enb_status_transfer_transparent_container.value.bearers_subject_to_status_transfer_list[0];
TESTASSERT(bearer.load_info_obj(ASN1_S1AP_ID_BEARERS_SUBJECT_TO_STATUS_TRANSFER_ITEM)); TESTASSERT(bearer.load_info_obj(ASN1_S1AP_ID_BEARERS_SUBJECT_TO_STATUS_TRANSFER_ITEM));
auto& bearer_item = bearer.value.bearers_subject_to_status_transfer_item(); auto& bearer_item = bearer->bearers_subject_to_status_transfer_item();
bearer_item.erab_id = 5; bearer_item.erab_id = 5;
bearer_item.dl_coun_tvalue.pdcp_sn = 5; bearer_item.dl_coun_tvalue.pdcp_sn = 5;
@ -225,7 +225,7 @@ int test_enb_status_transfer()
pdu2.init_msg() pdu2.init_msg()
.value.enb_status_transfer() .value.enb_status_transfer()
.protocol_ies.enb_status_transfer_transparent_container.value.bearers_subject_to_status_transfer_list[0]; .protocol_ies.enb_status_transfer_transparent_container.value.bearers_subject_to_status_transfer_list[0];
auto& bearer_item2 = bearer2.value.bearers_subject_to_status_transfer_item(); auto& bearer_item2 = bearer2->bearers_subject_to_status_transfer_item();
TESTASSERT(bearer_item2.dl_coun_tvalue.hfn == bearer_item.dl_coun_tvalue.hfn); TESTASSERT(bearer_item2.dl_coun_tvalue.hfn == bearer_item.dl_coun_tvalue.hfn);
TESTASSERT(bearer_item2.dl_coun_tvalue.hfn == 0); TESTASSERT(bearer_item2.dl_coun_tvalue.hfn == 0);
@ -275,7 +275,7 @@ int test_initial_ctxt_setup_response()
// Fill in the GTP bind address for all bearers // Fill in the GTP bind address for all bearers
for (uint32_t i = 0; i < container.erab_setup_list_ctxt_su_res.value.size(); ++i) { for (uint32_t i = 0; i < container.erab_setup_list_ctxt_su_res.value.size(); ++i) {
container.erab_setup_list_ctxt_su_res.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_SETUP_ITEM_CTXT_SU_RES); container.erab_setup_list_ctxt_su_res.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_SETUP_ITEM_CTXT_SU_RES);
auto& item = container.erab_setup_list_ctxt_su_res.value[i].value.erab_setup_item_ctxt_su_res(); auto& item = container.erab_setup_list_ctxt_su_res.value[i]->erab_setup_item_ctxt_su_res();
item.erab_id = 1; item.erab_id = 1;
// uint32_to_uint8(teid_in, item.gtp_teid.data()); // uint32_to_uint8(teid_in, item.gtp_teid.data());
item.transport_layer_address.resize(32); item.transport_layer_address.resize(32);

@ -436,7 +436,7 @@ void rrc::ue::rrc_mobility::handle_ho_preparation_complete(rrc::ho_prep_result
// Check if any E-RAB that was not admitted. Cancel Handover, in such case. // Check if any E-RAB that was not admitted. Cancel Handover, in such case.
if (msg.protocol_ies.erab_to_release_list_ho_cmd_present) { if (msg.protocol_ies.erab_to_release_list_ho_cmd_present) {
get_logger().warning("E-RAB id=%d was not admitted in target eNB. Cancelling handover...", get_logger().warning("E-RAB id=%d was not admitted in target eNB. Cancelling handover...",
msg.protocol_ies.erab_to_release_list_ho_cmd.value[0].value.erab_item().erab_id); msg.protocol_ies.erab_to_release_list_ho_cmd.value[0]->erab_item().erab_id);
asn1::s1ap::cause_c cause; asn1::s1ap::cause_c cause;
cause.set_radio_network().value = asn1::s1ap::cause_radio_network_opts::no_radio_res_available_in_target_cell; cause.set_radio_network().value = asn1::s1ap::cause_radio_network_opts::no_radio_res_available_in_target_cell;
trigger(ho_cancel_ev{cause}); trigger(ho_cancel_ev{cause});
@ -626,7 +626,7 @@ rrc::ue::rrc_mobility::s1_source_ho_st::start_enb_status_transfer(const asn1::s1
const auto& fwd_erab_list = s1ap_ho_cmd.protocol_ies.erab_subjectto_data_forwarding_list.value; const auto& fwd_erab_list = s1ap_ho_cmd.protocol_ies.erab_subjectto_data_forwarding_list.value;
const auto& erab_list = rrc_ue->bearer_list.get_erabs(); const auto& erab_list = rrc_ue->bearer_list.get_erabs();
for (const auto& e : fwd_erab_list) { for (const auto& e : fwd_erab_list) {
const auto& fwd_erab = e.value.erab_data_forwarding_item(); const auto& fwd_erab = e->erab_data_forwarding_item();
auto it = erab_list.find(fwd_erab.erab_id); auto it = erab_list.find(fwd_erab.erab_id);
if (it == erab_list.end()) { if (it == erab_list.end()) {
Warning("E-RAB id=%d subject to forwarding not found\n", fwd_erab.erab_id); Warning("E-RAB id=%d subject to forwarding not found\n", fwd_erab.erab_id);
@ -867,12 +867,12 @@ void rrc::ue::rrc_mobility::handle_ho_requested(idle_st& s, const ho_req_rx_ev&
std::find_if(lst.begin(), std::find_if(lst.begin(),
lst.end(), lst.end(),
[&erab](const asn1::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->erab_info_list_item().erab_id == erab.second.id;
}); });
if (it == lst.end()) { if (it == lst.end()) {
continue; continue;
} }
const auto& fwd_erab = it->value.erab_info_list_item(); const auto& fwd_erab = (*it)->erab_info_list_item();
if (fwd_erab.dl_forwarding_present and if (fwd_erab.dl_forwarding_present and
fwd_erab.dl_forwarding.value == asn1::s1ap::dl_forwarding_opts::dl_forwarding_proposed) { fwd_erab.dl_forwarding.value == asn1::s1ap::dl_forwarding_opts::dl_forwarding_proposed) {
@ -936,7 +936,7 @@ bool rrc::ue::rrc_mobility::apply_ho_prep_cfg(const ho_prep_info_r8_ies_s&
// Establish ERABs/DRBs // Establish ERABs/DRBs
for (const auto& erab_item : ho_req_msg.protocol_ies.erab_to_be_setup_list_ho_req.value) { for (const auto& erab_item : ho_req_msg.protocol_ies.erab_to_be_setup_list_ho_req.value) {
const auto& erab = erab_item.value.erab_to_be_setup_item_ho_req(); const auto& erab = erab_item->erab_to_be_setup_item_ho_req();
if (erab.ext) { if (erab.ext) {
get_logger().warning("Not handling E-RABToBeSetupList extensions"); get_logger().warning("Not handling E-RABToBeSetupList extensions");
} }
@ -1038,7 +1038,7 @@ void rrc::ue::rrc_mobility::handle_status_transfer(s1_target_ho_st& s, const sta
// Set DRBs SNs // Set DRBs SNs
for (const auto& erab : erabs) { for (const auto& erab : erabs) {
const auto& erab_item = erab.value.bearers_subject_to_status_transfer_item(); const auto& erab_item = erab->bearers_subject_to_status_transfer_item();
auto erab_it = rrc_ue->bearer_list.get_erabs().find(erab_item.erab_id); auto erab_it = rrc_ue->bearer_list.get_erabs().find(erab_item.erab_id);
if (erab_it == rrc_ue->bearer_list.get_erabs().end()) { if (erab_it == rrc_ue->bearer_list.get_erabs().end()) {
logger.warning("The E-RAB Id=%d is not recognized", erab_item.erab_id); logger.warning("The E-RAB Id=%d is not recognized", erab_item.erab_id);

@ -108,7 +108,7 @@ void fill_erab_failed_setup_list(OutList& output_list, const s1ap::erab_item_lis
output_list.resize(input_list.size()); output_list.resize(input_list.size());
for (size_t i = 0; i < input_list.size(); ++i) { for (size_t i = 0; i < input_list.size(); ++i) {
output_list[i].load_info_obj(ASN1_S1AP_ID_ERAB_ITEM); output_list[i].load_info_obj(ASN1_S1AP_ID_ERAB_ITEM);
output_list[i].value.erab_item() = input_list[i]; output_list[i]->erab_item() = input_list[i];
} }
} }
@ -790,7 +790,7 @@ bool s1ap::handle_initialctxtsetuprequest(const init_context_setup_request_s& ms
add_repeated_erab_ids(prot_ies.erab_to_be_setup_list_ctxt_su_req.value, failed_cfg_erabs); add_repeated_erab_ids(prot_ies.erab_to_be_setup_list_ctxt_su_req.value, failed_cfg_erabs);
for (const auto& item : msg.protocol_ies.erab_to_be_setup_list_ctxt_su_req.value) { for (const auto& item : msg.protocol_ies.erab_to_be_setup_list_ctxt_su_req.value) {
const auto& erab = item.value.erab_to_be_setup_item_ctxt_su_req(); const auto& erab = item->erab_to_be_setup_item_ctxt_su_req();
if (contains_erab_id(failed_cfg_erabs, erab.erab_id)) { if (contains_erab_id(failed_cfg_erabs, erab.erab_id)) {
// E-RAB is duplicate // E-RAB is duplicate
continue; continue;
@ -869,7 +869,7 @@ bool s1ap::handle_erabsetuprequest(const erab_setup_request_s& msg)
add_repeated_erab_ids(msg.protocol_ies.erab_to_be_setup_list_bearer_su_req.value, failed_cfg_erabs); add_repeated_erab_ids(msg.protocol_ies.erab_to_be_setup_list_bearer_su_req.value, failed_cfg_erabs);
for (const auto& item : msg.protocol_ies.erab_to_be_setup_list_bearer_su_req.value) { for (const auto& item : msg.protocol_ies.erab_to_be_setup_list_bearer_su_req.value) {
const auto& erab = item.value.erab_to_be_setup_item_bearer_su_req(); const auto& erab = item->erab_to_be_setup_item_bearer_su_req();
if (contains_erab_id(failed_cfg_erabs, erab.erab_id)) { if (contains_erab_id(failed_cfg_erabs, erab.erab_id)) {
// E-RAB is duplicate // E-RAB is duplicate
continue; continue;
@ -929,7 +929,7 @@ bool s1ap::handle_erabmodifyrequest(const erab_modify_request_s& msg)
add_repeated_erab_ids(msg.protocol_ies.erab_to_be_modified_list_bearer_mod_req.value, failed_cfg_erabs); add_repeated_erab_ids(msg.protocol_ies.erab_to_be_modified_list_bearer_mod_req.value, failed_cfg_erabs);
for (const auto& item : msg.protocol_ies.erab_to_be_modified_list_bearer_mod_req.value) { for (const auto& item : msg.protocol_ies.erab_to_be_modified_list_bearer_mod_req.value) {
const auto& erab = item.value.erab_to_be_modified_item_bearer_mod_req(); const auto& erab = item->erab_to_be_modified_item_bearer_mod_req();
if (contains_erab_id(failed_cfg_erabs, erab.erab_id)) { if (contains_erab_id(failed_cfg_erabs, erab.erab_id)) {
// E-RAB is duplicate // E-RAB is duplicate
continue; continue;
@ -985,7 +985,7 @@ bool s1ap::handle_erabreleasecommand(const erab_release_cmd_s& msg)
})); }));
}; };
for (const auto& item : msg.protocol_ies.erab_to_be_released_list.value) { for (const auto& item : msg.protocol_ies.erab_to_be_released_list.value) {
const auto& erab = item.value.erab_item(); const auto& erab = item->erab_item();
if (is_repeated_erab_id(erab.erab_id)) { if (is_repeated_erab_id(erab.erab_id)) {
// TS 36.413, 8.2.3.3 - ignore the duplication of E-RAB ID IEs // TS 36.413, 8.2.3.3 - ignore the duplication of E-RAB ID IEs
@ -1243,7 +1243,7 @@ bool s1ap::send_ho_req_ack(const asn1::s1ap::ho_request_s& msg,
container.erab_admitted_list.value.resize(admitted_bearers.size()); container.erab_admitted_list.value.resize(admitted_bearers.size());
for (size_t i = 0; i < admitted_bearers.size(); ++i) { for (size_t i = 0; i < admitted_bearers.size(); ++i) {
container.erab_admitted_list.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_ADMITTED_ITEM); container.erab_admitted_list.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_ADMITTED_ITEM);
auto& c = container.erab_admitted_list.value[i].value.erab_admitted_item(); auto& c = container.erab_admitted_list.value[i]->erab_admitted_item();
c = admitted_bearers[i]; c = admitted_bearers[i];
if (!args.gtp_advertise_addr.empty()) { if (!args.gtp_advertise_addr.empty()) {
c.transport_layer_address = addr_to_asn1(args.gtp_advertise_addr.c_str()); c.transport_layer_address = addr_to_asn1(args.gtp_advertise_addr.c_str());
@ -1269,7 +1269,7 @@ bool s1ap::send_ho_req_ack(const asn1::s1ap::ho_request_s& msg,
for (size_t i = 0; i < not_admitted_bearers.size(); ++i) { for (size_t i = 0; i < not_admitted_bearers.size(); ++i) {
container.erab_failed_to_setup_list_ho_req_ack.value[i].load_info_obj( container.erab_failed_to_setup_list_ho_req_ack.value[i].load_info_obj(
ASN1_S1AP_ID_ERAB_FAILEDTO_SETUP_ITEM_HO_REQ_ACK); ASN1_S1AP_ID_ERAB_FAILEDTO_SETUP_ITEM_HO_REQ_ACK);
auto& erab = container.erab_failed_to_setup_list_ho_req_ack.value[i].value.erab_failedto_setup_item_ho_req_ack(); auto& erab = container.erab_failed_to_setup_list_ho_req_ack.value[i]->erab_failedto_setup_item_ho_req_ack();
erab.erab_id = not_admitted_bearers[i].erab_id; erab.erab_id = not_admitted_bearers[i].erab_id;
erab.cause = not_admitted_bearers[i].cause; erab.cause = not_admitted_bearers[i].cause;
} }
@ -1586,7 +1586,7 @@ void s1ap::ue::ue_ctxt_setup_complete()
container.erab_setup_list_ctxt_su_res.value.resize(updated_erabs.size()); container.erab_setup_list_ctxt_su_res.value.resize(updated_erabs.size());
for (size_t i = 0; i < updated_erabs.size(); ++i) { for (size_t i = 0; i < updated_erabs.size(); ++i) {
container.erab_setup_list_ctxt_su_res.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_SETUP_ITEM_CTXT_SU_RES); container.erab_setup_list_ctxt_su_res.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_SETUP_ITEM_CTXT_SU_RES);
auto& item = container.erab_setup_list_ctxt_su_res.value[i].value.erab_setup_item_ctxt_su_res(); auto& item = container.erab_setup_list_ctxt_su_res.value[i]->erab_setup_item_ctxt_su_res();
item.erab_id = updated_erabs[i]; item.erab_id = updated_erabs[i];
get_erab_addr(item.erab_id, item.transport_layer_address, item.gtp_teid); get_erab_addr(item.erab_id, item.transport_layer_address, item.gtp_teid);
} }
@ -1618,7 +1618,7 @@ bool s1ap::ue::send_erab_setup_response(const erab_id_list& erabs_setup, const e
res.protocol_ies.erab_setup_list_bearer_su_res.value.resize(erabs_setup.size()); res.protocol_ies.erab_setup_list_bearer_su_res.value.resize(erabs_setup.size());
for (size_t i = 0; i < erabs_setup.size(); ++i) { for (size_t i = 0; i < erabs_setup.size(); ++i) {
res.protocol_ies.erab_setup_list_bearer_su_res.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_SETUP_ITEM_BEARER_SU_RES); res.protocol_ies.erab_setup_list_bearer_su_res.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_SETUP_ITEM_BEARER_SU_RES);
auto& item = res.protocol_ies.erab_setup_list_bearer_su_res.value[i].value.erab_setup_item_bearer_su_res(); auto& item = res.protocol_ies.erab_setup_list_bearer_su_res.value[i]->erab_setup_item_bearer_su_res();
item.erab_id = erabs_setup[i]; item.erab_id = erabs_setup[i];
get_erab_addr(item.erab_id, item.transport_layer_address, item.gtp_teid); get_erab_addr(item.erab_id, item.transport_layer_address, item.gtp_teid);
} }
@ -1683,7 +1683,7 @@ bool s1ap::ue::send_erab_release_response(const erab_id_list& erabs_released, co
for (size_t i = 0; i < erabs_released.size(); ++i) { for (size_t i = 0; i < erabs_released.size(); ++i) {
container.erab_release_list_bearer_rel_comp.value[i].load_info_obj( container.erab_release_list_bearer_rel_comp.value[i].load_info_obj(
ASN1_S1AP_ID_ERAB_RELEASE_ITEM_BEARER_REL_COMP); ASN1_S1AP_ID_ERAB_RELEASE_ITEM_BEARER_REL_COMP);
container.erab_release_list_bearer_rel_comp.value[i].value.erab_release_item_bearer_rel_comp().erab_id = container.erab_release_list_bearer_rel_comp.value[i]->erab_release_item_bearer_rel_comp().erab_id =
erabs_released[i]; erabs_released[i];
} }
} }
@ -1712,8 +1712,7 @@ bool s1ap::ue::send_erab_modify_response(const erab_id_list& erabs_modified, con
container.erab_modify_list_bearer_mod_res.value.resize(erabs_modified.size()); container.erab_modify_list_bearer_mod_res.value.resize(erabs_modified.size());
for (uint32_t i = 0; i < container.erab_modify_list_bearer_mod_res.value.size(); i++) { for (uint32_t i = 0; i < container.erab_modify_list_bearer_mod_res.value.size(); i++) {
container.erab_modify_list_bearer_mod_res.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_MODIFY_ITEM_BEARER_MOD_RES); container.erab_modify_list_bearer_mod_res.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_MODIFY_ITEM_BEARER_MOD_RES);
container.erab_modify_list_bearer_mod_res.value[i].value.erab_modify_item_bearer_mod_res().erab_id = container.erab_modify_list_bearer_mod_res.value[i]->erab_modify_item_bearer_mod_res().erab_id = erabs_modified[i];
erabs_modified[i];
} }
} }
@ -1744,7 +1743,7 @@ bool s1ap::ue::send_erab_release_indication(const std::vector<uint16_t>& erabs_s
container.erab_released_list.value.resize(erabs_successfully_released.size()); container.erab_released_list.value.resize(erabs_successfully_released.size());
for (size_t i = 0; i < container.erab_released_list.value.size(); ++i) { for (size_t i = 0; i < container.erab_released_list.value.size(); ++i) {
container.erab_released_list.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_ITEM); container.erab_released_list.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_ITEM);
container.erab_released_list.value[i].value.erab_item().erab_id = erabs_successfully_released[i]; container.erab_released_list.value[i]->erab_item().erab_id = erabs_successfully_released[i];
} }
return s1ap_ptr->sctp_send_s1ap_pdu(tx_pdu, ctxt.rnti, "E-RABReleaseIndication"); return s1ap_ptr->sctp_send_s1ap_pdu(tx_pdu, ctxt.rnti, "E-RABReleaseIndication");
@ -2149,9 +2148,9 @@ bool s1ap::ue::send_ho_required(uint32_t target_eci,
transparent_cntr.erab_info_list.resize(fwd_erabs.size()); transparent_cntr.erab_info_list.resize(fwd_erabs.size());
for (uint32_t i = 0; i < fwd_erabs.size(); ++i) { for (uint32_t i = 0; i < fwd_erabs.size(); ++i) {
transparent_cntr.erab_info_list[i].load_info_obj(ASN1_S1AP_ID_ERAB_INFO_LIST_ITEM); transparent_cntr.erab_info_list[i].load_info_obj(ASN1_S1AP_ID_ERAB_INFO_LIST_ITEM);
transparent_cntr.erab_info_list[i].value.erab_info_list_item().erab_id = fwd_erabs[i]; transparent_cntr.erab_info_list[i]->erab_info_list_item().erab_id = fwd_erabs[i];
transparent_cntr.erab_info_list[i].value.erab_info_list_item().dl_forwarding_present = true; transparent_cntr.erab_info_list[i]->erab_info_list_item().dl_forwarding_present = true;
transparent_cntr.erab_info_list[i].value.erab_info_list_item().dl_forwarding.value = transparent_cntr.erab_info_list[i]->erab_info_list_item().dl_forwarding.value =
dl_forwarding_opts::dl_forwarding_proposed; dl_forwarding_opts::dl_forwarding_proposed;
} }
// - set target cell ID // - set target cell ID
@ -2212,7 +2211,7 @@ bool s1ap::ue::send_enb_status_transfer_proc(std::vector<bearer_status_info>& be
list.resize(bearer_status_list.size()); list.resize(bearer_status_list.size());
for (uint32_t i = 0; i < list.size(); ++i) { for (uint32_t i = 0; i < list.size(); ++i) {
list[i].load_info_obj(ASN1_S1AP_ID_BEARERS_SUBJECT_TO_STATUS_TRANSFER_ITEM); list[i].load_info_obj(ASN1_S1AP_ID_BEARERS_SUBJECT_TO_STATUS_TRANSFER_ITEM);
auto& asn1bearer = list[i].value.bearers_subject_to_status_transfer_item(); auto& asn1bearer = list[i]->bearers_subject_to_status_transfer_item();
bearer_status_info& item = bearer_status_list[i]; bearer_status_info& item = bearer_status_list[i];
asn1bearer.erab_id = item.erab_id; asn1bearer.erab_id = item.erab_id;

@ -94,7 +94,7 @@ int test_erab_setup(srsran::log_sink_spy& spy, bool qci_exists)
rrc.set_aggregate_max_bitrate(rnti, setupmsg.ueaggregate_maximum_bitrate.value); rrc.set_aggregate_max_bitrate(rnti, setupmsg.ueaggregate_maximum_bitrate.value);
} }
for (const auto& item : setupmsg.erab_to_be_setup_list_bearer_su_req.value) { for (const auto& item : setupmsg.erab_to_be_setup_list_bearer_su_req.value) {
const auto& erab = item.value.erab_to_be_setup_item_bearer_su_req(); const auto& erab = item->erab_to_be_setup_item_bearer_su_req();
asn1::s1ap::cause_c cause; asn1::s1ap::cause_c cause;
int ret = rrc.setup_erab(rnti, int ret = rrc.setup_erab(rnti,
erab.erab_id, erab.erab_id,

@ -273,7 +273,7 @@ int test_s1ap_tenb_mobility(test_event test_params)
/* TeNB receives S1AP Handover Request */ /* TeNB receives S1AP Handover Request */
asn1::s1ap::ho_request_s ho_req; asn1::s1ap::ho_request_s ho_req;
ho_req.protocol_ies.erab_to_be_setup_list_ho_req.value.resize(1); ho_req.protocol_ies.erab_to_be_setup_list_ho_req.value.resize(1);
auto& erab = ho_req.protocol_ies.erab_to_be_setup_list_ho_req.value[0].value.erab_to_be_setup_item_ho_req(); auto& erab = ho_req.protocol_ies.erab_to_be_setup_list_ho_req.value[0]->erab_to_be_setup_item_ho_req();
erab.erab_id = 5; erab.erab_id = 5;
erab.erab_level_qos_params.qci = 9; erab.erab_level_qos_params.qci = 9;
if (test_params == test_event::unknown_qci) { if (test_params == test_event::unknown_qci) {
@ -288,9 +288,9 @@ int test_s1ap_tenb_mobility(test_event test_params)
container.erab_info_list_present = true; container.erab_info_list_present = true;
container.erab_info_list.resize(1); container.erab_info_list.resize(1);
container.erab_info_list[0].load_info_obj(ASN1_S1AP_ID_ERAB_INFO_LIST_ITEM); container.erab_info_list[0].load_info_obj(ASN1_S1AP_ID_ERAB_INFO_LIST_ITEM);
container.erab_info_list[0].value.erab_info_list_item().erab_id = 5; container.erab_info_list[0]->erab_info_list_item().erab_id = 5;
container.erab_info_list[0].value.erab_info_list_item().dl_forwarding_present = true; container.erab_info_list[0]->erab_info_list_item().dl_forwarding_present = true;
container.erab_info_list[0].value.erab_info_list_item().dl_forwarding.value = container.erab_info_list[0]->erab_info_list_item().dl_forwarding.value =
asn1::s1ap::dl_forwarding_opts::dl_forwarding_proposed; asn1::s1ap::dl_forwarding_opts::dl_forwarding_proposed;
uint8_t ho_prep_container[] = { uint8_t ho_prep_container[] = {
0x0a, 0x10, 0x0b, 0x81, 0x80, 0x00, 0x01, 0x80, 0x00, 0xf3, 0x02, 0x08, 0x00, 0x00, 0x15, 0x80, 0x00, 0x14, 0x0a, 0x10, 0x0b, 0x81, 0x80, 0x00, 0x01, 0x80, 0x00, 0xf3, 0x02, 0x08, 0x00, 0x00, 0x15, 0x80, 0x00, 0x14,
@ -360,11 +360,11 @@ int test_s1ap_tenb_mobility(test_event test_params)
// Receives MMEStatusTransfer // Receives MMEStatusTransfer
asn1::s1ap::bearers_subject_to_status_transfer_list_l bearers; asn1::s1ap::bearers_subject_to_status_transfer_list_l bearers;
bearers.resize(1); bearers.resize(1);
bearers[0].value.bearers_subject_to_status_transfer_item().erab_id = 5; bearers[0]->bearers_subject_to_status_transfer_item().erab_id = 5;
bearers[0].value.bearers_subject_to_status_transfer_item().dl_coun_tvalue.pdcp_sn = 100; bearers[0]->bearers_subject_to_status_transfer_item().dl_coun_tvalue.pdcp_sn = 100;
bearers[0].value.bearers_subject_to_status_transfer_item().dl_coun_tvalue.hfn = 3; bearers[0]->bearers_subject_to_status_transfer_item().dl_coun_tvalue.hfn = 3;
bearers[0].value.bearers_subject_to_status_transfer_item().ul_coun_tvalue.pdcp_sn = 120; bearers[0]->bearers_subject_to_status_transfer_item().ul_coun_tvalue.pdcp_sn = 120;
bearers[0].value.bearers_subject_to_status_transfer_item().ul_coun_tvalue.hfn = 4; bearers[0]->bearers_subject_to_status_transfer_item().ul_coun_tvalue.hfn = 4;
tester.rrc.set_erab_status(0x46, bearers); tester.rrc.set_erab_status(0x46, bearers);
TESTASSERT(tester.pdcp.bearers.count(0x46)); TESTASSERT(tester.pdcp.bearers.count(0x46));
TESTASSERT(tester.pdcp.bearers[0x46].count(3)); TESTASSERT(tester.pdcp.bearers[0x46].count(3));

@ -130,7 +130,7 @@ int bring_rrc_to_reconf_state(srsenb::rrc& rrc, srsran::timer_handler& timers, u
rrc.setup_ue_ctxt(rnti, s1ap_pdu.init_msg().value.init_context_setup_request()); rrc.setup_ue_ctxt(rnti, s1ap_pdu.init_msg().value.init_context_setup_request());
for (auto& item : for (auto& item :
s1ap_pdu.init_msg().value.init_context_setup_request().protocol_ies.erab_to_be_setup_list_ctxt_su_req.value) { s1ap_pdu.init_msg().value.init_context_setup_request().protocol_ies.erab_to_be_setup_list_ctxt_su_req.value) {
const auto& erab = item.value.erab_to_be_setup_item_ctxt_su_req(); const auto& erab = item->erab_to_be_setup_item_ctxt_su_req();
asn1::s1ap::cause_c cause; asn1::s1ap::cause_c cause;
TESTASSERT(rrc.setup_erab(rnti, TESTASSERT(rrc.setup_erab(rnti,
erab.erab_id, erab.erab_id,

@ -241,7 +241,7 @@ void test_s1ap_erab_setup(test_event event)
auto& erab_list = protocols.erab_to_be_modified_list_bearer_mod_req.value; auto& erab_list = protocols.erab_to_be_modified_list_bearer_mod_req.value;
erab_list.resize(2); erab_list.resize(2);
erab_list[0].load_info_obj(ASN1_S1AP_ID_ERAB_TO_BE_MODIFIED_ITEM_BEARER_MOD_REQ); erab_list[0].load_info_obj(ASN1_S1AP_ID_ERAB_TO_BE_MODIFIED_ITEM_BEARER_MOD_REQ);
auto* erab_ptr = &erab_list[0].value.erab_to_be_modified_item_bearer_mod_req(); auto* erab_ptr = &erab_list[0]->erab_to_be_modified_item_bearer_mod_req();
erab_ptr->erab_id = 5; erab_ptr->erab_id = 5;
erab_ptr->erab_level_qos_params.qci = 9; erab_ptr->erab_level_qos_params.qci = 9;
erab_ptr->erab_level_qos_params.alloc_retention_prio.prio_level = 15; erab_ptr->erab_level_qos_params.alloc_retention_prio.prio_level = 15;
@ -252,7 +252,7 @@ void test_s1ap_erab_setup(test_event event)
erab_ptr->nas_pdu.resize(1); erab_ptr->nas_pdu.resize(1);
erab_ptr->nas_pdu[0] = 0; erab_ptr->nas_pdu[0] = 0;
erab_list[1] = erab_list[0]; erab_list[1] = erab_list[0];
erab_ptr = &erab_list[1].value.erab_to_be_modified_item_bearer_mod_req(); erab_ptr = &erab_list[1]->erab_to_be_modified_item_bearer_mod_req();
erab_ptr->erab_id = event == test_event::repeated_erabid_mod ? 5 : 6; erab_ptr->erab_id = event == test_event::repeated_erabid_mod ? 5 : 6;
if (event == test_event::wrong_erabid_mod) { if (event == test_event::wrong_erabid_mod) {
rrc.next_erabs_failed_to_modify.push_back(6); rrc.next_erabs_failed_to_modify.push_back(6);
@ -286,11 +286,10 @@ void test_s1ap_erab_setup(test_event event)
if (event == test_event::wrong_erabid_mod) { if (event == test_event::wrong_erabid_mod) {
TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res_present); TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res_present);
TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res.value.size() == 1); TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res.value.size() == 1);
TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res.value[0].value.erab_modify_item_bearer_mod_res().erab_id == TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res.value[0]->erab_modify_item_bearer_mod_res().erab_id == 5);
5);
TESTASSERT(protocol_ies.erab_failed_to_modify_list_present); TESTASSERT(protocol_ies.erab_failed_to_modify_list_present);
TESTASSERT(protocol_ies.erab_failed_to_modify_list.value.size() == 1); TESTASSERT(protocol_ies.erab_failed_to_modify_list.value.size() == 1);
auto& erab_item = protocol_ies.erab_failed_to_modify_list.value[0].value.erab_item(); auto& erab_item = protocol_ies.erab_failed_to_modify_list.value[0]->erab_item();
TESTASSERT(erab_item.erab_id == 6); TESTASSERT(erab_item.erab_id == 6);
TESTASSERT(erab_item.cause.type().value == asn1::s1ap::cause_c::types_opts::radio_network); TESTASSERT(erab_item.cause.type().value == asn1::s1ap::cause_c::types_opts::radio_network);
TESTASSERT(erab_item.cause.radio_network().value == asn1::s1ap::cause_radio_network_opts::unknown_erab_id); TESTASSERT(erab_item.cause.radio_network().value == asn1::s1ap::cause_radio_network_opts::unknown_erab_id);
@ -300,7 +299,7 @@ void test_s1ap_erab_setup(test_event event)
TESTASSERT(not protocol_ies.erab_modify_list_bearer_mod_res_present); TESTASSERT(not protocol_ies.erab_modify_list_bearer_mod_res_present);
TESTASSERT(protocol_ies.erab_failed_to_modify_list_present); TESTASSERT(protocol_ies.erab_failed_to_modify_list_present);
TESTASSERT(protocol_ies.erab_failed_to_modify_list.value.size() == 1); TESTASSERT(protocol_ies.erab_failed_to_modify_list.value.size() == 1);
auto& erab_item = protocol_ies.erab_failed_to_modify_list.value[0].value.erab_item(); auto& erab_item = protocol_ies.erab_failed_to_modify_list.value[0]->erab_item();
TESTASSERT(erab_item.erab_id == 5); TESTASSERT(erab_item.erab_id == 5);
TESTASSERT(erab_item.cause.type().value == asn1::s1ap::cause_c::types_opts::radio_network); TESTASSERT(erab_item.cause.type().value == asn1::s1ap::cause_c::types_opts::radio_network);
TESTASSERT(erab_item.cause.radio_network().value == TESTASSERT(erab_item.cause.radio_network().value ==
@ -311,7 +310,7 @@ void test_s1ap_erab_setup(test_event event)
TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res_present); TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res_present);
TESTASSERT(not protocol_ies.erab_failed_to_modify_list_present); TESTASSERT(not protocol_ies.erab_failed_to_modify_list_present);
TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res.value.size() == 2); TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res.value.size() == 2);
auto& erab_item = protocol_ies.erab_modify_list_bearer_mod_res.value[0].value.erab_modify_item_bearer_mod_res(); auto& erab_item = protocol_ies.erab_modify_list_bearer_mod_res.value[0]->erab_modify_item_bearer_mod_res();
TESTASSERT(erab_item.erab_id == 5); TESTASSERT(erab_item.erab_id == 5);
} }

@ -91,7 +91,7 @@ bool s1ap_ctx_mngmt_proc::send_initial_context_setup_request(nas* nas_ctx, uint1
// Setup eRAB context // Setup eRAB context
asn1::s1ap::erab_to_be_setup_item_ctxt_su_req_s& erab_ctx_req = asn1::s1ap::erab_to_be_setup_item_ctxt_su_req_s& erab_ctx_req =
in_ctx_req.erab_to_be_setup_list_ctxt_su_req.value[0].value.erab_to_be_setup_item_ctxt_su_req(); in_ctx_req.erab_to_be_setup_list_ctxt_su_req.value[0]->erab_to_be_setup_item_ctxt_su_req();
erab_ctx_req.erab_id = esm_ctx->erab_id; erab_ctx_req.erab_id = esm_ctx->erab_id;
// Setup E-RAB QoS parameters // Setup E-RAB QoS parameters
@ -189,8 +189,7 @@ bool s1ap_ctx_mngmt_proc::handle_initial_context_setup_response(
for (const asn1::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 = ie_container->erab_setup_item_ctxt_su_res();
ie_container.value.erab_setup_item_ctxt_su_res();
uint8_t erab_id = erab_setup_item_ctxt.erab_id; uint8_t erab_id = erab_setup_item_ctxt.erab_id;
// Make sure we requested the context setup // Make sure we requested the context setup

@ -80,10 +80,9 @@ bool s1ap_erab_mngmt_proc::send_erab_release_command(uint32_t enb_
erab_rel_cmd.erab_to_be_released_list.value.resize(erabs_to_release.size()); erab_rel_cmd.erab_to_be_released_list.value.resize(erabs_to_release.size());
for (uint32_t i = 0; i < erab_rel_cmd.erab_to_be_released_list.value.size(); i++) { for (uint32_t i = 0; i < erab_rel_cmd.erab_to_be_released_list.value.size(); i++) {
erab_rel_cmd.erab_to_be_released_list.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_ITEM); erab_rel_cmd.erab_to_be_released_list.value[i].load_info_obj(ASN1_S1AP_ID_ERAB_ITEM);
erab_rel_cmd.erab_to_be_released_list.value[i].value.erab_item().erab_id = erabs_to_release[i]; erab_rel_cmd.erab_to_be_released_list.value[i]->erab_item().erab_id = erabs_to_release[i];
erab_rel_cmd.erab_to_be_released_list.value[i].value.erab_item().cause.set(asn1::s1ap::cause_c::types::misc); erab_rel_cmd.erab_to_be_released_list.value[i]->erab_item().cause.set(asn1::s1ap::cause_c::types::misc);
erab_rel_cmd.erab_to_be_released_list.value[i].value.erab_item().cause.misc() = erab_rel_cmd.erab_to_be_released_list.value[i]->erab_item().cause.misc() = asn1::s1ap::cause_misc_opts::unspecified;
asn1::s1ap::cause_misc_opts::unspecified;
m_logger.info("Sending release comman to %d", erabs_to_release[i]); m_logger.info("Sending release comman to %d", erabs_to_release[i]);
} }
@ -120,7 +119,7 @@ bool s1ap_erab_mngmt_proc::send_erab_modify_request(uint32_t
erab_mod_req.erab_to_be_modified_list_bearer_mod_req.value[i].load_info_obj( erab_mod_req.erab_to_be_modified_list_bearer_mod_req.value[i].load_info_obj(
ASN1_S1AP_ID_ERAB_TO_BE_MODIFIED_ITEM_BEARER_MOD_REQ); ASN1_S1AP_ID_ERAB_TO_BE_MODIFIED_ITEM_BEARER_MOD_REQ);
asn1::s1ap::erab_to_be_modified_item_bearer_mod_req_s& erab_to_mod = asn1::s1ap::erab_to_be_modified_item_bearer_mod_req_s& erab_to_mod =
erab_mod_req.erab_to_be_modified_list_bearer_mod_req.value[i].value.erab_to_be_modified_item_bearer_mod_req(); erab_mod_req.erab_to_be_modified_list_bearer_mod_req.value[i]->erab_to_be_modified_item_bearer_mod_req();
erab_to_mod.erab_id = erab_it->first; erab_to_mod.erab_id = erab_it->first;
erab_to_mod.erab_level_qos_params.qci = erab_it->second; erab_to_mod.erab_level_qos_params.qci = erab_it->second;
erab_to_mod.erab_level_qos_params.alloc_retention_prio.prio_level = 15; // lowest erab_to_mod.erab_level_qos_params.alloc_retention_prio.prio_level = 15; // lowest

@ -64,10 +64,10 @@ bool s1ap_paging::send_paging(uint64_t imsi, uint16_t erab_to_setup)
paging.tai_list.value[0].load_info_obj(ASN1_S1AP_ID_TAI_ITEM); paging.tai_list.value[0].load_info_obj(ASN1_S1AP_ID_TAI_ITEM);
uint32_t plmn = m_s1ap->get_plmn(); uint32_t plmn = m_s1ap->get_plmn();
paging.tai_list.value[0].value.tai_item().tai.plm_nid.from_number(plmn); paging.tai_list.value[0]->tai_item().tai.plm_nid.from_number(plmn);
uint16_t tac = m_s1ap->m_s1ap_args.tac; uint16_t tac = m_s1ap->m_s1ap_args.tac;
paging.tai_list.value[0].value.tai_item().tai.tac.from_number(tac); paging.tai_list.value[0]->tai_item().tai.tac.from_number(tac);
// Start T3413 // Start T3413
if (!nas_ctx->start_timer(T_3413)) { if (!nas_ctx->start_timer(T_3413)) {

Loading…
Cancel
Save