From 8a11e8dd52e03e7491f5f1a6fd3a11b191898b46 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 21 Sep 2018 07:58:25 +0200 Subject: [PATCH 1/6] protection of RLC configuration in case of CU --- openair2/RRC/LTE/rrc_eNB.c | 487 ++++++++++++++++++++----------------- 1 file changed, 262 insertions(+), 225 deletions(-) diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index 4c54f75d29..c2dc1c761a 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -507,6 +507,8 @@ init_MCCH( int sync_area = 0; // initialize RRC_eNB_INST MCCH entry + eNB_RRC_INST *rrc = RC.rrc[enb_mod_idP]; + RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESSAGE = malloc(RC.rrc[enb_mod_idP]->carrier[CC_id].num_mbsfn_sync_area * sizeof(uint8_t*)); @@ -551,43 +553,44 @@ init_MCCH( // LOG_I(RRC, "DUY: serviceID is %d\n",RC.rrc[enb_mod_idP]->mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->tmgi_r9.serviceId_r9.buf[2]); // LOG_I(RRC, "DUY: session ID is %d\n",RC.rrc[enb_mod_idP]->mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->sessionId_r9->buf[0]); - rrc_mac_config_req_eNB(enb_mod_idP, CC_id, - 0,0,0,0,0, + if (rrc->node_type == ngran_eNB) { + rrc_mac_config_req_eNB(enb_mod_idP, CC_id, + 0,0,0,0,0, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - 0, + 0, #endif - 0,//rnti - (BCCH_BCH_Message_t *)NULL, - (RadioResourceConfigCommonSIB_t *) NULL, + 0,//rnti + (BCCH_BCH_Message_t *)NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - (RadioResourceConfigCommonSIB_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #endif - (struct PhysicalConfigDedicated *)NULL, + (struct PhysicalConfigDedicated *)NULL, #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, + (SCellToAddMod_r10_t *)NULL, + //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, #endif - (MeasObjectToAddMod_t **) NULL, - (MAC_MainConfig_t *) NULL, - 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *) NULL, - (TDD_Config_t *) NULL, - (MobilityControlInfo_t *)NULL, - (SchedulingInfoList_t *) NULL, - 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL + (MeasObjectToAddMod_t **) NULL, + (MAC_MainConfig_t *) NULL, + 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *) NULL, + (TDD_Config_t *) NULL, + (MobilityControlInfo_t *)NULL, + (SchedulingInfoList_t *) NULL, + 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - , - 0, - (MBSFN_AreaInfoList_r9_t *) NULL, - (PMCH_InfoList_r9_t *) & (RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9) + , + 0, + (MBSFN_AreaInfoList_r9_t *) NULL, + (PMCH_InfoList_r9_t *) & (RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9) #endif #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL + , + (SystemInformationBlockType1_v1310_IEs_t *)NULL #endif - ); - + ); + } //LOG_I(RRC,"DUY: lcid after rrc_mac_config_req is %02d\n",RC.rrc[enb_mod_idP]->mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9); } @@ -621,18 +624,21 @@ static void init_MBMS( , &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9) #endif ,NULL); - - rrc_rlc_config_asn1_req(&ctxt, - NULL, // SRB_ToAddModList - NULL, // DRB_ToAddModList - NULL, // DRB_ToReleaseList - &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9) + + if ( (RC.rrc[ctxt_pP->module_id]->node_type != ngran_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_ng_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_gNB_CU) ) { + rrc_rlc_config_asn1_req(&ctxt, + NULL, // SRB_ToAddModList + NULL, // DRB_ToAddModList + NULL, // DRB_ToReleaseList + &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9) #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - ,0, 0 + ,0, 0 #endif - ); - + ); + } //rrc_mac_config_req(); } } @@ -1330,39 +1336,41 @@ rrc_eNB_generate_RRCConnectionReestablishment( LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_eNB\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrc_mac_config_req_eNB(ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, + if (rrc->node_type == ngran_eNB) { + rrc_mac_config_req_eNB(ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + 0,0,0,0,0, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - 0, + 0, #endif - ctxt_pP->rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t *) NULL, + ctxt_pP->rnti, + (BCCH_BCH_Message_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - (RadioResourceConfigCommonSIB_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #endif - (struct PhysicalConfigDedicated* ) ue_context_pP->ue_context.physicalConfigDedicated, + (struct PhysicalConfigDedicated* ) ue_context_pP->ue_context.physicalConfigDedicated, #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, + (SCellToAddMod_r10_t *)NULL, + //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, #endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - 1, - SRB1_logicalChannelConfig, - ue_context_pP->ue_context.measGapConfig, - (TDD_Config_t *) NULL, - NULL, - (SchedulingInfoList_t *) NULL, - 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL + (MeasObjectToAddMod_t **) NULL, + ue_context_pP->ue_context.mac_MainConfig, + 1, + SRB1_logicalChannelConfig, + ue_context_pP->ue_context.measGapConfig, + (TDD_Config_t *) NULL, + NULL, + (SchedulingInfoList_t *) NULL, + 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL + , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL #endif #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) - ,(SystemInformationBlockType1_v1310_IEs_t *)NULL + ,(SystemInformationBlockType1_v1310_IEs_t *)NULL #endif - ); + ); + } break; } } @@ -4772,45 +4780,46 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover( LOG_D(RRC, "handover_config [FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 UE %x) --->][MAC_eNB][MOD %02d][]\n", ctxt_pP->frame, ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ctxt_pP->module_id); - rrc_mac_config_req_eNB( - ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, + if (rrc->node_type == ngran_eNB) { + rrc_mac_config_req_eNB( + ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + 0,0,0,0,0, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) -0, + 0, #endif - ue_context_pP->ue_context.rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t*) NULL, + ue_context_pP->ue_context.rnti, + (BCCH_BCH_Message_t *) NULL, + (RadioResourceConfigCommonSIB_t*) NULL, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - (RadioResourceConfigCommonSIB_t*) NULL, + (RadioResourceConfigCommonSIB_t*) NULL, #endif - ue_context_pP->ue_context.physicalConfigDedicated, + ue_context_pP->ue_context.physicalConfigDedicated, #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, + (SCellToAddMod_r10_t *)NULL, + //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, #endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - 1, - SRB1_logicalChannelConfig, - ue_context_pP->ue_context.measGapConfig, - (TDD_Config_t*) NULL, - (MobilityControlInfo_t*) NULL, - (SchedulingInfoList_t*) NULL, - 0, - NULL, - NULL, - (MBSFN_SubframeConfigList_t *) NULL + (MeasObjectToAddMod_t **) NULL, + ue_context_pP->ue_context.mac_MainConfig, + 1, + SRB1_logicalChannelConfig, + ue_context_pP->ue_context.measGapConfig, + (TDD_Config_t*) NULL, + (MobilityControlInfo_t*) NULL, + (SchedulingInfoList_t*) NULL, + 0, + NULL, + NULL, + (MBSFN_SubframeConfigList_t *) NULL #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL + , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL #endif #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL + , + (SystemInformationBlockType1_v1310_IEs_t *)NULL #endif - ); - + ); + } // Configure target eNB SRB2 /// SRB2 SRB2_config = CALLOC(1, sizeof(*SRB2_config)); @@ -5290,16 +5299,18 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover( , (PMCH_InfoList_r9_t *) NULL #endif ,NULL); - - rrc_rlc_config_asn1_req(&ctxt, - ue_context_pP->ue_context.SRB_configList, - (DRB_ToAddModList_t *) NULL, (DRB_ToReleaseList_t *) NULL + if ( (RC.rrc[ctxt_pP->module_id]->node_type != ngran_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_ng_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_gNB_CU) ) { + rrc_rlc_config_asn1_req(&ctxt, + ue_context_pP->ue_context.SRB_configList, + (DRB_ToAddModList_t *) NULL, (DRB_ToReleaseList_t *) NULL #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - , (PMCH_InfoList_r9_t *) NULL - , 0, 0 + , (PMCH_InfoList_r9_t *) NULL + , 0, 0 #endif - ); - + ); + } /* Initialize NAS list */ dedicatedInfoNASList = NULL; @@ -5360,41 +5371,42 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover( //rrc_rlc_data_req(ctxt_pP->module_id,frameP, 1,(ue_mod_idP*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); //pdcp_data_req (ctxt_pP->module_id, frameP, 1, (ue_mod_idP * NB_RB_MAX) + DCCH,rrc_eNB_mui++, 0, size, (char *) buffer, 1); - rrc_mac_config_req_eNB( - ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, + if (rrc->node_type == ngran_eNB) { + rrc_mac_config_req_eNB( + ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + 0,0,0,0,0, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - 0, + 0, #endif - ue_context_pP->ue_context.rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t *) NULL, + ue_context_pP->ue_context.rnti, + (BCCH_BCH_Message_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - (RadioResourceConfigCommonSIB_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #endif - ue_context_pP->ue_context.physicalConfigDedicated, + ue_context_pP->ue_context.physicalConfigDedicated, #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, + (SCellToAddMod_r10_t *)NULL, + //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, #endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - 1, - SRB1_logicalChannelConfig, - ue_context_pP->ue_context.measGapConfig, - (TDD_Config_t *) NULL, - (MobilityControlInfo_t *) mobilityInfo, - (SchedulingInfoList_t *) NULL, 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL + (MeasObjectToAddMod_t **) NULL, + ue_context_pP->ue_context.mac_MainConfig, + 1, + SRB1_logicalChannelConfig, + ue_context_pP->ue_context.measGapConfig, + (TDD_Config_t *) NULL, + (MobilityControlInfo_t *) mobilityInfo, + (SchedulingInfoList_t *) NULL, 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL + , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL #endif #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL + , + (SystemInformationBlockType1_v1310_IEs_t *)NULL #endif - ); - + ); + } /* handoverCommand.criticalExtensions.present = HandoverCommand__criticalExtensions_PR_c1; handoverCommand.criticalExtensions.choice.c1.present = HandoverCommand__criticalExtensions__c1_PR_handoverCommand_r8; @@ -5518,19 +5530,22 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( , (PMCH_InfoList_r9_t *) NULL #endif ,NULL); - // Refresh SRBs/DRBs - rrc_rlc_config_asn1_req( - ctxt_pP, - SRB_configList, // NULL, //LG-RK 14/05/2014 SRB_configList, - DRB_configList, -// (DRB_ToReleaseList_t *) NULL - DRB_Release_configList2 + if ( (RC.rrc[ctxt_pP->module_id]->node_type != ngran_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_ng_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_gNB_CU) ) { + // Refresh SRBs/DRBs + rrc_rlc_config_asn1_req( + ctxt_pP, + SRB_configList, // NULL, //LG-RK 14/05/2014 SRB_configList, + DRB_configList, + // (DRB_ToReleaseList_t *) NULL + DRB_Release_configList2 #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - , (PMCH_InfoList_r9_t *) NULL - , 0, 0 + , (PMCH_InfoList_r9_t *) NULL + , 0, 0 #endif - ); - + ); + } // set the SRB active in Ue context if (SRB_configList != NULL) { for (i = 0; (i < SRB_configList->list.count) && (i < 3); i++) { @@ -5632,100 +5647,107 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( DRB2LCHAN[i] = (uint8_t) * DRB_configList->list.array[i]->logicalChannelIdentity; } - rrc_mac_config_req_eNB( - ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, + if (rrc->node_type == ngran_eNB) { + rrc_mac_config_req_eNB( + ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + 0,0,0,0,0, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - 0, + 0, #endif - ue_context_pP->ue_context.rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t *) NULL, + ue_context_pP->ue_context.rnti, + (BCCH_BCH_Message_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - (RadioResourceConfigCommonSIB_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #endif - ue_context_pP->ue_context.physicalConfigDedicated, + ue_context_pP->ue_context.physicalConfigDedicated, #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, + (SCellToAddMod_r10_t *)NULL, + //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, #endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - DRB2LCHAN[i], - DRB_configList->list.array[i]->logicalChannelConfig, - ue_context_pP->ue_context.measGapConfig, - (TDD_Config_t *) NULL, - NULL, - (SchedulingInfoList_t *) NULL, - 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL + (MeasObjectToAddMod_t **) NULL, + ue_context_pP->ue_context.mac_MainConfig, + DRB2LCHAN[i], + DRB_configList->list.array[i]->logicalChannelConfig, + ue_context_pP->ue_context.measGapConfig, + (TDD_Config_t *) NULL, + NULL, + (SchedulingInfoList_t *) NULL, + 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL + , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL #endif #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL + , + (SystemInformationBlockType1_v1310_IEs_t *)NULL #endif - ); - - } else { // remove LCHAN from MAC/PHY + ); + } + } else { // remove LCHAN from MAC/PHY if (ue_context_pP->ue_context.DRB_active[drb_id] == 1) { // DRB has just been removed so remove RLC + PDCP for DRB /* rrc_pdcp_config_req (ctxt_pP->module_id, frameP, 1, CONFIG_ACTION_REMOVE, (ue_mod_idP * NB_RB_MAX) + DRB2LCHAN[i],UNDEF_SECURITY_MODE); */ - rrc_rlc_config_req( - ctxt_pP, - SRB_FLAG_NO, - MBMS_FLAG_NO, - CONFIG_ACTION_REMOVE, - DRB2LCHAN[i], - Rlc_info_um); + if ( (RC.rrc[ctxt_pP->module_id]->node_type != ngran_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_ng_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_gNB_CU) ) { + rrc_rlc_config_req( + ctxt_pP, + SRB_FLAG_NO, + MBMS_FLAG_NO, + CONFIG_ACTION_REMOVE, + DRB2LCHAN[i], + Rlc_info_um); + } } ue_context_pP->ue_context.DRB_active[drb_id] = 0; LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (DRB) ---> MAC_eNB\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrc_mac_config_req_eNB(ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, + if (rrc->node_type == ngran_eNB) { + rrc_mac_config_req_eNB(ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + 0,0,0,0,0, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - 0, + 0, #endif - ue_context_pP->ue_context.rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t *) NULL, + ue_context_pP->ue_context.rnti, + (BCCH_BCH_Message_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - (RadioResourceConfigCommonSIB_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #endif - ue_context_pP->ue_context.physicalConfigDedicated, + ue_context_pP->ue_context.physicalConfigDedicated, #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, + (SCellToAddMod_r10_t *)NULL, + //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, #endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - DRB2LCHAN[i], - (LogicalChannelConfig_t *) NULL, - (MeasGapConfig_t *) NULL, - (TDD_Config_t *) NULL, - NULL, - (SchedulingInfoList_t *) NULL, - 0, NULL, NULL, NULL + (MeasObjectToAddMod_t **) NULL, + ue_context_pP->ue_context.mac_MainConfig, + DRB2LCHAN[i], + (LogicalChannelConfig_t *) NULL, + (MeasGapConfig_t *) NULL, + (TDD_Config_t *) NULL, + NULL, + (SchedulingInfoList_t *) NULL, + 0, NULL, NULL, NULL #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL + , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL #endif #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL + , + (SystemInformationBlockType1_v1310_IEs_t *)NULL #endif - ); + ); + } } } } - free(DRB_configList); + free(DRB_configList); ue_context_pP->ue_context.DRB_configList2[xid] = NULL; } @@ -5830,41 +5852,43 @@ rrc_eNB_generate_RRCConnectionSetup( LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_eNB\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrc_mac_config_req_eNB( - ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, + if (rrc->node_type == ngran_eNB) { + rrc_mac_config_req_eNB( + ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + 0,0,0,0,0, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - 0, + 0, #endif - ue_context_pP->ue_context.rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t *) NULL, + ue_context_pP->ue_context.rnti, + (BCCH_BCH_Message_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) - (RadioResourceConfigCommonSIB_t *) NULL, + (RadioResourceConfigCommonSIB_t *) NULL, #endif - ue_context_pP->ue_context.physicalConfigDedicated, + ue_context_pP->ue_context.physicalConfigDedicated, #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, + (SCellToAddMod_r10_t *)NULL, + //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, #endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - 1, - SRB1_logicalChannelConfig, - ue_context_pP->ue_context.measGapConfig, - (TDD_Config_t *) NULL, - NULL, - (SchedulingInfoList_t *) NULL, - 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL + (MeasObjectToAddMod_t **) NULL, + ue_context_pP->ue_context.mac_MainConfig, + 1, + SRB1_logicalChannelConfig, + ue_context_pP->ue_context.measGapConfig, + (TDD_Config_t *) NULL, + NULL, + (SchedulingInfoList_t *) NULL, + 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL + , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL #endif #if (RRC_VERSION >= MAKE_VERSION(13, 0, 0)) - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL + , + (SystemInformationBlockType1_v1310_IEs_t *)NULL #endif - ); + ); + } } } } @@ -6343,16 +6367,20 @@ rrc_eNB_decode_ccch( #endif ,NULL); - - rrc_rlc_config_asn1_req(ctxt_pP, - ue_context_p->ue_context.SRB_configList, - (DRB_ToAddModList_t*) NULL, - (DRB_ToReleaseList_t*) NULL + if ( (RC.rrc[ctxt_pP->module_id]->node_type != ngran_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_ng_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_gNB_CU) ) { + rrc_rlc_config_asn1_req(ctxt_pP, + ue_context_p->ue_context.SRB_configList, + (DRB_ToAddModList_t*) NULL, + (DRB_ToReleaseList_t*) NULL #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0)) - , (PMCH_InfoList_r9_t *) NULL, - 0,0 + , (PMCH_InfoList_r9_t *) NULL, + 0,0 # endif - ); + ); + } + #endif //NO_RRM } break; @@ -6415,7 +6443,16 @@ rrc_eNB_decode_ccch( random_value = (((uint64_t)mme_code) << 32) | m_tmsi; if ((ue_context_p = rrc_eNB_ue_context_stmsi_exist(ctxt_pP, mme_code, m_tmsi))) { LOG_I(RRC," S-TMSI exists, ue_context_p %p, old rnti %x => %x\n",ue_context_p,ue_context_p->ue_context.rnti,ctxt_pP->rnti); - rrc_mac_remove_ue(ctxt_pP->module_id, ue_context_p->ue_context.rnti); + + if ( (RC.rrc[ctxt_pP->module_id]->node_type != ngran_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_ng_eNB_CU) || + (RC.rrc[ctxt_pP->module_id]->node_type != ngran_gNB_CU) ) { + rrc_mac_remove_ue(ctxt_pP->module_id, ue_context_p->ue_context.rnti); + } + else { + // send message to DU to remove context + AssertFatal(1==0,"Need to added context removal\n"); + } stmsi_received=1; /* replace rnti in the context */ /* for that, remove the context from the RB tree */ From 1e5f95cd95f7697ea6591a19450644b5c7ce1786 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 21 Sep 2018 17:23:08 +0200 Subject: [PATCH 2/6] fixes for monolithic case. Still doesn't work to RRCConnectionSetup, context allocation problem. --- openair2/ENB_APP/enb_config.c | 2 +- openair2/F1AP/f1ap_du_rrc_message_transfer.c | 102 ++++++++++++++++-- openair2/LAYER2/PROTO_AGENT/proto_agent.c | 3 +- openair2/RRC/LTE/L2_interface.c | 26 ++++- openair2/RRC/LTE/rrc_eNB.c | 28 ++--- .../PROJECTS/GENERIC-LTE-EPC/CONF/cu.lte.conf | 12 +-- .../CONF/du.lte.band7.10MHz.if4p5.conf | 22 ++-- 7 files changed, 151 insertions(+), 44 deletions(-) diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index c9e67a7ece..9c12d4b1d1 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -822,7 +822,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc) { RRC_CONFIGURATION_REQ (msg_p).nb_antenna_ports[j] = nb_antenna_ports; } - else {//this is CU, SIB2-20 in CU + if (rrc->node_type != ngran_eNB_DU) {//this is CU or eNB, SIB2-20 in CU #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) if (!pbch_repetition) diff --git a/openair2/F1AP/f1ap_du_rrc_message_transfer.c b/openair2/F1AP/f1ap_du_rrc_message_transfer.c index 12d599bc39..6d9099d6bc 100644 --- a/openair2/F1AP/f1ap_du_rrc_message_transfer.c +++ b/openair2/F1AP/f1ap_du_rrc_message_transfer.c @@ -314,6 +314,7 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, "Unknown message\n"); break; }// switch case + return(0); } else if (srb_id == 1) { // rrc_rlc_config_asn1_req(&ctxt, // SRB_configList, @@ -325,13 +326,96 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, // # endif // ); - LOG_I(DU_F1AP, "Received DL RRC Transfer on srb_id 1\n"); - rlc_op_status_t rlc_status; - boolean_t ret = TRUE; - mem_block_t *pdcp_pdu_p = NULL; - pdcp_pdu_p = get_free_mem_block(rrc_dl_sdu_len, __func__); - memset(&pdcp_pdu_p->data[0], 0, rrc_dl_sdu_len); - memcpy(&pdcp_pdu_p->data[0], ie->value.choice.RRCContainer.buf, rrc_dl_sdu_len); + DL_DCCH_Message_t* dl_dcch_msg=NULL; + asn_dec_rval_t dec_rval; + dec_rval = uper_decode(NULL, + &asn_DEF_DL_DCCH_Message, + (void**)&dl_dcch_msg, + ie->value.choice.RRCContainer.buf, + rrc_dl_sdu_len,0,0); + + if (dl_dcch_msg->message.present == DL_DCCH_MessageType_PR_c1) { + + switch (dl_dcch_msg->message.choice.c1.present) { + + case DL_DCCH_MessageType__c1_PR_NOTHING: + LOG_I(RRC, "Received PR_NOTHING on DL-DCCH-Message\n"); + return; + + case DL_DCCH_MessageType__c1_PR_csfbParametersResponseCDMA2000: + case DL_DCCH_MessageType__c1_PR_dlInformationTransfer: + case DL_DCCH_MessageType__c1_PR_handoverFromEUTRAPreparationRequest: + case DL_DCCH_MessageType__c1_PR_mobilityFromEUTRACommand: + break; + case DL_DCCH_MessageType__c1_PR_rrcConnectionReconfiguration: + // handle RRCConnectionReconfiguration + LOG_I(RRC, + "Logical Channel DL-DCCH (SRB1), Received RRCConnectionReconfiguration DU_ID %x/RNTI %x\n", + du_ue_f1ap_id, + f1ap_get_rnti_by_du_id(&f1ap_du_ue[instance],du_ue_f1ap_id)); + + RRCConnectionReconfiguration_t* rrcConnectionReconfiguration = &dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration; + + if (rrcConnectionReconfiguration->criticalExtensions.present == RRCConnectionReconfiguration__criticalExtensions_PR_c1) { + if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.present == + RRCConnectionReconfiguration__criticalExtensions__c1_PR_rrcConnectionReconfiguration_r8) { + RRCConnectionReconfiguration_r8_IEs_t* rrcConnectionReconfiguration_r8 = + &rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8; + + if (rrcConnectionReconfiguration_r8->mobilityControlInfo) { + LOG_I(RRC,"Mobility Control Information is present\n"); + AssertFatal(1==0,"Can't handle this yet in DU\n"); + } + if (rrcConnectionReconfiguration_r8->measConfig != NULL) { + LOG_I(RRC,"Measurement Configuration is present\n"); + + } + + if (rrcConnectionReconfiguration_r8->radioResourceConfigDedicated) { + LOG_I(RRC,"Radio Resource Configuration is present\n"); + RadioResourceConfigDedicated_t* radioResourceConfigDedicated = rrcConnectionReconfiguration_r8->radioResourceConfigDedicated; + long SRB_id,DRB_id; + int i,cnt; + LogicalChannelConfig_t *SRB1_logicalChannelConfig,*SRB2_logicalChannelConfig; + + // radioResourceConfigDedicated->physicalConfigDedicated; + + } + break; + case DL_DCCH_MessageType__c1_PR_rrcConnectionRelease: + // handle RRCConnectionRelease + break; + case DL_DCCH_MessageType__c1_PR_securityModeCommand: + case DL_DCCH_MessageType__c1_PR_ueCapabilityEnquiry: + case DL_DCCH_MessageType__c1_PR_counterCheck: +#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) + case DL_DCCH_MessageType__c1_PR_loggedMeasurementConfiguration_r10: + case DL_DCCH_MessageType__c1_PR_rnReconfiguration_r10: +#endif + case DL_DCCH_MessageType__c1_PR_spare1: + case DL_DCCH_MessageType__c1_PR_spare2: + case DL_DCCH_MessageType__c1_PR_spare3: +#if (RRC_VERSION < MAKE_VERSION(14, 0, 0)) + case DL_DCCH_MessageType__c1_PR_spare4: +#endif + break; + } + + } + } + } + } + else if (srb_id == 2) { + + } + + LOG_I(DU_F1AP, "Received DL RRC Transfer on srb_id %d\n",srb_id); + rlc_op_status_t rlc_status; + boolean_t ret = TRUE; + mem_block_t *pdcp_pdu_p = NULL; + pdcp_pdu_p = get_free_mem_block(rrc_dl_sdu_len, __func__); + memset(&pdcp_pdu_p->data[0], 0, rrc_dl_sdu_len); + memcpy(&pdcp_pdu_p->data[0], ie->value.choice.RRCContainer.buf, rrc_dl_sdu_len); if (pdcp_pdu_p != NULL) { rlc_status = rlc_data_req(&ctxt @@ -376,9 +460,7 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, return ret; } // if pdcp_pdu_p - } else if (srb_id == 2) { - } #endif return 0; @@ -567,7 +649,7 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, return 0; } - + void init_f1ap_du_ue_inst (void) { diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent.c b/openair2/LAYER2/PROTO_AGENT/proto_agent.c index 44194255c6..394ba25814 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent.c +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent.c @@ -59,11 +59,12 @@ int proto_agent_start(mod_id_t mod_id, const cudu_params_t *p) { int channel_id; +/* DevAssert(p->local_ipv4_address); DevAssert(p->local_port > 1024); // "unprivileged" port DevAssert(p->remote_ipv4_address); DevAssert(p->remote_port > 1024); // "unprivileged" port - + */ proto_agent[mod_id].mod_id = mod_id; /* Initialize the channel container */ diff --git a/openair2/RRC/LTE/L2_interface.c b/openair2/RRC/LTE/L2_interface.c index 6b66349116..ecf60dc32d 100644 --- a/openair2/RRC/LTE/L2_interface.c +++ b/openair2/RRC/LTE/L2_interface.c @@ -150,7 +150,7 @@ mac_rrc_data_req( LOG_T(RRC,"[eNB %d] Frame %d CCCH request (Srb_id %d, rnti %x)\n",Mod_idP,frameP, Srb_id,rnti); if(ue_p->Srb0.Active==0) { - LOG_E(RRC,"[eNB %d] CCCH Not active\n",Mod_idP); + LOG_E(RRC,"[eNB %d] CCCH Not active (%p, rnti %x)\n",Mod_idP,ue_p,ue_p->rnti); return(0); } @@ -304,7 +304,29 @@ mac_rrc_data_ind( PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, rntiP, frameP, sub_frameP,0); if((srb_idP & RAB_OFFSET) == CCCH) { - LOG_D(RRC,"[eNB %d] Received SDU for CCCH on SRB 0\n",module_idP); + LOG_I(RRC,"[eNB %d] Received SDU for CCCH on SRB 0 (%d,%x)\n",module_idP, + ctxt.module_id,ctxt.rnti); + + + // create a ue_context with rnti as random value, will be updated when Attach Request is received + struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_next_free_ue_context(&ctxt, + rntiP + ); + + eNB_RRC_UE_t *ue_p = &ue_context_p->ue_context; + SRB_INFO *srb_info_p = &ue_p->Srb0; + + LOG_I(RRC,"Decoding CCCH : inst %d, CC_id %d, ue_context %p (rnti %x), sib_info_p->Rx_buffer.payload_size %d\n", + module_idP,CC_id,ue_p, ue_p->rnti,sdu_lenP); + AssertFatal(sdu_lenP <= RRC_BUFFER_SIZE_MAX, + "CCCH message has size %d > %d\n",sdu_lenP,RRC_BUFFER_SIZE_MAX); + + + memcpy(srb_info_p->Rx_buffer.Payload, + sduP, + sdu_lenP); + srb_info_p->Rx_buffer.payload_size = sdu_lenP; + srb_info_p->Active = 1; // msg("\n******INST %d Srb_info %p, Srb_id=%d****\n\n",Mod_id,Srb_info,Srb_info->Srb_id); if (sdu_lenP > 0) rrc_eNB_decode_ccch(&ctxt, sduP, sdu_lenP, CC_id); diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index e99f8e64b9..199546f525 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -204,7 +204,7 @@ init_SI( AssertFatal(carrier->sizeof_SIB1 != 255,"FATAL, RC.rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255"); } - else if (rrc->node_type != ngran_eNB_DU) { + if (rrc->node_type != ngran_eNB_DU) { carrier->SIB23 = (uint8_t*) malloc16(64); AssertFatal(carrier->SIB23!=NULL,"cannot allocate memory for SIB"); @@ -625,9 +625,9 @@ static void init_MBMS( #endif ,NULL); - if ( (RC.rrc[ctxt_pP->module_id]->node_type != ngran_eNB_CU) || - (RC.rrc[ctxt_pP->module_id]->node_type != ngran_ng_eNB_CU) || - (RC.rrc[ctxt_pP->module_id]->node_type != ngran_gNB_CU) ) { + if ( (RC.rrc[enb_mod_idP]->node_type != ngran_eNB_CU) || + (RC.rrc[enb_mod_idP]->node_type != ngran_ng_eNB_CU) || + (RC.rrc[enb_mod_idP]->node_type != ngran_gNB_CU) ) { rrc_rlc_config_asn1_req(&ctxt, NULL, // SRB_ToAddModList NULL, // DRB_ToAddModList @@ -737,7 +737,7 @@ rrc_eNB_ue_context_stmsi_exist( //----------------------------------------------------------------------------- // return a new ue context structure if ue_identityP, ctxt_pP->rnti not found in collection -static struct rrc_eNB_ue_context_s* +struct rrc_eNB_ue_context_s* rrc_eNB_get_next_free_ue_context( const protocol_ctxt_t* const ctxt_pP, const uint64_t ue_identityP @@ -775,6 +775,7 @@ rrc_eNB_get_next_free_ue_context( PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); return NULL; } + return(ue_context_p); } //----------------------------------------------------------------------------- @@ -1338,7 +1339,7 @@ rrc_eNB_generate_RRCConnectionReestablishment( LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_eNB\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - if (rrc->node_type == ngran_eNB) { + if (RC.rrc[ctxt_pP->module_id]->node_type == ngran_eNB) { rrc_mac_config_req_eNB(ctxt_pP->module_id, ue_context_pP->ue_context.primaryCC_id, 0,0,0,0,0, @@ -4782,7 +4783,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover( LOG_D(RRC, "handover_config [FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 UE %x) --->][MAC_eNB][MOD %02d][]\n", ctxt_pP->frame, ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ctxt_pP->module_id); - if (rrc->node_type == ngran_eNB) { + if (RC.rrc[ctxt_pP->module_id]->node_type == ngran_eNB) { rrc_mac_config_req_eNB( ctxt_pP->module_id, ue_context_pP->ue_context.primaryCC_id, @@ -5373,7 +5374,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover( //rrc_rlc_data_req(ctxt_pP->module_id,frameP, 1,(ue_mod_idP*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); //pdcp_data_req (ctxt_pP->module_id, frameP, 1, (ue_mod_idP * NB_RB_MAX) + DCCH,rrc_eNB_mui++, 0, size, (char *) buffer, 1); - if (rrc->node_type == ngran_eNB) { + if (RC.rrc[ctxt_pP->module_id]->node_type == ngran_eNB) { rrc_mac_config_req_eNB( ctxt_pP->module_id, ue_context_pP->ue_context.primaryCC_id, @@ -5649,7 +5650,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( DRB2LCHAN[i] = (uint8_t) * DRB_configList->list.array[i]->logicalChannelIdentity; } - if (rrc->node_type == ngran_eNB) { + if (RC.rrc[ctxt_pP->module_id]->node_type == ngran_eNB) { rrc_mac_config_req_eNB( ctxt_pP->module_id, ue_context_pP->ue_context.primaryCC_id, @@ -5710,7 +5711,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (DRB) ---> MAC_eNB\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - if (rrc->node_type == ngran_eNB) { + if (RC.rrc[ctxt_pP->module_id]->node_type == ngran_eNB) { rrc_mac_config_req_eNB(ctxt_pP->module_id, ue_context_pP->ue_context.primaryCC_id, 0,0,0,0,0, @@ -5854,7 +5855,7 @@ rrc_eNB_generate_RRCConnectionSetup( LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_eNB\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - if (rrc->node_type == ngran_eNB) { + if (RC.rrc[ctxt_pP->module_id]->node_type == ngran_eNB) { rrc_mac_config_req_eNB( ctxt_pP->module_id, ue_context_pP->ue_context.primaryCC_id, @@ -7558,8 +7559,8 @@ rrc_enb_task( eNB_RRC_UE_t *ue_p = &ue_context_p->ue_context; srb_info_p = &ue_p->Srb0; - LOG_I(RRC,"Decoding CCCH : inst %d, CC_id %d, ctxt %p, sib_info_p->Rx_buffer.payload_size %d\n", - rrc_inst,CC_id,&ctxt, RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size); + LOG_I(RRC,"Decoding CCCH : inst %d, CC_id %d, ue_context %p (rnti %x), sib_info_p->Rx_buffer.payload_size %d\n", + rrc_inst,CC_id,ue_p, ue_p->rnti,RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size); if (RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size >= RRC_BUFFER_SIZE_MAX) { LOG_I(RRC, "CCCH message has size %d > %d\n",RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size,RRC_BUFFER_SIZE_MAX); break; @@ -7568,6 +7569,7 @@ rrc_enb_task( RRC_MAC_CCCH_DATA_IND(msg_p).sdu, RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size); srb_info_p->Rx_buffer.payload_size = RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size; + srb_info_p->Active = 1; rrc_eNB_decode_ccch(&ctxt, srb_info_p->Rx_buffer.Payload,srb_info_p->Rx_buffer.payload_size, CC_id); break; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/cu.lte.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/cu.lte.conf index 8d42fcb761..035add8b31 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/cu.lte.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/cu.lte.conf @@ -24,12 +24,12 @@ eNBs = tr_s_preference = "f1" local_s_if_name = "lo"; - remote_s_address = "127.0.0.1"; - local_s_address = "127.0.0.2"; - local_s_portc = 60001; - remote_s_portc = 60000; - local_s_portd = 60011; - remote_s_portd = 60010; + remote_s_address = "127.0.0.3"; + local_s_address = "127.0.0.4"; + local_s_portc = 501; + remote_s_portc = 500; + local_s_portd = 601; + remote_s_portd = 600; ////////// Physical parameters: diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/du.lte.band7.10MHz.if4p5.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/du.lte.band7.10MHz.if4p5.conf index 32d9436f12..1956259fdc 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/du.lte.band7.10MHz.if4p5.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/du.lte.band7.10MHz.if4p5.conf @@ -13,9 +13,9 @@ eNBs = // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - mobile_country_code = "001"; + mobile_country_code = "208"; - mobile_network_code = "01"; + mobile_network_code = "93"; nr_cellid = 12345678L @@ -60,13 +60,13 @@ MACRLCs = ( num_cc = 1; tr_s_preference = "local_L1"; tr_n_preference = "f1"; - local_n_if_name = "vlan203"; - remote_n_address = "192.168.203.16"; - local_n_address = "192.168.203.242"; - local_n_portc = 60000; - remote_n_portc = 60001; - local_n_portd = 60010; - remote_n_portd = 60011; + local_n_if_name = "lo"; + remote_n_address = "127.0.0.4"; + local_n_address = "127.0.0.3"; + local_n_portc = 500; + remote_n_portc = 501; + local_n_portd = 600; + remote_n_portd = 601; } ); @@ -80,8 +80,8 @@ L1s = ( RUs = ( { local_if_name = "enp4s0f1"; - local_address = "192.168.41.3"; - remote_address = "192.168.41.1"; + local_address = "127.0.0.1"; + remote_address = "127.0.0.2"; local_portc = 50000; remote_portc = 50000; local_portd = 50001; From 360e2e77a9f5782ed5c4155f36ef10a7f815599a Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 21 Sep 2018 18:07:47 +0200 Subject: [PATCH 3/6] monolithic ok (RRCConnectionSetupComplete) --- openair2/RRC/LTE/L2_interface.c | 6 +++--- openair2/RRC/LTE/rrc_eNB.c | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/openair2/RRC/LTE/L2_interface.c b/openair2/RRC/LTE/L2_interface.c index ecf60dc32d..dafc24d9df 100644 --- a/openair2/RRC/LTE/L2_interface.c +++ b/openair2/RRC/LTE/L2_interface.c @@ -307,7 +307,7 @@ mac_rrc_data_ind( LOG_I(RRC,"[eNB %d] Received SDU for CCCH on SRB 0 (%d,%x)\n",module_idP, ctxt.module_id,ctxt.rnti); - + /* // create a ue_context with rnti as random value, will be updated when Attach Request is received struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_next_free_ue_context(&ctxt, rntiP @@ -327,8 +327,8 @@ mac_rrc_data_ind( sdu_lenP); srb_info_p->Rx_buffer.payload_size = sdu_lenP; srb_info_p->Active = 1; - - // msg("\n******INST %d Srb_info %p, Srb_id=%d****\n\n",Mod_id,Srb_info,Srb_info->Srb_id); + */ + if (sdu_lenP > 0) rrc_eNB_decode_ccch(&ctxt, sduP, sdu_lenP, CC_id); } diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index 199546f525..811e2ce40f 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -6438,6 +6438,7 @@ rrc_eNB_decode_ccch( ue_context_p->ue_context.ul_failure_timer = 20000; } ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, random_value); + ue_context_p->ue_context.Srb0.Active=1; } else if (InitialUE_Identity_PR_s_TMSI == rrcConnectionRequest->ue_Identity.present) { /* Save s-TMSI */ S_TMSI_t s_TMSI = rrcConnectionRequest->ue_Identity.choice.s_TMSI; From a1b60957a1496651fcc0cdb76e0a0ba637457f90 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 21 Sep 2018 21:19:27 +0200 Subject: [PATCH 4/6] reworking logic for selection of configuration parameters as a function of node (CU/DU/eNB) --- openair2/ENB_APP/enb_config.c | 20 +++++++++----------- openair2/ENB_APP/enb_config.h | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 9c12d4b1d1..334299b3c2 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -416,7 +416,7 @@ void RCconfig_macrlc(int macrlc_has_f1[MAX_MAC_INST]) { } -int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc) { +int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { int num_enbs = 0; @@ -637,10 +637,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc) { LOG_I(RRC,"Instance %d: Southbound Transport %s\n",i,*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr)); - if (strcmp(*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr), "local_mac") == 0) { - rrc->node_type = ngran_eNB; - } - else if (strcmp(*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr), "f1") == 0) { + if (strcmp(*(ENBParamList.paramarray[i][ENB_TRANSPORT_S_PREFERENCE_IDX].strptr), "f1") == 0) { paramdef_t SCTPParams[] = SCTPPARAMS_DESC; char aprefix[MAX_OPTNAME_SIZE*2 + 8]; @@ -675,9 +672,11 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc) { } - else { // no F1 - // set to ngran_eNB for now, it will get set to ngran_DU if macrlc entity which uses F1 is present - rrc->node_type = ngran_eNB; + else { + // set to ngran_eNB for now, it will get set to ngran_eNB_DU if macrlc entity which uses F1 is present + // Note: we will have to handle the case of ngran_ng_eNB_DU + if (macrlc_has_f1 == 0) rrc->node_type = ngran_eNB; + else rrc->node_type = ngran_eNB_DU; } // MCC and MNC @@ -1825,7 +1824,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc) { RRC_CONFIGURATION_REQ (msg_p).discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused[j] = discRxPoolPS_ResourceConfig_subframeBitmap_choice_bs_bits_unused; - } + } // node_type!=ngran_eNB_DU } if (rrc->node_type == ngran_eNB_CU || rrc->node_type == ngran_ng_eNB_CU) { char srb1path[MAX_OPTNAME_SIZE*2 + 8]; @@ -3010,8 +3009,7 @@ void read_config_and_init() RC.rrc[enb_id] = malloc(sizeof(eNB_RRC_INST)); AssertFatal(RC.rrc[enb_id], "RRC context for eNB %d not allocated\n", enb_id); memset((void *)RC.rrc[enb_id], 0, sizeof(eNB_RRC_INST)); - RCconfig_RRC(enb_id, RC.rrc[enb_id]); - if (macrlc_has_f1[enb_id]) RC.rrc[enb_id]->node_type = ngran_eNB_DU; + RCconfig_RRC(enb_id, RC.rrc[enb_id],macrlc_has_f1[enb_id]); } if (RC.nb_macrlc_inst == 0) diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h index f0f964feb0..eead6e54e5 100644 --- a/openair2/ENB_APP/enb_config.h +++ b/openair2/ENB_APP/enb_config.h @@ -115,7 +115,7 @@ extern void RCConfig(void); void enb_config_display(void); void ru_config_display(void); -int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc); +int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1); int RCconfig_S1(MessageDef *msg_p, uint32_t i); void read_config_and_init(void); From 1181790b866d0a54faf0e550cf1f0222ec3a2b19 Mon Sep 17 00:00:00 2001 From: Bing-Kai Hong Date: Fri, 21 Sep 2018 22:03:27 +0200 Subject: [PATCH 5/6] Partially update the node_type check --- openair2/ENB_APP/enb_config.c | 6 ++++-- openair2/LAYER2/PROTO_AGENT/proto_agent.c | 13 +++++++------ openair2/RRC/LTE/rrc_eNB.c | 11 ++++++++--- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 334299b3c2..16fa62404c 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -743,7 +743,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { nb_cc++; - if (rrc->node_type != ngran_eNB_CU && rrc->node_type != ngran_ng_eNB_CU) { + if ( (rrc->node_type != ngran_eNB_CU) || (rrc->node_type != ngran_ng_eNB_CU) || (rrc->node_type != ngran_gNB_CU) ) { // Cell params, MIB/SIB1 in DU RRC_CONFIGURATION_REQ (msg_p).tdd_config[j] = tdd_config; @@ -1826,7 +1826,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { } // node_type!=ngran_eNB_DU } - if (rrc->node_type == ngran_eNB_CU || rrc->node_type == ngran_ng_eNB_CU) { + if ( (rrc->node_type == ngran_eNB_CU) || (rrc->node_type == ngran_ng_eNB_CU) || (rrc->node_type == ngran_gNB_CU) ) { char srb1path[MAX_OPTNAME_SIZE*2 + 8]; sprintf(srb1path,"%s.%s",enbpath,ENB_CONFIG_STRING_SRB1); int npar = config_get( SRB1Params,sizeof(SRB1Params)/sizeof(paramdef_t), srb1path); @@ -2178,6 +2178,8 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) { #endif } + LOG_I(RRC,"Node type %d \n ", rrc->node_type); + return 0; } diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent.c b/openair2/LAYER2/PROTO_AGENT/proto_agent.c index 394ba25814..de8af0fb33 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent.c +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent.c @@ -59,12 +59,13 @@ int proto_agent_start(mod_id_t mod_id, const cudu_params_t *p) { int channel_id; -/* - DevAssert(p->local_ipv4_address); - DevAssert(p->local_port > 1024); // "unprivileged" port - DevAssert(p->remote_ipv4_address); - DevAssert(p->remote_port > 1024); // "unprivileged" port - */ + // RS: CUDU does not work! + //DevAssert(p->local_interface); + //DevAssert(p->local_ipv4_address); + //DevAssert(p->local_port > 1024); // "unprivileged" port + //DevAssert(p->remote_ipv4_address); + //DevAssert(p->remote_port > 1024); // "unprivileged" port + proto_agent[mod_id].mod_id = mod_id; /* Initialize the channel container */ diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index 811e2ce40f..cacb8dee6a 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -168,7 +168,10 @@ init_SI( AssertFatal(carrier->SIB1!=NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for SIB1 allocated\n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - if (rrc->node_type != ngran_eNB_CU && rrc->node_type != ngran_ng_eNB_CU) { + LOG_I(RRC,"[eNB %d] Node type %d \n ", ctxt_pP->module_id, rrc->node_type); + if ((rrc->node_type != ngran_eNB_CU) || + (rrc->node_type != ngran_ng_eNB_CU) || + (rrc->node_type != ngran_gNB_CU) ) { // copy basic Cell parameters carrier->physCellId = configuration->Nid_cell[CC_id]; carrier->p_eNB = configuration->nb_antenna_ports[CC_id]; @@ -204,8 +207,8 @@ init_SI( AssertFatal(carrier->sizeof_SIB1 != 255,"FATAL, RC.rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255"); } - if (rrc->node_type != ngran_eNB_DU) { - + if ((rrc->node_type != ngran_eNB_DU) || + (rrc->node_type != ngran_gNB_DU)) { carrier->SIB23 = (uint8_t*) malloc16(64); AssertFatal(carrier->SIB23!=NULL,"cannot allocate memory for SIB"); carrier->sizeof_SIB23 = do_SIB23( @@ -217,6 +220,8 @@ init_SI( #endif ); + LOG_I(RRC,"do_SIB23, size %d \n ", carrier->sizeof_SIB23); + AssertFatal(carrier->sizeof_SIB23 != 255,"FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB23 == 255"); From 5de7f61fd5f39711027ffb99859ad5c6f71e9524 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 21 Sep 2018 16:38:06 -0400 Subject: [PATCH 6/6] monolithic is functional with EPC and COTS UE (full connection) --- openair2/ENB_APP/enb_config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 334299b3c2..ea447f72d7 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -3012,6 +3012,6 @@ void read_config_and_init() RCconfig_RRC(enb_id, RC.rrc[enb_id],macrlc_has_f1[enb_id]); } - if (RC.nb_macrlc_inst == 0) + if (RC.rrc[0]->node_type != ngran_eNB_DU) pdcp_layer_init(); }