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

This commit is contained in:
Francisco Paisana 2022-01-06 17:56:47 +01:00
parent 6b181e7a94
commit 2d2a5bee03
12 changed files with 65 additions and 70 deletions

View File

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

View File

@ -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> >(
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 <>
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)
{
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 <>
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)
{
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

View File

@ -180,7 +180,7 @@ int test_ho_request()
TESTASSERT(pdu.init_msg().crit.value == crit_opts::reject);
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.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];
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.dl_coun_tvalue.pdcp_sn = 5;
@ -225,7 +225,7 @@ int test_enb_status_transfer()
pdu2.init_msg()
.value.enb_status_transfer()
.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 == 0);
@ -275,7 +275,7 @@ int test_initial_ctxt_setup_response()
// 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) {
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;
// uint32_to_uint8(teid_in, item.gtp_teid.data());
item.transport_layer_address.resize(32);

View File

@ -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.
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...",
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;
cause.set_radio_network().value = asn1::s1ap::cause_radio_network_opts::no_radio_res_available_in_target_cell;
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& erab_list = rrc_ue->bearer_list.get_erabs();
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);
if (it == erab_list.end()) {
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(),
lst.end(),
[&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()) {
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
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
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) {
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
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);
if (erab_it == rrc_ue->bearer_list.get_erabs().end()) {
logger.warning("The E-RAB Id=%d is not recognized", erab_item.erab_id);

View File

@ -108,7 +108,7 @@ void fill_erab_failed_setup_list(OutList& output_list, const s1ap::erab_item_lis
output_list.resize(input_list.size());
for (size_t i = 0; i < input_list.size(); ++i) {
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);
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)) {
// E-RAB is duplicate
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);
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)) {
// E-RAB is duplicate
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);
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)) {
// E-RAB is duplicate
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) {
const auto& erab = item.value.erab_item();
const auto& erab = item->erab_item();
if (is_repeated_erab_id(erab.erab_id)) {
// 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());
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);
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];
if (!args.gtp_advertise_addr.empty()) {
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) {
container.erab_failed_to_setup_list_ho_req_ack.value[i].load_info_obj(
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.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());
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);
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];
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());
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);
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];
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) {
container.erab_release_list_bearer_rel_comp.value[i].load_info_obj(
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];
}
}
@ -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());
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].value.erab_modify_item_bearer_mod_res().erab_id =
erabs_modified[i];
container.erab_modify_list_bearer_mod_res.value[i]->erab_modify_item_bearer_mod_res().erab_id = 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());
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].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");
@ -2149,9 +2148,9 @@ bool s1ap::ue::send_ho_required(uint32_t target_eci,
transparent_cntr.erab_info_list.resize(fwd_erabs.size());
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].value.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].value.erab_info_list_item().dl_forwarding.value =
transparent_cntr.erab_info_list[i]->erab_info_list_item().erab_id = fwd_erabs[i];
transparent_cntr.erab_info_list[i]->erab_info_list_item().dl_forwarding_present = true;
transparent_cntr.erab_info_list[i]->erab_info_list_item().dl_forwarding.value =
dl_forwarding_opts::dl_forwarding_proposed;
}
// - 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());
for (uint32_t i = 0; i < list.size(); ++i) {
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];
asn1bearer.erab_id = item.erab_id;

View File

@ -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);
}
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;
int ret = rrc.setup_erab(rnti,
erab.erab_id,

View File

@ -273,7 +273,7 @@ int test_s1ap_tenb_mobility(test_event test_params)
/* TeNB receives S1AP Handover Request */
asn1::s1ap::ho_request_s ho_req;
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_level_qos_params.qci = 9;
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.resize(1);
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].value.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().erab_id = 5;
container.erab_info_list[0]->erab_info_list_item().dl_forwarding_present = true;
container.erab_info_list[0]->erab_info_list_item().dl_forwarding.value =
asn1::s1ap::dl_forwarding_opts::dl_forwarding_proposed;
uint8_t ho_prep_container[] = {
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
asn1::s1ap::bearers_subject_to_status_transfer_list_l bearers;
bearers.resize(1);
bearers[0].value.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].value.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].value.bearers_subject_to_status_transfer_item().ul_coun_tvalue.hfn = 4;
bearers[0]->bearers_subject_to_status_transfer_item().erab_id = 5;
bearers[0]->bearers_subject_to_status_transfer_item().dl_coun_tvalue.pdcp_sn = 100;
bearers[0]->bearers_subject_to_status_transfer_item().dl_coun_tvalue.hfn = 3;
bearers[0]->bearers_subject_to_status_transfer_item().ul_coun_tvalue.pdcp_sn = 120;
bearers[0]->bearers_subject_to_status_transfer_item().ul_coun_tvalue.hfn = 4;
tester.rrc.set_erab_status(0x46, bearers);
TESTASSERT(tester.pdcp.bearers.count(0x46));
TESTASSERT(tester.pdcp.bearers[0x46].count(3));

View File

@ -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());
for (auto& item :
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;
TESTASSERT(rrc.setup_erab(rnti,
erab.erab_id,

View File

@ -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;
erab_list.resize(2);
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_level_qos_params.qci = 9;
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[0] = 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;
if (event == test_event::wrong_erabid_mod) {
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) {
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[0].value.erab_modify_item_bearer_mod_res().erab_id ==
5);
TESTASSERT(protocol_ies.erab_modify_list_bearer_mod_res.value[0]->erab_modify_item_bearer_mod_res().erab_id == 5);
TESTASSERT(protocol_ies.erab_failed_to_modify_list_present);
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.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);
@ -300,7 +299,7 @@ void test_s1ap_erab_setup(test_event event)
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.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.cause.type().value == asn1::s1ap::cause_c::types_opts::radio_network);
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(not protocol_ies.erab_failed_to_modify_list_present);
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);
}

View File

@ -91,7 +91,7 @@ bool s1ap_ctx_mngmt_proc::send_initial_context_setup_request(nas* nas_ctx, uint1
// Setup eRAB context
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;
// Setup E-RAB QoS parameters
@ -189,9 +189,8 @@ 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 :
in_ctxt_resp.protocol_ies.erab_setup_list_ctxt_su_res.value) {
// Get E-RAB setup context item and E-RAB Id
const asn1::s1ap::erab_setup_item_ctxt_su_res_s& erab_setup_item_ctxt =
ie_container.value.erab_setup_item_ctxt_su_res();
uint8_t erab_id = erab_setup_item_ctxt.erab_id;
const asn1::s1ap::erab_setup_item_ctxt_su_res_s& erab_setup_item_ctxt = ie_container->erab_setup_item_ctxt_su_res();
uint8_t erab_id = erab_setup_item_ctxt.erab_id;
// Make sure we requested the context setup
esm_ctx_t* esm_ctx = &nas_ctx->m_esm_ctx[erab_id];

View File

@ -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());
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].value.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].value.erab_item().cause.misc() =
asn1::s1ap::cause_misc_opts::unspecified;
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]->erab_item().cause.set(asn1::s1ap::cause_c::types::misc);
erab_rel_cmd.erab_to_be_released_list.value[i]->erab_item().cause.misc() = asn1::s1ap::cause_misc_opts::unspecified;
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(
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 =
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_level_qos_params.qci = erab_it->second;
erab_to_mod.erab_level_qos_params.alloc_retention_prio.prio_level = 15; // lowest

View File

@ -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);
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;
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
if (!nas_ctx->start_timer(T_3413)) {