diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 6db1ddb42090ae59b67fd220808f4392356efbdf..bfc0a6e2d442ca5defbdb4ed80ee046f4e2440ad 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -95,7 +95,9 @@ Options --install-system-files Install OpenArInterface required files in Linux system (will ask root password) -Typical Options for a quick startup with a COTS UE and Eurecom RF board: build_oai -I -g -eNB -EPC -x --install-system-files' +Usage: + Eurecom EXMIMO + COTS UE : ./build_oai -I -g --eNB --EPC -x --install-system-files + NI/ETTUS B201 + COTS UE : ./build_oai -I -g --eNB --EPC -x --install-system-files -w USRP' } diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h index 35934dff4253530b186a398734beaa0085a8fd86..55f2d0b714540ebc1f21d41397cc8327724fbf1d 100644 --- a/openair2/LAYER2/MAC/defs.h +++ b/openair2/LAYER2/MAC/defs.h @@ -85,15 +85,6 @@ #define SCH_PAYLOAD_SIZE_MAX 4096 /// Logical channel ids from 36-311 (Note BCCH is not specified in 36-311, uses the same as first DRB) -#define BCCH 3 // SI -#define CCCH 0 // srb0 -#define DCCH 1 // srb1 -#define DCCH1 2 // srb2 - -#define DTCH 3 // LCID - -#define MCCH 4 // MCCH -#define MTCH 1 // MTCH #ifdef Rel10 @@ -112,7 +103,7 @@ #define MAX_MBSFN_AREA 8 #define MAX_PMCH_perMBSFN 15 - +/*!\brief MAX MCCH payload size */ #define MCCH_PAYLOAD_SIZE_MAX 128 //#define MCH_PAYLOAD_SIZE_MAX 16384// this value is using in case mcs and TBS index are high #endif @@ -121,44 +112,53 @@ #define printk printf #endif //USER_MODE +/*!\brief Maximum number of logical channl group IDs */ #define MAX_NUM_LCGID 4 +/*!\brief logical channl group ID 0 */ +#define LCGID0 0 +/*!\brief logical channl group ID 1 */ +#define LCGID1 1 +/*!\brief logical channl group ID 2 */ +#define LCGID2 2 +/*!\brief logical channl group ID 3 */ +#define LCGID3 3 +/*!\brief Maximum number of logical chanels */ #define MAX_NUM_LCID 11 -//#define MAX_NUM_RB 8 +/*!\brief Maximum number od control elemenets */ #define MAX_NUM_CE 5 - +/*!\brief Maximum number of random access process */ #define NB_RA_PROC_MAX 4 - +/*!\brief size of buffer status report table */ #define BSR_TABLE_SIZE 64 -// The power headroom reporting range is from -23 ...+40 dB and beyond, with step 1 +/*!\brief The power headroom reporting range is from -23 ...+40 dB and beyond, with step 1 */ #define PHR_MAPPING_OFFSET 23 // if ( x>= -23 ) val = floor (x + 23) - +/*!\brief maximum number of resource block groups */ #define N_RBG_MAX 25 // for 20MHz channel BW - +/*!\brief minimum value for channel quality indicator */ #define MIN_CQI_VALUE 0 +/*!\brief maximum value for channel quality indicator */ #define MAX_CQI_VALUE 15 -#define LCGID0 0 -#define LCGID1 1 -#define LCGID2 2 -#define LCGID3 3 - #define LCID_EMPTY 0 #define LCID_NOT_EMPTY 1 -typedef enum { - CONNECTION_OK=0, - CONNECTION_LOST, - PHY_RESYNCH, - PHY_HO_PRACH -} UE_L2_STATE_t; +/* + * eNB part + */ + +/* + * UE/ENB common part + */ +/*!\brief MAC header of Random Access Response for Random access preamble identifier (RAPID) */ typedef struct { uint8_t RAPID:6; uint8_t T:1; uint8_t E:1; } __attribute__((__packed__))RA_HEADER_RAPID; +/*!\brief MAC header of Random Access Response for backoff indicator (BI)*/ typedef struct { uint8_t BI:4; uint8_t R:2; @@ -194,7 +194,7 @@ typedef struct { #define sizeof_RAR_PDU 6 */ - +/*!\brief MAC subheader short with 7bit Length field */ typedef struct { uint8_t LCID:5; // octet 1 LSB uint8_t E:1; @@ -202,7 +202,7 @@ typedef struct { uint8_t L:7; // octet 2 LSB uint8_t F:1; // octet 2 MSB } __attribute__((__packed__))SCH_SUBHEADER_SHORT; - +/*!\brief MAC subheader long with 15bit Length field */ typedef struct { uint8_t LCID:5; // octet 1 LSB uint8_t E:1; @@ -212,20 +212,21 @@ typedef struct { uint8_t L_LSB:8; uint8_t padding; } __attribute__((__packed__))SCH_SUBHEADER_LONG; - +/*!\brief MAC subheader short without length field */ typedef struct { uint8_t LCID:5; uint8_t E:1; uint8_t R:2; } __attribute__((__packed__))SCH_SUBHEADER_FIXED; +/*!\brief mac control element: short buffer status report for a specific logical channel group ID*/ typedef struct { uint8_t Buffer_size:6; // octet 1 LSB uint8_t LCGID:2; // octet 1 MSB } __attribute__((__packed__))BSR_SHORT; typedef BSR_SHORT BSR_TRUNCATED; - +/*!\brief mac control element: long buffer status report for all logical channel group ID*/ typedef struct { uint32_t Buffer_size3:6; uint32_t Buffer_size2:6; @@ -235,37 +236,39 @@ typedef struct { } __attribute__((__packed__))BSR_LONG; #define BSR_LONG_SIZE (sizeof(BSR_LONG)) - +/*!\brief mac control element: timing advance */ typedef struct { uint8_t TA:6; uint8_t R:2; } __attribute__((__packed__))TIMING_ADVANCE_CMD; - +/*!\brief mac control element: power headroom report */ typedef struct { uint8_t PH:6; uint8_t R:2; } __attribute__((__packed__))POWER_HEADROOM_CMD; +/*!\brief DCI PDU filled by MAC for the PHY */ typedef struct { uint8_t Num_ue_spec_dci ; uint8_t Num_common_dci ; unsigned int nCCE; DCI_ALLOC_t dci_alloc[NUM_DCI_MAX] ; } DCI_PDU; - +/*! \brief CCCH payload */ typedef struct { - uint8_t payload[CCCH_PAYLOAD_SIZE_MAX] ;/*!< \brief CCCH payload */ + uint8_t payload[CCCH_PAYLOAD_SIZE_MAX] ; } __attribute__((__packed__))CCCH_PDU; - +/*! \brief BCCH payload */ typedef struct { - uint8_t payload[BCCH_PAYLOAD_SIZE_MAX] ;/*!< \brief CCCH payload */ + uint8_t payload[BCCH_PAYLOAD_SIZE_MAX] ; } __attribute__((__packed__))BCCH_PDU; #ifdef Rel10 +/*! \brief MCCH payload */ typedef struct { - uint8_t payload[MCCH_PAYLOAD_SIZE_MAX] ;/*!< \brief MCCH payload */ + uint8_t payload[MCCH_PAYLOAD_SIZE_MAX] ; } __attribute__((__packed__))MCCH_PDU; - +/*!< \brief MAC control element for activation and deactivation of component carriers */ typedef struct { uint8_t C7:1;/*!< \brief Component carrier 7 */ uint8_t C6:1;/*!< \brief Component carrier 6 */ @@ -276,46 +279,70 @@ typedef struct { uint8_t C1:1;/*!< \brief Component carrier 1 */ uint8_t R:1;/*!< \brief Reserved */ } __attribute__((__packed__))CC_ELEMENT; -#endif - +/*! \brief MAC control element: MCH Scheduling Information */ typedef struct { uint8_t stop_sf_MSB:3; // octet 1 LSB uint8_t lcid:5; // octet 2 MSB uint8_t stop_sf_LSB:8; } __attribute__((__packed__))MSI_ELEMENT; - -// DLSCH LCHAN IDs +#endif +/*! \brief Values of CCCH LCID for DLSCH */ #define CCCH_LCHANID 0 +/*!\brief Values of BCCH logical channel */ +#define BCCH 3 // SI +/*!\brief Value of CCCH / SRB0 logical channel */ +#define CCCH 0 // srb0 +/*!\brief DCCH / SRB1 logical channel */ +#define DCCH 1 // srb1 +/*!\brief DCCH1 / SRB2 logical channel */ +#define DCCH1 2 // srb2 +/*!\brief DTCH DRB1 logical channel */ +#define DTCH 3 // LCID +/*!\brief MCCH logical channel */ +#define MCCH 4 +/*!\brief MTCH logical channel */ +#define MTCH 1 +// DLSCH LCHAN ID +/*!\brief LCID of UE contention resolution identity for DLSCH*/ #define UE_CONT_RES 28 +/*!\brief LCID of timing advance for DLSCH */ #define TIMING_ADV_CMD 29 +/*!\brief LCID of discontinous reception mode for DLSCH */ #define DRX_CMD 30 +/*!\brief LCID of padding LCID for DLSCH */ #define SHORT_PADDING 31 #ifdef Rel10 // MCH LCHAN IDs (table6.2.1-4 TS36.321) +/*!\brief LCID of MCCH for DL */ #define MCCH_LCHANID 0 -#define MCH_SCHDL_INFO 30 +/*!\brief LCID of MCH scheduling info for DL */ +#define MCH_SCHDL_INFO 3 +/*!\brief LCID of Carrier component activation/deactivation */ #define CC_ACT_DEACT 27 - #endif // ULSCH LCHAN IDs +/*!\brief LCID of extended power headroom for ULSCH */ #define EXTENDED_POWER_HEADROOM 25 +/*!\brief LCID of power headroom for ULSCH */ #define POWER_HEADROOM 26 +/*!\brief LCID of CRNTI for ULSCH */ #define CRNTI 27 +/*!\brief LCID of truncated BSR for ULSCH */ #define TRUNCATED_BSR 28 +/*!\brief LCID of short BSR for ULSCH */ #define SHORT_BSR 29 +/*!\brief LCID of long BSR for ULSCH */ #define LONG_BSR 30 -/*! \brief Downlink SCH PDU Structure - */ +/*! \brief Downlink SCH PDU Structure */ typedef struct { int8_t payload[8][SCH_PAYLOAD_SIZE_MAX]; uint16_t Pdu_size[8]; } __attribute__ ((__packed__)) DLSCH_PDU; -/*! \brief MCH PDU Structure - */ +/*! \brief MCH PDU Structure */ typedef struct { int8_t payload[SCH_PAYLOAD_SIZE_MAX]; uint16_t Pdu_size; @@ -326,8 +353,7 @@ typedef struct { uint8_t mtch_active; } __attribute__ ((__packed__)) MCH_PDU; -/*! \brief Uplink SCH PDU Structure - */ +/*! \brief Uplink SCH PDU Structure */ typedef struct { int8_t payload[SCH_PAYLOAD_SIZE_MAX]; /*!< \brief SACH payload */ uint16_t Pdu_size; @@ -335,6 +361,7 @@ typedef struct { #include "PHY/impl_defs_top.h" +/*!\brief UE ULSCH scheduling states*/ typedef enum { S_UL_NONE =0, S_UL_WAITING, @@ -343,6 +370,7 @@ typedef enum { S_UL_NUM_STATUS } UE_ULSCH_STATUS; +/*!\brief UE DLSCH scheduling states*/ typedef enum { S_DL_NONE =0, S_DL_WAITING, @@ -351,34 +379,52 @@ typedef enum { S_DL_NUM_STATUS } UE_DLSCH_STATUS; +/*!\brief scheduling policy for the contention-based access */ typedef enum { - CBA_ES=0, // equal share of RB among groups w - CBA_ES_S, // equal share of RB among groups with small allocation - CBA_PF, // proportional fair (kind of) - CBA_PF_S, // proportional fair (kind of) with small RB allocation - CBA_RS // random allocation + CBA_ES=0, /// equal share of RB among groups w + CBA_ES_S, /// equal share of RB among groups with small allocation + CBA_PF, /// proportional fair (kind of) + CBA_PF_S, /// proportional fair (kind of) with small RB allocation + CBA_RS /// random allocation } CBA_POLICY; -// temp struct for sched +/*! \brief temporary struct for ULSCH sched */ typedef struct { - rnti_t rnti; uint16_t subframe; uint16_t serving_num; UE_ULSCH_STATUS status; } eNB_ULSCH_INFO; -// temp struct for sched +/*! \brief temp struct for DLSCH sched */ typedef struct { - rnti_t rnti; uint16_t weight; uint16_t subframe; uint16_t serving_num; UE_DLSCH_STATUS status; } eNB_DLSCH_INFO; +/*! \brief eNB overall statistics */ typedef struct { - /// BW + /// num BCCH PDU per CC + uint32_t total_num_bcch_pdu; + /// BCCH buffer size + uint32_t bcch_buffer; + /// total BCCH buffer size + uint32_t total_bcch_buffer; + /// BCCH MCS + uint32_t bcch_mcs; + + /// num CCCH PDU per CC + uint32_t total_num_ccch_pdu; + /// BCCH buffer size + uint32_t ccch_buffer; + /// total BCCH buffer size + uint32_t total_ccch_buffer; + /// BCCH MCS + uint32_t ccch_mcs; + +/// num active users uint16_t num_dlactive_UEs; /// available number of PRBs for a give SF uint16_t available_prbs; @@ -409,7 +455,7 @@ typedef struct { uint64_t ulsch_pdus_rx; // here for RX } eNB_STATS; - +/*! \brief eNB statistics for the connected UEs*/ typedef struct { /// CRNTI of UE @@ -500,15 +546,15 @@ typedef struct { uint32_t num_errors_rx; /// overall - // total MAC pdu bytes + /// total MAC pdu bytes uint64_t total_pdu_bytes_rx; - // total num pdu + /// total num pdu uint32_t total_num_pdus_rx; - // num of error pdus + /// num of error pdus uint32_t total_num_errors_rx; } eNB_UE_STATS; - +/*! \brief eNB template for UE context information */ typedef struct { /// C-RNTI of UE rnti_t rnti; @@ -529,7 +575,7 @@ typedef struct { /// Current Aggregation Level for DCI uint8_t DCI_aggregation_min; - /// + /// size of DLSCH size in bit uint8_t DLSCH_dci_size_bits; /// DCI buffer for DLSCH @@ -568,7 +614,7 @@ typedef struct { /// UL Scheduling Request Received uint8_t ul_SR; - //Resource Block indication for each sub-band in MU-MIMO + ///Resource Block indication for each sub-band in MU-MIMO uint8_t rballoc_subband[8][50]; // Logical channel info for link with RLC @@ -582,30 +628,30 @@ typedef struct { /// phr information int8_t phr_info_configured; - //dl buffer info + ///dl buffer info uint32_t dl_buffer_info[MAX_NUM_LCID]; - + /// total downlink buffer info uint32_t dl_buffer_total; - + /// total downlink pdus uint32_t dl_pdus_total; - + /// downlink pdus for each LCID uint32_t dl_pdus_in_buffer[MAX_NUM_LCID]; - + /// creation time of the downlink buffer head for each LCID uint32_t dl_buffer_head_sdu_creation_time[MAX_NUM_LCID]; - + /// maximum creation time of the downlink buffer head across all LCID uint32_t dl_buffer_head_sdu_creation_time_max; - + /// a flag indicating that the downlink head SDU is segmented uint8_t dl_buffer_head_sdu_is_segmented[MAX_NUM_LCID]; - + /// size of remaining size to send for the downlink head SDU uint32_t dl_buffer_head_sdu_remaining_size_to_send[MAX_NUM_LCID]; - // uplink info + /// total uplink buffer size uint32_t ul_total_buffer; - + /// uplink buffer creation time for each LCID uint32_t ul_buffer_creation_time[MAX_NUM_LCGID]; - + /// maximum uplink buffer creation time across all the LCIDs uint32_t ul_buffer_creation_time_max; - + /// uplink buffer size per LCID uint32_t ul_buffer_info[MAX_NUM_LCGID]; /// UE tx power @@ -616,10 +662,11 @@ typedef struct { #endif } UE_TEMPLATE; +/*! \brief scheduling control information set through an API (not used)*/ typedef struct { - //UL transmission bandwidth in RBs + ///UL transmission bandwidth in RBs uint8_t ul_bandwidth[MAX_NUM_LCID]; - //DL transmission bandwidth in RBs + ///DL transmission bandwidth in RBs uint8_t dl_bandwidth[MAX_NUM_LCID]; //To do GBR bearer @@ -627,13 +674,13 @@ typedef struct { uint8_t min_dl_bandwidth[MAX_NUM_LCID]; - //aggregated bit rate of non-gbr bearer per UE + ///aggregated bit rate of non-gbr bearer per UE uint64_t ue_AggregatedMaximumBitrateDL; - //aggregated bit rate of non-gbr bearer per UE + ///aggregated bit rate of non-gbr bearer per UE uint64_t ue_AggregatedMaximumBitrateUL; - //CQI scheduling interval in subframes. + ///CQI scheduling interval in subframes. uint16_t cqiSchedInterval; - //Contention resolution timer used during random access + ///Contention resolution timer used during random access uint8_t mac_ContentionResolutionTimer; uint16_t max_allowed_rbs[MAX_NUM_LCID]; @@ -643,7 +690,7 @@ typedef struct { uint16_t priority[MAX_NUM_LCID]; } UE_sched_ctrl; - +/*! \brief eNB template for the Random access information */ typedef struct { /// Flag to indicate this process is active boolean_t RA_active; @@ -690,31 +737,35 @@ typedef struct { } RA_TEMPLATE; -///subband bitmap coniguration (for ALU icic algo purpose), in test phase - +/*! \brief subband bitmap confguration (for ALU icic algo purpose), in test phase */ typedef struct { uint8_t sbmap[NUMBER_OF_SUBBANDS_MAX]; //13 = number of SB MAX for 100 PRB uint8_t periodicity; uint8_t first_subframe; uint8_t sb_size; uint8_t nb_active_sb; - } SBMAP_CONF; - -//end ALU's algo +/*! \brief UE list used by eNB to order UEs/CC for scheduling*/ typedef struct { + /// DLSCH pdu DLSCH_PDU DLSCH_pdu[MAX_NUM_CCs][2][NUMBER_OF_UE_MAX]; /// DCI template and MAC connection parameters for UEs UE_TEMPLATE UE_template[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; /// DCI template and MAC connection for RA processes int pCC_id[NUMBER_OF_UE_MAX]; + /// sorted downlink component carrier for the scheduler int ordered_CCids[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// number of downlink active component carrier int numactiveCCs[NUMBER_OF_UE_MAX]; + /// sorted uplink component carrier for the scheduler int ordered_ULCCids[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// number of uplink active component carrier int numactiveULCCs[NUMBER_OF_UE_MAX]; + /// number of downlink active component carrier uint8_t dl_CC_bitmap[NUMBER_OF_UE_MAX]; /// eNB to UE statistics eNB_UE_STATS eNB_UE_stats[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// scheduling control info UE_sched_ctrl UE_sched_ctrl[NUMBER_OF_UE_MAX]; int next[NUMBER_OF_UE_MAX]; @@ -726,6 +777,7 @@ typedef struct { boolean_t active[NUMBER_OF_UE_MAX]; } UE_list_t; +/*! \brief eNB common channels */ typedef struct { /// Outgoing DCI for PHY generated by eNB scheduler DCI_PDU DCI_pdu; @@ -765,12 +817,15 @@ typedef struct { MCH_PDU MCH_pdu; #endif #ifdef CBA + /// number of CBA groups uint8_t num_active_cba_groups; + /// RNTI for each CBA group uint16_t cba_rnti[NUM_MAX_CBA_GROUP]; + /// MCS for each CBA group uint8_t group_mcs[NUM_MAX_CBA_GROUP]; #endif } COMMON_channels_t; - +/*! \brief top level eNB MAC structure */ typedef struct { /// uint16_t Node_id; @@ -786,21 +841,43 @@ typedef struct { /// active flag for Other lcid // uint8_t lcid_active[NB_RB_MAX]; - // eNB stats + /// eNB stats eNB_STATS eNB_stats[MAX_NUM_CCs]; // MAC function execution peformance profiler + /// processing time of eNB scheduler time_stats_t eNB_scheduler; + /// processing time of eNB scheduler for SI time_stats_t schedule_si; + /// processing time of eNB scheduler for Random access time_stats_t schedule_ra; + /// processing time of eNB ULSCH scheduler time_stats_t schedule_ulsch; + /// processing time of eNB DCI generation time_stats_t fill_DLSCH_dci; + /// processing time of eNB MAC preprocessor time_stats_t schedule_dlsch_preprocessor; + /// processing time of eNB DLSCH scheduler time_stats_t schedule_dlsch; // include rlc_data_req + MAC header + preprocessor + /// processing time of eNB MCH scheduler time_stats_t schedule_mch; + /// processing time of eNB ULSCH reception time_stats_t rx_ulsch_sdu; // include rlc_data_ind } eNB_MAC_INST; +/* + * UE part + */ + +/*!\brief UE layer 2 status */ +typedef enum { + CONNECTION_OK=0, + CONNECTION_LOST, + PHY_RESYNCH, + PHY_HO_PRACH +} UE_L2_STATE_t; + +/*!\brief UE scheduling info */ typedef struct { /// buffer status for each lcgid uint8_t BSR[MAX_NUM_LCGID]; // should be more for mesh topology @@ -851,7 +928,7 @@ typedef struct { // Bucket size per lcid int16_t bucket_size[MAX_NUM_LCID]; } UE_SCHEDULING_INFO; - +/*!\brief Top level UE MAC structure */ typedef struct { uint16_t Node_id; /// frame counter @@ -950,19 +1027,25 @@ typedef struct { uint8_t msi_status;// could be an array if there are >1 MCH in one MBSFN area #endif //#ifdef CBA + /// CBA RNTI for each group uint16_t cba_rnti[NUM_MAX_CBA_GROUP]; + /// last SFN for CBA channel access uint8_t cba_last_access[NUM_MAX_CBA_GROUP]; //#endif - + /// total UE scheduler processing time time_stats_t ue_scheduler; // total - time_stats_t tx_ulsch_sdu; // inlcude rlc_data_req + mac header gen - time_stats_t rx_dlsch_sdu ; // include mac_rrc_data_ind or mac_rlc_status_ind+mac_rlc_data_ind and mac header parser + /// UE ULSCH tx processing time inlcuding RLC interface (rlc_data_req) and mac header generation + time_stats_t tx_ulsch_sdu; + /// UE DLSCH rx processing time inlcuding RLC interface (mac_rrc_data_ind or mac_rlc_status_ind+mac_rlc_data_ind) and mac header parser + time_stats_t rx_dlsch_sdu ; + /// UE query for MCH subframe processing time time_stats_t ue_query_mch; + /// UE MCH rx processing time time_stats_t rx_mch_sdu; - time_stats_t rx_si; // include mac_rrc_data_ind - + /// UE BCCH rx processing time including RLC interface (mac_rrc_data_ind) + time_stats_t rx_si; } UE_MAC_INST; - +/*! \brief ID of the neighboring cells used for HO*/ typedef struct { uint16_t cell_ids[6]; uint8_t n_adj_cells; diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c index 4bcd7754bf889eafb91798ca392a0098104998b9..963942d7dc90aac470b7ad9d6e5abc987d804e99 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c @@ -197,6 +197,10 @@ schedule_SI( eNB->common_channels[CC_id].bcch_active=1; nprbP[CC_id]=3; nCCEP[CC_id]=4; + eNB->eNB_stats[CC_id].total_num_bcch_pdu+=1; + eNB->eNB_stats[CC_id].bcch_buffer=bcch_sdu_length; + eNB->eNB_stats[CC_id].total_bcch_buffer+=bcch_sdu_length; + eNB->eNB_stats[CC_id].bcch_mcs=mcs; } else { eNB->common_channels[CC_id].bcch_active=0; nprbP[CC_id]=0; diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h index 8f47be74c2c08a3af2ef3753c8982496f595b4a5..e1843de3b50625386488eaa3836df023a148de07 100644 --- a/openair2/LAYER2/MAC/proto.h +++ b/openair2/LAYER2/MAC/proto.h @@ -153,6 +153,7 @@ int8_t get_DELTA_PREAMBLE(module_id_t module_idP,int CC_id); /** \brief Function for compute deltaP_rampup from 36.321 (for RA power ramping procedure and Msg3 PUSCH power control policy) @param Mod_id Module id of UE + @param CC_id carrier component id of UE @returns deltaP_rampup */ int8_t get_deltaP_rampup(module_id_t module_idP,uint8_t CC_id); diff --git a/openair2/LAYER2/openair2_proc.c b/openair2/LAYER2/openair2_proc.c index 309f63130110d193b88e26a578ec44e19f681ad8..6d1570b029c905f5e7a9f5952bc35cafb7ef6d9d 100644 --- a/openair2/LAYER2/openair2_proc.c +++ b/openair2/LAYER2/openair2_proc.c @@ -95,7 +95,25 @@ int dump_eNB_l2_stats(char *buffer, int length) eNB->eNB_stats[CC_id].num_dlactive_UEs, eNB->eNB_stats[CC_id].available_prbs, eNB->eNB_stats[CC_id].available_ncces); - + + len += sprintf(&buffer[len],"BCCH , NB_TX_MAC = %d, transmitted bytes (TTI %d, total %d) MCS (TTI %d)\n", + eNB->eNB_stats[CC_id].total_num_bcch_pdu, + eNB->eNB_stats[CC_id].bcch_buffer, + eNB->eNB_stats[CC_id].total_bcch_buffer, + eNB->eNB_stats[CC_id].bcch_mcs); + + len += sprintf(&buffer[len],"CCCH , NB_TX_MAC = %d, transmitted bytes (TTI %d, total %d) MCS (TTI %d)\n", + eNB->eNB_stats[CC_id].total_num_bcch_pdu, + eNB->eNB_stats[CC_id].bcch_buffer, + eNB->eNB_stats[CC_id].total_bcch_buffer, + eNB->eNB_stats[CC_id].bcch_mcs); + + len += sprintf(&buffer[len],"DCCH , NB_TX_MAC = %d, transmitted bytes (TTI %d, total %d) MCS (TTI %d)\n", + eNB->eNB_stats[CC_id].total_num_bcch_pdu, + eNB->eNB_stats[CC_id].bcch_buffer, + eNB->eNB_stats[CC_id].total_bcch_buffer, + eNB->eNB_stats[CC_id].bcch_mcs); + eNB->eNB_stats[CC_id].dlsch_bitrate=((eNB->eNB_stats[CC_id].dlsch_bytes_tx*8)/((eNB->frame + 1)*10)); eNB->eNB_stats[CC_id].total_dlsch_pdus_tx+=eNB->eNB_stats[CC_id].dlsch_pdus_tx; eNB->eNB_stats[CC_id].total_dlsch_bytes_tx+=eNB->eNB_stats[CC_id].dlsch_bytes_tx; @@ -154,7 +172,7 @@ int dump_eNB_l2_stats(char *buffer, int length) UE_list->eNB_UE_stats[CC_id][UE_id].total_num_pdus_rx, UE_list->eNB_UE_stats[CC_id][UE_id].num_errors_rx); len+= sprintf(&buffer[len],"Received PHR PH = %d (db)\n", UE_list->UE_template[CC_id][UE_id].phr_info); - len+= sprintf(&buffer[len],"Received BSR [0][1][2][3] = %d %d %d %d\n", + len+= sprintf(&buffer[len],"Received BSR LCGID[0][1][2][3] = %u %u %u %u\n", UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID0], UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID1], UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID2], diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h index 97fafad5f1c7c8378297a7eb000d327789a0b919..173be7ca89ca1b33ad07b6a22ab2385ac84a0708 100755 --- a/openair2/PHY_INTERFACE/defs.h +++ b/openair2/PHY_INTERFACE/defs.h @@ -38,11 +38,9 @@ #ifndef __MAC_PHY_PRIMITIVES_H__ # define __MAC_PHY_PRIMITIVES_H__ - #include "LAYER2/MAC/defs.h" - #define MAX_NUMBER_OF_MAC_INSTANCES 16 #define NULL_PDU 255 @@ -300,16 +298,21 @@ typedef struct { /// Function for UE/PHY to compute PHR int8_t (*get_PHR)(module_id_t Mod_id, uint8_t CC_id,uint8_t eNB_index); + /// Function for UE to process the timing advance command void (*process_timing_advance)(module_id_t Mod_id,uint8_t CC_id, int16_t timing_advance); - + + /// Function for MAC to get the UE stats from the PHY LTE_eNB_UE_stats* (*get_eNB_UE_stats)(module_id_t Mod_id, uint8_t CC_id, rnti_t rnti); + /// get the frame parameters from the PHY LTE_DL_FRAME_PARMS* (*get_lte_frame_parms)(module_id_t Mod_id, uint8_t CC_id); - + + /// get the Multiuser mimo mode MU_MIMO_mode* (*get_mu_mimo_mode) (module_id_t Mod_id, uint8_t CC_id, rnti_t rnti); + /// get the delta TF for Uplink Power Control Calculation int16_t (*get_hundred_times_delta_TF) (module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid); - + /// get target uplink received power int16_t (*get_target_ul_rx_power) (module_id_t module_idP, uint8_t CC_id); unsigned char is_cluster_head; diff --git a/targets/DOCS/Doxyfile b/targets/DOCS/Doxyfile index ace86944770bbe12e76eab999cb9364bbcf5d45f..dd3a7158643b3a9aa622854763ce9bf10d900bbd 100644 --- a/targets/DOCS/Doxyfile +++ b/targets/DOCS/Doxyfile @@ -2057,7 +2057,8 @@ PREDEFINED = OPENAIR_LTE=1 \ public_rlc_am_windows(x)=x \ public_rlc_um(x)=x \ protected_rlc_um(x)=x \ - private_rlc_um(x)=x + private_rlc_um(x)=x \ + __attribute__(x)= # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index 55d95ebecacdccc5bfe59601b34de369b23da675..b8c3540f2e7ab4cb7ad237dd1ff56c81de311cc1 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -1298,7 +1298,6 @@ void update_otg_eNB(module_id_t enb_module_idP, unsigned int ctime) (otg_pkt->otg_pkt).is_ue = 0; (otg_pkt->otg_pkt).mode = PDCP_TRANSMISSION_MODE_DATA; //Adding the packet to the OTG-PDCP buffer -#warning "Strange code: To be verifed" pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[enb_module_idP])); LOG_I(EMU,"[eNB %d] ADD pkt to OTG buffer with size %d for dst %d on rb_id %d for app id %d \n", (otg_pkt->otg_pkt).module_id, otg_pkt->otg_pkt.sdu_buffer_size, (otg_pkt->otg_pkt).dst_id,(otg_pkt->otg_pkt).rb_id, app_id); @@ -1380,7 +1379,7 @@ void update_otg_eNB(module_id_t enb_module_idP, unsigned int ctime) } #else - +#if 0 // defined(EXMIMO) || defined(OAI_USRP) if (otg_enabled==1) { ctime = frame * 100; @@ -1407,6 +1406,7 @@ void update_otg_eNB(module_id_t enb_module_idP, unsigned int ctime) } } +#endif #endif }