Commit 9ad2b40a authored by Vijay C's avatar Vijay C

Multi cell support for SIB4 and SIB5

parent 399ad2ec
......@@ -46,6 +46,13 @@
#include "LTE_LogicalChannelConfig.h"
#include "LTE_SecurityAlgorithmConfig.h"
#include "LTE_CipheringAlgorithm-r12.h"
#include "LTE_SIB-Type.h"
#include "LTE_Q-OffsetRange.h"
#include "LTE_SchedulingInfo.h"
#include "LTE_SpeedStateScaleFactors.h"
#include "LTE_InterFreqNeighCellInfo.h"
#include "LTE_PhysCellIdRange.h"
#include "LTE_NeighCellConfig.h"
#define MAX_RBS (LTE_maxDRB + 3)
......@@ -296,6 +303,59 @@ typedef struct RadioResourceConfig_s {
BOOLEAN_t mbms_dedicated_serving_cell;
} RadioResourceConfig;
typedef struct lte_sib_MappingInfo_s {
e_LTE_SIB_Type LTE_SIB_Type[5];
}lte_sib_MappingInfo_t;
typedef struct lte_SchedulingInfo_s {
e_LTE_SchedulingInfo__si_Periodicity si_Periodicity;
lte_sib_MappingInfo_t sib_MappingInfo;
}lte_SchedulingInfo_t;
typedef struct PhysCellIdRange_s {
long start;
e_LTE_PhysCellIdRange__range range;
}PhysCellIdRange_t;
typedef struct threshX_Q_r9_s {
long threshX_HighQ_r9;
long threshX_LowQ_r9;
}threshX_Q_r9_t;
typedef struct InterFreqCarrierFreqInfo_s {
long dl_CarrierFreq[MAX_NUM_CCs];
long q_RxLevMin[MAX_NUM_CCs];
bool p_Max_Present[MAX_NUM_CCs];
long p_Max[MAX_NUM_CCs]; /* OPTIONAL */
long t_ReselectionEUTRA[MAX_NUM_CCs];
bool t_ReselectionEUTRA_SF_Present[MAX_NUM_CCs];
LTE_SpeedStateScaleFactors_t *t_ReselectionEUTRA_SF[MAX_NUM_CCs]; /* OPTIONAL */
long threshX_High[MAX_NUM_CCs];
long threshX_Low[MAX_NUM_CCs];
long allowedMeasBandwidth[MAX_NUM_CCs];
bool presenceAntennaPort1[MAX_NUM_CCs];
bool cellReselectionPriority_Present[MAX_NUM_CCs];
long *cellReselectionPriority[MAX_NUM_CCs];/* OPTIONAL */
LTE_NeighCellConfig_t neighCellConfig[MAX_NUM_CCs];
bool q_OffsetFreqPresent[MAX_NUM_CCs];
e_LTE_Q_OffsetRange *q_OffsetFreq[MAX_NUM_CCs];/* OPTIONAL */
bool interFreqNeighCellList_Present[MAX_NUM_CCs];
LTE_InterFreqNeighCellInfo_t *interFreqNeighCellList[MAX_NUM_CCs];/* OPTIONAL */
bool interFreqBlackCellList_Present[MAX_NUM_CCs];
PhysCellIdRange_t *interFreqBlackCellList[MAX_NUM_CCs];/* OPTIONAL */
bool q_QualMin_r9_Present[MAX_NUM_CCs];
long *q_QualMin_r9[MAX_NUM_CCs];/* OPTIONAL */
bool threshX_Q_r9_Present[MAX_NUM_CCs];
threshX_Q_r9_t threshX_Q_r9[MAX_NUM_CCs];/* OPTIONAL */
bool q_QualMinWB_r11_Present[MAX_NUM_CCs];
long *q_QualMinWB_r11[MAX_NUM_CCs];/* OPTIONAL */
}InterFreqCarrierFreqInfo_t;
typedef struct IntraFreqNeighCellInfo_s {
long physCellId;
e_LTE_Q_OffsetRange q_OffsetCell;
}IntraFreqNeighCellInfo_t;
// eNB: ENB_APP -> RRC messages
typedef struct RrcConfigurationReq_s {
uint16_t tac[MAX_NUM_CCs];
......@@ -326,6 +386,8 @@ typedef struct RrcConfigurationReq_s {
int eMTC_configured;
int SL_configured;
uint8_t systemInfoValueTag[MAX_NUM_CCs];
int schedulingInfo_count;
lte_SchedulingInfo_t *schedulingInfo;
RadioResourceConfig radioresourceconfig[MAX_NUM_CCs];
RadioResourceConfig radioresourceconfig_BR[MAX_NUM_CCs];
......@@ -415,6 +477,16 @@ typedef struct RrcConfigurationReq_s {
long sib3_q_RxLevMin[MAX_NUM_CCs];
long t_ReselectionEUTRA[MAX_NUM_CCs];
//SIB4
bool sib4_Present;
bool intraFreqNeighCellListPresent;
IntraFreqNeighCellInfo_t *intraFreqNeighCellList;
//SIB5
bool sib5_Present;
int InterFreqCarrierFreqInfoCount;
InterFreqCarrierFreqInfo_t *InterFreqCarrierFreqInfo;
//SIB18
e_LTE_SL_CP_Len_r12 rxPool_sc_CP_Len[MAX_NUM_CCs];
e_LTE_SL_PeriodComm_r12 rxPool_sc_Period[MAX_NUM_CCs];
......
......@@ -422,6 +422,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
paramlist_def_t PLMNParamList = {ENB_CONFIG_STRING_PLMN_LIST, NULL, 0};
/* map parameter checking array instances to parameter definition array instances */
checkedparam_t config_check_PLMNParams [] = PLMNPARAMS_CHECK;
RRC_CONFIGURATION_REQ (msg_p).InterFreqCarrierFreqInfo = CALLOC(1,sizeof(struct InterFreqCarrierFreqInfo_s));
for (int I = 0; I < sizeof(PLMNParams) / sizeof(paramdef_t); ++I)
PLMNParams[I].chkPptr = &(config_check_PLMNParams[I]);
......@@ -433,6 +434,11 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
RRC_CONFIGURATION_REQ (msg_p).cellReselectionPriority[M]=7;
RRC_CONFIGURATION_REQ (msg_p).sib3_q_RxLevMin[M]=-70;
RRC_CONFIGURATION_REQ (msg_p).t_ReselectionEUTRA[M]=1;
RRC_CONFIGURATION_REQ (msg_p).InterFreqCarrierFreqInfo[k].dl_CarrierFreq[M]=300;
RRC_CONFIGURATION_REQ (msg_p).InterFreqCarrierFreqInfo[k].q_RxLevMin[M]=-53;
RRC_CONFIGURATION_REQ (msg_p).InterFreqCarrierFreqInfo[k].threshX_High[M]=10;
RRC_CONFIGURATION_REQ (msg_p).InterFreqCarrierFreqInfo[k].threshX_Low[M]=1;
RRC_CONFIGURATION_REQ (msg_p).InterFreqCarrierFreqInfo[k].allowedMeasBandwidth[M]=3;
}
// In the configuration file it is in seconds. For RRC it has to be in milliseconds
......@@ -3060,12 +3066,12 @@ void extract_and_decode_SI(int inst,int si_ind,uint8_t *si_container,int si_cont
break;
case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4:
//carrier->sib4 = &typeandinfo->choice.sib4;
carrier->sib4 = &typeandinfo->choice.sib4;
LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB4 in CU F1AP_SETUP_RESP message\n", inst);
break;
case LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5:
//carrier->sib5 = &typeandinfo->choice.sib5;
carrier->sib5 = &typeandinfo->choice.sib5;
LOG_I( ENB_APP, "[RRC %"PRIu8"] Found SIB5 in CU F1AP_SETUP_RESP message\n", inst);
break;
......
......@@ -81,11 +81,16 @@ mac_rrc_data_req(
eNB_RRC_INST *rrc;
rrc_eNB_carrier_data_t *carrier;
LTE_BCCH_BCH_Message_t *mib;
LTE_SystemInformationBlockType1_t *SIB1;
LTE_SchedulingInfo_t *SchedulingInfo;
LTE_SIB_Type_t *sib_type;
LTE_BCCH_BCH_Message_MBMS_t *mib_fembms;
rrc = RC.rrc[Mod_idP];
carrier = &rrc->carrier[CC_id];
mib = &carrier->mib;
mib_fembms = &carrier->mib_fembms;
SIB1 = &carrier->SIB1;
SchedulingInfo = &SIB1->schedulingInfoList.list;
if((Srb_id & RAB_OFFSET) == BCCH_SI_MBMS){
if (frameP%8 == 0) {
......@@ -154,7 +159,25 @@ mac_rrc_data_req(
} /* LOG_DEBUGFLAG(DEBUG_RRC) */
return(RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
} else {
}
else if ((true == RC.rrc[Mod_idP]->carrier[CC_id].sib5_Scheduled) && ((frameP%16) == 3)) {
memcpy(&buffer_pP[0],
RC.rrc[Mod_idP]->carrier[CC_id].SIB5,
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB5);
if (LOG_DEBUGFLAG(DEBUG_RRC)) {
LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 5\n",Mod_idP,frameP);
for (int i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB5; i++) {
LOG_T(RRC,"%x.",buffer_pP[i]);
}
LOG_T(RRC,"\n");
} /* LOG_DEBUGFLAG(DEBUG_RRC) */
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB5);
}
else {
return(0);
}
}
......
......@@ -894,8 +894,8 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
LTE_MCC_MNC_Digit_t *dummy_mnc_1;
LTE_MCC_MNC_Digit_t *dummy_mnc_2;
asn_enc_rval_t enc_rval;
LTE_SchedulingInfo_t *schedulingInfo=NULL,*schedulingInfo2=NULL;
LTE_SIB_Type_t *sib_type=NULL,*sib_type2=NULL;
LTE_SchedulingInfo_t schedulingInfo[5],*schedulingInfo2;
LTE_SIB_Type_t sib_type[5],*sib_type2;
uint8_t *buffer;
LTE_BCCH_DL_SCH_Message_t *bcch_message;
LTE_SystemInformationBlockType1_t **sib1;
......@@ -915,15 +915,13 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
bcch_message->message.choice.c1.present = LTE_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1;
// memcpy(&bcch_message.message.choice.c1.choice.systemInformationBlockType1,sib1,sizeof(SystemInformationBlockType1_t));
*sib1 = &bcch_message->message.choice.c1.choice.systemInformationBlockType1;
sib_type=CALLOC(1,sizeof(LTE_SIB_Type_t));
schedulingInfo=CALLOC(1,sizeof(LTE_SchedulingInfo_t));
PLMN_identity_info = CALLOC(1, sizeof(LTE_PLMN_IdentityInfo_t) * num_plmn);
if (PLMN_identity_info == NULL)
exit(1);
memset(PLMN_identity_info,0,num_plmn * sizeof(LTE_PLMN_IdentityInfo_t));
memset(schedulingInfo,0,sizeof(LTE_SchedulingInfo_t));
memset(schedulingInfo,0,5*sizeof(LTE_SchedulingInfo_t));
memset(sib_type,0,sizeof(LTE_SIB_Type_t));
if(configuration->eMBMS_M2_configured){
sib_type2=CALLOC(1,sizeof(LTE_SIB_Type_t));
......@@ -1037,16 +1035,28 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
//(*sib1)->p_Max = CALLOC(1, sizeof(P_Max_t));
// *((*sib1)->p_Max) = 23;
(*sib1)->freqBandIndicator = configuration->eutra_band[CC_id];
schedulingInfo->si_Periodicity=LTE_SchedulingInfo__si_Periodicity_rf8;
if(configuration->eMBMS_M2_configured){
schedulingInfo2->si_Periodicity=LTE_SchedulingInfo__si_Periodicity_rf8;
if (RC.ss.mode == SS_SOFTMODEM) {
for(int i=0; i < configuration->schedulingInfo_count; i++) {
schedulingInfo[i].si_Periodicity=configuration->schedulingInfo[i].si_Periodicity;
sib_type[i]=configuration->schedulingInfo[i].sib_MappingInfo.LTE_SIB_Type[i];
if(sib_type[i] == 2) {
RC.rrc[Mod_id]->carrier[CC_id].sib5_Scheduled = true;
}
ASN_SEQUENCE_ADD(&schedulingInfo[i].sib_MappingInfo.list,&sib_type[i]);
ASN_SEQUENCE_ADD(&(*sib1)->schedulingInfoList.list,&schedulingInfo[i]);
}
} else {
// This is for SIB2/3
(*sib1)->schedulingInfoList.list.free=free_LTE_SchedulingInfo_t;
asn_sequence_empty(&(*sib1)->schedulingInfoList.list);
*sib_type=LTE_SIB_Type_sibType3;
ASN_SEQUENCE_ADD(&schedulingInfo->sib_MappingInfo.list,sib_type);
ASN_SEQUENCE_ADD(&(*sib1)->schedulingInfoList.list,schedulingInfo);
schedulingInfo[0].si_Periodicity=LTE_SchedulingInfo__si_Periodicity_rf8;
sib_type[0]=LTE_SIB_Type_sibType3;
ASN_SEQUENCE_ADD(&schedulingInfo[0].sib_MappingInfo.list,&sib_type[0]);
ASN_SEQUENCE_ADD(&(*sib1)->schedulingInfoList.list,&schedulingInfo);
}
if(configuration->eMBMS_M2_configured){
schedulingInfo2->si_Periodicity=LTE_SchedulingInfo__si_Periodicity_rf8;
}
if(configuration->eMBMS_M2_configured){
*sib_type2=LTE_SIB_Type_sibType13_v920;
ASN_SEQUENCE_ADD(&schedulingInfo2->sib_MappingInfo.list,sib_type2);
......@@ -1054,6 +1064,7 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
}
// ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,NULL);
if (configuration->frame_type[CC_id] == TDD)
{
if(NULL == (*sib1)->tdd_Config){(*sib1)->tdd_Config = CALLOC(1,sizeof(struct LTE_TDD_Config));}
......@@ -2316,6 +2327,167 @@ uint8_t do_SIB23(uint8_t Mod_id,
return((enc_rval.encoded+7)/8);
}
uint8_t do_SIB4(uint8_t Mod_id,
int CC_id, BOOLEAN_t brOption,
RrcConfigurationReq *configuration
) {
struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member *sib4_part;
LTE_SystemInformationBlockType4_t **sib4 = &RC.rrc[Mod_id]->carrier[CC_id].sib4;
LTE_BCCH_DL_SCH_Message_t *bcch_message = &RC.rrc[Mod_id]->carrier[CC_id].systemInformation;
asn_enc_rval_t enc_rval;
uint8_t *buffer;
buffer = RC.rrc[Mod_id]->carrier[CC_id].SIB4;
LOG_I(RRC,"[eNB %d] Configuration SIB4, intraFreqNeighCellListPresent: %d \n", Mod_id, configuration->intraFreqNeighCellListPresent);
sib4_part = CALLOC(1,sizeof(struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member));
memset(sib4_part,0,sizeof(struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member));
sib4_part->present = LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4;
*sib4 = &sib4_part->choice.sib4;
/* TODO: Need to optimize the below code same as do_SIB5 and verify the SIB4 */
if(true == configuration->intraFreqNeighCellListPresent) {
ASN_SEQUENCE_ADD(&(*sib4)->intraFreqNeighCellList->list,configuration->InterFreqCarrierFreqInfo);
}
bcch_message->message.present = LTE_BCCH_DL_SCH_MessageType_PR_c1;
bcch_message->message.choice.c1.present = LTE_BCCH_DL_SCH_MessageType__c1_PR_systemInformation;
bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.present = LTE_SystemInformation__criticalExtensions_PR_systemInformation_r8;
bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count=0;
ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list,
sib4_part);
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,
NULL,
(void *)bcch_message,
buffer,
900);
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
LOG_D(RRC,"[eNB] SystemInformation4 Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
LOG_P(OAILOG_INFO, "BCCH_DL_SCH_Message", (uint8_t *)buffer, 900);
if (enc_rval.encoded==-1) {
msg("[RRC] ASN1 : SI encoding failed for SIB4\n");
return(-1);
}
return((enc_rval.encoded+7)/8);
}
uint8_t do_SIB5(uint8_t Mod_id,
int CC_id, BOOLEAN_t brOption,
RrcConfigurationReq *configuration
) {
struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member *sib5_part;
LTE_SystemInformationBlockType5_t **sib5 = &RC.rrc[Mod_id]->carrier[CC_id].sib5;
LTE_BCCH_DL_SCH_Message_t *bcch_message = &RC.rrc[Mod_id]->carrier[CC_id].systemInformation;
asn_enc_rval_t enc_rval;
uint8_t *buffer;
buffer = RC.rrc[Mod_id]->carrier[CC_id].SIB5;
if (!sib5) {
LOG_E(RRC,"[eNB %d] sib5 is null, exiting\n", Mod_id);
exit(-1);
}
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);
}
LOG_I(RRC,"[eNB %d] Configuration SIB5 for CC_id: %d \n", Mod_id,CC_id);
sib5_part = CALLOC(1,sizeof(struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member));
memset(sib5_part,0,sizeof(struct LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member));
sib5_part->present = LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5;
*sib5 = &sib5_part->choice.sib5;
LTE_InterFreqCarrierFreqInfo_t *InterFreqCarrierInfo;
InterFreqCarrierInfo = CALLOC(1,sizeof(struct LTE_InterFreqCarrierFreqInfo));
for(int i=0;i<configuration->InterFreqCarrierFreqInfoCount;i++) {
InterFreqCarrierInfo->dl_CarrierFreq = configuration->InterFreqCarrierFreqInfo[i].dl_CarrierFreq[CC_id];
InterFreqCarrierInfo->q_RxLevMin = configuration->InterFreqCarrierFreqInfo[i].q_RxLevMin[CC_id];
if(true == configuration->InterFreqCarrierFreqInfo[i].p_Max_Present[CC_id]) {
InterFreqCarrierInfo->p_Max = configuration->InterFreqCarrierFreqInfo[i].p_Max[CC_id];
}
InterFreqCarrierInfo->t_ReselectionEUTRA = configuration->InterFreqCarrierFreqInfo[i].t_ReselectionEUTRA[CC_id];
if(true == configuration->InterFreqCarrierFreqInfo[i].t_ReselectionEUTRA_SF_Present[CC_id]) {
InterFreqCarrierInfo->t_ReselectionEUTRA_SF = configuration->InterFreqCarrierFreqInfo[i].t_ReselectionEUTRA_SF[CC_id];
}
InterFreqCarrierInfo->threshX_High = configuration->InterFreqCarrierFreqInfo[i].threshX_High[CC_id];
InterFreqCarrierInfo->threshX_Low = configuration->InterFreqCarrierFreqInfo[i].threshX_Low[CC_id];
InterFreqCarrierInfo->allowedMeasBandwidth = configuration->InterFreqCarrierFreqInfo[i].allowedMeasBandwidth[CC_id];
InterFreqCarrierInfo->presenceAntennaPort1 = configuration->InterFreqCarrierFreqInfo[i].presenceAntennaPort1[CC_id];
if(true == configuration->InterFreqCarrierFreqInfo[i].cellReselectionPriority_Present[CC_id]) {
InterFreqCarrierInfo->cellReselectionPriority = configuration->InterFreqCarrierFreqInfo[i].cellReselectionPriority[CC_id];
}
InterFreqCarrierInfo->neighCellConfig.size = 0;//1;
//InterFreqCarrierInfo->neighCellConfig.buf = CALLOC(1,1);
InterFreqCarrierInfo->neighCellConfig.bits_unused = 0;
InterFreqCarrierInfo->neighCellConfig.buf = NULL;//[0] = 0x01<<4;
if(true == configuration->InterFreqCarrierFreqInfo[i].q_OffsetFreqPresent[CC_id]) {
InterFreqCarrierInfo->q_OffsetFreq = configuration->InterFreqCarrierFreqInfo[i].q_OffsetFreq[CC_id];
}
if(true == configuration->InterFreqCarrierFreqInfo[i].interFreqNeighCellList_Present[CC_id]) {
ASN_SEQUENCE_ADD(&InterFreqCarrierInfo->interFreqNeighCellList,configuration->InterFreqCarrierFreqInfo[i].interFreqNeighCellList[CC_id]);
}
if(true == configuration->InterFreqCarrierFreqInfo[i].interFreqBlackCellList_Present[CC_id]) {
ASN_SEQUENCE_ADD(&InterFreqCarrierInfo->interFreqBlackCellList,configuration->InterFreqCarrierFreqInfo[i].interFreqBlackCellList[CC_id]);
}
if(true == configuration->InterFreqCarrierFreqInfo[i].q_QualMin_r9_Present[CC_id]) {
InterFreqCarrierInfo->ext1->q_QualMin_r9 = configuration->InterFreqCarrierFreqInfo[i].q_QualMin_r9[CC_id];
}
if(true == configuration->InterFreqCarrierFreqInfo[i].threshX_Q_r9_Present[CC_id]) {
InterFreqCarrierInfo->ext1->threshX_Q_r9->threshX_HighQ_r9 = configuration->InterFreqCarrierFreqInfo[i].threshX_Q_r9[CC_id].threshX_HighQ_r9;
InterFreqCarrierInfo->ext1->threshX_Q_r9->threshX_LowQ_r9 = configuration->InterFreqCarrierFreqInfo[i].threshX_Q_r9[CC_id].threshX_LowQ_r9;
}
if(true == configuration->InterFreqCarrierFreqInfo[i].q_QualMinWB_r11_Present[CC_id]) {
InterFreqCarrierInfo->ext2->q_QualMinWB_r11 = configuration->InterFreqCarrierFreqInfo[i].q_QualMinWB_r11[CC_id];
}
ASN_SEQUENCE_ADD(&(*sib5)->interFreqCarrierFreqList.list,InterFreqCarrierInfo);
}
(*sib5)->lateNonCriticalExtension = NULL;
(*sib5)->ext1 = NULL;
(*sib5)->ext2 = NULL;
(*sib5)->ext3 = NULL;
(*sib5)->ext4 = NULL;
(*sib5)->ext5 = NULL;
(*sib5)->ext6 = NULL;
(*sib5)->ext7 = NULL;
bcch_message->message.present = LTE_BCCH_DL_SCH_MessageType_PR_c1;
bcch_message->message.choice.c1.present = LTE_BCCH_DL_SCH_MessageType__c1_PR_systemInformation;
bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.present = LTE_SystemInformation__criticalExtensions_PR_systemInformation_r8;
bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count=0;
ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list,
sib5_part);
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,
NULL,
(void *)bcch_message,
buffer,
900);
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
LOG_D(RRC,"[eNB] SystemInformation5 Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
LOG_P(OAILOG_INFO, "BCCH_DL_SCH_Message", (uint8_t *)buffer, 900);
if (enc_rval.encoded==-1) {
msg("[RRC] ASN1 : SI encoding failed for SIB5\n");
return(-1);
}
return((enc_rval.encoded+7)/8);
}
uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size, uint8_t *rv) {
asn_enc_rval_t enc_rval;
uint8_t buf[5],buf2=0;
......
......@@ -131,6 +131,30 @@ uint8_t do_SIB23(uint8_t Mod_id,int CC_id, BOOLEAN_t brOption,
RrcConfigurationReq *configuration
);
/**
\brief Generate a default configuration for SIB4 in one System Information PDU (eNB).
@param Mod_id Index of eNB (used to derive some parameters)
@param buffer Pointer to PER-encoded ASN.1 description of SI PDU
@param systemInformation Pointer to asn1c C representation of SI PDU
@param sib4 Pointer (returned) to sib4 component withing SI PDU
@return size of encoded bit stream in bytes*/
uint8_t do_SIB4(uint8_t Mod_id,int CC_id, BOOLEAN_t brOption,
RrcConfigurationReq *configuration
);
/**
\brief Generate a default configuration for SIB5 in one System Information PDU (eNB).
@param Mod_id Index of eNB (used to derive some parameters)
@param buffer Pointer to PER-encoded ASN.1 description of SI PDU
@param systemInformation Pointer to asn1c C representation of SI PDU
@param sib5 Pointer (returned) to sib5 component withing SI PDU
@return size of encoded bit stream in bytes*/
uint8_t do_SIB5(uint8_t Mod_id,int CC_id, BOOLEAN_t brOption,
RrcConfigurationReq *configuration
);
/**
\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI. This
routine only generates an mo-data establishment cause.
......
......@@ -693,6 +693,10 @@ typedef struct {
uint8_t sizeof_SIB1;
uint8_t *SIB23;
uint8_t sizeof_SIB23;
uint8_t *SIB4;
uint8_t sizeof_SIB4;
uint8_t *SIB5;
uint8_t sizeof_SIB5;
uint8_t *SIB1_BR;
uint8_t sizeof_SIB1_BR;
uint8_t *SIB23_BR;
......@@ -725,6 +729,8 @@ typedef struct {
LTE_SystemInformationBlockType1_t *sib1;
LTE_SystemInformationBlockType2_t *sib2;
LTE_SystemInformationBlockType3_t *sib3;
LTE_SystemInformationBlockType4_t *sib4;
LTE_SystemInformationBlockType5_t *sib5;
LTE_SystemInformationBlockType1_t *sib1_BR;
LTE_SystemInformationBlockType2_t *sib2_BR;
LTE_SystemInformationBlockType1_MBMS_r14_t *sib1_MBMS;
......@@ -743,6 +749,7 @@ typedef struct {
LTE_MCCH_Message_t mcch_counting;
LTE_MBMSCountingRequest_r10_t *mcch_message_counting;
SRB_INFO MCCH_MESS_COUNTING[8];// MAX_MBSFN_AREA
bool sib5_Scheduled;
//TTN - SIB 18,19,21 for D2D
LTE_SystemInformationBlockType18_r12_t *sib18;
......
......@@ -247,6 +247,8 @@ init_SI(
if(NULL==carrier->MIB) {carrier->MIB = (uint8_t *) malloc16(4);}
carrier->sizeof_SIB1 = 0;
carrier->sizeof_SIB23 = 0;
carrier->sizeof_SIB4 = 0;
carrier->sizeof_SIB5 = 0;
if(NULL==carrier->SIB1) {carrier->SIB1 = (uint8_t *) malloc16(32);}
AssertFatal(carrier->SIB1!=NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for SIB1 allocated\n",
......@@ -337,6 +339,34 @@ init_SI(
PROTOCOL_RRC_CTXT_ARGS(ctxt_pP),
carrier->sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift);
if(true == configuration->sib4_Present) {
if(NULL == carrier->SIB4) {
carrier->SIB4 = (uint8_t *) malloc16(64);
}
AssertFatal(carrier->SIB4!=NULL,"cannot allocate memory for SIB4");
carrier->sizeof_SIB4 = do_SIB4(ctxt_pP->module_id,
CC_id,
FALSE,
configuration
);
LOG_I(RRC,"do_SIB4, size %d \n ", carrier->sizeof_SIB4);
AssertFatal(carrier->sizeof_SIB4 != 255,"FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB4 == 255");
}
if(true == configuration->sib5_Present) {
if(NULL == carrier->SIB5) {
carrier->SIB5 = (uint8_t *) malloc16(64);
}
AssertFatal(carrier->SIB5!=NULL,"cannot allocate memory for SIB5");
carrier->sizeof_SIB5 = do_SIB5(ctxt_pP->module_id,
CC_id,
FALSE,
configuration
);
LOG_I(RRC,"do_SIB5, size %d \n ", carrier->sizeof_SIB5);
AssertFatal(carrier->sizeof_SIB5 != 255,"FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB5 == 255");
}
if (carrier->MBMS_flag > 0) {
for (i = 0; i < carrier->sib2->mbsfn_SubframeConfigList->list.count; i++) {
// SIB 2
......
......@@ -435,6 +435,16 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
}
}
RRC_CONFIGURATION_REQ(msg_p).schedulingInfo_count = SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.schedulingInfoList.d;
RRC_CONFIGURATION_REQ(msg_p).schedulingInfo = CALLOC(RRC_CONFIGURATION_REQ(msg_p).schedulingInfo_count,sizeof(struct lte_SchedulingInfo_s));
for(int k=0;k < SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.schedulingInfoList.d; k++) {
RRC_CONFIGURATION_REQ(msg_p).schedulingInfo[k].si_Periodicity = SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.schedulingInfoList.v[k].si_Periodicity;
for(int j=0;j < SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.schedulingInfoList.v[k].sib_MappingInfo.d; j++) {
RRC_CONFIGURATION_REQ(msg_p).schedulingInfo[k].sib_MappingInfo.LTE_SIB_Type[k] = SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.schedulingInfoList.v[k].sib_MappingInfo.v[j];
}
}
RRC_CONFIGURATION_REQ(msg_p).num_plmn[cell_index] = SIB1_CELL_ACCESS_REL_INFO.plmn_IdentityList.d;
RRC_CONFIGURATION_REQ(msg_p).systemInfoValueTag[cell_index] = SIDL_SIB1_VAL.c1.v.systemInformationBlockType1.systemInfoValueTag;
......@@ -448,7 +458,7 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
} else if(SIB1_CELL_ACCESS_REL_INFO.plmn_IdentityList.v->plmn_Identity.mnc.d == 3) {
RRC_CONFIGURATION_REQ(msg_p).mnc[cell_index][i] = (((SIB1_CELL_ACCESS_REL_INFO.plmn_IdentityList.v->plmn_Identity.mnc.v[0])<<16) | ((SIB1_CELL_ACCESS_REL_INFO.plmn_IdentityList.v->plmn_Identity.mnc.v[1])<<8) | ((SIB1_CELL_ACCESS_REL_INFO.plmn_IdentityList.v->plmn_Identity.mnc.v[2])<<0));
}
}
if (AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.d == true)
{
LOG_A(ENB_SS, "[SYS] [SIs] size=%ld", AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.d);
......@@ -462,21 +472,95 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
{
for(int j=0; j< AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.d; j++)
{
if(SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib2 == AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].d)
{
if(SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib2 == AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].d) {
RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig[cell_index].prach_config_index = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib2.radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_ConfigIndex;
RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig[cell_index].prach_high_speed = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib2.radioResourceConfigCommon.prach_Config.prach_ConfigInfo.highSpeedFlag;
RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig[cell_index].prach_zero_correlation = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib2.radioResourceConfigCommon.prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig;
RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig[cell_index].prach_freq_offset = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib2.radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_FreqOffset;
}
if(SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib3 == AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].d)
{
/* SIB3 */
if(SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib3 == AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].d) {
RRC_CONFIGURATION_REQ(msg_p).q_Hyst[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib3.cellReselectionInfoCommon.q_Hyst;
RRC_CONFIGURATION_REQ(msg_p).threshServingLow[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib3.cellReselectionServingFreqInfo.threshServingLow;
RRC_CONFIGURATION_REQ(msg_p).cellReselectionPriority[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib3.cellReselectionServingFreqInfo.cellReselectionPriority;
RRC_CONFIGURATION_REQ(msg_p).sib3_q_RxLevMin[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib3.intraFreqCellReselectionInfo.q_RxLevMin;
RRC_CONFIGURATION_REQ(msg_p).t_ReselectionEUTRA[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib3.intraFreqCellReselectionInfo.t_ReselectionEUTRA;
}
/* SIB4 */
if(SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib4 == AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].d) {
RRC_CONFIGURATION_REQ(msg_p).sib4_Present = true;
if(true == AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib4.intraFreqNeighCellList.d) {
RRC_CONFIGURATION_REQ(msg_p).intraFreqNeighCellListPresent = true;
for(int j=0;j < AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib4.intraFreqNeighCellList.v.d; j++) {
RRC_CONFIGURATION_REQ(msg_p).intraFreqNeighCellList[j].physCellId = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib4.intraFreqNeighCellList.v.v[j].physCellId;
RRC_CONFIGURATION_REQ(msg_p).intraFreqNeighCellList[j].q_OffsetCell = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib4.intraFreqNeighCellList.v.v[j].q_OffsetCell;
}
}
}
/* SIB5 */
if(SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib5 == AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].d) {
RRC_CONFIGURATION_REQ(msg_p).sib5_Present = true;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfoCount = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.d;
for(int k=0;k < AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.d; k++) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].dl_CarrierFreq[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].dl_CarrierFreq;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].q_RxLevMin[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].q_RxLevMin;
if(AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].p_Max.d) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].p_Max_Present[cell_index] = true;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].p_Max[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].p_Max.v;
}
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].t_ReselectionEUTRA[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].t_ReselectionEUTRA;
if(AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].t_ReselectionEUTRA_SF.d) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].t_ReselectionEUTRA_SF_Present[cell_index] = true;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].t_ReselectionEUTRA_SF[cell_index]->sf_Medium = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].t_ReselectionEUTRA_SF.v.sf_Medium;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].t_ReselectionEUTRA_SF[cell_index]->sf_High = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].t_ReselectionEUTRA_SF.v.sf_High;
}
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].threshX_High[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].threshX_High;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].threshX_Low[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].threshX_Low;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].allowedMeasBandwidth[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].allowedMeasBandwidth;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].presenceAntennaPort1[cell_index] = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].presenceAntennaPort1;
if(AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].cellReselectionPriority.d) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].cellReselectionPriority[cell_index] = CALLOC(1,sizeof(long));
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].cellReselectionPriority_Present[cell_index] = true;
*(RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].cellReselectionPriority[cell_index]) = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].cellReselectionPriority.v;
}
//RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].neighCellConfig = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].neighCellConfig;
if(AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].q_OffsetFreq.d) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].q_OffsetFreqPresent [cell_index]= true;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].q_OffsetFreq[cell_index] = CALLOC(1,sizeof(enum LTE_Q_OffsetRange));
*(RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].q_OffsetFreq[cell_index]) = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].q_OffsetFreq.v;
}
if(AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].interFreqNeighCellList.d) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].interFreqNeighCellList_Present[cell_index] = true;
for(int l=0; l< AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].interFreqNeighCellList.v.d; l++) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].interFreqNeighCellList[cell_index]->physCellId = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].interFreqNeighCellList.v.v[l].physCellId;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].interFreqNeighCellList[cell_index]->q_OffsetCell = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].interFreqNeighCellList.v.v[l].q_OffsetCell;
}
}
if(AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].interFreqBlackCellList.d) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].interFreqBlackCellList_Present[cell_index] = true;
for(int m=0; m<AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].interFreqBlackCellList.v.d; m++) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].interFreqBlackCellList[cell_index]->start = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].interFreqBlackCellList.v.v[m].start;
if(AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].interFreqBlackCellList.v.v[m].range.d) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].interFreqBlackCellList[cell_index]->range = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].interFreqBlackCellList.v.v[m].range.v;
}
}
}
if(AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].q_QualMin_r9.d) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].q_QualMin_r9_Present[cell_index] = true;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].q_QualMin_r9[cell_index] = CALLOC(1,sizeof(long));
*(RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].q_QualMin_r9[cell_index]) = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].q_QualMin_r9.v;
}
if(AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].threshX_Q_r9.d) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].threshX_Q_r9_Present[cell_index] = true;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].threshX_Q_r9[cell_index].threshX_HighQ_r9 = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].threshX_Q_r9.v.threshX_HighQ_r9;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].threshX_Q_r9[cell_index].threshX_LowQ_r9 = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].threshX_Q_r9.v.threshX_LowQ_r9;
}
if(AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].q_QualMinWB_r11.d) {
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].q_QualMinWB_r11_Present[cell_index] = true;
RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].q_QualMinWB_r11[cell_index] = CALLOC(1,sizeof(long));
*(RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].q_QualMinWB_r11[cell_index]) = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].q_QualMinWB_r11.v;
}
}
}
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment