diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c index 1e091feba57529cfc08b64505af9988f39d0bcc2..c752469414653c6252760e4b1156331a77dc7662 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c +++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c @@ -1497,12 +1497,12 @@ void flexran_agent_slice_update(mid_t mod_id) /* create new DL and UL slices if necessary */ for (i = slice_config[mod_id]->n_dl; i < sc_update[mod_id]->n_dl; i++) { - flexran_create_dl_slice(mod_id, sc_update[mod_id]->dl[i]->id, 0); + flexran_create_dl_slice(mod_id, sc_update[mod_id]->dl[i]->id); slice_config[mod_id]->n_dl = flexran_get_num_dl_slices(mod_id); flexran_agent_read_slice_dl_config(mod_id, i, slice_config[mod_id]->dl[i]); } for (i = slice_config[mod_id]->n_ul; i < sc_update[mod_id]->n_ul; i++) { - flexran_create_ul_slice(mod_id, sc_update[mod_id]->ul[i]->id, 0); + flexran_create_ul_slice(mod_id, sc_update[mod_id]->ul[i]->id); slice_config[mod_id]->n_ul = flexran_get_num_ul_slices(mod_id); flexran_agent_read_slice_ul_config(mod_id, i, slice_config[mod_id]->ul[i]); } diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c index a1a905d4a54f38c8f6d2eeb26531b956580ecec0..e1ca3273e896be33f35986d26eb4dd2b5edff3ac 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c +++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c @@ -969,7 +969,7 @@ void flexran_agent_read_slice_dl_config(mid_t mod_id, int slice_idx, Protocol__F if (dl_slice->n_sorting < 1) dl_slice->sorting = NULL; dl_slice->accounting = flexran_get_dl_slice_accounting_policy(mod_id, slice_idx); dl_slice->has_accounting = 1; - dl_slice->scheduler_name = flexran_get_dl_slice_scheduler_name(mod_id, slice_idx); + dl_slice->scheduler_name = flexran_get_dl_slice_scheduler(mod_id, slice_idx); } void flexran_agent_read_slice_ul_config(mid_t mod_id, int slice_idx, Protocol__FlexUlSlice *ul_slice) @@ -1007,7 +1007,7 @@ void flexran_agent_read_slice_ul_config(mid_t mod_id, int slice_idx, Protocol__F if (ul_slice->n_sorting < 1) ul_slice->sorting = NULL;*/ /*ul_slice->accounting = flexran_get_ul_slice_accounting_policy(mod_id, slice_idx);*/ ul_slice->has_accounting = 0; - ul_slice->scheduler_name = flexran_get_ul_slice_scheduler_name(mod_id, slice_idx); + ul_slice->scheduler_name = flexran_get_ul_slice_scheduler(mod_id, slice_idx); } void overwrite_slice_config_dl(Protocol__FlexDlSlice *exist, Protocol__FlexDlSlice *update) @@ -1069,10 +1069,12 @@ void overwrite_slice_config_dl(Protocol__FlexDlSlice *exist, Protocol__FlexDlSli update->id, exist->accounting, update->accounting); exist->accounting = update->accounting; } - if (update->scheduler_name - && strcmp(update->scheduler_name, exist->scheduler_name) != 0) { - LOG_W(FLEXRAN_AGENT, "[DL slice %d] ignoring new scheduler name \"%s\"!\n", - update->id, update->scheduler_name); + if (!exist->scheduler_name + || strcmp(update->scheduler_name, exist->scheduler_name) != 0) { + LOG_I(FLEXRAN_AGENT, "[DL slice %d] update scheduler: %s -> %s\n", + update->id, exist->scheduler_name, update->scheduler_name); + /* TODO dangerous? */ + exist->scheduler_name = update->scheduler_name; } } @@ -1135,10 +1137,12 @@ void overwrite_slice_config_ul(Protocol__FlexUlSlice *exist, Protocol__FlexUlSli update->id, exist->accounting, update->accounting); exist->accounting = update->accounting; } - if (update->scheduler_name - && strcmp(update->scheduler_name, exist->scheduler_name) != 0) { - LOG_W(FLEXRAN_AGENT, "[UL slice %d] ignoring new scheduler name \"%s\"!\n", - update->id, update->scheduler_name); + if (!exist->scheduler_name + || strcmp(update->scheduler_name, exist->scheduler_name) != 0) { + LOG_I(FLEXRAN_AGENT, "[UL slice %d] update scheduler: %s -> %s\n", + update->id, exist->scheduler_name, update->scheduler_name); + /* TODO dangerous? */ + exist->scheduler_name = update->scheduler_name; } } @@ -1416,6 +1420,11 @@ int apply_new_slice_dl_config(mid_t mod_id, Protocol__FlexDlSlice *oldc, Protoco flexran_set_dl_slice_accounting_policy(mod_id, slice_idx, newc->accounting); changes++; } + if (!oldc->scheduler_name + || strcmp(oldc->scheduler_name, newc->scheduler_name) != 0) { + flexran_set_dl_slice_scheduler(mod_id, slice_idx, newc->scheduler_name); + changes++; + } return changes; } @@ -1477,6 +1486,11 @@ int apply_new_slice_ul_config(mid_t mod_id, Protocol__FlexUlSlice *oldc, Protoco LOG_W(FLEXRAN_AGENT, "[%d][UL slice %d] setting the accounting is not supported\n", mod_id, slice_idx); } + if (!oldc->scheduler_name + || strcmp(oldc->scheduler_name, newc->scheduler_name) != 0) { + flexran_set_ul_slice_scheduler(mod_id, slice_idx, newc->scheduler_name); + changes++; + } return changes; } diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_slice_verification.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_slice_verification.c index addc8d2e7523e3b463a51da47354a74b43cd932e..5dcc3556128c2c1d1b1f2f572fc1bfd9360ad877 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_slice_verification.c +++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_slice_verification.c @@ -84,8 +84,13 @@ int flexran_verify_dl_slice(mid_t mod_id, Protocol__FlexDlSlice *dls) } /* sorting is an enum */ /* accounting is an enum */ - if (dls->scheduler_name) { - LOG_E(FLEXRAN_AGENT, "[%d] setting the scheduler is not allowed\n", mod_id); + if (!dls->scheduler_name) { + LOG_E(FLEXRAN_AGENT, "[%d] no scheduler name found\n", mod_id); + return 0; + } + if (strcmp(dls->scheduler_name, "schedule_ue_spec") != 0) { + LOG_E(FLEXRAN_AGENT, "[%d] setting the scheduler to something different " + "than schedule_ue_spec is currently not allowed\n", mod_id); return 0; } @@ -183,8 +188,13 @@ int flexran_verify_ul_slice(mid_t mod_id, Protocol__FlexUlSlice *uls) } /* sorting is an enum */ /* accounting is an enum */ - if (uls->scheduler_name) { - LOG_E(FLEXRAN_AGENT, "[%d] setting the scheduler is not allowed\n", mod_id); + if (!uls->scheduler_name) { + LOG_E(FLEXRAN_AGENT, "[%d] no scheduler name found\n", mod_id); + return 0; + } + if (strcmp(uls->scheduler_name, "schedule_ulsch_rnti") != 0) { + LOG_E(FLEXRAN_AGENT, "[%d] setting the scheduler to something different " + "than schedule_ulsch_rnti is currently not allowed\n", mod_id); return 0; }