FlexRAN: Circumvent different RRC/MAC layer user ID sorting
* RRC and MAC might sort users differently * therefore, we have to "reverse lookup" the MAC ID from the RNTI when filling user info * For this purpose, add RAN API function flexran_get_mac_ue_id_rnti()
This commit is contained in:
@@ -558,7 +558,8 @@ int flexran_agent_ue_config_reply(mid_t mod_id, const void *params, Protocol__Fl
|
|||||||
|
|
||||||
if (flexran_agent_get_rrc_xface(mod_id) && flexran_agent_get_mac_xface(mod_id)
|
if (flexran_agent_get_rrc_xface(mod_id) && flexran_agent_get_mac_xface(mod_id)
|
||||||
&& flexran_get_rrc_num_ues(mod_id) != flexran_get_mac_num_ues(mod_id)) {
|
&& flexran_get_rrc_num_ues(mod_id) != flexran_get_mac_num_ues(mod_id)) {
|
||||||
LOG_E(FLEXRAN_AGENT, "different numbers of UEs in RRC and MAC\n");
|
LOG_E(FLEXRAN_AGENT, "different numbers of UEs in RRC (%d) and MAC (%d)\n",
|
||||||
|
flexran_get_rrc_num_ues(mod_id), flexran_get_mac_num_ues(mod_id));
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -578,7 +579,7 @@ int flexran_agent_ue_config_reply(mid_t mod_id, const void *params, Protocol__Fl
|
|||||||
if (flexran_agent_get_rrc_xface(mod_id))
|
if (flexran_agent_get_rrc_xface(mod_id))
|
||||||
flexran_agent_fill_rrc_ue_config(mod_id, rnti, ue_config[i]);
|
flexran_agent_fill_rrc_ue_config(mod_id, rnti, ue_config[i]);
|
||||||
if (flexran_agent_get_mac_xface(mod_id)) {
|
if (flexran_agent_get_mac_xface(mod_id)) {
|
||||||
const int UE_id = flexran_get_mac_ue_id(mod_id, i);
|
const int UE_id = flexran_get_mac_ue_id_rnti(mod_id, rnti);
|
||||||
flexran_agent_fill_mac_ue_config(mod_id, UE_id, ue_config[i]);
|
flexran_agent_fill_mac_ue_config(mod_id, UE_id, ue_config[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -249,7 +249,8 @@ int flexran_agent_handle_stats(mid_t mod_id, const void *params, Protocol__Flexr
|
|||||||
|
|
||||||
if (flexran_agent_get_rrc_xface(mod_id) && flexran_agent_get_mac_xface(mod_id)
|
if (flexran_agent_get_rrc_xface(mod_id) && flexran_agent_get_mac_xface(mod_id)
|
||||||
&& flexran_get_rrc_num_ues(mod_id) != flexran_get_mac_num_ues(mod_id)) {
|
&& flexran_get_rrc_num_ues(mod_id) != flexran_get_mac_num_ues(mod_id)) {
|
||||||
LOG_E(FLEXRAN_AGENT, "different numbers of UEs in RRC and MAC\n");
|
LOG_E(FLEXRAN_AGENT, "different numbers of UEs in RRC (%d) and MAC (%d)\n",
|
||||||
|
flexran_get_rrc_num_ues(mod_id), flexran_get_mac_num_ues(mod_id));
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
report_config.ue_report_type = malloc(sizeof(ue_report_type_t) * report_config.nr_ue);
|
report_config.ue_report_type = malloc(sizeof(ue_report_type_t) * report_config.nr_ue);
|
||||||
|
|||||||
@@ -129,6 +129,21 @@ int flexran_get_num_ue_lcs(mid_t mod_id, mid_t ue_id)
|
|||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int flexran_get_mac_ue_id_rnti(mid_t mod_id, rnti_t rnti)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
if (!mac_is_present(mod_id)) return 0;
|
||||||
|
/* get the (active) UE with RNTI i */
|
||||||
|
for (n = 0; n < MAX_MOBILES_PER_ENB; ++n) {
|
||||||
|
if (RC.mac[mod_id]->UE_list.active[n] == TRUE
|
||||||
|
&& rnti == UE_RNTI(mod_id, n)) {
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int flexran_get_mac_ue_id(mid_t mod_id, int i)
|
int flexran_get_mac_ue_id(mid_t mod_id, int i)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ int flexran_get_num_ue_lcs(mid_t mod_id, mid_t ue_id);
|
|||||||
/* Get the rnti of a UE with id ue_id from MAC */
|
/* Get the rnti of a UE with id ue_id from MAC */
|
||||||
rnti_t flexran_get_mac_ue_crnti(mid_t mod_id, mid_t ue_id);
|
rnti_t flexran_get_mac_ue_crnti(mid_t mod_id, mid_t ue_id);
|
||||||
|
|
||||||
|
int flexran_get_mac_ue_id_rnti(mid_t mod_id, rnti_t rnti);
|
||||||
|
|
||||||
/* Return the UE id of attached UE as opposed to the index [0,NUM UEs] (i.e.,
|
/* Return the UE id of attached UE as opposed to the index [0,NUM UEs] (i.e.,
|
||||||
* the i'th active UE). Returns 0 if the i'th active UE could not be found. */
|
* the i'th active UE). Returns 0 if the i'th active UE could not be found. */
|
||||||
int flexran_get_mac_ue_id(mid_t mod_id, int i);
|
int flexran_get_mac_ue_id(mid_t mod_id, int i);
|
||||||
|
|||||||
Reference in New Issue
Block a user