first-fix-rrc-mac-interface

This commit is contained in:
laurent
2022-12-02 16:47:21 +01:00
parent f7c3874e20
commit 1e8719c183
15 changed files with 493 additions and 976 deletions
+1 -1
View File
@@ -901,7 +901,7 @@ unsigned char phy_threegpplte_turbo_decoder_scalar(llr_t *y,
llr_t *yp = y; llr_t *yp = y;
unsigned short i,pi; unsigned short i,pi;
unsigned char iteration_cnt=0; unsigned char iteration_cnt=0;
unsigned int crc,oldcrc; uint32_t crc, oldcrc;
unsigned char crc_len,temp; unsigned char crc_len,temp;
if (crc_type > 3) { if (crc_type > 3) {
@@ -1898,7 +1898,7 @@ unsigned char phy_threegpplte_turbo_decoder(short *y,
__m128i *yp128; __m128i *yp128;
unsigned int i,j,iind;//,pi; unsigned int i,j,iind;//,pi;
unsigned char iteration_cnt=0; unsigned char iteration_cnt=0;
unsigned int crc,oldcrc,crc_len; uint32_t crc, oldcrc, crc_len;
uint8_t temp; uint8_t temp;
__m128i tmp128[(n+8)>>3]; __m128i tmp128[(n+8)>>3];
__m128i tmp, zeros=_mm_setzero_si128(); __m128i tmp, zeros=_mm_setzero_si128();
@@ -1001,7 +1001,7 @@ uint8_t phy_threegpplte_turbo_decoder16(int16_t *y,
llr_t *s,*s1,*s2,*yp1,*yp2,*yp; llr_t *s,*s1,*s2,*yp1,*yp2,*yp;
unsigned int i,j,iind;//,pi; unsigned int i,j,iind;//,pi;
unsigned char iteration_cnt=0; unsigned char iteration_cnt=0;
unsigned int crc,oldcrc,crc_len; uint32_t crc, oldcrc, crc_len;
uint8_t temp; uint8_t temp;
#if defined(__x86_64__) || defined(__i386__) #if defined(__x86_64__) || defined(__i386__)
__m128i *yp128; __m128i *yp128;
@@ -1308,7 +1308,7 @@ uint8_t phy_threegpplte_turbo_decoder16(int16_t *y,
// check status on output // check status on output
if (iteration_cnt>1) { if (iteration_cnt>1) {
oldcrc= *((unsigned int *)(&decoded_bytes[(n>>3)-crc_len])); memcpy(&oldcrc, &decoded_bytes[(n >> 3) - crc_len], sizeof(oldcrc));
switch (crc_type) { switch (crc_type) {
case CRC24_A: case CRC24_A:
+2 -2
View File
@@ -298,11 +298,11 @@ crc8 (unsigned char * inptr, int bitlen)
resbit = (bitlen % 8); resbit = (bitlen % 8);
while (octetlen-- > 0) { while (octetlen-- > 0) {
crc = crc8Table[(*inptr++) ^ (crc >> 24)] << 24; crc = ((unsigned int)crc8Table[(*inptr++) ^ (crc >> 24)]) << 24;
} }
if (resbit > 0) if (resbit > 0)
crc = (crc << resbit) ^ (crc8Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))] << 24); crc = (crc << resbit) ^ ((unsigned int)(crc8Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))]) << 24);
return crc; return crc;
} }
@@ -289,8 +289,8 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *ue,
ch[13] = (short)(((int)pil[6]*rxF[1] + (int)pil[7]*rxF[0])>>15); ch[13] = (short)(((int)pil[6]*rxF[1] + (int)pil[7]*rxF[0])>>15);
ch[14] = ch[12]>>1; ch[14] = ch[12]>>1;
ch[15] = ch[13]>>1; ch[15] = ch[13]>>1;
ch[10] = (ch[8]/3)+(ch[12]<<1)/3; ch[10] = (ch[8] / 3) + (ch[12] * 2) / 3;
ch[11] = (ch[9]/3)+(ch[13]<<1)/3; ch[11] = (ch[9] / 3) + (ch[13] * 2) / 3;
/* printf("rb %d: pil3 (%d,%d) x (%d,%d) = (%d,%d)\n", /* printf("rb %d: pil3 (%d,%d) x (%d,%d) = (%d,%d)\n",
rb,pil[6],pil[7],rxF[0],rxF[1],ch[12],ch[13]);*/ rb,pil[6],pil[7],rxF[0],rxF[1],ch[12],ch[13]);*/
// ------------------------5th pilot------------------------ // ------------------------5th pilot------------------------
+19 -37
View File
@@ -3076,43 +3076,25 @@ void configure_du_mac(int inst) {
eNB_RRC_INST *rrc = RC.rrc[inst]; eNB_RRC_INST *rrc = RC.rrc[inst];
rrc_eNB_carrier_data_t *carrier = &rrc->carrier[0]; rrc_eNB_carrier_data_t *carrier = &rrc->carrier[0];
LOG_I(ENB_APP,"Configuring MAC/L1 %d, carrier->sib2 %p\n",inst,&carrier->sib2->radioResourceConfigCommon); LOG_I(ENB_APP,"Configuring MAC/L1 %d, carrier->sib2 %p\n",inst,&carrier->sib2->radioResourceConfigCommon);
rrc_mac_config_req_eNB(inst, 0, rrc_mac_config_req_eNB_t tmp = {0};
carrier->physCellId, tmp.physCellId = carrier->physCellId;
carrier->p_eNB, tmp.p_eNB = carrier->p_eNB;
carrier->Ncp, tmp.Ncp = carrier->Ncp;
carrier->sib1->freqBandIndicator, tmp.eutra_band = carrier->sib1->freqBandIndicator;
carrier->dl_CarrierFreq, tmp.dl_CarrierFreq = carrier->dl_CarrierFreq;
carrier->pbch_repetition, tmp.pbch_repetition = carrier->pbch_repetition;
0, // rnti tmp.mib = &carrier->mib;
(LTE_BCCH_BCH_Message_t *) &carrier->mib, tmp.radioResourceConfigCommon = &carrier->sib2->radioResourceConfigCommon;
(LTE_RadioResourceConfigCommonSIB_t *) &carrier->sib2->radioResourceConfigCommon, tmp.LTE_radioResourceConfigCommon_BR = &carrier->sib2_BR->radioResourceConfigCommon;
(LTE_RadioResourceConfigCommonSIB_t *) &carrier->sib2_BR->radioResourceConfigCommon, tmp.tdd_Config = carrier->sib1->tdd_Config;
(struct LTE_PhysicalConfigDedicated *)NULL, tmp.schedulingInfoList = &carrier->sib1->schedulingInfoList;
(LTE_SCellToAddMod_r10_t *)NULL, tmp.ul_CarrierFreq = carrier->ul_CarrierFreq;
//(struct PhysicalConfigDedicatedSCell_r10 *)NULL, tmp.ul_Bandwidth = carrier->sib2->freqInfo.ul_Bandwidth;
(LTE_MeasObjectToAddMod_t **) NULL, tmp.additionalSpectrumEmission = &carrier->sib2->freqInfo.additionalSpectrumEmission;
(LTE_MAC_MainConfig_t *) NULL, 0, tmp.mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList;
(struct LTE_LogicalChannelConfig *)NULL, tmp.MBMS_Flag = carrier->MBMS_flag;
(LTE_MeasGapConfig_t *) NULL, tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
carrier->sib1->tdd_Config, rrc_mac_config_req_eNB(inst, &tmp);
NULL,
&carrier->sib1->schedulingInfoList,
carrier->ul_CarrierFreq,
carrier->sib2->freqInfo.ul_Bandwidth,
&carrier->sib2->freqInfo.additionalSpectrumEmission,
(LTE_MBSFN_SubframeConfigList_t *) carrier->sib2->mbsfn_SubframeConfigList,
carrier->MBMS_flag,
(LTE_MBSFN_AreaInfoList_r9_t *) & carrier->sib13->mbsfn_AreaInfoList_r9,
(LTE_PMCH_InfoList_r9_t *) NULL,
NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t*) NULL
);
} }
void handle_f1ap_setup_resp(f1ap_setup_resp_t *resp) { void handle_f1ap_setup_resp(f1ap_setup_resp_t *resp) {
+15 -63
View File
@@ -256,38 +256,13 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
if (radioResourceConfigDedicated->mac_MainConfig) if (radioResourceConfigDedicated->mac_MainConfig)
mac_MainConfig = &radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue; mac_MainConfig = &radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue;
rrc_mac_config_req_eNB_t tmp = {0};
rrc_mac_config_req_eNB( tmp.rnti = ctxt.rnti;
ctxt.instance, tmp.physicalConfigDedicated = radioResourceConfigDedicated->physicalConfigDedicated;
0, //primaryCC_id, tmp.mac_MainConfig = mac_MainConfig;
0,0,0,0,0,0, tmp.logicalChannelIdentity = 1;
ctxt.rnti, tmp.logicalChannelConfig = SRB1_logicalChannelConfig;
(LTE_BCCH_BCH_Message_t *) NULL, rrc_mac_config_req_eNB(ctxt.instance, &tmp);
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
radioResourceConfigDedicated->physicalConfigDedicated,
(LTE_SCellToAddMod_r10_t *)NULL,
//(struct PhysicalConfigDedicatedSCell_r10 *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
mac_MainConfig,
1,
SRB1_logicalChannelConfig,
NULL, // measGapConfig,
(LTE_TDD_Config_t *) NULL,
NULL,
(LTE_SchedulingInfoList_t *) NULL,
0, NULL, NULL, (LTE_MBSFN_SubframeConfigList_t *) NULL
, 0, (LTE_MBSFN_AreaInfoList_r9_t *) NULL, (LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL
,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t *) NULL
);
break; break;
} // case } // case
@@ -433,37 +408,14 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
if (DRB_configList->list.array[i]->logicalChannelIdentity) { if (DRB_configList->list.array[i]->logicalChannelIdentity) {
DRB2LCHAN[i] = (uint8_t) * DRB_configList->list.array[i]->logicalChannelIdentity; DRB2LCHAN[i] = (uint8_t) * DRB_configList->list.array[i]->logicalChannelIdentity;
} }
rrc_mac_config_req_eNB_t tmp = {0};
rrc_mac_config_req_eNB( tmp.rnti = ue_context_p->ue_context.rnti;
ctxt.instance, tmp.physicalConfigDedicated = physicalConfigDedicated;
0,0,0,0,0,0, tmp.mac_MainConfig = mac_MainConfig;
0, tmp.logicalChannelIdentity = DRB2LCHAN[i];
ue_context_p->ue_context.rnti, tmp.logicalChannelConfig = DRB_configList->list.array[i]->logicalChannelConfig;
(LTE_BCCH_BCH_Message_t *) NULL, tmp.measGapConfig = measGapConfig;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, rrc_mac_config_req_eNB(ctxt.instance, &tmp);
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
physicalConfigDedicated,
(LTE_SCellToAddMod_r10_t *)NULL,
//(struct PhysicalConfigDedicatedSCell_r10 *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
mac_MainConfig,
DRB2LCHAN[i],
DRB_configList->list.array[i]->logicalChannelConfig,
measGapConfig,
(LTE_TDD_Config_t *) NULL,
NULL,
(LTE_SchedulingInfoList_t *) NULL,
0, NULL, NULL, (LTE_MBSFN_SubframeConfigList_t *) NULL
, 0, (LTE_MBSFN_AreaInfoList_r9_t *) NULL, (LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t *) NULL
);
} }
} else { // remove LCHAN from MAC/PHY } else { // remove LCHAN from MAC/PHY
AssertFatal(1==0,"Can't handle this yet in DU\n"); AssertFatal(1==0,"Can't handle this yet in DU\n");
+154 -221
View File
@@ -735,160 +735,114 @@ config_dedicated_scell(int Mod_idP,
LTE_SCellToAddMod_r10_t *sCellToAddMod_r10) { LTE_SCellToAddMod_r10_t *sCellToAddMod_r10) {
} }
int rrc_mac_config_req_eNB(module_id_t Mod_idP, rrc_mac_config_req_eNB_t *param)
int rrc_mac_config_req_eNB(module_id_t Mod_idP, {
int CC_idP,
int physCellId,
int p_eNB,
int Ncp, int eutra_band, uint32_t dl_CarrierFreq,
int pbch_repetition,
rnti_t rntiP,
LTE_BCCH_BCH_Message_t *mib,
LTE_RadioResourceConfigCommonSIB_t *
radioResourceConfigCommon,
LTE_RadioResourceConfigCommonSIB_t *radioResourceConfigCommon_BR,
struct LTE_PhysicalConfigDedicated
*physicalConfigDedicated,
LTE_SCellToAddMod_r10_t *sCellToAddMod_r10,
LTE_MeasObjectToAddMod_t **measObj,
LTE_MAC_MainConfig_t *mac_MainConfig,
long logicalChannelIdentity,
LTE_LogicalChannelConfig_t *logicalChannelConfig,
LTE_MeasGapConfig_t *measGapConfig,
LTE_TDD_Config_t *tdd_Config,
LTE_MobilityControlInfo_t *mobilityControlInfo,
LTE_SchedulingInfoList_t *schedulingInfoList,
uint32_t ul_CarrierFreq,
long *ul_Bandwidth,
LTE_AdditionalSpectrumEmission_t *
additionalSpectrumEmission,
struct LTE_MBSFN_SubframeConfigList
*mbsfn_SubframeConfigList,
uint8_t MBMS_Flag,
LTE_MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList,
LTE_PMCH_InfoList_r9_t *pmch_InfoList,
LTE_SystemInformationBlockType1_v1310_IEs_t *sib1_v13ext,
uint8_t FeMBMS_Flag,
LTE_BCCH_DL_SCH_Message_MBMS_t *mib_fembms,
LTE_SchedulingInfo_MBMS_r14_t *schedulingInfo_fembms,
struct LTE_NonMBSFN_SubframeConfig_r14 *nonMBSFN_SubframeConfig,
LTE_SystemInformationBlockType1_MBMS_r14_t *sib1_mbms_r14_fembms,
LTE_MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList_fembms,
LTE_MBSFNAreaConfiguration_r9_t*mbms_AreaConfig
) {
int i; int i;
int UE_id = -1; int UE_id = -1;
eNB_MAC_INST *eNB = RC.mac[Mod_idP]; eNB_MAC_INST *eNB = RC.mac[Mod_idP];
UE_info_t *UE_info= &eNB->UE_info; UE_info_t *UE_info= &eNB->UE_info;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_IN); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_IN);
LOG_D(MAC, "RC.mac:%p mib:%p\n", RC.mac, mib);
if (mib != NULL) { if (param->mib != NULL) {
if (RC.mac == NULL) if (RC.mac == NULL)
l2_init_eNB(); l2_init_eNB();
//mac_top_init_eNB(); //mac_top_init_eNB();
RC.mac[Mod_idP]->common_channels[CC_idP].mib = mib; eNB->common_channels[param->CC_id].mib = param->mib;
RC.mac[Mod_idP]->common_channels[CC_idP].physCellId = physCellId; eNB->common_channels[param->CC_id].physCellId = param->physCellId;
RC.mac[Mod_idP]->common_channels[CC_idP].p_eNB = p_eNB; eNB->common_channels[param->CC_id].p_eNB = param->p_eNB;
RC.mac[Mod_idP]->common_channels[CC_idP].Ncp = Ncp; eNB->common_channels[param->CC_id].Ncp = param->Ncp;
RC.mac[Mod_idP]->common_channels[CC_idP].eutra_band = eutra_band; eNB->common_channels[param->CC_id].eutra_band = param->eutra_band;
RC.mac[Mod_idP]->common_channels[CC_idP].dl_CarrierFreq = dl_CarrierFreq; eNB->common_channels[param->CC_id].dl_CarrierFreq = param->dl_CarrierFreq;
LOG_A(MAC, LOG_A(MAC,
"Configuring MIB for instance %d, CCid %d : (band %d,N_RB_DL %d,Nid_cell %d,p %d,DL freq %u,phich_config.resource %d, phich_config.duration %d)\n", "Configuring MIB for instance %d, CCid %d : (band %d,N_RB_DL %d,Nid_cell %d,p %d,DL freq %u,phich_config.resource %ld, phich_config.duration %ld)\n",
Mod_idP, Mod_idP,
CC_idP, param->CC_id,
eutra_band, param->eutra_band,
to_prb((int)mib->message.dl_Bandwidth), to_prb(param->mib->message.dl_Bandwidth),
physCellId, param->physCellId,
p_eNB, param->p_eNB,
dl_CarrierFreq, param->dl_CarrierFreq,
(int)mib->message.phich_Config.phich_Resource, param->mib->message.phich_Config.phich_Resource,
(int)mib->message.phich_Config.phich_Duration); param->mib->message.phich_Config.phich_Duration);
config_mib(Mod_idP,CC_idP, config_mib(Mod_idP,
eutra_band, param->CC_id,
mib->message.dl_Bandwidth, param->eutra_band,
&mib->message.phich_Config, param->mib->message.dl_Bandwidth,
physCellId, &param->mib->message.phich_Config,
Ncp, param->physCellId,
p_eNB, param->Ncp,
dl_CarrierFreq, param->p_eNB,
ul_CarrierFreq, param->dl_CarrierFreq,
pbch_repetition param->ul_CarrierFreq,
); param->pbch_repetition);
mac_init_cell_params(Mod_idP,CC_idP); mac_init_cell_params(Mod_idP, param->CC_id);
if (schedulingInfoList!=NULL) { if (param->schedulingInfoList != NULL) {
RC.mac[Mod_idP]->common_channels[CC_idP].tdd_Config = tdd_Config; eNB->common_channels[param->CC_id].tdd_Config = param->tdd_Config;
RC.mac[Mod_idP]->common_channels[CC_idP].schedulingInfoList = schedulingInfoList; eNB->common_channels[param->CC_id].schedulingInfoList = param->schedulingInfoList;
config_sib1(Mod_idP,CC_idP,tdd_Config); config_sib1(Mod_idP, param->CC_id, param->tdd_Config);
} }
//TODO MBMS this must be passed through function //TODO MBMS this must be passed through function
/*if (schedulingInfoList_MBMS!=NULL) { /*if (schedulingInfoList_MBMS!=NULL) {
RC.mac[Mod_idP]->common_channels[CC_idP].schedulingInfoList_MBMS = schedulingInfoList_MBMS; eNB->common_channels[param->CC_id].schedulingInfoList_MBMS = schedulingInfoList_MBMS;
config_sib1_mbms(Mod_idP,CC_idP,tdd_Config); config_sib1_mbms(Mod_idP,param->CC_id,tdd_Config);
}*/ }*/
if (sib1_v13ext != NULL) { if (param->sib1_ext_r13 != NULL) {
RC.mac[Mod_idP]->common_channels[CC_idP].sib1_v13ext = sib1_v13ext; eNB->common_channels[param->CC_id].sib1_v13ext = param->sib1_ext_r13;
} }
AssertFatal(radioResourceConfigCommon != NULL, "radioResourceConfigCommon is null\n"); AssertFatal(param->radioResourceConfigCommon != NULL, "radioResourceConfigCommon is null\n");
LOG_I(MAC, "[CONFIG]SIB2/3 Contents (partial)\n"); LOG_I(MAC, "[CONFIG]SIB2/3 Contents (partial)\n");
LOG_I(MAC, "[CONFIG]pusch_config_common.n_SB = %ld\n", LOG_I(MAC, "[CONFIG]pusch_config_common.n_SB = %ld\n", param->radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.n_SB);
radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.n_SB); LOG_I(MAC, "[CONFIG]pusch_config_common.hoppingMode = %ld\n", param->radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode);
LOG_I(MAC, "[CONFIG]pusch_config_common.hoppingMode = %ld\n", LOG_I(MAC, "[CONFIG]pusch_config_common.pusch_HoppingOffset = %ld\n", param->radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset);
radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode); LOG_I(MAC, "[CONFIG]pusch_config_common.enable64QAM = %d\n", param->radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM);
LOG_I(MAC, "[CONFIG]pusch_config_common.pusch_HoppingOffset = %ld\n", LOG_I(MAC, "[CONFIG]pusch_config_common.groupHoppingEnabled = %d\n", param->radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled);
radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset); LOG_I(MAC, "[CONFIG]pusch_config_common.groupAssignmentPUSCH = %ld\n", param->radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH);
LOG_I(MAC, "[CONFIG]pusch_config_common.enable64QAM = %d\n", LOG_I(MAC, "[CONFIG]pusch_config_common.sequenceHoppingEnabled = %d\n", param->radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled);
radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM); LOG_I(MAC, "[CONFIG]pusch_config_common.cyclicShift = %ld\n", param->radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift);
LOG_I(MAC, "[CONFIG]pusch_config_common.groupHoppingEnabled = %d\n", AssertFatal(param->radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx > 0, "radioResourceconfigCommon %ld == 0\n", param->radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx);
radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled); eNB->common_channels[param->CC_id].radioResourceConfigCommon = param->radioResourceConfigCommon;
LOG_I(MAC, "[CONFIG]pusch_config_common.groupAssignmentPUSCH = %ld\n", eNB->common_channels[param->CC_id].radioResourceConfigCommon_BR = param->LTE_radioResourceConfigCommon_BR;
radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH);
LOG_I(MAC, "[CONFIG]pusch_config_common.sequenceHoppingEnabled = %d\n",
radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled);
LOG_I(MAC, "[CONFIG]pusch_config_common.cyclicShift = %ld\n",
radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift);
AssertFatal(radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx > 0,
"radioResourceconfigCommon %d == 0\n",
(int) radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx);
RC.mac[Mod_idP]->common_channels[CC_idP].radioResourceConfigCommon = radioResourceConfigCommon;
RC.mac[Mod_idP]->common_channels[CC_idP].radioResourceConfigCommon_BR = radioResourceConfigCommon_BR;
if (ul_CarrierFreq > 0) RC.mac[Mod_idP]->common_channels[CC_idP].ul_CarrierFreq = ul_CarrierFreq; if (param->ul_CarrierFreq > 0)
eNB->common_channels[param->CC_id].ul_CarrierFreq = param->ul_CarrierFreq;
if (ul_Bandwidth) RC.mac[Mod_idP]->common_channels[CC_idP].ul_Bandwidth = *ul_Bandwidth; if (param->ul_Bandwidth)
else RC.mac[Mod_idP]->common_channels[CC_idP].ul_Bandwidth = RC.mac[Mod_idP]->common_channels[CC_idP].mib->message.dl_Bandwidth; eNB->common_channels[param->CC_id].ul_Bandwidth = *param->ul_Bandwidth;
else
eNB->common_channels[param->CC_id].ul_Bandwidth = eNB->common_channels[param->CC_id].mib->message.dl_Bandwidth;
config_sib2(Mod_idP, CC_idP, radioResourceConfigCommon, config_sib2(Mod_idP,
radioResourceConfigCommon_BR, param->CC_id,
NULL, ul_Bandwidth, additionalSpectrumEmission, param->radioResourceConfigCommon,
mbsfn_SubframeConfigList, param->LTE_radioResourceConfigCommon_BR,
mib->message.dl_Bandwidth); NULL,
param->ul_Bandwidth,
param->additionalSpectrumEmission,
param->mbsfn_SubframeConfigList,
param->mib->message.dl_Bandwidth);
} // mib != NULL } // mib != NULL
if (mobilityControlInfo !=NULL) { if (param->mobilityControlInfo != NULL) {
if ((UE_id = add_new_ue(Mod_idP, CC_idP, if ((UE_id = add_new_ue(Mod_idP, param->CC_id, param->rnti, -1, 0)) == -1) {
rntiP, -1,
0
)) == -1) {
LOG_E(MAC, "%s:%d: fatal\n", __FILE__, __LINE__); LOG_E(MAC, "%s:%d: fatal\n", __FILE__, __LINE__);
abort(); abort();
} }
} }
if (logicalChannelIdentity > 0) { // is SRB1,2 or DRB if (param->logicalChannelIdentity > 0) { // is SRB1,2 or DRB
if ((UE_id = find_UE_id(Mod_idP, rntiP)) < 0) { if ((UE_id = find_UE_id(Mod_idP, param->rnti)) < 0) {
LOG_E(MAC,"Configuration received for unknown UE (%x), shouldn't happen\n",rntiP); LOG_E(MAC, "Configuration received for unknown UE (%x), shouldn't happen\n", param->rnti);
return(-1); return(-1);
} }
int idx = -1; int idx = -1;
UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id]; UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
for (int i = 0; i < sched_ctrl->dl_lc_num; ++i) { for (int i = 0; i < sched_ctrl->dl_lc_num; ++i) {
if (sched_ctrl->dl_lc_ids[i] == logicalChannelIdentity) { if (sched_ctrl->dl_lc_ids[i] == param->logicalChannelIdentity) {
/* TODO this might also mean we have to remove it, not clear */ /* TODO this might also mean we have to remove it, not clear */
idx = i; idx = i;
break; break;
@@ -896,190 +850,169 @@ int rrc_mac_config_req_eNB(module_id_t Mod_idP,
} }
if (idx < 0) { if (idx < 0) {
sched_ctrl->dl_lc_num++; sched_ctrl->dl_lc_num++;
sched_ctrl->dl_lc_ids[sched_ctrl->dl_lc_num-1] = logicalChannelIdentity; sched_ctrl->dl_lc_ids[sched_ctrl->dl_lc_num - 1] = param->logicalChannelIdentity;
sched_ctrl->dl_lc_bytes[sched_ctrl->dl_lc_num-1] = 0; sched_ctrl->dl_lc_bytes[sched_ctrl->dl_lc_num-1] = 0;
LOG_I(MAC, "UE %d RNTI %x adding LC %ld idx %d to scheduling control (total %d)\n", UE_id, rntiP, logicalChannelIdentity, sched_ctrl->dl_lc_num-1, sched_ctrl->dl_lc_num); LOG_I(MAC, "UE %d RNTI %x adding LC %ld idx %d to scheduling control (total %d)\n", UE_id, param->rnti, param->logicalChannelIdentity, sched_ctrl->dl_lc_num - 1, sched_ctrl->dl_lc_num);
if (logicalChannelIdentity == 1) { // if it is SRB1, add SRB2 directly because RRC does not indicate this separately if (param->logicalChannelIdentity == 1) { // if it is SRB1, add SRB2 directly because RRC does not indicate this separately
sched_ctrl->dl_lc_num++; sched_ctrl->dl_lc_num++;
sched_ctrl->dl_lc_ids[sched_ctrl->dl_lc_num-1] = 2; sched_ctrl->dl_lc_ids[sched_ctrl->dl_lc_num-1] = 2;
sched_ctrl->dl_lc_bytes[sched_ctrl->dl_lc_num-1] = 0; sched_ctrl->dl_lc_bytes[sched_ctrl->dl_lc_num-1] = 0;
LOG_I(MAC, "UE %d RNTI %x adding LC 2 idx %d to scheduling control (total %d)\n", UE_id, rntiP, sched_ctrl->dl_lc_num-1, sched_ctrl->dl_lc_num); LOG_I(MAC, "UE %d RNTI %x adding LC 2 idx %d to scheduling control (total %d)\n", UE_id, param->rnti, sched_ctrl->dl_lc_num - 1, sched_ctrl->dl_lc_num);
} }
} }
} }
// SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup // SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup
if (logicalChannelConfig != NULL) { // check for eMTC specific things if (param->logicalChannelConfig != NULL) { // check for eMTC specific things
UE_id = find_UE_id(Mod_idP, rntiP); UE_id = find_UE_id(Mod_idP, param->rnti);
if (UE_id<0) { if (UE_id<0) {
LOG_E(MAC,"Configuration received for unknown UE (%x), shouldn't happen\n",rntiP); LOG_E(MAC, "Configuration received for unknown UE (%x), shouldn't happen\n", param->rnti);
return(-1); return(-1);
} }
if (logicalChannelConfig) { if (param->logicalChannelConfig) {
UE_info->UE_template[CC_idP][UE_id].lcgidmap[logicalChannelIdentity] = *logicalChannelConfig->ul_SpecificParameters->logicalChannelGroup; UE_info->UE_template[param->CC_id][UE_id].lcgidmap[param->logicalChannelIdentity] = *param->logicalChannelConfig->ul_SpecificParameters->logicalChannelGroup;
UE_info->UE_template[CC_idP][UE_id].lcgidpriority[logicalChannelIdentity] = logicalChannelConfig->ul_SpecificParameters->priority; UE_info->UE_template[param->CC_id][UE_id].lcgidpriority[param->logicalChannelIdentity] = param->logicalChannelConfig->ul_SpecificParameters->priority;
} else UE_info->UE_template[CC_idP][UE_id].lcgidmap[logicalChannelIdentity] = 0; } else
UE_info->UE_template[param->CC_id][UE_id].lcgidmap[param->logicalChannelIdentity] = 0;
} }
if (physicalConfigDedicated != NULL) { if (param->physicalConfigDedicated != NULL) {
UE_id = find_UE_id(Mod_idP, rntiP); UE_id = find_UE_id(Mod_idP, param->rnti);
if (UE_id<0) { if (UE_id<0) {
LOG_E(MAC,"Configuration received for unknown UE (%x), shouldn't happen\n",rntiP); LOG_E(MAC, "Configuration received for unknown UE (%x), shouldn't happen\n", param->rnti);
return(-1); return(-1);
} }
UE_info->UE_template[CC_idP][UE_id].physicalConfigDedicated = physicalConfigDedicated; UE_info->UE_template[param->CC_id][UE_id].physicalConfigDedicated = param->physicalConfigDedicated;
LOG_I(MAC,"Added physicalConfigDedicated %p for %d.%d\n",physicalConfigDedicated,CC_idP,UE_id); LOG_I(MAC, "Added physicalConfigDedicated %p for %d.%d\n", param->physicalConfigDedicated, param->CC_id, UE_id);
} }
if (sCellToAddMod_r10 != NULL) { if (param->sCellToAddMod_r10 != NULL) {
if (UE_id<0) { if (UE_id<0) {
LOG_E(MAC,"Configuration received for unknown UE (%x), shouldn't happen\n",rntiP); LOG_E(MAC, "Configuration received for unknown UE (%x), shouldn't happen\n", param->rnti);
return(-1); return(-1);
} }
AssertFatal(UE_id>=0,"Configuration received for unknown UE (%x), shouldn't happen\n",rntiP); AssertFatal(UE_id >= 0, "Configuration received for unknown UE (%x), shouldn't happen\n", param->rnti);
config_dedicated_scell(Mod_idP, rntiP, sCellToAddMod_r10); config_dedicated_scell(Mod_idP, param->rnti, param->sCellToAddMod_r10);
} }
if (mbsfn_SubframeConfigList != NULL) { if (param->mbsfn_SubframeConfigList != NULL) {
LOG_I(MAC, LOG_I(MAC, "[eNB %d][CONFIG] Received %d subframe allocation pattern for MBSFN\n", Mod_idP, param->mbsfn_SubframeConfigList->list.count);
"[eNB %d][CONFIG] Received %d subframe allocation pattern for MBSFN\n", eNB->common_channels[0].num_sf_allocation_pattern = param->mbsfn_SubframeConfigList->list.count;
Mod_idP, mbsfn_SubframeConfigList->list.count);
RC.mac[Mod_idP]->common_channels[0].num_sf_allocation_pattern = mbsfn_SubframeConfigList->list.count;
for (i = 0; i < mbsfn_SubframeConfigList->list.count; i++) { for (i = 0; i < param->mbsfn_SubframeConfigList->list.count; i++) {
RC.mac[Mod_idP]->common_channels[0].mbsfn_SubframeConfig[i] = mbsfn_SubframeConfigList->list.array[i]; eNB->common_channels[0].mbsfn_SubframeConfig[i] = param->mbsfn_SubframeConfigList->list.array[i];
LOG_I(MAC, LOG_I(MAC, "[eNB %d][CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", Mod_idP, i, eNB->common_channels[0].mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]);
"[eNB %d][CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n",
Mod_idP, i,
RC.mac[Mod_idP]->
common_channels[0].mbsfn_SubframeConfig[i]->
subframeAllocation.choice.oneFrame.buf[0]);
} }
RC.mac[Mod_idP]->common_channels[0].MBMS_flag = MBMS_Flag; eNB->common_channels[0].MBMS_flag = param->MBMS_Flag;
config_sib2_mbsfn_part(Mod_idP,0,mbsfn_SubframeConfigList); config_sib2_mbsfn_part(Mod_idP, 0, param->mbsfn_SubframeConfigList);
} }
if (nonMBSFN_SubframeConfig != NULL) { if (param->nonMBSFN_SubframeConfig != NULL) {
LOG_D(MAC, LOG_D(MAC,
"[eNB %d][CONFIG] Received a non MBSFN subframe allocation pattern (%x,%x):%x for FeMBMS-CAS\n", "[eNB %d][CONFIG] Received a non MBSFN subframe allocation pattern (%x,%x):%x for FeMBMS-CAS\n",
Mod_idP, nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[0],nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[1], Mod_idP,
nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[0]<<1 | nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[1]>>7 ); param->nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[0],
//RC.mac[Mod_idP]->common_channels[0].non_mbsfn_SubframeConfig = (int)(nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[0]<<1) | (int)(nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[1]>>7); param->nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[1],
RC.mac[Mod_idP]->common_channels[0].non_mbsfn_SubframeConfig = nonMBSFN_SubframeConfig; param->nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[0] << 1 | param->nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[1] >> 7);
nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP]; // eNB->common_channels[0].non_mbsfn_SubframeConfig = (int)(nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[0]<<1) | (int)(nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[1]>>7);
eNB->common_channels[0].non_mbsfn_SubframeConfig = param->nonMBSFN_SubframeConfig;
nfapi_config_request_t *cfg = &eNB->config[param->CC_id];
cfg->fembms_config.non_mbsfn_config_flag.value = 1; cfg->fembms_config.non_mbsfn_config_flag.value = 1;
cfg->fembms_config.non_mbsfn_config_flag.tl.tag = NFAPI_FEMBMS_CONFIG_NON_MBSFN_FLAG_TAG; cfg->fembms_config.non_mbsfn_config_flag.tl.tag = NFAPI_FEMBMS_CONFIG_NON_MBSFN_FLAG_TAG;
cfg->num_tlv++; cfg->num_tlv++;
cfg->fembms_config.non_mbsfn_subframeconfig.value = (nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[0]<<1 | nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[1]>>7); cfg->fembms_config.non_mbsfn_subframeconfig.value = (param->nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[0] << 1 | param->nonMBSFN_SubframeConfig->subframeAllocation_r14.buf[1] >> 7);
cfg->fembms_config.non_mbsfn_subframeconfig.tl.tag = NFAPI_FEMBMS_CONFIG_NON_MBSFN_SUBFRAMECONFIG_TAG; cfg->fembms_config.non_mbsfn_subframeconfig.tl.tag = NFAPI_FEMBMS_CONFIG_NON_MBSFN_SUBFRAMECONFIG_TAG;
cfg->num_tlv++; cfg->num_tlv++;
cfg->fembms_config.radioframe_allocation_period.value = nonMBSFN_SubframeConfig->radioFrameAllocationPeriod_r14; cfg->fembms_config.radioframe_allocation_period.value = param->nonMBSFN_SubframeConfig->radioFrameAllocationPeriod_r14;
cfg->fembms_config.radioframe_allocation_period.tl.tag = NFAPI_FEMBMS_CONFIG_RADIOFRAME_ALLOCATION_PERIOD_TAG; cfg->fembms_config.radioframe_allocation_period.tl.tag = NFAPI_FEMBMS_CONFIG_RADIOFRAME_ALLOCATION_PERIOD_TAG;
cfg->num_tlv++; cfg->num_tlv++;
cfg->fembms_config.radioframe_allocation_offset.value = nonMBSFN_SubframeConfig->radioFrameAllocationOffset_r14; cfg->fembms_config.radioframe_allocation_offset.value = param->nonMBSFN_SubframeConfig->radioFrameAllocationOffset_r14;
cfg->fembms_config.radioframe_allocation_offset.tl.tag = NFAPI_FEMBMS_CONFIG_RADIOFRAME_ALLOCATION_OFFSET_TAG; cfg->fembms_config.radioframe_allocation_offset.tl.tag = NFAPI_FEMBMS_CONFIG_RADIOFRAME_ALLOCATION_OFFSET_TAG;
cfg->num_tlv++; cfg->num_tlv++;
//We need to reuse current MCH scheduler //We need to reuse current MCH scheduler
//TOCHECK whether we can simply reuse current mbsfn_SubframeConfig stuff //TOCHECK whether we can simply reuse current mbsfn_SubframeConfig stuff
RC.mac[Mod_idP]->common_channels[0].FeMBMS_flag = FeMBMS_Flag; eNB->common_channels[0].FeMBMS_flag = param->FeMBMS_Flag;
} }
if (mbsfn_AreaInfoList != NULL) { if (param->mbsfn_AreaInfoList != NULL) {
// One eNB could be part of multiple mbsfn syc area, this could change over time so reset each time // One eNB could be part of multiple mbsfn syc area, this could change over time so reset each time
LOG_I(MAC,"[eNB %d][CONFIG] Received %d MBSFN Area Info\n", Mod_idP, mbsfn_AreaInfoList->list.count); LOG_I(MAC, "[eNB %d][CONFIG] Received %d MBSFN Area Info\n", Mod_idP, param->mbsfn_AreaInfoList->list.count);
RC.mac[Mod_idP]->common_channels[0].num_active_mbsfn_area = mbsfn_AreaInfoList->list.count; eNB->common_channels[0].num_active_mbsfn_area = param->mbsfn_AreaInfoList->list.count;
for (i =0; i< mbsfn_AreaInfoList->list.count; i++) { for (i = 0; i < param->mbsfn_AreaInfoList->list.count; i++) {
RC.mac[Mod_idP]->common_channels[0].mbsfn_AreaInfo[i] = mbsfn_AreaInfoList->list.array[i]; eNB->common_channels[0].mbsfn_AreaInfo[i] = param->mbsfn_AreaInfoList->list.array[i];
LOG_I(MAC,"[eNB %d][CONFIG] MBSFN_AreaInfo[%d]: MCCH Repetition Period = %ld\n", Mod_idP,i, LOG_I(MAC, "[eNB %d][CONFIG] MBSFN_AreaInfo[%d]: MCCH Repetition Period = %ld\n", Mod_idP, i, eNB->common_channels[0].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9);
RC.mac[Mod_idP]->common_channels[0].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9); // config_sib13(Mod_idP,0,i,eNB->common_channels[0].mbsfn_AreaInfo[i]->mbsfn_AreaId_r9);
// config_sib13(Mod_idP,0,i,RC.mac[Mod_idP]->common_channels[0].mbsfn_AreaInfo[i]->mbsfn_AreaId_r9); config_sib13(Mod_idP, 0, i, eNB->common_channels[0].mbsfn_AreaInfo[i]->mbsfn_AreaId_r9);
config_sib13(Mod_idP,0,i,RC.mac[Mod_idP]->common_channels[0].mbsfn_AreaInfo[i]->mbsfn_AreaId_r9);
} }
} }
if(mbms_AreaConfig != NULL) { if (param->mbms_AreaConfiguration != NULL) {
RC.mac[Mod_idP]->common_channels[0].commonSF_AllocPeriod_r9 = mbms_AreaConfig->commonSF_AllocPeriod_r9; eNB->common_channels[0].commonSF_AllocPeriod_r9 = param->mbms_AreaConfiguration->commonSF_AllocPeriod_r9;
LOG_I(MAC, "[eNB %d][CONFIG] LTE_MBSFNAreaConfiguration_r9_t(%p) commonSF_AllocPeriod_r9(%d)\n",Mod_idP,mbms_AreaConfig, RC.mac[Mod_idP]->common_channels[0].commonSF_AllocPeriod_r9); LOG_I(MAC, "[eNB %d][CONFIG] commonSF_AllocPeriod_r9(%d)\n", Mod_idP, eNB->common_channels[0].commonSF_AllocPeriod_r9);
for(i=0; i < mbms_AreaConfig->commonSF_Alloc_r9.list.count; i++){ for (i = 0; i < param->mbms_AreaConfiguration->commonSF_Alloc_r9.list.count; i++) {
RC.mac[Mod_idP]->common_channels[0].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] = mbms_AreaConfig->commonSF_Alloc_r9.list.array[i]; eNB->common_channels[0].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] = param->mbms_AreaConfiguration->commonSF_Alloc_r9.list.array[i];
LOG_I(RRC,"[eNB %d][CONFIG] MBSFNArea[%d] commonSF_Alloc_r9: radioframeAllocationPeriod(%ldn),radioframeAllocationOffset(%ld), subframeAllocation(%x)\n" LOG_I(RRC,
,Mod_idP,i "[eNB %d][CONFIG] MBSFNArea[%d] commonSF_Alloc_r9: radioframeAllocationPeriod(%ldn),radioframeAllocationOffset(%ld), subframeAllocation(%x)\n",
,RC.mac[Mod_idP]->common_channels[0].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->radioframeAllocationPeriod Mod_idP,
,RC.mac[Mod_idP]->common_channels[0].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->radioframeAllocationOffset i,
,RC.mac[Mod_idP]->common_channels[0].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]); eNB->common_channels[0].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->radioframeAllocationPeriod,
eNB->common_channels[0].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->radioframeAllocationOffset,
eNB->common_channels[0].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]);
} }
} }
if (pmch_InfoList != NULL) { if (param->pmch_InfoList != NULL) {
// LOG_I(MAC,"DUY: lcid when entering rrc_mac config_req is %02d\n",(pmch_InfoList->list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9)); // LOG_I(MAC,"DUY: lcid when entering rrc_mac config_req is %02d\n",(pmch_InfoList->list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9));
LOG_I(MAC, "[CONFIG] Number of PMCH in this MBSFN Area %d\n", LOG_I(MAC, "[CONFIG] Number of PMCH in this MBSFN Area %d\n", param->pmch_InfoList->list.count);
pmch_InfoList->list.count);
for (i = 0; i < pmch_InfoList->list.count; i++) { for (i = 0; i < param->pmch_InfoList->list.count; i++) {
RC.mac[Mod_idP]->common_channels[0].pmch_Config[i] = eNB->common_channels[0].pmch_Config[i] = &param->pmch_InfoList->list.array[i]->pmch_Config_r9;
&pmch_InfoList->list.array[i]->pmch_Config_r9; LOG_I(MAC, "[CONFIG] PMCH[%d]: This PMCH stop (sf_AllocEnd_r9) at subframe %ldth\n", i, eNB->common_channels[0].pmch_Config[i]->sf_AllocEnd_r9);
LOG_I(MAC, LOG_I(MAC, "[CONFIG] PMCH[%d]: mch_Scheduling_Period = %ld\n", i, eNB->common_channels[0].pmch_Config[i]->mch_SchedulingPeriod_r9);
"[CONFIG] PMCH[%d]: This PMCH stop (sf_AllocEnd_r9) at subframe %ldth\n", LOG_I(MAC, "[CONFIG] PMCH[%d]: dataMCS = %ld\n", i, eNB->common_channels[0].pmch_Config[i]->dataMCS_r9);
i,
RC.mac[Mod_idP]->common_channels[0].
pmch_Config[i]->sf_AllocEnd_r9);
LOG_I(MAC, "[CONFIG] PMCH[%d]: mch_Scheduling_Period = %ld\n",
i,
RC.mac[Mod_idP]->common_channels[0].
pmch_Config[i]->mch_SchedulingPeriod_r9);
LOG_I(MAC, "[CONFIG] PMCH[%d]: dataMCS = %ld\n", i,
RC.mac[Mod_idP]->common_channels[0].
pmch_Config[i]->dataMCS_r9);
// MBMS session info list in each MCH // MBMS session info list in each MCH
RC.mac[Mod_idP]->common_channels[0].mbms_SessionList[i] = eNB->common_channels[0].mbms_SessionList[i] = &param->pmch_InfoList->list.array[i]->mbms_SessionInfoList_r9;
&pmch_InfoList->list.array[i]->mbms_SessionInfoList_r9; LOG_I(MAC, "PMCH[%d] Number of session (MTCH) is: %d\n", i, eNB->common_channels[0].mbms_SessionList[i]->list.count);
LOG_I(MAC, "PMCH[%d] Number of session (MTCH) is: %d\n", i, for (int ii = 0; ii < eNB->common_channels[0].mbms_SessionList[i]->list.count; ii++) {
RC.mac[Mod_idP]->common_channels[0]. LOG_I(MAC, "PMCH[%d] MBMS Session[%d] is: %lu\n", i, ii, eNB->common_channels[0].mbms_SessionList[i]->list.array[ii]->logicalChannelIdentity_r9);
mbms_SessionList[i]->list.count); }
for(int ii=0; ii < RC.mac[Mod_idP]->common_channels[0].mbms_SessionList[i]->list.count;ii++){
LOG_I(MAC, "PMCH[%d] MBMS Session[%d] is: %lu\n", i,ii,
RC.mac[Mod_idP]->common_channels[0].mbms_SessionList[i]->list.array[ii]->logicalChannelIdentity_r9);
}
} }
} }
LOG_D(MAC, "%s() %s:%d RC.mac[Mod_idP]->if_inst->PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, RC.mac[Mod_idP]->if_inst->PHY_config_req); LOG_D(MAC, "%s() %s:%d eNB->if_inst->PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, eNB->if_inst->PHY_config_req);
// if in nFAPI mode // if in nFAPI mode
if ( if ((NFAPI_MODE == NFAPI_MODE_PNF || NFAPI_MODE == NFAPI_MODE_VNF) && (eNB->if_inst->PHY_config_req == NULL)) {
(NFAPI_MODE == NFAPI_MODE_PNF ||NFAPI_MODE == NFAPI_MODE_VNF) && while (eNB->if_inst->PHY_config_req == NULL) {
(RC.mac[Mod_idP]->if_inst->PHY_config_req == NULL) // DJP AssertFatal(eNB->if_inst->PHY_config_req != NULL,"if_inst->phy_config_request is null\n");
) {
while(RC.mac[Mod_idP]->if_inst->PHY_config_req == NULL) {
// DJP AssertFatal(RC.mac[Mod_idP]->if_inst->PHY_config_req != NULL,"if_inst->phy_config_request is null\n");
usleep(100 * 1000); usleep(100 * 1000);
LOG_I(MAC, "Waiting for PHY_config_req\n"); LOG_I(MAC, "Waiting for PHY_config_req\n");
} }
} }
if (radioResourceConfigCommon != NULL) { if (param->radioResourceConfigCommon != NULL) {
PHY_Config_t phycfg; PHY_Config_t phycfg;
phycfg.Mod_id = Mod_idP; phycfg.Mod_id = Mod_idP;
phycfg.CC_id = CC_idP; phycfg.CC_id = param->CC_id;
phycfg.cfg = &RC.mac[Mod_idP]->config[CC_idP]; phycfg.cfg = &eNB->config[param->CC_id];
if (RC.mac[Mod_idP]->if_inst->PHY_config_req) RC.mac[Mod_idP]->if_inst->PHY_config_req(&phycfg); if (eNB->if_inst->PHY_config_req)
eNB->if_inst->PHY_config_req(&phycfg);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT);
} }
RC.mac[Mod_idP]->scheduler_mode = global_scheduler_mode; eNB->scheduler_mode = global_scheduler_mode;
return(0); return(0);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/* /*
* Configure local CDRX timers and thresholds following the drx_configuration input * Configure local CDRX timers and thresholds following the drx_configuration input
+40 -37
View File
@@ -915,43 +915,46 @@ int generate_dlsch_header(unsigned char *mac_header,
@param mbms_AreaConfiguration pointer to eMBMS MBSFN Area Configuration @param mbms_AreaConfiguration pointer to eMBMS MBSFN Area Configuration
*/ */
int rrc_mac_config_req_eNB(module_id_t module_idP, typedef struct {
int CC_id, int CC_id;
int physCellId, int physCellId;
int p_eNB, int p_eNB;
int Ncp, int Ncp;
int eutra_band, uint32_t dl_CarrierFreq, int eutra_band;
int pbch_repetition, uint32_t dl_CarrierFreq;
rnti_t rntiP, int pbch_repetition;
LTE_BCCH_BCH_Message_t *mib, rnti_t rnti;
LTE_RadioResourceConfigCommonSIB_t *radioResourceConfigCommon, LTE_BCCH_BCH_Message_t *mib;
LTE_RadioResourceConfigCommonSIB_t *LTE_radioResourceConfigCommon_BR, LTE_RadioResourceConfigCommonSIB_t *radioResourceConfigCommon;
struct LTE_PhysicalConfigDedicated *physicalConfigDedicated, LTE_RadioResourceConfigCommonSIB_t *LTE_radioResourceConfigCommon_BR;
LTE_SCellToAddMod_r10_t *sCellToAddMod_r10, struct LTE_PhysicalConfigDedicated *physicalConfigDedicated;
LTE_MeasObjectToAddMod_t **measObj, LTE_SCellToAddMod_r10_t *sCellToAddMod_r10;
LTE_MAC_MainConfig_t *mac_MainConfig, LTE_MeasObjectToAddMod_t **measObj;
long logicalChannelIdentity, LTE_MAC_MainConfig_t *mac_MainConfig;
LTE_LogicalChannelConfig_t *logicalChannelConfig, long logicalChannelIdentity;
LTE_MeasGapConfig_t *measGapConfig, LTE_LogicalChannelConfig_t *logicalChannelConfig;
LTE_TDD_Config_t *tdd_Config, LTE_MeasGapConfig_t *measGapConfig;
LTE_MobilityControlInfo_t *mobilityControlInfo, LTE_TDD_Config_t *tdd_Config;
LTE_SchedulingInfoList_t *schedulingInfoList, LTE_MobilityControlInfo_t *mobilityControlInfo;
uint32_t ul_CarrierFreq, LTE_SchedulingInfoList_t *schedulingInfoList;
long *ul_Bandwidth, uint32_t ul_CarrierFreq;
LTE_AdditionalSpectrumEmission_t *additionalSpectrumEmission, long *ul_Bandwidth;
struct LTE_MBSFN_SubframeConfigList *mbsfn_SubframeConfigList, LTE_AdditionalSpectrumEmission_t *additionalSpectrumEmission;
uint8_t MBMS_Flag, struct LTE_MBSFN_SubframeConfigList *mbsfn_SubframeConfigList;
LTE_MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList, uint8_t MBMS_Flag;
LTE_PMCH_InfoList_r9_t *pmch_InfoList, LTE_MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList;
LTE_SystemInformationBlockType1_v1310_IEs_t *sib1_ext_r13, LTE_PMCH_InfoList_r9_t *pmch_InfoList;
uint8_t FeMBMS_Flag, LTE_SystemInformationBlockType1_v1310_IEs_t *sib1_ext_r13;
LTE_BCCH_DL_SCH_Message_MBMS_t *mib_fembms, uint8_t FeMBMS_Flag;
LTE_SchedulingInfo_MBMS_r14_t *schedulingInfo_fembms, LTE_BCCH_DL_SCH_Message_MBMS_t *mib_fembms;
struct LTE_NonMBSFN_SubframeConfig_r14 *nonMBSFN_SubframeConfig, LTE_SchedulingInfo_MBMS_r14_t *schedulingInfo_fembms;
LTE_SystemInformationBlockType1_MBMS_r14_t *sib1_mbms_r14_fembms, struct LTE_NonMBSFN_SubframeConfig_r14 *nonMBSFN_SubframeConfig;
LTE_MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList_fembms, LTE_SystemInformationBlockType13_r9_t *sib1_mbms_r14_fembms;
LTE_MBSFNAreaConfiguration_r9_t * mbms_AreaConfiguration LTE_MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList_fembms;
); LTE_MBSFNAreaConfiguration_r9_t *mbms_AreaConfiguration;
} rrc_mac_config_req_eNB_t;
int rrc_mac_config_req_eNB(module_id_t module_idP, rrc_mac_config_req_eNB_t *);
/** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI), RRCConnectionSetup and RRCConnectionReconfiguration messages. /** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI), RRCConnectionSetup and RRCConnectionReconfiguration messages.
@param Mod_id Instance ID of ue @param Mod_id Instance ID of ue
+20 -7
View File
@@ -596,9 +596,16 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
* so we return true afterwards * so we return true afterwards
*/ */
for (pdcp_uid=0; pdcp_uid< MAX_MOBILES_PER_ENB; pdcp_uid++) { if (ctxt_pP->enb_flag == ENB_FLAG_NO)
if (pdcp_enb[ctxt_pP->module_id].rnti[pdcp_uid] == ctxt_pP->rnti ) pdcp_uid = 0;
break; else
for (pdcp_uid = 0; pdcp_uid < MAX_MOBILES_PER_ENB; pdcp_uid++)
if (pdcp_enb[ctxt_pP->module_id].rnti[pdcp_uid] == ctxt_pP->rnti)
break;
if (pdcp_uid == MAX_MOBILES_PER_ENB) {
LOG_W(PDCP, "stats on not recorded rnti: %x\n", ctxt_pP->rnti);
pdcp_uid = 0;
} }
LOG_D(PDCP,"ueid %d lcid %d tx seq num %d\n", pdcp_uid, (int)(rb_idP+rb_offset), current_sn); LOG_D(PDCP,"ueid %d lcid %d tx seq num %d\n", pdcp_uid, (int)(rb_idP+rb_offset), current_sn);
@@ -1158,10 +1165,16 @@ pdcp_data_ind(
} }
/* Update PDCP statistics */ /* Update PDCP statistics */
for (pdcp_uid=0; pdcp_uid< MAX_MOBILES_PER_ENB; pdcp_uid++) { if (ctxt_pP->enb_flag == ENB_FLAG_NO)
if (pdcp_enb[ctxt_pP->module_id].rnti[pdcp_uid] == ctxt_pP->rnti ) { pdcp_uid = 0;
break; else
} for (pdcp_uid = 0; pdcp_uid < MAX_MOBILES_PER_ENB; pdcp_uid++)
if (pdcp_enb[ctxt_pP->module_id].rnti[pdcp_uid] == ctxt_pP->rnti)
break;
if (pdcp_uid == MAX_MOBILES_PER_ENB) {
LOG_W(PDCP, "stats on not recorded rnti: %x\n", ctxt_pP->rnti);
pdcp_uid = 0;
} }
Pdcp_stats_rx[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]++; Pdcp_stats_rx[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]++;
-1
View File
@@ -123,7 +123,6 @@ extern uint32_t Pdcp_stats_rx_outoforder[MAX_eNB][MAX_MOBILES_PER_ENB][NB_RB_MAX
void pdcp_update_perioidical_stats(const protocol_ctxt_t *const ctxt_pP); void pdcp_update_perioidical_stats(const protocol_ctxt_t *const ctxt_pP);
/*Packet Probing for agent PDCP*/ /*Packet Probing for agent PDCP*/
//uint64_t *pdcp_packet_counter; //uint64_t *pdcp_packet_counter;
//uint64_t *pdcp_size_packet; //uint64_t *pdcp_size_packet;
+1 -2
View File
@@ -704,8 +704,7 @@ typedef struct {
LTE_BCCH_DL_SCH_Message_t systemInformation; LTE_BCCH_DL_SCH_Message_t systemInformation;
LTE_BCCH_DL_SCH_Message_t systemInformation_BR; LTE_BCCH_DL_SCH_Message_t systemInformation_BR;
LTE_BCCH_BCH_Message_MBMS_t mib_fembms; LTE_BCCH_BCH_Message_MBMS_t mib_fembms;
LTE_BCCH_DL_SCH_Message_MBMS_t siblock1_MBMS; LTE_BCCH_DL_SCH_Message_MBMS_t siblock1_MBMS;
LTE_BCCH_DL_SCH_Message_MBMS_t systemInformation_MBMS;
LTE_SchedulingInfo_MBMS_r14_t schedulingInfo_MBMS; LTE_SchedulingInfo_MBMS_r14_t schedulingInfo_MBMS;
LTE_PLMN_IdentityInfo_t PLMN_identity_info_MBMS[6]; LTE_PLMN_IdentityInfo_t PLMN_identity_info_MBMS[6];
LTE_MCC_MNC_Digit_t dummy_mcc_MBMS[6][3], dummy_mnc_MBMS[6][3]; LTE_MCC_MNC_Digit_t dummy_mcc_MBMS[6][3], dummy_mnc_MBMS[6][3];
+86 -274
View File
@@ -464,48 +464,38 @@ init_SI(
if (NODE_IS_MONOLITHIC(rrc->node_type)) { if (NODE_IS_MONOLITHIC(rrc->node_type)) {
LOG_D(RRC, "About to call rrc_mac_config_req_eNB for ngran_eNB\n"); LOG_D(RRC, "About to call rrc_mac_config_req_eNB for ngran_eNB\n");
rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id, rrc_mac_config_req_eNB_t tmp = {
carrier->physCellId, .CC_id = CC_id,
carrier->p_eNB, .physCellId = carrier->physCellId,
carrier->Ncp, .p_eNB = carrier->p_eNB,
carrier->sib1->freqBandIndicator, .Ncp = carrier->Ncp,
carrier->dl_CarrierFreq, .eutra_band = carrier->sib1->freqBandIndicator,
carrier->pbch_repetition, .dl_CarrierFreq = carrier->dl_CarrierFreq,
0, // rnti .pbch_repetition = carrier->pbch_repetition,
(LTE_BCCH_BCH_Message_t *) &carrier->mib, .mib = &carrier->mib,
(LTE_RadioResourceConfigCommonSIB_t *) &carrier->sib2->radioResourceConfigCommon, .radioResourceConfigCommon = &carrier->sib2->radioResourceConfigCommon,
(LTE_RadioResourceConfigCommonSIB_t *) &carrier->sib2_BR->radioResourceConfigCommon, .tdd_Config = carrier->sib1->tdd_Config,
(struct LTE_PhysicalConfigDedicated *)NULL, .schedulingInfoList = &carrier->sib1->schedulingInfoList,
(LTE_SCellToAddMod_r10_t *)NULL, .ul_CarrierFreq = carrier->ul_CarrierFreq,
(LTE_MeasObjectToAddMod_t **) NULL, .ul_Bandwidth = carrier->sib2->freqInfo.ul_Bandwidth,
(LTE_MAC_MainConfig_t *) NULL, 0, .additionalSpectrumEmission = &carrier->sib2->freqInfo.additionalSpectrumEmission,
(struct LTE_LogicalChannelConfig *)NULL, .mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList,
(LTE_MeasGapConfig_t *) NULL, .MBMS_Flag = carrier->MBMS_flag,
carrier->sib1->tdd_Config, .sib1_ext_r13 = sib1_v13ext,
NULL, .FeMBMS_Flag = RC.rrc[ctxt_pP->module_id]->carrier[CC_id].FeMBMS_flag,
&carrier->sib1->schedulingInfoList, .mib_fembms = &carrier->siblock1_MBMS,
carrier->ul_CarrierFreq, };
carrier->sib2->freqInfo.ul_Bandwidth, if (carrier->sib2_BR)
&carrier->sib2->freqInfo.additionalSpectrumEmission, tmp.LTE_radioResourceConfigCommon_BR = &carrier->sib2_BR->radioResourceConfigCommon;
(LTE_MBSFN_SubframeConfigList_t *) carrier->sib2->mbsfn_SubframeConfigList, if (carrier->sib13)
carrier->MBMS_flag, tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
(LTE_MBSFN_AreaInfoList_r9_t *) & carrier->sib13->mbsfn_AreaInfoList_r9, if (carrier->sib1_MBMS) {
(LTE_PMCH_InfoList_r9_t *) NULL, tmp.nonMBSFN_SubframeConfig = carrier->sib1_MBMS->nonMBSFN_SubframeConfig_r14;
sib1_v13ext, tmp.sib1_mbms_r14_fembms = carrier->sib1_MBMS->systemInformationBlockType13_r14;
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].FeMBMS_flag, if (carrier->sib1_MBMS->systemInformationBlockType13_r14)
(carrier->sib1_MBMS==NULL?(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL:(LTE_BCCH_DL_SCH_Message_MBMS_t *)carrier->sib1_MBMS),//(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL, tmp.mbsfn_AreaInfoList_fembms = &carrier->sib1_MBMS->systemInformationBlockType13_r14->mbsfn_AreaInfoList_r9;
(LTE_SchedulingInfo_MBMS_r14_t *) NULL, }
(carrier->sib1_MBMS==NULL rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
? (struct LTE_NonMBSFN_SubframeConfig_r14 *)NULL
: (struct LTE_NonMBSFN_SubframeConfig_r14 *)carrier->sib1_MBMS->nonMBSFN_SubframeConfig_r14),//(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(carrier->sib1_MBMS==NULL
? (LTE_SystemInformationBlockType1_MBMS_r14_t *)NULL
: (LTE_SystemInformationBlockType1_MBMS_r14_t *)carrier->sib1_MBMS->systemInformationBlockType13_r14),//(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(carrier->sib1_MBMS==NULL
? (LTE_MBSFN_AreaInfoList_r9_t *)NULL
: (LTE_MBSFN_AreaInfoList_r9_t *)&carrier->sib1_MBMS->systemInformationBlockType13_r14->mbsfn_AreaInfoList_r9),//(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t *)NULL
);
} }
/* set flag to indicate that cell information is configured. This is required /* set flag to indicate that cell information is configured. This is required
@@ -564,34 +554,10 @@ 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: 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]); // 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]);
if (NODE_IS_MONOLITHIC(rrc->node_type)) { if (NODE_IS_MONOLITHIC(rrc->node_type)) {
rrc_mac_config_req_eNB(enb_mod_idP, CC_id, rrc_mac_config_req_eNB_t tmp = {0};
0,0,0,0,0, 0, 0,//rnti tmp.CC_id = CC_id;
(LTE_BCCH_BCH_Message_t *)NULL, tmp.pmch_InfoList = &RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, rrc_mac_config_req_eNB(enb_mod_idP, &tmp);
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(struct LTE_PhysicalConfigDedicated *)NULL,
(LTE_SCellToAddMod_r10_t *)NULL,
//(struct LTE_PhysicalConfigDedicatedSCell_r10 *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
(LTE_MAC_MainConfig_t *) NULL,
0,
(struct LTE_LogicalChannelConfig *)NULL,
(LTE_MeasGapConfig_t *) NULL,
(LTE_TDD_Config_t *) NULL,
(LTE_MobilityControlInfo_t *)NULL,
(LTE_SchedulingInfoList_t *) NULL,
0, NULL, NULL, (LTE_MBSFN_SubframeConfigList_t *) NULL, 0,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_PMCH_InfoList_r9_t *) & (RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9),
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t *) NULL
);
} }
//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); //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);
@@ -1363,43 +1329,14 @@ rrc_eNB_generate_RRCConnectionReestablishment(
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type)) { if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type)) {
rrc_mac_config_req_eNB(module_id, rrc_mac_config_req_eNB_t tmp = {0};
ue_context->primaryCC_id, tmp.CC_id = ue_context->primaryCC_id;
0, tmp.physicalConfigDedicated = ue_context->physicalConfigDedicated;
0, tmp.mac_MainConfig = ue_context->mac_MainConfig;
0, tmp.logicalChannelIdentity = 1;
0, tmp.logicalChannelConfig = SRB1_logicalChannelConfig;
0, tmp.measGapConfig = ue_context->measGapConfig;
0, rrc_mac_config_req_eNB(module_id, &tmp);
rnti,
(LTE_BCCH_BCH_Message_t *) NULL,
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(struct LTE_PhysicalConfigDedicated * ) ue_context->physicalConfigDedicated,
(LTE_SCellToAddMod_r10_t *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
ue_context->mac_MainConfig,
1,
SRB1_logicalChannelConfig,
ue_context->measGapConfig,
(LTE_TDD_Config_t *) NULL,
NULL,
(LTE_SchedulingInfoList_t *) NULL,
0,
NULL,
NULL,
(LTE_MBSFN_SubframeConfigList_t *) NULL, 0,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *) NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t *) NULL
);
break; break;
} }
} // if ((*SRB_configList)->list.array[cnt]->srb_Identity == 1) } // if ((*SRB_configList)->list.array[cnt]->srb_Identity == 1)
@@ -4785,38 +4722,14 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
LOG_D(RRC, LOG_D(RRC,
"handover_config [FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 UE %x) --->][MAC_eNB][MOD %02d][]\n", "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); ctxt_pP->frame, ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ctxt_pP->module_id);
rrc_mac_config_req_eNB( rrc_mac_config_req_eNB_t tmp = {0};
ctxt_pP->module_id, tmp.CC_id = ue_context_pP->ue_context.primaryCC_id;
ue_context_pP->ue_context.primaryCC_id, tmp.rnti = ue_context_pP->ue_context.rnti;
0,0,0,0,0,0, tmp.physicalConfigDedicated = ue_context_pP->ue_context.physicalConfigDedicated;
ue_context_pP->ue_context.rnti, tmp.mac_MainConfig = ue_context_pP->ue_context.mac_MainConfig;
(LTE_BCCH_BCH_Message_t *) NULL, tmp.logicalChannelIdentity = 1;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, tmp.measGapConfig = ue_context_pP->ue_context.measGapConfig;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
ue_context_pP->ue_context.physicalConfigDedicated,
(LTE_SCellToAddMod_r10_t *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
ue_context_pP->ue_context.mac_MainConfig,
1,
NULL,//SRB1_logicalChannelConfig,
ue_context_pP->ue_context.measGapConfig,
(LTE_TDD_Config_t *) NULL,
(LTE_MobilityControlInfo_t *) NULL,
(LTE_SchedulingInfoList_t *) NULL,
0,
NULL,
NULL,
(LTE_MBSFN_SubframeConfigList_t *) NULL,
0, (LTE_MBSFN_AreaInfoList_r9_t *) NULL, (LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t *) NULL
);
// Configure target eNB SRB2 // Configure target eNB SRB2
/// SRB2 /// SRB2
SRB2_config = CALLOC(1, sizeof(*SRB2_config)); SRB2_config = CALLOC(1, sizeof(*SRB2_config));
@@ -5446,38 +5359,15 @@ rrc_eNB_configure_rbs_handover(struct rrc_eNB_ue_context_s *ue_context_p, protoc
// Add a new user (called during the HO procedure) // Add a new user (called during the HO procedure)
LOG_I(RRC, "rrc_eNB_target_add_ue_handover module_id %d rnti %d\n", ctxt_pP->module_id, ctxt_pP->rnti); LOG_I(RRC, "rrc_eNB_target_add_ue_handover module_id %d rnti %d\n", ctxt_pP->module_id, ctxt_pP->rnti);
// Configure MAC for the target // Configure MAC for the target
rrc_mac_config_req_eNB( rrc_mac_config_req_eNB_t tmp = {0};
ctxt_pP->module_id, tmp.CC_id = ue_context_p->ue_context.primaryCC_id;
ue_context_p->ue_context.primaryCC_id, tmp.rnti = ue_context_p->ue_context.rnti;
0,0,0,0,0, 0, tmp.physicalConfigDedicated = ue_context_p->ue_context.physicalConfigDedicated;
ue_context_p->ue_context.rnti, tmp.mac_MainConfig = ue_context_p->ue_context.mac_MainConfig;
(LTE_BCCH_BCH_Message_t *) NULL, tmp.logicalChannelIdentity = 1;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, tmp.measGapConfig = ue_context_p->ue_context.measGapConfig;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, tmp.mobilityControlInfo = ue_context_p->ue_context.mobilityInfo;
ue_context_p->ue_context.physicalConfigDedicated, rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
(LTE_SCellToAddMod_r10_t *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
ue_context_p->ue_context.mac_MainConfig,
1,
NULL,//SRB1_logicalChannelConfig,
ue_context_p->ue_context.measGapConfig,
(LTE_TDD_Config_t *) NULL,
(LTE_MobilityControlInfo_t *) ue_context_p->ue_context.mobilityInfo,
(LTE_SchedulingInfoList_t *) NULL,
0,
NULL,
NULL,
(LTE_MBSFN_SubframeConfigList_t *) NULL, 0,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL, (LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t *) NULL
);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -5655,43 +5545,15 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
} }
if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type)) { if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type)) {
rrc_mac_config_req_eNB(ctxt_pP->module_id, rrc_mac_config_req_eNB_t tmp = {0};
ue_context_pP->ue_context.primaryCC_id, tmp.CC_id = ue_context_pP->ue_context.primaryCC_id;
0, tmp.rnti = ue_context_pP->ue_context.rnti;
0, tmp.physicalConfigDedicated = ue_context_pP->ue_context.physicalConfigDedicated;
0, tmp.mac_MainConfig = ue_context_pP->ue_context.mac_MainConfig;
0, tmp.logicalChannelIdentity = DRB2LCHAN[i];
0, tmp.logicalChannelConfig = DRB_configList->list.array[i]->logicalChannelConfig;
0, tmp.measGapConfig = ue_context_pP->ue_context.measGapConfig;
ue_context_pP->ue_context.rnti, rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
(LTE_BCCH_BCH_Message_t *) NULL,
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
ue_context_pP->ue_context.physicalConfigDedicated,
(LTE_SCellToAddMod_r10_t *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
ue_context_pP->ue_context.mac_MainConfig,
DRB2LCHAN[i],
DRB_configList->list.array[i]->logicalChannelConfig,
ue_context_pP->ue_context.measGapConfig,
(LTE_TDD_Config_t *) NULL,
NULL,
(LTE_SchedulingInfoList_t *) NULL,
0,
NULL,
NULL,
(LTE_MBSFN_SubframeConfigList_t *) NULL, 0,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *) NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t *) NULL
);
} }
} else { // remove LCHAN from MAC/PHY } else { // remove LCHAN from MAC/PHY
if (DRB_configList->list.array[i]->logicalChannelIdentity) { if (DRB_configList->list.array[i]->logicalChannelIdentity) {
@@ -5702,44 +5564,13 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type)) { if (NODE_IS_MONOLITHIC(RC.rrc[ctxt_pP->module_id]->node_type)) {
rrc_mac_config_req_eNB(ctxt_pP->module_id, rrc_mac_config_req_eNB_t tmp = {0};
ue_context_pP->ue_context.primaryCC_id, tmp.CC_id = ue_context_pP->ue_context.primaryCC_id;
0, tmp.rnti = ue_context_pP->ue_context.rnti;
0, tmp.physicalConfigDedicated = ue_context_pP->ue_context.physicalConfigDedicated;
0, tmp.mac_MainConfig = ue_context_pP->ue_context.mac_MainConfig;
0, tmp.logicalChannelIdentity = DRB2LCHAN[i];
0, rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
0,
ue_context_pP->ue_context.rnti,
(LTE_BCCH_BCH_Message_t *) NULL,
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
ue_context_pP->ue_context.physicalConfigDedicated,
(LTE_SCellToAddMod_r10_t *) NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
ue_context_pP->ue_context.mac_MainConfig,
DRB2LCHAN[i],
(LTE_LogicalChannelConfig_t *) NULL,
(LTE_MeasGapConfig_t *) NULL,
(LTE_TDD_Config_t *) NULL,
NULL,
(LTE_SchedulingInfoList_t *) NULL,
0,
NULL,
NULL,
NULL,
0,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *) NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t *) NULL
);
} }
} // end else of if (ue_context_pP->ue_context.DRB_active[drb_id] == 0) } // end else of if (ue_context_pP->ue_context.DRB_active[drb_id] == 0)
} // end if (DRB_configList->list.array[i]) } // end if (DRB_configList->list.array[i])
@@ -5875,34 +5706,15 @@ rrc_eNB_generate_RRCConnectionSetup(
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
if (RC.rrc[ctxt_pP->module_id]->node_type == ngran_eNB) { if (RC.rrc[ctxt_pP->module_id]->node_type == ngran_eNB) {
rrc_mac_config_req_eNB(ctxt_pP->module_id, rrc_mac_config_req_eNB_t tmp = {0};
ue_context_pP->ue_context.primaryCC_id, tmp.CC_id = ue_context_pP->ue_context.primaryCC_id;
0,0,0,0,0, 0, tmp.rnti = ue_context_pP->ue_context.rnti;
ue_context_pP->ue_context.rnti, tmp.physicalConfigDedicated = ue_context_pP->ue_context.physicalConfigDedicated;
(LTE_BCCH_BCH_Message_t *) NULL, tmp.mac_MainConfig = ue_context_pP->ue_context.mac_MainConfig;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, tmp.logicalChannelIdentity = 1;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, tmp.logicalChannelConfig = SRB1_logicalChannelConfig;
ue_context_pP->ue_context.physicalConfigDedicated, tmp.measGapConfig = ue_context_pP->ue_context.measGapConfig;
(LTE_SCellToAddMod_r10_t *)NULL, rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
(LTE_MeasObjectToAddMod_t **) NULL,
ue_context_pP->ue_context.mac_MainConfig,
1,
SRB1_logicalChannelConfig,
ue_context_pP->ue_context.measGapConfig,
(LTE_TDD_Config_t *) NULL,
NULL,
(LTE_SchedulingInfoList_t *) NULL,
0, NULL, NULL, (LTE_MBSFN_SubframeConfigList_t *) NULL,
0, (LTE_MBSFN_AreaInfoList_r9_t *) NULL, (LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t *) NULL
);
break; break;
} }
} }
+146 -322
View File
@@ -357,43 +357,15 @@ static void rrc_M2AP_init_MCCH(
RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESS_COUNTING[sync_area].Active = 1; RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESS_COUNTING[sync_area].Active = 1;
} }
if (NODE_IS_MONOLITHIC(rrc->node_type)) {
rrc_mac_config_req_eNB_t tmp = {0};
tmp.CC_id = CC_id;
tmp.pmch_InfoList = &RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9;
tmp.mbms_AreaConfiguration = RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message;
rrc_mac_config_req_eNB(enb_mod_idP, &tmp);
}
if (NODE_IS_MONOLITHIC(rrc->node_type)) { return;
rrc_mac_config_req_eNB(enb_mod_idP, CC_id,
0,0,0,0,0,
0,
0,//rnti
(LTE_BCCH_BCH_Message_t *)NULL,
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(struct LTE_PhysicalConfigDedicated *)NULL,
(LTE_SCellToAddMod_r10_t *)NULL,
//(struct LTE_PhysicalConfigDedicatedSCell_r10 *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
(LTE_MAC_MainConfig_t *) NULL,
0,
(struct LTE_LogicalChannelConfig *)NULL,
(LTE_MeasGapConfig_t *) NULL,
(LTE_TDD_Config_t *) NULL,
(LTE_MobilityControlInfo_t *)NULL,
(LTE_SchedulingInfoList_t *) NULL,
0, NULL, NULL, (LTE_MBSFN_SubframeConfigList_t *) NULL
,
0,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_PMCH_InfoList_r9_t *) & (RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9),
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t*)(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message)
);
}
return;
} }
@@ -414,56 +386,31 @@ static uint8_t rrc_M2AP_do_SIB1_MBMS_SIB13(
struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member *sib13_part=NULL; struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member *sib13_part=NULL;
LTE_MBSFN_SubframeConfigList_t *MBSFNSubframeConfigList/*,*MBSFNSubframeConfigList_copy*/; LTE_MBSFN_SubframeConfigList_t *MBSFNSubframeConfigList/*,*MBSFNSubframeConfigList_copy*/;
asn_enc_rval_t enc_rval; asn_enc_rval_t enc_rval;
LTE_BCCH_DL_SCH_Message_t *bcch_message = &RC.rrc[Mod_id]->carrier[CC_id].systemInformation;
LTE_BCCH_DL_SCH_Message_t *bcch_message = &RC.rrc[Mod_id]->carrier[CC_id].systemInformation; LTE_BCCH_DL_SCH_Message_MBMS_t *bcch_message_fembms = &RC.rrc[Mod_id]->carrier[CC_id].siblock1_MBMS;
LTE_BCCH_DL_SCH_Message_MBMS_t *bcch_message_fembms = &RC.rrc[Mod_id]->carrier[CC_id].siblock1_MBMS;
uint8_t *buffer;
uint8_t *buffer_fembms;
LTE_SystemInformationBlockType2_t **sib2;
LTE_MBSFN_AreaInfoList_r9_t *MBSFNArea_list/*,*MBSFNArea_list_copy*/;
LTE_SystemInformationBlockType13_r9_t **sib13 = &RC.rrc[Mod_id]->carrier[CC_id].sib13;
struct LTE_MBSFN_AreaInfo_r9 *MBSFN_Area1;
LTE_SystemInformationBlockType1_MBMS_r14_t **sib1_MBMS = &RC.rrc[Mod_id]->carrier[CC_id].sib1_MBMS;
LTE_MBSFN_AreaInfoList_r9_t *MBSFNArea_list /*,*MBSFNArea_list_copy*/;
LTE_SystemInformationBlockType13_r9_t *sib13 = RC.rrc[Mod_id]->carrier[CC_id].sib13;
if (!sib13) {
LOG_I(RRC, "[eNB %d] sib13 is null, it should get created\n", Mod_id);
}
struct LTE_MBSFN_AreaInfo_r9 *MBSFN_Area1;
uint8_t *encoded_buffer;
if(ctxt_pP->brOption){ if(ctxt_pP->brOption){
buffer = RC.rrc[Mod_id]->carrier[CC_id].SIB23_BR; AssertFatal(RC.rrc[Mod_id]->carrier[CC_id].SIB23_BR, "[eNB %d] sib2 is null, exiting\n", Mod_id);
sib2 = &RC.rrc[Mod_id]->carrier[CC_id].sib2_BR; encoded_buffer = RC.rrc[Mod_id]->carrier[CC_id].SIB23_BR;
LOG_I(RRC,"Running SIB2/3 Encoding for eMTC\n"); LOG_I(RRC, "Running SIB2/3 Encoding for eMTC\n");
}else }else
{ {
buffer = RC.rrc[Mod_id]->carrier[CC_id].SIB23; AssertFatal(RC.rrc[Mod_id]->carrier[CC_id].SIB23, "[eNB %d] sib2 is null, exiting\n", Mod_id);
sib2 = &RC.rrc[Mod_id]->carrier[CC_id].sib2; encoded_buffer = RC.rrc[Mod_id]->carrier[CC_id].SIB23;
} }
buffer_fembms = RC.rrc[Mod_id]->carrier[CC_id].SIB1_MBMS; if (!RC.rrc[Mod_id]->carrier[CC_id].sib1_MBMS) {
if (bcch_message) {
//memset(bcch_message,0,sizeof(LTE_BCCH_DL_SCH_Message_t));
} else {
LOG_E(RRC,"[eNB %d] BCCH_MESSAGE is null, exiting\n", Mod_id);
exit(-1);
}
if (!sib2) {
LOG_E(RRC,"[eNB %d] sib2 is null, exiting\n", Mod_id);
exit(-1);
}
if(!sib13){
LOG_I(RRC,"[eNB %d] sib13 is null, it should get created\n",Mod_id);
}
if(!sib1_MBMS){
LOG_I(RRC,"[eNB %d] sib1_MBMS is null, it should get created\n",Mod_id); LOG_I(RRC,"[eNB %d] sib1_MBMS is null, it should get created\n",Mod_id);
} }
@@ -498,34 +445,35 @@ static uint8_t rrc_M2AP_do_SIB1_MBMS_SIB13(
break; break;
case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib12_v920: case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib12_v920:
break; break;
case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920: case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920:
*sib13=&typeandinfo->choice.sib13_v920; sib13 = &typeandinfo->choice.sib13_v920;
(*sib13)->notificationConfig_r9.notificationRepetitionCoeff_r9=LTE_MBMS_NotificationConfig_r9__notificationRepetitionCoeff_r9_n2; RC.rrc[Mod_id]->carrier[CC_id].sib13 = sib13;
(*sib13)->notificationConfig_r9.notificationOffset_r9=0; sib13->notificationConfig_r9.notificationRepetitionCoeff_r9 = LTE_MBMS_NotificationConfig_r9__notificationRepetitionCoeff_r9_n2;
(*sib13)->notificationConfig_r9.notificationSF_Index_r9=1; sib13->notificationConfig_r9.notificationOffset_r9 = 0;
// MBSFN-AreaInfoList sib13->notificationConfig_r9.notificationSF_Index_r9 = 1;
MBSFNArea_list= &(*sib13)->mbsfn_AreaInfoList_r9;//CALLOC(1,sizeof(*MBSFNArea_list)); // MBSFN-AreaInfoList
memset(MBSFNArea_list,0,sizeof(*MBSFNArea_list)); MBSFNArea_list = &sib13->mbsfn_AreaInfoList_r9; // CALLOC(1,sizeof(*MBSFNArea_list));
memset(MBSFNArea_list, 0, sizeof(*MBSFNArea_list));
for( j=0; j < m2ap_setup_resp->num_mcch_config_per_mbsfn; j++){ for (j = 0; j < m2ap_setup_resp->num_mcch_config_per_mbsfn; j++) {
// MBSFN Area 1 // MBSFN Area 1
MBSFN_Area1= CALLOC(1, sizeof(*MBSFN_Area1)); MBSFN_Area1 = CALLOC(1, sizeof(*MBSFN_Area1));
MBSFN_Area1->mbsfn_AreaId_r9= m2ap_setup_resp->mcch_config_per_mbsfn[j].mbsfn_area; MBSFN_Area1->mbsfn_AreaId_r9 = m2ap_setup_resp->mcch_config_per_mbsfn[j].mbsfn_area;
MBSFN_Area1->non_MBSFNregionLength= m2ap_setup_resp->mcch_config_per_mbsfn[j].pdcch_length; MBSFN_Area1->non_MBSFNregionLength = m2ap_setup_resp->mcch_config_per_mbsfn[j].pdcch_length;
MBSFN_Area1->notificationIndicator_r9= 0; MBSFN_Area1->notificationIndicator_r9 = 0;
MBSFN_Area1->mcch_Config_r9.mcch_RepetitionPeriod_r9= m2ap_setup_resp->mcch_config_per_mbsfn[j].repetition_period;//LTE_MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf32; MBSFN_Area1->mcch_Config_r9.mcch_RepetitionPeriod_r9 = m2ap_setup_resp->mcch_config_per_mbsfn[j].repetition_period; // LTE_MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf32;
MBSFN_Area1->mcch_Config_r9.mcch_Offset_r9= m2ap_setup_resp->mcch_config_per_mbsfn[j].offset; // in accordance with mbsfn subframe configuration in sib2 MBSFN_Area1->mcch_Config_r9.mcch_Offset_r9 = m2ap_setup_resp->mcch_config_per_mbsfn[j].offset; // in accordance with mbsfn subframe configuration in sib2
MBSFN_Area1->mcch_Config_r9.mcch_ModificationPeriod_r9= m2ap_setup_resp->mcch_config_per_mbsfn[j].modification_period; MBSFN_Area1->mcch_Config_r9.mcch_ModificationPeriod_r9 = m2ap_setup_resp->mcch_config_per_mbsfn[j].modification_period;
// Subframe Allocation Info // Subframe Allocation Info
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf= MALLOC(1); MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf = MALLOC(1);
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.size= 1; MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.size = 1;
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf[0]=m2ap_setup_resp->mcch_config_per_mbsfn[j].subframe_allocation_info<<2; // FDD: SF1 MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf[0] = m2ap_setup_resp->mcch_config_per_mbsfn[j].subframe_allocation_info << 2; // FDD: SF1
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.bits_unused= 2; MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.bits_unused = 2;
MBSFN_Area1->mcch_Config_r9.signallingMCS_r9= m2ap_setup_resp->mcch_config_per_mbsfn[j].mcs; MBSFN_Area1->mcch_Config_r9.signallingMCS_r9 = m2ap_setup_resp->mcch_config_per_mbsfn[j].mcs;
ASN_SEQUENCE_ADD(&MBSFNArea_list->list,MBSFN_Area1); ASN_SEQUENCE_ADD(&MBSFNArea_list->list, MBSFN_Area1);
} }
break; break;
case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib14_v1130: case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib14_v1130:
break; break;
case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib15_v1130: case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib15_v1130:
@@ -548,110 +496,99 @@ static uint8_t rrc_M2AP_do_SIB1_MBMS_SIB13(
break; break;
case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib26_v1530: case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib26_v1530:
break; break;
case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2: case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2:
LOG_I(RRC,"Adding MBSFN subframe Configuration 1 to SIB2, %p %p\n",&typeandinfo->choice.sib2,*sib2); LOG_I(RRC, "Adding MBSFN subframe Configuration 1 to SIB2\n");
for(j=0; j < m2ap_mbms_scheduling_information->num_mbms_area_config_list ; j++) { for (j = 0; j < m2ap_mbms_scheduling_information->num_mbms_area_config_list; j++) {
(&typeandinfo->choice.sib2)->mbsfn_SubframeConfigList = CALLOC(1, sizeof(struct LTE_MBSFN_SubframeConfigList));
MBSFNSubframeConfigList = (&typeandinfo->choice.sib2)->mbsfn_SubframeConfigList;
(&typeandinfo->choice.sib2)->mbsfn_SubframeConfigList = CALLOC(1,sizeof(struct LTE_MBSFN_SubframeConfigList)); for (l = 0; l < m2ap_mbms_scheduling_information->mbms_area_config_list[j].num_mbms_sf_config_list; l++) {
MBSFNSubframeConfigList = (&typeandinfo->choice.sib2)->mbsfn_SubframeConfigList; LTE_MBSFN_SubframeConfig_t *sib2_mbsfn_SubframeConfig1;
sib2_mbsfn_SubframeConfig1 = CALLOC(1, sizeof(*sib2_mbsfn_SubframeConfig1));
memset((void *)sib2_mbsfn_SubframeConfig1, 0, sizeof(*sib2_mbsfn_SubframeConfig1));
for(l=0; l < m2ap_mbms_scheduling_information->mbms_area_config_list[j].num_mbms_sf_config_list; l++){ sib2_mbsfn_SubframeConfig1->radioframeAllocationPeriod = m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].radioframe_allocation_period;
LTE_MBSFN_SubframeConfig_t *sib2_mbsfn_SubframeConfig1; sib2_mbsfn_SubframeConfig1->radioframeAllocationOffset = m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].radioframe_allocation_offset;
sib2_mbsfn_SubframeConfig1= CALLOC(1,sizeof(*sib2_mbsfn_SubframeConfig1));
memset((void *)sib2_mbsfn_SubframeConfig1,0,sizeof(*sib2_mbsfn_SubframeConfig1));
sib2_mbsfn_SubframeConfig1->radioframeAllocationPeriod = m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].radioframe_allocation_period; if (m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].is_four_sf) {
sib2_mbsfn_SubframeConfig1->radioframeAllocationOffset = m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].radioframe_allocation_offset; LOG_I(RRC, "is_four_sf\n");
sib2_mbsfn_SubframeConfig1->subframeAllocation.present = LTE_MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames;
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf = MALLOC(3);
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.size = 3;
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.bits_unused = 0;
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf[2] = ((m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].subframe_allocation) & 0xFF);
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf[1] =
((m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].subframe_allocation >> 8) & 0xFF);
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf[0] =
((m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].subframe_allocation >> 16) & 0xFF);
if(m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].is_four_sf){ } else {
LOG_I(RRC,"is_four_sf\n"); LOG_I(RRC, "is_one_sf\n");
sib2_mbsfn_SubframeConfig1->subframeAllocation.present= LTE_MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames; sib2_mbsfn_SubframeConfig1->subframeAllocation.present = LTE_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame;
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf = MALLOC(1);
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.size = 1;
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.bits_unused = 2;
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf[0] = (m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].subframe_allocation << 2);
}
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf= MALLOC(3); ASN_SEQUENCE_ADD(&MBSFNSubframeConfigList->list, sib2_mbsfn_SubframeConfig1);
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.size= 3; }
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.bits_unused= 0; }
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf[2] = ((m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].subframe_allocation) & 0xFF);
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf[1] = ((m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].subframe_allocation>>8) & 0xFF);
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf[0] = ((m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].subframe_allocation>>16) & 0xFF);
}else{
LOG_I(RRC,"is_one_sf\n");
sib2_mbsfn_SubframeConfig1->subframeAllocation.present= LTE_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame;
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf= MALLOC(1);
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.size= 1;
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.bits_unused= 2;
sib2_mbsfn_SubframeConfig1->subframeAllocation.choice.oneFrame.buf[0]=(m2ap_mbms_scheduling_information->mbms_area_config_list[j].mbms_sf_config_list[l].subframe_allocation<<2);
}
ASN_SEQUENCE_ADD(&MBSFNSubframeConfigList->list,sib2_mbsfn_SubframeConfig1);
}
}
break;
break;
} }
} }
if (sib13 == NULL) {
LTE_SystemInformationBlockType13_r9_t *sib13 = RC.rrc[Mod_id]->carrier[CC_id].sib13;
if(*sib13==NULL){
sib13_part = CALLOC(1,sizeof(struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member)); sib13_part = CALLOC(1,sizeof(struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member));
memset(sib13_part,0,sizeof(struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member)); memset(sib13_part,0,sizeof(struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member));
sib13_part->present = LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920; sib13_part->present = LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920;
*sib13 = &sib13_part->choice.sib13_v920; sib13 = &sib13_part->choice.sib13_v920;
RC.rrc[Mod_id]->carrier[CC_id].sib13 = sib13;
(*sib13)->notificationConfig_r9.notificationRepetitionCoeff_r9=LTE_MBMS_NotificationConfig_r9__notificationRepetitionCoeff_r9_n2; sib13->notificationConfig_r9.notificationRepetitionCoeff_r9 = LTE_MBMS_NotificationConfig_r9__notificationRepetitionCoeff_r9_n2;
(*sib13)->notificationConfig_r9.notificationOffset_r9=0; sib13->notificationConfig_r9.notificationOffset_r9 = 0;
(*sib13)->notificationConfig_r9.notificationSF_Index_r9=1; sib13->notificationConfig_r9.notificationSF_Index_r9 = 1;
// MBSFN-AreaInfoList // MBSFN-AreaInfoList
MBSFNArea_list= &(*sib13)->mbsfn_AreaInfoList_r9;//CALLOC(1,sizeof(*MBSFNArea_list)); MBSFNArea_list = &sib13->mbsfn_AreaInfoList_r9; // CALLOC(1,sizeof(*MBSFNArea_list));
memset(MBSFNArea_list,0,sizeof(*MBSFNArea_list)); memset(MBSFNArea_list, 0, sizeof(*MBSFNArea_list));
for( i=0; i < m2ap_setup_resp->num_mcch_config_per_mbsfn; i++){ for (i = 0; i < m2ap_setup_resp->num_mcch_config_per_mbsfn; i++) {
// MBSFN Area 1 // MBSFN Area 1
MBSFN_Area1= CALLOC(1, sizeof(*MBSFN_Area1)); MBSFN_Area1 = CALLOC(1, sizeof(*MBSFN_Area1));
MBSFN_Area1->mbsfn_AreaId_r9= m2ap_setup_resp->mcch_config_per_mbsfn[i].mbsfn_area; MBSFN_Area1->mbsfn_AreaId_r9 = m2ap_setup_resp->mcch_config_per_mbsfn[i].mbsfn_area;
MBSFN_Area1->non_MBSFNregionLength= m2ap_setup_resp->mcch_config_per_mbsfn[i].pdcch_length; MBSFN_Area1->non_MBSFNregionLength = m2ap_setup_resp->mcch_config_per_mbsfn[i].pdcch_length;
MBSFN_Area1->notificationIndicator_r9= 0; MBSFN_Area1->notificationIndicator_r9 = 0;
MBSFN_Area1->mcch_Config_r9.mcch_RepetitionPeriod_r9= m2ap_setup_resp->mcch_config_per_mbsfn[i].repetition_period;//LTE_MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf32; MBSFN_Area1->mcch_Config_r9.mcch_RepetitionPeriod_r9 = m2ap_setup_resp->mcch_config_per_mbsfn[i].repetition_period; // LTE_MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf32;
MBSFN_Area1->mcch_Config_r9.mcch_Offset_r9= m2ap_setup_resp->mcch_config_per_mbsfn[i].offset; // in accordance with mbsfn subframe configuration in sib2 MBSFN_Area1->mcch_Config_r9.mcch_Offset_r9 = m2ap_setup_resp->mcch_config_per_mbsfn[i].offset; // in accordance with mbsfn subframe configuration in sib2
MBSFN_Area1->mcch_Config_r9.mcch_ModificationPeriod_r9= m2ap_setup_resp->mcch_config_per_mbsfn[i].modification_period; MBSFN_Area1->mcch_Config_r9.mcch_ModificationPeriod_r9 = m2ap_setup_resp->mcch_config_per_mbsfn[i].modification_period;
// Subframe Allocation Info
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf= MALLOC(1);
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.size= 1;
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf[0]=m2ap_setup_resp->mcch_config_per_mbsfn[i].subframe_allocation_info<<2; // FDD: SF1
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.bits_unused= 2;
MBSFN_Area1->mcch_Config_r9.signallingMCS_r9= m2ap_setup_resp->mcch_config_per_mbsfn[i].mcs;
ASN_SEQUENCE_ADD(&MBSFNArea_list->list,MBSFN_Area1);
}
ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list, sib13_part); // Subframe Allocation Info
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf = MALLOC(1);
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.size = 1;
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.buf[0] = m2ap_setup_resp->mcch_config_per_mbsfn[i].subframe_allocation_info << 2; // FDD: SF1
MBSFN_Area1->mcch_Config_r9.sf_AllocInfo_r9.bits_unused = 2;
MBSFN_Area1->mcch_Config_r9.signallingMCS_r9 = m2ap_setup_resp->mcch_config_per_mbsfn[i].mcs;
ASN_SEQUENCE_ADD(&MBSFNArea_list->list, MBSFN_Area1);
}
} ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list, sib13_part);
*sib1_MBMS = &bcch_message_fembms->message.choice.c1.choice.systemInformationBlockType1_MBMS_r14;
if((*sib1_MBMS)->systemInformationBlockType13_r14==NULL){
(*sib1_MBMS)->systemInformationBlockType13_r14 = CALLOC(1,sizeof(struct LTE_SystemInformationBlockType13_r9));
memset((*sib1_MBMS)->systemInformationBlockType13_r14,0,sizeof(struct LTE_SystemInformationBlockType13_r9));
} }
RC.rrc[Mod_id]->carrier[CC_id].sib1_MBMS = &bcch_message_fembms->message.choice.c1.choice.systemInformationBlockType1_MBMS_r14;
LTE_SystemInformationBlockType1_MBMS_r14_t *sib1_MBMS = RC.rrc[Mod_id]->carrier[CC_id].sib1_MBMS;
if (sib1_MBMS->systemInformationBlockType13_r14 == NULL)
sib1_MBMS->systemInformationBlockType13_r14 = CALLOC(1, sizeof(*sib1_MBMS->systemInformationBlockType13_r14));
memcpy(sib1_MBMS->systemInformationBlockType13_r14, sib13, sizeof(*sib13));
memcpy((*sib1_MBMS)->systemInformationBlockType13_r14,*sib13,sizeof(struct LTE_SystemInformationBlockType13_r9)); enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_BCCH_DL_SCH_Message_MBMS, NULL, (void *)bcch_message_fembms, RC.rrc[Mod_id]->carrier[CC_id].SIB1_MBMS, 100);
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_BCCH_DL_SCH_Message_MBMS,
NULL,
(void *)bcch_message_fembms,
buffer_fembms,
100);
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
@@ -666,11 +603,7 @@ static uint8_t rrc_M2AP_do_SIB1_MBMS_SIB13(
//xer_fprint(stdout, &asn_DEF_LTE_BCCH_DL_SCH_Message, (void *)bcch_message); //xer_fprint(stdout, &asn_DEF_LTE_BCCH_DL_SCH_Message, (void *)bcch_message);
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_BCCH_DL_SCH_Message, enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_BCCH_DL_SCH_Message, NULL, (void *)bcch_message, encoded_buffer, 900);
NULL,
(void *)bcch_message,
buffer,
900);
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
@@ -684,42 +617,15 @@ static uint8_t rrc_M2AP_do_SIB1_MBMS_SIB13(
carrier->MBMS_flag =1; carrier->MBMS_flag =1;
if (NODE_IS_MONOLITHIC(rrc->node_type)) { if (NODE_IS_MONOLITHIC(rrc->node_type)) {
rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id, rrc_mac_config_req_eNB_t tmp = {0};
0,0,0,0,0, tmp.CC_id = CC_id;
0, tmp.rnti = 0xfffd;
0xfffd,//rnti tmp.mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList;
(LTE_BCCH_BCH_Message_t *)NULL, tmp.MBMS_Flag = carrier->MBMS_flag;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, tmp.FeMBMS_Flag = carrier->FeMBMS_flag;
(struct LTE_PhysicalConfigDedicated *)NULL, rrc_mac_config_req_eNB(Mod_id, &tmp);
(LTE_SCellToAddMod_r10_t *)NULL, }
//(struct LTE_PhysicalConfigDedicatedSCell_r10 *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
(LTE_MAC_MainConfig_t *) NULL,
0,
(struct LTE_LogicalChannelConfig *)NULL,
(LTE_MeasGapConfig_t *) NULL,
(LTE_TDD_Config_t *) NULL,
(LTE_MobilityControlInfo_t *)NULL,
(LTE_SchedulingInfoList_t *) NULL,
0, NULL,
(LTE_AdditionalSpectrumEmission_t *)NULL,
(LTE_MBSFN_SubframeConfigList_t *) carrier->sib2->mbsfn_SubframeConfigList,
carrier->MBMS_flag,
(LTE_MBSFN_AreaInfoList_r9_t *) & carrier->sib13->mbsfn_AreaInfoList_r9,
(LTE_PMCH_InfoList_r9_t *) NULL
,
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL
,
carrier->FeMBMS_flag,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t*) NULL
);
}
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8); RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8);
@@ -969,40 +875,12 @@ static uint8_t rrc_M2AP_do_SIB23_SIB2(
carrier->MBMS_flag =1; carrier->MBMS_flag =1;
if (NODE_IS_MONOLITHIC(rrc->node_type)) { if (NODE_IS_MONOLITHIC(rrc->node_type)) {
rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id, rrc_mac_config_req_eNB_t tmp = {0};
0,0,0,0,0, tmp.CC_id = CC_id;
0, tmp.mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList;
0,//rnti tmp.MBMS_Flag = carrier->MBMS_flag;
(LTE_BCCH_BCH_Message_t *)NULL, rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
(LTE_RadioResourceConfigCommonSIB_t *) NULL, }
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(struct LTE_PhysicalConfigDedicated *)NULL,
(LTE_SCellToAddMod_r10_t *)NULL,
//(struct LTE_PhysicalConfigDedicatedSCell_r10 *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
(LTE_MAC_MainConfig_t *) NULL,
0,
(struct LTE_LogicalChannelConfig *)NULL,
(LTE_MeasGapConfig_t *) NULL,
(LTE_TDD_Config_t *) NULL,
(LTE_MobilityControlInfo_t *)NULL,
(LTE_SchedulingInfoList_t *) NULL,
0, NULL,
(LTE_AdditionalSpectrumEmission_t *)NULL,
(LTE_MBSFN_SubframeConfigList_t *) carrier->sib2->mbsfn_SubframeConfigList,
carrier->MBMS_flag,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t*) NULL
);
}
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8); RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8);
@@ -1143,38 +1021,11 @@ for( i=0; i < m2ap_setup_resp->num_mcch_config_per_mbsfn; i++){
} }
if (NODE_IS_MONOLITHIC(rrc->node_type)) { if (NODE_IS_MONOLITHIC(rrc->node_type)) {
rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id, rrc_mac_config_req_eNB_t tmp = {0};
0,0,0,0,0, tmp.CC_id = CC_id;
0, tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
0,//rnti tmp.MBMS_Flag = carrier->MBMS_flag;
(LTE_BCCH_BCH_Message_t *)NULL, rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(struct LTE_PhysicalConfigDedicated *)NULL,
(LTE_SCellToAddMod_r10_t *)NULL,
//(struct LTE_PhysicalConfigDedicatedSCell_r10 *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
(LTE_MAC_MainConfig_t *) NULL,
0,
(struct LTE_LogicalChannelConfig *)NULL,
(LTE_MeasGapConfig_t *) NULL,
(LTE_TDD_Config_t *) NULL,
(LTE_MobilityControlInfo_t *)NULL,
(LTE_SchedulingInfoList_t *) NULL,
0, NULL, NULL, (LTE_MBSFN_SubframeConfigList_t *) NULL
,
0,
(LTE_MBSFN_AreaInfoList_r9_t *) & carrier->sib13->mbsfn_AreaInfoList_r9,
(LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t*) NULL
);
} }
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8); RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8);
@@ -1423,39 +1274,12 @@ static uint8_t rrc_M2AP_do_SIB23_SIB2_SIB13(
carrier->MBMS_flag =1; carrier->MBMS_flag =1;
if (NODE_IS_MONOLITHIC(rrc->node_type)) { if (NODE_IS_MONOLITHIC(rrc->node_type)) {
rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id, rrc_mac_config_req_eNB_t tmp = {0};
0,0,0,0,0, tmp.CC_id = CC_id;
0, tmp.mbsfn_SubframeConfigList = carrier->sib2->mbsfn_SubframeConfigList;
0,//rnti tmp.MBMS_Flag = carrier->MBMS_flag;
(LTE_BCCH_BCH_Message_t *)NULL, tmp.mbsfn_AreaInfoList = &carrier->sib13->mbsfn_AreaInfoList_r9;
(LTE_RadioResourceConfigCommonSIB_t *) NULL, rrc_mac_config_req_eNB(ctxt_pP->module_id, &tmp);
(LTE_RadioResourceConfigCommonSIB_t *) NULL,
(struct LTE_PhysicalConfigDedicated *)NULL,
(LTE_SCellToAddMod_r10_t *)NULL,
//(struct LTE_PhysicalConfigDedicatedSCell_r10 *)NULL,
(LTE_MeasObjectToAddMod_t **) NULL,
(LTE_MAC_MainConfig_t *) NULL,
0,
(struct LTE_LogicalChannelConfig *)NULL,
(LTE_MeasGapConfig_t *) NULL,
(LTE_TDD_Config_t *) NULL,
(LTE_MobilityControlInfo_t *)NULL,
(LTE_SchedulingInfoList_t *) NULL,
0, NULL,
(LTE_AdditionalSpectrumEmission_t *)NULL,
(LTE_MBSFN_SubframeConfigList_t *) carrier->sib2->mbsfn_SubframeConfigList,
carrier->MBMS_flag,
(LTE_MBSFN_AreaInfoList_r9_t *) & carrier->sib13->mbsfn_AreaInfoList_r9,
(LTE_PMCH_InfoList_r9_t *) NULL,
(LTE_SystemInformationBlockType1_v1310_IEs_t *)NULL,
0,
(LTE_BCCH_DL_SCH_Message_MBMS_t *) NULL,
(LTE_SchedulingInfo_MBMS_r14_t *) NULL,
(struct LTE_NonMBSFN_SubframeConfig_r14 *) NULL,
(LTE_SystemInformationBlockType1_MBMS_r14_t *) NULL,
(LTE_MBSFN_AreaInfoList_r9_t *) NULL,
(LTE_MBSFNAreaConfiguration_r9_t*) NULL
);
} }
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8); RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = ((enc_rval.encoded+7)/8);
@@ -190,10 +190,10 @@ int MME_send_MBMS_SESSION_START_REQUEST(instance_t instance/*, uint32_t assoc_id
//tnl_information->iPMCAddress.buf[2] //tnl_information->iPMCAddress.buf[2]
//tnl_information->iPMCAddress.buf[3] //tnl_information->iPMCAddress.buf[3]
//tnl_information->iPMCAddress.buf.size = 4; //tnl_information->iPMCAddress.buf.size = 4;
uint32_t ip= (224<<24) | (0) << 16 | (0) << 8 | (2); uint32_t ip = (224U << 24) | (0) << 16 | (0) << 8 | (2);
INT32_TO_OCTET_STRING(ip,&tnl_information->iPMCAddress); INT32_TO_OCTET_STRING(ip, &tnl_information->iPMCAddress);
ip= (224<<24) | (0) << 16 | (0) << 8 | (2); ip = (224U << 24) | (0) << 16 | (0) << 8 | (2);
INT32_TO_OCTET_STRING(ip,&tnl_information->iPSourceAddress); INT32_TO_OCTET_STRING(ip, &tnl_information->iPSourceAddress);
} }
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
/* optional */ /* optional */