Commit 6098e513 authored by Navid Nikaein's avatar Navid Nikaein

* route DlInformationTransfer to SRB2 if it is active

* configure dedicated DRBs based on the transaction id
* fix the issue in oaisim to work with S1 interface
parent 3b0b3bb7
#!/bin/sh #!/bin/sh
echo "building ctags for openair1 and openair2 ..." echo "building ctags for openair1 and openair2 ..."
ctags -e -R --exclude=openair1/DOCS/ --exclude=openair2/DOCS/ --exclude=openair2/RRC/CELLULAR/ --exclude=openair2/NAS/DRIVER/CELLULAR/ --exclude=openair2/SIMULATION/ --exclude=targets/DOCS/ --exclude=targets/PROJECTS/ openair1 openair2 targets ctags -e -R --exclude=openair1/DOCS/ --exclude=openair2/DOCS/ --exclude=openair2/RRC/CELLULAR/ --exclude=openair2/NAS/DRIVER/CELLULAR/ --exclude=openair2/SIMULATION/ --exclude=targets/DOCS/ --exclude=targets/PROJECTS/ openair1 openair2 openair3 targets cmake_targets common
...@@ -1093,7 +1093,7 @@ rrc_pdcp_config_asn1_req ( ...@@ -1093,7 +1093,7 @@ rrc_pdcp_config_asn1_req (
srb_id = srb2add_list_pP->list.array[cnt]->srb_Identity; srb_id = srb2add_list_pP->list.array[cnt]->srb_Identity;
srb_toaddmod_p = srb2add_list_pP->list.array[cnt]; srb_toaddmod_p = srb2add_list_pP->list.array[cnt];
rlc_type = RLC_MODE_AM; rlc_type = RLC_MODE_AM;
lc_id = srb_id + 2; lc_id = srb_id;// + 2;
key = PDCP_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, srb_id, SRB_FLAG_YES); key = PDCP_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, srb_id, SRB_FLAG_YES);
h_rc = hashtable_get(pdcp_coll_p, key, (void**)&pdcp_p); h_rc = hashtable_get(pdcp_coll_p, key, (void**)&pdcp_p);
...@@ -1429,13 +1429,14 @@ pdcp_config_req_asn1 ( ...@@ -1429,13 +1429,14 @@ pdcp_config_req_asn1 (
pdcp_pP->first_missing_pdu = -1; pdcp_pP->first_missing_pdu = -1;
pdcp_pP->rx_hfn_offset = 0; pdcp_pP->rx_hfn_offset = 0;
LOG_I(PDCP, PROTOCOL_PDCP_CTXT_FMT" Action ADD LCID %d (rb id %d) " LOG_N(PDCP, PROTOCOL_PDCP_CTXT_FMT" Action ADD LCID %d (%s id %d) "
"configured with SN size %d bits and RLC %s\n", "configured with SN size %d bits and RLC %s\n",
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP,pdcp_pP), PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP,pdcp_pP),
lc_idP, lc_idP,
(srb_flagP == SRB_FLAG_YES) ? "SRB" : "DRB",
rb_idP, rb_idP,
pdcp_pP->seq_num_size, pdcp_pP->seq_num_size,
(rlc_modeP == RLC_MODE_AM ) ? "AM" : (rlc_modeP == RLC_MODE_TM) ? "TM" : "UM"); (rlc_modeP == RLC_MODE_AM ) ? "AM" : (rlc_modeP == RLC_MODE_TM) ? "TM" : "UM");
/* Setup security */ /* Setup security */
if (security_modeP != 0xff) { if (security_modeP != 0xff) {
pdcp_config_set_security( pdcp_config_set_security(
...@@ -1477,7 +1478,7 @@ pdcp_config_req_asn1 ( ...@@ -1477,7 +1478,7 @@ pdcp_config_req_asn1 (
pdcp_pP->seq_num_size=5; pdcp_pP->seq_num_size=5;
} }
LOG_I(PDCP,PROTOCOL_PDCP_CTXT_FMT" Action MODIFY LCID %d " LOG_N(PDCP,PROTOCOL_PDCP_CTXT_FMT" Action MODIFY LCID %d "
"RB id %d reconfigured with SN size %d and RLC %s \n", "RB id %d reconfigured with SN size %d and RLC %s \n",
PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP,pdcp_pP), PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP,pdcp_pP),
lc_idP, lc_idP,
......
...@@ -597,8 +597,8 @@ rrc_data_ind( ...@@ -597,8 +597,8 @@ rrc_data_ind(
rb_id_t DCCH_index = Srb_id; rb_id_t DCCH_index = Srb_id;
if (ctxt_pP->enb_flag == ENB_FLAG_NO) { if (ctxt_pP->enb_flag == ENB_FLAG_NO) {
LOG_N(RRC, "[UE %x] Frame %d: received a DCCH %d message on SRB %d with Size %d from eNB ???\n", LOG_N(RRC, "[UE %x] Frame %d: received a DCCH %d message on SRB %d with Size %d from eNB %d\n",
ctxt_pP->module_id, ctxt_pP->frame, DCCH_index,Srb_id-1,sdu_sizeP); ctxt_pP->module_id, ctxt_pP->frame, DCCH_index,Srb_id-1,sdu_sizeP, ctxt_pP->eNB_index);
} else { } else {
LOG_N(RRC, "[eNB %d] Frame %d: received a DCCH %d message on SRB %d with Size %d from UE %x\n", LOG_N(RRC, "[eNB %d] Frame %d: received a DCCH %d message on SRB %d with Size %d from UE %x\n",
ctxt_pP->module_id, ctxt_pP->module_id,
...@@ -656,7 +656,7 @@ void rrc_in_sync_ind(module_id_t Mod_idP, frame_t frameP, uint16_t eNB_index) ...@@ -656,7 +656,7 @@ void rrc_in_sync_ind(module_id_t Mod_idP, frame_t frameP, uint16_t eNB_index)
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
{ {
MessageDef *message_p; MessageDef *message_p;
//LOG_I(RRC,"sending a message to task_mac_ue\n");
message_p = itti_alloc_new_message (TASK_MAC_UE, RRC_MAC_IN_SYNC_IND); message_p = itti_alloc_new_message (TASK_MAC_UE, RRC_MAC_IN_SYNC_IND);
RRC_MAC_IN_SYNC_IND (message_p).frame = frameP; RRC_MAC_IN_SYNC_IND (message_p).frame = frameP;
RRC_MAC_IN_SYNC_IND (message_p).enb_index = eNB_index; RRC_MAC_IN_SYNC_IND (message_p).enb_index = eNB_index;
......
...@@ -187,6 +187,9 @@ typedef enum HO_STATE_e { ...@@ -187,6 +187,9 @@ typedef enum HO_STATE_e {
#define CBA_OFFSET 0xfff4 #define CBA_OFFSET 0xfff4
// #define NUM_MAX_CBA_GROUP 4 // in the platform_constants // #define NUM_MAX_CBA_GROUP 4 // in the platform_constants
/* TS 36.331: RRC-TransactionIdentifier ::= INTEGER (0..3) */
#define RRC_TRANSACTION_IDENTIFIER_NUMBER 3
typedef struct UE_RRC_INFO_s { typedef struct UE_RRC_INFO_s {
UE_STATE_t State; UE_STATE_t State;
uint8_t SIB1systemInfoValueTag; uint8_t SIB1systemInfoValueTag;
...@@ -283,7 +286,7 @@ typedef struct SRB_INFO_TABLE_ENTRY_s { ...@@ -283,7 +286,7 @@ typedef struct SRB_INFO_TABLE_ENTRY_s {
SRB_INFO Srb_info; SRB_INFO Srb_info;
uint8_t Active; uint8_t Active;
uint8_t Status; uint8_t Status;
uint32_t Next_check_frame; uint32_t Next_check_frame;
} SRB_INFO_TABLE_ENTRY; } SRB_INFO_TABLE_ENTRY;
typedef struct MEAS_REPORT_LIST_s { typedef struct MEAS_REPORT_LIST_s {
...@@ -303,8 +306,9 @@ typedef struct eNB_RRC_UE_s { ...@@ -303,8 +306,9 @@ typedef struct eNB_RRC_UE_s {
SCellToAddMod_r10_t sCell_config[2]; SCellToAddMod_r10_t sCell_config[2];
#endif #endif
SRB_ToAddModList_t* SRB_configList; SRB_ToAddModList_t* SRB_configList;
SRB_ToAddModList_t* SRB_configList2[RRC_TRANSACTION_IDENTIFIER_NUMBER];
DRB_ToAddModList_t* DRB_configList; DRB_ToAddModList_t* DRB_configList;
DRB_ToAddModList_t* DRB_configList2[8]; DRB_ToAddModList_t* DRB_configList2[RRC_TRANSACTION_IDENTIFIER_NUMBER];
uint8_t DRB_active[8]; uint8_t DRB_active[8];
struct PhysicalConfigDedicated* physicalConfigDedicated; struct PhysicalConfigDedicated* physicalConfigDedicated;
struct SPS_Config* sps_Config; struct SPS_Config* sps_Config;
...@@ -412,10 +416,10 @@ typedef struct { ...@@ -412,10 +416,10 @@ typedef struct {
#endif #endif
SRB_INFO SI; SRB_INFO SI;
SRB_INFO Srb0; SRB_INFO Srb0;
} rcc_eNB_carrier_data_t; } rrc_eNB_carrier_data_t;
typedef struct eNB_RRC_INST_s { typedef struct eNB_RRC_INST_s {
rcc_eNB_carrier_data_t carrier[MAX_NUM_CCs]; rrc_eNB_carrier_data_t carrier[MAX_NUM_CCs];
uid_allocator_t uid_allocator; // for rrc_ue_head uid_allocator_t uid_allocator; // for rrc_ue_head
RB_HEAD(rrc_ue_tree_s, rrc_eNB_ue_context_s) rrc_ue_head; // ue_context tree key search by rnti RB_HEAD(rrc_ue_tree_s, rrc_eNB_ue_context_s) rrc_ue_head; // ue_context tree key search by rnti
uint8_t HO_flag; uint8_t HO_flag;
......
...@@ -228,19 +228,21 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject( ...@@ -228,19 +228,21 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject(
void void
rrc_eNB_process_RRCConnectionSetupComplete( rrc_eNB_process_RRCConnectionSetupComplete(
const protocol_ctxt_t* const ctxt_pP, const protocol_ctxt_t* const ctxt_pP,
rrc_eNB_ue_context_t* const ue_context_pP, rrc_eNB_ue_context_t* ue_context_pP,
RRCConnectionSetupComplete_r8_IEs_t* rrcConnectionSetupComplete RRCConnectionSetupComplete_r8_IEs_t* rrcConnectionSetupComplete
); );
/**\brief Process the RRCConnectionReconfigurationComplete based on information coming from UE /**\brief Process the RRCConnectionReconfigurationComplete based on information coming from UE
\param ctxt_pP Running context \param ctxt_pP Running context
\param ue_context_pP RRC UE context \param ue_context_pP RRC UE context
\param rrcConnectionReconfigurationComplete Pointer to RRCConnectionReconfigurationComplete message*/ \param rrcConnectionReconfigurationComplete Pointer to RRCConnectionReconfigurationComplete message
\param xid the transaction id for the rrcconnectionreconfiguration procedure
*/
void void
rrc_eNB_process_RRCConnectionReconfigurationComplete( rrc_eNB_process_RRCConnectionReconfigurationComplete(
const protocol_ctxt_t* const ctxt_pP, const protocol_ctxt_t* const ctxt_pP,
rrc_eNB_ue_context_t* const ue_context_pP, rrc_eNB_ue_context_t* ue_context_pP,
RRCConnectionReconfigurationComplete_r8_IEs_t* rrcConnectionReconfigurationComplete const uint8_t xid
); );
/**\brief Generate the RRCConnectionRelease /**\brief Generate the RRCConnectionRelease
......
...@@ -112,9 +112,6 @@ extern void* bigphys_malloc(int); ...@@ -112,9 +112,6 @@ extern void* bigphys_malloc(int);
extern uint16_t two_tier_hexagonal_cellIds[7]; extern uint16_t two_tier_hexagonal_cellIds[7];
/* TS 36.331: RRC-TransactionIdentifier ::= INTEGER (0..3) */
static const uint8_t RRC_TRANSACTION_IDENTIFIER_NUMBER = 3;
mui_t rrc_eNB_mui = 0; mui_t rrc_eNB_mui = 0;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -850,15 +847,17 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s* ...@@ -850,15 +847,17 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s*
void void
rrc_eNB_process_RRCConnectionSetupComplete( rrc_eNB_process_RRCConnectionSetupComplete(
const protocol_ctxt_t* const ctxt_pP, const protocol_ctxt_t* const ctxt_pP,
rrc_eNB_ue_context_t* const ue_context_pP, rrc_eNB_ue_context_t* ue_context_pP,
RRCConnectionSetupComplete_r8_IEs_t * rrcConnectionSetupComplete RRCConnectionSetupComplete_r8_IEs_t * rrcConnectionSetupComplete
) )
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
{ {
LOG_I(RRC, LOG_I(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel UL-DCCH, " "processing RRCConnectionSetupComplete from UE\n", PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel UL-DCCH, " "processing RRCConnectionSetupComplete from UE (SRB1 Active)\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
ue_context_pP->ue_context.Srb1.Active=1;
#if defined(ENABLE_USE_MME) #if defined(ENABLE_USE_MME)
if (EPC_MODE_ENABLED == 1) { if (EPC_MODE_ENABLED == 1) {
...@@ -1154,20 +1153,22 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* co ...@@ -1154,20 +1153,22 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* co
*DRB_ul_SpecificParameters = NULL; *DRB_ul_SpecificParameters = NULL;
// DRB_ToAddModList_t** DRB_configList=&ue_context_pP->ue_context.DRB_configList; // DRB_ToAddModList_t** DRB_configList=&ue_context_pP->ue_context.DRB_configList;
DRB_ToAddModList_t* DRB_configList=ue_context_pP->ue_context.DRB_configList; DRB_ToAddModList_t* DRB_configList=ue_context_pP->ue_context.DRB_configList;
DRB_ToAddModList_t* DRB_configList2=NULL; DRB_ToAddModList_t** DRB_configList2=NULL;
//DRB_ToAddModList_t** RRC_DRB_configList=&ue_context_pP->ue_context.DRB_configList; //DRB_ToAddModList_t** RRC_DRB_configList=&ue_context_pP->ue_context.DRB_configList;
struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList = NULL; struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList = NULL;
DedicatedInfoNAS_t *dedicatedInfoNas = NULL; DedicatedInfoNAS_t *dedicatedInfoNas = NULL;
long *logicalchannelgroup, *logicalchannelgroup_drb; long *logicalchannelgroup, *logicalchannelgroup_drb;
int drb_identity_index=0, nas_sequence_flag = 0; int drb_identity_index=0;//, nas_sequence_flag = 0;
uint8_t xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); //Transaction_id, uint8_t xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); //Transaction_id,
DRB_configList2=&ue_context_pP->ue_context.DRB_configList2[xid];
// Configure DRB if (*DRB_configList2) {
free(*DRB_configList2);
}
//*DRB_configList = CALLOC(1, sizeof(*DRB_configList)); //*DRB_configList = CALLOC(1, sizeof(*DRB_configList));
DRB_configList2 = CALLOC(1, sizeof(*DRB_configList2)); *DRB_configList2 = CALLOC(1, sizeof(**DRB_configList2));
dedicatedInfoNASList = CALLOC(1, sizeof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList)); dedicatedInfoNASList = CALLOC(1, sizeof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList));
int e_rab_done=0; int e_rab_done=0;
...@@ -1262,7 +1263,7 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* co ...@@ -1262,7 +1263,7 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* co
DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb; DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb;
ASN_SEQUENCE_ADD(&DRB_configList->list, DRB_config); ASN_SEQUENCE_ADD(&DRB_configList->list, DRB_config);
ASN_SEQUENCE_ADD(&DRB_configList2->list, DRB_config); ASN_SEQUENCE_ADD(&(*DRB_configList2)->list, DRB_config);
//ue_context_pP->ue_context.DRB_configList2[drb_identity_index] = &(*DRB_configList); //ue_context_pP->ue_context.DRB_configList2[drb_identity_index] = &(*DRB_configList);
LOG_I(RRC,"EPS ID %d, DRB ID %d (index %d), QCI %d, priority %d, LCID %d LCGID %d \n", LOG_I(RRC,"EPS ID %d, DRB ID %d (index %d), QCI %d, priority %d, LCID %d LCGID %d \n",
...@@ -1312,7 +1313,7 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* co ...@@ -1312,7 +1313,7 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* co
buffer, buffer,
xid, xid,
(SRB_ToAddModList_t*)NULL, (SRB_ToAddModList_t*)NULL,
(DRB_ToAddModList_t*)DRB_configList2, (DRB_ToAddModList_t*)*DRB_configList2,
(DRB_ToReleaseList_t*)NULL, // DRB2_list, (DRB_ToReleaseList_t*)NULL, // DRB2_list,
(struct SPS_Config*)NULL, // *sps_Config, (struct SPS_Config*)NULL, // *sps_Config,
NULL, NULL, NULL, NULL,NULL, NULL, NULL, NULL, NULL,NULL,
...@@ -1387,7 +1388,7 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons ...@@ -1387,7 +1388,7 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
uint16_t size; uint16_t size;
int i; int i;
// configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE // configure SRB1/SRB2, PhysicalConfiDedgicated, MAC_MainConfig for UE
//eNB_RRC_INST* rrc_inst = &eNB_rrc_inst[ctxt_pP->module_id]; //eNB_RRC_INST* rrc_inst = &eNB_rrc_inst[ctxt_pP->module_id];
//struct PhysicalConfigDedicated** physicalConfigDedicated = &ue_context_pP->ue_context.physicalConfigDedicated; //struct PhysicalConfigDedicated** physicalConfigDedicated = &ue_context_pP->ue_context.physicalConfigDedicated;
...@@ -1397,7 +1398,7 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons ...@@ -1397,7 +1398,7 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
struct LogicalChannelConfig__ul_SpecificParameters struct LogicalChannelConfig__ul_SpecificParameters
*SRB2_ul_SpecificParameters = NULL; *SRB2_ul_SpecificParameters = NULL;
SRB_ToAddModList_t* SRB_configList = ue_context_pP->ue_context.SRB_configList; SRB_ToAddModList_t* SRB_configList = ue_context_pP->ue_context.SRB_configList;
SRB_ToAddModList_t *SRB_configList2 = NULL; SRB_ToAddModList_t **SRB_configList2 = NULL;
struct DRB_ToAddMod *DRB_config = NULL; struct DRB_ToAddMod *DRB_config = NULL;
struct RLC_Config *DRB_rlc_config = NULL; struct RLC_Config *DRB_rlc_config = NULL;
...@@ -1408,8 +1409,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons ...@@ -1408,8 +1409,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
struct LogicalChannelConfig__ul_SpecificParameters struct LogicalChannelConfig__ul_SpecificParameters
*DRB_ul_SpecificParameters = NULL; *DRB_ul_SpecificParameters = NULL;
DRB_ToAddModList_t** DRB_configList = &ue_context_pP->ue_context.DRB_configList; DRB_ToAddModList_t** DRB_configList = &ue_context_pP->ue_context.DRB_configList;
DRB_ToAddModList_t** DRB_configList2 = NULL;
MAC_MainConfig_t *mac_MainConfig = NULL; MAC_MainConfig_t *mac_MainConfig = NULL;
MeasObjectToAddModList_t *MeasObj_list = NULL; MeasObjectToAddModList_t *MeasObj_list = NULL;
MeasObjectToAddMod_t *MeasObj = NULL; MeasObjectToAddMod_t *MeasObj = NULL;
ReportConfigToAddModList_t *ReportConfig_list = NULL; ReportConfigToAddModList_t *ReportConfig_list = NULL;
...@@ -1437,6 +1438,9 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons ...@@ -1437,6 +1438,9 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
(void)dedicatedInfoNas; (void)dedicatedInfoNas;
C_RNTI_t *cba_RNTI = NULL; C_RNTI_t *cba_RNTI = NULL;
uint8_t xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); //Transaction_id,
#ifdef CBA #ifdef CBA
//struct PUSCH_CBAConfigDedicated_vlola *pusch_CBAConfigDedicated_vlola; //struct PUSCH_CBAConfigDedicated_vlola *pusch_CBAConfigDedicated_vlola;
uint8_t *cba_RNTI_buf; uint8_t *cba_RNTI_buf;
...@@ -1464,9 +1468,13 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons ...@@ -1464,9 +1468,13 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
#endif #endif
// Configure SRB2 // Configure SRB2
/// SRB2 /// SRB2
SRB_configList2=&ue_context_pP->ue_context.SRB_configList2[xid];
if (*SRB_configList2) {
free(*SRB_configList2);
}
*SRB_configList2 = CALLOC(1, sizeof(**SRB_configList2));
memset(*SRB_configList2, 0, sizeof(**SRB_configList2));
SRB2_config = CALLOC(1, sizeof(*SRB2_config)); SRB2_config = CALLOC(1, sizeof(*SRB2_config));
SRB_configList2 = CALLOC(1, sizeof(*SRB_configList2));
memset(SRB_configList2, 0, sizeof(*SRB_configList2));
SRB2_config->srb_Identity = 2; SRB2_config->srb_Identity = 2;
SRB2_rlc_config = CALLOC(1, sizeof(*SRB2_rlc_config)); SRB2_rlc_config = CALLOC(1, sizeof(*SRB2_rlc_config));
...@@ -1504,14 +1512,26 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons ...@@ -1504,14 +1512,26 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
// this list has the configuration for SRB1 and SRB2 // this list has the configuration for SRB1 and SRB2
ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config); ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config);
// this list has only the configuration for SRB2 // this list has only the configuration for SRB2
ASN_SEQUENCE_ADD(&SRB_configList2->list, SRB2_config); ASN_SEQUENCE_ADD(&(*SRB_configList2)->list, SRB2_config);
// Configure DRB // Configure DRB
//*DRB_configList = CALLOC(1, sizeof(*DRB_configList)); //*DRB_configList = CALLOC(1, sizeof(*DRB_configList));
// list for all the configured DRB
if (*DRB_configList) { if (*DRB_configList) {
free(*DRB_configList); free(*DRB_configList);
} }
*DRB_configList = CALLOC(1, sizeof(**DRB_configList)); *DRB_configList = CALLOC(1, sizeof(**DRB_configList));
memset(*DRB_configList, 0, sizeof(**DRB_configList));
// list for the configured DRB for a this xid
DRB_configList2=&ue_context_pP->ue_context.DRB_configList2[xid];
if (*DRB_configList2) {
free(*DRB_configList2);
}
*DRB_configList2 = CALLOC(1, sizeof(**DRB_configList2));
memset(*DRB_configList2, 0, sizeof(**DRB_configList2));
/// DRB /// DRB
DRB_config = CALLOC(1, sizeof(*DRB_config)); DRB_config = CALLOC(1, sizeof(*DRB_config));
...@@ -1583,6 +1603,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons ...@@ -1583,6 +1603,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb; DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb;
ASN_SEQUENCE_ADD(&(*DRB_configList)->list, DRB_config); ASN_SEQUENCE_ADD(&(*DRB_configList)->list, DRB_config);
ASN_SEQUENCE_ADD(&(*DRB_configList2)->list, DRB_config);
//ue_context_pP->ue_context.DRB_configList2[0] = &(*DRB_configList); //ue_context_pP->ue_context.DRB_configList2[0] = &(*DRB_configList);
mac_MainConfig = CALLOC(1, sizeof(*mac_MainConfig)); mac_MainConfig = CALLOC(1, sizeof(*mac_MainConfig));
...@@ -1873,7 +1895,7 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons ...@@ -1873,7 +1895,7 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
//rrc_inst->handover_info.as_config.sourceRadioResourceConfig.srb_ToAddModList = CALLOC(1,sizeof()); //rrc_inst->handover_info.as_config.sourceRadioResourceConfig.srb_ToAddModList = CALLOC(1,sizeof());
ue_context_pP->ue_context.handover_info = CALLOC(1, sizeof(*(ue_context_pP->ue_context.handover_info))); ue_context_pP->ue_context.handover_info = CALLOC(1, sizeof(*(ue_context_pP->ue_context.handover_info)));
//memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.srb_ToAddModList,(void *)SRB_list,sizeof(SRB_ToAddModList_t)); //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.srb_ToAddModList,(void *)SRB_list,sizeof(SRB_ToAddModList_t));
ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.srb_ToAddModList = SRB_configList2; ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.srb_ToAddModList = *SRB_configList2;
//memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.drb_ToAddModList,(void *)DRB_list,sizeof(DRB_ToAddModList_t)); //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.drb_ToAddModList,(void *)DRB_list,sizeof(DRB_ToAddModList_t));
ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.drb_ToAddModList = *DRB_configList; ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.drb_ToAddModList = *DRB_configList;
ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.drb_ToReleaseList = NULL; ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.drb_ToReleaseList = NULL;
...@@ -1930,8 +1952,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons ...@@ -1930,8 +1952,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
size = do_RRCConnectionReconfiguration(ctxt_pP, size = do_RRCConnectionReconfiguration(ctxt_pP,
buffer, buffer,
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), //Transaction_id, xid, //Transaction_id,
(SRB_ToAddModList_t*)SRB_configList, // SRB_configList (SRB_ToAddModList_t*)*SRB_configList2, // SRB_configList
(DRB_ToAddModList_t*)*DRB_configList, (DRB_ToAddModList_t*)*DRB_configList,
(DRB_ToReleaseList_t*)NULL, // DRB2_list, (DRB_ToReleaseList_t*)NULL, // DRB2_list,
(struct SPS_Config*)NULL, // *sps_Config, (struct SPS_Config*)NULL, // *sps_Config,
...@@ -3100,11 +3122,12 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover( ...@@ -3100,11 +3122,12 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
memcpy(&ue_context_pP->ue_context.Srb1.Srb_info.Lchan_desc[0], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); memcpy(&ue_context_pP->ue_context.Srb1.Srb_info.Lchan_desc[0], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE);
memcpy(&ue_context_pP->ue_context.Srb1.Srb_info.Lchan_desc[1], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); memcpy(&ue_context_pP->ue_context.Srb1.Srb_info.Lchan_desc[1], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE);
// SRB2 // SRB2
ue_context_pP->ue_context.Srb2.Active = 1; ue_context_pP->ue_context.Srb2.Active = 1;
ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = Idx; ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = Idx;
memcpy(&ue_context_pP->ue_context.Srb2.Srb_info.Lchan_desc[0], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); memcpy(&ue_context_pP->ue_context.Srb2.Srb_info.Lchan_desc[0], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE);
memcpy(&ue_context_pP->ue_context.Srb2.Srb_info.Lchan_desc[1], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); memcpy(&ue_context_pP->ue_context.Srb2.Srb_info.Lchan_desc[1], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE);
LOG_I(RRC, "[eNB %d] CALLING RLC CONFIG SRB1 (rbid %d) for UE %x\n", LOG_I(RRC, "[eNB %d] CALLING RLC CONFIG SRB1 (rbid %d) for UE %x\n",
ctxt_pP->module_id, Idx, ue_context_pP->ue_context.rnti); ctxt_pP->module_id, Idx, ue_context_pP->ue_context.rnti);
...@@ -3262,8 +3285,8 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover( ...@@ -3262,8 +3285,8 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
void void
rrc_eNB_process_RRCConnectionReconfigurationComplete( rrc_eNB_process_RRCConnectionReconfigurationComplete(
const protocol_ctxt_t* const ctxt_pP, const protocol_ctxt_t* const ctxt_pP,
rrc_eNB_ue_context_t* const ue_context_pP, rrc_eNB_ue_context_t* ue_context_pP,
RRCConnectionReconfigurationComplete_r8_IEs_t* rrcConnectionReconfigurationComplete const uint8_t xid
) )
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
{ {
...@@ -3282,8 +3305,8 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( ...@@ -3282,8 +3305,8 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
uint8_t *kRRCint = NULL; uint8_t *kRRCint = NULL;
uint8_t *kUPenc = NULL; uint8_t *kUPenc = NULL;
DRB_ToAddModList_t* DRB_configList = ue_context_pP->ue_context.DRB_configList; DRB_ToAddModList_t* DRB_configList = ue_context_pP->ue_context.DRB_configList2[xid];
//SRB_ToAddModList_t* SRB_configList = ue_context_pP->ue_context.SRB_configList; SRB_ToAddModList_t* SRB_configList = ue_context_pP->ue_context.SRB_configList2[xid];
#if defined(ENABLE_SECURITY) #if defined(ENABLE_SECURITY)
...@@ -3367,7 +3390,29 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( ...@@ -3367,7 +3390,29 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
, (PMCH_InfoList_r9_t *) NULL , (PMCH_InfoList_r9_t *) NULL
#endif #endif
); );
// set the SRB active in Ue context
if (SRB_configList != NULL) {
for (i = 0; (i < SRB_configList->list.count) && (i < 3); i++) {
if (SRB_configList->list.array[i]->srb_Identity == 1 ){
ue_context_pP->ue_context.Srb1.Active=1;
}
else if (SRB_configList->list.array[i]->srb_Identity == 2 ) {
ue_context_pP->ue_context.Srb2.Active=1;
ue_context_pP->ue_context.Srb2.Srb_info.Srb_id=2;
LOG_I(RRC,"[eNB %d] Frame %d CC %d : SRB2 is now active\n",
ctxt_pP->module_id,
ctxt_pP->frame,
ue_context_pP->ue_context.primaryCC_id);
} else {
LOG_W(RRC,"[eNB %d] Frame %d CC %d : invalide SRB identity %d\n",
ctxt_pP->module_id,
ctxt_pP->frame,
SRB_configList->list.array[i]->srb_Identity);
}
}
}
// Loop through DRBs and establish if necessary // Loop through DRBs and establish if necessary
if (DRB_configList != NULL) { if (DRB_configList != NULL) {
...@@ -4083,7 +4128,7 @@ rrc_eNB_decode_ccch( ...@@ -4083,7 +4128,7 @@ rrc_eNB_decode_ccch(
&DCCH_LCHAN_DESC, &DCCH_LCHAN_DESC,
LCHAN_DESC_SIZE); LCHAN_DESC_SIZE);
// SRB2 // SRB2: set it to go through SRB1 with id 1 (DCCH)
ue_context_p->ue_context.Srb2.Active = 1; ue_context_p->ue_context.Srb2.Active = 1;
ue_context_p->ue_context.Srb2.Srb_info.Srb_id = Idx; ue_context_p->ue_context.Srb2.Srb_info.Srb_id = Idx;
memcpy(&ue_context_p->ue_context.Srb2.Srb_info.Lchan_desc[0], memcpy(&ue_context_p->ue_context.Srb2.Srb_info.Lchan_desc[0],
...@@ -4092,7 +4137,7 @@ rrc_eNB_decode_ccch( ...@@ -4092,7 +4137,7 @@ rrc_eNB_decode_ccch(
memcpy(&ue_context_p->ue_context.Srb2.Srb_info.Lchan_desc[1], memcpy(&ue_context_p->ue_context.Srb2.Srb_info.Lchan_desc[1],
&DCCH_LCHAN_DESC, &DCCH_LCHAN_DESC,
LCHAN_DESC_SIZE); LCHAN_DESC_SIZE);
rrc_eNB_generate_RRCConnectionSetup(ctxt_pP, ue_context_p, CC_id); rrc_eNB_generate_RRCConnectionSetup(ctxt_pP, ue_context_p, CC_id);
LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT"CALLING RLC CONFIG SRB1 (rbid %d)\n", LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT"CALLING RLC CONFIG SRB1 (rbid %d)\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
...@@ -4172,8 +4217,11 @@ rrc_eNB_decode_dcch( ...@@ -4172,8 +4217,11 @@ rrc_eNB_decode_dcch(
LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Received message on SRB%d, should not have ...\n", LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Received message on SRB%d, should not have ...\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
Srb_id); Srb_id);
} else {
LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Received message on SRB%d\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
Srb_id);
} }
//memset(ul_dcch_msg,0,sizeof(UL_DCCH_Message_t)); //memset(ul_dcch_msg,0,sizeof(UL_DCCH_Message_t));
LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Decoding UL-DCCH Message\n", LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Decoding UL-DCCH Message\n",
...@@ -4288,25 +4336,23 @@ rrc_eNB_decode_dcch( ...@@ -4288,25 +4336,23 @@ rrc_eNB_decode_dcch(
if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.criticalExtensions. if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.criticalExtensions.
present == present ==
RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8) { RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8) {
rrc_eNB_process_RRCConnectionReconfigurationComplete(
ctxt_pP,
ue_context_p,
&ul_dcch_msg->message.choice.c1.choice.
rrcConnectionReconfigurationComplete.
criticalExtensions.choice.
rrcConnectionReconfigurationComplete_r8);
/*NN: revise the condition */ /*NN: revise the condition */
if (ue_context_p->ue_context.Status == RRC_RECONFIGURED){ if (ue_context_p->ue_context.Status == RRC_RECONFIGURED){
dedicated_DRB = 1; dedicated_DRB = 1;
LOG_I(RRC, LOG_I(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB)\n", PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %d)\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
}else { }else {
dedicated_DRB = 0;
ue_context_p->ue_context.Status = RRC_RECONFIGURED; ue_context_p->ue_context.Status = RRC_RECONFIGURED;
LOG_I(RRC, LOG_I(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB)\n", PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB, xid %d)\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
} }
rrc_eNB_process_RRCConnectionReconfigurationComplete(
ctxt_pP,
ue_context_p,
ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
} }
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
# if defined(ENABLE_USE_MME) # if defined(ENABLE_USE_MME)
......
...@@ -759,12 +759,15 @@ rrc_eNB_process_S1AP_DOWNLINK_NAS( ...@@ -759,12 +759,15 @@ rrc_eNB_process_S1AP_DOWNLINK_NAS(
uint32_t eNB_ue_s1ap_id; uint32_t eNB_ue_s1ap_id;
uint32_t length; uint32_t length;
uint8_t *buffer; uint8_t *buffer;
uint8_t srb_id;
struct rrc_eNB_ue_context_s* ue_context_p = NULL; struct rrc_eNB_ue_context_s* ue_context_p = NULL;
protocol_ctxt_t ctxt; protocol_ctxt_t ctxt;
ue_initial_id = S1AP_DOWNLINK_NAS (msg_p).ue_initial_id; ue_initial_id = S1AP_DOWNLINK_NAS (msg_p).ue_initial_id;
eNB_ue_s1ap_id = S1AP_DOWNLINK_NAS (msg_p).eNB_ue_s1ap_id; eNB_ue_s1ap_id = S1AP_DOWNLINK_NAS (msg_p).eNB_ue_s1ap_id;
ue_context_p = rrc_eNB_get_ue_context_from_s1ap_ids(instance, ue_initial_id, eNB_ue_s1ap_id); ue_context_p = rrc_eNB_get_ue_context_from_s1ap_ids(instance, ue_initial_id, eNB_ue_s1ap_id);
srb_id = ue_context_p->ue_context.Srb2.Srb_info.Srb_id;
LOG_I(RRC, "[eNB %d] Received %s: ue_initial_id %d, eNB_ue_s1ap_id %d\n", LOG_I(RRC, "[eNB %d] Received %s: ue_initial_id %d, eNB_ue_s1ap_id %d\n",
instance, instance,
msg_name, msg_name,
...@@ -845,10 +848,13 @@ rrc_eNB_process_S1AP_DOWNLINK_NAS( ...@@ -845,10 +848,13 @@ rrc_eNB_process_S1AP_DOWNLINK_NAS(
LOG_F(RRC,"\n"); LOG_F(RRC,"\n");
#endif #endif
/*
* switch UL or DL NAS message without RRC piggybacked to SRB2 if active.
*/
/* Transfer data to PDCP */ /* Transfer data to PDCP */
rrc_data_req ( rrc_data_req (
&ctxt, &ctxt,
DCCH, srb_id,
*rrc_eNB_mui++, *rrc_eNB_mui++,
SDU_CONFIRM_NO, SDU_CONFIRM_NO,
length, length,
......
...@@ -306,6 +306,11 @@ void ComputeOPc( u8 op_c_pP[16] ) ...@@ -306,6 +306,11 @@ void ComputeOPc( u8 op_c_pP[16] )
for (i=0; i<16; i++) for (i=0; i<16; i++)
op_c_pP[i] ^= OP[i]; op_c_pP[i] ^= OP[i];
LOG_TRACE(DEBUG,
"USIM-API - OPc[0..15]=%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
op_c_pP[0],op_c_pP[1],op_c_pP[2], op_c_pP[3], op_c_pP[4], op_c_pP[5], op_c_pP[6], op_c_pP[7],
op_c_pP[8],op_c_pP[9],op_c_pP[10],op_c_pP[11],op_c_pP[12],op_c_pP[13],op_c_pP[14],op_c_pP[15]);
return; return;
} /* end of function ComputeOPc */ } /* end of function ComputeOPc */
......
...@@ -51,6 +51,20 @@ ...@@ -51,6 +51,20 @@
int create_tasks(uint32_t enb_nb, uint32_t ue_nb) int create_tasks(uint32_t enb_nb, uint32_t ue_nb)
{ {
itti_wait_ready(1); itti_wait_ready(1);
if (itti_create_task (TASK_L2L1, l2l1_task, NULL) < 0) {
LOG_E(PDCP, "Create task for L2L1 failed\n");
return -1;
}
if (enb_nb > 0) {
/* Last task to create, others task must be ready before its start */
if (itti_create_task (TASK_ENB_APP, eNB_app_task, NULL) < 0) {
LOG_E(ENB_APP, "Create task for eNB APP failed\n");
return -1;
}
}
# ifdef OPENAIR2 # ifdef OPENAIR2
{ {
# if defined(ENABLE_USE_MME) # if defined(ENABLE_USE_MME)
...@@ -120,20 +134,8 @@ int create_tasks(uint32_t enb_nb, uint32_t ue_nb) ...@@ -120,20 +134,8 @@ int create_tasks(uint32_t enb_nb, uint32_t ue_nb)
# endif # endif
} }
} }
# endif # endif // openair2: NN: should be openair3
if (itti_create_task (TASK_L2L1, l2l1_task, NULL) < 0) {
LOG_E(PDCP, "Create task for L2L1 failed\n");
return -1;
}
if (enb_nb > 0) {
/* Last task to create, others task must be ready before its start */
if (itti_create_task (TASK_ENB_APP, eNB_app_task, NULL) < 0) {
LOG_E(ENB_APP, "Create task for eNB APP failed\n");
return -1;
}
}
itti_wait_ready(0); itti_wait_ready(0);
......
...@@ -605,6 +605,16 @@ l2l1_task (void *args_p) ...@@ -605,6 +605,16 @@ l2l1_task (void *args_p)
} }
#endif #endif
module_id_t enb_id;
module_id_t UE_id;
for (enb_id = 0; enb_id < NB_eNB_INST; enb_id++)
mac_xface->mrbch_phy_sync_failure (enb_id, 0, enb_id);
if (abstraction_flag == 1) {
for (UE_id = 0; UE_id < NB_UE_INST; UE_id++)
mac_xface->dl_phy_sync_success (UE_id, 0, 0,1); //UE_id%NB_eNB_INST);
}
start_meas (&oaisim_stats); start_meas (&oaisim_stats);
for (frame = 0; for (frame = 0;
......
...@@ -1057,14 +1057,6 @@ void init_openair2(void) ...@@ -1057,14 +1057,6 @@ void init_openair2(void)
oai_emulation.info.cba_group_active, oai_emulation.info.cba_group_active,
oai_emulation.info.handover_active); oai_emulation.info.handover_active);
for (enb_id = 0; enb_id < NB_eNB_INST; enb_id++)
mac_xface->mrbch_phy_sync_failure (enb_id, 0, enb_id);
if (abstraction_flag == 1) {
for (UE_id = 0; UE_id < NB_UE_INST; UE_id++)
mac_xface->dl_phy_sync_success (UE_id, 0, 0,1); //UE_id%NB_eNB_INST);
}
mac_xface->macphy_exit = exit_fun; mac_xface->macphy_exit = exit_fun;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment