From e90b729e5c6764b75f9aba518c47cfb7c53a019d Mon Sep 17 00:00:00 2001 From: Lionel Gauthier <lionel.gauthier@eurecom.fr> Date: Tue, 4 Mar 2014 14:11:45 +0000 Subject: [PATCH] Commit for e-MBMS DUY, to be debugged/harmonized with MAC (lcid, rbid) git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5119 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair2/LAYER2/RLC/rlc.c | 8 + openair2/LAYER2/RLC/rlc.h | 14 +- openair2/LAYER2/RLC/rlc_mac.c | 292 ++++++++++++++++++------------ openair2/LAYER2/RLC/rlc_rrc.c | 33 ++-- openair2/NAS/DRIVER/LITE/common.c | 4 +- 5 files changed, 211 insertions(+), 140 deletions(-) diff --git a/openair2/LAYER2/RLC/rlc.c b/openair2/LAYER2/RLC/rlc.c index 1e640994bf7..d39545f209f 100644 --- a/openair2/LAYER2/RLC/rlc.c +++ b/openair2/LAYER2/RLC/rlc.c @@ -860,6 +860,10 @@ rlc_module_init (void) memset(&rlc_mbms_array_ue[module_id1][service_id][session_id], 0, sizeof(rlc_mbms_t)); } } + for (k=0; k < RLC_MAX_MBMS_LC; k++) { + rlc_mbms_lcid2service_session_id_ue[module_id1][k].service_id = 0; + rlc_mbms_lcid2service_session_id_ue[module_id1][k].session_id = 0; + } #endif for (rb_id=0; rb_id < NB_RB_MAX; rb_id++) { memset(&rlc_array_ue[module_id1][rb_id], 0, sizeof(rlc_t)); @@ -873,6 +877,10 @@ rlc_module_init (void) memset(&rlc_mbms_array_eNB[module_id1][service_id][session_id], 0, sizeof(rlc_mbms_t)); } } + for (k=0; k < RLC_MAX_MBMS_LC; k++) { + rlc_mbms_lcid2service_session_id_eNB[module_id1][k].service_id = 0; + rlc_mbms_lcid2service_session_id_eNB[module_id1][k].session_id = 0; + } #endif for (module_id2=0; module_id2 < NUMBER_OF_UE_MAX; module_id2++) { for (rb_id=0; rb_id < NB_RB_MAX; rb_id++) { diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h index 313f7a46b25..da057eb1747 100755 --- a/openair2/LAYER2/RLC/rlc.h +++ b/openair2/LAYER2/RLC/rlc.h @@ -169,11 +169,8 @@ typedef struct { // PRIVATE INTERNALS OF RLC //----------------------------------------------------------------------------- -#ifdef Rel10 -#define RLC_MAX_LC ((max_val_DRB_Identity+1) * NUMBER_OF_UE_MAX + maxSessionPerPMCH * maxServiceCount) -#else +#define RLC_MAX_MBMS_LC (maxSessionPerPMCH * maxServiceCount) #define RLC_MAX_LC ((max_val_DRB_Identity+1)* NUMBER_OF_UE_MAX) -#endif protected_rlc(void (*rlc_rrc_data_ind) (module_id_t, module_id_t, frame_t, eNB_flag_t, rb_id_t , sdu_size_t , uint8_t* );) protected_rlc(void (*rlc_rrc_data_conf) (module_id_t , module_id_t , eNB_flag_t, rb_id_t , mui_t, rlc_tx_status_t );) @@ -199,6 +196,11 @@ typedef struct rlc_mbms_s { rlc_um_entity_t um; } rlc_mbms_t; +typedef struct rlc_mbms_id_s { + mbms_service_id_t service_id; + mbms_session_id_t session_id; +} rlc_mbms_id_t; + #if !defined(Rel10) # if !defined(maxServiceCount) //unused arrays rlc_mbms_array_ue rlc_mbms_array_eNB @@ -210,7 +212,9 @@ typedef struct rlc_mbms_s { # endif #endif public_rlc(rlc_mbms_t rlc_mbms_array_ue[NUMBER_OF_UE_MAX][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h -public_rlc(rlc_mbms_t rlc_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h +public_rlc(rlc_mbms_t rlc_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h +public_rlc(rlc_mbms_id_t rlc_mbms_lcid2service_session_id_ue[NUMBER_OF_UE_MAX][RLC_MAX_MBMS_LC];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h +public_rlc(rlc_mbms_id_t rlc_mbms_lcid2service_session_id_eNB[NUMBER_OF_eNB_MAX][RLC_MAX_MBMS_LC];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h public_rlc(rb_id_t lcid2rbid_ue[NUMBER_OF_UE_MAX][RLC_MAX_LC];) /*!< \brief Pairing logical channel identifier with radio bearer identifer. */ public_rlc(rb_id_t lcid2rbid_eNB[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][RLC_MAX_LC];) /*!< \brief Pairing logical channel identifier with radio bearer identifer. */ diff --git a/openair2/LAYER2/RLC/rlc_mac.c b/openair2/LAYER2/RLC/rlc_mac.c index 3d83b7f1bc9..1d0ce52e393 100644 --- a/openair2/LAYER2/RLC/rlc_mac.c +++ b/openair2/LAYER2/RLC/rlc_mac.c @@ -17,13 +17,16 @@ #define DEBUG_MAC_INTERFACE 1 //----------------------------------------------------------------------------- -struct mac_data_ind mac_rlc_deserialize_tb (char* buffer_pP, tb_size_t tb_sizeP, num_tb_t num_tbP, crc_t *crcs_pP) { +struct mac_data_ind mac_rlc_deserialize_tb ( + char *buffer_pP, + tb_size_t tb_sizeP, + num_tb_t num_tbP, + crc_t *crcs_pP) { //----------------------------------------------------------------------------- - struct mac_data_ind data_ind; mem_block_t* tb_p; num_tb_t nb_tb_read; - tbs_size_t tbs_size; + tbs_size_t tbs_size; nb_tb_read = 0; tbs_size = 0; @@ -60,7 +63,7 @@ struct mac_data_ind mac_rlc_deserialize_tb (char* buffer_pP, tb_size_t tb_sizeP, //----------------------------------------------------------------------------- tbs_size_t mac_rlc_serialize_tb (char* buffer_pP, list_t transport_blocksP) { //----------------------------------------------------------------------------- - mem_block_t* tb_p; + mem_block_t *tb_p; tbs_size_t tbs_size; tbs_size_t tb_size; @@ -81,18 +84,20 @@ tbs_size_t mac_rlc_serialize_tb (char* buffer_pP, list_t transport_blocksP) { return tbs_size; } //----------------------------------------------------------------------------- -tbs_size_t mac_rlc_data_req (module_id_t enb_mod_idP, - module_id_t ue_mod_idP, - frame_t frameP, - eNB_flag_t enb_flagP, - MBMS_flag_t MBMS_flagP, - logical_chan_id_t channel_idP, - char *buffer_pP) { +tbs_size_t mac_rlc_data_req( + module_id_t enb_mod_idP, + module_id_t ue_mod_idP, + frame_t frameP, + eNB_flag_t enb_flagP, + MBMS_flag_t MBMS_flagP, + logical_chan_id_t channel_idP, + char *buffer_pP) { //----------------------------------------------------------------------------- struct mac_data_req data_request; - rb_id_t rb_id = 0; - rlc_mode_t rlc_mode = RLC_MODE_NONE; - void *rlc_p = NULL; + rb_id_t rb_id = 0; + rlc_mode_t rlc_mode = RLC_MODE_NONE; + void *rlc_p = NULL; + rlc_mbms_id_t *mbms_id_p = NULL; #ifdef DEBUG_MAC_INTERFACE LOG_D(RLC, "\n[RLC] Inst %s enb id %d ue id %d: MAC_RLC_DATA_REQ channel %d (%d) MAX RB %d, Num_tb %d\n", @@ -100,7 +105,7 @@ tbs_size_t mac_rlc_data_req (module_id_t enb_mod_idP, #endif // DEBUG_MAC_INTERFACE if (MBMS_flagP) - AssertFatal (channel_idP < RLC_MAX_LC, "channel id is too high (%u/%d)!\n", channel_idP, RLC_MAX_LC); + AssertFatal (channel_idP < RLC_MAX_MBMS_LC, "channel id is too high (%u/%d)!\n", channel_idP, RLC_MAX_MBMS_LC); else AssertFatal (channel_idP < NB_RB_MAX, "channel id is too high (%u/%d)!\n", channel_idP, NB_RB_MAX); @@ -118,6 +123,8 @@ tbs_size_t mac_rlc_data_req (module_id_t enb_mod_idP, ue_mod_idP, oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local); } else { + AssertFatal (MBMS_flagP == MBMS_FLAG_NO ," MBMS FLAG SHOULD NOT BE SET IN mac_rlc_data_req in UE\n"); + 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, @@ -130,24 +137,32 @@ tbs_size_t mac_rlc_data_req (module_id_t enb_mod_idP, if (enb_flagP) { - rb_id = lcid2rbid_eNB[enb_mod_idP][ue_mod_idP][channel_idP]; - rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].mode; - switch (rlc_mode) { - case RLC_MODE_NONE: - AssertFatal (0 , "enB RLC not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, enb_mod_idP); - return (tbs_size_t)0; - break; - case RLC_MODE_AM: - rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.am; - break; - case RLC_MODE_UM: - rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.um; - break; - case RLC_MODE_TM: - rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.tm; - break; - default: - AssertFatal (0 , "enB RLC internal memory error rb id %u lcid %u module %u!\n", rb_id, channel_idP, enb_mod_idP); + if (MBMS_flagP) { + mbms_id_p = &rlc_mbms_lcid2service_session_id_eNB[enb_mod_idP][channel_idP]; + rb_id = rlc_mbms_array_eNB[enb_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].rb_id; + rlc_p = (void*)&rlc_mbms_array_eNB[enb_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].um; + AssertFatal (rlc_mbms_array_eNB[enb_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].um.allocation == TRUE , + "enB MBMS RLC UM not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, enb_mod_idP); + } else { + rb_id = lcid2rbid_eNB[enb_mod_idP][ue_mod_idP][channel_idP]; + rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].mode; + switch (rlc_mode) { + case RLC_MODE_NONE: + AssertFatal (0 , "enB RLC not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, enb_mod_idP); + return (tbs_size_t)0; + break; + case RLC_MODE_AM: + rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.am; + break; + case RLC_MODE_UM: + rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.um; + break; + case RLC_MODE_TM: + rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.tm; + break; + default: + AssertFatal (0 , "enB RLC internal memory error rb id %u lcid %u module %u!\n", rb_id, channel_idP, enb_mod_idP); + } } } else { rb_id = lcid2rbid_ue[ue_mod_idP][channel_idP]; @@ -195,20 +210,22 @@ tbs_size_t mac_rlc_data_req (module_id_t enb_mod_idP, return (tbs_size_t)0; } //----------------------------------------------------------------------------- -void mac_rlc_data_ind (module_id_t enb_mod_idP, - module_id_t ue_mod_idP, - frame_t frameP, - eNB_flag_t enb_flagP, - MBMS_flag_t MBMS_flagP, - logical_chan_id_t channel_idP, - char *buffer_pP, - tb_size_t tb_sizeP, - num_tb_t num_tbP, - crc_t *crcs_pP) { +void mac_rlc_data_ind ( + module_id_t enb_mod_idP, + module_id_t ue_mod_idP, + frame_t frameP, + eNB_flag_t enb_flagP, + MBMS_flag_t MBMS_flagP, + logical_chan_id_t channel_idP, + char *buffer_pP, + tb_size_t tb_sizeP, + num_tb_t num_tbP, + crc_t *crcs_pP) { //----------------------------------------------------------------------------- - rb_id_t rb_id = 0; - rlc_mode_t rlc_mode = RLC_MODE_NONE; + rb_id_t rb_id = 0; + rlc_mode_t rlc_mode = RLC_MODE_NONE; void *rlc_p = NULL; + rlc_mbms_id_t *mbms_id_p = NULL; #ifdef DEBUG_MAC_INTERFACE if (num_tbP) { LOG_D(RLC, "[Frame %5u][%s][RLC][MOD %u/%u] MAC_RLC_DATA_IND on channel %d (%d), rb max %d, Num_tb %d\n", @@ -224,9 +241,11 @@ void mac_rlc_data_ind (module_id_t enb_mod_idP, #endif // DEBUG_MAC_INTERFACE #ifdef OAI_EMU if (MBMS_flagP) - AssertFatal (channel_idP < RLC_MAX_LC, "channel id is too high (%u/%d)!\n", channel_idP, RLC_MAX_LC); + AssertFatal (channel_idP < RLC_MAX_MBMS_LC, "channel id is too high (%u/%d)!\n", + channel_idP, RLC_MAX_MBMS_LC); else - AssertFatal (channel_idP < NB_RB_MAX, "channel id is too high (%u/%d)!\n", channel_idP, NB_RB_MAX); + AssertFatal (channel_idP < NB_RB_MAX, "channel id is too high (%u/%d)!\n", + channel_idP, NB_RB_MAX); if (enb_flagP) { AssertFatal ((enb_mod_idP >= oai_emulation.info.first_enb_local) && (oai_emulation.info.nb_enb_local > 0), @@ -241,6 +260,7 @@ void mac_rlc_data_ind (module_id_t enb_mod_idP, "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 (MBMS_flagP == MBMS_FLAG_NO ," MBMS FLAG SHOULD NOT BE SET IN mac_rlc_data_ind in eNB\n"); } 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", @@ -273,24 +293,32 @@ void mac_rlc_data_ind (module_id_t enb_mod_idP, AssertFatal (0 , "enB RLC internal memory error rb id %u lcid %u module %u!\n", rb_id, channel_idP, enb_mod_idP); } } else { - rb_id = lcid2rbid_ue[ue_mod_idP][channel_idP]; - AssertFatal (rb_id < NB_RB_MAX, "UE RB id is too high (%u/%d) lcid %u enb module %u ue module id %u!\n", rb_id, NB_RB_MAX, channel_idP, enb_mod_idP, ue_mod_idP); - rlc_mode = rlc_array_ue[ue_mod_idP][rb_id].mode; - switch (rlc_mode) { - case RLC_MODE_NONE: - AssertFatal (0 , "UE RLC not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, ue_mod_idP); - break; - case RLC_MODE_AM: - rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.am; - break; - case RLC_MODE_UM: - rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.um; - break; - case RLC_MODE_TM: - rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.tm; - break; - default: - AssertFatal (0 , "UE RLC internal memory error rb id %u lcid %u module %u!\n", rb_id, channel_idP, ue_mod_idP); + if (MBMS_flagP) { + mbms_id_p = &rlc_mbms_lcid2service_session_id_ue[ue_mod_idP][channel_idP]; + rb_id = rlc_mbms_array_ue[ue_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].rb_id; + rlc_p = (void*)&rlc_mbms_array_ue[ue_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].um; + AssertFatal (rlc_mbms_array_ue[ue_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].um.allocation == TRUE , + "UE MBMS RLC UM not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, ue_mod_idP); + } else { + rb_id = lcid2rbid_ue[ue_mod_idP][channel_idP]; + AssertFatal (rb_id < NB_RB_MAX, "UE RB id is too high (%u/%d) lcid %u enb module %u ue module id %u!\n", rb_id, NB_RB_MAX, channel_idP, enb_mod_idP, ue_mod_idP); + rlc_mode = rlc_array_ue[ue_mod_idP][rb_id].mode; + switch (rlc_mode) { + case RLC_MODE_NONE: + AssertFatal (0 , "UE RLC not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, ue_mod_idP); + break; + case RLC_MODE_AM: + rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.am; + break; + case RLC_MODE_UM: + rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.um; + break; + case RLC_MODE_TM: + rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.tm; + break; + default: + AssertFatal (0 , "UE RLC internal memory error rb id %u lcid %u module %u!\n", rb_id, channel_idP, ue_mod_idP); + } } } struct mac_data_ind data_ind = mac_rlc_deserialize_tb(buffer_pP, tb_sizeP, num_tbP, crcs_pP); @@ -322,23 +350,43 @@ void mac_rlc_data_ind (module_id_t enb_mod_idP, } } //----------------------------------------------------------------------------- -mac_rlc_status_resp_t mac_rlc_status_ind (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t enb_flagP, MBMS_flag_t MBMS_flagP, logical_chan_id_t channel_idP, tb_size_t tb_sizeP) { +mac_rlc_status_resp_t mac_rlc_status_ind( + module_id_t enb_mod_idP, + module_id_t ue_mod_idP, + frame_t frameP, + eNB_flag_t enb_flagP, + MBMS_flag_t MBMS_flagP, + logical_chan_id_t channel_idP, + tb_size_t tb_sizeP) { //----------------------------------------------------------------------------- mac_rlc_status_resp_t mac_rlc_status_resp; struct mac_status_ind tx_status; struct mac_status_resp status_resp; - rb_id_t rb_id = 0; - rlc_mode_t rlc_mode = RLC_MODE_NONE; + rb_id_t rb_id = 0; + rlc_mode_t rlc_mode = RLC_MODE_NONE; void *rlc_p = NULL; + rlc_mbms_id_t *mbms_id_p = NULL; memset (&mac_rlc_status_resp, 0, sizeof(mac_rlc_status_resp_t)); memset (&tx_status , 0, sizeof(struct mac_status_ind)); #ifdef OAI_EMU if (MBMS_flagP) - AssertFatal (channel_idP < RLC_MAX_LC, "%s channel id is too high (%u/%d) enb module id %u ue module id %u!\n",(enb_flagP) ? "eNB" : "UE", channel_idP, RLC_MAX_LC, enb_mod_idP, ue_mod_idP); + AssertFatal (channel_idP < RLC_MAX_MBMS_LC, + "%s channel id is too high (%u/%d) enb module id %u ue module id %u!\n", + (enb_flagP) ? "eNB" : "UE", + channel_idP, + RLC_MAX_MBMS_LC, + enb_mod_idP, + ue_mod_idP); else - AssertFatal (channel_idP < NB_RB_MAX, "%s channel id is too high (%u/%d) enb module id %u ue module id %u!\n",(enb_flagP) ? "eNB" : "UE", channel_idP, NB_RB_MAX, enb_mod_idP, ue_mod_idP); + AssertFatal (channel_idP < NB_RB_MAX, + "%s channel id is too high (%u/%d) enb module id %u ue module id %u!\n", + (enb_flagP) ? "eNB" : "UE", + channel_idP, + NB_RB_MAX, + enb_mod_idP, + ue_mod_idP); if (enb_flagP) { AssertFatal ((enb_mod_idP >= oai_emulation.info.first_enb_local) && (oai_emulation.info.nb_enb_local > 0), @@ -367,62 +415,78 @@ mac_rlc_status_resp_t mac_rlc_status_ind (module_id_t enb_mod_idP, module_id if (enb_flagP) { - rb_id = lcid2rbid_eNB[enb_mod_idP][ue_mod_idP][channel_idP]; - if (rb_id >= NB_RB_MAX) { - /*LOG_D(RLC, "[FRAME %05d][%s][RLC][MOD %u/%u] MAC STATUS IND TO NOT CONFIGURED BEARER lc id %u \n", + if (MBMS_flagP) { + mbms_id_p = &rlc_mbms_lcid2service_session_id_eNB[enb_mod_idP][channel_idP]; + rb_id = rlc_mbms_array_eNB[enb_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].rb_id; + rlc_p = (void*)&rlc_mbms_array_eNB[enb_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].um; + AssertFatal (rlc_mbms_array_eNB[enb_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].um.allocation == TRUE , + "enB MBMS RLC UM not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, enb_mod_idP); + } else { + rb_id = lcid2rbid_eNB[enb_mod_idP][ue_mod_idP][channel_idP]; + if (rb_id >= NB_RB_MAX) { + /*LOG_D(RLC, "[FRAME %05d][%s][RLC][MOD %u/%u] MAC STATUS IND TO NOT CONFIGURED BEARER lc id %u \n", frameP, (enb_flagP) ? "eNB" : "UE", enb_mod_idP, ue_mod_idP, channel_idP);*/ - return mac_rlc_status_resp; - } - rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].mode; - switch (rlc_mode) { - case RLC_MODE_NONE: - //LOG_E (RLC, "enB RLC not configured rb id %u lcid %u enb id %u ue id %u!\n", rb_id, channel_idP, enb_mod_idP, ue_mod_idP); - return mac_rlc_status_resp; - break; - case RLC_MODE_AM: - rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.am; - break; - case RLC_MODE_UM: - rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.um; - break; - case RLC_MODE_TM: - rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.tm; - break; - default: - AssertFatal (0 , "enB RLC internal memory error rb id %u lcid %u enb id %u ue id %u!\n", rb_id, channel_idP, enb_mod_idP, ue_mod_idP); + return mac_rlc_status_resp; + } + rlc_mode = rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].mode; + switch (rlc_mode) { + case RLC_MODE_NONE: + //LOG_E (RLC, "enB RLC not configured rb id %u lcid %u enb id %u ue id %u!\n", rb_id, channel_idP, enb_mod_idP, ue_mod_idP); + return mac_rlc_status_resp; + break; + case RLC_MODE_AM: + rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.am; + break; + case RLC_MODE_UM: + rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.um; + break; + case RLC_MODE_TM: + rlc_p = (void*)&rlc_array_eNB[enb_mod_idP][ue_mod_idP][rb_id].rlc.tm; + break; + default: + AssertFatal (0 , "enB RLC internal memory error rb id %u lcid %u enb id %u ue id %u!\n", rb_id, channel_idP, enb_mod_idP, ue_mod_idP); + } } } else { - rb_id = lcid2rbid_ue[ue_mod_idP][channel_idP]; - if (rb_id >= NB_RB_MAX) { - /*LOG_D(RLC, "[FRAME %05d][%s][RLC][MOD %u/%u] MAC STATUS IND TO NOT CONFIGURED BEARER lc id %u \n", + if (MBMS_flagP) { + mbms_id_p = &rlc_mbms_lcid2service_session_id_ue[ue_mod_idP][channel_idP]; + rb_id = rlc_mbms_array_ue[ue_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].rb_id; + rlc_p = (void*)&rlc_mbms_array_ue[ue_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].um; + AssertFatal (rlc_mbms_array_ue[ue_mod_idP][mbms_id_p->service_id][mbms_id_p->session_id].um.allocation == TRUE , + "UE MBMS RLC UM not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, ue_mod_idP); + } else { + rb_id = lcid2rbid_ue[ue_mod_idP][channel_idP]; + if (rb_id >= NB_RB_MAX) { + /*LOG_D(RLC, "[FRAME %05d][%s][RLC][MOD %u/%u] MAC STATUS IND TO NOT CONFIGURED BEARER lc id %u \n", frameP, (enb_flagP) ? "eNB" : "UE", enb_mod_idP, ue_mod_idP, channel_idP);*/ - return mac_rlc_status_resp; - } - rlc_mode = rlc_array_ue[ue_mod_idP][rb_id].mode; - switch (rlc_mode) { - case RLC_MODE_NONE: - AssertFatal (0 , "UE RLC not configured rb id %u lcid %u enb id %u ue id %u!\n", rb_id, channel_idP, enb_mod_idP, ue_mod_idP); - return mac_rlc_status_resp; - break; - case RLC_MODE_AM: - rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.am; - break; - case RLC_MODE_UM: - rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.um; - break; - case RLC_MODE_TM: - rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.tm; - break; - default: - AssertFatal (0 , "UE RLC internal memory error rb id %u lcid %u enb id %u ue id %u!\n", rb_id, channel_idP, enb_mod_idP, ue_mod_idP); + return mac_rlc_status_resp; + } + rlc_mode = rlc_array_ue[ue_mod_idP][rb_id].mode; + switch (rlc_mode) { + case RLC_MODE_NONE: + AssertFatal (0 , "UE RLC not configured rb id %u lcid %u enb id %u ue id %u!\n", rb_id, channel_idP, enb_mod_idP, ue_mod_idP); + return mac_rlc_status_resp; + break; + case RLC_MODE_AM: + rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.am; + break; + case RLC_MODE_UM: + rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.um; + break; + case RLC_MODE_TM: + rlc_p = (void*)&rlc_array_ue[ue_mod_idP][rb_id].rlc.tm; + break; + default: + AssertFatal (0 , "UE RLC internal memory error rb id %u lcid %u enb id %u ue id %u!\n", rb_id, channel_idP, enb_mod_idP, ue_mod_idP); + } } } diff --git a/openair2/LAYER2/RLC/rlc_rrc.c b/openair2/LAYER2/RLC/rlc_rrc.c index dd7594f7478..6224e6aa0d4 100644 --- a/openair2/LAYER2/RLC/rlc_rrc.c +++ b/openair2/LAYER2/RLC/rlc_rrc.c @@ -393,38 +393,34 @@ rlc_op_status_t rrc_rlc_config_asn1_req (module_id_t enb_mod_idP, } } if (drb2release_listP != NULL) { - for (cnt=0;cnt<drb2release_listP->list.count;cnt++) { - pdrb_id = drb2release_listP->list.array[cnt]; - rrc_rlc_remove_rlc(enb_mod_idP, ue_mod_idP, frameP, enb_flagP, *pdrb_id); - } + for (cnt=0;cnt<drb2release_listP->list.count;cnt++) { + pdrb_id = drb2release_listP->list.array[cnt]; + rrc_rlc_remove_rlc(enb_mod_idP, ue_mod_idP, frameP, enb_flagP, *pdrb_id); + } } #if defined(Rel10) if (pmch_InfoList_r9_pP != NULL) { for (i=0;i<pmch_InfoList_r9_pP->list.count;i++) { +#warning TO DO REMOVE MBMS RLC mbms_SessionInfoList_r9_p = &(pmch_InfoList_r9_pP->list.array[i]->mbms_SessionInfoList_r9); for (j=0;j<mbms_SessionInfoList_r9_p->list.count;j++) { MBMS_SessionInfo_p = mbms_SessionInfoList_r9_p->list.array[j]; - mbms_session_id = MBMS_SessionInfo_p->sessionId_r9->buf[0]; - lc_id = mbms_session_id; - mbms_service_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string - mch_id = mbms_service_id; + mbms_session_id = MBMS_SessionInfo_p->sessionId_r9->buf[0]; + lc_id = mbms_session_id; + mbms_service_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string + mch_id = mbms_service_id; // can set the mch_id = i if (enb_flagP) { rb_id = (mbms_service_id * maxSessionPerPMCH ) + mbms_session_id; // 1 - // NO CHECK - /*if (rlc_mbms_array_eNB[enb_mod_idP][mbms_service_id][mbms_session_id].instanciated_instance == enb_mod_idP + 1) - action = CONFIG_ACTION_MBMS_MODIFY; - else - action = CONFIG_ACTION_MBMS_ADD;*/ + rlc_mbms_lcid2service_session_id_eNB[enb_mod_idP][lc_id].service_id = mbms_service_id; + rlc_mbms_lcid2service_session_id_eNB[enb_mod_idP][lc_id].session_id = mbms_session_id; } else { rb_id = (mbms_service_id * maxSessionPerPMCH ) + mbms_session_id + (maxDRB + 3); // 15 - /*if (rlc_mbms_array_ue[ue_mod_idP][mbms_service_id][mbms_session_id].instanciated_instance == ue_mod_idP + 1) - action = CONFIG_ACTION_MBMS_MODIFY; - else - action = CONFIG_ACTION_MBMS_ADD;*/ + rlc_mbms_lcid2service_session_id_eNB[ue_mod_idP][lc_id].service_id = mbms_service_id; + rlc_mbms_lcid2service_session_id_eNB[ue_mod_idP][lc_id].session_id = mbms_session_id; } dl_um_rlc.sn_FieldLength = SN_FieldLength_size5; dl_um_rlc.t_Reordering = T_Reordering_ms0; @@ -869,14 +865,13 @@ rlc_op_status_t rrc_rlc_config_req (module_id_t enb_mod_idP, module_id_t ue_mo } #endif AssertFatal (rb_idP < NB_RB_MAX, "RB id is too high (%u/%d)!\n", rb_idP, NB_RB_MAX); -#warning TO DO rrc_rlc_config_req - switch (actionP) { case CONFIG_ACTION_ADD: if ((status = rrc_rlc_add_rlc(enb_mod_idP, ue_mod_idP, frameP, enb_flagP, rb_idP, rb_idP, rlc_infoP.rlc_mode)) != RLC_OP_STATUS_OK) { return status; } + // no break, fall to next case case CONFIG_ACTION_MODIFY: switch (rlc_infoP.rlc_mode) { case RLC_MODE_AM: diff --git a/openair2/NAS/DRIVER/LITE/common.c b/openair2/NAS/DRIVER/LITE/common.c index a79aef09ece..17538d49d5c 100755 --- a/openair2/NAS/DRIVER/LITE/common.c +++ b/openair2/NAS/DRIVER/LITE/common.c @@ -68,8 +68,8 @@ ntohs((addr)->s6_addr16[7]) -#define OAI_DRV_DEBUG_SEND -#define OAI_DRV_DEBUG_RECEIVE +//#define OAI_DRV_DEBUG_SEND +//#define OAI_DRV_DEBUG_RECEIVE void oai_nw_drv_common_class_wireless2ip(uint16_t dlen, void *pdcp_sdu, int inst, -- GitLab