Merge remote-tracking branch 'origin/develop' into NR_UE_Capabilities
This commit is contained in:
@@ -0,0 +1,712 @@
|
||||
/*! \file oaiori.c
|
||||
* \brief AW2S ORI API isolator
|
||||
* \author Raymond Knopp
|
||||
* \date 2019
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \maintainer: raymond.knopp@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#include <arpa/inet.h>
|
||||
#include <linux/if_packet.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
#include <netinet/ether.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <linux/sysctl.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#include "common_lib.h"
|
||||
#include "ethernet_lib.h"
|
||||
|
||||
#include "ori.h"
|
||||
|
||||
#include "targets/ARCH/COMMON/common_lib.h"
|
||||
|
||||
typedef struct eutra_bandentry_s {
|
||||
int16_t band;
|
||||
uint32_t ul_min;
|
||||
uint32_t ul_max;
|
||||
uint32_t dl_min;
|
||||
uint32_t dl_max;
|
||||
uint32_t N_OFFs_DL;
|
||||
} eutra_bandentry_t;
|
||||
|
||||
typedef struct band_info_s {
|
||||
int nbands;
|
||||
eutra_bandentry_t band_info[100];
|
||||
} band_info_t;
|
||||
|
||||
|
||||
static const eutra_bandentry_t eutra_bandtable[] = {
|
||||
{1, 19200, 19800, 21100, 21700, 0 },
|
||||
{2, 18500, 19100, 19300, 19900, 6000 },
|
||||
{3, 17100, 17850, 18050, 18800, 12000 },
|
||||
{4, 17100, 17550, 21100, 21550, 19500 },
|
||||
{5, 8240, 8490, 8690, 8940, 24000 },
|
||||
{6, 8300, 8400, 8750, 8850, 26500 },
|
||||
{7, 25000, 25700, 26200, 26900, 27500 },
|
||||
{8, 8800, 9150, 9250, 9600, 34500 },
|
||||
{9, 17499, 17849, 18449, 18799, 38000 },
|
||||
{10, 17100, 17700, 21100, 21700, 41500 },
|
||||
{11, 14279, 14529, 14759, 15009, 47500 },
|
||||
{12, 6980, 7160, 7280, 7460, 50100 },
|
||||
{13, 7770, 7870, 7460, 7560, 51800 },
|
||||
{14, 7880, 7980, 7580, 7680, 52800 },
|
||||
{17, 7040, 7160, 7340, 7460, 57300 },
|
||||
{18, 8150, 9650, 8600, 10100, 58500 },
|
||||
{19, 8300, 8450, 8750, 8900, 60000 },
|
||||
{20, 8320, 8620, 7910, 8210, 61500 },
|
||||
{21, 14479, 14629, 14959, 15109, 64500 },
|
||||
{22, 34100, 34900, 35100, 35900, 66000 },
|
||||
{23, 20000, 20200, 21800, 22000, 75000 },
|
||||
{24, 16126, 16605, 15250, 15590, 77000 },
|
||||
{25, 18500, 19150, 19300, 19950, 80400 },
|
||||
{26, 8140, 8490, 8590, 8940, 86900 },
|
||||
{27, 8070, 8240, 8520, 8690, 90400 },
|
||||
{28, 7030, 7580, 7580, 8130, 92100 },
|
||||
{29, 0, 0, 7170, 7280, 96600 },
|
||||
{30, 23050, 23250, 23500, 23600, 97700 },
|
||||
{31, 45250, 34900, 46250, 35900, 98700 },
|
||||
{32, 0, 0, 14520, 14960, 99200 },
|
||||
{33, 19000, 19200, 19000, 19200, 360000},
|
||||
{34, 20100, 20250, 20100, 20250, 362000},
|
||||
{35, 18500, 19100, 18500, 19100, 363500},
|
||||
{36, 19300, 19900, 19300, 19900, 369500},
|
||||
{37, 19100, 19300, 19100, 19300, 375500},
|
||||
{38, 25700, 26200, 25700, 26200, 377500},
|
||||
{39, 18800, 19200, 18800, 19200, 382500},
|
||||
{40, 23000, 24000, 23000, 24000, 386500},
|
||||
{41, 24960, 26900, 24960, 26900, 396500},
|
||||
{42, 34000, 36000, 34000, 36000, 415900},
|
||||
{43, 36000, 38000, 36000, 38000, 435900},
|
||||
{44, 7030, 8030, 7030, 8030, 455900},
|
||||
{45, 14470, 14670, 14470, 14670, 465900},
|
||||
{46, 51500, 59250, 51500, 59250, 467900},
|
||||
{65, 19200, 20100, 21100, 22000, 655360},
|
||||
{66, 17100, 18000, 21100, 22000, 664360},
|
||||
{67, 0, 0, 7380, 7580, 67336 },
|
||||
{68, 6980, 7280, 7530, 7830, 67536 }
|
||||
};
|
||||
|
||||
|
||||
#define BANDTABLE_SIZE (sizeof(eutra_bandtable)/sizeof(eutra_bandentry_t))
|
||||
|
||||
uint32_t to_earfcn_DL_aw2s(int eutra_bandP, long long int dl_CarrierFreq, uint32_t bw) {
|
||||
uint32_t dl_CarrierFreq_by_100k = dl_CarrierFreq / 100000;
|
||||
int i;
|
||||
if (eutra_bandP > 68) { printf("eutra_band %d > 68\n", eutra_bandP); exit(-1);}
|
||||
|
||||
for (i = 0; i < BANDTABLE_SIZE && eutra_bandtable[i].band != eutra_bandP; i++);
|
||||
|
||||
printf("AW2S: band %d, index %d\n",eutra_bandP, i);
|
||||
|
||||
if (i >= BANDTABLE_SIZE) { printf(" i = %d , it will trigger out-of-bounds read.\n",i); exit(-1);}
|
||||
|
||||
if (dl_CarrierFreq_by_100k < eutra_bandtable[i].dl_min) {
|
||||
printf("Band %d, bw %u : DL carrier frequency %u .1 MHz < %u\n",
|
||||
eutra_bandP, bw, dl_CarrierFreq_by_100k,
|
||||
eutra_bandtable[i].dl_min); exit(-1);}
|
||||
|
||||
if(dl_CarrierFreq_by_100k >
|
||||
(eutra_bandtable[i].dl_max - bw)) {
|
||||
printf("Band %d, bw %u : DL carrier frequency %u .1MHz > %d\n",
|
||||
eutra_bandP, bw, dl_CarrierFreq_by_100k,
|
||||
eutra_bandtable[i].dl_max - bw); exit(-1); }
|
||||
printf("AW2S: dl_CarrierFreq_by_100k %d, dl_min %d\n",dl_CarrierFreq_by_100k,eutra_bandtable[i].dl_min);
|
||||
|
||||
return (dl_CarrierFreq_by_100k - eutra_bandtable[i].dl_min +
|
||||
(eutra_bandtable[i].N_OFFs_DL / 10));
|
||||
}
|
||||
|
||||
uint32_t to_earfcn_UL_aw2s(int eutra_bandP, long long int ul_CarrierFreq, uint32_t bw) {
|
||||
uint32_t ul_CarrierFreq_by_100k = ul_CarrierFreq / 100000;
|
||||
int i;
|
||||
if(eutra_bandP >= 69) {
|
||||
printf("eutra_band %d > 68\n", eutra_bandP);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
for (i = 0; i < BANDTABLE_SIZE && eutra_bandtable[i].band != eutra_bandP; i++);
|
||||
|
||||
if(i >= BANDTABLE_SIZE) {printf("i = %d , it will trigger out-of-bounds read.\n",i); exit(-1);}
|
||||
|
||||
if(ul_CarrierFreq_by_100k < eutra_bandtable[i].ul_min) {
|
||||
printf("Band %d, bw %u : UL carrier frequency %u Hz < %u\n",
|
||||
eutra_bandP, bw, ul_CarrierFreq_by_100k,
|
||||
eutra_bandtable[i].ul_min);
|
||||
exit(-1);
|
||||
}
|
||||
if(ul_CarrierFreq_by_100k > (eutra_bandtable[i].ul_max - bw)) {
|
||||
printf("Band %d, bw %u : UL carrier frequency %u Hz > %d\n",
|
||||
eutra_bandP, bw, ul_CarrierFreq_by_100k,
|
||||
eutra_bandtable[i].ul_max - bw);
|
||||
exit(-1);
|
||||
}
|
||||
return (ul_CarrierFreq_by_100k - eutra_bandtable[i].ul_min +
|
||||
((eutra_bandtable[i].N_OFFs_DL + 180000) / 10));
|
||||
}
|
||||
|
||||
int get_mac_addr(const char *iface,unsigned char *mac)
|
||||
|
||||
{
|
||||
int fd;
|
||||
struct ifreq ifr;
|
||||
int ret=0;
|
||||
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
ifr.ifr_addr.sa_family = AF_INET;
|
||||
strncpy(ifr.ifr_name , iface , IFNAMSIZ-1);
|
||||
if (0 == ioctl(fd, SIOCGIFHWADDR, &ifr)) memcpy((void*)mac,(void *)ifr.ifr_hwaddr.sa_data,6);
|
||||
else {
|
||||
printf("No MAC address!\n");
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
printf("%s : %2x:%2x:%2x:%2x:%2x:%2x\n",iface,mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
|
||||
close(fd);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
void cb(void * userData, ORI_IndicationType_e type, ORI_IndicationValue_u value)
|
||||
{
|
||||
printf("============> Got indication %s\n", ORI_IndicationType_Print(type));
|
||||
if(type == ORI_IndicationType_ObjectStateChange)
|
||||
{
|
||||
ORI_Object_s * obj = value.objectStateChange.object;
|
||||
printf("State change for %s:%d -> %s : %s\n", ORI_ObjectType_Print(obj->typeRef.type), obj->instanceNumber,
|
||||
ORI_StateType_Print(value.objectStateChange.stateType),
|
||||
value.objectStateChange.stateType == ORI_StateType_AST ? ORI_AST_Print(obj->ast) : ORI_FST_Print(obj->fst));
|
||||
}
|
||||
else if(type == ORI_IndicationType_FaultChange)
|
||||
{
|
||||
ORI_Object_s * obj = value.faultChange.object;
|
||||
ORI_Fault_s * fault = value.faultChange.fault;
|
||||
printf("Fault change for %s:%d -> %s : %s\n", ORI_ObjectType_Print(obj->typeRef.type), obj->instanceNumber,
|
||||
ORI_FaultType_Print(value.faultChange.faultType),
|
||||
ORI_FaultState_Print(fault->state));
|
||||
if(fault->state == ORI_FaultState_Active)
|
||||
{
|
||||
printf("\t Fault severity: %s\n", ORI_FaultSeverity_Print(fault->severity));
|
||||
printf("\t Timestamp: %s\n", fault->timestamp);
|
||||
printf("\t Description: %s\n", fault->desc);
|
||||
}
|
||||
}
|
||||
printf("<============\n");
|
||||
}
|
||||
|
||||
int aw2s_oricleanup(openair0_device *device) {
|
||||
|
||||
ORI_s * ori = (ORI_s*)device->thirdparty_priv;
|
||||
|
||||
ORI_Disconnect(ori);
|
||||
ORI_Free(ori);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
int aw2s_startstreaming(openair0_device *device) {
|
||||
|
||||
ORI_s * ori = (ORI_s*)device->thirdparty_priv;
|
||||
ORI_Result_e result;
|
||||
ORI_Result_e RE_result;
|
||||
|
||||
openair0_config_t *openair0_cfg = device->openair0_cfg;
|
||||
|
||||
ORI_Object_s *tx0= ORI_FindObject(ori, openair0_cfg->duplex_mode == duplex_mode_FDD ? ORI_ObjectType_TxEUtraFDD :ORI_ObjectType_TxEUtraTDD, 0, NULL);
|
||||
ORI_Object_s *tx1= (openair0_cfg->tx_num_channels > 1) ? ORI_FindObject(ori, openair0_cfg->duplex_mode == duplex_mode_FDD ?ORI_ObjectType_TxEUtraFDD : ORI_ObjectType_TxEUtraTDD, 1, NULL) : NULL;
|
||||
ORI_Object_s *rx0= ORI_FindObject(ori, openair0_cfg->duplex_mode == duplex_mode_FDD ?ORI_ObjectType_RxEUtraFDD : ORI_ObjectType_RxEUtraTDD, 0, NULL);
|
||||
ORI_Object_s *rx1= (openair0_cfg->rx_num_channels > 1) ? ORI_FindObject(ori, openair0_cfg->duplex_mode == duplex_mode_FDD ?ORI_ObjectType_RxEUtraFDD : ORI_ObjectType_RxEUtraTDD, 1, NULL) : NULL;
|
||||
ORI_Object_s *link= ORI_FindObject(ori, ORI_ObjectType_ORILink, 0, NULL);
|
||||
|
||||
if (tx0 == NULL || (tx1 == NULL && openair0_cfg->tx_num_channels > 1) || rx0 == NULL || (rx1 == NULL && openair0_cfg->rx_num_channels > 1) || link == NULL) return (-1);
|
||||
|
||||
/*******************************************************************
|
||||
* UNLOCK Link
|
||||
*******************************************************************/
|
||||
|
||||
|
||||
result = ORI_ObjectStateModification(ori, link, ORI_AST_Unlocked, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectStateModify failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
* UNLOCK TX0
|
||||
*******************************************************************/
|
||||
|
||||
|
||||
/* Put Tx0 into service */
|
||||
result = ORI_ObjectStateModification(ori, tx0, ORI_AST_Unlocked, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectStateModify failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectStateModify: %s\n", ORI_Result_Print(RE_result));
|
||||
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* UNLOCK TX1
|
||||
*******************************************************************/
|
||||
|
||||
if (tx1) {
|
||||
printf("\n\n\n========================================================\n");
|
||||
|
||||
/* Put Tx1 into service */
|
||||
result = ORI_ObjectStateModification(ori, tx1, ORI_AST_Unlocked, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectStateModify failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectStateModify: %s\n", ORI_Result_Print(RE_result));
|
||||
}
|
||||
/*******************************************************************
|
||||
* UNLOCK RX0
|
||||
*******************************************************************/
|
||||
|
||||
printf("\n\n\n========================================================\n");
|
||||
|
||||
/* Put Rx0 into service */
|
||||
result = ORI_ObjectStateModification(ori, rx0, ORI_AST_Unlocked, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectStateModify failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectStateModify: %s\n", ORI_Result_Print(RE_result));
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* UNLOCK RX1
|
||||
*******************************************************************/
|
||||
if (rx1) {
|
||||
printf("\n\n\n========================================================\n");
|
||||
|
||||
/* Put Rx1 into service */
|
||||
result = ORI_ObjectStateModification(ori, rx1, ORI_AST_Unlocked, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectStateModify failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectStateModify: %s\n", ORI_Result_Print(RE_result));
|
||||
}
|
||||
|
||||
while (rx0->fst != ORI_FST_Operational ||
|
||||
(openair0_cfg->rx_num_channels > 1 && rx1->fst != ORI_FST_Operational) ||
|
||||
tx0->fst != ORI_FST_Operational ||
|
||||
(openair0_cfg->tx_num_channels > 1 && tx1->fst != ORI_FST_Operational))
|
||||
{}
|
||||
|
||||
// test RX interface
|
||||
uint64_t TS;
|
||||
char temp_rx[1024] __attribute__((aligned(32)));
|
||||
int aid,r0=0,r1=(openair0_cfg->rx_num_channels > 1) ? 0 : 1;
|
||||
int i;
|
||||
int Npackets=1024000;
|
||||
for (i=0;i<Npackets;i++) {
|
||||
device->trx_read_func2(device,
|
||||
(openair0_timestamp*)&TS,
|
||||
(void*)temp_rx,
|
||||
256,
|
||||
&aid);
|
||||
if (aid == 0) r0=1;
|
||||
if (aid == 1) r1=1;
|
||||
}
|
||||
if (r0==1 && r1==1) printf("Streaming started, returning to OAI\n");
|
||||
else {
|
||||
printf("Didn't get anything from one antenna port after %d packets %d,%d\n",Npackets,r0,r1);
|
||||
return(-1);
|
||||
}
|
||||
return(0);
|
||||
|
||||
}
|
||||
int aw2s_oriinit(openair0_device *device) {
|
||||
|
||||
|
||||
ORI_s * ori;
|
||||
ORI_Result_e result;
|
||||
ORI_Result_e RE_result;
|
||||
ORI_Object_s * objects[100];
|
||||
uint32_t numObjects;
|
||||
uint32_t i;
|
||||
|
||||
eth_params_t *eth_params = device->eth_params;
|
||||
|
||||
openair0_config_t *openair0_cfg = device->openair0_cfg;
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* CREATION AND CONNECTION
|
||||
*******************************************************************/
|
||||
|
||||
printf("Initializing the ORI control interface\n");
|
||||
|
||||
/* Create context */
|
||||
ori = ORI_Create();
|
||||
if(!ori)
|
||||
{
|
||||
printf("Failed to create ORI context\n");
|
||||
return -1;
|
||||
}
|
||||
device->thirdparty_priv = (void *)ori;
|
||||
ori->userData = (void *)ori;
|
||||
ori->indicationCallback = cb;
|
||||
|
||||
/* Connect... */
|
||||
printf("Trying to connect to AW2S device on %s : %d\n",eth_params->remote_addr, eth_params->remote_portc);
|
||||
result = ORI_Connect(ori, eth_params->remote_addr, eth_params->remote_portc, 3000, 0);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_Connect failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* First health check */
|
||||
result = ORI_HealthCheck(ori, 6000, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_HealthCheck failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_HealthCheck: %s\n", ORI_Result_Print(RE_result));
|
||||
|
||||
/* Set RE time */
|
||||
result = ORI_SetTime(ori, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_SetTime failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_SetTime: %s\n", ORI_Result_Print(RE_result));
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* SOFTWARE PARAMETERS ALIGNMENT
|
||||
*******************************************************************/
|
||||
|
||||
/* Report all current objects parameters */
|
||||
result = ORI_ObjectParamReport(ori, NULL, 0, ORI_ObjectParam_All, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectParamReport failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("ORI_ObjectParamReport: %s\n", ORI_Result_Print(RE_result));
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* TX PATHS CREATION
|
||||
*******************************************************************/
|
||||
|
||||
/* Prepare parameters */
|
||||
ORI_ObjectTypeRef_s txTypeRef = { NULL, openair0_cfg->duplex_mode == duplex_mode_FDD ? ORI_ObjectType_TxEUtraFDD : ORI_ObjectType_TxEUtraTDD};
|
||||
ORI_ObjectParams_u txParams;
|
||||
ORI_ObjectParam_e txParamList[9];
|
||||
ORI_Result_e txParamResult[9];
|
||||
int num_txparams;
|
||||
|
||||
if (openair0_cfg->duplex_mode == duplex_mode_FDD) {
|
||||
txParamList[0] = ORI_ObjectParam_SigPath_antPort;
|
||||
txParamList[1] = ORI_ObjectParam_SigPath_axcW;
|
||||
txParamList[2] = ORI_ObjectParam_SigPath_axcB;
|
||||
txParamList[3] = ORI_ObjectParam_SigPath_chanBW;
|
||||
txParamList[4] = ORI_ObjectParam_SigPath_earfcn;
|
||||
txParamList[5] = ORI_ObjectParam_TxSigPath_maxTxPwr;
|
||||
num_txparams = 6;
|
||||
}
|
||||
else {
|
||||
txParamList[0] = ORI_ObjectParam_SigPath_antPort;
|
||||
txParamList[1] = ORI_ObjectParam_SigPath_axcW;
|
||||
txParamList[2] = ORI_ObjectParam_SigPath_axcB;
|
||||
txParamList[3] = ORI_ObjectParam_SigPath_chanBW;
|
||||
txParamList[4] = ORI_ObjectParam_SigPath_earfcn;
|
||||
txParamList[5] = ORI_ObjectParam_TxSigPath_maxTxPwr;
|
||||
txParamList[6] = ORI_ObjectParam_SigPath_tddULDLConfig;
|
||||
txParamList[7] = ORI_ObjectParam_SigPath_tddSpecialSFConfig;
|
||||
txParamList[8] = ORI_ObjectParam_TxSigPath_tddCPLengthDL;
|
||||
num_txparams = 9;
|
||||
}
|
||||
|
||||
|
||||
/* Create tx0 */
|
||||
ORI_Object_s * tx0;
|
||||
printf("AW2S: duplex_mode %d, tx_bw %f, rx_bw %f\n",openair0_cfg->duplex_mode,openair0_cfg->tx_bw,openair0_cfg->rx_bw);
|
||||
if (openair0_cfg->duplex_mode == duplex_mode_FDD) {
|
||||
txParams.TxEUtraFDD.antPort = ORI_FindObject(ori, ORI_ObjectType_AntennaPort, 0, NULL);
|
||||
txParams.TxEUtraFDD.axcW = 1;
|
||||
txParams.TxEUtraFDD.axcB = 0;
|
||||
txParams.TxEUtraFDD.chanBW = openair0_cfg->tx_bw/100e3;
|
||||
txParams.TxEUtraFDD.earfcn = 3350;
|
||||
txParams.TxEUtraFDD.maxTxPwr = -100;
|
||||
}
|
||||
else if (openair0_cfg->duplex_mode == duplex_mode_TDD) {
|
||||
txParams.TxEUtraTDD.antPort = ORI_FindObject(ori, ORI_ObjectType_AntennaPort, 0, NULL);
|
||||
txParams.TxEUtraTDD.axcW = 1;
|
||||
txParams.TxEUtraTDD.axcB = 0;
|
||||
txParams.TxEUtraTDD.chanBW = openair0_cfg->tx_bw/100e3;
|
||||
txParams.TxEUtraTDD.earfcn = to_earfcn_DL_aw2s(38,(long long int)openair0_cfg->tx_freq[0],txParams.TxEUtraTDD.chanBW);
|
||||
txParams.TxEUtraTDD.maxTxPwr = 430-((int)openair0_cfg->tx_gain[0]*10);
|
||||
txParams.TxEUtraTDD.tddULDLConfig = 1;
|
||||
txParams.TxEUtraTDD.tddSpecialSFConfig = 0;
|
||||
txParams.TxEUtraTDD.tddCPLengthDL = ORI_tddCPLength_Normal;
|
||||
|
||||
printf("AW2S: Configuring for TDD, EARFCN %u, Power %d, BW %d\n",
|
||||
txParams.TxEUtraTDD.earfcn,txParams.TxEUtraTDD.maxTxPwr,txParams.TxEUtraTDD.chanBW);
|
||||
}
|
||||
else {
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
result = ORI_ObjectCreation(ori, txTypeRef, txParams, txParamList, num_txparams, txParamResult, &tx0, &RE_result);
|
||||
if(RE_result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectCreation (txParams0.TxEUtraFDD/TDD) failed with error: %s (%s,%s,%s,%s,%s,%s,%s,%s,%s\n", ORI_Result_Print(result),
|
||||
ORI_Result_Print(txParamResult[0]),
|
||||
ORI_Result_Print(txParamResult[1]),
|
||||
ORI_Result_Print(txParamResult[2]),
|
||||
ORI_Result_Print(txParamResult[3]),
|
||||
ORI_Result_Print(txParamResult[4]),
|
||||
ORI_Result_Print(txParamResult[5]),
|
||||
ORI_Result_Print(txParamResult[6]),
|
||||
ORI_Result_Print(txParamResult[7]),
|
||||
ORI_Result_Print(txParamResult[8]));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectCreation (txParams0.TxEUtraFDD/TDD): %s\n", ORI_Result_Print(RE_result));
|
||||
|
||||
|
||||
/* Create tx1 */
|
||||
if (openair0_cfg->tx_num_channels > 1) {
|
||||
ORI_Object_s * tx1;
|
||||
if (openair0_cfg->duplex_mode ==duplex_mode_FDD) txParams.TxEUtraFDD.antPort = ORI_FindObject(ori, ORI_ObjectType_AntennaPort, 1, NULL);
|
||||
else txParams.TxEUtraTDD.antPort = ORI_FindObject(ori, ORI_ObjectType_AntennaPort, 1, NULL);
|
||||
result = ORI_ObjectCreation(ori, txTypeRef, txParams, txParamList, num_txparams, txParamResult, &tx1, &RE_result);
|
||||
if(RE_result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectCreation (txParams1.TxEUtraFDD/TDD) failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectCreation (txParams1.TxEUtraFDD/TDD): %s\n", ORI_Result_Print(RE_result));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* RX PATHS CREATION
|
||||
*******************************************************************/
|
||||
|
||||
/* Prepare parameters */
|
||||
ORI_ObjectTypeRef_s rxTypeRef = { NULL, openair0_cfg->duplex_mode == duplex_mode_FDD ? ORI_ObjectType_RxEUtraFDD : ORI_ObjectType_RxEUtraTDD};
|
||||
ORI_ObjectParams_u rxParams,rxParams1;
|
||||
ORI_ObjectParam_e rxParamList[8] = { ORI_ObjectParam_SigPath_antPort, ORI_ObjectParam_SigPath_axcW, ORI_ObjectParam_SigPath_axcB,
|
||||
ORI_ObjectParam_SigPath_chanBW, ORI_ObjectParam_SigPath_earfcn };
|
||||
ORI_Result_e rxParamResult[8];
|
||||
int num_rxparams = 5;
|
||||
if (openair0_cfg->duplex_mode == duplex_mode_TDD) {
|
||||
rxParamList[5] = ORI_ObjectParam_SigPath_tddULDLConfig;
|
||||
rxParamList[6] = ORI_ObjectParam_SigPath_tddSpecialSFConfig;
|
||||
rxParamList[7] = ORI_ObjectParam_RxSigPath_tddCPLengthUL;
|
||||
num_rxparams = 8;
|
||||
}
|
||||
/* Create rx0 */
|
||||
ORI_Object_s * rx0;
|
||||
if (openair0_cfg->duplex_mode == duplex_mode_FDD) {
|
||||
rxParams.RxEUtraFDD.antPort = ORI_FindObject(ori, ORI_ObjectType_AntennaPort, 0, NULL);
|
||||
rxParams.RxEUtraFDD.axcW = 1;
|
||||
rxParams.RxEUtraFDD.axcB = 0;
|
||||
rxParams.RxEUtraFDD.chanBW = 200;
|
||||
rxParams.RxEUtraFDD.earfcn = 21350;
|
||||
result = ORI_ObjectCreation(ori, rxTypeRef, rxParams, rxParamList, num_rxparams, rxParamResult, &rx0, &RE_result);
|
||||
}
|
||||
else {
|
||||
rxParams.RxEUtraTDD.antPort = ORI_FindObject(ori, ORI_ObjectType_AntennaPort, 0, NULL);
|
||||
rxParams.RxEUtraTDD.axcW = 1;
|
||||
rxParams.RxEUtraTDD.axcB = 0;
|
||||
rxParams.RxEUtraTDD.chanBW = txParams.TxEUtraTDD.chanBW;
|
||||
rxParams.RxEUtraTDD.earfcn = txParams.TxEUtraTDD.earfcn;
|
||||
rxParams.RxEUtraTDD.tddULDLConfig = 1;
|
||||
rxParams.RxEUtraTDD.tddSpecialSFConfig = 1;
|
||||
rxParams.RxEUtraTDD.tddCPLengthUL = ORI_tddCPLength_Normal;
|
||||
|
||||
printf("AW2S: Creating RX0 for EARFCN %d\n",rxParams.RxEUtraTDD.earfcn);
|
||||
|
||||
result = ORI_ObjectCreation(ori, rxTypeRef, rxParams, rxParamList, num_rxparams, rxParamResult, &rx0, &RE_result);
|
||||
|
||||
}
|
||||
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectCreation (rxParams0.RxEUtraFDD/TDD) failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectCreation (rxParams0.RxEUtraFDD/TDD): %s\n", ORI_Result_Print(RE_result));
|
||||
|
||||
if (openair0_cfg->rx_num_channels > 1) {
|
||||
/* Create rx1 */
|
||||
ORI_Object_s * rx1;
|
||||
memcpy((void*)&rxParams1,(void*)&rxParams,sizeof(rxParams));
|
||||
if (openair0_cfg->duplex_mode == duplex_mode_FDD) rxParams1.RxEUtraFDD.antPort = ORI_FindObject(ori, ORI_ObjectType_AntennaPort, 1, NULL);
|
||||
else rxParams1.RxEUtraTDD.antPort = ORI_FindObject(ori, ORI_ObjectType_AntennaPort, 1, NULL);
|
||||
|
||||
result = ORI_ObjectCreation(ori, rxTypeRef, rxParams1, rxParamList, num_rxparams, rxParamResult, &rx1, &RE_result);
|
||||
|
||||
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectCreation (rxParams1.RxEUtraFDD/TDD) failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectCreation (rxParams1.RxEUtraFDD/TDD): %s\n", ORI_Result_Print(RE_result));
|
||||
}
|
||||
|
||||
/* Create link */
|
||||
|
||||
ORI_ObjectParams_u linkParams;
|
||||
ORI_ObjectParam_e linkParamList[3] = {ORI_ObjectParam_ORILink_AWS_remoteMAC, ORI_ObjectParam_ORILink_AWS_remoteIP,ORI_ObjectParam_ORILink_AWS_remoteUdpPort};
|
||||
ORI_Result_e linkParamResult[3];
|
||||
|
||||
ORI_Object_s *link= ORI_FindObject(ori, ORI_ObjectType_ORILink, 0, NULL);
|
||||
linkParams.ORILink.AWS_remoteUdpPort = eth_params->my_portd;
|
||||
|
||||
|
||||
if (get_mac_addr(eth_params->local_if_name,linkParams.ORILink.AWS_remoteMAC) < 0) return(-1);
|
||||
inet_pton(AF_INET,eth_params->my_addr,(struct in_addr*)linkParams.ORILink.AWS_remoteIP);
|
||||
result = ORI_ObjectParamModify(ori,link,linkParams,linkParamList,3,linkParamResult,&RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectParamModify (linkParams) failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
result = ORI_ObjectStateModification(ori, link, ORI_AST_Locked, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectStateModify failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("ORI_ObjectParamModify (linkParams): %s (%d,%d,%d)\n", ORI_Result_Print(RE_result),linkParamResult[0],linkParamResult[1],linkParamResult[2]);
|
||||
|
||||
/*******************************************************************
|
||||
* FULL OBJECT PARAMETERS UPDATE
|
||||
*******************************************************************/
|
||||
|
||||
printf("\n\n\n========================================================\n");
|
||||
|
||||
result = ORI_ObjectParamReport(ori, NULL, 0, ORI_ObjectParam_All, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectParamReport failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectParamReport: %s\n", ORI_Result_Print(RE_result));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* FULL OBJECT STATES UPDATE
|
||||
*******************************************************************/
|
||||
|
||||
printf("\n\n\n========================================================\n");
|
||||
|
||||
result = ORI_ObjectStateReport(ori, NULL, 0, ORI_StateType_All, ORI_EventDrivenReport_True, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectStateReport failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectStateReport: %s\n", ORI_Result_Print(RE_result));
|
||||
|
||||
/* Print reported states for all objects (some objects have non-applicable states though) */
|
||||
numObjects = ORI_GetAllObjects(ori, objects, 100, NULL);
|
||||
for(i=0; i<numObjects; i++)
|
||||
printf("%s:%d -> %s / %s\n", ORI_ObjectType_Print(objects[i]->typeRef.type), objects[i]->instanceNumber, ORI_AST_Print(objects[i]->ast), ORI_FST_Print(objects[i]->fst));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* FULL OBJECT FAULTS UPDATE
|
||||
*******************************************************************/
|
||||
|
||||
printf("\n\n\n========================================================\n");
|
||||
|
||||
result = ORI_ObjectFaultReport(ori, NULL, 0, ORI_EventDrivenReport_True, &RE_result);
|
||||
if(result != ORI_Result_SUCCESS)
|
||||
{
|
||||
printf("ORI_ObjectFaultReport failed with error: %s\n", ORI_Result_Print(result));
|
||||
aw2s_oricleanup(device);
|
||||
return -1;
|
||||
}
|
||||
printf("ORI_ObjectFaultReport: %s\n", ORI_Result_Print(RE_result));
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* PRINT STATES
|
||||
*******************************************************************/
|
||||
|
||||
printf("\n\n\n========================================================\n");
|
||||
|
||||
/* Due to event driven reporting set to "true", the states modifications of the objects should be reflected back into the model. Print states for all objects (some objects have non-applicable states though) */
|
||||
numObjects = ORI_GetAllObjects(ori, objects, 100, NULL);
|
||||
for(i=0; i<numObjects; i++)
|
||||
printf("%s:%d -> %s / %s\n", ORI_ObjectType_Print(objects[i]->typeRef.type), objects[i]->instanceNumber, ORI_AST_Print(objects[i]->ast), ORI_FST_Print(objects[i]->fst));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int transport_init(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * eth_params ) {
|
||||
|
||||
|
||||
device->thirdparty_init = aw2s_oriinit;
|
||||
device->thirdparty_cleanup = aw2s_oricleanup;
|
||||
device->thirdparty_startstreaming = aw2s_startstreaming;
|
||||
|
||||
return(0);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
||||
Active_gNBs = ( "gNB-OAI");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -7,7 +7,7 @@ gNBs =
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_name = "gNB-Eurecom-5GNRBox";
|
||||
gNB_name = "gNB-OAI";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
@@ -204,7 +204,7 @@ gNBs =
|
||||
};
|
||||
|
||||
|
||||
////////// MME parameters:
|
||||
////////// AMF parameters:
|
||||
amf_ip_address = ( { ipv4 = "192.168.70.132";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
@@ -226,60 +226,61 @@ gNBs =
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
ulsch_max_slots_inactivity = 10;
|
||||
pusch_TargetSNRx10 = 150;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
}
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 150;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
pusch_proc_threads = 8;
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 150;
|
||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||
}
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
pusch_proc_threads = 8;
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 150;
|
||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [41];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
clock_src = "internal";
|
||||
}
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [41];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
clock_src = "internal";
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
serveraddr = "server";
|
||||
serverport = "4043";
|
||||
options = (); #("saviq"); or/and "chanmod"
|
||||
modelname = "AWGN";
|
||||
IQfile = "/tmp/rfsimulator.iqs";
|
||||
serveraddr = "server";
|
||||
serverport = "4043";
|
||||
options = (); #("saviq"); or/and "chanmod"
|
||||
modelname = "AWGN";
|
||||
IQfile = "/tmp/rfsimulator.iqs";
|
||||
};
|
||||
|
||||
security = {
|
||||
@@ -299,23 +300,23 @@ security = {
|
||||
drb_integrity = "no";
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="info";
|
||||
mac_log_verbosity ="high";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="info";
|
||||
rrc_log_verbosity ="medium";
|
||||
ngap_log_level ="debug";
|
||||
ngap_log_verbosity ="medium";
|
||||
};
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="info";
|
||||
mac_log_verbosity ="high";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="info";
|
||||
rrc_log_verbosity ="medium";
|
||||
ngap_log_level ="debug";
|
||||
ngap_log_verbosity ="medium";
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,323 @@
|
||||
Active_gNBs = ( "gNB-OAI");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({
|
||||
mcc = 208;
|
||||
mnc = 99;
|
||||
mnc_length = 2;
|
||||
snssaiList = (
|
||||
{
|
||||
sst = 1;
|
||||
sd = 0x1; // 0 false, else true
|
||||
},
|
||||
{
|
||||
sst = 1;
|
||||
sd = 0x112233; // 0 false, else true
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
nr_cellid = 12345678L;
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 2;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
controlResourceSetZero = 11;
|
||||
searchSpaceZero = 0;
|
||||
}
|
||||
);
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
physCellId = 0;
|
||||
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68
|
||||
absoluteFrequencySSB = 621312; # 641280
|
||||
dl_frequencyBand = 78;
|
||||
# this is 3300.60 MHz
|
||||
dl_absoluteFrequencyPointA = 620040; # 640008
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 106;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
# this is RBstart=27,L=48 (275*(L-1))+RBstart
|
||||
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 11;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
#pdsch-ConfigCommon
|
||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||
initialDLBWPk0_0 = 0; #for DL slot
|
||||
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
|
||||
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
|
||||
|
||||
initialDLBWPk0_1 = 0; #for mixed slot
|
||||
initialDLBWPmappingType_1 = 0;
|
||||
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 78;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 106;
|
||||
pMax = 20;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 28875;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 98;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 12;
|
||||
preambleReceivedTargetPower = -104;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 6;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 1;
|
||||
#ra_ReponseWindow
|
||||
#1,2,4,8,10,20,40,80
|
||||
ra_ResponseWindow = 4;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 1,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
# pusch-ConfigCommon (up to 16 elements)
|
||||
initialULBWPk2_0 = 2; # used for UL slot
|
||||
initialULBWPmappingType_0 = 1
|
||||
initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13
|
||||
|
||||
initialULBWPk2_1 = 2; # used for mixed slot
|
||||
initialULBWPmappingType_1 = 1;
|
||||
initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4
|
||||
|
||||
initialULBWPk2_2 = 7; # used for Msg.3 during RA
|
||||
initialULBWPmappingType_2 = 1;
|
||||
initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 40;
|
||||
p0_nominal = -70;
|
||||
# ssb_PositionsInBurs_BitmapPR
|
||||
# 1=short, 2=medium, 3=long
|
||||
ssb_PositionsInBurst_PR = 2;
|
||||
ssb_PositionsInBurst_Bitmap = 1;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 1;
|
||||
|
||||
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 1;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 6;
|
||||
nrofDownlinkSlots = 7;
|
||||
nrofDownlinkSymbols = 6;
|
||||
nrofUplinkSlots = 2;
|
||||
nrofUplinkSymbols = 4;
|
||||
|
||||
ssPBCH_BlockPower = -25;
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
|
||||
|
||||
////////// AMF parameters:
|
||||
amf_ip_address = ( { ipv4 = "192.168.70.132";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
|
||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
|
||||
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
|
||||
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
|
||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
#pusch_TargetSNRx10 = 150;
|
||||
#pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
pusch_proc_threads = 4;
|
||||
prach_dtx_threshold = 120;
|
||||
#pucch0_dtx_threshold = 120;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 2
|
||||
nb_rx = 2
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [78];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||
bf_weights = [0x00007fff, 0x0000];
|
||||
#clock_src = "internal";
|
||||
sdr_addrs = "mgmt_addr=192.168.10.2,addr=192.168.10.2,clock_source=internal,time_source=internal"
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
serveraddr = "server";
|
||||
serverport = "4043";
|
||||
options = (); #("saviq"); or/and "chanmod"
|
||||
modelname = "AWGN";
|
||||
IQfile = "/tmp/rfsimulator.iqs";
|
||||
};
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nea0, nea1, nea2, nea3
|
||||
ciphering_algorithms = ( "nea0" );
|
||||
|
||||
# preferred integrity algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nia0, nia1, nia2, nia3
|
||||
integrity_algorithms = ( "nia2", "nia0" );
|
||||
|
||||
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||
drb_ciphering = "yes";
|
||||
drb_integrity = "no";
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="info";
|
||||
mac_log_verbosity ="high";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="info";
|
||||
rrc_log_verbosity ="medium";
|
||||
ngap_log_level ="debug";
|
||||
ngap_log_verbosity ="medium";
|
||||
f1ap_log_level ="debug";
|
||||
f1ap_log_verbosity ="medium";
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
||||
Active_gNBs = ( "gNB-OAI");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
@@ -7,7 +7,7 @@ gNBs =
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_name = "gNB-Eurecom-5GNRBox";
|
||||
gNB_name = "gNB-OAI";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
@@ -204,7 +204,7 @@ gNBs =
|
||||
};
|
||||
|
||||
|
||||
////////// MME parameters:
|
||||
////////// AMF parameters:
|
||||
amf_ip_address = ( { ipv4 = "192.168.70.132";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
@@ -226,60 +226,61 @@ gNBs =
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
ulsch_max_slots_inactivity = 10;
|
||||
pusch_TargetSNRx10 = 150;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
}
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 150;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
pusch_proc_threads = 8;
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 150;
|
||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||
}
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
pusch_proc_threads = 8;
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 150;
|
||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [78];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
clock_src = "internal";
|
||||
}
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [78];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
clock_src = "internal";
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
serveraddr = "server";
|
||||
serverport = "4043";
|
||||
options = (); #("saviq"); or/and "chanmod"
|
||||
modelname = "AWGN";
|
||||
IQfile = "/tmp/rfsimulator.iqs";
|
||||
serveraddr = "server";
|
||||
serverport = "4043";
|
||||
options = (); #("saviq"); or/and "chanmod"
|
||||
modelname = "AWGN";
|
||||
IQfile = "/tmp/rfsimulator.iqs";
|
||||
};
|
||||
|
||||
security = {
|
||||
@@ -299,23 +300,23 @@ security = {
|
||||
drb_integrity = "no";
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="info";
|
||||
mac_log_verbosity ="high";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="info";
|
||||
rrc_log_verbosity ="medium";
|
||||
ngap_log_level ="debug";
|
||||
ngap_log_verbosity ="medium";
|
||||
};
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="info";
|
||||
mac_log_verbosity ="high";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="info";
|
||||
rrc_log_verbosity ="medium";
|
||||
ngap_log_level ="debug";
|
||||
ngap_log_verbosity ="medium";
|
||||
};
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -1300,13 +1300,13 @@ void fill_rf_config(RU_t *ru,
|
||||
if (fp->threequarter_fs) {
|
||||
cfg->sample_rate=23.04e6;
|
||||
cfg->samples_per_frame = 230400;
|
||||
cfg->tx_bw = 10e6;
|
||||
cfg->rx_bw = 10e6;
|
||||
cfg->tx_bw = 20e6;
|
||||
cfg->rx_bw = 20e6;
|
||||
} else {
|
||||
cfg->sample_rate=30.72e6;
|
||||
cfg->samples_per_frame = 307200;
|
||||
cfg->tx_bw = 10e6;
|
||||
cfg->rx_bw = 10e6;
|
||||
cfg->tx_bw = 20e6;
|
||||
cfg->rx_bw = 20e6;
|
||||
}
|
||||
} else if(ru->numerology == 1) {
|
||||
cfg->sample_rate=61.44e6;
|
||||
@@ -1328,13 +1328,13 @@ void fill_rf_config(RU_t *ru,
|
||||
} else if(fp->N_RB_DL == 50) {
|
||||
cfg->sample_rate=15.36e6;
|
||||
cfg->samples_per_frame = 153600;
|
||||
cfg->tx_bw = 5e6;
|
||||
cfg->rx_bw = 5e6;
|
||||
cfg->tx_bw = 10e6;
|
||||
cfg->rx_bw = 10e6;
|
||||
} else if (fp->N_RB_DL == 25) {
|
||||
cfg->sample_rate=7.68e6;
|
||||
cfg->samples_per_frame = 76800;
|
||||
cfg->tx_bw = 2.5e6;
|
||||
cfg->rx_bw = 2.5e6;
|
||||
cfg->tx_bw = 5e6;
|
||||
cfg->rx_bw = 5e6;
|
||||
} else if (fp->N_RB_DL == 6) {
|
||||
cfg->sample_rate=1.92e6;
|
||||
cfg->samples_per_frame = 19200;
|
||||
|
||||
@@ -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