Merge remote-tracking branch 'origin/code-cleanup-2021oct24' into integration_2021_wk45_b
This commit is contained in:
@@ -982,8 +982,6 @@ Message("CPU_Affinity flag is ${CPU_AFFINITY}")
|
||||
# ???!!! TO BE DOCUMENTED OPTIONS !!!???
|
||||
##############################################################
|
||||
|
||||
add_boolean_option(NO_RRM True "DO WE HAVE A RADIO RESSOURCE MANAGER: NO")
|
||||
|
||||
add_boolean_option(OAI_NW_DRIVER_TYPE_ETHERNET False "????")
|
||||
add_boolean_option(DEADLINE_SCHEDULER False "Use the Linux scheduler SCHED_DEADLINE: kernel >= 3.14")
|
||||
add_boolean_option(CPU_AFFINITY False "Enable CPU Affinity of threads (only valid without deadline scheduler). It is enabled only with >2 CPUs")
|
||||
@@ -1044,7 +1042,6 @@ add_boolean_option(JUMBO_FRAME True "ENABLE LARGE SDU in ACCESS STR
|
||||
##########################
|
||||
# RLC LAYER OPTIONS
|
||||
##########################
|
||||
add_boolean_option(OPENAIR2 True "Access Stratum layer 2 built in executable")
|
||||
add_boolean_option(TRACE_RLC_PAYLOAD False "Fatal assert in this case")
|
||||
add_boolean_option(RLC_STOP_ON_LOST_PDU False "Fatal assert in this case")
|
||||
|
||||
@@ -1072,8 +1069,6 @@ add_boolean_option(TRACE_RLC_UM_TX_STATUS False "TRACE for RLC UM, TO BE CHANGE
|
||||
##########################
|
||||
# PDCP LAYER OPTIONS
|
||||
##########################
|
||||
#add_boolean_option(PDCP_USE_NETLINK False "For eNB, PDCP communicate with a NETLINK socket if connected to network driver, else could use a RT-FIFO")
|
||||
#add_boolean_option(PDCP_USE_NETLINK_QUEUES False "When PDCP_USE_NETLINK is true, incoming IP packets are stored in queues")
|
||||
#add_boolean_option(LINK_ENB_PDCP_TO_IP_DRIVER False "For eNB, PDCP communicate with a IP driver")
|
||||
#add_boolean_option(LINK_ENB_PDCP_TO_GTPV1U True "For eNB, PDCP communicate with GTP-U protocol (eNB<->S-GW)")
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#include"log.h"
|
||||
#include "log.h"
|
||||
|
||||
extern log_t *g_log;
|
||||
|
||||
|
||||
@@ -76,10 +76,6 @@
|
||||
#include "gnb_paramdef.h"
|
||||
|
||||
|
||||
#ifndef OPENAIR2
|
||||
#include "UTIL/OTG/otg_extern.h"
|
||||
#endif
|
||||
|
||||
#include "s1ap_eNB.h"
|
||||
#include "SIMULATION/ETH_TRANSPORT/proto.h"
|
||||
#include <executables/softmodem-common.h>
|
||||
|
||||
@@ -70,10 +70,6 @@ static int DEFBFW[] = {0x00007fff};
|
||||
#include "GNB_APP/gnb_paramdef.h"
|
||||
#include "common/config/config_userapi.h"
|
||||
|
||||
#ifndef OPENAIR2
|
||||
#include "UTIL/OTG/otg_extern.h"
|
||||
#endif
|
||||
|
||||
#include "s1ap_eNB.h"
|
||||
#include "SIMULATION/ETH_TRANSPORT/proto.h"
|
||||
#include <openair1/PHY/TOOLS/phy_scope_interface.h>
|
||||
|
||||
@@ -30,12 +30,8 @@
|
||||
#include "PHY/types.h"
|
||||
#include <threadPool/thread-pool.h>
|
||||
|
||||
#if defined(ENABLE_USE_MME)
|
||||
#include "s1ap_eNB.h"
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#include "SIMULATION/ETH_TRANSPORT/proto.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* help strings definition for command line options, used in CMDLINE_XXX_DESC macros and printed when -h option is used */
|
||||
#define CONFIG_HLP_RFCFGF "Configuration file for front-end (e.g. LMS7002M)\n"
|
||||
|
||||
@@ -66,10 +66,6 @@ unsigned short config_frames[4] = {2,9,11,13};
|
||||
|
||||
//#include "PHY/TOOLS/time_meas.h"
|
||||
|
||||
#ifndef OPENAIR2
|
||||
#include "UTIL/OTG/otg_vars.h"
|
||||
#endif
|
||||
|
||||
#include "intertask_interface.h"
|
||||
|
||||
#include "PHY/INIT/phy_init.h"
|
||||
@@ -692,15 +688,10 @@ int main( int argc, char **argv ) {
|
||||
// initialize mscgen log after ITTI
|
||||
MSC_INIT(MSC_E_UTRAN, ADDED_QUEUES_MAX+TASK_MAX);
|
||||
init_opt();
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
|
||||
if(!IS_SOFTMODEM_NOS1)
|
||||
netlink_init();
|
||||
|
||||
#if defined(PDCP_USE_NETLINK_QUEUES)
|
||||
pdcp_netlink_init();
|
||||
#endif
|
||||
#endif
|
||||
if(PDCP_USE_NETLINK)
|
||||
if(!IS_SOFTMODEM_NOS1)
|
||||
netlink_init();
|
||||
|
||||
#ifndef PACKAGE_VERSION
|
||||
# define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
|
||||
#endif
|
||||
|
||||
+2
-5
@@ -19,6 +19,7 @@
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#include <openair1/PHY/impl_defs_top.h>
|
||||
#include "executables/nr-uesoftmodem.h"
|
||||
#include "PHY/phy_extern_nr_ue.h"
|
||||
#include "PHY/INIT/phy_init.h"
|
||||
@@ -87,11 +88,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef NO_RAT_NR
|
||||
#define DURATION_RX_TO_TX (NR_UE_CAPABILITY_SLOT_RX_TO_TX) /* for NR this will certainly depends to such UE capability which is not yet defined */
|
||||
#else
|
||||
#define DURATION_RX_TO_TX (6) /* For LTE, this duration is fixed to 4 and it is linked to LTE standard for both modes FDD/TDD */
|
||||
#endif
|
||||
|
||||
#define RX_JOB_ID 0x1010
|
||||
#define TX_JOB_ID 100
|
||||
|
||||
|
||||
@@ -63,10 +63,6 @@ unsigned short config_frames[4] = {2,9,11,13};
|
||||
#include "enb_config.h"
|
||||
//#include "PHY/TOOLS/time_meas.h"
|
||||
|
||||
#ifndef OPENAIR2
|
||||
#include "UTIL/OTG/otg_vars.h"
|
||||
#endif
|
||||
|
||||
#include "intertask_interface.h"
|
||||
|
||||
#include "PHY/INIT/phy_init.h"
|
||||
|
||||
@@ -30,14 +30,6 @@
|
||||
|
||||
#include <stdint.h> // for uint8/16/32_t
|
||||
|
||||
/* check if this ifndef is required for NB-IoT ?!
|
||||
//#ifndef NO_OPENAIR1
|
||||
//#include "PHY/defs_NB_IoT.h"
|
||||
//#else
|
||||
//#include "PHY/TOOLS/time_meas.h"
|
||||
//#endif
|
||||
*/
|
||||
|
||||
#define CRC24_A_NB_IoT 0
|
||||
#define CRC24_B_NB_IoT 1
|
||||
#define CRC16_NB_IoT 2
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
#include <stdlib.h>
|
||||
#include "nrLDPC_types.h"
|
||||
|
||||
#ifndef malloc32_clear
|
||||
/**
|
||||
\brief Allocates 32 byte aligned memory and initializes to zero
|
||||
\param size Input size in bytes
|
||||
@@ -46,7 +45,6 @@ static inline void* malloc32_clear(size_t size)
|
||||
memset(ptr, 0, size);
|
||||
return ptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
\brief Allocates and initializes the internal decoder processing buffers
|
||||
|
||||
@@ -50,8 +50,6 @@
|
||||
//#define DEBUG_DCI_DECODING 1
|
||||
//#define DEBUG_PHY
|
||||
|
||||
//#undef ALL_AGGREGATION
|
||||
|
||||
//extern uint16_t phich_reg[MAX_NUM_PHICH_GROUPS][3];
|
||||
//extern uint16_t pcfich_reg[4];
|
||||
|
||||
|
||||
@@ -32,11 +32,8 @@
|
||||
#ifndef __DCI_NB_IOT_H__
|
||||
#define __DCI_NB_IOT_H__
|
||||
|
||||
//#ifndef USER_MODE
|
||||
//#include "PHY/types.h"
|
||||
//#else
|
||||
#include <stdint.h>
|
||||
//#endif
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
||||
@@ -36,10 +36,8 @@
|
||||
#include "PHY/extern.h"
|
||||
#include "SCHED/extern.h"
|
||||
|
||||
#ifdef OPENAIR2
|
||||
#include "openair2/LAYER2/MAC/proto.h"
|
||||
#include "openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
#endif
|
||||
|
||||
extern int mac_get_rrc_status(uint8_t Mod_id,uint8_t eNB_flag,uint8_t index);
|
||||
|
||||
@@ -434,10 +432,8 @@ int dump_ue_stats(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,char *buffer, int length
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef OPENAIR2
|
||||
RRC_status = mac_UE_get_rrc_status(ue->Mod_id, 0);
|
||||
len += sprintf(&buffer[len],"[UE PROC] RRC status = %d\n",RRC_status);
|
||||
#endif
|
||||
len += sprintf(&buffer[len], "[UE PROC] Transmission Mode %d \n",ue->transmission_mode[eNB]);
|
||||
len += sprintf(&buffer[len], "[UE PROC] PBCH err conseq %d, PBCH error total %d, PBCH FER %d\n",
|
||||
ue->pbch_vars[eNB]->pdu_errors_conseq,
|
||||
|
||||
@@ -321,4 +321,4 @@ HLC_subband_cqi_mcs_CBA_20MHz_NB_IoT;
|
||||
#define MAX_ACK_PAYLOAD_NB_IoT 18
|
||||
#define MAX_RI_PAYLOAD_NB_IoT 6
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -50,9 +50,6 @@
|
||||
//#define DEBUG_DCI_DECODING 1
|
||||
//#define DEBUG_PHY
|
||||
|
||||
//#undef ALL_AGGREGATION
|
||||
|
||||
|
||||
uint16_t extract_crc(uint8_t *dci,uint8_t dci_len)
|
||||
{
|
||||
|
||||
@@ -2802,7 +2799,6 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
if (dci_cnt>old_dci_cnt)
|
||||
return(dci_cnt);
|
||||
|
||||
//#ifdef ALL_AGGREGATION
|
||||
// Now check UE_SPEC format 1 search spaces at aggregation 8
|
||||
old_dci_cnt=dci_cnt;
|
||||
dci_decoding_procedure0(pdcch_vars,0,mode,subframe,
|
||||
@@ -2836,7 +2832,6 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
if (dci_cnt>old_dci_cnt)
|
||||
return(dci_cnt);
|
||||
|
||||
//#endif //ALL_AGGREGATION
|
||||
} else if (tmode == 3) {
|
||||
|
||||
|
||||
@@ -2946,7 +2941,6 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
if (dci_cnt>old_dci_cnt)
|
||||
return(dci_cnt);
|
||||
|
||||
//#ifdef ALL_AGGREGATION
|
||||
// Now check UE_SPEC format 2_2A search spaces at aggregation 8
|
||||
LOG_D(PHY," Now check UE_SPEC format 2_2A search spaces at aggregation 8 dci length: %d[bits] %d[bytes]\n",format2A_size_bits,format2A_size_bytes);
|
||||
old_dci_cnt=dci_cnt;
|
||||
@@ -3082,7 +3076,6 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
if (dci_cnt>old_dci_cnt)
|
||||
return(dci_cnt);
|
||||
|
||||
//#ifdef ALL_AGGREGATION
|
||||
// Now check UE_SPEC format 2_2A search spaces at aggregation 8
|
||||
old_dci_cnt=dci_cnt;
|
||||
dci_decoding_procedure0(pdcch_vars,0,mode,
|
||||
@@ -3214,7 +3207,6 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
if (dci_cnt>old_dci_cnt)
|
||||
return(dci_cnt);
|
||||
|
||||
//#ifdef ALL_AGGREGATION
|
||||
|
||||
// Now check UE_SPEC format 1E_2A_M10PRB search spaces at aggregation 8
|
||||
old_dci_cnt=dci_cnt;
|
||||
@@ -3249,7 +3241,6 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
|
||||
if (dci_cnt>old_dci_cnt)
|
||||
return(dci_cnt);
|
||||
|
||||
//#endif //ALL_AGGREGATION
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
#include <cblas.h>
|
||||
#include "linear_preprocessing_rec.h"
|
||||
|
||||
#define NOCYGWIN_STATIC
|
||||
//#define DEBUG_MMSE
|
||||
|
||||
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
|
||||
//#define DEBUG_ULSCH_MODULATION
|
||||
|
||||
#ifndef OFDMA_ULSCH
|
||||
void dft_lte(int32_t *z,int32_t *d, int32_t Msc_PUSCH, uint8_t Nsymb)
|
||||
{
|
||||
|
||||
@@ -371,7 +370,6 @@ void dft_lte(int32_t *z,int32_t *d, int32_t Msc_PUSCH, uint8_t Nsymb)
|
||||
// printf("\n");
|
||||
}
|
||||
|
||||
#endif
|
||||
void ulsch_modulation(int32_t **txdataF,
|
||||
short amp,
|
||||
uint32_t frame,
|
||||
@@ -690,57 +688,10 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
|
||||
// Transform Precoding
|
||||
|
||||
#ifdef OFDMA_ULSCH
|
||||
|
||||
for (i=0; i<ulsch_Msymb; i++) {
|
||||
ulsch->z[i] = ulsch->d[i];
|
||||
}
|
||||
|
||||
#else
|
||||
dft_lte(ulsch->z,ulsch->d,Msc_PUSCH,ulsch->Nsymb_pusch);
|
||||
#endif
|
||||
|
||||
DevAssert(txdataF);
|
||||
|
||||
#ifdef OFDMA_ULSCH
|
||||
re_offset0 = frame_parms->first_carrier_offset + (ulsch->harq_processes[harq_pid]->first_rb*12);
|
||||
|
||||
if (re_offset0>frame_parms->ofdm_symbol_size) {
|
||||
re_offset0 -= frame_parms->ofdm_symbol_size;
|
||||
// re_offset0++;
|
||||
}
|
||||
|
||||
// printf("re_offset0 %d\n",re_offset0);
|
||||
|
||||
|
||||
for (j=0,l=0; l<(nsymb-ulsch->srs_active); l++) {
|
||||
re_offset = re_offset0;
|
||||
symbol_offset = (int)frame_parms->ofdm_symbol_size*(l+(subframe*nsymb));
|
||||
#ifdef DEBUG_ULSCH_MODULATION
|
||||
printf("symbol %d (subframe %d): symbol_offset %d\n",l,subframe,symbol_offset);
|
||||
#endif
|
||||
txptr = &txdataF[0][symbol_offset];
|
||||
|
||||
if (((frame_parms->Ncp == 0) && ((l==3) || (l==10)))||
|
||||
((frame_parms->Ncp == 1) && ((l==2) || (l==8)))) {
|
||||
}
|
||||
// Skip reference symbols
|
||||
else {
|
||||
|
||||
// printf("copying %d REs\n",Msc_PUSCH);
|
||||
for (i=0; i<Msc_PUSCH; i++,j++) {
|
||||
#ifdef DEBUG_ULSCH_MODULATION
|
||||
printf("re_offset %d (%p): %d,%d\n", re_offset,&ulsch->z[j],((int16_t*)&ulsch->z[j])[0],((int16_t*)&ulsch->z[j])[1]);
|
||||
#endif
|
||||
txptr[re_offset++] = ulsch->z[j];
|
||||
|
||||
if (re_offset==frame_parms->ofdm_symbol_size)
|
||||
re_offset = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# else // OFDMA_ULSCH = 0
|
||||
re_offset0 = frame_parms->first_carrier_offset + (ulsch->harq_processes[harq_pid]->first_rb*12);
|
||||
|
||||
if (re_offset0>frame_parms->ofdm_symbol_size) {
|
||||
@@ -777,8 +728,5 @@ void ulsch_modulation(int32_t **txdataF,
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_MODULATION, VCD_FUNCTION_OUT);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -30,11 +30,9 @@
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifdef USER_MODE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#include "executables/softmodem-common.h"
|
||||
@@ -61,7 +59,6 @@ char nr_dci_format_string[8][30] = {
|
||||
//#define DEBUG_DCI_DECODING 1
|
||||
|
||||
//#define NR_LTE_PDCCH_DCI_SWITCH
|
||||
#define NR_PDCCH_DCI_RUN // activates new nr functions
|
||||
//#define NR_PDCCH_DCI_DEBUG // activates NR_PDCCH_DCI_DEBUG logs
|
||||
#ifdef NR_PDCCH_DCI_DEBUG
|
||||
#define LOG_DNL(a, ...) printf("\n\t\t<-NR_PDCCH_DCI_DEBUG (%s)-> " a, __func__, ##__VA_ARGS__ )
|
||||
@@ -81,7 +78,6 @@ char nr_dci_format_string[8][30] = {
|
||||
#define LOG_I(A,B...) printf(B)
|
||||
#endif
|
||||
|
||||
#ifdef NR_PDCCH_DCI_RUN
|
||||
|
||||
|
||||
//static const int16_t conjugate[8]__attribute__((aligned(32))) = {-1,1,-1,1,-1,1,-1,1};
|
||||
@@ -209,9 +205,6 @@ void nr_pdcch_demapping_deinterleaving(uint32_t *llr,
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef NR_PDCCH_DCI_RUN
|
||||
int32_t nr_pdcch_llr(NR_DL_FRAME_PARMS *frame_parms, int32_t **rxdataF_comp,
|
||||
int16_t *pdcch_llr, uint8_t symbol,uint32_t coreset_nbr_rb) {
|
||||
int16_t *rxF = (int16_t *) &rxdataF_comp[0][(symbol * coreset_nbr_rb * 12)];
|
||||
@@ -242,7 +235,6 @@ int32_t nr_pdcch_llr(NR_DL_FRAME_PARMS *frame_parms, int32_t **rxdataF_comp,
|
||||
|
||||
return (0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if 0
|
||||
@@ -346,7 +338,6 @@ void nr_pdcch_channel_level(int32_t **dl_ch_estimates_ext,
|
||||
|
||||
|
||||
|
||||
#ifdef NR_PDCCH_DCI_RUN
|
||||
// This function will extract the mapped DM-RS PDCCH REs as per 38.211 Section 7.4.1.3.2 (Mapping to physical resources)
|
||||
void nr_pdcch_extract_rbs_single(int32_t **rxdataF,
|
||||
int32_t **dl_ch_estimates,
|
||||
@@ -542,9 +533,6 @@ void nr_pdcch_extract_rbs_single(int32_t **rxdataF,
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#define print_shorts(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7])
|
||||
|
||||
void nr_pdcch_channel_compensation(int32_t **rxdataF_ext,
|
||||
@@ -694,24 +682,6 @@ void nr_pdcch_detection_mrc(NR_DL_FRAME_PARMS *frame_parms,
|
||||
#endif
|
||||
}
|
||||
|
||||
#if 0
|
||||
void pdcch_siso(NR_DL_FRAME_PARMS *frame_parms,
|
||||
int32_t **rxdataF_comp,
|
||||
uint8_t l) {
|
||||
uint8_t rb,re,jj,ii;
|
||||
jj=0;
|
||||
ii=0;
|
||||
|
||||
for (rb=0; rb<frame_parms->N_RB_DL; rb++) {
|
||||
for (re=0; re<12; re++) {
|
||||
rxdataF_comp[0][jj++] = rxdataF_comp[0][ii];
|
||||
ii++;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef NR_PDCCH_DCI_RUN
|
||||
int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
|
||||
UE_nr_rxtx_proc_t *proc,
|
||||
fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15) {
|
||||
@@ -824,36 +794,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
|
||||
return (0);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
void nr_pdcch_scrambling(NR_DL_FRAME_PARMS *frame_parms,
|
||||
uint8_t nr_slot_rx,
|
||||
uint8_t *e,
|
||||
uint32_t length) {
|
||||
int i;
|
||||
uint8_t reset;
|
||||
uint32_t x1, x2, s=0;
|
||||
reset = 1;
|
||||
// x1 is set in lte_gold_generic
|
||||
x2 = (nr_slot_rx<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.8.2
|
||||
|
||||
for (i=0; i<length; i++) {
|
||||
if ((i&0x1f)==0) {
|
||||
s = lte_gold_generic(&x1, &x2, reset);
|
||||
//printf("lte_gold[%d]=%x\n",i,s);
|
||||
reset = 0;
|
||||
}
|
||||
|
||||
// printf("scrambling %d : e %d, c %d\n",i,e[i],((s>>(i&0x1f))&1));
|
||||
if (e[i] != 2) // <NIL> element is 2
|
||||
e[i] = (e[i]&1) ^ ((s>>(i&0x1f))&1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef NR_PDCCH_DCI_RUN
|
||||
|
||||
void nr_pdcch_unscrambling(int16_t *z,
|
||||
uint16_t scrambling_RNTI,
|
||||
@@ -883,10 +824,7 @@ void nr_pdcch_unscrambling(int16_t *z,
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef NR_PDCCH_DCI_RUN
|
||||
/* This function compares the received DCI bits with
|
||||
* re-encoded DCI bits and returns the number of mismatched bits
|
||||
*/
|
||||
@@ -997,846 +935,4 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
|
||||
return(dci_ind->number_of_dcis);
|
||||
}
|
||||
|
||||
/*
|
||||
void nr_dci_decoding_procedure0(int s,
|
||||
int p,
|
||||
int coreset_time_dur,
|
||||
uint16_t coreset_nbr_rb,
|
||||
NR_UE_PDCCH **pdcch_vars,
|
||||
int do_common,
|
||||
uint8_t nr_slot_rx,
|
||||
NR_DCI_ALLOC_t *dci_alloc,
|
||||
int16_t eNB_id,
|
||||
uint8_t current_thread_id,
|
||||
NR_DL_FRAME_PARMS *frame_parms,
|
||||
//uint8_t mi,
|
||||
uint16_t crc_scrambled_values[TOTAL_NBR_SCRAMBLED_VALUES],
|
||||
uint8_t L,
|
||||
NR_UE_SEARCHSPACE_CSS_DCI_FORMAT_t format_css,
|
||||
NR_UE_SEARCHSPACE_USS_DCI_FORMAT_t format_uss,
|
||||
uint8_t sizeof_bits,
|
||||
uint8_t sizeof_bytes,
|
||||
uint8_t *dci_cnt,
|
||||
crc_scrambled_t *crc_scrambled,
|
||||
format_found_t *format_found,
|
||||
uint16_t pdcch_DMRS_scrambling_id,
|
||||
uint32_t *CCEmap0,
|
||||
uint32_t *CCEmap1,
|
||||
uint32_t *CCEmap2) {
|
||||
uint32_t crc, CCEind, nCCE[3];
|
||||
uint32_t *CCEmap = NULL, CCEmap_mask = 0;
|
||||
uint8_t L2 = (1 << L);
|
||||
unsigned int Yk, nb_candidates = 0, i, m;
|
||||
unsigned int CCEmap_cand;
|
||||
uint32_t decoderState=0;
|
||||
// A[p], p is the current active CORESET
|
||||
uint16_t A[3]= {39827,39829,39839};
|
||||
//Table 10.1-2: Maximum number of PDCCH candidates per slot and per serving cell as a function of the subcarrier spacing value 2^mu*15 KHz, mu {0,1,2,3}
|
||||
uint8_t m_max_slot_pdcch_Table10_1_2 [4] = {44,36,22,20};
|
||||
//Table 10.1-3: Maximum number of non-overlapped CCEs per slot and per serving cell as a function of the subcarrier spacing value 2^mu*15 KHz, mu {0,1,2,3}
|
||||
//uint8_t cce_max_slot_pdcch_Table10_1_3 [4] = {56,56,48,32};
|
||||
int coreset_nbr_cce_per_symbol=0;
|
||||
LOG_DDD("format_found is %d \n", *format_found);
|
||||
//if (mode == NO_DCI) {
|
||||
// #ifdef NR_PDCCH_DCI_DEBUG
|
||||
// LOG_DDD("skip DCI decoding: expect no DCIs at nr_slot_rx %d in current searchSpace\n", nr_slot_rx);
|
||||
// #endif
|
||||
// return;
|
||||
//}
|
||||
LOG_DDD("frequencyDomainResources=%lx, duration=%d\n",
|
||||
pdcch_vars[eNB_id]->coreset[p].frequencyDomainResources, pdcch_vars[eNB_id]->coreset[p].duration);
|
||||
|
||||
// nCCE = get_nCCE(pdcch_vars[eNB_id]->num_pdcch_symbols, frame_parms, mi);
|
||||
for (int i = 0; i < 45; i++) {
|
||||
// this loop counts each bit of the bit map coreset_freq_dom, and increments nbr_RB_coreset for each bit set to '1'
|
||||
if (((pdcch_vars[eNB_id]->coreset[p].frequencyDomainResources & 0x1FFFFFFFFFFF) >> i) & 0x1) coreset_nbr_cce_per_symbol++;
|
||||
}
|
||||
|
||||
nCCE[p] = pdcch_vars[eNB_id]->coreset[p].duration*coreset_nbr_cce_per_symbol; // 1 CCE = 6 RB
|
||||
// p is the current CORESET we are currently monitoring (among the 3 possible CORESETs in a BWP)
|
||||
// the number of CCE in the current CORESET is:
|
||||
// the number of symbols in the CORESET (pdcch_vars[eNB_id]->coreset[p].duration)
|
||||
// multiplied by the number of bits set to '1' in the frequencyDomainResources bitmap
|
||||
// (1 bit set to '1' corresponds to 6 RB and 1 CCE = 6 RB)
|
||||
LOG_DDD("nCCE[%d]=%d\n",p,nCCE[p]);
|
||||
|
||||
// if (nCCE > get_nCCE(3, frame_parms, 1)) {
|
||||
//LOG_D(PHY,
|
||||
//"skip DCI decoding: nCCE=%d > get_nCCE(3,frame_parms,1)=%d\n",
|
||||
//nCCE, get_nCCE(3, frame_parms, 1));
|
||||
//return;
|
||||
// }
|
||||
|
||||
// if (nCCE < L2) {
|
||||
// LOG_D(PHY, "skip DCI decoding: nCCE=%d < L2=%d\n", nCCE, L2);
|
||||
// return;
|
||||
// }
|
||||
|
||||
// if (mode == NO_DCI) {
|
||||
// LOG_D(PHY, "skip DCI decoding: expect no DCIs at nr_slot_rx %d\n",
|
||||
// nr_slot_rx);
|
||||
// return;
|
||||
// }
|
||||
|
||||
if (do_common == 1) {
|
||||
Yk = 0;
|
||||
|
||||
if (pdcch_vars[eNB_id]->searchSpace[s].searchSpaceType.common_dci_formats == cformat2_0) {
|
||||
// for dci_format_2_0, the nb_candidates is obtained from a different variable
|
||||
switch (L2) {
|
||||
case 1:
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].searchSpaceType.sfi_nrofCandidates_aggrlevel1;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].searchSpaceType.sfi_nrofCandidates_aggrlevel2;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].searchSpaceType.sfi_nrofCandidates_aggrlevel4;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].searchSpaceType.sfi_nrofCandidates_aggrlevel8;
|
||||
break;
|
||||
|
||||
case 16:
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].searchSpaceType.sfi_nrofCandidates_aggrlevel16;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (pdcch_vars[eNB_id]->searchSpace[s].searchSpaceType.common_dci_formats == cformat2_3) {
|
||||
// for dci_format_2_3, the nb_candidates is obtained from a different variable
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].searchSpaceType.srs_nrofCandidates;
|
||||
} else {
|
||||
nb_candidates = (L2 == 4) ? 4 : ((L2 == 8)? 2 : 1); // according to Table 10.1-1 (38.213 section 10.1)
|
||||
LOG_DDD("we are in common searchSpace and nb_candidates=%u for L2=%d\n", nb_candidates, L2);
|
||||
}
|
||||
} else {
|
||||
switch (L2) {
|
||||
case 1:
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].nrofCandidates_aggrlevel1;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].nrofCandidates_aggrlevel2;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].nrofCandidates_aggrlevel4;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].nrofCandidates_aggrlevel8;
|
||||
break;
|
||||
|
||||
case 16:
|
||||
nb_candidates = pdcch_vars[eNB_id]->searchSpace[s].nrofCandidates_aggrlevel16;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Find first available in ue specific search space
|
||||
// according to procedure in Section 10.1 of 38.213
|
||||
// compute Yk
|
||||
Yk = (unsigned int) pdcch_vars[eNB_id]->crnti;
|
||||
|
||||
for (i = 0; i <= nr_slot_rx; i++)
|
||||
Yk = (Yk * A[p%3]) % 65537;
|
||||
}
|
||||
|
||||
LOG_DDD("L2(%d) | nCCE[%d](%d) | Yk(%u) | nb_candidates(%u)\n", L2, p, nCCE[p], Yk, nb_candidates);
|
||||
// for (CCEind=0;
|
||||
// CCEind<nCCE2;
|
||||
// CCEind+=(1<<L)) {
|
||||
// if (nb_candidates * L2 > nCCE[p])
|
||||
// nb_candidates = nCCE[p] / L2;
|
||||
// In the next code line there is maybe a bug. The spec is not comparing Table 10.1-2 with nb_candidates, but with total number of candidates for all s and all p
|
||||
int m_p_s_L_max = (m_max_slot_pdcch_Table10_1_2[1]<=nb_candidates ? m_max_slot_pdcch_Table10_1_2[1] : nb_candidates);
|
||||
|
||||
if (L==4) m_p_s_L_max=1; // Table 10.1-2 is not defined for L=4
|
||||
|
||||
if(0 <= L && L < 4) LOG_DDD("m_max_slot_pdcch_Table10_1_2(%d)=%d\n",L,m_max_slot_pdcch_Table10_1_2[L]);
|
||||
|
||||
for (m = 0; m < nb_candidates; m++) {
|
||||
int n_ci = 0;
|
||||
|
||||
if (nCCE[p] < L2) return;
|
||||
|
||||
LOG_DDD("debug1(%d)=nCCE[p]/L2 | nCCE[%d](%d) | L2(%d)\n",nCCE[p] / L2,p,nCCE[p],L2);
|
||||
LOG_DDD("debug2(%d)=L2*m_p_s_L_max | L2(%d) | m_p_s_L_max(%d)\n",L2*m_p_s_L_max,L2,m_p_s_L_max);
|
||||
CCEind = (((Yk + (uint16_t)(floor((m*nCCE[p])/(L2*m_p_s_L_max))) + n_ci) % (uint16_t)(floor(nCCE[p] / L2))) * L2);
|
||||
LOG_DDD("CCEind(%u) = (((Yk(%u) + ((m(%u)*nCCE[p](%u))/(L2(%d)*m_p_s_L_max(%d)))) %% (nCCE[p] / L2)) * L2)\n",
|
||||
CCEind,Yk,m,nCCE[p],L2,m_p_s_L_max);
|
||||
LOG_DDD("n_candidate(m)=%u | CCEind=%u |",m,CCEind);
|
||||
|
||||
if (CCEind < 32)
|
||||
CCEmap = CCEmap0;
|
||||
else if (CCEind < 64)
|
||||
CCEmap = CCEmap1;
|
||||
else if (CCEind < 96)
|
||||
CCEmap = CCEmap2;
|
||||
else AssertFatal(1==0,"Illegal CCEind %u (Yk %u, m %u, nCCE %u, L2 %u\n", CCEind, Yk, m, nCCE[p], L2);
|
||||
|
||||
switch (L2) {
|
||||
case 1:
|
||||
CCEmap_mask = (1 << (CCEind & 0x1f));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
CCEmap_mask = (3 << (CCEind & 0x1f));
|
||||
break;
|
||||
|
||||
case 4:
|
||||
CCEmap_mask = (0xf << (CCEind & 0x1f));
|
||||
break;
|
||||
|
||||
case 8:
|
||||
CCEmap_mask = (0xff << (CCEind & 0x1f));
|
||||
break;
|
||||
|
||||
case 16:
|
||||
CCEmap_mask = (0xfff << (CCEind & 0x1f));
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_E(PHY, "Illegal L2 value %d\n", L2);
|
||||
//mac_xface->macphy_exit("Illegal L2\n");
|
||||
return; // not reached
|
||||
}
|
||||
|
||||
CCEmap_cand = (*CCEmap) & CCEmap_mask;
|
||||
// CCE is not allocated yet
|
||||
LOG_DDD("CCEmap_cand=%u \n",CCEmap_cand);
|
||||
|
||||
if (CCEmap_cand == 0) {
|
||||
#ifdef DEBUG_DCI_DECODING
|
||||
|
||||
if (do_common == 1)
|
||||
LOG_I(PHY,"[DCI search nPdcch %d - common] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x)\n",
|
||||
pdcch_vars[eNB_id]->num_pdcch_symbols,m,L2,sizeof_bits,CCEind,nCCE,*CCEmap,CCEmap_mask);
|
||||
else
|
||||
LOG_I(PHY,"[DCI search nPdcch %d - ue spec] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x) format %d\n",
|
||||
pdcch_vars[eNB_id]->num_pdcch_symbols,m,L2,sizeof_bits,CCEind,nCCE,*CCEmap,CCEmap_mask,format_uss);
|
||||
|
||||
#endif
|
||||
LOG_DDD("... we enter function dci_decoding(sizeof_bits=%d L=%d) -----\n",sizeof_bits,L);
|
||||
LOG_DDD("... we have to replace this part of the code by polar decoding\n");
|
||||
// for (int m=0; m < (nCCE[p]*6*9*2); m++)
|
||||
LOG_DDD("(polar decoding)-> polar intput (with coreset_time_dur=%d, coreset_nbr_rb=%d, p=%d, CCEind=%u): \n",
|
||||
coreset_time_dur,coreset_nbr_rb,p,CCEind);
|
||||
|
||||
//int reg_p=0,reg_e=0;
|
||||
//for (int m=0; m < (L2*6); m++){
|
||||
//reg_p = (((int)floor(m/coreset_time_dur))+((m%coreset_time_dur)*(L2*6/coreset_time_dur)))*9*2;
|
||||
//reg_e = m*9*2;
|
||||
//for (int i=0; i<9*2; i++){
|
||||
//polar_input[reg_p+i] = (pdcch_vars[eNB_id]->e_rx[((CCEind*9*6*2) + reg_e + i)]>0) ? (1.0):(-1.0);
|
||||
//polar_input[reg_e+i] = (pdcch_vars[eNB_id]->e_rx[((CCEind*9*6*2) + reg_e + i)]>0) ? (1/sqrt(2)):((-1)/sqrt(2));
|
||||
//printf("\t m=%d \tpolar_input[%d]=%lf <-> e_rx[%d]=%d\n",m,reg_e+i,polar_input[reg_e+i],
|
||||
// ((CCEind*9*6*2) + reg_e + i),pdcch_vars[eNB_id]->e_rx[((CCEind*9*6*2) + reg_e + i)]);
|
||||
//printf("\t m=%d \tpolar_input[%d]=%lf <-> e_rx[%d]=%d\n",m,reg_p+i,polar_input[reg_p+i],
|
||||
// ((CCEind*9*6*2) + reg_e + i),pdcch_vars[eNB_id]->e_rx[((CCEind*9*6*2) + reg_e + i)]);
|
||||
//}
|
||||
//}
|
||||
|
||||
//#ifdef NR_PDCCH_DCI_DEBUG
|
||||
//printf("\n");
|
||||
//int j=0;
|
||||
//uint32_t polar_hex[27] = {0};
|
||||
//for (int i=0; i<L2*9*6*2; i++){2
|
||||
//if ((i%32 == 0) && (i!=0)) j++;
|
||||
//polar_hex[j] = (polar_hex[j]<<1) + ((polar_input[i]==-1)? 1:0);
|
||||
//polar_hex[j] = polar_hex[j] + (((polar_input[i]==((-1)/sqrt(2)))?1:0)<<(i%32));
|
||||
//}
|
||||
//for (j=0;j<27;j++) LOG_DDD("polar_hex[%d]=%x\n",j,polar_hex[j]);
|
||||
//#endif
|
||||
|
||||
uint64_t dci_estimation[2]= {0};
|
||||
const t_nrPolar_params *currentPtrDCI=nr_polar_params(1, sizeof_bits, L2,1);
|
||||
decoderState = polar_decoder_int16(&pdcch_vars[eNB_id]->e_rx[CCEind*9*6*2],
|
||||
dci_estimation,
|
||||
1,
|
||||
currentPtrDCI);
|
||||
crc = decoderState;
|
||||
//crc = (crc16(&dci_decoded_output[current_thread_id][0], sizeof_bits) >> 16) ^ extract_crc(&dci_decoded_output[current_thread_id][0], sizeof_bits);
|
||||
LOG_DDD("... we end function dci_decoding() with crc=%x\n",crc);
|
||||
LOG_DDD("... we have to replace this part of the code by polar decoding\n");
|
||||
#ifdef DEBUG_DCI_DECODING
|
||||
LOG_DDD("(nr_dci_decoding_procedure0: crc =>%d\n",crc);
|
||||
#endif //uint16_t tc_rnti, uint16_t int_rnti, uint16_t sfi_rnti, uint16_t tpc_pusch_rnti, uint16_t tpc_pucch_rnti, uint16_t tpc_srs__rnti
|
||||
LOG_DDD("format_found=%d\n",*format_found);
|
||||
LOG_DDD("crc_scrambled=%d\n",*crc_scrambled);
|
||||
|
||||
if (crc == crc_scrambled_values[_C_RNTI_]) {
|
||||
*crc_scrambled =_c_rnti;
|
||||
*format_found=1;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_CS_RNTI_]) {
|
||||
*crc_scrambled =_cs_rnti;
|
||||
*format_found=1;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_NEW_RNTI_]) {
|
||||
*crc_scrambled =_new_rnti;
|
||||
*format_found=1;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_TC_RNTI_]) {
|
||||
*crc_scrambled =_tc_rnti;
|
||||
*format_found=_format_1_0_found;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_P_RNTI_]) {
|
||||
*crc_scrambled =_p_rnti;
|
||||
*format_found=_format_1_0_found;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_SI_RNTI_]) {
|
||||
*crc_scrambled =_si_rnti;
|
||||
*format_found=_format_1_0_found;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_RA_RNTI_]) {
|
||||
*crc_scrambled =_ra_rnti;
|
||||
*format_found=_format_1_0_found;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_SP_CSI_RNTI_]) {
|
||||
*crc_scrambled =_sp_csi_rnti;
|
||||
*format_found=_format_0_1_found;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_SFI_RNTI_]) {
|
||||
*crc_scrambled =_sfi_rnti;
|
||||
*format_found=_format_2_0_found;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_INT_RNTI_]) {
|
||||
*crc_scrambled =_int_rnti;
|
||||
*format_found=_format_2_1_found;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_TPC_PUSCH_RNTI_]) {
|
||||
*crc_scrambled =_tpc_pusch_rnti;
|
||||
*format_found=_format_2_2_found;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_TPC_PUCCH_RNTI_]) {
|
||||
*crc_scrambled =_tpc_pucch_rnti;
|
||||
*format_found=_format_2_2_found;
|
||||
}
|
||||
|
||||
if (crc == crc_scrambled_values[_TPC_SRS_RNTI_]) {
|
||||
*crc_scrambled =_tpc_srs_rnti;
|
||||
*format_found=_format_2_3_found;
|
||||
}
|
||||
|
||||
|
||||
LOG_DDD("format_found=%d\n",*format_found);
|
||||
LOG_DDD("crc_scrambled=%d\n",*crc_scrambled);
|
||||
|
||||
if (*format_found!=255) {
|
||||
dci_alloc[*dci_cnt].dci_length = sizeof_bits;
|
||||
dci_alloc[*dci_cnt].rnti = crc;
|
||||
dci_alloc[*dci_cnt].L = L;
|
||||
dci_alloc[*dci_cnt].firstCCE = CCEind;
|
||||
memcpy(&dci_alloc[*dci_cnt].dci_pdu[0],dci_estimation,8);
|
||||
|
||||
LOG_DDD("rnti matches -> DCI FOUND !!! crc =>0x%x, sizeof_bits %d, sizeof_bytes %d \n",
|
||||
dci_alloc[*dci_cnt].rnti, dci_alloc[*dci_cnt].dci_length, sizeof_bytes);
|
||||
LOG_DDD("dci_cnt %d (format_css %d crc_scrambled %d) L %d, firstCCE %d pdu[0] 0x%lx pdu[1] 0x%lx \n",
|
||||
*dci_cnt, format_css,*crc_scrambled,dci_alloc[*dci_cnt].L, dci_alloc[*dci_cnt].firstCCE,dci_alloc[*dci_cnt].dci_pdu[0],dci_alloc[*dci_cnt].dci_pdu[1]);
|
||||
if ((format_css == cformat0_0_and_1_0) || (format_uss == uformat0_0_and_1_0)) {
|
||||
if ((*crc_scrambled == _p_rnti) || (*crc_scrambled == _si_rnti) || (*crc_scrambled == _ra_rnti)) {
|
||||
dci_alloc[*dci_cnt].format = format1_0;
|
||||
*dci_cnt = *dci_cnt + 1;
|
||||
*format_found=_format_1_0_found;
|
||||
// LOG_DDD("a format1_0=%d and dci_cnt=%d\n",*format_found,*dci_cnt);
|
||||
} else {
|
||||
if ((dci_estimation[0]&1) == 0) {
|
||||
dci_alloc[*dci_cnt].format = format0_0;
|
||||
*dci_cnt = *dci_cnt + 1;
|
||||
*format_found=_format_0_0_found;
|
||||
// LOG_DDD("b format0_0=%d and dci_cnt=%d\n",*format_found,*dci_cnt);
|
||||
}
|
||||
|
||||
if ((dci_estimation[0]&1) == 1) {
|
||||
dci_alloc[*dci_cnt].format = format1_0;
|
||||
*dci_cnt = *dci_cnt + 1;
|
||||
*format_found=_format_1_0_found;
|
||||
// LOG_DDD("c format1_0=%d and dci_cnt=%d\n",*format_found,*dci_cnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (format_css == cformat2_0) {
|
||||
dci_alloc[*dci_cnt].format = format2_0;
|
||||
*dci_cnt = *dci_cnt + 1;
|
||||
*format_found=_format_2_0_found;
|
||||
}
|
||||
|
||||
if (format_css == cformat2_1) {
|
||||
dci_alloc[*dci_cnt].format = format2_1;
|
||||
*dci_cnt = *dci_cnt + 1;
|
||||
*format_found=_format_2_1_found;
|
||||
}
|
||||
|
||||
if (format_css == cformat2_2) {
|
||||
dci_alloc[*dci_cnt].format = format2_2;
|
||||
*dci_cnt = *dci_cnt + 1;
|
||||
*format_found=_format_2_2_found;
|
||||
}
|
||||
|
||||
if (format_css == cformat2_3) {
|
||||
dci_alloc[*dci_cnt].format = format2_3;
|
||||
*dci_cnt = *dci_cnt + 1;
|
||||
*format_found=_format_2_3_found;
|
||||
}
|
||||
|
||||
if (format_uss == uformat0_1_and_1_1) {
|
||||
if ((dci_estimation[0]&1) == 0) {
|
||||
dci_alloc[*dci_cnt].format = format0_1;
|
||||
*dci_cnt = *dci_cnt + 1;
|
||||
*format_found=_format_0_1_found;
|
||||
}
|
||||
|
||||
if ((dci_estimation[0]&1) == 1) {
|
||||
dci_alloc[*dci_cnt].format = format1_1;
|
||||
*dci_cnt = *dci_cnt + 1;
|
||||
*format_found=_format_1_1_found;
|
||||
}
|
||||
}
|
||||
|
||||
// store first nCCE of group for PUCCH transmission of ACK/NAK
|
||||
pdcch_vars[eNB_id]->nCCE[nr_slot_rx] = CCEind;
|
||||
|
||||
// if (crc == si_rnti) {
|
||||
// dci_alloc[*dci_cnt].format = format_si;
|
||||
// *dci_cnt = *dci_cnt + 1;
|
||||
// } else if (crc == p_rnti) {
|
||||
// dci_alloc[*dci_cnt].format = format_p;
|
||||
// *dci_cnt = *dci_cnt + 1;
|
||||
// } else if (crc == ra_rnti) {
|
||||
// dci_alloc[*dci_cnt].format = format_ra;
|
||||
// // store first nCCE of group for PUCCH transmission of ACK/NAK
|
||||
// pdcch_vars[eNB_id]->nCCE[nr_slot_rx] = CCEind;
|
||||
// *dci_cnt = *dci_cnt + 1;
|
||||
// } else if (crc == pdcch_vars[eNB_id]->crnti) {
|
||||
|
||||
// if ((mode & UL_DCI) && (format_c == format0)
|
||||
// && ((dci_decoded_output[current_thread_id][0] & 0x80)
|
||||
// == 0)) { // check if pdu is format 0 or 1A
|
||||
// if (*format0_found == 0) {
|
||||
// dci_alloc[*dci_cnt].format = format0;
|
||||
// *format0_found = 1;
|
||||
// *dci_cnt = *dci_cnt + 1;
|
||||
// pdcch_vars[eNB_id]->nCCE[nr_slot_rx] = CCEind;
|
||||
// }
|
||||
// } else if (format_c == format0) { // this is a format 1A DCI
|
||||
// dci_alloc[*dci_cnt].format = format1A;
|
||||
// *dci_cnt = *dci_cnt + 1;
|
||||
// pdcch_vars[eNB_id]->nCCE[nr_slot_rx] = CCEind;
|
||||
// } else {
|
||||
// // store first nCCE of group for PUCCH transmission of ACK/NAK
|
||||
// if (*format_c_found == 0) {
|
||||
// dci_alloc[*dci_cnt].format = format_c;
|
||||
// *dci_cnt = *dci_cnt + 1;
|
||||
// *format_c_found = 1;
|
||||
// pdcch_vars[eNB_id]->nCCE[nr_slot_rx] = CCEind;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//LOG_I(PHY,"DCI decoding CRNTI [format: %d, nCCE[nr_slot_rx: %d]: %d ], AggregationLevel %d \n",format_c, nr_slot_rx, pdcch_vars[eNB_id]->nCCE[nr_slot_rx],L2);
|
||||
// memcpy(&dci_alloc[*dci_cnt].dci_pdu[0],dci_decoded_output,sizeof_bytes);
|
||||
switch (1 << L) {
|
||||
case 1:
|
||||
*CCEmap |= (1 << (CCEind & 0x1f));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
*CCEmap |= (1 << (CCEind & 0x1f));
|
||||
break;
|
||||
|
||||
case 4:
|
||||
*CCEmap |= (1 << (CCEind & 0x1f));
|
||||
break;
|
||||
|
||||
case 8:
|
||||
*CCEmap |= (1 << (CCEind & 0x1f));
|
||||
break;
|
||||
|
||||
case 16:
|
||||
*CCEmap |= (1 << (CCEind & 0x1f));
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_DCI_DECODING
|
||||
LOG_I(PHY,"[DCI search] Found DCI %d rnti %x Aggregation %d length %d format %d in CCE %d (CCEmap %x) candidate %d / %d \n",
|
||||
*dci_cnt,crc,1<<L,sizeof_bits,dci_alloc[*dci_cnt-1].format,CCEind,*CCEmap,m,nb_candidates );
|
||||
// nr_extract_dci_into(
|
||||
// dump_dci(frame_parms,&dci_alloc[*dci_cnt-1]);
|
||||
#endif
|
||||
return;
|
||||
} // rnti match
|
||||
} else { // CCEmap_cand == 0
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
||||
// if ( agregationLevel != 0xFF &&
|
||||
// (format_c == format0 && m==0 && si_rnti != SI_RNTI))
|
||||
// {
|
||||
// //Only valid for OAI : Save some processing time when looking for DCI format0. From the log we see the DCI only on candidate 0.
|
||||
// return;
|
||||
// }
|
||||
|
||||
} // candidate loop
|
||||
|
||||
LOG_DDD("end candidate loop\n");
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
|
||||
uint8_t nr_dci_decoding_procedure(int s,
|
||||
int p,
|
||||
PHY_VARS_NR_UE *ue,
|
||||
NR_DCI_ALLOC_t *dci_alloc,
|
||||
NR_SEARCHSPACE_TYPE_t searchSpacetype,
|
||||
int16_t eNB_id,
|
||||
uint8_t nr_slot_rx,
|
||||
uint8_t dci_fields_sizes_cnt[MAX_NR_DCI_DECODED_SLOT][NBR_NR_DCI_FIELDS][NBR_NR_FORMATS],
|
||||
uint16_t n_RB_ULBWP,
|
||||
uint16_t n_RB_DLBWP,
|
||||
crc_scrambled_t *crc_scrambled,
|
||||
format_found_t *format_found,
|
||||
uint16_t crc_scrambled_values[TOTAL_NBR_SCRAMBLED_VALUES]) {
|
||||
// uint8_t dci_fields_sizes[NBR_NR_DCI_FIELDS][NBR_NR_FORMATS],
|
||||
LOG_DD("(nr_dci_decoding_procedure) nr_slot_rx=%d n_RB_ULBWP=%d n_RB_DLBWP=%d format_found=%d\n",
|
||||
nr_slot_rx,n_RB_ULBWP,n_RB_DLBWP,*format_found);
|
||||
int do_common = (int)searchSpacetype;
|
||||
uint8_t dci_fields_sizes[NBR_NR_DCI_FIELDS][NBR_NR_FORMATS];
|
||||
crc_scrambled_t crc_scrambled_ = *crc_scrambled;
|
||||
format_found_t format_found_ = *format_found;
|
||||
uint8_t dci_cnt = 0, old_dci_cnt = 0;
|
||||
uint32_t CCEmap0 = 0, CCEmap1 = 0, CCEmap2 = 0;
|
||||
NR_UE_PDCCH **pdcch_vars = ue->pdcch_vars[ue->current_thread_id[nr_slot_rx]];
|
||||
NR_UE_PDCCH *pdcch_vars2 = ue->pdcch_vars[ue->current_thread_id[nr_slot_rx]][eNB_id];
|
||||
uint16_t pdcch_DMRS_scrambling_id = pdcch_vars2->coreset[p].pdcchDMRSScramblingID;
|
||||
uint64_t coreset_freq_dom = pdcch_vars2->coreset[p].frequencyDomainResources;
|
||||
int coreset_time_dur = pdcch_vars2->coreset[p].duration;
|
||||
uint16_t coreset_nbr_rb=0;
|
||||
|
||||
for (int i = 0; i < 45; i++) {
|
||||
// this loop counts each bit of the bit map coreset_freq_dom, and increments nbr_RB_coreset for each bit set to '1'
|
||||
if (((coreset_freq_dom & 0x1FFFFFFFFFFF) >> i) & 0x1) coreset_nbr_rb++;
|
||||
}
|
||||
|
||||
coreset_nbr_rb = 6 * coreset_nbr_rb;
|
||||
// coreset_time_dur,coreset_nbr_rb,
|
||||
NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
||||
//uint8_t mi;// = get_mi(&ue->frame_parms, nr_slot_rx);
|
||||
//uint8_t tmode = ue->transmission_mode[eNB_id];
|
||||
//uint8_t frame_type = frame_parms->frame_type;
|
||||
uint8_t format_0_0_1_0_size_bits = 0, format_0_0_1_0_size_bytes = 0; //FIXME
|
||||
uint8_t format_0_1_1_1_size_bits = 0, format_0_1_1_1_size_bytes = 0; //FIXME
|
||||
uint8_t format_2_0_size_bits = 0, format_2_0_size_bytes = 0; //FIXME
|
||||
uint8_t format_2_1_size_bits = 0, format_2_1_size_bytes = 0; //FIXME
|
||||
uint8_t format_2_2_size_bits = 0, format_2_2_size_bytes = 0; //FIXME
|
||||
uint8_t format_2_3_size_bits = 0, format_2_3_size_bytes = 0; //FIXME
|
||||
/*
|
||||
*
|
||||
* The implementation of this function will depend on the information given by the searchSpace IE
|
||||
*
|
||||
* In LTE the UE has no knowledge about:
|
||||
* - the type of search (common or ue-specific)
|
||||
* - the DCI format it is going to be decoded when performing the PDCCH monitoring
|
||||
* So the blind decoding has to be done for common and ue-specific searchSpaces for each aggregation level and for each dci format
|
||||
*
|
||||
* In NR the UE has a knowledge about the search Space type and the DCI format it is going to be decoded,
|
||||
* so in the blind decoding we can call the function nr_dci_decoding_procedure0 with the searchSpace type and the dci format parameter
|
||||
* We will call this function as many times as aggregation levels indicated in searchSpace
|
||||
* Implementation according to 38.213 v15.1.0 Section 10.
|
||||
*
|
||||
*/
|
||||
NR_UE_SEARCHSPACE_CSS_DCI_FORMAT_t css_dci_format = pdcch_vars2->searchSpace[s].searchSpaceType.common_dci_formats; //FIXME!!!
|
||||
NR_UE_SEARCHSPACE_USS_DCI_FORMAT_t uss_dci_format = pdcch_vars2->searchSpace[s].searchSpaceType.ue_specific_dci_formats; //FIXME!!!
|
||||
// The following initialization is only for test purposes. To be removed
|
||||
// NR_UE_SEARCHSPACE_CSS_DCI_FORMAT_t
|
||||
css_dci_format = cformat0_0_and_1_0;
|
||||
//NR_UE_SEARCHSPACE_USS_DCI_FORMAT_t
|
||||
uss_dci_format = uformat0_0_and_1_0;
|
||||
/*
|
||||
* Possible overlap between RE for SS/PBCH blocks (described in section 10, 38.213) has not been implemented yet
|
||||
* This can be implemented by setting variable 'mode = NO_DCI' when overlap occurs
|
||||
*/
|
||||
//dci_detect_mode_t mode = 3; //dci_detect_mode_select(&ue->frame_parms, nr_slot_rx);
|
||||
LOG_DD("searSpaceType=%d\n",do_common);
|
||||
LOG_DD("%s_dci_format=%d\n",do_common?"uss":"css",css_dci_format);
|
||||
|
||||
|
||||
// A set of PDCCH candidates for a UE to monitor is defined in terms of PDCCH search spaces
|
||||
if (do_common==0) { // COMMON SearchSpaceType assigned to current SearchSpace/CORESET
|
||||
// Type0-PDCCH common search space for a DCI format with CRC scrambled by a SI-RNTI
|
||||
// number of consecutive resource blocks and a number of consecutive symbols for
|
||||
// the control resource set of the Type0-PDCCH common search space from
|
||||
// the four most significant bits of RMSI-PDCCH-Config as described in Tables 13-1 through 13-10
|
||||
// and determines PDCCH monitoring occasions
|
||||
// from the four least significant bits of RMSI-PDCCH-Config,
|
||||
// included in MasterInformationBlock, as described in Tables 13-11 through 13-15
|
||||
// Type0A-PDCCH common search space for a DCI format with CRC scrambled by a SI-RNTI
|
||||
// Type1-PDCCH common search space for a DCI format with CRC scrambled by a RA-RNTI, or a TC-RNTI, or a C-RNTI
|
||||
// Type2-PDCCH common search space for a DCI format with CRC scrambled by a P-RNTI
|
||||
if (css_dci_format == cformat0_0_and_1_0) {
|
||||
// 38.213 v15.1.0 Table 10.1-1: CCE aggregation levels and maximum number of PDCCH candidates per CCE
|
||||
// aggregation level for Type0/Type0A/Type2-PDCCH common search space
|
||||
// CCE Aggregation Level Number of Candidates
|
||||
// 4 4
|
||||
// 8 2
|
||||
// 16 1
|
||||
// FIXME
|
||||
// We shall consider Table 10.1-1 to calculate the blind decoding only for Type0/Type0A/Type2-PDCCH
|
||||
// Shall we consider the nrofCandidates in SearSpace IE that considers Aggregation Levels 1,2,4,8,16? Our implementation considers Table 10.1-1
|
||||
// blind decoding (Type0-PDCCH,Type0A-PDCCH,Type1-PDCCH,Type2-PDCCH)
|
||||
// for format0_0 => we are NOT implementing format0_0 for common search spaces. FIXME!
|
||||
// for format0_0 and format1_0, first we calculate dci pdu size
|
||||
format_0_0_1_0_size_bits = nr_dci_format_size(ue,eNB_id,nr_slot_rx,p,_c_rnti,n_RB_ULBWP,n_RB_DLBWP,dci_fields_sizes,0);
|
||||
format_0_0_1_0_size_bytes = (format_0_0_1_0_size_bits%8 == 0) ? (uint8_t)floor(format_0_0_1_0_size_bits/8) : (uint8_t)(floor(format_0_0_1_0_size_bits/8) + 1);
|
||||
LOG_DD("calculating dci format size for common searchSpaces with format css_dci_format=%d, format_0_0_1_0_size_bits=%d, format_0_0_1_0_size_bytes=%d\n",
|
||||
css_dci_format,format_0_0_1_0_size_bits,format_0_0_1_0_size_bytes);
|
||||
|
||||
for (int aggregationLevel = 0; aggregationLevel<5 ; aggregationLevel++) { // We fix aggregationLevel to 3 for testing=> nbr of CCE=8
|
||||
//for (int aggregationLevel = 2; aggregationLevel<5 ; aggregationLevel++) {
|
||||
// for aggregation level aggregationLevel. The number of candidates (for L2= 2^aggregationLevel) will be calculated in function nr_dci_decoding_procedure0
|
||||
LOG_DD("common searchSpaces with format css_dci_format=%d and aggregation_level=%d\n",
|
||||
css_dci_format,(1<<aggregationLevel));
|
||||
old_dci_cnt = dci_cnt;
|
||||
nr_dci_decoding_procedure0(s,p,coreset_time_dur,coreset_nbr_rb,pdcch_vars, 1, nr_slot_rx, dci_alloc, eNB_id, ue->current_thread_id[nr_slot_rx], frame_parms,
|
||||
crc_scrambled_values, aggregationLevel,
|
||||
cformat0_0_and_1_0, uformat0_0_and_1_0,
|
||||
format_0_0_1_0_size_bits, format_0_0_1_0_size_bytes, &dci_cnt,
|
||||
&crc_scrambled_, &format_found_, pdcch_DMRS_scrambling_id,&CCEmap0, &CCEmap1, &CCEmap2);
|
||||
|
||||
if (dci_cnt != old_dci_cnt) {
|
||||
// we will exit the loop as we have found the DCI
|
||||
aggregationLevel = 5;
|
||||
format_0_0_1_0_size_bits = nr_dci_format_size(ue,eNB_id,nr_slot_rx,p,crc_scrambled_,n_RB_ULBWP,n_RB_DLBWP,dci_fields_sizes,
|
||||
0); // after decoding dci successfully we recalculate dci pdu size with correct crc scrambled to get the right field sizes
|
||||
old_dci_cnt = dci_cnt;
|
||||
|
||||
for (int i=0; i<NBR_NR_DCI_FIELDS; i++)
|
||||
for (int j=0; j<NBR_NR_FORMATS; j++)
|
||||
dci_fields_sizes_cnt[dci_cnt-1][i][j]=dci_fields_sizes[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Type3-PDCCH common search space for a DCI format with CRC scrambled by INT-RNTI, or SFI-RNTI,
|
||||
// or TPC-PUSCH-RNTI, or TPC-PUCCH-RNTI, or TPC-SRS-RNTI, or C-RNTI, or CS-RNTI(s), or SP-CSI-RNTI
|
||||
if (css_dci_format == cformat2_0) {
|
||||
// for format2_0, first we calculate dci pdu size
|
||||
format_2_0_size_bits = nr_dci_format_size(ue,eNB_id,nr_slot_rx,p,_sfi_rnti,n_RB_ULBWP,n_RB_DLBWP,dci_fields_sizes,4);
|
||||
format_2_0_size_bytes = (format_2_0_size_bits%8 == 0) ? (uint8_t)floor(format_2_0_size_bits/8) : (uint8_t)(floor(format_2_0_size_bits/8) + 1);
|
||||
LOG_DD("calculating dci format size for common searchSpaces with format css_dci_format=%d, format2_0_size_bits=%d, format2_0_size_bytes=%d\n",
|
||||
css_dci_format,format_2_0_size_bits,format_2_0_size_bytes);
|
||||
|
||||
for (int aggregationLevelSFI = 0; aggregationLevelSFI<5 ; aggregationLevelSFI++) {
|
||||
LOG_DD("common searchSpaces with format css_dci_format=%d and aggregation_level=%d\n",
|
||||
css_dci_format,(1<<aggregationLevelSFI));
|
||||
// for aggregation level 'aggregationLevelSFI'. The number of candidates (nrofCandidates-SFI) will be calculated in function nr_dci_decoding_procedure0
|
||||
old_dci_cnt = dci_cnt;
|
||||
nr_dci_decoding_procedure0(s,p,coreset_time_dur,coreset_nbr_rb,pdcch_vars, 1, nr_slot_rx, dci_alloc, eNB_id, ue->current_thread_id[nr_slot_rx], frame_parms,
|
||||
crc_scrambled_values, aggregationLevelSFI,
|
||||
cformat2_0, uformat0_0_and_1_0,
|
||||
format_2_0_size_bits, format_2_0_size_bytes, &dci_cnt,
|
||||
&crc_scrambled_, &format_found_,pdcch_DMRS_scrambling_id, &CCEmap0, &CCEmap1, &CCEmap2);
|
||||
|
||||
if (dci_cnt != old_dci_cnt) {
|
||||
// we will exit the loop as we have found the DCI
|
||||
aggregationLevelSFI = 5;
|
||||
old_dci_cnt = dci_cnt;
|
||||
|
||||
for (int i=0; i<NBR_NR_DCI_FIELDS; i++)
|
||||
for (int j=0; j<NBR_NR_FORMATS; j++)
|
||||
dci_fields_sizes_cnt[dci_cnt-1][i][j]=dci_fields_sizes[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (css_dci_format == cformat2_1) {
|
||||
// for format2_1, first we calculate dci pdu size
|
||||
format_2_1_size_bits = nr_dci_format_size(ue,eNB_id,nr_slot_rx,p,_int_rnti,n_RB_ULBWP,n_RB_DLBWP,dci_fields_sizes,5);
|
||||
format_2_1_size_bytes = (format_2_1_size_bits%8 == 0) ? (uint8_t)floor(format_2_1_size_bits/8) : (uint8_t)(floor(format_2_1_size_bits/8) + 1);
|
||||
LOG_DD("calculating dci format size for common searchSpaces with format css_dci_format=%d, format2_1_size_bits=%d, format2_1_size_bytes=%d\n",
|
||||
css_dci_format,format_2_1_size_bits,format_2_1_size_bytes);
|
||||
|
||||
for (int aggregationLevel = 0; aggregationLevel<5 ; aggregationLevel++) {
|
||||
LOG_DD("common searchSpaces with format css_dci_format=%d and aggregation_level=%d\n",
|
||||
css_dci_format,(1<<aggregationLevel));
|
||||
// for aggregation level 'aggregationLevelSFI'. The number of candidates (nrofCandidates-SFI) will be calculated in function nr_dci_decoding_procedure0
|
||||
old_dci_cnt = dci_cnt;
|
||||
nr_dci_decoding_procedure0(s,p,coreset_time_dur,coreset_nbr_rb,pdcch_vars, 1, nr_slot_rx, dci_alloc, eNB_id, ue->current_thread_id[nr_slot_rx], frame_parms,
|
||||
crc_scrambled_values, aggregationLevel,
|
||||
cformat2_1, uformat0_0_and_1_0,
|
||||
format_2_1_size_bits, format_2_1_size_bytes, &dci_cnt,
|
||||
&crc_scrambled_, &format_found_,pdcch_DMRS_scrambling_id, &CCEmap0, &CCEmap1, &CCEmap2);
|
||||
|
||||
if (dci_cnt != old_dci_cnt) {
|
||||
// we will exit the loop as we have found the DCI
|
||||
aggregationLevel = 5;
|
||||
old_dci_cnt = dci_cnt;
|
||||
|
||||
for (int i=0; i<NBR_NR_DCI_FIELDS; i++)
|
||||
for (int j=0; j<NBR_NR_FORMATS; j++)
|
||||
dci_fields_sizes_cnt[dci_cnt-1][i][j]=dci_fields_sizes[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (css_dci_format == cformat2_2) {
|
||||
// for format2_2, first we calculate dci pdu size
|
||||
format_2_2_size_bits = nr_dci_format_size(ue,eNB_id,nr_slot_rx,p,_tpc_pucch_rnti,n_RB_ULBWP,n_RB_DLBWP,dci_fields_sizes,6);
|
||||
format_2_2_size_bytes = (format_2_2_size_bits%8 == 0) ? (uint8_t)floor(format_2_2_size_bits/8) : (uint8_t)(floor(format_2_2_size_bits/8) + 1);
|
||||
LOG_DD("calculating dci format size for common searchSpaces with format css_dci_format=%d, format2_2_size_bits=%d, format2_2_size_bytes=%d\n",
|
||||
css_dci_format,format_2_2_size_bits,format_2_2_size_bytes);
|
||||
|
||||
for (int aggregationLevel = 0; aggregationLevel<5 ; aggregationLevel++) {
|
||||
LOG_DD("common searchSpaces with format css_dci_format=%d and aggregation_level=%d\n",
|
||||
css_dci_format,(1<<aggregationLevel));
|
||||
// for aggregation level 'aggregationLevelSFI'. The number of candidates (nrofCandidates-SFI) will be calculated in function nr_dci_decoding_procedure0
|
||||
old_dci_cnt = dci_cnt;
|
||||
nr_dci_decoding_procedure0(s,p,coreset_time_dur,coreset_nbr_rb,pdcch_vars, 1, nr_slot_rx, dci_alloc, eNB_id, ue->current_thread_id[nr_slot_rx], frame_parms,
|
||||
crc_scrambled_values, aggregationLevel,
|
||||
cformat2_2, uformat0_0_and_1_0,
|
||||
format_2_2_size_bits, format_2_2_size_bytes, &dci_cnt,
|
||||
&crc_scrambled_, &format_found_,pdcch_DMRS_scrambling_id, &CCEmap0, &CCEmap1, &CCEmap2);
|
||||
|
||||
if (dci_cnt != old_dci_cnt) {
|
||||
// we will exit the loop as we have found the DCI
|
||||
aggregationLevel = 5;
|
||||
old_dci_cnt = dci_cnt;
|
||||
|
||||
for (int i=0; i<NBR_NR_DCI_FIELDS; i++)
|
||||
for (int j=0; j<NBR_NR_FORMATS; j++)
|
||||
dci_fields_sizes_cnt[dci_cnt-1][i][j]=dci_fields_sizes[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (css_dci_format == cformat2_3) {
|
||||
// for format2_1, first we calculate dci pdu size
|
||||
format_2_3_size_bits = nr_dci_format_size(ue,eNB_id,nr_slot_rx,p,_tpc_srs_rnti,n_RB_ULBWP,n_RB_DLBWP,dci_fields_sizes,7);
|
||||
format_2_3_size_bytes = (format_2_3_size_bits%8 == 0) ? (uint8_t)floor(format_2_3_size_bits/8) : (uint8_t)(floor(format_2_3_size_bits/8) + 1);
|
||||
LOG_DD("calculating dci format size for common searchSpaces with format css_dci_format=%d, format2_3_size_bits=%d, format2_3_size_bytes=%d\n",
|
||||
css_dci_format,format_2_3_size_bits,format_2_3_size_bytes);
|
||||
|
||||
for (int aggregationLevel = 0; aggregationLevel<5 ; aggregationLevel++) {
|
||||
LOG_DD("common searchSpaces with format css_dci_format=%d and aggregation_level=%d\n",
|
||||
css_dci_format,(1<<aggregationLevel));
|
||||
// for aggregation level 'aggregationLevelSFI'. The number of candidates (nrofCandidates-SFI) will be calculated in function nr_dci_decoding_procedure0
|
||||
old_dci_cnt = dci_cnt;
|
||||
nr_dci_decoding_procedure0(s,p,coreset_time_dur,coreset_nbr_rb,pdcch_vars, 1, nr_slot_rx, dci_alloc, eNB_id, ue->current_thread_id[nr_slot_rx], frame_parms,
|
||||
crc_scrambled_values, aggregationLevel,
|
||||
cformat2_3, uformat0_0_and_1_0,
|
||||
format_2_3_size_bits, format_2_3_size_bytes, &dci_cnt,
|
||||
&crc_scrambled_, &format_found_,pdcch_DMRS_scrambling_id, &CCEmap0, &CCEmap1, &CCEmap2);
|
||||
|
||||
if (dci_cnt != old_dci_cnt) {
|
||||
// we will exit the loop as we have found the DCI
|
||||
aggregationLevel = 5;
|
||||
old_dci_cnt = dci_cnt;
|
||||
|
||||
for (int i=0; i<NBR_NR_DCI_FIELDS; i++)
|
||||
for (int j=0; j<NBR_NR_FORMATS; j++)
|
||||
dci_fields_sizes_cnt[dci_cnt-1][i][j]=dci_fields_sizes[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // UE-SPECIFIC SearchSpaceType assigned to current SearchSpace/CORESET
|
||||
// UE-specific search space for a DCI format with CRC scrambled by C-RNTI, or CS-RNTI(s), or SP-CSI-RNTI
|
||||
if (uss_dci_format == uformat0_0_and_1_0) {
|
||||
// for format0_0 and format1_0, first we calculate dci pdu size
|
||||
format_0_0_1_0_size_bits = nr_dci_format_size(ue,eNB_id,nr_slot_rx,p,_c_rnti,n_RB_ULBWP,n_RB_DLBWP,dci_fields_sizes,0);
|
||||
format_0_0_1_0_size_bytes = (format_0_0_1_0_size_bits%8 == 0) ? (uint8_t)floor(format_0_0_1_0_size_bits/8) : (uint8_t)(floor(format_0_0_1_0_size_bits/8) + 1);
|
||||
LOG_DD("calculating dci format size for UE-specific searchSpaces with format uss_dci_format=%d, format_0_0_1_0_size_bits=%d, format_0_0_1_0_size_bytes=%d\n",
|
||||
css_dci_format,format_0_0_1_0_size_bits,format_0_0_1_0_size_bytes);
|
||||
|
||||
for (int aggregationLevel = 0; aggregationLevel<5 ; aggregationLevel++) { // We fix aggregationLevel to 3 for testing=> nbr of CCE=8
|
||||
//for (int aggregationLevel = 2; aggregationLevel<5 ; aggregationLevel++) {
|
||||
// for aggregation level aggregationLevel. The number of candidates (for L2= 2^aggregationLevel) will be calculated in function nr_dci_decoding_procedure0
|
||||
LOG_DD("common searchSpaces with format css_dci_format=%d and aggregation_level=%d\n",
|
||||
css_dci_format,(1<<aggregationLevel));
|
||||
old_dci_cnt = dci_cnt;
|
||||
nr_dci_decoding_procedure0(s,p,coreset_time_dur,coreset_nbr_rb,pdcch_vars, 0, nr_slot_rx, dci_alloc, eNB_id, ue->current_thread_id[nr_slot_rx], frame_parms,
|
||||
crc_scrambled_values, aggregationLevel,
|
||||
cformat0_0_and_1_0, uformat0_0_and_1_0,
|
||||
format_0_0_1_0_size_bits, format_0_0_1_0_size_bytes, &dci_cnt,
|
||||
&crc_scrambled_, &format_found_,pdcch_DMRS_scrambling_id, &CCEmap0, &CCEmap1, &CCEmap2);
|
||||
|
||||
if (dci_cnt != old_dci_cnt) {
|
||||
// we will exit the loop as we have found the DCI
|
||||
aggregationLevel = 5;
|
||||
old_dci_cnt = dci_cnt;
|
||||
|
||||
for (int i=0; i<NBR_NR_DCI_FIELDS; i++)
|
||||
for (int j=0; j<NBR_NR_FORMATS; j++)
|
||||
dci_fields_sizes_cnt[dci_cnt-1][i][j]=dci_fields_sizes[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (uss_dci_format == uformat0_1_and_1_1) {
|
||||
// for format0_0 and format1_0, first we calculate dci pdu size
|
||||
format_0_1_1_1_size_bits = nr_dci_format_size(ue,eNB_id,nr_slot_rx,p,_c_rnti,n_RB_ULBWP,n_RB_DLBWP,dci_fields_sizes,1);
|
||||
format_0_1_1_1_size_bytes = (format_0_1_1_1_size_bits%8 == 0) ? (uint8_t)floor(format_0_1_1_1_size_bits/8) : (uint8_t)(floor(format_0_1_1_1_size_bits/8) + 1);
|
||||
LOG_DD("calculating dci format size for UE-specific searchSpaces with format uss_dci_format=%d, format_0_1_1_1_size_bits=%d, format_0_1_1_1_size_bytes=%d\n",
|
||||
css_dci_format,format_0_1_1_1_size_bits,format_0_1_1_1_size_bytes);
|
||||
|
||||
for (int aggregationLevel = 0; aggregationLevel<5 ; aggregationLevel++) { // We fix aggregationLevel to 3 for testing=> nbr of CCE=8
|
||||
//for (int aggregationLevel = 2; aggregationLevel<5 ; aggregationLevel++) {
|
||||
// for aggregation level aggregationLevel. The number of candidates (for L2= 2^aggregationLevel) will be calculated in function nr_dci_decoding_procedure0
|
||||
LOG_DD("common searchSpaces with format css_dci_format=%d and aggregation_level=%d\n",
|
||||
css_dci_format,(1<<aggregationLevel));
|
||||
old_dci_cnt = dci_cnt;
|
||||
nr_dci_decoding_procedure0(s,p,coreset_time_dur,coreset_nbr_rb,pdcch_vars, 0, nr_slot_rx, dci_alloc, eNB_id, ue->current_thread_id[nr_slot_rx], frame_parms,
|
||||
crc_scrambled_values, aggregationLevel,
|
||||
cformat0_0_and_1_0, uformat0_1_and_1_1,
|
||||
format_0_1_1_1_size_bits, format_0_1_1_1_size_bytes, &dci_cnt,
|
||||
&crc_scrambled_, &format_found_,pdcch_DMRS_scrambling_id, &CCEmap0, &CCEmap1, &CCEmap2);
|
||||
|
||||
if (dci_cnt != old_dci_cnt) {
|
||||
// we will exit the loop as we have found the DCI
|
||||
aggregationLevel = 5;
|
||||
old_dci_cnt = dci_cnt;
|
||||
|
||||
for (int i=0; i<NBR_NR_DCI_FIELDS; i++)
|
||||
for (int j=0; j<NBR_NR_FORMATS; j++)
|
||||
dci_fields_sizes_cnt[dci_cnt-1][i][j]=dci_fields_sizes[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*crc_scrambled = crc_scrambled_;
|
||||
*format_found = format_found_;
|
||||
LOG_DD("at the end crc_scrambled=%d and format_found=%d\n",*crc_scrambled,*format_found);
|
||||
LOG_DD("at the end dci_cnt=%d \n",dci_cnt);
|
||||
return(dci_cnt);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -33,13 +33,7 @@
|
||||
#ifndef __PHY_NR_UE_TRANSPORT_DCI_NR__H__
|
||||
#define __PHY_NR_UE_TRANSPORT_DCI_NR__H__
|
||||
|
||||
#ifndef USER_MODE
|
||||
#include "PHY/types.h"
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define MAX_DCI_SIZE_BITS 45
|
||||
|
||||
|
||||
@@ -43,12 +43,6 @@
|
||||
#include "PHY/NR_REFSIG/dmrs_nr.h"
|
||||
#include "common/utils/nr/nr_common.h"
|
||||
|
||||
#ifndef USER_MODE
|
||||
#define NOCYGWIN_STATIC static
|
||||
#else
|
||||
#define NOCYGWIN_STATIC
|
||||
#endif
|
||||
|
||||
/* dynamic shift for LLR computation for TM3/4
|
||||
* set as command line argument, see lte-softmodem.c
|
||||
* default value: 0
|
||||
|
||||
@@ -40,9 +40,7 @@
|
||||
//#define DEBUG_PBCH
|
||||
//#define DEBUG_PBCH_ENCODING
|
||||
|
||||
#ifdef OPENAIR2
|
||||
//#include "PHY_INTERFACE/defs.h"
|
||||
#endif
|
||||
|
||||
#define PBCH_A 24
|
||||
|
||||
|
||||
@@ -69,18 +69,12 @@ void reset_stats(FL_OBJECT *button, long arg) {
|
||||
|
||||
|
||||
static void *scope_thread_eNB(void *arg) {
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
FILE *eNB_stats;
|
||||
# endif
|
||||
struct sched_param sched_param;
|
||||
int UE_id, CC_id;
|
||||
int ue_cnt=0;
|
||||
sched_param.sched_priority = sched_get_priority_min(SCHED_FIFO)+1;
|
||||
sched_setscheduler(0, SCHED_FIFO,&sched_param);
|
||||
printf("Scope thread has priority %d\n",sched_param.sched_priority);
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
eNB_stats = fopen("eNB_stats.txt", "w");
|
||||
#endif
|
||||
|
||||
while (!oai_exit) {
|
||||
ue_cnt=0;
|
||||
@@ -99,16 +93,6 @@ static void *scope_thread_eNB(void *arg) {
|
||||
usleep(100*1000);
|
||||
}
|
||||
|
||||
// printf("%s",stats_buffer);
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
|
||||
if (eNB_stats) {
|
||||
rewind (eNB_stats);
|
||||
fwrite (stats_buffer, 1, len, eNB_stats);
|
||||
fclose (eNB_stats);
|
||||
}
|
||||
|
||||
# endif
|
||||
pthread_exit((void *)arg);
|
||||
}
|
||||
|
||||
|
||||
@@ -72,16 +72,10 @@ void reset_stats(FL_OBJECT *button, long arg) {
|
||||
|
||||
static void *scope_thread_UE(void *arg) {
|
||||
char stats_buffer[16384];
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
FILE *UE_stats, *eNB_stats;
|
||||
# endif
|
||||
struct sched_param sched_param;
|
||||
sched_param.sched_priority = sched_get_priority_min(SCHED_FIFO)+1;
|
||||
sched_setscheduler(0, SCHED_FIFO,&sched_param);
|
||||
printf("Scope thread has priority %d\n",sched_param.sched_priority);
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
UE_stats = fopen("UE_stats.txt", "w");
|
||||
#endif
|
||||
|
||||
while (!oai_exit) {
|
||||
// dump_ue_stats (PHY_vars_UE_g[0][0], &PHY_vars_UE_g[0][0]->proc.proc_rxtx[0],stats_buffer, 0, mode,rx_input_level_dBm);
|
||||
@@ -94,16 +88,6 @@ static void *scope_thread_UE(void *arg) {
|
||||
0,7);
|
||||
// printf("%s",stats_buffer);
|
||||
}
|
||||
|
||||
# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
|
||||
if (UE_stats) {
|
||||
rewind (UE_stats);
|
||||
fwrite (stats_buffer, 1, len, UE_stats);
|
||||
fclose (UE_stats);
|
||||
}
|
||||
|
||||
# endif
|
||||
pthread_exit((void *)arg);
|
||||
}
|
||||
|
||||
|
||||
@@ -517,9 +517,6 @@ void phy_scope_gNB(OAI_phy_scope_t *form,
|
||||
}
|
||||
static void *scope_thread_gNB(void *arg) {
|
||||
scopeData_t *p=(scopeData_t *) arg;
|
||||
//# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||
// FILE *gNB_stats = fopen("gNB_stats.txt", "w");
|
||||
//#endif
|
||||
size_t stksize=0;
|
||||
pthread_attr_t atr;
|
||||
pthread_attr_init(&atr);
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
#ifdef MEX
|
||||
#define msg mexPrintf
|
||||
#else
|
||||
#ifdef OPENAIR2
|
||||
#if ENABLE_RAL
|
||||
#include "collection/hashtable/hashtable.h"
|
||||
#include "COMMON/ral_messages_types.h"
|
||||
@@ -56,9 +55,6 @@
|
||||
#endif
|
||||
#include "common/utils/LOG/log.h"
|
||||
#define msg(aRGS...) LOG_D(PHY, ##aRGS)
|
||||
#else
|
||||
#define msg printf
|
||||
#endif
|
||||
#endif
|
||||
//use msg in the real-time thread context
|
||||
#define msg_nrt printf
|
||||
@@ -196,19 +192,6 @@ typedef struct {
|
||||
NB_IoT_UE_DLSCH_t *dlsch_rn_MCH[10];
|
||||
|
||||
} PHY_VARS_RN_NB_IoT;
|
||||
/*
|
||||
#ifdef OCP_FRAMEWORK
|
||||
#include <enums.h>
|
||||
#else
|
||||
//typedef enum {normal_txrx=0,rx_calib_ue=1,rx_calib_ue_med=2,rx_calib_ue_byp=3,debug_prach=4,no_L2_connect=5,calib_prach_tx=6,rx_dump_frame=7,loop_through_memory=8} runmode_t;
|
||||
*/
|
||||
// enum transmission_access_mode {
|
||||
// NO_ACCESS=0,
|
||||
// POSTPONED_ACCESS,
|
||||
// CANCELED_ACCESS,
|
||||
// UNKNOWN_ACCESS,
|
||||
// SCHEDULED_ACCESS,
|
||||
// CBA_ACCESS};
|
||||
|
||||
typedef enum {
|
||||
eNodeB_3GPP_NB_IoT=0, // classical eNodeB function
|
||||
|
||||
@@ -87,7 +87,6 @@
|
||||
#define LOG_W(x, ...) mexPrintf(__VA_ARGS__)
|
||||
#define LOG_M(x, ...) mexPrintf(__VA_ARGS__)
|
||||
#else
|
||||
#ifdef OPENAIR2
|
||||
#if ENABLE_RAL
|
||||
#include "collection/hashtable/hashtable.h"
|
||||
#include "COMMON/ral_messages_types.h"
|
||||
@@ -95,9 +94,6 @@
|
||||
#endif
|
||||
#include "common/utils/LOG/log.h"
|
||||
#define msg(aRGS...) LOG_D(PHY, ##aRGS)
|
||||
#else
|
||||
#define msg printf
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -51,16 +51,12 @@
|
||||
#ifdef MEX
|
||||
#define msg mexPrintf
|
||||
#else
|
||||
#ifdef OPENAIR2
|
||||
#if ENABLE_RAL
|
||||
#include "common/utils/hashtable/hashtable.h"
|
||||
#include "COMMON/ral_messages_types.h"
|
||||
#include "UTIL/queue.h"
|
||||
#endif
|
||||
#define msg(aRGS...) LOG_D(PHY, ##aRGS)
|
||||
#else
|
||||
#define msg printf
|
||||
#endif
|
||||
#endif
|
||||
//use msg in the real-time thread context
|
||||
#define msg_nrt printf
|
||||
|
||||
@@ -55,12 +55,6 @@ extern char mode_string[4][20];
|
||||
extern unsigned char NB_RU;
|
||||
|
||||
|
||||
#ifndef OPENAIR2
|
||||
extern unsigned char NB_eNB_INST;
|
||||
extern uint16_t NB_UE_INST;
|
||||
extern unsigned char NB_RN_INST;
|
||||
#endif
|
||||
|
||||
extern int flag_LA;
|
||||
extern double sinr_bler_map[MCS_COUNT][2][MCS_TABLE_LENGTH_MAX];
|
||||
extern double sinr_bler_map_up[MCS_COUNT][2][16];
|
||||
|
||||
@@ -63,12 +63,6 @@ extern char mode_string[4][20];
|
||||
|
||||
extern unsigned char NB_RU;
|
||||
|
||||
#ifndef OPENAIR2
|
||||
extern unsigned char NB_eNB_INST;
|
||||
extern uint16_t NB_UE_INST;
|
||||
extern unsigned char NB_RN_INST;
|
||||
#endif
|
||||
|
||||
extern int flag_LA;
|
||||
extern double sinr_bler_map[MCS_COUNT][2][MCS_TABLE_LENGTH_MAX];
|
||||
extern double sinr_bler_map_up[MCS_COUNT][2][16];
|
||||
|
||||
@@ -53,12 +53,6 @@ extern int flagMag;
|
||||
extern char mode_string[4][20];
|
||||
|
||||
|
||||
#ifndef OPENAIR2
|
||||
extern unsigned char NB_eNB_INST;
|
||||
extern uint16_t NB_UE_INST;
|
||||
extern unsigned char NB_RN_INST;
|
||||
#endif
|
||||
|
||||
extern int flag_LA;
|
||||
extern double sinr_bler_map[MCS_COUNT][2][MCS_TABLE_LENGTH_MAX];
|
||||
extern double sinr_bler_map_up[MCS_COUNT][2][16];
|
||||
|
||||
@@ -55,13 +55,6 @@ const short conjugate2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
|
||||
|
||||
unsigned char NB_RU=0;
|
||||
|
||||
#ifndef OPENAIR2
|
||||
//unsigned char NB_eNB_INST=0;
|
||||
//uint16_t NB_UE_INST=0;
|
||||
//unsigned char NB_RN_INST=0;
|
||||
//unsigned char NB_INST=0;
|
||||
#endif
|
||||
|
||||
int number_of_cards;
|
||||
|
||||
|
||||
|
||||
@@ -57,13 +57,6 @@ const short conjugate2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
|
||||
|
||||
unsigned char NB_RU=0;
|
||||
|
||||
#ifndef OPENAIR2
|
||||
unsigned char NB_eNB_INST=0;
|
||||
uint16_t NB_UE_INST=0;
|
||||
unsigned char NB_RN_INST=0;
|
||||
unsigned char NB_INST=0;
|
||||
#endif
|
||||
|
||||
|
||||
int number_of_cards;
|
||||
|
||||
|
||||
@@ -47,14 +47,6 @@ const short conjugate2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
|
||||
#include "SIMULATION/ETH_TRANSPORT/vars.h"
|
||||
|
||||
|
||||
#ifndef OPENAIR2
|
||||
unsigned char NB_eNB_INST=0;
|
||||
uint16_t NB_UE_INST=0;
|
||||
unsigned char NB_RN_INST=0;
|
||||
unsigned char NB_INST=0;
|
||||
#endif
|
||||
|
||||
|
||||
int number_of_cards;
|
||||
|
||||
|
||||
|
||||
@@ -22,11 +22,6 @@
|
||||
#ifndef __openair_TYPES_NB_IOT_H__
|
||||
#define __openair_TYPES_NB_IOT_H__
|
||||
|
||||
#ifdef USER_MODE
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#include <linux/types.h>
|
||||
#endif
|
||||
|
||||
|
||||
#endif /*__openair_TYPES_NB_IOT_H__ */
|
||||
|
||||
@@ -44,4 +44,4 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response);
|
||||
int8_t nr_ue_phy_config_request(nr_phy_config_t *phy_config);
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#include<stdio.h>
|
||||
#include<string.h>
|
||||
#include<gpib/ib.h>
|
||||
#include"gpib_send.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <gpib/ib.h>
|
||||
#include "gpib_send.h"
|
||||
void gpib_send(unsigned int gpib_board, unsigned int gpib_device, char *command_string )
|
||||
{
|
||||
unsigned short addlist[2] = {gpib_device, NOADDR};
|
||||
|
||||
@@ -22,9 +22,7 @@
|
||||
#ifndef __MAC_RRC_PRIMITIVES_H__
|
||||
#define __MAC_RRC_PRIMITIVES_H__
|
||||
|
||||
#ifndef OPENAIR2_IN
|
||||
#include "LAYER2/RLC/rlc.h"
|
||||
#endif
|
||||
#include "LAYER2/RLC/rlc.h"
|
||||
#include "COMMON/platform_types.h"
|
||||
#include "COMMON/platform_constants.h"
|
||||
#include "openair2/RRC/LTE/rrc_defs.h"
|
||||
@@ -306,8 +304,6 @@ typedef struct {
|
||||
|
||||
|
||||
|
||||
#ifndef OPENAIR2_IN
|
||||
|
||||
typedef struct { //RRC_INTERFACE_FUNCTIONS
|
||||
unsigned int Frame_index;
|
||||
unsigned short UE_index[NB_MODULES_MAX][NB_SIG_CNX_UE];
|
||||
@@ -375,10 +371,6 @@ typedef struct {
|
||||
} MAC_RLC_XFACE;
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//#define IDLE 0
|
||||
#define NEED_RADIO_CONFIG 3
|
||||
#define RADIO_CONFIG_TX 2
|
||||
|
||||
@@ -1,195 +0,0 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*
|
||||
rrm_config_structs.h
|
||||
-------------------
|
||||
AUTHOR : Linus GASSER modified by Lionel GAUTHIER Raymond KNOPP
|
||||
COMPANY : EURECOM
|
||||
EMAIL : linus.gasser@epfl.ch
|
||||
EMAIL : lionel.gauthier@eurecom.fr
|
||||
EMAIL : raymond.knopp@eurecom.fr
|
||||
|
||||
|
||||
|
||||
***************************************************************************/
|
||||
#ifdef OLD_RRC_CELLULAR
|
||||
# ifndef __RRM_CONFIG_STRUCTS_H__
|
||||
# define __RRM_CONFIG_STRUCTS_H__
|
||||
|
||||
# include "platform_types.h"
|
||||
# include "platform_constants.h"
|
||||
# include "rrm_constants.h"
|
||||
# include "rlc.h"
|
||||
|
||||
typedef volatile struct {
|
||||
uint32_t e_r;
|
||||
int timer_poll;
|
||||
int timer_poll_prohibit;
|
||||
int timer_discard;
|
||||
int timer_poll_periodic;
|
||||
int timer_status_prohibit;
|
||||
int timer_status_periodic;
|
||||
int timer_rst;
|
||||
int timer_mrw;
|
||||
int missing_pdu_indicator;
|
||||
uint32_t pdu_size;
|
||||
// int in_sequence_delivery; // not implemented
|
||||
uint8_t max_rst;
|
||||
uint8_t max_dat;
|
||||
uint16_t poll_pdu;
|
||||
uint16_t poll_sdu;
|
||||
uint8_t poll_window;
|
||||
uint32_t tx_window_size;
|
||||
uint32_t rx_window_size;
|
||||
uint8_t max_mrw;
|
||||
uint8_t last_transmission_pdu_poll_trigger;
|
||||
uint8_t last_retransmission_pdu_poll_trigger;
|
||||
enum RLC_SDU_DISCARD_MODE sdu_discard_mode;
|
||||
uint32_t send_mrw;
|
||||
} AM;
|
||||
|
||||
typedef volatile struct {
|
||||
uint32_t e_r;
|
||||
uint32_t timer_discard;
|
||||
uint32_t sdu_discard_mode;
|
||||
uint32_t segmentation_indication;
|
||||
uint32_t delivery_of_erroneous_sdu;
|
||||
} TM;
|
||||
|
||||
typedef volatile struct {
|
||||
uint32_t e_r;
|
||||
uint32_t timer_discard;
|
||||
uint32_t sdu_discard_mode;
|
||||
} UM;
|
||||
|
||||
typedef volatile struct {
|
||||
uint8_t logch_identity;
|
||||
uint8_t mac_logch_priority;
|
||||
} MAP_INFO;
|
||||
|
||||
typedef volatile struct {
|
||||
uint32_t rlc_mode;
|
||||
AM am;
|
||||
TM tm;
|
||||
UM um;
|
||||
} RLC_INFO;
|
||||
|
||||
typedef volatile struct {
|
||||
int header_compression_algorithm;
|
||||
} PDCP_INFO;
|
||||
|
||||
|
||||
|
||||
|
||||
typedef volatile struct {
|
||||
rb_type_t rb_type;
|
||||
RLC_INFO rlc_info;
|
||||
PDCP_INFO pdcp_info;
|
||||
uint16_t rb_id;
|
||||
// Added for OPENAIR MAC
|
||||
//LCHAN_DESC Lchan_desc;
|
||||
|
||||
} RADIOBEARER;
|
||||
|
||||
|
||||
typedef volatile struct {
|
||||
int TIMER300;
|
||||
int TIMER302;
|
||||
int TIMER305;
|
||||
int TIMER307;
|
||||
int TIMER308;
|
||||
int TIMER312;
|
||||
int TIMER313;
|
||||
int TIMER314;
|
||||
int TIMER315;
|
||||
} L3TIMERS_;
|
||||
|
||||
typedef volatile struct {
|
||||
int COUNTERN300;
|
||||
int COUNTERN302;
|
||||
int COUNTERN308;
|
||||
int COUNTERN312;
|
||||
int COUNTERN313;
|
||||
} L3COUNTERS_;
|
||||
|
||||
|
||||
typedef volatile struct {
|
||||
int MaxNumRemote;
|
||||
L3TIMERS_ Timers;
|
||||
L3COUNTERS_ Counters;
|
||||
} L3_;
|
||||
|
||||
|
||||
typedef volatile struct {
|
||||
uint8_t rrm_action; // ACTION_NULL,ADD,REMOVE,MODIFY
|
||||
uint8_t rrm_element; // rb,trch,cctrch
|
||||
uint8_t rrm_element_index; // rb/trch/cctrch index
|
||||
} RRM_COMMAND_MT;
|
||||
|
||||
typedef volatile struct {
|
||||
uint8_t rrm_action; // ACTION_NULL,ADD,REMOVE,MODIFY
|
||||
uint8_t mobile;
|
||||
uint8_t rrm_element; // rb,trch,cctrch
|
||||
uint8_t rrm_element_index; // rb/trch/cctrch index
|
||||
} RRM_COMMAND_RG;
|
||||
|
||||
|
||||
typedef volatile struct {
|
||||
uint8_t nb_commands;
|
||||
RRM_COMMAND_RG rrm_commands[JRRM_MAX_COMMANDS_PER_TRANSACTION];
|
||||
|
||||
|
||||
RADIOBEARER bearer[MAX_RB_RG];
|
||||
L3_ L3;
|
||||
|
||||
} RG_CONFIG;
|
||||
|
||||
typedef volatile struct {
|
||||
uint8_t nb_commands;
|
||||
RRM_COMMAND_MT rrm_commands[JRRM_MAX_COMMANDS_PER_TRANSACTION];
|
||||
|
||||
RADIOBEARER bearer[MAX_RB_MOBILE];
|
||||
L3_ L3;
|
||||
|
||||
} MT_CONFIG;
|
||||
|
||||
# ifdef NODE_RG
|
||||
typedef volatile struct {
|
||||
RG_CONFIG rg_config;
|
||||
MT_CONFIG mt_config[MAX_MOBILES_PER_RG];
|
||||
} RRM_VARS;
|
||||
|
||||
# else
|
||||
/* NODE_RG */
|
||||
typedef volatile struct {
|
||||
MT_CONFIG mt_config[MAX_MANAGED_RG_PER_MOBILE];
|
||||
|
||||
|
||||
|
||||
} RRM_VARS;
|
||||
# endif
|
||||
/* NODE_RG */
|
||||
//typedef MT_CONFIG MAIN_MOBILE ;
|
||||
//typedef RG_CONFIG MAIN_RADIO_GATEWAY;
|
||||
|
||||
# endif
|
||||
#endif
|
||||
@@ -42,10 +42,7 @@
|
||||
#include "ngap_messages_types.h"
|
||||
#include "f1ap_messages_types.h"
|
||||
|
||||
#ifdef CMAKER
|
||||
#include "rrc_messages_types.h"
|
||||
#endif
|
||||
|
||||
#include "intertask_interface.h"
|
||||
#include "RRC/NR/nr_rrc_defs.h"
|
||||
|
||||
|
||||
@@ -9,11 +9,9 @@
|
||||
*/
|
||||
#ifndef __LAYER2_MAC_DEFS_NB_IOT_H__
|
||||
#define __LAYER2_MAC_DEFS_NB_IOT_H__
|
||||
#ifdef USER_MODE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
//#include "COMMON/openair_defs.h"
|
||||
#include "COMMON/platform_constants.h"
|
||||
#include "COMMON/mac_rrc_primitives.h"
|
||||
|
||||
@@ -105,13 +105,11 @@ eNB_ULSCH_INFO eNB_ulsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][MAX_MOBILES_PER_EN
|
||||
eNB_DLSCH_INFO eNB_dlsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][MAX_MOBILES_PER_ENB]; // eNBxUE = 8x8
|
||||
|
||||
|
||||
#ifdef OPENAIR2
|
||||
unsigned char NB_eNB_INST = 0;
|
||||
uint16_t NB_UE_INST = 0;
|
||||
uint16_t NB_THREAD_INST = 0;
|
||||
unsigned char NB_RN_INST = 0;
|
||||
unsigned char NB_INST = 0;
|
||||
#endif
|
||||
|
||||
|
||||
DCI0_5MHz_TDD_1_6_t UL_alloc_pdu;
|
||||
|
||||
@@ -77,13 +77,6 @@ static int mbms_mch_i=0;
|
||||
//static int num_msi_per_CSA[28];
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
#ifndef USER_MODE
|
||||
#define msg debug_msg
|
||||
#endif
|
||||
*/
|
||||
|
||||
mapping BSR_names[] = {
|
||||
{"NONE", 0},
|
||||
{"SHORT BSR", 1},
|
||||
@@ -1251,65 +1244,6 @@ int ue_query_mch_fembms(module_id_t module_idP, uint8_t CC_id, uint32_t frameP,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef OLD
|
||||
// Acount for sf_allocable in CSA
|
||||
int num_sf_alloc = 0;
|
||||
|
||||
for (l = 0; l < 8; l++) {
|
||||
if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[l] == NULL)
|
||||
continue;
|
||||
|
||||
if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[l]->subframeAllocation.present != LTE_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame)
|
||||
continue;
|
||||
|
||||
uint32_t common_mbsfn_SubframeConfig = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[l]->subframeAllocation.choice.oneFrame.buf[0];
|
||||
|
||||
|
||||
for (j = 0; j < 6; j++)
|
||||
num_sf_alloc += ((common_mbsfn_SubframeConfig & (0x80 >> j)) == (0x80 >> j));
|
||||
//num_sf_alloc=1;
|
||||
}
|
||||
|
||||
num_sf_alloc = 10;
|
||||
|
||||
num_non_mbsfn_SubframeConfig = (UE_mac_inst[module_idP].non_mbsfn_SubframeConfig->subframeAllocation_r14.buf[0]<<1 | UE_mac_inst[module_idP].non_mbsfn_SubframeConfig->subframeAllocation_r14.buf[0]>>7);
|
||||
int ones=0;
|
||||
for(j=0; j < 16; j++){
|
||||
if(num_non_mbsfn_SubframeConfig & 1)
|
||||
ones++;
|
||||
num_non_mbsfn_SubframeConfig>>=1;
|
||||
}
|
||||
|
||||
for (l = 0; l < 28; l++) {
|
||||
if (UE_mac_inst[module_idP].pmch_stop_mtch[l] >= 1/*num_sf_alloc*/) {
|
||||
if (UE_mac_inst[module_idP].pmch_stop_mtch[l] != 2047) {
|
||||
if (UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch] != NULL){
|
||||
mtch_mcs = UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch]->dataMCS_r9;
|
||||
//int common_mbsfn_alloc_offset = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]->radioframeAllocationOffset;
|
||||
long common_mbsfn_period = 1 << UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]->radioframeAllocationPeriod;
|
||||
long commonSF_AllocPeriod = 4 << UE_mac_inst[module_idP].commonSF_AllocPeriod_r9;
|
||||
if(UE_mac_inst[module_idP].common_num_sf_alloc >= UE_mac_inst[module_idP].pmch_stop_mtch[l]){
|
||||
//LOG_E(MAC,"Attemp to UE_mac_inst[module_idP].common_num_sf_alloc %d\n",UE_mac_inst[module_idP].common_num_sf_alloc);
|
||||
|
||||
mtch_mcs = -1;
|
||||
}/*else
|
||||
OG_W(MAC,"Attemp to UE_mac_inst[module_idP].common_num_sf_alloc %d\n",UE_mac_inst[module_idP].common_num_sf_alloc);*/
|
||||
LOG_D(MAC,"Attemp to UE_mac_inst[module_idP].common_num_sf_alloc %d num_sf_alloc %d commonSF_AllocPeriod %ld, common_mbsfn_period %ld num_non_mbsfn_SubframeConfig %x ones %d\n",UE_mac_inst[module_idP].common_num_sf_alloc,num_sf_alloc, commonSF_AllocPeriod,common_mbsfn_period,num_non_mbsfn_SubframeConfig,ones);
|
||||
UE_mac_inst[module_idP].common_num_sf_alloc++;
|
||||
UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period-(1+ones)*(commonSF_AllocPeriod/4)); //TODO
|
||||
}
|
||||
else
|
||||
mtch_mcs = -1;
|
||||
|
||||
mch_lcid = (uint8_t)l;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
{
|
||||
// Acount for sf_allocable in Common SF Allocation
|
||||
int num_sf_alloc = 0;
|
||||
@@ -1869,49 +1803,7 @@ int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_
|
||||
//}
|
||||
}
|
||||
|
||||
#ifdef OLD
|
||||
// Acount for sf_allocable in CSA
|
||||
int num_sf_alloc = 0;
|
||||
|
||||
for (l = 0; l < 8; l++) {
|
||||
if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[l] == NULL)
|
||||
continue;
|
||||
|
||||
if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[l]->subframeAllocation.present != LTE_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame)
|
||||
continue;
|
||||
|
||||
uint32_t common_mbsfn_SubframeConfig = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[l]->subframeAllocation.choice.oneFrame.buf[0];
|
||||
|
||||
for (j = 0; j < 6; j++)
|
||||
num_sf_alloc += ((common_mbsfn_SubframeConfig & (0x80 >> j)) == (0x80 >> j));
|
||||
//num_sf_alloc=1;
|
||||
}
|
||||
|
||||
for (l = 0; l < 28; l++) {
|
||||
if (UE_mac_inst[module_idP].pmch_stop_mtch[l] >= 1/*num_sf_alloc*/) {
|
||||
if (UE_mac_inst[module_idP].pmch_stop_mtch[l] != 2047) {
|
||||
if (UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch] != NULL){
|
||||
mtch_mcs = UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch]->dataMCS_r9;
|
||||
long common_mbsfn_period = 1 << UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]->radioframeAllocationPeriod;
|
||||
long commonSF_AllocPeriod = 4 << UE_mac_inst[module_idP].commonSF_AllocPeriod_r9;
|
||||
if(UE_mac_inst[module_idP].common_num_sf_alloc >= UE_mac_inst[module_idP].pmch_stop_mtch[l]){
|
||||
//LOG_E(MAC,"Attemp to UE_mac_inst[module_idP].common_num_sf_alloc %d\n",UE_mac_inst[module_idP].common_num_sf_alloc);
|
||||
|
||||
mtch_mcs = -1;
|
||||
}/*else
|
||||
LOG_W(MAC,"Attemp to UE_mac_inst[module_idP].common_num_sf_alloc %d\n",UE_mac_inst[module_idP].common_num_sf_alloc);*/
|
||||
UE_mac_inst[module_idP].common_num_sf_alloc++;
|
||||
UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);
|
||||
}
|
||||
else
|
||||
mtch_mcs = -1;
|
||||
|
||||
mch_lcid = (uint8_t)l;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
{
|
||||
// Acount for sf_allocable in Common SF Allocation
|
||||
|
||||
@@ -67,9 +67,7 @@ typedef struct {
|
||||
} pdcp_params_t;
|
||||
|
||||
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
#define PDCP_USE_NETLINK ( get_pdcp_optmask() & PDCP_USE_NETLINK_BIT)
|
||||
#endif
|
||||
#define PDCP_USE_NETLINK ( get_pdcp_optmask() & PDCP_USE_NETLINK_BIT)
|
||||
#define LINK_ENB_PDCP_TO_IP_DRIVER ( get_pdcp_optmask() & LINK_ENB_PDCP_TO_IP_DRIVER_BIT)
|
||||
#define LINK_ENB_PDCP_TO_GTPV1U ( get_pdcp_optmask() & LINK_ENB_PDCP_TO_GTPV1U_BIT)
|
||||
#define UE_NAS_USE_TUN ( get_pdcp_optmask() & UE_NAS_USE_TUN_BIT)
|
||||
@@ -501,7 +499,6 @@ typedef struct {
|
||||
#define REORDERING_WINDOW_SN_7BIT 64
|
||||
#define REORDERING_WINDOW_SN_12BIT 2048
|
||||
|
||||
extern signed int pdcp_2_nas_irq;
|
||||
extern pdcp_stats_t UE_pdcp_stats[MAX_MOBILES_PER_ENB];
|
||||
extern pdcp_stats_t eNB_pdcp_stats[NUMBER_OF_eNB_MAX];
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
# include "rlc_tm_entity.h"
|
||||
# include "mem_block.h"
|
||||
//# include "rrm_config_structs.h"
|
||||
# include "rlc_tm_structs.h"
|
||||
//# include "rlc.h"
|
||||
# include "platform_types.h"
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
#include "rlc_um.h"
|
||||
#include "rlc_primitives.h"
|
||||
#include "list.h"
|
||||
#include "rrm_config_structs.h"
|
||||
#include "LAYER2/MAC/mac_extern.h"
|
||||
#include "common/utils/LOG/log.h"
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
# include "rlc_um_entity.h"
|
||||
# include "mem_block.h"
|
||||
# include "rrm_config_structs.h"
|
||||
# include "rlc_um_structs.h"
|
||||
# include "rlc_um_constants.h"
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -362,264 +362,5 @@ int dump_eNB_l2_stats(char *buffer, int length) {
|
||||
|
||||
return len + 1 /* SR: for trailing \0 */;
|
||||
}
|
||||
#ifdef PROC
|
||||
int openair2_stats_read(char *buffer, char **my_buffer, off_t off, int length) {
|
||||
int len = 0,fg,Overhead, Sign;
|
||||
unsigned int i,j,k,kk;
|
||||
unsigned int Mod_id = 0,CH_index;
|
||||
unsigned int tx_pdcp_sdu;
|
||||
unsigned int tx_pdcp_sdu_discarded;
|
||||
unsigned int tx_retransmit_pdu_unblock;
|
||||
unsigned int tx_retransmit_pdu_by_status;
|
||||
unsigned int tx_retransmit_pdu;
|
||||
unsigned int tx_data_pdu;
|
||||
unsigned int tx_control_pdu;
|
||||
unsigned int rx_sdu;
|
||||
unsigned int rx_error_pdu;
|
||||
unsigned int rx_data_pdu;
|
||||
unsigned int rx_data_pdu_out_of_window;
|
||||
unsigned int rx_control_pdu;
|
||||
|
||||
// if (mac_xface->is_cluster_head == 0) {
|
||||
for (k=0; k<NB_INST; k++) {
|
||||
if (Mac_rlc_xface->Is_cluster_head[k] == 0) {
|
||||
#ifndef PHY_EMUL_ONE_MACHINE
|
||||
Mod_id=k-NB_CH_INST;
|
||||
len+=sprintf(&buffer[len],"UE TTI: %d\n",Mac_rlc_xface->frame);
|
||||
|
||||
for (CH_index = 0; CH_index<NB_CNX_UE; CH_index++) {
|
||||
if (UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Active==1) {
|
||||
len+=sprintf(&buffer[len],"CH %u: Wideband SINR %d dB---\n",
|
||||
CH_index,UE_mac_inst[Mod_id].Def_meas[CH_index].Wideband_sinr);
|
||||
len+=sprintf(&buffer[len],"CH %u: Subband SINR (dB) :",
|
||||
CH_index);
|
||||
|
||||
for (fg=0; fg<NUMBER_OF_MEASUREMENT_SUBBANDS; fg++) {
|
||||
len+=sprintf(&buffer[len],"%d ",UE_mac_inst[Mod_id].Def_meas[CH_index].Sinr_meas[0][fg]);
|
||||
}
|
||||
|
||||
len+=sprintf(&buffer[len],"\n");
|
||||
len+=sprintf(&buffer[len],"BCCH %d, NB_RX_MAC = %d (%d errors)\n",
|
||||
UE_mac_inst[Mod_id].Bcch_lchan[CH_index].Lchan_info.Lchan_id.Index,
|
||||
UE_mac_inst[Mod_id].Bcch_lchan[CH_index].Lchan_info.NB_RX,
|
||||
UE_mac_inst[Mod_id].Bcch_lchan[CH_index].Lchan_info.NB_RX_ERRORS);
|
||||
len+=sprintf(&buffer[len],"CCCH %d, NB_RX_MAC = %d (%d errors)\n",
|
||||
UE_mac_inst[Mod_id].Ccch_lchan[CH_index].Lchan_info.Lchan_id.Index,
|
||||
UE_mac_inst[Mod_id].Ccch_lchan[CH_index].Lchan_info.NB_RX,
|
||||
UE_mac_inst[Mod_id].Ccch_lchan[CH_index].Lchan_info.NB_RX_ERRORS);
|
||||
len+=sprintf(&buffer[len],"LCHAN %d (DCCH), NB_TX_MAC = %d (%d bits/TTI, %d kbits/sec), NB_RX_MAC = %d (%d errors)\n",
|
||||
UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.Lchan_id.Index,
|
||||
UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_TX,
|
||||
UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.output_rate,
|
||||
(10*UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.output_rate)>>5,
|
||||
UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_RX,
|
||||
UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_RX_ERRORS);
|
||||
|
||||
for(i=1; i<NB_RAB_MAX; i++) {
|
||||
if (UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Active==1) {
|
||||
Overhead=UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate - Pdcp_stats_tx_rate[k][CH_index][i];
|
||||
|
||||
if(Overhead<0) {
|
||||
Overhead=-Overhead;
|
||||
Sign=-1;
|
||||
} else {
|
||||
Sign=1;
|
||||
}
|
||||
|
||||
len+=sprintf(&buffer[len],
|
||||
"[PDCP]LCHAN %d: NB_TX = %d ,Tx_rate =(%d bits/TTI ,%d Kbits/s), NB_RX = %d ,Rx_rate =(%d bits/TTI ,%d Kbits/s) , LAYER2 TX OVERHEAD: %d Kbits/s\n",
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index,
|
||||
Pdcp_stats_tx[k][CH_index][i],
|
||||
Pdcp_stats_tx_rate[k][CH_index][i],
|
||||
(10*Pdcp_stats_tx_rate[k][CH_index][i])>>5,
|
||||
Pdcp_stats_rx[k][CH_index][i],
|
||||
Pdcp_stats_rx_rate[k][CH_index][i],
|
||||
(10*Pdcp_stats_rx_rate[k][CH_index][i])>>5,
|
||||
Sign*(10*Overhead)>>5);
|
||||
int status = rlc_stat_req (k,
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index,
|
||||
&tx_pdcp_sdu,
|
||||
&tx_pdcp_sdu_discarded,
|
||||
&tx_retransmit_pdu_unblock,
|
||||
&tx_retransmit_pdu_by_status,
|
||||
&tx_retransmit_pdu,
|
||||
&tx_data_pdu,
|
||||
&tx_control_pdu,
|
||||
&rx_sdu,
|
||||
&rx_error_pdu,
|
||||
&rx_data_pdu,
|
||||
&rx_data_pdu_out_of_window,
|
||||
&rx_control_pdu) ;
|
||||
|
||||
if (status == RLC_OP_STATUS_OK) {
|
||||
len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_SDU_TO_TX = %u\tNB_SDU_DISC %u\tNB_RX_SDU %u\n",
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index,
|
||||
tx_pdcp_sdu,
|
||||
tx_pdcp_sdu_discarded,
|
||||
rx_sdu);
|
||||
len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_TB_TX_DATA = %u\tNB_TB_TX_CONTROL %u\tNB_TX_TB_RETRANS %u",
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index,
|
||||
tx_data_pdu,
|
||||
tx_control_pdu,
|
||||
tx_retransmit_pdu);
|
||||
len+=sprintf(&buffer[len],"\tRLC LCHAN %d, NB_TX_TB_RETRANS_BY_STATUS = %u\tNB_TX_TB_RETRANS_PADD %u\n",
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index,
|
||||
tx_retransmit_pdu_by_status,
|
||||
tx_retransmit_pdu_unblock);
|
||||
len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_RX_DATA = %u\tNB_RX_TB_OUT_WIN %u\tNB_RX_TB_CORRUPT %u\n",
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index,
|
||||
rx_data_pdu,
|
||||
rx_data_pdu_out_of_window,
|
||||
rx_error_pdu);
|
||||
}
|
||||
|
||||
len+=sprintf(&buffer[len],"[MAC]: LCHAN %d, NB_TX_MAC = %d (%d bits/TTI, %d kbits/s), NB_RX_MAC = %d (%d errors)\n",
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index,
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_TX,
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate,
|
||||
(10*UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate)>>5,
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX,
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX_ERRORS);
|
||||
len+=sprintf(&buffer[len]," TX per TB: ");
|
||||
|
||||
for(kk=0; kk<MAX_NUMBER_TB_PER_LCHAN/2; kk++) {
|
||||
len+=sprintf(&buffer[len],"%d . ",UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_TX_TB[kk]);
|
||||
}
|
||||
|
||||
len+=sprintf(&buffer[len],"\n");
|
||||
len+=sprintf(&buffer[len]," RXerr per TB: ");
|
||||
|
||||
for(kk=0; kk<MAX_NUMBER_TB_PER_LCHAN/2; kk++)
|
||||
len+=sprintf(&buffer[len],"%d/%d . ",UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX_ERRORS_TB[kk],
|
||||
UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX_TB[kk]);
|
||||
|
||||
len+=sprintf(&buffer[len],"\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif //PHY_EMUL_ONE_MACHINE
|
||||
} else if(Mac_rlc_xface->Is_cluster_head[k] ==1) {
|
||||
Mod_id=k;
|
||||
len+=sprintf(&buffer[len],
|
||||
"------------------------------------------------------------------- TTI: %d------------------------------------------------------------------\n",
|
||||
Mac_rlc_xface->frame);
|
||||
|
||||
for(i=1; i<=NB_CNX_CH; i++) {
|
||||
if (CH_mac_inst[Mod_id].Dcch_lchan[i].Active==1) {
|
||||
len+=sprintf(&buffer[len],"\nMR index %u: DL SINR (feedback) %d dB, CQI: %s\n\n",
|
||||
i,//CH_rrc_inst[Mod_id].Info.UE_info[i].L2_id[0],
|
||||
CH_mac_inst[Mod_id].Def_meas[i].Wideband_sinr,
|
||||
print_cqi(CH_mac_inst[Mod_id].Def_meas[i].cqi));
|
||||
len+=sprintf(&buffer[len],
|
||||
"[MAC] LCHAN %d (DCCH), NB_TX_MAC= %d (%d bits/TTI, %d kbits/s), NB_RX_MAC= %d (errors %d, sacch errors %d, sach errors %d, sach_missing %d)\n\n",
|
||||
CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.Lchan_id.Index,
|
||||
CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_TX,
|
||||
CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.output_rate,
|
||||
(10*CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.output_rate)>>5,
|
||||
CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_RX,
|
||||
CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_RX_ERRORS,
|
||||
CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_RX_SACCH_ERRORS,
|
||||
CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_RX_SACH_ERRORS,
|
||||
CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_RX_SACH_MISSING);
|
||||
|
||||
for(j=0; j<NB_RAB_MAX; j++) {
|
||||
if (CH_mac_inst[Mod_id].Dtch_lchan[j][i].Active==1) {
|
||||
Overhead=CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.output_rate - Pdcp_stats_tx_rate[k][i][j];
|
||||
|
||||
if(Overhead<0) {
|
||||
Overhead=-Overhead;
|
||||
Sign=-1;
|
||||
} else {
|
||||
Sign=1;
|
||||
}
|
||||
|
||||
len+=sprintf(&buffer[len],
|
||||
"[PDCP]LCHAN %d: NB_TX = %d ,Tx_rate =(%d bits/TTI ,%d Kbits/s), NB_RX = %d ,Rx_rate =(%d bits/TTI ,%d Kbits/s), LAYER2 TX OVERHEAD= %d Kbits/s\n",
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index,
|
||||
Pdcp_stats_tx[k][i][j],
|
||||
Pdcp_stats_tx_rate[k][i][j],
|
||||
(10*Pdcp_stats_tx_rate[k][i][j])>>5,
|
||||
Pdcp_stats_rx[k][i][j],
|
||||
Pdcp_stats_rx_rate[k][i][j],
|
||||
(10*Pdcp_stats_rx_rate[k][i][j])>>5,
|
||||
Sign*(10*Overhead)>>5);
|
||||
int status = rlc_stat_req (k,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index,
|
||||
&tx_pdcp_sdu,
|
||||
&tx_pdcp_sdu_discarded,
|
||||
&tx_retransmit_pdu_unblock,
|
||||
&tx_retransmit_pdu_by_status,
|
||||
&tx_retransmit_pdu,
|
||||
&tx_data_pdu,
|
||||
&tx_control_pdu,
|
||||
&rx_sdu,
|
||||
&rx_error_pdu,
|
||||
&rx_data_pdu,
|
||||
&rx_data_pdu_out_of_window,
|
||||
&rx_control_pdu) ;
|
||||
/*
|
||||
if (status == RLC_OP_STATUS_OK) {
|
||||
len+=sprintf(&buffer[len],"\t[RLC] LCHAN %d, NB_SDU_TO_TX = %d\tNB_SDU_DISC %d\tNB_RX_SDU %d\n",
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index,
|
||||
tx_pdcp_sdu,
|
||||
tx_pdcp_sdu_discarded,
|
||||
rx_sdu);
|
||||
len+=sprintf(&buffer[len],"\t[RLC] LCHAN %d, NB_TB_TX_DATA = %d\tNB_TB_TX_CONTROL %d\tNB_TX_TB_RETRANS %\n",
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index,
|
||||
tx_data_pdu,
|
||||
tx_control_pdu,
|
||||
tx_retransmit_pdu);
|
||||
len+=sprintf(&buffer[len],"\t[RLC] LCHAN %d, NB_TX_TB_RETRANS_BY_STATUS = %d\tNB_TX_TB_RETRANS_PADD %d\n",
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index,
|
||||
tx_retransmit_pdu_by_status,
|
||||
tx_retransmit_pdu_unblock);
|
||||
len+=sprintf(&buffer[len],"\t[RLC] LCHAN %d, NB_RX_DATA = %d\tNB_RX_TB_OUT_WIN %d\tNB_RX_TB_CORRUPT %d\n",
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index,
|
||||
rx_data_pdu,
|
||||
rx_data_pdu_out_of_window,
|
||||
rx_error_pdu);
|
||||
}
|
||||
*/
|
||||
len+=sprintf(&buffer[len],
|
||||
"[MAC]LCHAN %d (CNX %u,RAB %u), NB_TX_MAC= %d (%d bits/TTI, %d kbit/s), NB_RX_MAC= %d (errors %d, sacch_errors %d, sach_errors %d, sach_missing %d)\n",
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index,
|
||||
i,j,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_TX,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.output_rate,
|
||||
(10*CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.output_rate)>>5,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX_ERRORS,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX_SACCH_ERRORS,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX_SACH_ERRORS,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX_SACH_MISSING);
|
||||
len+=sprintf(&buffer[len],"[MAC][SCHEDULER] TX Arrival Rate %d, TX Service Rate %d, RX Arrival rate %d, RX Service rate %d, NB_BW_REQ_RX %d\n\n",
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Arrival_rate,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Tx_rate,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Req_rate,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Rx_rate,
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_BW_REQ_RX);
|
||||
/*
|
||||
len+=sprintf(&buffer[len]," TX per TB: ");
|
||||
for(kk=0;kk<MAX_NUMBER_TB_PER_LCHAN/2;kk++)
|
||||
len+=sprintf(&buffer[len],"%d.",CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_TX_TB[kk]);
|
||||
len+=sprintf(&buffer[len],"\n");
|
||||
len+=sprintf(&buffer[len]," RXerr per TB: ");
|
||||
for(kk=0;kk<MAX_NUMBER_TB_PER_LCHAN/2;kk++)
|
||||
len+=sprintf(&buffer[len],"%d/%d . ",CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX_ERRORS_TB[kk],
|
||||
CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX_TB[kk]);
|
||||
len+=sprintf(&buffer[len],"\n");
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -389,36 +389,19 @@ void nas_COMMON_QOS_send(struct sk_buff *skb, struct cx_entity *cx, struct class
|
||||
pdcph.sourceL2Id = 0;
|
||||
pdcph.destinationL2Id = 0;
|
||||
|
||||
|
||||
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
bytes_wrote = nas_netlink_send((char *)&pdcph,NAS_PDCPH_SIZE);
|
||||
#ifdef NAS_DEBUG_SEND
|
||||
printk("[NAS] Wrote %d bytes (header for %d byte skb) to PDCP via netlink\n",
|
||||
bytes_wrote,skb->len);
|
||||
#endif
|
||||
#else
|
||||
bytes_wrote = rtf_put(NAS2PDCP_FIFO, &pdcph, NAS_PDCPH_SIZE);
|
||||
#ifdef NAS_DEBUG_SEND
|
||||
printk("[NAS] Wrote %d bytes (header for %d byte skb) to PDCP fifo\n",
|
||||
bytes_wrote,skb->len);
|
||||
#endif
|
||||
#endif //PDCP_USE_NETLINK
|
||||
|
||||
if (bytes_wrote != NAS_PDCPH_SIZE) {
|
||||
printk("NAS_COMMON_QOS_SEND: problem while writing PDCP's header (bytes wrote = %d )\n",bytes_wrote);
|
||||
printk("rb_id %ld, Wrote %d, Header Size %lu\n", pdcph.rb_id , bytes_wrote, NAS_PDCPH_SIZE);
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
rtf_reset(NAS2PDCP_FIFO);
|
||||
#endif //PDCP_USE_NETLINK
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
bytes_wrote += nas_netlink_send((char *)skb->data,skb->len);
|
||||
#else
|
||||
bytes_wrote += rtf_put(NAS2PDCP_FIFO, skb->data, skb->len);
|
||||
#endif //PDCP_USE_NETLINK
|
||||
|
||||
if (bytes_wrote != skb->len+NAS_PDCPH_SIZE) {
|
||||
printk("NAS_COMMON_QOS_SEND: Inst %d, RB_ID %ld: problem while writing PDCP's data, bytes_wrote = %d, Data_len %d, PDCPH_SIZE %lu\n",
|
||||
@@ -427,9 +410,6 @@ void nas_COMMON_QOS_send(struct sk_buff *skb, struct cx_entity *cx, struct class
|
||||
bytes_wrote,
|
||||
skb->len,
|
||||
NAS_PDCPH_SIZE); // congestion
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
rtf_reset(NAS2PDCP_FIFO);
|
||||
#endif //PDCP_USE_NETLINK
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -449,69 +429,6 @@ void nas_COMMON_QOS_send(struct sk_buff *skb, struct cx_entity *cx, struct class
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
//---------------------------------------------------------------------------
|
||||
void nas_COMMON_QOS_receive()
|
||||
{
|
||||
//---------------------------------------------------------------------------
|
||||
uint8_t sapi;
|
||||
struct pdcp_data_ind_header_s pdcph;
|
||||
unsigned char data_buffer[2048];
|
||||
struct classifier_entity *rclass;
|
||||
struct nas_priv *priv;
|
||||
int bytes_read;
|
||||
|
||||
// Start debug information
|
||||
#ifdef NAS_DEBUG_RECEIVE
|
||||
printk("NAS_COMMON_QOS_RECEIVE - begin \n");
|
||||
#endif
|
||||
|
||||
// End debug information
|
||||
|
||||
bytes_read = rtf_get(PDCP2PDCP_USE_RT_FIFO,&pdcph, NAS_PDCPH_SIZE);
|
||||
|
||||
while (bytes_read>0) {
|
||||
if (bytes_read != NAS_PDCPH_SIZE) {
|
||||
printk("NAS_COMMON_QOS_RECEIVE: problem while reading PDCP header\n");
|
||||
return;
|
||||
}
|
||||
|
||||
priv=netdev_priv(nasdev[pdcph.inst]);
|
||||
rclass = nas_COMMON_search_class_for_rb(pdcph.rb_id,priv);
|
||||
|
||||
bytes_read+= rtf_get(PDCP2PDCP_USE_RT_FIFO,
|
||||
data_buffer,
|
||||
pdcph.data_size);
|
||||
|
||||
#ifdef NAS_DEBUG_RECEIVE
|
||||
printk("NAS_COMMON_QOS_RECEIVE - Got header for RB %d, Inst %d \n",
|
||||
pdcph.rb_id,
|
||||
pdcph.inst);
|
||||
#endif
|
||||
|
||||
if (rclass) {
|
||||
#ifdef NAS_DEBUG_RECEIVE
|
||||
printk("[NAS][COMMON] Found corresponding connection in classifier for RAB\n");
|
||||
#endif //NAS_DEBUG_RECEIVE
|
||||
|
||||
nas_COMMON_receive(pdcph.data_size,
|
||||
(void *)data_buffer,
|
||||
pdcph.inst,
|
||||
rclass,
|
||||
pdcph.rb_id);
|
||||
}
|
||||
|
||||
bytes_read = rtf_get(PDCP2PDCP_USE_RT_FIFO, &pdcph, NAS_PDCPH_SIZE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef NAS_DEBUG_RECEIVE
|
||||
printk("NAS_COMMON_QOS_RECEIVE - end \n");
|
||||
#endif
|
||||
}
|
||||
|
||||
#else
|
||||
void nas_COMMON_QOS_receive(struct nlmsghdr *nlh)
|
||||
{
|
||||
|
||||
@@ -542,7 +459,6 @@ void nas_COMMON_QOS_receive(struct nlmsghdr *nlh)
|
||||
}
|
||||
|
||||
}
|
||||
#endif //PDCP_USE_NETLINK
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
struct cx_entity *nas_COMMON_search_cx(nasLocalConnectionRef_t lcr,struct nas_priv *priv)
|
||||
|
||||
@@ -53,10 +53,8 @@
|
||||
|
||||
struct net_device *nasdev[NB_INSTANCES_MAX];
|
||||
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
extern void nas_netlink_release(void);
|
||||
extern int nas_netlink_init(void);
|
||||
#endif
|
||||
|
||||
//int bytes_wrote;
|
||||
//int bytes_read;
|
||||
@@ -82,38 +80,6 @@ int find_inst(struct net_device *dev)
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
//void interrupt(void){
|
||||
void *nas_interrupt(void)
|
||||
{
|
||||
//---------------------------------------------------------------------------
|
||||
uint8_t cxi;
|
||||
|
||||
// struct nas_priv *priv=netdev_priv(dev_id);
|
||||
// unsigned int flags;
|
||||
|
||||
// priv->lock = SPIN_LOCK_UNLOCKED;
|
||||
|
||||
#ifdef DEBUG_INTERRUPT
|
||||
printk("INTERRUPT - begin\n");
|
||||
#endif
|
||||
// spin_lock_irqsave(&priv->lock,flags);
|
||||
cxi=0;
|
||||
// mesh_GC_receive();
|
||||
// mesh_DC_receive(naspriv->cx+cxi);
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
nas_COMMON_QOS_receive();
|
||||
#endif
|
||||
// spin_unlock_irqrestore(&priv->lock,flags);
|
||||
#ifdef DEBUG_INTERRUPT
|
||||
printk("INTERRUPT: end\n");
|
||||
#endif
|
||||
// return 0;
|
||||
return NULL;
|
||||
}
|
||||
#endif //NETLINK
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Called by ifconfig when the device is activated by ifconfig
|
||||
int nas_open(struct net_device *dev)
|
||||
{
|
||||
@@ -121,15 +87,6 @@ int nas_open(struct net_device *dev)
|
||||
printk("OPEN: begin\n");
|
||||
// MOD_INC_USE_COUNT;
|
||||
// Address has already been set at init
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
|
||||
if (pdcp_2_nas_irq==-EBUSY) {
|
||||
printk("OPEN: irq failure\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
#endif //PDCP_USE_NETLINK
|
||||
|
||||
/*
|
||||
netif_start_queue(dev);
|
||||
//
|
||||
@@ -449,16 +406,6 @@ int init_module (void)
|
||||
|
||||
printk("Starting NASMESH, number of IMEI paramters %d, IMEI %X%X\n",m_arg,nas_IMEI[0],nas_IMEI[1]);
|
||||
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
|
||||
if (pdcp_2_nas_irq == -EBUSY || pdcp_2_nas_irq == -EINVAL) {
|
||||
printk("[NAS][INIT] No interrupt resource available\n");
|
||||
return -EBUSY;
|
||||
} else
|
||||
printk("[NAS][INIT]: Interrupt %d\n", pdcp_2_nas_irq);
|
||||
|
||||
#endif //NETLINK
|
||||
|
||||
for (inst=0; inst<NB_INSTANCES_MAX; inst++) {
|
||||
printk("[NAS][INIT] nasmesh_init_module: begin init instance %d\n",inst);
|
||||
|
||||
@@ -493,15 +440,11 @@ int init_module (void)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
|
||||
if ((err=nas_netlink_init()) == -1)
|
||||
printk("[NAS][INIT] NETLINK failed\n");
|
||||
|
||||
printk("[NAS][INIT] NETLINK INIT\n");
|
||||
|
||||
#endif //NETLINK
|
||||
|
||||
return err;
|
||||
|
||||
}
|
||||
@@ -516,22 +459,6 @@ void cleanup_module(void)
|
||||
|
||||
printk("[NAS][CLEANUP]nasmesh_cleanup_module: begin\n");
|
||||
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
|
||||
if (pdcp_2_nas_irq!=-EBUSY) {
|
||||
pdcp_2_nas_irq=0;
|
||||
// Start IRQ linux
|
||||
// free_irq(priv->irq, NULL);
|
||||
// End IRQ linux
|
||||
|
||||
}
|
||||
|
||||
#else // NETLINK
|
||||
|
||||
|
||||
|
||||
#endif //NETLINK
|
||||
|
||||
for (inst=0; inst<NB_INSTANCES_MAX; inst++) {
|
||||
#ifdef DEBUG_DEVICE
|
||||
printk("nasmesh_cleanup_module: unregister and free net device instance %d\n",inst);
|
||||
@@ -541,9 +468,7 @@ void cleanup_module(void)
|
||||
free_netdev(nasdev[inst]);
|
||||
}
|
||||
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
nas_netlink_release();
|
||||
#endif //PDCP_USE_NETLINK
|
||||
printk("nasmesh_cleanup_module: end\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -178,10 +178,4 @@ extern struct net_device *nasdev[NB_INSTANCES_MAX];
|
||||
|
||||
extern uint8_t NAS_NULL_IMEI[14];
|
||||
|
||||
//global variables shared with RRC
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
extern int pdcp_2_nas_irq;
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -293,10 +293,6 @@ int nas_mesh_DC_send_cx_establish_request(struct cx_entity *cx,struct nas_priv *
|
||||
nas_tool_print_buffer((char *)p,p->length);
|
||||
#endif
|
||||
++cx->retry;
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#else
|
||||
// bytes_wrote = rtf_put(cx->sap[NAS_DC_INPUT_SAPI], p, p->length);
|
||||
#endif
|
||||
cx->countimer=gpriv->timer_establishment;
|
||||
|
||||
if (bytes_wrote==p->length) {
|
||||
@@ -353,11 +349,6 @@ int nas_mesh_DC_send_cx_release_request(struct cx_entity *cx,
|
||||
p->length = NAS_TL_SIZE + sizeof(struct NASConnReleaseReq);
|
||||
p->nasUEDCPrimitive.conn_release_req.localConnectionRef = cx->lcr;
|
||||
p->nasUEDCPrimitive.conn_release_req.releaseCause = NAS_CX_RELEASE_UNDEF_CAUSE;
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
|
||||
#else
|
||||
// bytes_wrote = rtf_put(cx->sap[NAS_DC_INPUT_SAPI], p, p->length);
|
||||
#endif
|
||||
|
||||
if (bytes_wrote==p->length) {
|
||||
cx->state=NAS_IDLE;
|
||||
@@ -441,22 +432,12 @@ void nas_mesh_DC_send_sig_data_request(struct sk_buff *skb,
|
||||
p->nasUEDCPrimitive.data_transfer_req.localConnectionRef = cx->lcr;
|
||||
p->nasUEDCPrimitive.data_transfer_req.priority = 3; // TBD
|
||||
p->nasUEDCPrimitive.data_transfer_req.nasDataLength = (skb->len)+1; //adds category character
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#else
|
||||
// bytes_wrote = rtf_put(cx->sap[NAS_DC_INPUT_SAPI], p, p->length);
|
||||
#endif
|
||||
|
||||
if (bytes_wrote!=p->length) {
|
||||
printk("NAS_MESH_DC_SEND_SIG: Header sent failure in DC-FIFO\n");
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#else
|
||||
// bytes_wrote += rtf_put(cx->sap[NAS_DC_INPUT_SAPI], &data_type, 1);
|
||||
// bytes_wrote += rtf_put(cx->sap[NAS_DC_INPUT_SAPI], skb->data, skb->len);
|
||||
#endif
|
||||
|
||||
if (bytes_wrote != p->length + skb->len + 1) {
|
||||
printk("NAS_MESH_DC_SEND_SIG: Data sent failure in DC-FIFO\n");
|
||||
return;
|
||||
@@ -511,22 +492,12 @@ void nas_mesh_DC_send_peer_sig_data_request(struct cx_entity *cx, uint8_t sig_ca
|
||||
p->nasUEDCPrimitive.data_transfer_req.localConnectionRef = cx->lcr;
|
||||
p->nasUEDCPrimitive.data_transfer_req.priority = 3; // TBD
|
||||
p->nasUEDCPrimitive.data_transfer_req.nasDataLength = (nas_length)+1; //adds category character
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#else
|
||||
// bytes_wrote = rtf_put(cx->sap[NAS_DC_INPUT_SAPI], p, p->length);
|
||||
#endif
|
||||
|
||||
if (bytes_wrote!=p->length) {
|
||||
printk("NAS_MESH_DC_PEER_SEND_SIG: Header sent failure in DC-FIFO\n");
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#else
|
||||
// bytes_wrote += rtf_put(cx->sap[NAS_DC_INPUT_SAPI], &data_type, 1);
|
||||
// bytes_wrote += rtf_put(cx->sap[NAS_DC_INPUT_SAPI], (char *)nas_data, nas_length);
|
||||
#endif
|
||||
|
||||
if (bytes_wrote != p->length + nas_length + 1) {
|
||||
printk("NAS_MESH_DC_PEER_SEND_SIG: Data sent failure in DC-FIFO\n");
|
||||
return;
|
||||
@@ -665,9 +636,6 @@ void nas_mesh_DC_decode_sig_data_ind(struct cx_entity *cx, struct nas_ue_dc_elem
|
||||
}
|
||||
|
||||
// End debug information
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
// nas_COMMON_receive(p->length, p->nasUEDCPrimitive.data_transfer_ind.nasDataLength, cx->sap[NAS_DC_OUTPUT_SAPI]);
|
||||
#endif
|
||||
#ifdef NAS_DEBUG_DC
|
||||
printk("NAS_MESH_DC_RECEIVE: DATA_TRANSFER_IND reception\n");
|
||||
printk(" Local Connection reference %u\n",p->nasUEDCPrimitive.data_transfer_ind.localConnectionRef);
|
||||
@@ -842,20 +810,12 @@ int nas_mesh_DC_receive(struct cx_entity *cx,struct nas_priv *gpriv)
|
||||
}
|
||||
|
||||
// End debug information
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#else
|
||||
// bytes_read = rtf_get(cx->sap[NAS_DC_OUTPUT_SAPI] , gpriv->rbuffer, NAS_TL_SIZE);
|
||||
#endif
|
||||
|
||||
if (bytes_read>0) {
|
||||
struct nas_ue_dc_element *p;
|
||||
|
||||
p= (struct nas_ue_dc_element *)(gpriv->rbuffer);
|
||||
//get the rest of the primitive
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#else
|
||||
// bytes_read += rtf_get(cx->sap[NAS_DC_OUTPUT_SAPI], (uint8_t *)p+NAS_TL_SIZE, p->length-NAS_TL_SIZE);
|
||||
#endif
|
||||
|
||||
if (bytes_read!=p->length) {
|
||||
printk("NAS_MESH_DC_RECEIVE: Problem while reading primitive header\n");
|
||||
@@ -982,19 +942,11 @@ int nas_mesh_GC_receive(struct nas_priv *gpriv)
|
||||
#ifdef NAS_DEBUG_GC
|
||||
printk("NAS_MESH_GC_RECEIVE - begin \n");
|
||||
#endif
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#else
|
||||
// bytes_read = rtf_get(gpriv->sap[NAS_GC_SAPI], gpriv->rbuffer, NAS_TL_SIZE);
|
||||
#endif
|
||||
|
||||
if (bytes_read>0) {
|
||||
struct nas_ue_gc_element *p;
|
||||
p= (struct nas_ue_gc_element *)(gpriv->rbuffer);
|
||||
//get the rest of the primitive
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#else
|
||||
// bytes_read += rtf_get(gpriv->sap[NAS_GC_SAPI], (uint8_t *)p+NAS_TL_SIZE, p->length-NAS_TL_SIZE);
|
||||
#endif
|
||||
|
||||
if (bytes_read!=p->length) {
|
||||
printk("NAS_MESH_GC_RECEIVE: Problem while reading primitive's header\n");
|
||||
@@ -1004,10 +956,6 @@ int nas_mesh_GC_receive(struct nas_priv *gpriv)
|
||||
// start decoding message
|
||||
switch (p->type) {
|
||||
case INFO_BROADCAST_IND :
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
#else
|
||||
// bytes_read += rtf_get(gpriv->sap[NAS_GC_SAPI], (uint8_t *)p+p->length, p->nasUEGCPrimitive.broadcast_ind.nasDataLength);
|
||||
#endif
|
||||
if (bytes_read!=p->length+p->nasUEGCPrimitive.broadcast_ind.nasDataLength) {
|
||||
printk("NAS_MESH_GC_RECEIVE: INFO_BROADCAST_IND reception, Problem while reading primitive's data\n");
|
||||
return bytes_read;
|
||||
|
||||
@@ -110,14 +110,6 @@ void nas_COMMON_del_send(struct sk_buff *skb,
|
||||
struct cx_entity *cx,
|
||||
struct classifier_entity *gc,int inst, struct nas_priv *gpriv);
|
||||
|
||||
#ifndef PDCP_USE_NETLINK
|
||||
/**
|
||||
\fn void nas_COMMON_QOS_receive()
|
||||
\brief Retrieve PDU from PDCP for connection
|
||||
*/
|
||||
void nas_COMMON_QOS_receive(void);
|
||||
#endif //PDCP_USE_NETLINK
|
||||
|
||||
/**
|
||||
\fn struct rb_entity *nas_COMMON_add_rb(struct cx_entity *cx, nasRadioBearerId_t rabi, nasQoSTrafficClass_t qos)
|
||||
\brief Add a radio-bearer descriptor
|
||||
@@ -168,7 +160,6 @@ struct classifier_entity
|
||||
*/
|
||||
void nas_COMMON_flush_rb(struct cx_entity *cx);
|
||||
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
/**
|
||||
\fn int nas_netlink_send(unsigned char *data,unsigned int len)
|
||||
\brief Request the transfer of data by PDCP via netlink socket
|
||||
@@ -185,7 +176,6 @@ int nas_netlink_send(unsigned char *data,unsigned int len);
|
||||
*/
|
||||
void nas_COMMON_QOS_receive(struct nlmsghdr *nlh);
|
||||
|
||||
#endif //PDCP_USE_NETLINK
|
||||
//nasmesh.c
|
||||
|
||||
/**
|
||||
@@ -305,13 +295,10 @@ void nas_tool_print_buffer(char * buffer,int length);
|
||||
void nas_print_rb_entity(struct rb_entity *rb);
|
||||
void nas_print_classifier(struct classifier_entity *gc);
|
||||
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
// nas_netlink.c
|
||||
|
||||
void nas_netlink_release(void);
|
||||
int nas_netlink_init(void);
|
||||
|
||||
#endif
|
||||
|
||||
/** @} */
|
||||
#endif
|
||||
|
||||
@@ -97,35 +97,6 @@ rrc_init_global_param(
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
|
||||
//#ifdef USER_MODE
|
||||
// Rrc_xface = (RRC_XFACE*)malloc16(sizeof(RRC_XFACE));
|
||||
//#endif //USRE_MODE
|
||||
|
||||
// Rrc_xface->openair_rrc_top_init = openair_rrc_top_init;
|
||||
// Rrc_xface->openair_rrc_eNB_init = openair_rrc_eNB_init;
|
||||
// Rrc_xface->openair_rrc_UE_init = openair_rrc_ue_init;
|
||||
// Rrc_xface->mac_rrc_data_ind = mac_rrc_data_ind;
|
||||
//Rrc_xface->mac_rrc_data_req = mac_rrc_data_req;
|
||||
// Rrc_xface->rrc_data_indP = (void *)rlcrrc_data_ind;
|
||||
// Rrc_xface->rrc_rx_tx = rrc_rx_tx;
|
||||
// Rrc_xface->mac_rrc_meas_ind = mac_rrc_meas_ind;
|
||||
// Rrc_xface->get_rrc_status = get_rrc_status;
|
||||
|
||||
//Rrc_xface->rrc_get_status = ...
|
||||
|
||||
// Mac_rlc_xface->mac_out_of_sync_ind=mac_out_of_sync_ind;
|
||||
|
||||
#ifndef NO_RRM
|
||||
// Rrc_xface->fn_rrc=fn_rrc;
|
||||
#endif
|
||||
// LOG_D(RRC, "[RRC]INIT_GLOBAL_PARAM: Mac_rlc_xface %p, rrc_rlc_register %p,rlcrrc_data_ind%p\n",Mac_rlc_xface,Mac_rlc_xface->rrc_rlc_register_rrc,rlcrrc_data_ind);
|
||||
/*
|
||||
if((Mac_rlc_xface==NULL) || (Mac_rlc_xface->rrc_rlc_register_rrc==NULL) ||
|
||||
(rlcrrc_data_ind==NULL)) {
|
||||
LOG_E(RRC,"Data structured is not initialized \n");
|
||||
return -1;
|
||||
}
|
||||
*/
|
||||
rrc_rlc_register_rrc (rrc_data_ind, NULL); //register with rlc
|
||||
|
||||
DCCH_LCHAN_DESC.transport_block_size = 4;
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
* \email: raymond.knopp@eurecom.fr ,navid.nikaein@eurecom.fr, michele.paffetti@studio.unibo.it
|
||||
*/
|
||||
|
||||
#ifdef USER_MODE
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdlib.h> /* for atoi(3) */
|
||||
@@ -36,9 +35,6 @@
|
||||
#include <string.h> /* for strerror(3) */
|
||||
#include <sysexits.h> /* for EX_* exit codes */
|
||||
#include <errno.h> /* for errno */
|
||||
#else
|
||||
#include <linux/module.h> /* Needed by all modules */
|
||||
#endif
|
||||
|
||||
#include <asn_application.h>
|
||||
#include <asn_internal.h> /* for _ASN_DEFAULT_STACK_MAX */
|
||||
|
||||
@@ -1,522 +0,0 @@
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/asn_codecs_prim.c patch_dir/asn_codecs_prim.c
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/asn_codecs_prim.c 2011-03-31 10:22:56.000000000 +0200
|
||||
--- patch_dir/asn_codecs_prim.c 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 4,10 ****
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <asn_codecs_prim.h>
|
||||
- #include <errno.h>
|
||||
|
||||
/*
|
||||
* Decode an always-primitive type.
|
||||
--- 4,9 ----
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/asn_internal.h patch_dir/asn_internal.h
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/asn_internal.h 2011-03-31 10:22:57.000000000 +0200
|
||||
--- patch_dir/asn_internal.h 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 10,20 ****
|
||||
--- 10,31 ----
|
||||
#define _ASN_INTERNAL_H_
|
||||
|
||||
#include "asn_application.h" /* Application-visible API */
|
||||
+ #ifndef USER_MODE
|
||||
+ #include <rtai.h>
|
||||
+ #include <rtai_malloc.h>
|
||||
+ #include "rtai_mem.h"
|
||||
+ #endif
|
||||
|
||||
#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */
|
||||
#include <assert.h> /* for assert() macro */
|
||||
#endif
|
||||
|
||||
+ #ifndef USER_MODE
|
||||
+ #ifndef assert
|
||||
+ #define assert(expr) ((expr) ? (void) 0 : printk("Assertion failed in %s:%d\n", __FILE__, __LINE__))
|
||||
+ #endif
|
||||
+ #endif
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
***************
|
||||
*** 23,32 ****
|
||||
--- 34,51 ----
|
||||
#define ASN1C_ENVIRONMENT_VERSION 922 /* Compile-time version */
|
||||
int get_asn1c_environment_version(void); /* Run-time version */
|
||||
|
||||
+ #ifdef USER_MODE
|
||||
#define CALLOC(nmemb, size) calloc(nmemb, size)
|
||||
#define MALLOC(size) malloc(size)
|
||||
#define REALLOC(oldptr, size) realloc(oldptr, size)
|
||||
#define FREEMEM(ptr) free(ptr)
|
||||
+ #else
|
||||
+ #define CALLOC(nmemb, size) rt_calloc(nmemb,size)
|
||||
+ #define MALLOC(size) rt_malloc(size)
|
||||
+ #define REALLOC(oldptr, size) rt_realloc(oldptr, size)
|
||||
+ #define FREEMEM(ptr) rt_free(ptr);
|
||||
+ #endif
|
||||
+
|
||||
|
||||
/*
|
||||
* A macro for debugging the ASN.1 internals.
|
||||
***************
|
||||
*** 38,45 ****
|
||||
#ifdef ASN_THREAD_SAFE
|
||||
#define asn_debug_indent 0
|
||||
#else /* !ASN_THREAD_SAFE */
|
||||
! int asn_debug_indent;
|
||||
#endif /* ASN_THREAD_SAFE */
|
||||
#define ASN_DEBUG(fmt, args...) do { \
|
||||
int adi = asn_debug_indent; \
|
||||
while(adi--) fprintf(stderr, " "); \
|
||||
--- 57,65 ----
|
||||
#ifdef ASN_THREAD_SAFE
|
||||
#define asn_debug_indent 0
|
||||
#else /* !ASN_THREAD_SAFE */
|
||||
! extern int asn_debug_indent;
|
||||
#endif /* ASN_THREAD_SAFE */
|
||||
+ #ifdef USER_MODE
|
||||
#define ASN_DEBUG(fmt, args...) do { \
|
||||
int adi = asn_debug_indent; \
|
||||
while(adi--) fprintf(stderr, " "); \
|
||||
***************
|
||||
*** 47,52 ****
|
||||
--- 67,81 ----
|
||||
fprintf(stderr, " (%s:%d)\n", \
|
||||
__FILE__, __LINE__); \
|
||||
} while(0)
|
||||
+ #else
|
||||
+ #define ASN_DEBUG(fmt, args...) do { \
|
||||
+ int adi = asn_debug_indent; \
|
||||
+ while(adi--) printk(" "); \
|
||||
+ printk(fmt, ##args); \
|
||||
+ printk(" (%s:%d)\n", \
|
||||
+ __FILE__, __LINE__); \
|
||||
+ } while(0)
|
||||
+ #endif
|
||||
#else /* !__GNUC__ */
|
||||
void ASN_DEBUG_f(const char *fmt, ...);
|
||||
#define ASN_DEBUG ASN_DEBUG_f
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/asn_SET_OF.c patch_dir/asn_SET_OF.c
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/asn_SET_OF.c 2011-03-31 10:22:56.000000000 +0200
|
||||
--- patch_dir/asn_SET_OF.c 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 4,10 ****
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <asn_SET_OF.h>
|
||||
- #include <errno.h>
|
||||
|
||||
/*
|
||||
* Add another element into the set.
|
||||
--- 4,9 ----
|
||||
***************
|
||||
*** 21,26 ****
|
||||
--- 20,27 ----
|
||||
/*
|
||||
* Make sure there's enough space to insert an element.
|
||||
*/
|
||||
+ ASN_DEBUG("SET ADD: count %d, size %d",as->count,as->size);
|
||||
+
|
||||
if(as->count == as->size) {
|
||||
int _newsize = as->size ? (as->size << 1) : 4;
|
||||
void *_new_arr;
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/asn_system.h patch_dir/asn_system.h
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/asn_system.h 2011-03-31 10:22:57.000000000 +0200
|
||||
--- patch_dir/asn_system.h 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 13,25 ****
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
! #include <stdio.h> /* For snprintf(3) */
|
||||
! #include <stdlib.h> /* For *alloc(3) */
|
||||
! #include <string.h> /* For memcpy(3) */
|
||||
! #include <sys/types.h> /* For size_t */
|
||||
! #include <limits.h> /* For LONG_MAX */
|
||||
! #include <stdarg.h> /* For va_start */
|
||||
! #include <stddef.h> /* for offsetof and ptrdiff_t */
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
--- 13,39 ----
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
! #ifdef USER_MODE
|
||||
! #include <stdio.h> // For snprintf(3)
|
||||
! #include <stdlib.h> // For *alloc(3)
|
||||
! #include <string.h> // For memcpy(3)
|
||||
! #include <sys/types.h> // For size_t
|
||||
! #include <limits.h> // For LONG_MAX
|
||||
! #include <stdarg.h> // For va_start
|
||||
! #include <stddef.h> // for offsetof and ptrdiff_t
|
||||
! #include <errno.h> // For errno
|
||||
! #else
|
||||
! typedef char FILE;
|
||||
! #include <linux/types.h>
|
||||
! #include <linux/slab.h> // For snprintf
|
||||
! #include <linux/sort.h> // For sort
|
||||
! #define qsort(base,num,size,cmp_func) sort(base,num,size,cmp_func,NULL)
|
||||
! #include <linux/errno.h>// For errno
|
||||
! #ifndef errno
|
||||
! extern int errno;
|
||||
! #endif
|
||||
! #include "bsearch.h"
|
||||
! #endif
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
***************
|
||||
*** 63,69 ****
|
||||
#include <types/vxTypes.h>
|
||||
#else /* !defined(__vxworks) */
|
||||
|
||||
! #include <inttypes.h> /* C99 specifies this file */
|
||||
/*
|
||||
* 1. Earlier FreeBSD version didn't have <stdint.h>,
|
||||
* but <inttypes.h> was present.
|
||||
--- 77,85 ----
|
||||
#include <types/vxTypes.h>
|
||||
#else /* !defined(__vxworks) */
|
||||
|
||||
! #ifdef USER_MODE
|
||||
! #include <inttypes.h> /*C99 specifies this file */
|
||||
! #endif
|
||||
/*
|
||||
* 1. Earlier FreeBSD version didn't have <stdint.h>,
|
||||
* but <inttypes.h> was present.
|
||||
***************
|
||||
*** 81,91 ****
|
||||
#define inline
|
||||
#endif /* __GNUC__ */
|
||||
#else
|
||||
! #include <stdint.h> /* SUSv2+ and C99 specify this file, for uintXX_t */
|
||||
#endif /* defined(sun) */
|
||||
#endif
|
||||
|
||||
! #include <netinet/in.h> /* for ntohl() */
|
||||
#define sys_ntohl(foo) ntohl(foo)
|
||||
|
||||
#endif /* defined(__vxworks) */
|
||||
--- 97,109 ----
|
||||
#define inline
|
||||
#endif /* __GNUC__ */
|
||||
#else
|
||||
! #ifdef USER_MODE
|
||||
! #include <stdint.h> /*SUSv2+ and C99 specify this file, for uintXX_t */
|
||||
! #endif
|
||||
#endif /* defined(sun) */
|
||||
#endif
|
||||
|
||||
! /*#include <netinet/in.h> for ntohl() */
|
||||
#define sys_ntohl(foo) ntohl(foo)
|
||||
|
||||
#endif /* defined(__vxworks) */
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/ber_tlv_tag.c patch_dir/ber_tlv_tag.c
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/ber_tlv_tag.c 2011-03-31 10:22:56.000000000 +0200
|
||||
--- patch_dir/ber_tlv_tag.c 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 4,10 ****
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <ber_tlv_tag.h>
|
||||
- #include <errno.h>
|
||||
|
||||
ssize_t
|
||||
ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) {
|
||||
--- 4,9 ----
|
||||
***************
|
||||
*** 57,63 ****
|
||||
return 0; /* Want more */
|
||||
}
|
||||
|
||||
!
|
||||
ssize_t
|
||||
ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) {
|
||||
char buf[sizeof("[APPLICATION ]") + 32];
|
||||
--- 56,62 ----
|
||||
return 0; /* Want more */
|
||||
}
|
||||
|
||||
! #ifdef USER_MODE
|
||||
ssize_t
|
||||
ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) {
|
||||
char buf[sizeof("[APPLICATION ]") + 32];
|
||||
***************
|
||||
*** 71,76 ****
|
||||
--- 70,76 ----
|
||||
|
||||
return fwrite(buf, 1, ret, f);
|
||||
}
|
||||
+ #endif
|
||||
|
||||
ssize_t
|
||||
ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) {
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/constraints.c patch_dir/constraints.c
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/constraints.c 2011-03-31 10:22:57.000000000 +0200
|
||||
--- patch_dir/constraints.c 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 1,4 ****
|
||||
! #include "asn_internal.h"
|
||||
#include "constraints.h"
|
||||
|
||||
int
|
||||
--- 1,4 ----
|
||||
! #include <asn_internal.h>
|
||||
#include "constraints.h"
|
||||
|
||||
int
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/constr_TYPE.c patch_dir/constr_TYPE.c
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/constr_TYPE.c 2011-03-31 10:22:56.000000000 +0200
|
||||
--- patch_dir/constr_TYPE.c 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 4,10 ****
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
#include <constr_TYPE.h>
|
||||
- #include <errno.h>
|
||||
|
||||
/*
|
||||
* Version of the ASN.1 infrastructure shipped with compiler.
|
||||
--- 4,9 ----
|
||||
***************
|
||||
*** 29,34 ****
|
||||
--- 28,34 ----
|
||||
return type_descriptor->outmost_tag(type_descriptor, struct_ptr, 0, 0);
|
||||
}
|
||||
|
||||
+ #ifdef USER_MODE
|
||||
/*
|
||||
* Print the target language's structure in human readable form.
|
||||
*/
|
||||
***************
|
||||
*** 75,77 ****
|
||||
--- 75,78 ----
|
||||
fprintf(stderr, "\n");
|
||||
va_end(ap);
|
||||
}
|
||||
+ #endif
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/der_encoder.c patch_dir/der_encoder.c
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/der_encoder.c 2011-03-31 10:22:56.000000000 +0200
|
||||
--- patch_dir/der_encoder.c 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 3,9 ****
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
- #include <errno.h>
|
||||
|
||||
static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len,
|
||||
asn_app_consume_bytes_f *cb, void *app_key, int constructed);
|
||||
--- 3,8 ----
|
||||
***************
|
||||
*** 81,89 ****
|
||||
--- 80,90 ----
|
||||
asn_app_consume_bytes_f *cb,
|
||||
void *app_key) {
|
||||
ber_tlv_tag_t *tags; /* Copy of tags stream */
|
||||
+ ber_tlv_tag_t tags_array[8];
|
||||
int tags_count; /* Number of tags */
|
||||
size_t overall_length;
|
||||
ssize_t *lens;
|
||||
+ ssize_t lens_array[8];
|
||||
int i;
|
||||
|
||||
ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)",
|
||||
***************
|
||||
*** 102,111 ****
|
||||
* and initialize it appropriately.
|
||||
*/
|
||||
int stag_offset;
|
||||
! tags = (ber_tlv_tag_t *)alloca((sd->tags_count + 1) * sizeof(ber_tlv_tag_t));
|
||||
if(!tags) { /* Can fail on !x86 */
|
||||
! errno = ENOMEM;
|
||||
! return -1;
|
||||
}
|
||||
tags_count = sd->tags_count
|
||||
+ 1 /* EXPLICIT or IMPLICIT tag is given */
|
||||
--- 103,121 ----
|
||||
* and initialize it appropriately.
|
||||
*/
|
||||
int stag_offset;
|
||||
! //tags = (ber_tlv_tag_t *)alloca((sd->tags_count + 1) * sizeof(ber_tlv_tag_t));
|
||||
! tags = &(tags_array[0]);
|
||||
! if ((sd->tags_count + 1)>=8) {
|
||||
! #ifdef USER_MODE
|
||||
! printf("der_encoder.c: ERROR tags array too small. Increase size!\n");
|
||||
! exit(-1);
|
||||
! #endif
|
||||
! errno = ENOMEM;
|
||||
! return -1;
|
||||
! }
|
||||
if(!tags) { /* Can fail on !x86 */
|
||||
! errno = ENOMEM;
|
||||
! return -1;
|
||||
}
|
||||
tags_count = sd->tags_count
|
||||
+ 1 /* EXPLICIT or IMPLICIT tag is given */
|
||||
***************
|
||||
*** 124,135 ****
|
||||
if(tags_count == 0)
|
||||
return 0;
|
||||
|
||||
! lens = (ssize_t *)alloca(tags_count * sizeof(lens[0]));
|
||||
if(!lens) {
|
||||
! errno = ENOMEM;
|
||||
! return -1;
|
||||
}
|
||||
!
|
||||
/*
|
||||
* Array of tags is initialized.
|
||||
* Now, compute the size of the TLV pairs, from right to left.
|
||||
--- 134,154 ----
|
||||
if(tags_count == 0)
|
||||
return 0;
|
||||
|
||||
! //lens = (ssize_t *)alloca(tags_count * sizeof(lens[0]));
|
||||
! lens = &(lens_array[0]);
|
||||
! if (tags_count>=8) {
|
||||
! #ifdef USER_MODE
|
||||
! printf("der_encoder.c: ERROR lens array too small. Increase size!\n");
|
||||
! exit(-1);
|
||||
! #endif
|
||||
! errno = ENOMEM;
|
||||
! return -1;
|
||||
! }
|
||||
if(!lens) {
|
||||
! errno = ENOMEM;
|
||||
! return -1;
|
||||
}
|
||||
!
|
||||
/*
|
||||
* Array of tags is initialized.
|
||||
* Now, compute the size of the TLV pairs, from right to left.
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/INTEGER.c patch_dir/INTEGER.c
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/INTEGER.c 2011-03-31 10:22:56.000000000 +0200
|
||||
--- patch_dir/INTEGER.c 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 6,12 ****
|
||||
#include <asn_internal.h>
|
||||
#include <INTEGER.h>
|
||||
#include <asn_codecs_prim.h> /* Encoder and decoder of a primitive type */
|
||||
- #include <errno.h>
|
||||
|
||||
/*
|
||||
* INTEGER basic type description.
|
||||
--- 6,11 ----
|
||||
***************
|
||||
*** 103,109 ****
|
||||
static ssize_t
|
||||
INTEGER__dump(asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) {
|
||||
asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
|
||||
! char scratch[32]; /* Enough for 64-bit integer */
|
||||
uint8_t *buf = st->buf;
|
||||
uint8_t *buf_end = st->buf + st->size;
|
||||
signed long accum;
|
||||
--- 102,108 ----
|
||||
static ssize_t
|
||||
INTEGER__dump(asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) {
|
||||
asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
|
||||
! char scratch[128];
|
||||
uint8_t *buf = st->buf;
|
||||
uint8_t *buf_end = st->buf + st->size;
|
||||
signed long accum;
|
||||
***************
|
||||
*** 142,149 ****
|
||||
--- 141,152 ----
|
||||
|
||||
el = INTEGER_map_value2enum(specs, accum);
|
||||
if(el) {
|
||||
+ scrsize = sizeof(scratch);
|
||||
+ scr = scratch;
|
||||
+ /* cannot use alloca in kernel
|
||||
scrsize = el->enum_len + 32;
|
||||
scr = (char *)alloca(scrsize);
|
||||
+ */
|
||||
if(plainOrXER == 0)
|
||||
ret = snprintf(scr, scrsize,
|
||||
"%ld (%s)", accum, el->enum_name);
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/NativeEnumerated.c patch_dir/NativeEnumerated.c
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/NativeEnumerated.c 2011-03-31 10:22:57.000000000 +0200
|
||||
--- patch_dir/NativeEnumerated.c 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 46,51 ****
|
||||
--- 46,52 ----
|
||||
asn_app_consume_bytes_f *cb, void *app_key) {
|
||||
asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
|
||||
asn_enc_rval_t er;
|
||||
+ char scratch[128];
|
||||
const long *native = (const long *)sptr;
|
||||
const asn_INTEGER_enum_map_t *el;
|
||||
|
||||
***************
|
||||
*** 57,63 ****
|
||||
el = INTEGER_map_value2enum(specs, *native);
|
||||
if(el) {
|
||||
size_t srcsize = el->enum_len + 5;
|
||||
! char *src = (char *)alloca(srcsize);
|
||||
|
||||
er.encoded = snprintf(src, srcsize, "<%s/>", el->enum_name);
|
||||
assert(er.encoded > 0 && (size_t)er.encoded < srcsize);
|
||||
--- 58,64 ----
|
||||
el = INTEGER_map_value2enum(specs, *native);
|
||||
if(el) {
|
||||
size_t srcsize = el->enum_len + 5;
|
||||
! char *src = (char *)scratch; //alloca(srcsize);
|
||||
|
||||
er.encoded = snprintf(src, srcsize, "<%s/>", el->enum_name);
|
||||
assert(er.encoded > 0 && (size_t)er.encoded < srcsize);
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/OCTET_STRING.c patch_dir/OCTET_STRING.c
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/OCTET_STRING.c 2011-03-31 10:22:55.000000000 +0200
|
||||
--- patch_dir/OCTET_STRING.c 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 6,12 ****
|
||||
#include <asn_internal.h>
|
||||
#include <OCTET_STRING.h>
|
||||
#include <BIT_STRING.h> /* for .bits_unused member */
|
||||
- #include <errno.h>
|
||||
|
||||
/*
|
||||
* OCTET STRING basic type description.
|
||||
--- 6,11 ----
|
||||
diff -cB /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/xer_encoder.c patch_dir/xer_encoder.c
|
||||
*** /homes/kaltenbe/Devel/openair/openair_branches/openair_lte/openair2/RRC/LITE/MESSAGES/asn1c/asn1c/skeletons/xer_encoder.c 2011-04-11 18:03:26.000000000 +0200
|
||||
--- patch_dir/xer_encoder.c 2011-05-31 10:28:26.000000000 +0200
|
||||
***************
|
||||
*** 3,10 ****
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
! #include <stdio.h>
|
||||
! #include <errno.h>
|
||||
|
||||
/*
|
||||
* The XER encoder of any type. May be invoked by the application.
|
||||
--- 3,10 ----
|
||||
* Redistribution and modifications are permitted subject to BSD license.
|
||||
*/
|
||||
#include <asn_internal.h>
|
||||
! //#include <stdio.h>
|
||||
! //#include <errno.h>
|
||||
|
||||
/*
|
||||
* The XER encoder of any type. May be invoked by the application.
|
||||
***************
|
||||
*** 41,46 ****
|
||||
--- 41,47 ----
|
||||
* This is a helper function for xer_fprint, which directs all incoming data
|
||||
* into the provided file descriptor.
|
||||
*/
|
||||
+ #ifdef USER_MODE
|
||||
static int
|
||||
xer__print2fp(const void *buffer, size_t size, void *app_key) {
|
||||
FILE *stream = (FILE *)app_key;
|
||||
***************
|
||||
*** 65,67 ****
|
||||
--- 66,69 ----
|
||||
|
||||
return fflush(stream);
|
||||
}
|
||||
+ #endif
|
||||
@@ -393,15 +393,7 @@ char openair_rrc_ue_init( const module_id_t ue_mod_idP, const unsigned char eNB_
|
||||
init_SI_UE(&ctxt,eNB_index);
|
||||
LOG_D(RRC,PROTOCOL_RRC_CTXT_FMT" INIT: phy_sync_2_ch_ind\n",
|
||||
PROTOCOL_RRC_CTXT_ARGS(&ctxt));
|
||||
#ifndef NO_RRM
|
||||
send_msg(&S_rrc,msg_rrc_phy_synch_to_CH_ind(ctxt.module_id,eNB_index,UE_rrc_inst[ctxt.module_id].Mac_id));
|
||||
#endif
|
||||
#ifndef NO_RRM
|
||||
send_msg(&S_rrc,msg_rrc_phy_synch_to_CH_ind(ctxt.module_id,eNB_index,UE_rrc_inst[ctxt.module_id].Mac_id));
|
||||
#endif
|
||||
#ifdef NO_RRM //init ch SRB0, SRB1 & BDTCH
|
||||
openair_rrc_on_ue(&ctxt);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2249,9 +2241,6 @@ rrc_ue_decode_dcch(
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NO_RRM
|
||||
send_msg(&S_rrc,msg_rrc_end_scan_req(ctxt_pP->module_id,eNB_indexP));
|
||||
#endif
|
||||
}
|
||||
|
||||
const char siWindowLength[9][5] = {"1ms","2ms","5ms","10ms","15ms","20ms","40ms","80ms","ERR"};
|
||||
@@ -2530,14 +2519,6 @@ int decode_BCCH_MBMS_DLSCH_Message(
|
||||
break;
|
||||
}
|
||||
}*/
|
||||
/*if ((rrc_get_sub_state(ctxt_pP->module_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE)
|
||||
#if defined(ENABLE_USE_MME)
|
||||
&& (UE_rrc_inst[ctxt_pP->module_id].initialNasMsg.data != NULL)
|
||||
#endif
|
||||
) {
|
||||
rrc_ue_generate_RRCConnectionRequest(ctxt_pP, 0);
|
||||
rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_CONNECTING );
|
||||
}*/
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT );
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -173,13 +173,6 @@ extern pthread_mutex_t slrb_mutex;
|
||||
//the thread function
|
||||
void *send_UE_status_notification(void *);
|
||||
|
||||
|
||||
|
||||
//#include "COMMON/openair_defs.h"
|
||||
#ifndef USER_MODE
|
||||
//#include <rtai.h>
|
||||
#endif
|
||||
|
||||
#include "LTE_SystemInformationBlockType1.h"
|
||||
#include "LTE_SystemInformation.h"
|
||||
#include "LTE_RRCConnectionReconfiguration.h"
|
||||
@@ -217,12 +210,6 @@ void *send_UE_status_notification(void *);
|
||||
#define NB_SIG_CNX_UE 2 //MAX_MANAGED_RG_PER_MOBILE
|
||||
#define NB_CNX_UE 2//MAX_MANAGED_RG_PER_MOBILE
|
||||
|
||||
#ifndef NO_RRM
|
||||
#include "L3_rrc_interface.h"
|
||||
#include "rrc_rrm_msg.h"
|
||||
#include "rrc_rrm_interface.h"
|
||||
#endif
|
||||
|
||||
|
||||
#include "intertask_interface.h"
|
||||
|
||||
|
||||
@@ -7279,9 +7279,6 @@ rrc_eNB_decode_ccch(
|
||||
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
|
||||
rrcConnectionReestablishmentRequest->ue_Identity.physCellId,
|
||||
ue_context_p->ue_context.reestablishment_cause);
|
||||
#ifndef NO_RRM
|
||||
send_msg(&S_rrc, msg_rrc_MR_attach_ind(ctxt_pP->module_id, Mac_id));
|
||||
#else
|
||||
ue_context_p->ue_context.primaryCC_id = CC_id;
|
||||
//LG COMMENT Idx = (ue_mod_idP * NB_RB_MAX) + DCCH;
|
||||
Idx = DCCH;
|
||||
@@ -7335,7 +7332,6 @@ rrc_eNB_decode_ccch(
|
||||
);
|
||||
}
|
||||
|
||||
#endif //NO_RRM
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -7524,9 +7520,6 @@ rrc_eNB_decode_ccch(
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NO_RRM
|
||||
send_msg(&S_rrc, msg_rrc_MR_attach_ind(ctxt_pP->module_id, Mac_id));
|
||||
#else
|
||||
ue_context_p->ue_context.primaryCC_id = CC_id;
|
||||
//LG COMMENT Idx = (ue_mod_idP * NB_RB_MAX) + DCCH;
|
||||
Idx = DCCH;
|
||||
@@ -7579,7 +7572,6 @@ rrc_eNB_decode_ccch(
|
||||
);
|
||||
}
|
||||
|
||||
#endif //NO_RRM
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -1,277 +0,0 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*!
|
||||
*******************************************************************************
|
||||
|
||||
\file rrm_sock.c
|
||||
|
||||
\brief RRM (Radio Ressource Manager ) Socket: communication withe other medium:
|
||||
- RRC ,
|
||||
- CMM ,
|
||||
- PUSU
|
||||
|
||||
\author BURLOT Pascal
|
||||
|
||||
\date 10/07/08
|
||||
|
||||
|
||||
\par Historique:
|
||||
P.BURLOT 2009-01-20
|
||||
+ send a message via fifo:
|
||||
- sending header
|
||||
- and data if any
|
||||
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef RRC_RRM_FIFOS_XFACE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
#else
|
||||
|
||||
#include<rtai_fifos.h>
|
||||
|
||||
#endif
|
||||
|
||||
#include "rrc_rrm_interface.h"
|
||||
#include "defs.h"
|
||||
//! \brief Taille maximale de la charge utile
|
||||
#define SIZE_MAX_PAYLOAD 2048
|
||||
//! \brief PID de l'espace utilisateur (Netlink mode)
|
||||
//#define PID_USERSPACE 0xAA
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef RRC_RRM_FIFOS_XFACE
|
||||
|
||||
/*!
|
||||
*******************************************************************************
|
||||
\brief This function opens a unix socket for the rrm communication
|
||||
\return The return value is a socket handle
|
||||
*/
|
||||
int open_socket(
|
||||
sock_rrm_t *s, ///< socket descriptor
|
||||
char *path_local, ///< local socket path if unix socket
|
||||
char *path_dest, ///< host Socket path if unix socket
|
||||
int rrm_inst ///< instance of the rrm entity
|
||||
) {
|
||||
/* Unix socket */
|
||||
int socket_fd ;
|
||||
int len ;
|
||||
|
||||
if ((socket_fd = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1) {
|
||||
perror("unix socket");
|
||||
return -1 ;
|
||||
}
|
||||
|
||||
memset(&(s->un_local_addr), 0, sizeof(struct sockaddr_un));
|
||||
s->un_local_addr.sun_family = AF_UNIX;
|
||||
sprintf(s->un_local_addr.sun_path,"%s%d", path_local, rrm_inst );
|
||||
unlink(s->un_local_addr.sun_path);
|
||||
msg("local %s\n",s->un_local_addr.sun_path);
|
||||
len = strlen((s->un_local_addr).sun_path) + sizeof((s->un_local_addr).sun_family);
|
||||
|
||||
if (bind(socket_fd, (struct sockaddr *)&(s->un_local_addr), len) == -1) {
|
||||
perror("bind");
|
||||
return -1 ;
|
||||
}
|
||||
|
||||
memset(&(s->un_dest_addr), 0, sizeof(struct sockaddr_un));
|
||||
s->un_dest_addr.sun_family = AF_UNIX;
|
||||
sprintf(s->un_dest_addr.sun_path,"%s%d", path_dest, rrm_inst );
|
||||
msg("Dest %s\n",s->un_dest_addr.sun_path);
|
||||
s->s = socket_fd ;
|
||||
return socket_fd ;
|
||||
}
|
||||
/*!
|
||||
*******************************************************************************
|
||||
\brief This function closes a RRM socket
|
||||
\return none
|
||||
*/
|
||||
void close_socket(
|
||||
sock_rrm_t *sock ///< the socket handle
|
||||
) {
|
||||
shutdown(sock->s, SHUT_RDWR);
|
||||
close(sock->s);
|
||||
}
|
||||
|
||||
/*!
|
||||
*******************************************************************************
|
||||
\brief This function send a buffer message to the unix socket
|
||||
\return if OK then "0" is returned else "-1"
|
||||
*/
|
||||
char BUFF[2048];
|
||||
int send_msg_sock(
|
||||
sock_rrm_t *s, ///< socket descriptor
|
||||
msg_t *smsg ///< the message to send
|
||||
) {
|
||||
/* Unix socket */
|
||||
int ret = 0 ;
|
||||
// char *buf = NULL;
|
||||
struct msghdr msghd ;
|
||||
struct iovec iov;
|
||||
int taille = sizeof(msg_head_t) ;
|
||||
|
||||
if ( smsg == NULL ) {
|
||||
return -1 ;
|
||||
}
|
||||
|
||||
if ( smsg->data != NULL ) {
|
||||
taille += smsg->head.size ;
|
||||
}
|
||||
|
||||
//buf = RRM_MALLOC(char, taille);
|
||||
//if (buf ==NULL)
|
||||
//return -1 ;
|
||||
memcpy( BUFF, &(smsg->head), sizeof(msg_head_t) ) ;
|
||||
memcpy( BUFF+sizeof(msg_head_t), smsg->data, smsg->head.size ) ;
|
||||
iov.iov_base = (void *)BUFF;
|
||||
iov.iov_len = taille ;
|
||||
msghd.msg_name = (void *)&(s->un_dest_addr);
|
||||
msghd.msg_namelen = sizeof(s->un_dest_addr);
|
||||
msghd.msg_iov = &iov;
|
||||
msghd.msg_iovlen = 1;
|
||||
msghd.msg_control = NULL ;
|
||||
msghd.msg_controllen = 0 ;
|
||||
|
||||
if ( sendmsg(s->s, &msghd, 0) < 0 ) {
|
||||
ret = -1;
|
||||
msg("socket %d, dest %s\n",s->s,s->un_dest_addr.sun_path);
|
||||
perror("sendmsg:unix socket");
|
||||
}
|
||||
|
||||
//RRM_FREE(buf) ;
|
||||
//RRM_FREE(msg->data) ;
|
||||
//RRM_FREE(msg) ;
|
||||
return ret ;
|
||||
}
|
||||
|
||||
/*!
|
||||
*******************************************************************************
|
||||
\brief This function read a buffer from a unix socket
|
||||
\return the function returns a message pointer. If the pointeur is NULL, a error
|
||||
is happened.
|
||||
*/
|
||||
char *recv_msg(
|
||||
sock_rrm_t *s ///< socket descriptor
|
||||
) {
|
||||
/* Unix socket */
|
||||
char *buf = NULL;
|
||||
char *smsg = NULL;
|
||||
struct msghdr msghd ;
|
||||
struct iovec iov;
|
||||
int size_msg ;
|
||||
msg_head_t *head ;
|
||||
int ret ;
|
||||
int taille = SIZE_MAX_PAYLOAD ;
|
||||
buf = RRM_CALLOC( char,taille);
|
||||
|
||||
if ( buf == NULL ) {
|
||||
return NULL ;
|
||||
}
|
||||
|
||||
iov.iov_base = (void *)buf;
|
||||
iov.iov_len = taille ;
|
||||
msghd.msg_name = (void *)&(s->un_dest_addr);
|
||||
msghd.msg_namelen = sizeof(s->un_dest_addr);
|
||||
msghd.msg_iov = &iov;
|
||||
msghd.msg_iovlen = 1;
|
||||
msghd.msg_control = NULL ;
|
||||
msghd.msg_controllen= 0 ;
|
||||
ret = recvmsg(s->s, &msghd, 0 ) ;
|
||||
|
||||
if ( ret <= 0 ) {
|
||||
// non-blocking socket
|
||||
// perror("PB recvmsg_un");
|
||||
RRM_FREE(buf);
|
||||
return NULL ;
|
||||
}
|
||||
|
||||
if (msghd.msg_flags != 0 ) {
|
||||
fprintf(stderr,"error recvmsg_un: 0x%02x\n", msghd.msg_flags) ;
|
||||
RRM_FREE(buf);
|
||||
return NULL ;
|
||||
}
|
||||
|
||||
head = (msg_head_t *) buf ;
|
||||
size_msg = sizeof(msg_head_t) + head->size ;
|
||||
smsg = RRM_CALLOC(char, size_msg ) ;
|
||||
|
||||
if ( smsg != NULL ) {
|
||||
memcpy( smsg, buf, size_msg ) ;
|
||||
}
|
||||
|
||||
RRM_FREE( buf ) ;
|
||||
return smsg ;
|
||||
}
|
||||
|
||||
#else //XFACE
|
||||
|
||||
int send_msg_fifo(int *s, msg_t *fmsg) {
|
||||
int ret = 0, ret1;
|
||||
int taille = sizeof(msg_head_t) ;
|
||||
msg("write on fifos %d, msg %p\n",*s,fmsg);
|
||||
|
||||
if ( fmsg == NULL ) {
|
||||
return -1 ;
|
||||
}
|
||||
|
||||
// envoi le header
|
||||
ret1 = rtf_put (*s,(char *) &(fmsg->head), taille);
|
||||
|
||||
if(ret1 <0) {
|
||||
msg("rtf_put H ERR %d\n",ret1);
|
||||
rtf_reset(*s);
|
||||
return ret1;
|
||||
}
|
||||
|
||||
ret=ret1;
|
||||
|
||||
// envoi les datas si elles sont definis
|
||||
if ( fmsg->data != NULL ) {
|
||||
ret1 += rtf_put (*s,(char *) fmsg->data, fmsg->head.size);
|
||||
|
||||
if(ret1 <0) {
|
||||
msg("rtf_put D ERR %d\n",ret1);
|
||||
rtf_reset(*s);
|
||||
return ret1;
|
||||
}
|
||||
}
|
||||
|
||||
ret+=ret1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif //XFACE
|
||||
|
||||
int send_msg(void *s, msg_t *smsg) {
|
||||
send_msg_sock((sock_rrm_t *)s, smsg);
|
||||
}
|
||||
@@ -133,18 +133,6 @@
|
||||
|
||||
#include "common/ran_context.h"
|
||||
|
||||
//#include "PHY/defs.h"
|
||||
/*#ifndef USER_MODE
|
||||
#define msg printk
|
||||
#ifndef errno
|
||||
int errno;
|
||||
#endif
|
||||
#else
|
||||
# if !defined (msg)
|
||||
# define msg printf
|
||||
# endif
|
||||
#endif*/
|
||||
|
||||
//#define XER_PRINT
|
||||
|
||||
typedef struct xer_sprint_string_s {
|
||||
|
||||
@@ -3274,57 +3274,6 @@ void *rrc_gnb_task(void *args_p) {
|
||||
case GTPV1U_GNB_DELETE_TUNNEL_RESP:
|
||||
break;
|
||||
|
||||
/*
|
||||
#if defined(ENABLE_USE_MME)
|
||||
|
||||
// Messages from S1AP
|
||||
case S1AP_DOWNLINK_NAS:
|
||||
rrc_eNB_process_S1AP_DOWNLINK_NAS(msg_p, msg_name_p, instance, &rrc_gNB_mui);
|
||||
break;
|
||||
|
||||
case S1AP_INITIAL_CONTEXT_SETUP_REQ:
|
||||
rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(msg_p, msg_name_p, instance);
|
||||
break;
|
||||
|
||||
case S1AP_UE_CTXT_MODIFICATION_REQ:
|
||||
rrc_eNB_process_S1AP_UE_CTXT_MODIFICATION_REQ(msg_p, msg_name_p, instance);
|
||||
break;
|
||||
|
||||
case S1AP_PAGING_IND:
|
||||
LOG_D(RRC, "[eNB %d] Received Paging message from S1AP: %s\n", instance, msg_name_p);
|
||||
rrc_eNB_process_PAGING_IND(msg_p, msg_name_p, instance);
|
||||
break;
|
||||
|
||||
case S1AP_E_RAB_SETUP_REQ:
|
||||
rrc_eNB_process_S1AP_E_RAB_SETUP_REQ(msg_p, msg_name_p, instance);
|
||||
LOG_D(RRC, "[eNB %d] Received the message %s\n", instance, msg_name_p);
|
||||
break;
|
||||
|
||||
case S1AP_E_RAB_MODIFY_REQ:
|
||||
rrc_eNB_process_S1AP_E_RAB_MODIFY_REQ(msg_p, msg_name_p, instance);
|
||||
break;
|
||||
|
||||
case S1AP_E_RAB_RELEASE_COMMAND:
|
||||
rrc_eNB_process_S1AP_E_RAB_RELEASE_COMMAND(msg_p, msg_name_p, instance);
|
||||
break;
|
||||
|
||||
case S1AP_UE_CONTEXT_RELEASE_REQ:
|
||||
rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_REQ(msg_p, msg_name_p, instance);
|
||||
break;
|
||||
|
||||
case S1AP_UE_CONTEXT_RELEASE_COMMAND:
|
||||
rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND(msg_p, msg_name_p, instance);
|
||||
break;
|
||||
|
||||
case GTPV1U_ENB_DELETE_TUNNEL_RESP:
|
||||
///Nothing to do. Apparently everything is done in S1AP processing
|
||||
//LOG_I(RRC, "[eNB %d] Received message %s, not processed because procedure not synched\n",
|
||||
//instance, msg_name_p);
|
||||
AssertFatal(false, "Removed double mechanism for same feature: now delete_tunnel() function should be called\n");
|
||||
break;
|
||||
|
||||
#endif
|
||||
*/
|
||||
/* Messages from gNB app */
|
||||
case NRRRC_CONFIGURATION_REQ:
|
||||
LOG_I(NR_RRC, "[gNB %ld] Received %s : %p\n", instance, msg_name_p,&NRRRC_CONFIGURATION_REQ(msg_p));
|
||||
|
||||
@@ -111,4 +111,4 @@
|
||||
#define RRC_LIST_ENTRY(list, i) \
|
||||
list.entries[i]
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -60,10 +60,6 @@ unsigned short config_frames[4] = {2,9,11,13};
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
|
||||
#ifndef OPENAIR2
|
||||
#include "UTIL/OTG/otg_vars.h"
|
||||
#endif
|
||||
|
||||
#include "intertask_interface.h"
|
||||
|
||||
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
include $(OPENAIR_TARGETS)/Makefile.common
|
||||
ifdef TEST_OMG
|
||||
|
||||
CC= gcc
|
||||
|
||||
OBJstatic = OMG.c common.c static.c
|
||||
OBJrwp = OMG.c common.c job.c rwp.c
|
||||
OBJrwalk = OMG.c common.c job.c rwalk.c
|
||||
OBJtrace = OMG.c common.c job.c trace.c mobility_parser.c hashtable.c
|
||||
OBJsumo = OMG.c common.c sumo.c client_traci_OMG.c socket_traci_OMG.c storage_traci_OMG.c id_manager.c
|
||||
|
||||
OBJ = OMG.c common.c static.c job.c rwp.c rwalk.c trace.c sumo.c mobility_parser.c hashtable.c client_traci_OMG.c socket_traci_OMG.c storage_traci_OMG.c id_manager.c
|
||||
|
||||
CFLAGS += -m32 -DTEST_OMG
|
||||
|
||||
.PHONY: help staticOMG rwpOMG clean
|
||||
|
||||
help:
|
||||
@echo ' "make staticOMG" to compile the STATIC version'
|
||||
@echo ' "make rwpOMG" to compile the RWP version'
|
||||
@echo ' "make rwalkOMG" to compile the RWALK version'
|
||||
@echo ' "make traceOMG" to compile the TRACE version'
|
||||
@echo ' "make sumoOMG" to compile the SUMO version'
|
||||
@echo ' "make clean" to remove the generated files and restore the original distribution'
|
||||
@echo ' "make OMG" to compile the complete version'
|
||||
|
||||
|
||||
staticOMG: ${OBJstatic}
|
||||
${CC} ${OBJstatic} -o staticOMG $(CFLAGS)
|
||||
|
||||
|
||||
rwpOMG: ${OBJrwp}
|
||||
${CC} ${OBJrwp} -lm -o rwpOMG $(CFLAGS)
|
||||
@#-lm: used to link to math lib
|
||||
|
||||
traceOMG:${OBJtrace}
|
||||
${CC} ${OBJtrace} -lm -o traceOMG $(CFLAGS)
|
||||
|
||||
rwalkOMG: ${OBJrwalk}
|
||||
${CC} ${OBJrwalk} -lm -o rwalkOMG $(CFLAGS)
|
||||
|
||||
sumoOMG: ${OBJsumo}
|
||||
${CC} ${OBJsumo} -lm -o rwalkOMG $(CFLAGS)
|
||||
|
||||
OMG: ${OBJ}
|
||||
${CC} ${OBJ} -lm -o OMG $(CFLAGS)
|
||||
|
||||
clean:
|
||||
@echo "Cleaning"
|
||||
@rm OMG
|
||||
@#rm rwpOMG
|
||||
@#rm rwalkOMG
|
||||
@#rm traceOMG
|
||||
@#rm staticOMG
|
||||
@#rm OMG
|
||||
|
||||
else
|
||||
|
||||
TOP_DIR = ../..
|
||||
OPENAIR1_TOP = ../..
|
||||
OPENAIR2_TOP = ../../../openair2
|
||||
OPENAIR3_TOP = ../../../openair3
|
||||
OPENAIR3 = $(OPENAIR3_DIR)
|
||||
|
||||
CFLAGS += -DPHYSIM -DNODE_RG -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TX=2 -DMAX_MODULES=1 -I/usr/include/X11 #-Wno-packed-bitfield-compat
|
||||
|
||||
|
||||
CFLAGS += -DOPENAIR_LTE -DOPENAIR2 #-DOFDMA_ULSCH -DIFFT_FPGA -DIFFT_FPGA_UE
|
||||
|
||||
#CFLAGS += -DXFORMS
|
||||
|
||||
ifdef DEBUG_PHY
|
||||
CFLAGS += -DDEBUG_PHY
|
||||
endif
|
||||
|
||||
ifdef PDCP_USE_NETLINK
|
||||
CFLAGS += -DPDCP_USE_NETLINK -DLINUX -DDEBUG_CONTROL
|
||||
endif
|
||||
|
||||
include $(OPENAIR1_DIR)/PHY/Makefile.inc
|
||||
include $(OPENAIR1_DIR)/SCHED/Makefile.inc
|
||||
include $(OPENAIR2_DIR)/LAYER2/Makefile.inc
|
||||
include $(OPENAIR1_DIR)/SIMULATION/ETH_TRANSPORT/Makefile.inc
|
||||
|
||||
SIMULATION_OBJS = $(TOP_DIR)/SIMULATION/TOOLS/gauss.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/random_channel.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/rangen_double.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/taus.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/multipath_channel.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/rf.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/adc.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/dac.o
|
||||
|
||||
OBJ = $(PHY_OBJS) $(SIMULATION_OBJS) $(ETHERNET_TRANSPORT_OBJS) $(TOOLS_OBJS) $(SCHED_OBJS) $(STATS_OBJS)
|
||||
|
||||
all: physim
|
||||
|
||||
|
||||
$(OBJ) : %.o : %.c
|
||||
$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -DPHY_CONTEXT=1 -I$(TOP_DIR) $(L2_incl) -o $@ $<
|
||||
|
||||
$(L2_OBJS) : %.o : %.c
|
||||
$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -DMAC_CONTEXT=1 -DPHY_CONTEXT=1 -I$(TOP_DIR) $(L2_incl) -o $@ $<
|
||||
|
||||
physim : $(OBJ) $(L2_OBJS) OMG.c common.c static.c job.c rwp.c rwalk.c hashtable.c mobility_parser.c trace.c -I$(TOP_DIR) $(L2_incl) -o physim $(CFLAGS) $(EXTRA_CFLAGS) $(OBJ) $(L2_OBJS) -lm -lforms -L/usr/local/lib -lforms -lX11 -L/usr/X11R6/lib -lXpm -lblas -lpthread
|
||||
|
||||
clean:
|
||||
rm -f physim
|
||||
rm -f $(OBJ)
|
||||
rm -f $(L2_OBJS)
|
||||
rm -f *.o
|
||||
rm -f *.exe*
|
||||
|
||||
cleanl1:
|
||||
rm -f physim
|
||||
rm -f $(OBJ)
|
||||
rm -f *.o
|
||||
rm -f *.exe
|
||||
cleanl2:
|
||||
rm -f $(L2_OBJS)
|
||||
|
||||
endif
|
||||
|
||||
@@ -37,8 +37,8 @@ unsigned int start_log_GP=0;
|
||||
unsigned int start_log_GP_bg=0;
|
||||
unsigned int start_log_jitter=0;
|
||||
|
||||
#include"otg_kpi.h"
|
||||
#include"otg_externs.h"
|
||||
#include "otg_kpi.h"
|
||||
#include "otg_externs.h"
|
||||
|
||||
extern unsigned char NB_eNB_INST;
|
||||
extern uint16_t NB_UE_INST;
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#ifndef __OTG_RX_SOCKET_H__
|
||||
#define __OTG_RX_SOCKET_H__
|
||||
|
||||
#include"otg.h"
|
||||
#include "otg.h"
|
||||
|
||||
|
||||
//-----------------------begin func proto-------------------
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#include"otg_tx_socket.h"
|
||||
#include "otg_tx_socket.h"
|
||||
#include "otg_vars.h"
|
||||
|
||||
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include"otg.h"
|
||||
#include"otg_tx.h"
|
||||
#include "otg.h"
|
||||
#include "otg_tx.h"
|
||||
|
||||
|
||||
//-----------------------begin func proto-------------------
|
||||
|
||||
@@ -111,14 +111,6 @@ typedef struct gtpv1u_data_s {
|
||||
uint16_t seq_num;
|
||||
uint8_t restart_counter;
|
||||
|
||||
#ifdef GTPU_IN_KERNEL
|
||||
char *interface_name;
|
||||
int interface_index;
|
||||
|
||||
struct iovec *malloc_ring;
|
||||
void *sock_mmap_ring[16];
|
||||
int sock_desc[16]; // indexed by marking
|
||||
#endif
|
||||
} gtpv1u_data_t;
|
||||
|
||||
int
|
||||
|
||||
@@ -102,14 +102,6 @@ typedef struct nr_gtpv1u_data_s {
|
||||
uint16_t seq_num;
|
||||
uint8_t restart_counter;
|
||||
|
||||
#ifdef GTPU_IN_KERNEL
|
||||
char *interface_name;
|
||||
int interface_index;
|
||||
|
||||
struct iovec *malloc_ring;
|
||||
void *sock_mmap_ring[16];
|
||||
int sock_desc[16]; // indexed by marking
|
||||
#endif
|
||||
} nr_gtpv1u_data_t;
|
||||
|
||||
|
||||
|
||||
@@ -57,9 +57,7 @@
|
||||
#define RAU_REMOTE_THIRDPARTY_RADIO_HEAD 2
|
||||
#define MAX_WRITE_THREAD_PACKAGE 10
|
||||
#define MAX_WRITE_THREAD_BUFFER_SIZE 8
|
||||
#ifndef MAX_CARDS
|
||||
#define MAX_CARDS 8
|
||||
#endif
|
||||
#define MAX_CARDS 8
|
||||
|
||||
typedef int64_t openair0_timestamp;
|
||||
typedef volatile int64_t openair0_vtimestamp;
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
# include "targets/RT/USER/lte-softmodem.h"
|
||||
# include "common/ran_context.h"
|
||||
|
||||
#ifdef OPENAIR2
|
||||
#include "sctp_eNB_task.h"
|
||||
#include "x2ap_eNB.h"
|
||||
#include "s1ap_eNB.h"
|
||||
@@ -36,7 +35,6 @@
|
||||
#include "lteRALenb.h"
|
||||
#endif
|
||||
#include "RRC/LTE/rrc_defs.h"
|
||||
#endif
|
||||
# include "f1ap_cu_task.h"
|
||||
# include "f1ap_du_task.h"
|
||||
# include "enb_app.h"
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
# include "targets/RT/USER/lte-softmodem.h"
|
||||
# include "common/ran_context.h"
|
||||
|
||||
#ifdef OPENAIR2
|
||||
#include "sctp_eNB_task.h"
|
||||
#include "x2ap_eNB.h"
|
||||
#include "s1ap_eNB.h"
|
||||
@@ -40,7 +39,6 @@
|
||||
#include "lteRALenb.h"
|
||||
#endif
|
||||
#include "RRC/LTE/rrc_defs.h"
|
||||
#endif
|
||||
# include "f1ap_cu_task.h"
|
||||
# include "f1ap_du_task.h"
|
||||
# include "enb_app.h"
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
# include "create_tasks.h"
|
||||
# include "common/utils/LOG/log.h"
|
||||
|
||||
#ifdef OPENAIR2
|
||||
#include "sctp_eNB_task.h"
|
||||
#include "s1ap_eNB.h"
|
||||
#include "openair3/NAS/UE/nas_ue_task.h"
|
||||
@@ -34,7 +33,6 @@
|
||||
#include "lteRALenb.h"
|
||||
#endif
|
||||
#include "RRC/LTE/rrc_defs.h"
|
||||
#endif
|
||||
# include "enb_app.h"
|
||||
|
||||
int create_tasks_ue(uint32_t ue_nb) {
|
||||
|
||||
@@ -1,248 +0,0 @@
|
||||
# This file gathers compilation directive shared between lte-softmodem and oaisim
|
||||
export COMMON_UTILS_DIR = $(OPENAIR_DIR)/common/utils
|
||||
export UE_NAS_DIR = $(OPENAIR_DIR)/openair3/NAS
|
||||
export S1AP_DIR = $(OPENAIR_DIR)/openair3/S1AP
|
||||
export X2AP_DIR = $(OPENAIR_DIR)/openair2/X2AP
|
||||
export SCTP_DIR = $(OPENAIR_DIR)/openair3/SCTP
|
||||
export UDP_DIR = $(OPENAIR_DIR)/openair3/UDP
|
||||
export GTPV1U_DIR = $(OPENAIR_DIR)/openair3/GTPV1-U
|
||||
export SECU_DIR = $(OPENAIR_DIR)/openair3/SECU
|
||||
|
||||
UE_NAS_OBJ_DIR = $(subst $(OPENAIR_DIR),$(OBJS_DIR),$(UE_NAS_DIR))
|
||||
SECU_OBJ_DIR = $(subst $(OPENAIR_DIR),$(OBJS_DIR),$(SECU_DIR))
|
||||
S1AP_OBJ_DIR = $(subst $(OPENAIR_DIR),$(OBJS_DIR),$(S1AP_DIR))
|
||||
X2AP_OBJ_DIR = $(subst $(OPENAIR_DIR),$(OBJS_DIR),$(X2AP_DIR))
|
||||
SCTP_OBJ_DIR = $(subst $(OPENAIR_DIR),$(OBJS_DIR),$(SCTP_DIR))
|
||||
UDP_OBJ_DIR = $(subst $(OPENAIR_DIR),$(OBJS_DIR),$(UDP_DIR))
|
||||
GTPV1U_OBJ_DIR = $(subst $(OPENAIR_DIR),$(OBJS_DIR),$(GTPV1U_DIR))
|
||||
|
||||
#Export common cflags (between softmodem and oaisim)
|
||||
COMMON_CFLAGS = \
|
||||
-D'FIRMWARE_VERSION="$(SVN_REV) - $(DATE_REV)"' \
|
||||
-Wall \
|
||||
-fno-strict-aliasing \
|
||||
-O2 \
|
||||
-Werror=implicit-function-declaration
|
||||
|
||||
# the code already uses C99 integer type (like int32_t)
|
||||
# switch on full support for C99 + GNU extensions
|
||||
CFLAGS += -std=gnu99
|
||||
|
||||
ITTI_MESSAGES_H = messages_xml.h
|
||||
ITTI_MESSAGES_XML = messages.xml
|
||||
ITTI_MESSAGES_FILE = $(ITTI_DIR)/intertask_interface_types.h
|
||||
|
||||
include $(COMMON_UTILS_DIR)/Makefile.inc
|
||||
include $(OPENAIR_TARGETS)/COMMON/Makefile.inc
|
||||
include $(OPENAIR2_DIR)/NAS/Makefile.inc
|
||||
|
||||
ifeq ($(SECU), 1)
|
||||
ifeq ($(NETTLE_FOUND), 0)
|
||||
@(warning "Nettle library >= 2.5 is not installed on your system, nettle-dev lib needed, continuing with security disabled")
|
||||
SECU=0
|
||||
else
|
||||
ifeq ($(OPENSSL_FOUND), 0)
|
||||
@(warning "openssl library is not installed on your system, openssl lib needed, continuing with security disabled")
|
||||
SECU=0
|
||||
else
|
||||
LIBS += $(OPENSSL_LIBS) $(NETTLE_LIBS)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
CFLAGS += -DJUMBO_FRAME
|
||||
|
||||
ifdef MAX_NUM_CCs
|
||||
CFLAGS += -DMAX_NUM_CCs=$(MAX_NUM_CCs)
|
||||
COMMON_CFLAGS += -DMAX_NUM_CCs=$(MAX_NUM_CCs)
|
||||
else
|
||||
CFLAGS += -DMAX_NUM_CCs=1
|
||||
COMMON_CFLAGS += -DMAX_NUM_CCs=1
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_RAL), 1)
|
||||
CFLAGS += -DENABLE_RAL
|
||||
endif
|
||||
|
||||
ifeq ($(PDCP_USE_NETLINK),1)
|
||||
CFLAGS += -DPDCP_USE_NETLINK
|
||||
endif
|
||||
ifeq ($(LIBCONFIG_LONG),1)
|
||||
CFLAGS += -DLIBCONFIG_LONG
|
||||
endif
|
||||
|
||||
# add R9
|
||||
ifeq ($(USE_MME), R10)
|
||||
COMMON_CFLAGS += -DENABLE_USE_MME
|
||||
ENABLE_ITTI = 1
|
||||
ifeq ($(LINK_ENB_PDCP_TO_GTPV1U), 1)
|
||||
COMMON_CFLAGS += -DLINK_ENB_PDCP_TO_GTPV1U
|
||||
# COMMON_CFLAGS += -I$(UDP_DIR)
|
||||
# COMMON_CFLAGS += -I$(GTPV1U_DIR)
|
||||
# COMMON_CFLAGS += -I$(GTPV1U_DIR)/nw-gtpv1u/shared
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_ITTI),1)
|
||||
COMMON_CFLAGS += -DENABLE_ITTI
|
||||
COMMON_CFLAGS += -I$(OPENAIR1_DIR)
|
||||
COMMON_CFLAGS += -I$(OPENAIR2_DIR)/NAS
|
||||
COMMON_CFLAGS += $(L2_incl)
|
||||
COMMON_CFLAGS += $(UTILS_incl)
|
||||
SHARED_DEPENDENCIES += $(ITTI_MESSAGES_H)
|
||||
endif
|
||||
|
||||
ifeq ($(USE_MME), R10)
|
||||
LIBS += $(UE_NAS_OBJ_DIR)/libuenas.a $(SECU_OBJ_DIR)/libsecu.a
|
||||
LIBS += $(S1AP_OBJ_DIR)/libs1ap.a $(SCTP_OBJ_DIR)/libsctp.a -lsctp -lcrypt
|
||||
LIBS += $(UDP_OBJ_DIR)/libudp.a $(GTPV1U_OBJ_DIR)/libgtpv1u.a
|
||||
|
||||
ifdef X2AP
|
||||
LIBS += $(X2AP_OBJ_DIR)/libx2ap.a
|
||||
SHARED_DEPENDENCIES += $(UE_NAS_OBJ_DIR)/libuenas.a $(SECU_OBJ_DIR)/libsecu.a $(X2AP_OBJ_DIR)/libx2ap.a $(S1AP_OBJ_DIR)/libs1ap.a $(SCTP_OBJ_DIR)/libsctp.a $(UDP_OBJ_DIR)/libudp.a $(GTPV1U_OBJ_DIR)/libgtpv1u.a
|
||||
else
|
||||
SHARED_DEPENDENCIES += $(UE_NAS_OBJ_DIR)/libuenas.a $(SECU_OBJ_DIR)/libsecu.a $(S1AP_OBJ_DIR)/libs1ap.a $(SCTP_OBJ_DIR)/libsctp.a $(UDP_OBJ_DIR)/libudp.a $(GTPV1U_OBJ_DIR)/libgtpv1u.a
|
||||
endif
|
||||
|
||||
COMMON_CFLAGS += -DLOG_NO_THREAD
|
||||
#-DEMIT_ASN_DEBUG
|
||||
|
||||
openair_cn_available := $(shell if [ -d "$(UE_NAS_DIR)" ]; then echo "0" ; else echo "1" ; fi )
|
||||
ifeq ($(openair_cn_available), 0)
|
||||
COMMON_CFLAGS += -DENABLE_NAS_UE_LOGGING
|
||||
COMMON_CFLAGS += -I$(OPENAIR_DIR)/openair3/NAS/EURECOM-NAS/src/api/network
|
||||
COMMON_CFLAGS += -I$(OPENAIR_DIR)/openair3/NAS/EURECOM-NAS/src/include
|
||||
COMMON_CFLAGS += -I$(OPENAIR_DIR)/openair3/NAS/EURECOM-NAS/src/ies
|
||||
COMMON_CFLAGS += -I$(OPENAIR_DIR)/openair3/NAS/EURECOM-NAS/src/emm/msg
|
||||
COMMON_CFLAGS += -I$(OPENAIR_DIR)/openair3/NAS/EURECOM-NAS/src/esm/msg
|
||||
COMMON_CFLAGS += -I$(OPENAIR_DIR)/openair3/NAS/EURECOM-NAS/src/util
|
||||
endif
|
||||
|
||||
UENAS_CFLAGS = $(COMMON_CFLAGS)
|
||||
UENAS_CFLAGS += -I$(SECU_DIR)
|
||||
export UENAS_CFLAGS
|
||||
|
||||
SECU_CFLAGS = $(COMMON_CFLAGS)
|
||||
SECU_CFLAGS += -I$(OPENAIR_DIR)/openair3/COMMON
|
||||
SECU_CFLAGS += -I$(OPENAIR_DIR)/openair3/UTILS
|
||||
SECU_CFLAGS += -I$(SECU_DIR)
|
||||
export SECU_CFLAGS
|
||||
|
||||
COMMON_MME_CFLAGS = -I$(SECU_DIR)
|
||||
COMMON_MME_CFLAGS += -I$(SCTP_DIR)
|
||||
COMMON_MME_CFLAGS += -I$(X2AP_DIR)
|
||||
COMMON_MME_CFLAGS += -I$(S1AP_DIR)
|
||||
COMMON_MME_CFLAGS += -I$(UDP_DIR)
|
||||
COMMON_MME_CFLAGS += -I$(GTPV1U_DIR)
|
||||
|
||||
S1AP_CFLAGS = $(COMMON_CFLAGS) $(COMMON_MME_CFLAGS)
|
||||
S1AP_CFLAGS += -DENB_MODE
|
||||
S1AP_CFLAGS += -I$(TOP_DIR)
|
||||
S1AP_CFLAGS += $(UTIL_incl)
|
||||
export S1AP_CFLAGS
|
||||
|
||||
X2AP_CFLAGS = $(COMMON_CFLAGS)
|
||||
X2AP_CFLAGS += -DENB_MODE
|
||||
X2AP_CFLAGS += -I$(TOP_DIR)
|
||||
X2AP_CFLAGS += $(UTIL_incl)
|
||||
export X2AP_CFLAGS
|
||||
|
||||
UDP_CFLAGS = $(COMMON_CFLAGS) $(COMMON_MME_CFLAGS)
|
||||
UDP_CFLAGS += -DENB_MODE
|
||||
UDP_CFLAGS += -I$(TOP_DIR)
|
||||
UDP_CFLAGS += $(UTIL_incl)
|
||||
UDP_CFLAGS += -I$(OPENAIR_DIR)/openair2/ENB_APP
|
||||
export UDP_CFLAGS
|
||||
|
||||
GTPV1U_CFLAGS = $(COMMON_CFLAGS) $(COMMON_MME_CFLAGS)
|
||||
GTPV1U_CFLAGS += -DENB_MODE
|
||||
GTPV1U_CFLAGS += -I$(TOP_DIR)
|
||||
GTPV1U_CFLAGS += -I$(GTPV1U_DIR)/nw-gtpv1u/include
|
||||
GTPV1U_CFLAGS += -I$(GTPV1U_DIR)/nw-gtpv1u/shared
|
||||
GTPV1U_CFLAGS += -I$(OPENAIR_DIR)/openair2/ENB_APP
|
||||
GTPV1U_CFLAGS += $(UTIL_incl) -I$(OPENAIR3_DIR)/UTILS
|
||||
export GTPV1U_CFLAGS
|
||||
|
||||
GTPV1U_ENB_CFLAGS = $(COMMON_CFLAGS)
|
||||
GTPV1U_ENB_CFLAGS += $(OPENAIR_DIR)/openair2/COMMON
|
||||
GTPV1U_ENB_CFLAGS += -I$(X2AP_DIR)
|
||||
GTPV1U_ENB_CFLAGS += -I$(S1AP_DIR)
|
||||
GTPV1U_ENB_CFLAGS += -I$(UDP_DIR)
|
||||
GTPV1U_ENB_CFLAGS += -I$(GTPV1U_DIR)
|
||||
GTPV1U_ENB_CFLAGS += -DENB_MODE
|
||||
GTPV1U_ENB_CFLAGS += -I$(TOP_DIR)
|
||||
GTPV1U_ENB_CFLAGS += -I$(GTPV1U_DIR)/nw-gtpv1u/include
|
||||
GTPV1U_ENB_CFLAGS += -I$(GTPV1U_DIR)/nw-gtpv1u/shared
|
||||
GTPV1U_ENB_CFLAGS += -I$(OPENAIR_DIR)/openair2/ENB_APP
|
||||
GTPV1U_ENB_CFLAGS += $(UTIL_incl) -I$(OPENAIR3_DIR)/UTILS
|
||||
export GTPV1U_ENB_CFLAGS
|
||||
|
||||
|
||||
$(UE_NAS_OBJ_DIR)/libuenas.a: force_look
|
||||
@$(MAKE) -C $(UE_NAS_DIR) -f Makefile.UE $(UE_NAS_OBJ_DIR)/libuenas.a OUTDIR=$(UE_NAS_OBJ_DIR)
|
||||
$(SECU_OBJ_DIR)/libsecu.a: force_look
|
||||
@$(MAKE) -C $(SECU_DIR) -f Makefile.eNB $(SECU_OBJ_DIR)/libsecu.a OUTDIR=$(SECU_OBJ_DIR)
|
||||
$(X2AP_OBJ_DIR)/libx2ap.a: force_look
|
||||
@$(MAKE) -C $(X2AP_DIR) -f Makefile.inc $(X2AP_OBJ_DIR)/libx2ap.a OUTDIR=$(X2AP_OBJ_DIR)
|
||||
$(S1AP_OBJ_DIR)/libs1ap.a: force_look
|
||||
@$(MAKE) -C $(S1AP_DIR) -f Makefile.eNB $(S1AP_OBJ_DIR)/libs1ap.a OUTDIR=$(S1AP_OBJ_DIR)
|
||||
$(SCTP_OBJ_DIR)/libsctp.a: force_look
|
||||
@$(MAKE) -C $(SCTP_DIR) -f Makefile.eNB $(SCTP_OBJ_DIR)/libsctp.a OUTDIR=$(SCTP_OBJ_DIR)
|
||||
$(UDP_OBJ_DIR)/libudp.a: force_look
|
||||
@$(MAKE) -C $(UDP_DIR) -f Makefile.eNB $(UDP_OBJ_DIR)/libudp.a OUTDIR=$(UDP_OBJ_DIR)
|
||||
$(GTPV1U_OBJ_DIR)/libgtpv1u.a: force_look
|
||||
@$(MAKE) -C $(GTPV1U_DIR) -f Makefile.eNB $(GTPV1U_OBJ_DIR)/libgtpv1u.a OUTDIR=$(GTPV1U_OBJ_DIR)
|
||||
|
||||
OBJ = $(NAS_UE_OBJS) $(SECU_OBJS)
|
||||
endif
|
||||
|
||||
export COMMON_CFLAGS
|
||||
|
||||
ifeq ($(ENABLE_ITTI),1)
|
||||
CFLAGS += $(COMMON_CFLAGS) $(COMMON_MME_CFLAGS) $(TARGETS_COMMON_incl)
|
||||
OBJ += $(TARGETS_COMMON_OBJS)
|
||||
|
||||
gccxml_available = $(shell if [ `gccxml --version | grep GCC-XML -c` = "0" ]; then echo "0" ; else echo "1" ; fi )
|
||||
ifeq ($(gccxml_available), 0)
|
||||
$(error gccxml is missing, please install)
|
||||
endif
|
||||
CFLAGS += -I$(OPENAIR2_DIR)/COMMON -DENABLE_ITTI $(UTILS_incl)
|
||||
endif
|
||||
|
||||
$(ITTI_MESSAGES_XML): $(ITTI_MESSAGES_FILE)
|
||||
@echo "Generating messages.xml ..."
|
||||
@gccxml $(COMMON_CFLAGS) $< -fxml=$@ -I$(ITTI_DIR)
|
||||
@$(CC) -MM $(COMMON_CFLAGS) $< > $(basename $@).d
|
||||
@mv -f $(basename $@).d $(basename $@).d.tmp
|
||||
@sed -e 's|.*:|$@:|' < $(basename $@).d.tmp > $(basename $@).d
|
||||
@sed -e 's/.*://' -e 's/\\$$//' < $(basename $@).d.tmp | fmt -1 | \
|
||||
sed -e 's/^ *//' -e 's/$$/:/' >> $(basename $@).d
|
||||
@rm -f $(basename $@).d.tmp
|
||||
|
||||
$(ITTI_MESSAGES_H): $(ITTI_MESSAGES_XML)
|
||||
@echo "Generating messages_xml.h ..."
|
||||
@sed -e 's/[ ]*//' -e 's/"/\\"/g' -e 's/^/"/' -e 's/$$/\\n"/' $< > $@
|
||||
|
||||
force_look:
|
||||
@true
|
||||
|
||||
common-clean:
|
||||
@$(RM_F_V) $(ITTI_MESSAGES_H) $(ITTI_MESSAGES_XML) $(ITTI_MESSAGES_XML:.xml=.d)
|
||||
@$(MAKE) -C $(LFDS_DIR) -f makefile.linux clean OUTDIR=$(LFDS_OBJ_DIR)
|
||||
@if [ -d $(UE_NAS_OBJ_DIR) ]; then $(MAKE) -C $(UE_NAS_DIR) -f Makefile.UE clean OUTDIR=$(UE_NAS_OBJ_DIR); fi
|
||||
@if [ -d $(SECU_OBJ_DIR) ]; then $(MAKE) -C $(SECU_DIR) -f Makefile.eNB clean OUTDIR=$(SECU_OBJ_DIR); fi
|
||||
@if [ -d $(X2AP_OBJ_DIR) ]; then $(MAKE) -C $(X2AP_DIR) -f Makefile.inc clean OUTDIR=$(X2AP_OBJ_DIR); fi
|
||||
@if [ -d $(S1AP_OBJ_DIR) ]; then $(MAKE) -C $(S1AP_DIR) -f Makefile.eNB clean OUTDIR=$(S1AP_OBJ_DIR); fi
|
||||
@if [ -d $(SCTP_OBJ_DIR) ]; then $(MAKE) -C $(SCTP_DIR) -f Makefile.eNB clean OUTDIR=$(SCTP_OBJ_DIR); fi
|
||||
@if [ -d $(UDP_OBJ_DIR) ]; then $(MAKE) -C $(UDP_DIR) -f Makefile.eNB clean OUTDIR=$(UDP_OBJ_DIR); fi
|
||||
@if [ -d $(GTPV1U_OBJ_DIR) ]; then $(MAKE) -C $(GTPV1U_DIR) -f Makefile.eNB clean OUTDIR=$(GTPV1U_OBJ_DIR); fi
|
||||
|
||||
common-cleanall:
|
||||
@if [ -d $(UE_NAS_OBJ_DIR) ]; then $(MAKE) -C $(UE_NAS_DIR) -f Makefile.UE cleanall OUTDIR=$(UE_NAS_OBJ_DIR); fi
|
||||
@if [ -d $(SECU_OBJ_DIR) ]; then $(MAKE) -C $(SECU_DIR) -f Makefile.eNB cleanall OUTDIR=$(SECU_OBJ_DIR); fi
|
||||
@if [ -d $(X2AP_OBJ_DIR) ]; then $(MAKE) -C $(X2AP_DIR) -f Makefile.inc cleanall OUTDIR=$(X2AP_OBJ_DIR); fi
|
||||
@if [ -d $(S1AP_OBJ_DIR) ]; then $(MAKE) -C $(S1AP_DIR) -f Makefile.eNB cleanall OUTDIR=$(S1AP_OBJ_DIR); fi
|
||||
@if [ -d $(SCTP_OBJ_DIR) ]; then $(MAKE) -C $(SCTP_DIR) -f Makefile.eNB cleanall OUTDIR=$(SCTP_OBJ_DIR); fi
|
||||
@if [ -d $(UDP_OBJ_DIR) ]; then $(MAKE) -C $(UDP_DIR) -f Makefile.eNB cleanall OUTDIR=$(UDP_OBJ_DIR); fi
|
||||
@if [ -d $(GTPV1U_OBJ_DIR) ]; then $(MAKE) -C $(GTPV1U_DIR) -f Makefile.eNB cleanall OUTDIR=$(GTPV1U_OBJ_DIR); fi
|
||||
|
||||
@@ -88,10 +88,6 @@
|
||||
#include "enb_config.h"
|
||||
#include "targets/RT/USER/lte-softmodem.h"
|
||||
|
||||
#ifndef OPENAIR2
|
||||
#include "UTIL/OTG/otg_extern.h"
|
||||
#endif
|
||||
|
||||
#include "s1ap_eNB.h"
|
||||
#include "SIMULATION/ETH_TRANSPORT/proto.h"
|
||||
|
||||
|
||||
@@ -82,10 +82,6 @@ unsigned short config_frames[4] = {2,9,11,13};
|
||||
#include "enb_config.h"
|
||||
//#include "PHY/TOOLS/time_meas.h"
|
||||
|
||||
#ifndef OPENAIR2
|
||||
#include "UTIL/OTG/otg_vars.h"
|
||||
#endif
|
||||
|
||||
|
||||
#include "create_tasks.h"
|
||||
|
||||
|
||||
@@ -2067,7 +2067,6 @@ void init_UE_threads_stub(int inst)
|
||||
}
|
||||
|
||||
|
||||
#ifdef OPENAIR2
|
||||
void fill_ue_band_info(void)
|
||||
{
|
||||
LTE_UE_EUTRA_Capability_t *UE_EUTRA_Capability = UE_rrc_inst[0].UECap->UE_EUTRA_Capability;
|
||||
@@ -2092,7 +2091,6 @@ void fill_ue_band_info(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue,
|
||||
openair0_config_t *openair0_cfg)
|
||||
|
||||
@@ -75,10 +75,6 @@
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
|
||||
#ifndef OPENAIR2
|
||||
#include "UTIL/OTG/otg_vars.h"
|
||||
#endif
|
||||
|
||||
#include "create_tasks.h"
|
||||
#include "system.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user