Do not use ru_session_list on the stack
This struct is used in multiple source files. Previously, when stopping the nr-softmodem, the ru_session_list "disappears" and the M-plane wasn't terminated properly (num_rus = 0 even though DU connected to at least one RU).
This commit is contained in:
+16
-14
@@ -85,6 +85,7 @@ int trx_oran_stop(openair0_device *device)
|
|||||||
#ifdef OAI_MPLANE
|
#ifdef OAI_MPLANE
|
||||||
printf("[MPLANE] Stopping M-plane.\n");
|
printf("[MPLANE] Stopping M-plane.\n");
|
||||||
disconnect_mplane(s->mplane_priv);
|
disconnect_mplane(s->mplane_priv);
|
||||||
|
free(s->mplane_priv);
|
||||||
#endif
|
#endif
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
@@ -308,40 +309,41 @@ __attribute__((__visibility__("default"))) int transport_init(openair0_device *d
|
|||||||
|
|
||||||
bool success = false;
|
bool success = false;
|
||||||
#ifdef OAI_MPLANE
|
#ifdef OAI_MPLANE
|
||||||
ru_session_list_t ru_session_list = {0};
|
ru_session_list_t *ru_session_list = calloc(1, sizeof(*ru_session_list));
|
||||||
success = init_mplane(&ru_session_list);
|
assert(ru_session_list != NULL && "Memory exhausted");
|
||||||
|
success = init_mplane(ru_session_list);
|
||||||
AssertFatal(success, "[MPLANE] Cannot initialize M-plane.\n");
|
AssertFatal(success, "[MPLANE] Cannot initialize M-plane.\n");
|
||||||
|
|
||||||
bool ru_configured[ru_session_list.num_rus];
|
bool ru_configured[ru_session_list->num_rus];
|
||||||
for (size_t i = 0; i < ru_session_list.num_rus; i++) {
|
for (size_t i = 0; i < ru_session_list->num_rus; i++) {
|
||||||
ru_session_t *ru_session = &ru_session_list.ru_session[i];
|
ru_session_t *ru_session = &ru_session_list->ru_session[i];
|
||||||
ru_configured[i] = connect_mplane(ru_session);
|
ru_configured[i] = connect_mplane(ru_session);
|
||||||
if (!ru_configured[i]) {
|
if (!ru_configured[i]) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ru_configured[i] = manage_ru(ru_session, openair0_cfg, ru_session_list.num_rus);
|
ru_configured[i] = manage_ru(ru_session, openair0_cfg, ru_session_list->num_rus);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool all_ok = true;
|
bool all_ok = true;
|
||||||
bool ru_ready[ru_session_list.num_rus];
|
bool ru_ready[ru_session_list->num_rus];
|
||||||
for (size_t i = 0; i < ru_session_list.num_rus; i++) {
|
for (size_t i = 0; i < ru_session_list->num_rus; i++) {
|
||||||
if (!ru_configured[i]) {
|
if (!ru_configured[i]) {
|
||||||
MP_LOG_I("RU with IP %s couldn't be configured.\n", ru_session_list.ru_session[i].ru_ip_add);
|
MP_LOG_I("RU with IP %s couldn't be configured.\n", ru_session_list->ru_session[i].ru_ip_add);
|
||||||
all_ok = false;
|
all_ok = false;
|
||||||
}
|
}
|
||||||
ru_ready[i] = false;
|
ru_ready[i] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!all_ok) {
|
if (!all_ok) {
|
||||||
disconnect_mplane((void *)&ru_session_list);
|
disconnect_mplane(ru_session_list);
|
||||||
AssertFatal(false, "[MPLANE] Stopping M-plane.\n");
|
AssertFatal(false, "[MPLANE] Stopping M-plane.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
sleep(1);
|
sleep(1);
|
||||||
bool all_rus_ready = true;
|
bool all_rus_ready = true;
|
||||||
for (int i = 0; i < ru_session_list.num_rus; i++) {
|
for (int i = 0; i < ru_session_list->num_rus; i++) {
|
||||||
ru_session_t *ru_session = &ru_session_list.ru_session[i];
|
ru_session_t *ru_session = &ru_session_list->ru_session[i];
|
||||||
if (!ru_ready[i] && ru_session->ru_notif.config_change && !ru_session->ru_notif.rx_carrier_state && !ru_session->ru_notif.tx_carrier_state) {
|
if (!ru_ready[i] && ru_session->ru_notif.config_change && !ru_session->ru_notif.rx_carrier_state && !ru_session->ru_notif.tx_carrier_state) {
|
||||||
MP_LOG_I("RU \"%s\" is now ready.\n", ru_session->ru_ip_add);
|
MP_LOG_I("RU \"%s\" is now ready.\n", ru_session->ru_ip_add);
|
||||||
ru_ready[i] = true;
|
ru_ready[i] = true;
|
||||||
@@ -360,9 +362,9 @@ __attribute__((__visibility__("default"))) int transport_init(openair0_device *d
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eth->mplane_priv = (void *)&ru_session_list;
|
eth->mplane_priv = ru_session_list;
|
||||||
|
|
||||||
success = get_xran_config((void *)&ru_session_list, openair0_cfg, &fh_init, fh_config);
|
success = get_xran_config(ru_session_list, openair0_cfg, &fh_init, fh_config);
|
||||||
AssertFatal(success, "[MPLANE] Cannot configure xran with M-plane info.\n");
|
AssertFatal(success, "[MPLANE] Cannot configure xran with M-plane info.\n");
|
||||||
#else
|
#else
|
||||||
success = get_xran_config(NULL, openair0_cfg, &fh_init, fh_config);
|
success = get_xran_config(NULL, openair0_cfg, &fh_init, fh_config);
|
||||||
|
|||||||
Reference in New Issue
Block a user