From 272fa05fea4734cd4788a8169a8aa27f842dc5cd Mon Sep 17 00:00:00 2001 From: WEI-TAI CHEN Date: Wed, 8 Aug 2018 16:19:43 -0700 Subject: [PATCH] new function in order to fill CellGroupConfig --- openair2/RRC/NR/MESSAGES/asn1_msg.c | 37 ++++++-- openair2/RRC/NR/MESSAGES/asn1_msg.h | 31 ++++-- openair2/RRC/NR/nr_rrc_config.c | 85 +++++++++++++++++ openair2/RRC/NR/nr_rrc_config.h | 141 ++++++++++++++-------------- openair2/RRC/NR/nr_rrc_proto.h | 2 +- openair2/RRC/NR/rrc_gNB.c | 62 +++++++++--- 6 files changed, 260 insertions(+), 98 deletions(-) diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c index 5038ecbd1a..0369203724 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.c +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c @@ -41,7 +41,6 @@ #include #include "asn1_msg.h" -#include "RRC/NR/nr_rrc_defs.h" #include "RRC/NR/nr_rrc_extern.h" #if defined(NR_Rel15) @@ -280,13 +279,13 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, return((enc_rval.encoded+7)/8); } -void fill_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, - int CC_id, - #if defined(ENABLE_ITTI) - gNB_RrcConfigurationReq *configuration, - #endif - int initial_flag - ) +void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, + int CC_id, + #if defined(ENABLE_ITTI) + gNB_RrcConfigurationReq *configuration, + #endif + int initial_flag + ) { NR_ServingCellConfigCommon_t **servingcellconfigcommon = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon; NR_FreqBandIndicatorNR_t *dl_frequencyBandList; @@ -691,6 +690,8 @@ void fill_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, (*servingcellconfigcommon)->uplinkConfigCommon->timeAlignmentTimerCommon = configuration->UL_timeAlignmentTimerCommon[CC_id]; + (*servingcellconfigcommon)->n_TimingAdvanceOffset = CALLOC(1,sizeof(long)); + *((*servingcellconfigcommon)->n_TimingAdvanceOffset)=configuration->ServingCellConfigCommon_n_TimingAdvanceOffset[CC_id]; //ssb_PositionsInBurst (*servingcellconfigcommon)->ssb_PositionsInBurst->present = configuration->ServingCellConfigCommon_ssb_PositionsInBurst_PR[CC_id]; @@ -820,3 +821,23 @@ void fill_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, } +void do_RLC_BEARER(uint8_t Mod_id, + int CC_id, + struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_BearerToAddModList, + rlc_bearer_config_t *rlc_config){ + +} + +void do_MAC_CELLGROUP(uint8_t Mod_id, + int CC_id, + struct NR_MAC_CellGroupConfig *mac_CellGroupConfig, + mac_cellgroup_t *mac_cellgroup_config){ + +} + +void do_PHYSICALCELLGROUP(uint8_t Mod_id, + int CC_id, + struct NR_PhysicalCellGroupConfig *physicalCellGroupConfig, + physicalcellgroup_t *physicalcellgroup_config){ + +} \ No newline at end of file diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.h b/openair2/RRC/NR/MESSAGES/asn1_msg.h index 6b476f8041..95f4258e03 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.h +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.h @@ -40,6 +40,8 @@ #include /* for _ASN_DEFAULT_STACK_MAX */ #include "RRC/NR/nr_rrc_defs.h" +#include "RRC/NR/nr_rrc_config.h" + /* * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) @@ -79,13 +81,28 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,int Mod_id,int CC_id, gNB_RrcConfigurationReq *configuration); -void fill_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, - int CC_id, - #if defined(ENABLE_ITTI) - gNB_RrcConfigurationReq *configuration, - #endif - int initial_flag - ); +void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, + int CC_id, + #if defined(ENABLE_ITTI) + gNB_RrcConfigurationReq *configuration, + #endif + int initial_flag + ); + +void do_RLC_BEARER(uint8_t Mod_id, + int CC_id, + struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_BearerToAddModList, + rlc_bearer_config_t *rlc_config); + +void do_MAC_CELLGROUP(uint8_t Mod_id, + int CC_id, + struct NR_MAC_CellGroupConfig *mac_CellGroupConfig, + mac_cellgroup_t *mac_cellgroup_config); + +void do_PHYSICALCELLGROUP(uint8_t Mod_id, + int CC_id, + struct NR_PhysicalCellGroupConfig *physicalCellGroupConfig, + physicalcellgroup_t *physicalcellgroup_config); diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c index ee5fce21ad..f22feb89b2 100644 --- a/openair2/RRC/NR/nr_rrc_config.c +++ b/openair2/RRC/NR/nr_rrc_config.c @@ -168,3 +168,88 @@ void rrc_config_servingcellconfigcommon(uint8_t Mod_id, common_configuration->RateMatchPatternLTE_CRS_subframeAllocation_choice[CC_id] = 0; } +void rrc_config_rlc_bearer(uint8_t Mod_id, + int CC_id, + rlc_bearer_config_t *rlc_config + ){ + rlc_config->LogicalChannelIdentity[CC_id] = 0; + rlc_config->servedRadioBearer_present[CC_id] = 0; + rlc_config->srb_Identity[CC_id] = 0; + rlc_config->drb_Identity[CC_id] = 0; + rlc_config->reestablishRLC[CC_id] = 0; + rlc_config->rlc_Config_present[CC_id] = 0; + rlc_config->ul_AM_sn_FieldLength[CC_id] = 0; + rlc_config->t_PollRetransmit[CC_id] = 0; + rlc_config->pollPDU[CC_id] = 0; + rlc_config->pollByte[CC_id] = 0; + rlc_config->maxRetxThreshold[CC_id] = 0; + rlc_config->dl_AM_sn_FieldLength[CC_id] = 0; + rlc_config->dl_AM_t_Reassembly[CC_id] = 0; + rlc_config->t_StatusProhibit[CC_id] = 0; + rlc_config->ul_UM_sn_FieldLength[CC_id] = 0; + rlc_config->dl_UM_sn_FieldLength[CC_id] = 0; + rlc_config->dl_UM_t_Reassembly[CC_id] = 0; + rlc_config->priority[CC_id] = 0; + rlc_config->prioritisedBitRate[CC_id] = 0; + rlc_config->bucketSizeDuration[CC_id] = 0; + rlc_config->allowedServingCells[CC_id] = 0; + rlc_config->subcarrierspacing[CC_id] = 0; + rlc_config->maxPUSCH_Duration[CC_id] = 0; + rlc_config->configuredGrantType1Allowed[CC_id] = 0; + rlc_config->logicalChannelGroup[CC_id] = 0; + rlc_config->schedulingRequestID[CC_id] = 0; + rlc_config->logicalChannelSR_Mask[CC_id] = 0; + rlc_config->logicalChannelSR_DelayTimerApplied[CC_id] = 0; +} + +void rrc_config_mac_cellgroup(uint8_t Mod_id, + int CC_id, + mac_cellgroup_t *mac_cellgroup_config + ){ + mac_cellgroup_config->DRX_Config_PR[CC_id] = 0; + mac_cellgroup_config->drx_onDurationTimer_PR[CC_id] = 0; + mac_cellgroup_config->subMilliSeconds[CC_id] = 0; + mac_cellgroup_config->milliSeconds[CC_id] = 0; + mac_cellgroup_config->drx_InactivityTimer[CC_id] = 0; + mac_cellgroup_config->drx_HARQ_RTT_TimerDL[CC_id] = 0; + mac_cellgroup_config->drx_HARQ_RTT_TimerUL[CC_id] = 0; + mac_cellgroup_config->drx_RetransmissionTimerDL[CC_id] = 0; + mac_cellgroup_config->drx_RetransmissionTimerUL[CC_id] = 0; + mac_cellgroup_config->drx_LongCycleStartOffset_PR[CC_id] = 0; + mac_cellgroup_config->drx_LongCycleStartOffset[CC_id] = 0; + mac_cellgroup_config->drx_ShortCycle[CC_id] = 0; + mac_cellgroup_config->drx_ShortCycleTimer[CC_id] = 0; + mac_cellgroup_config->drx_SlotOffset[CC_id] = 0; + mac_cellgroup_config->schedulingRequestId[CC_id] = 0; + mac_cellgroup_config->sr_ProhibitTimer[CC_id] = 0; + mac_cellgroup_config->sr_TransMax[CC_id] = 0; + mac_cellgroup_config->periodicBSR_Timer[CC_id] = 0; + mac_cellgroup_config->retxBSR_Timer[CC_id] = 0; + mac_cellgroup_config->logicalChannelSR_DelayTimer[CC_id] = 0; + mac_cellgroup_config->tag_Id[CC_id] = 0; + mac_cellgroup_config->timeAlignmentTimer[CC_id] = 0; + mac_cellgroup_config->PHR_Config_PR[CC_id] = 0; + mac_cellgroup_config->phr_PeriodicTimer[CC_id] = 0; + mac_cellgroup_config->phr_ProhibitTimer[CC_id] = 0; + mac_cellgroup_config->phr_Tx_PowerFactorChange[CC_id] = 0; + mac_cellgroup_config->multiplePHR[CC_id] = 0; + mac_cellgroup_config->phr_Type2SpCell[CC_id] = 0; + mac_cellgroup_config->phr_Type2OtherCell[CC_id] = 0; + mac_cellgroup_config->phr_ModeOtherCG[CC_id] = 0; + mac_cellgroup_config->skipUplinkTxDynamic[CC_id] = 0; +} + +void rrc_config_physicalcellgroup(uint8_t Mod_id, + int CC_id, + physicalcellgroup_t *physicalcellgroup_config + ){ + physicalcellgroup_config->harq_ACK_SpatialBundlingPUCCH[CC_id] = 0; + physicalcellgroup_config->harq_ACK_SpatialBundlingPUSCH[CC_id] = 0; + physicalcellgroup_config->p_NR[CC_id] = 0; + physicalcellgroup_config->pdsch_HARQ_ACK_Codebook[CC_id] = 0; + physicalcellgroup_config->tpc_SRS_RNTI[CC_id] = 0; + physicalcellgroup_config->tpc_PUCCH_RNTI[CC_id] = 0; + physicalcellgroup_config->tpc_PUSCH_RNTI[CC_id] = 0; + physicalcellgroup_config->sp_CSI_RNTI[CC_id] = 0; + physicalcellgroup_config->RNTI_Value[CC_id] = 0; +} \ No newline at end of file diff --git a/openair2/RRC/NR/nr_rrc_config.h b/openair2/RRC/NR/nr_rrc_config.h index a9c47c2acb..20cb226e93 100644 --- a/openair2/RRC/NR/nr_rrc_config.h +++ b/openair2/RRC/NR/nr_rrc_config.h @@ -28,83 +28,86 @@ * \email: raymond.knopp@eurecom.fr, kroempa@gmail.com */ +#ifndef __NR_RRC_CONFIG_H__ +#define __NR_RRC_CONFIG_H__ + #include "nr_rrc_defs.h" typedef struct rlc_bearer_config_s{ - long LogicalChannelIdentity; - long servedRadioBearer_present; - long srb_Identity; - long drb_Identity; - long reestablishRLC; - long rlc_Config_present; - long ul_AM_sn_FieldLength; - long t_PollRetransmit; - long pollPDU; - long pollByte; - long maxRetxThreshold; - long dl_AM_sn_FieldLength; - long dl_AM_t_Reassembly; - long t_StatusProhibit; - long ul_UM_sn_FieldLength; - long dl_UM_sn_FieldLength; - long dl_UM_t_Reassembly; - long priority; - long prioritisedBitRate; - long bucketSizeDuration; - long allowedServingCells; - long subcarrierspacing; - long maxPUSCH_Duration; - long configuredGrantType1Allowed; - long logicalChannelGroup; - long schedulingRequestID; /* OPTIONAL */ - BOOLEAN_t logicalChannelSR_Mask; - BOOLEAN_t logicalChannelSR_DelayTimerApplied; + long LogicalChannelIdentity[MAX_NUM_CCs]; + long servedRadioBearer_present[MAX_NUM_CCs]; + long srb_Identity[MAX_NUM_CCs]; + long drb_Identity[MAX_NUM_CCs]; + long reestablishRLC[MAX_NUM_CCs]; + long rlc_Config_present[MAX_NUM_CCs]; + long ul_AM_sn_FieldLength[MAX_NUM_CCs]; + long t_PollRetransmit[MAX_NUM_CCs]; + long pollPDU[MAX_NUM_CCs]; + long pollByte[MAX_NUM_CCs]; + long maxRetxThreshold[MAX_NUM_CCs]; + long dl_AM_sn_FieldLength[MAX_NUM_CCs]; + long dl_AM_t_Reassembly[MAX_NUM_CCs]; + long t_StatusProhibit[MAX_NUM_CCs]; + long ul_UM_sn_FieldLength[MAX_NUM_CCs]; + long dl_UM_sn_FieldLength[MAX_NUM_CCs]; + long dl_UM_t_Reassembly[MAX_NUM_CCs]; + long priority[MAX_NUM_CCs]; + long prioritisedBitRate[MAX_NUM_CCs]; + long bucketSizeDuration[MAX_NUM_CCs]; + long allowedServingCells[MAX_NUM_CCs]; + long subcarrierspacing[MAX_NUM_CCs]; + long maxPUSCH_Duration[MAX_NUM_CCs]; + long configuredGrantType1Allowed[MAX_NUM_CCs]; + long logicalChannelGroup[MAX_NUM_CCs]; + long schedulingRequestID[MAX_NUM_CCs]; /* OPTIONAL */ + int logicalChannelSR_Mask[MAX_NUM_CCs]; + int logicalChannelSR_DelayTimerApplied[MAX_NUM_CCs]; }rlc_bearer_config_t; typedef struct mac_cellgroup_s{ - long DRX_Config_PR; - long drx_onDurationTimer_PR; - long subMilliSeconds; - long milliSeconds; - long drx_InactivityTimer; - long drx_HARQ_RTT_TimerDL; - long drx_HARQ_RTT_TimerUL; - long drx_RetransmissionTimerDL; - long drx_RetransmissionTimerUL; - long drx_LongCycleStartOffset_PR; - long drx_LongCycleStartOffset; - long drx_ShortCycle; - long drx_ShortCycleTimer; - long drx_SlotOffset; - long schedulingRequestId; - long sr_ProhibitTimer; - long sr_TransMax; - long periodicBSR_Timer; - long retxBSR_Timer; - long logicalChannelSR_DelayTimer; - long tag_Id; - long timeAlignmentTimer; - long PHR_Config_PR; - long phr_PeriodicTimer; - long phr_ProhibitTimer; - long phr_Tx_PowerFactorChange; - BOOLEAN_t multiplePHR; - BOOLEAN_t phr_Type2SpCell; - BOOLEAN_t phr_Type2OtherCell; - long phr_ModeOtherCG; - BOOLEAN_t skipUplinkTxDynamic; + long DRX_Config_PR[MAX_NUM_CCs]; + long drx_onDurationTimer_PR[MAX_NUM_CCs]; + long subMilliSeconds[MAX_NUM_CCs]; + long milliSeconds[MAX_NUM_CCs]; + long drx_InactivityTimer[MAX_NUM_CCs]; + long drx_HARQ_RTT_TimerDL[MAX_NUM_CCs]; + long drx_HARQ_RTT_TimerUL[MAX_NUM_CCs]; + long drx_RetransmissionTimerDL[MAX_NUM_CCs]; + long drx_RetransmissionTimerUL[MAX_NUM_CCs]; + long drx_LongCycleStartOffset_PR[MAX_NUM_CCs]; + long drx_LongCycleStartOffset[MAX_NUM_CCs]; + long drx_ShortCycle[MAX_NUM_CCs]; + long drx_ShortCycleTimer[MAX_NUM_CCs]; + long drx_SlotOffset[MAX_NUM_CCs]; + long schedulingRequestId[MAX_NUM_CCs]; + long sr_ProhibitTimer[MAX_NUM_CCs]; + long sr_TransMax[MAX_NUM_CCs]; + long periodicBSR_Timer[MAX_NUM_CCs]; + long retxBSR_Timer[MAX_NUM_CCs]; + long logicalChannelSR_DelayTimer[MAX_NUM_CCs]; + long tag_Id[MAX_NUM_CCs]; + long timeAlignmentTimer[MAX_NUM_CCs]; + long PHR_Config_PR[MAX_NUM_CCs]; + long phr_PeriodicTimer[MAX_NUM_CCs]; + long phr_ProhibitTimer[MAX_NUM_CCs]; + long phr_Tx_PowerFactorChange[MAX_NUM_CCs]; + int multiplePHR[MAX_NUM_CCs]; + int phr_Type2SpCell[MAX_NUM_CCs]; + int phr_Type2OtherCell[MAX_NUM_CCs]; + long phr_ModeOtherCG[MAX_NUM_CCs]; + int skipUplinkTxDynamic[MAX_NUM_CCs]; }mac_cellgroup_t; typedef struct physicalcellgroup_s{ - long harq_ACK_SpatialBundlingPUCCH; - long harq_ACK_SpatialBundlingPUSCH; - long p_NR; - long pdsch_HARQ_ACK_Codebook; - long tpc_SRS_RNTI; - long tpc_PUCCH_RNTI; - long tpc_PUSCH_RNTI; - long sp_CSI_RNTI; - long RNTI_Value; + long harq_ACK_SpatialBundlingPUCCH[MAX_NUM_CCs]; + long harq_ACK_SpatialBundlingPUSCH[MAX_NUM_CCs]; + long p_NR[MAX_NUM_CCs]; + long pdsch_HARQ_ACK_Codebook[MAX_NUM_CCs]; + long tpc_SRS_RNTI[MAX_NUM_CCs]; + long tpc_PUCCH_RNTI[MAX_NUM_CCs]; + long tpc_PUSCH_RNTI[MAX_NUM_CCs]; + long sp_CSI_RNTI[MAX_NUM_CCs]; + long RNTI_Value[MAX_NUM_CCs]; }physicalcellgroup_t; void rrc_config_servingcellconfigcommon(uint8_t Mod_id, @@ -128,3 +131,5 @@ void rrc_config_physicalcellgroup(uint8_t Mod_id, int CC_id, physicalcellgroup_t *physicalcellgroup_config ); + +#endif \ No newline at end of file diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h index 5d67fc7f52..67b5c34db9 100644 --- a/openair2/RRC/NR/nr_rrc_proto.h +++ b/openair2/RRC/NR/nr_rrc_proto.h @@ -32,7 +32,6 @@ */ #include "RRC/NR/nr_rrc_defs.h" - #include "flexran_agent_extern.h" int rrc_init_nr_global_param(void); @@ -58,6 +57,7 @@ void rrc_gNB_generate_SgNBAdditionRequestAcknowledge( rrc_gNB_ue_context_t *const ue_context_pP ); + #if defined(ENABLE_ITTI) /**\brief RRC eNB task. \param void *args_p Pointer on arguments to start the task. */ diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index f9de7cd3e8..9ff2c4ec9b 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -30,6 +30,7 @@ #define RRC_GNB_C #define RRC_GNB_C +#include "nr_rrc_config.h" #include "nr_rrc_defs.h" #include "nr_rrc_extern.h" #include "assertions.h" @@ -42,7 +43,6 @@ #include "UTIL/LOG/log.h" #include "COMMON/mac_rrc_primitives.h" #include "RRC/NR/MESSAGES/asn1_msg.h" -#include "nr_rrc_config.h" #include "NR_BCCH-BCH-Message.h" #include "NR_UL-DCCH-Message.h" @@ -167,23 +167,57 @@ void rrc_gNB_generate_SgNBAdditionRequestAcknowledge( physicalCellGroupConfig = cellGroupconfig->physicalCellGroupConfig; spCellConfig = cellGroupconfig->spCellConfig; sCellToAddModList = cellGroupconfig->sCellToAddModList; + + rlc_bearer_config_t *rlc_config; + rlc_config = CALLOC(1,sizeof(rlc_bearer_config_t)); + //Fill rlc_bearer config value + rrc_config_rlc_bearer(ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + rlc_config + ); + //Fill rlc_bearer config to structure + do_RLC_BEARER(ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + rlc_BearerToAddModList, + rlc_config); - //rrc_config_rlc_bearer(); - //rrc_config_mac_cellgroup(); - //rrc_config_physicalcellgroup(); + mac_cellgroup_t *mac_cellgroup_config; + mac_cellgroup_config = CALLOC(1,sizeof(mac_cellgroup_t)); + //Fill mac_cellgroup_config config value + rrc_config_mac_cellgroup(ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + mac_cellgroup_config + ); + //Fill mac_cellgroup config to structure + do_MAC_CELLGROUP(ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + mac_CellGroupConfig, + mac_cellgroup_config); + + physicalcellgroup_t *physicalcellgroup_config; + physicalcellgroup_config = CALLOC(1,sizeof(physicalcellgroup_t)); + //Fill physicalcellgroup_config config value + rrc_config_physicalcellgroup(ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + physicalcellgroup_config + ); + //Fill physicalcellgroup config to structure + do_PHYSICALCELLGROUP(ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, + physicalCellGroupConfig, + physicalcellgroup_config); gNB_RrcConfigurationReq *common_configuration; common_configuration = CALLOC(1,sizeof(gNB_RrcConfigurationReq)); - //Fill servingcellconfigcommon config value rrc_config_servingcellconfigcommon(ctxt_pP->module_id, ue_context_pP->ue_context.primaryCC_id #if defined(ENABLE_ITTI) ,common_configuration #endif - ); + ); //Fill common config to structure - fill_SERVINGCELLCONFIGCOMMON(ctxt_pP->module_id, + do_SERVINGCELLCONFIGCOMMON(ctxt_pP->module_id, ue_context_pP->ue_context.primaryCC_id, #if defined(ENABLE_ITTI) common_configuration, @@ -236,13 +270,13 @@ static void init_NR_SI(const protocol_ctxt_t* const ctxt_pP, #endif ); - fill_SERVINGCELLCONFIGCOMMON(ctxt_pP->module_id, - CC_id, - #if defined(ENABLE_ITTI) - configuration, - #endif - 1 - ); + do_SERVINGCELLCONFIGCOMMON(ctxt_pP->module_id, + CC_id, + #if defined(ENABLE_ITTI) + configuration, + #endif + 1 + ); LOG_I(NR_RRC,"Done init_NR_SI\n");