//----------------------------------------------------------------------------- rlc_op_status_t rrc_rlc_config_req ( const protocol_ctxt_t* const ctxt_pP, const srb_flag_t srb_flagP, const MBMS_flag_t mbms_flagP, const config_action_t actionP, const rb_id_t rb_idP, const rlc_info_t rlc_infoP) { //----------------------------------------------------------------------------- rlc_op_status_t status; LOG_D(RLC, PROTOCOL_CTXT_FMT" CONFIG_REQ for RAB %u\n", PROTOCOL_CTXT_ARGS(ctxt_pP), rb_idP); #ifdef OAI_EMU CHECK_CTXT_ARGS(ctxt_pP) #endif AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); switch (actionP) { case CONFIG_ACTION_ADD: if (rrc_rlc_add_rlc(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, rb_idP, rlc_infoP.rlc_mode) != NULL) { return RLC_OP_STATUS_INTERNAL_ERROR; } // no break, fall to next case case CONFIG_ACTION_MODIFY: switch (rlc_infoP.rlc_mode) { case RLC_MODE_AM: LOG_I(RLC, PROTOCOL_CTXT_FMT"[RB %u] MODIFY RB AM\n", PROTOCOL_CTXT_ARGS(ctxt_pP), rb_idP); config_req_rlc_am( ctxt_pP, srb_flagP, &rlc_infoP.rlc.rlc_am_info, rb_idP); break; case RLC_MODE_UM: LOG_I(RLC, PROTOCOL_CTXT_FMT"[RB %u] MODIFY RB UM\n", PROTOCOL_CTXT_ARGS(ctxt_pP), rb_idP); config_req_rlc_um( ctxt_pP, srb_flagP, &rlc_infoP.rlc.rlc_um_info, rb_idP); break; case RLC_MODE_TM: LOG_I(RLC, PROTOCOL_CTXT_FMT"[RB %u] MODIFY RB TM\n", PROTOCOL_CTXT_ARGS(ctxt_pP), rb_idP); config_req_rlc_tm( ctxt_pP, srb_flagP, &rlc_infoP.rlc.rlc_tm_info, rb_idP); break; default: return RLC_OP_STATUS_BAD_PARAMETER; } break; case CONFIG_ACTION_REMOVE: return rrc_rlc_remove_rlc(ctxt_pP, srb_flagP, mbms_flagP, rb_idP); break; default: return RLC_OP_STATUS_BAD_PARAMETER; } return RLC_OP_STATUS_OK; }
//----------------------------------------------------------------------------- rlc_op_status_t rrc_rlc_config_req ( const module_id_t enb_mod_idP, const module_id_t ue_mod_idP, const frame_t frameP, const eNB_flag_t enb_flagP, const srb_flag_t srb_flagP, const MBMS_flag_t mbms_flagP, const config_action_t actionP, const rb_id_t rb_idP, const rlc_info_t rlc_infoP) { //----------------------------------------------------------------------------- rlc_op_status_t status; LOG_D(RLC, "[FRAME %05u][%s][RLC][MOD %u/%u] CONFIG_REQ for Rab %u\n", frameP, (enb_flagP) ? "eNB" : "UE", enb_mod_idP, ue_mod_idP, rb_idP); #ifdef OAI_EMU if (enb_flagP) { AssertFatal ((enb_mod_idP >= oai_emulation.info.first_enb_local) && (oai_emulation.info.nb_enb_local > 0), "eNB module id is too low (%u/%d)!\n", enb_mod_idP, oai_emulation.info.first_enb_local); AssertFatal ((enb_mod_idP < (oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local)) && (oai_emulation.info.nb_enb_local > 0), "eNB module id is too high (%u/%d)!\n", enb_mod_idP, oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local); AssertFatal (ue_mod_idP < NB_UE_INST, "UE module id is too high (%u/%d)!\n", ue_mod_idP, oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local); } else { AssertFatal (ue_mod_idP < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local), "UE module id is too high (%u/%d)!\n", ue_mod_idP, oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local); AssertFatal (ue_mod_idP >= oai_emulation.info.first_ue_local, "UE module id is too low (%u/%d)!\n", ue_mod_idP, oai_emulation.info.first_ue_local); } #endif AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); switch (actionP) { case CONFIG_ACTION_ADD: if (rrc_rlc_add_rlc(enb_mod_idP, ue_mod_idP, frameP, enb_flagP, srb_flagP, MBMS_FLAG_NO, rb_idP, rb_idP, rlc_infoP.rlc_mode) != NULL) { return RLC_OP_STATUS_INTERNAL_ERROR; } // no break, fall to next case case CONFIG_ACTION_MODIFY: switch (rlc_infoP.rlc_mode) { case RLC_MODE_AM: LOG_I(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u] MODIFY RB AM\n", frameP, enb_mod_idP, ue_mod_idP, rb_idP); config_req_rlc_am( enb_mod_idP, ue_mod_idP, frameP, enb_flagP, srb_flagP, &rlc_infoP.rlc.rlc_am_info, rb_idP); break; case RLC_MODE_UM: LOG_I(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u] MODIFY RB UM\n", frameP, enb_mod_idP, ue_mod_idP, rb_idP); config_req_rlc_um( enb_mod_idP, ue_mod_idP, frameP, enb_flagP, srb_flagP, &rlc_infoP.rlc.rlc_um_info, rb_idP); break; case RLC_MODE_TM: LOG_I(RLC, "[Frame %05u][UE][RLC_RRC][INST %u/%u][RB %u] MODIFY RB TM\n", frameP, enb_mod_idP, ue_mod_idP, rb_idP); config_req_rlc_tm( enb_mod_idP, ue_mod_idP, frameP, enb_flagP, srb_flagP, &rlc_infoP.rlc.rlc_tm_info, rb_idP); break; default: return RLC_OP_STATUS_BAD_PARAMETER; } break; case CONFIG_ACTION_REMOVE: return rrc_rlc_remove_rlc(enb_mod_idP, ue_mod_idP, frameP, enb_flagP, srb_flagP, mbms_flagP, rb_idP); break; default: return RLC_OP_STATUS_BAD_PARAMETER; } return RLC_OP_STATUS_OK; }