Commit 51a201e5 authored by Anton Kozhemiachenko's avatar Anton Kozhemiachenko

Merge branch 'sqn/3GPP_TTCN_System_Simulator' into sqn_w15_merged

parents 56367dd0 abc35e77
......@@ -8,10 +8,9 @@
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/cmake_targets/ran_build/build/lte-softmodem",
"program": "${workspaceFolder}/cmake_targets/ran_build_4G/build/lte-softmodem",
"args": [
"-O", "../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf",
"--noS1"
"-O", "${workspaceFolder}/ci-scripts/conf_files/3GPP_System_Simulator/SS_proxy_rcc.band1_1CC.tm1.nfapi.conf"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/cmake_targets",
......
This diff is collapsed.
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
eNBs =
(
{
# real_time choice in {hard, rt-preempt, no}
real_time = "no";
////////// Identification parameters:
eNB_ID = 0x1;
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ( { mcc = 208; mnc = 93; mnc_length = 2; } );
tr_s_preference = "local_mac"
////////// Physical parameters:
component_carriers = (
{
node_function = "3GPP_eNODEB";
node_timing = "synch_to_ext_device";
node_synch_ref = 0;
frame_type = "FDD";
tdd_config = 0;
tdd_config_s = 0;
prefix_type = "NORMAL";
eutra_band = 1;
downlink_frequency = 2160000000L;
uplink_frequency_offset = -200000000L;
Nid_cell = 0;
N_RB_DL = 50;
Nid_cell_mbsfn = 0;
nb_antenna_ports = 1;
nb_antennas_tx = 1;
nb_antennas_rx = 1;
tx_gain = 90;
rx_gain = 125;
pbch_repetition = "FALSE";
prach_root = 22;
prach_config_index = 3;
prach_high_speed = "DISABLE";
prach_zero_correlation = 5;
prach_freq_offset = 4;
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -27;
pdsch_p_b = 0;
pusch_n_SB = 1;
pusch_enable64QAM = "DISABLE";
pusch_hoppingMode = "interSubFrame";
pusch_hoppingOffset = 0;
pusch_groupHoppingEnabled = "ENABLE";
pusch_groupAssignment = 0;
pusch_sequenceHoppingEnabled = "DISABLE";
pusch_nDMRS1 = 1;
phich_duration = "NORMAL";
phich_resource = "ONESIXTH";
srs_enable = "DISABLE";
/* srs_BandwidthConfig =;
srs_SubframeConfig =;
srs_ackNackST =;
srs_MaxUpPts =;*/
pusch_p0_Nominal = -96;
pusch_alpha = "AL1";
pucch_p0_Nominal = -104;
msg3_delta_Preamble = 6;
pucch_deltaF_Format1 = "deltaF2";
pucch_deltaF_Format1b = "deltaF3";
pucch_deltaF_Format2 = "deltaF0";
pucch_deltaF_Format2a = "deltaF0";
pucch_deltaF_Format2b = "deltaF0";
rach_numberOfRA_Preambles = 64;
rach_preamblesGroupAConfig = "DISABLE";
/*
rach_sizeOfRA_PreamblesGroupA = ;
rach_messageSizeGroupA = ;
rach_messagePowerOffsetGroupB = ;
*/
rach_powerRampingStep = 4;
rach_preambleInitialReceivedTargetPower = -108;
rach_preambleTransMax = 10;
rach_raResponseWindowSize = 10;
rach_macContentionResolutionTimer = 48;
rach_maxHARQ_Msg3Tx = 4;
pcch_default_PagingCycle = 128;
pcch_nB = "oneT";
bcch_modificationPeriodCoeff = 2;
ue_TimersAndConstants_t300 = 1000;
ue_TimersAndConstants_t301 = 1000;
ue_TimersAndConstants_t310 = 1000;
ue_TimersAndConstants_t311 = 10000;
ue_TimersAndConstants_n310 = 20;
ue_TimersAndConstants_n311 = 1;
ue_TransmissionMode = 1;
}
);
srb1_parameters :
{
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
timer_poll_retransmit = 80;
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
timer_reordering = 35;
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
timer_status_prohibit = 0;
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
poll_pdu = 4;
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
poll_byte = 99999;
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
max_retx_threshold = 4;
}
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.4";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
enable_measurement_reports = "no";
///X2
enable_x2 = "no";
t_reloc_prep = 1000; /* unit: millisecond */
tx2_reloc_overall = 2000; /* unit: millisecond */
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "l2sim-net";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "l2sim-net";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDRESS";
ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
# IP Address, port numbers and SSMode for System Simulator
SSConfig = (
{
hostIp = "127.0.0.1"; #Host IP for System Simulator
Sys_port = 7777; #Port Number for System Simulator Sys Port
Srb_port = 7778; #Port Number for System Simulator Srb Port
Vng_port = 7779; #Port Number for System Simulator VNG Port
Vtp_port = 7780; #Port Number for System Simulator VTP Port
Drb_port = 7781; #Port Number for System Simulator DRB Port
SysInd_port = 7782; #Port Number for System Simulator SysIND Port
SSMode = 1; #SSMode: 0 - eNB , 1- SYS_PORT test , 2- Only SRB_PORT test
}
);
MACRLCs = (
{
num_cc = 1;
local_s_if_name = "lo";
remote_s_address = "127.0.0.1";
local_s_address = "127.0.0.1";
local_s_portc = 50001;
remote_s_portc = 50000;
local_s_portd = 50011;
remote_s_portd = 50010;
tr_s_preference = "nfapi";
tr_n_preference = "local_RRC";
#scheduler_mode = "fairRR";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_RU_L1_SPLIT";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
log_config =
{
global_log_level ="info";
pkt_log_level ="debug";
#global_log_verbosity ="low";
#hw_log_level ="error";
#hw_log_verbosity ="low";
#phy_log_level ="error";
#phy_log_verbosity ="low";
mac_log_level ="info";
#mac_log_verbosity ="low";
#rlc_log_level ="warn";
#rlc_log_verbosity ="low";
#pdcp_log_level ="analysis";
#pdcp_log_verbosity ="low";
rrc_log_level ="info";
#rrc_log_verbosity ="full";
};
log_config = {
global_log_level ="info";
hw_log_level ="error";
phy_log_level ="error";
mac_log_level ="error";
nr_mac_log_level ="error";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
nr_rrc_log_level ="info";
};
uicc0 = {
imsi = "001010123456063";
key = "000102030405060708090A0B0C0D0E0F";
opc= "C42449363BBAD02B66D16BC975D77CC1";
dnn= "oai";
nssai_sst=1;
nssai_sd=1;
}
MACRLCs = (
{
num_cc = 1;
tr_n_preference = "nfapi";
local_n_if_name = "lo:";
remote_n_address = "127.0.0.1"; //Proxy IP
local_n_address = "127.0.0.1";
local_n_portc = 50600;
remote_n_portc = 50601;
local_n_portd = 50610;
remote_n_portd = 50611;
}
);
Active_eNBs = ( "eNB-Eurecom-LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
eNBs =
(
{
# real_time choice in {hard, rt-preempt, no}
real_time = "no";
////////// Identification parameters:
eNB_ID = 0x1;
cell_type = "CELL_MACRO_ENB";
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ( { mcc = 208; mnc = 93; mnc_length = 2; } );
tr_s_preference = "local_mac"
////////// Physical parameters:
component_carriers = (
{
node_function = "3GPP_eNODEB";
node_timing = "synch_to_ext_device";
node_synch_ref = 0;
frame_type = "FDD";
tdd_config = 0;
tdd_config_s = 0;
prefix_type = "NORMAL";
eutra_band = 1;
downlink_frequency = 2160000000L;
uplink_frequency_offset = -200000000L;
Nid_cell = 0;
N_RB_DL = 50;
Nid_cell_mbsfn = 0;
nb_antenna_ports = 1;
nb_antennas_tx = 1;
nb_antennas_rx = 1;
tx_gain = 90;
rx_gain = 125;
pbch_repetition = "FALSE";
prach_root = 22;
prach_config_index = 3;
prach_high_speed = "DISABLE";
prach_zero_correlation = 5;
prach_freq_offset = 4;
pucch_delta_shift = 1;
pucch_nRB_CQI = 0;
pucch_nCS_AN = 0;
pucch_n1_AN = 0;
pdsch_referenceSignalPower = -27;
pdsch_p_b = 0;
pusch_n_SB = 1;
pusch_enable64QAM = "DISABLE";
pusch_hoppingMode = "interSubFrame";
pusch_hoppingOffset = 0;
pusch_groupHoppingEnabled = "ENABLE";
pusch_groupAssignment = 0;
pusch_sequenceHoppingEnabled = "DISABLE";
pusch_nDMRS1 = 1;
phich_duration = "NORMAL";
phich_resource = "ONESIXTH";
srs_enable = "DISABLE";
/* srs_BandwidthConfig =;
srs_SubframeConfig =;
srs_ackNackST =;
srs_MaxUpPts =;*/
pusch_p0_Nominal = -96;
pusch_alpha = "AL1";
pucch_p0_Nominal = -104;
msg3_delta_Preamble = 6;
pucch_deltaF_Format1 = "deltaF2";
pucch_deltaF_Format1b = "deltaF3";
pucch_deltaF_Format2 = "deltaF0";
pucch_deltaF_Format2a = "deltaF0";
pucch_deltaF_Format2b = "deltaF0";
rach_numberOfRA_Preambles = 64;
rach_preamblesGroupAConfig = "DISABLE";
/*
rach_sizeOfRA_PreamblesGroupA = ;
rach_messageSizeGroupA = ;
rach_messagePowerOffsetGroupB = ;
*/
rach_powerRampingStep = 4;
rach_preambleInitialReceivedTargetPower = -108;
rach_preambleTransMax = 10;
rach_raResponseWindowSize = 10;
rach_macContentionResolutionTimer = 48;
rach_maxHARQ_Msg3Tx = 4;
pcch_default_PagingCycle = 128;
pcch_nB = "oneT";
bcch_modificationPeriodCoeff = 2;
ue_TimersAndConstants_t300 = 1000;
ue_TimersAndConstants_t301 = 1000;
ue_TimersAndConstants_t310 = 1000;
ue_TimersAndConstants_t311 = 10000;
ue_TimersAndConstants_n310 = 20;
ue_TimersAndConstants_n311 = 1;
ue_TransmissionMode = 1;
}
);
srb1_parameters :
{
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
timer_poll_retransmit = 80;
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
timer_reordering = 35;
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
timer_status_prohibit = 0;
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
poll_pdu = 4;
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
poll_byte = 99999;
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
max_retx_threshold = 4;
}
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
////////// MME parameters:
mme_ip_address = ( { ipv4 = "192.168.61.4";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
enable_measurement_reports = "no";
///X2
enable_x2 = "no";
t_reloc_prep = 1000; /* unit: millisecond */
tx2_reloc_overall = 2000; /* unit: millisecond */
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "l2sim-net";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "l2sim-net";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDRESS";
ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
# IP Address, port numbers and SSMode for System Simulator
SSConfig = (
{
hostIp = "127.0.0.1"; #Host IP for System Simulator
Sys_port = 7777; #Port Number for System Simulator Sys Port
Sys_host = "/tmp/eNBSys.pipe"; #Host for System Simulator SYS Port
Srb_port = 7778; #Port Number for System Simulator Srb Port
Srb_host = "/tmp/eNBSrb.pipe"; #Host for System Simulator SRB Port
Vng_port = 7779; #Port Number for System Simulator VNG Port
Vng_host = "/tmp/eNBVng.pipe"; #Host for System Simulator VNG Port
Vtp_port = 7780; #Port Number for System Simulator VTP Port
Vtp_host = "/tmp/eNBVT.pipe"; #Host for System Simulator VTP Port
Drb_port = 7781; #Port Number for System Simulator DRB Port
Drb_host = "/tmp/eNBDrb.pipe"; #Host for System Simulator DRB Port
SysInd_port = 7782; #Port Number for System Simulator SysIND Port
SysInd_host = "/tmp/eNBSysInd.pipe"; #Host for System Simulator DRB Port
SSMode = 1; #SSMode: 0 - eNB , 1- SYS_PORT test , 2- Only SRB_PORT test
}
);
MACRLCs = (
{
num_cc = 1;
local_s_if_name = "lo";
remote_s_address = "127.0.0.1";
local_s_address = "127.0.0.1";
local_s_portc = 50001;
remote_s_portc = 50000;
local_s_portd = 50011;
remote_s_portd = 50010;
tr_s_preference = "nfapi";
tr_n_preference = "local_RRC";
#scheduler_mode = "fairRR";
}
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_RU_L1_SPLIT";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
log_config =
{
global_log_level ="error";
pkt_log_level ="info";
#global_log_verbosity ="low";
#hw_log_level ="error";
#hw_log_verbosity ="low";
#phy_log_level ="error";
#phy_log_verbosity ="low";
#mac_log_level ="info";
#mac_log_verbosity ="low";
#rlc_log_level ="warn";
#rlc_log_verbosity ="low";
#pdcp_log_level ="analysis";
#pdcp_log_verbosity ="low";
#rrc_log_level ="info";
#rrc_log_verbosity ="full";
};
log_config = {
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
};
L1s = (
{
num_cc = 1;
tr_n_preference = "nfapi";
local_n_if_name = "lo";
remote_n_address = "127.0.0.1";
local_n_address = "127.0.0.1";
local_n_portc = 50000;
remote_n_portc = 50001;
local_n_portd = 50010;
remote_n_portd = 50011;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 90
att_rx = 0;
bands = [7,38,42,43];
max_pdschReferenceSignalPower = -27;
max_rxgain = 125;
}
);
......@@ -696,6 +696,21 @@ install_simde_from_source(){
cd /tmp/simde
# brute force copy into /usr/include
$SUDO \cp -rv ../simde /usr/include
$SUDO patch /usr/include/simde/x86/avx.h << FIN
--- /usr/include/simde/x86/avx.h.old 2022-10-03 19:17:39.828223432 +0200
+++ /usr/include/simde/x86/avx.h 2022-10-05 16:19:55.086019445 +0200
@@ -3643,6 +3643,9 @@
simde__m256i simde_mm256_insertf128_si256(simde__m256i a, simde__m128i b, int im
return simde__m256i_from_private(a_);
}
+#if defined(SIMDE_X86_AVX_NATIVE)
+ #define simde_mm256_insertf128_si256(a, b, imm8) _mm256_insertf128_si256(a, b, imm8)
+#endif
#if defined(SIMDE_X86_AVX_ENABLE_NATIVE_ALIASES)
#undef _mm256_insertf128_si256
#define _mm256_insertf128_si256(a, b, imm8) simde_mm256_insertf128_si256(a, b, imm8)
FIN
}
#################################################
......
This diff is collapsed.
......@@ -36,6 +36,21 @@
#include <pthread.h>
#include <stdint.h>
#include "radio/SS/ss_config.h"
#include "RRC/NR/nr_rrc_defs.h"
// Used for loopback message routing in DRB-specific TC's
typedef enum {
DRB_MacPdu = 0,
DRB_RlcPdu,
DRB_RlcSdu,
DRB_PdcpPdu,
DRB_PdcpSdu,
DRB_SdapPdu,
DRB_SdapSdu,
DRB_data_type_qty
} nr_drb_data_t;
// forward declarations to avoid including the full typess ***eNB;
struct PHY_VARS_gNB_s;
struct PHY_VARS_eNB_NB_IoT_s;
......@@ -47,6 +62,24 @@ struct gNB_MAC_INST_s;
struct gtpv1u_data_s;
struct RU_t_s;
typedef struct RBConfig_s {
bool isRBConfigValid;
LTE_PDCP_Config_t PdcpCfg;
LTE_RLC_Config_t RlcCfg;
long LogicalChannelId;
LTE_LogicalChannelConfig_t Mac;
bool DiscardULData;
}RBConfig;
typedef struct NRRBConfig_s {
bool isRBConfigValid;
NR_SDAP_Config_t * Sdap;
NR_PDCP_Config_t * Pdcp;
long *pdcpTransparentSN_Size;
NR_RLC_BearerConfig_t * RlcBearer;
bool *DiscardULData;
}NRRBConfig;
typedef struct {
/// RAN context config file name
char *config_file_name;
......@@ -108,6 +141,14 @@ typedef struct {
pthread_mutex_t ru_mutex;
/// condition variable for signaling setup completion of an RU
pthread_cond_t ru_cond;
/// SS Config variables
struct ss_config_s ss;
// Variable to store Transaction ID for SS in case of RRCReconfiguration
long rrc_Transaction_Identifier;
// Loopback mode can operate on either sdap, pdcp or rlc
nr_drb_data_t nr_drb_data_type;
RBConfig RB_Config[MAX_NUM_CCs][MAX_RBS];
NRRBConfig NR_RB_Config[MAX_NUM_CCs][MAX_NR_RBS];
} RAN_CONTEXT_t;
extern RAN_CONTEXT_t RC;
......
......@@ -468,6 +468,19 @@ int logInit (void)
register_log_component("eRAL","",RAL_ENB);
register_log_component("mRAL","",RAL_UE);
register_log_component("ENB_APP","log",ENB_APP);
register_log_component("ENB_SS","log",ENB_SS);
register_log_component("ENB_SS_PORTMAN","log",ENB_SS_PORTMAN);
register_log_component("ENB_SS_PORTMAN_ACP","log",ENB_SS_PORTMAN_ACP);
register_log_component("ENB_SS_SYS_TASK","log",ENB_SS_SYS_TASK);
register_log_component("ENB_SS_SRB_ACP","log",ENB_SS_SRB_ACP);
register_log_component("ENB_SS_SYSIND","log",ENB_SS_SYSIND);
register_log_component("ENB_SS_SYSIND_ACP","log",ENB_SS_SYSIND_ACP);
register_log_component("ENB_SS_SRB","log",ENB_SS_SRB);
register_log_component("ENB_SS_DRB","log",ENB_SS_DRB);
register_log_component("ENB_SS_DRB_ACP","log",ENB_SS_DRB_ACP);
register_log_component("ENB_SS_VNG","log",ENB_SS_VNG);
register_log_component("ENB_SS_VTP","log",ENB_SS_VTP);
register_log_component("ENB_SS_VT_TIMER","log",ENB_SS_VT_TIMER);
register_log_component("MCE_APP","log",MCE_APP);
register_log_component("MME_APP","log",MME_APP);
register_log_component("TMR","",TMR);
......@@ -498,6 +511,7 @@ int logInit (void)
register_log_component("NGAP","",NGAP);
register_log_component("ITTI","log",ITTI);
register_log_component("UTIL","log",UTIL);
register_log_component("PKT", "log", PKT);
for (int i=0 ; log_level_names[i].name != NULL ; i++)
g_log->level2string[i] = toupper(log_level_names[i].name[0]); // uppercased first letter of level name
......@@ -601,6 +615,30 @@ void logRecord_mt(const char *file,
va_end(args);
}
void logRecord_tp(const char *file,
const char *func,
int line,
int comp,
int level,
const char *format,
... )
{
log_component_t *c = &g_log->log_component[comp];
char header[48];
char buf[1024];
va_list args;
va_start(args, format);
vsnprintf(buf, sizeof(buf)-1, format, args);
va_end(args);
if(map_int_to_str(log_level_names, level) != NULL)
snprintf(header, sizeof(header)-1, "SS-%s %s", c->name, map_int_to_str(log_level_names, level));
else
snprintf(header, sizeof(header)-1, "SS-%s", c->name);
LOG_SS(header, func, line, buf) ;
}
void vlogRecord_mt(const char *file,
const char *func,
int line,
......
This diff is collapsed.
/*
* 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 ss-log.h
* \brief System Simulator Log interface
*/
#ifndef __SS_LOG_H__
#define __SS_LOG_H__
#include "ss-tp.h"
#define LOG_SYS(evId, ...) do { if (1) { char buf[1024]; \
sprintf(buf, __VA_ARGS__); \
tracepoint(SSeNB, SS_SYS, "SS-eNB-SYS", \
evId, g_log->sfn, g_log->sf, \
__func__, __LINE__, buf); \
} } while (0)
#define LOG_SRB(evId, ...) do { if (1) { char buf[1024]; \
sprintf(buf, __VA_ARGS__); \
tracepoint(SSeNB, SS_SRB, "SS-eNB-SRB", \
evId, g_log->sfn, g_log->sf, \
__func__, __LINE__, buf); \
} } while (0)
#define LOG_DRB(evId, ...) do { if (1) { char buf[1024]; \
sprintf(buf, __VA_ARGS__); \
tracepoint(SSeNB, SS_DRB, "SS-eNB-DRB", \
evId, g_log->sfn, g_log->sf, \
__func__, __LINE__, buf); \
} } while (0)
#define LOG_VNG(evId, ...) do { if (1) { char buf[1024]; \
sprintf(buf, __VA_ARGS__); \
tracepoint(SSeNB, SS_VNG, "SS-eNB-VNG", \
evId, g_log->sfn, g_log->sf, \
__func__, __LINE__, buf); \
} } while (0)
#define LOG_SS(component, func, line, log) do { \
tracepoint(SSeNB, SS_LOG, \
component, -1, g_log->sfn, \
g_log->sf, func, line, log); \
} while(0)
#define LOG_SS_PKT(component, _string, buf, len) do { \
tracepoint(SSeNB, SS_PKT, \
"SS-PDU", -1, g_log->sfn, \
g_log->sf, _string, buf, len); \
} while(0)
#define LOG_SS_NAS_PKT(component, _string, buf, len) do { \
tracepoint(SSeNB, SS_PKT, \
"SS-NR-NAS-PDU", -1, g_log->sfn, \
g_log->sf, _string, buf, len); \
} while(0)
#define LOG_SS_MAC_PKT(component, _string, sfn, sf, mac_pack_info, buf, len) do { \
tracepoint(SSeNB, SS_MAC_PKT, \
"SS-MAC-PDU", -1, sfn, sf, \
__func__, __LINE__, mac_pack_info, \
_string, buf, len); \
} while(0)
#define LOG_SS_RLC_PKT(component, _string, sfn, sf, rlc_pack_info, buf, len) do { \
tracepoint(SSeNB, SS_NR_RLC_PKT, \
"SS-NR-RLC-PDU", -1, sfn, sf, \
__func__, __LINE__, rlc_pack_info, \
_string, buf, len); \
} while(0)
#define LOG_SS_PDCP_PKT(component, _string, sfn, sf, pdcp_pack_info, buf, len) do { \
tracepoint(SSeNB, SS_NR_PDCP_PKT, \
"SS-NR-PDCP-PDU", -1, sfn, sf, \
__func__, __LINE__, pdcp_pack_info, \
_string, buf, len); \
} while(0)
#define LOG_SS_LTE_PDCP_PKT(component, _string, sfn, sf, pdcp_pack_info, buf, len) do { \
tracepoint(SSeNB, SS_LTE_PDCP_PKT, \
"SS-LTE-PDCP-PDU", -1, sfn, sf, \
__func__, __LINE__, pdcp_pack_info, \
_string, buf, len); \
} while(0)
#define LOG_SS_LTE_RLC_PKT(component, _string, sfn, sf, rlc_pack_info, buf, len) do { \
tracepoint(SSeNB, SS_LTE_RLC_PKT, \
"SS-LTE-RLC-PDU", -1, sfn, sf, \
__func__, __LINE__, rlc_pack_info, \
_string, buf, len); \
} while(0)
#endif /** __SS_LOG_H__ */
#define TRACEPOINT_CREATE_PROBES
#define TRACEPOINT_DEFINE
#include "ss-tp.h"
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
......@@ -346,7 +346,16 @@ void nr_dl(void *_d, event e)
{
ev_data *d = _d;
trace_nr(d, NR_DIRECTION_DOWNLINK, NR_C_RNTI, e.e[d->nr_dl_rnti].i,
if (e.e[d->nr_dl_rnti].i == 0xffff) {
if (d->no_sib) return;
if (d->max_sib && d->cur_sib == d->max_sib) return;
d->cur_sib++;
}
trace_nr(d, NR_DIRECTION_DOWNLINK,
e.e[d->nr_dl_rnti].i != 0xffff ? NR_C_RNTI : 4, e.e[d->nr_dl_rnti].i,
e.e[d->nr_dl_frame].i, e.e[d->nr_dl_slot].i,
e.e[d->nr_dl_harq_pid].i, e.e[d->nr_dl_data].b,
e.e[d->nr_dl_data].bsize, NO_PREAMBLE);
......
......@@ -204,6 +204,7 @@ hashtable_rc_t hashtable_dump_content (const hash_table_t *const hashtblP, char
*/
hashtable_rc_t hashtable_insert(hash_table_t *const hashtblP, const hash_key_t keyP, void *dataP) {
hash_node_t *node = NULL;
hash_node_t *node_prev = NULL;
hash_size_t hash = 0;
if (hashtblP == NULL) {
......@@ -211,6 +212,7 @@ hashtable_rc_t hashtable_insert(hash_table_t *const hashtblP, const hash_key_t k
}
hash=hashtblP->hashfunc(keyP)%hashtblP->size;
/*
node=hashtblP->nodes[hash];
while(node) {
......@@ -238,6 +240,23 @@ hashtable_rc_t hashtable_insert(hash_table_t *const hashtblP, const hash_key_t k
}
hashtblP->nodes[hash]=node;
*/
/* insert the new node to tail of the node list with same key */
if(!(node=malloc(sizeof(hash_node_t)))) return -1;
node->key=keyP;
node->data=dataP;
node->next = NULL;
node_prev = hashtblP->nodes[hash];
if(!node_prev){
hashtblP->nodes[hash] = node;
} else {
while(node_prev->next){
node_prev = node_prev->next;
}
node_prev->next = node;
}
return HASH_TABLE_OK;
}
//-------------------------------------------------------------------------------------------------------------------------------
......
......@@ -49,8 +49,8 @@ int get_supported_band_index(int scs, int band, int n_rbs)
int scs_index = scs;
if (band > 256)
scs_index++;
for (int i = 0; i < 11; i++) {
if(n_rbs == tables_5_3_2[scs][i])
for (int i = 0; i < 12; i++) {
if(n_rbs == tables_5_3_2[scs_index][i])
return i;
}
return (-1); // not found
......@@ -516,7 +516,7 @@ int get_nr_table_idx(int nr_bandP, uint8_t scs_index) {
break;
}
AssertFatal(i > 0 && i < sizeofArray(nr_bandtable), "band is not existing: %d\n",nr_bandP);
AssertFatal(i >= 0 && i < sizeofArray(nr_bandtable), "band is not existing: %d\n",nr_bandP);
LOG_D(PHY, "NR band table index %d (Band %d, dl_min %lu, ul_min %lu)\n", i, nr_bandtable[i].band, nr_bandtable[i].dl_min,nr_bandtable[i].ul_min);
return i;
......
......@@ -16,5 +16,6 @@
#include "openair2/COMMON/gtpv1_u_messages_def.h"
#include "openair2/COMMON/f1ap_messages_def.h"
#include "openair2/COMMON/e1ap_messages_def.h"
#include "openair2/COMMON/ss_messages_def.h"
#include "openair2/COMMON/ngap_messages_def.h"
......@@ -132,10 +132,10 @@ extern "C" {
size_t s=t->message_queue.size();
if ( s > t->admin.queue_size )
LOG_E(TMR,"Queue for %s task contains %ld messages\n", itti_get_task_name(destination_task_id), s );
LOG_D(TMR,"Queue for %s task contains %ld messages\n", itti_get_task_name(destination_task_id), s );
if ( s > 50 )
LOG_I(ITTI,"Queue for %s task size: %ld (last message %s)\n",itti_get_task_name(destination_task_id), s+1,ITTI_MSG_NAME(message));
LOG_D(ITTI,"Queue for %s task size: %ld (last message %s)\n",itti_get_task_name(destination_task_id), s+1,ITTI_MSG_NAME(message));
t->message_queue.insert(t->message_queue.begin(), message);
eventfd_t sem_counter = 1;
......@@ -148,7 +148,7 @@ extern "C" {
task_list_t *t=tasks[destination_task_id];
pthread_mutex_lock (&t->queue_cond_lock);
int ret=itti_send_msg_to_task_locked(destination_task_id, destinationInstance, message);
LOG_D(ITTI, "src task:%s dest task:%s msg_name:%s\n",ITTI_MSG_ORIGIN_NAME(message), ITTI_MSG_DESTINATION_NAME(message), ITTI_MSG_NAME(message) );
while ( t->message_queue.size()>0 && t->admin.func != NULL ) {
if (t->message_queue.size()>1)
LOG_W(ITTI,"queue in no thread mode is %ld\n", t->message_queue.size());
......@@ -293,7 +293,7 @@ extern "C" {
} else {
*received_msg=t->message_queue.back();
t->message_queue.pop_back();
LOG_D(ITTI,"task %s received a message\n",t->admin.name);
LOG_D(ITTI,"task %s received message from task:%s \n",t->admin.name, ITTI_MSG_ORIGIN_NAME(*received_msg));
}
pthread_mutex_unlock (&t->queue_cond_lock);
......@@ -323,6 +323,15 @@ extern "C" {
return 0;
}
int itti_create_task_prio(task_id_t task_id,
void *(*start_routine)(void *),
void *args_p,int addprio) {
task_list_t *t=tasks[task_id];
threadCreate (&t->thread, start_routine, args_p, (char *)itti_get_task_name(task_id),-1,(OAI_PRIORITY_RT)+addprio);
LOG_I(ITTI,"Created Posix thread %s\n", itti_get_task_name(task_id) );
return 0;
}
void itti_exit_task(void) {
pthread_exit (NULL);
}
......
......@@ -232,6 +232,7 @@ typedef struct IttiMsgText_s {
#include <openair2/COMMON/m2ap_messages_types.h>
#include <openair2/COMMON/m3ap_messages_types.h>
#include <openair2/COMMON/sctp_messages_types.h>
#include <openair2/COMMON/ss_messages_types.h>
#include <openair2/COMMON/udp_messages_types.h>
#include <openair2/COMMON/gtpv1_u_messages_types.h>
#include <openair2/COMMON/ngap_messages_types.h>
......@@ -305,6 +306,7 @@ void *rrc_enb_process_msg(void *);
TASK_DEF(TASK_L2L1, TASK_PRIORITY_MAX, 200, NULL, NULL) \
TASK_DEF(TASK_BM, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_PHY_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_MAC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_MAC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RLC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_ENB_NB_IoT, TASK_PRIORITY_MED, 200, NULL, NULL) \
......@@ -312,8 +314,8 @@ void *rrc_enb_process_msg(void *);
TASK_DEF(TASK_PDCP_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_DATA_FORWARDING, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_END_MARKER, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL,NULL)\
TASK_DEF(TASK_RRC_GNB, TASK_PRIORITY_MED, 200, NULL,NULL)\
TASK_DEF(TASK_RAL_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_S1AP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_NGAP, TASK_PRIORITY_MED, 200, NULL, NULL) \
......@@ -324,6 +326,20 @@ void *rrc_enb_process_msg(void *);
TASK_DEF(TASK_M3AP_MME, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_M3AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SCTP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_PORTMAN, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_PORTMAN_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SYS, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SYS_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_SYSIND, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_SYSIND_ACP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_SRB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_SRB_ACP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_SRB_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_VNG, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_VTP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_DRB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_DRB_ACP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_VT_TIMER, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_ENB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_GNB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_MCE_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
......@@ -336,7 +352,8 @@ void *rrc_enb_process_msg(void *);
TASK_DEF(TASK_RRC_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_NAS_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RAL_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000, NULL, NULL) \
TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL)\
TASK_DEF(TASK_UDP, TASK_PRIORITY_MED, 1000, NULL, NULL)\
TASK_DEF(TASK_CU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_DU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_CUCP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \
......@@ -506,6 +523,10 @@ int itti_create_task(task_id_t task_id,
void *(*start_routine) (void *),
void *args_p);
int itti_create_task_prio(task_id_t task_id,
void *(*start_routine)(void *),
void *args_p,int addprio);
int itti_create_queue(const task_info_t *task_info);
/** \brief Exit the current task.
......
......@@ -1347,9 +1347,11 @@ INPUT = \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_sdu.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_sdu.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_security_nea2.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_security_nea1.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_security_nea2.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_security_nea1.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_integrity_nia1.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/LAYER2/nr_pdcp/nr_pdcp_asn1_utils.h \
......@@ -1759,6 +1761,7 @@ INPUT = \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/TimeZoneAndTime.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/Cli.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationResponseParameter.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EapMessage.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SORTransparentContainer.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/FGSRegistrationType.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/NasRequestType.h \
......@@ -1858,6 +1861,7 @@ INPUT = \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsQualityOfService.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/AuthenticationResponseParameter.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EapMessage.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/PdnType.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/EpsMobileIdentity.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair3/NAS/COMMON/IES/SupportedCodecList.c \
......
......@@ -28,6 +28,7 @@
#include "sctp_eNB_task.h"
#include "x2ap_eNB.h"
#include "s1ap_eNB.h"
#include "udp_eNB_task.h"
#include "openair3/ocp-gtpu/gtp_itf.h"
#if ENABLE_RAL
#include "lteRALue.h"
......@@ -37,6 +38,15 @@
# include "enb_app.h"
# include "openair2/LAYER2/MAC/mac_proto.h"
#include <openair3/ocp-gtpu/gtp_itf.h>
# include "ss_eNB_sys_task.h"
# include "ss_eNB_port_man_task.h"
# include "ss_eNB_srb_task.h"
# include "ss_eNB_vng_task.h"
# include "ss_eNB_vtp_task.h"
# include "ss_eNB_drb_task.h"
# include "ss_eNB_vt_timer_task.h"
# include "ss_eNB_sysind_task.h"
extern RAN_CONTEXT_t RC;
......@@ -46,6 +56,51 @@ int create_tasks(uint32_t enb_nb) {
if (enb_nb == 0) return 0;
if (RC.ss.mode >= SS_SOFTMODEM)
{
rc = itti_create_task(TASK_SS_PORTMAN, ss_eNB_port_man_eNB_task, NULL);
AssertFatal(rc >= 0, "Create task for SS manager failed\n");
rc = itti_create_task(TASK_SYS, ss_eNB_sys_task, NULL);
AssertFatal(rc >= 0, "Create task for SS failed\n");
rc = itti_create_task(TASK_SS_SRB_ACP, ss_eNB_srb_acp_task, NULL);
AssertFatal(rc >= 0, "Create task for SS SRB ACP failed\n");
rc = itti_create_task(TASK_SS_SYSIND, ss_eNB_sysind_task, NULL);
AssertFatal(rc >= 0, "Create task for SS SYSIND failed\n");
rc = itti_create_task(TASK_SS_SYSIND_ACP, ss_eNB_sysind_acp_task, NULL);
AssertFatal(rc >= 0, "Create task for SS SYSIND ACP failed\n");
rc = itti_create_task(TASK_SS_SRB, ss_eNB_srb_task, NULL);
AssertFatal(rc >= 0, "Create task for SS SRB failed\n");
rc = itti_create_task(TASK_VNG, ss_eNB_vng_task, NULL);
AssertFatal(rc >= 0, "Create task for SS VNG failed\n");
rc = itti_create_task(TASK_SS_DRB, ss_eNB_drb_task, NULL);
AssertFatal(rc >= 0, "Create task for SS DRB failed\n");
rc = itti_create_task(TASK_SS_DRB_ACP, ss_eNB_drb_acp_task, NULL);
AssertFatal(rc >= 0, "Create task for SS DRB ACP failed\n");
/* Task for support Virtual Time for TTCN engine */
rc = itti_create_task(TASK_VTP, ss_eNB_vtp_task, NULL);
AssertFatal(rc >= 0, "Create task for SS VTP failed\n");
/* Task for support Virtual Time timer management */
rc = itti_create_task_prio(TASK_VT_TIMER, ss_eNB_vt_timer_task, NULL, 10);
AssertFatal(rc >= 0, "Create task for SS_VT_TIMER failed\n");
LOG_I(MAC,"Creating MAC eNB Task\n");
rc = itti_create_task(TASK_MAC_ENB, mac_enb_task, NULL);
AssertFatal(rc >= 0, "Create task for MAC eNB failed\n");
rc = itti_create_task(TASK_UDP, udp_eNB_task, NULL);
AssertFatal(rc >= 0, "Create task for UDP failed\n");
}
LOG_I(ENB_APP, "Creating ENB_APP eNB Task\n");
rc = itti_create_task (TASK_ENB_APP, eNB_app_task, NULL);
AssertFatal(rc >= 0, "Create task for eNB APP failed\n");
......
......@@ -28,6 +28,7 @@
#include "sctp_eNB_task.h"
#include "x2ap_eNB.h"
#include "s1ap_eNB.h"
#include "udp_eNB_task.h"
#include "openair3/ocp-gtpu/gtp_itf.h"
#include "m2ap_eNB.h"
#include "m2ap_MCE.h"
......@@ -74,6 +75,8 @@ int create_tasks_mbms(uint32_t enb_nb) {
if(!EPC_MODE_ENABLED){
// rc = itti_create_task(TASK_SCTP, sctp_eNB_task, NULL);
// AssertFatal(rc >= 0, "Create task for SCTP failed\n");
rc = itti_create_task(TASK_UDP, udp_eNB_task, NULL);
AssertFatal(rc >= 0, "Create task for UDP failed\n");
rc = itti_create_task(TASK_GTPV1_U, gtpv1uTask, NULL);
AssertFatal(rc >= 0, "Create task for GTPV1U failed\n");
}
......
......@@ -255,7 +255,97 @@ static inline int rxtx(PHY_VARS_eNB *eNB,
eNB->UL_INFO.subframe = proc->subframe_rx;
eNB->UL_INFO.module_id = eNB->Mod_id;
eNB->UL_INFO.CC_id = eNB->CC_id;
//#ifdef ENB_SS
if (RC.ss.mode >= SS_SOFTMODEM)
{
MessageDef *message_p = itti_alloc_new_message(TASK_ENB_APP, 0, SS_UPD_TIM_INFO);
if (message_p)
{
SS_UPD_TIM_INFO(message_p).sf = eNB->UL_INFO.subframe;
SS_UPD_TIM_INFO(message_p).sfn = eNB->UL_INFO.frame;
int send_res = itti_send_msg_to_task(TASK_SYS, 0, message_p);
if (send_res < 0)
{
printf("Error in itti_send_msg_to_task");
// LOG_E( PHY, "[SS] Error in L1_Thread itti_send_msg_to_task"); /** TODO: Need separate logging for SS */
}
LOG_D(PHY, "[MAC] SS_UPD_TIM_INFO from L1_Thread to SYS task itti_send_msg_to_task sfn %d sf %d",
eNB->UL_INFO.subframe, eNB->UL_INFO.frame); /** TODO: Need separate logging for SS */
}
#ifdef VVJ
MessageDef *message_p_vt_timer = itti_alloc_new_message(TASK_ENB_APP, 0, SS_UPD_TIM_INFO);
if (RC.ss.vtp_ready)
{
MessageDef *message_p_vt_timer = itti_alloc_new_message(TASK_ENB_APP, 0, SS_UPD_TIM_INFO);
if (message_p_vt_timer)
{
SS_UPD_TIM_INFO(message_p_vt_timer).sf = eNB->UL_INFO.subframe;
SS_UPD_TIM_INFO(message_p_vt_timer).sfn = eNB->UL_INFO.frame;
int send_res = itti_send_msg_to_task(TASK_VT_TIMER, 0, message_p_vt_timer);
if (send_res < 0)
{
printf("Error in itti_send_msg_to_task");
// LOG_E( PHY, "[SS] Error in L1_Thread itti_send_msg_to_task"); /** TODO: Need separate logging for SS */
}
LOG_D(PHY, "[SS] SS_UPD_TIM_INFO from L1_Thread to TASK_VT_TIMER task itti_send_msg_to_task sfn %d sf %d",
eNB->UL_INFO.subframe, eNB->UL_INFO.frame); /** TODO: Need separate logging for SS */
}
}
#endif
if (eNB->UL_INFO.subframe == 0) {
MessageDef *message_p_vtp = itti_alloc_new_message(TASK_ENB_APP, 0, SS_UPD_TIM_INFO);
if (message_p_vtp && RC.ss.vtp_ready)
{
SS_UPD_TIM_INFO(message_p_vtp).sf = eNB->UL_INFO.subframe;
SS_UPD_TIM_INFO(message_p_vtp).sfn = eNB->UL_INFO.frame;
SS_UPD_TIM_INFO(message_p_vtp).physCellId = RC.rrc[eNB->UL_INFO.module_id]->carrier[eNB->UL_INFO.CC_id].physCellId;
int send_res = itti_send_msg_to_task(TASK_VTP, 0, message_p_vtp);
if (send_res < 0)
{
printf("Error in itti_send_msg_to_task");
// LOG_E( PHY, "[SS] Error in L1_Thread itti_send_msg_to_task"); /** TODO: Need separate logging for SS */
}
LOG_D(PHY, "[SS] SS_UPD_TIM_INFO from L1_Thread to VTP task itti_send_msg_to_task sfn %d sf %d",
eNB->UL_INFO.subframe, eNB->UL_INFO.frame); /** TODO: Need separate logging for SS */
}
}
}
int tem_proc_ccid = proc->CC_id;
/* MultiCell: Function modify for Multiple CC */
for (int CC_id=0; CC_id<RC.nb_mac_CC[eNB->Mod_id]; CC_id++) {
eNB->UL_INFO.CC_id = CC_id;
proc->CC_id = CC_id;//Temp solution need to be fixed later
eNB->if_inst->UL_indication(&eNB->UL_INFO, (void*)proc);
}
if (RC.ss.mode >= SS_SOFTMODEM)
{
//#endif /** ENB_SS */
MessageDef *message_p_vt_timer = itti_alloc_new_message(TASK_ENB_APP, 0, SS_UPD_TIM_INFO);
if (message_p_vt_timer)
{
SS_UPD_TIM_INFO(message_p_vt_timer).sf = eNB->UL_INFO.subframe;
SS_UPD_TIM_INFO(message_p_vt_timer).sfn = eNB->UL_INFO.frame;
int send_res = itti_send_msg_to_task(TASK_VT_TIMER, 0, message_p_vt_timer);
if (send_res < 0)
{
printf("Error in itti_send_msg_to_task");
// LOG_E( PHY, "[SS] Error in L1_Thread itti_send_msg_to_task"); /** TODO: Need separate logging for SS */
}
LOG_D(PHY, "[SS] SS_UPD_TIM_INFO from L1_Thread to TASK_VT_TIMER task itti_send_msg_to_task sfn %d sf %d\n",
eNB->UL_INFO.subframe, eNB->UL_INFO.frame); /** TODO: Need separate logging for SS */
}
}
proc->CC_id = tem_proc_ccid;
//#endif /** ENB_SS */
AssertFatal((ret= pthread_mutex_unlock(&eNB->UL_INFO_mutex))==0,"error unlocking UL_INFO_mutex, return %d\n",ret);
/* this conflict resolution may be totally wrong, to be tested */
/* CONFLICT RESOLUTION: BEGIN */
......@@ -274,7 +364,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,
/* CONFLICT RESOLUTION: END */
stop_meas( &softmodem_stats_rxtx_sf );
LOG_D(PHY,"%s() Exit proc[rx:%d%d tx:%d%d]\n", __FUNCTION__, proc->frame_rx, proc->subframe_rx, proc->frame_tx, proc->subframe_tx);
LOG_D(PHY, "rxtx:%lld nfapi:%lld tx:%lld rx:%lld prach:%lld ofdm:%lld ",
LOG_D(PHY, "rxtx:%lld nfapi:%lld tx:%lld rx:%lld prach:%lld ofdm:%lld \n",
softmodem_stats_rxtx_sf.p_time, nfapi_meas.p_time,
TICK_TO_US(eNB->phy_proc_tx),
TICK_TO_US(eNB->phy_proc_rx),
......@@ -282,7 +372,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,
TICK_TO_US(eNB->ofdm_mod_stats)
);
LOG_D(PHY,
"dlsch[enc:%lld mod:%lld scr:%lld rm:%lld t:%lld i:%lld] rx_dft:%lld ",
"dlsch[enc:%lld mod:%lld scr:%lld rm:%lld t:%lld i:%lld] rx_dft:%lld \n",
TICK_TO_US(eNB->dlsch_encoding_stats),
TICK_TO_US(eNB->dlsch_modulation_stats),
TICK_TO_US(eNB->dlsch_scrambling_stats),
......@@ -290,13 +380,13 @@ static inline int rxtx(PHY_VARS_eNB *eNB,
TICK_TO_US(eNB->dlsch_turbo_encoding_stats),
TICK_TO_US(eNB->dlsch_interleaving_stats),
TICK_TO_US(eNB->rx_dft_stats));
LOG_D(PHY," ulsch[ch:%lld freq:%lld dec:%lld demod:%lld ru:%lld ",
LOG_D(PHY," ulsch[ch:%lld freq:%lld dec:%lld demod:%lld ru:%lld \n",
TICK_TO_US(eNB->ulsch_channel_estimation_stats),
TICK_TO_US(eNB->ulsch_freq_offset_estimation_stats),
TICK_TO_US(eNB->ulsch_decoding_stats),
TICK_TO_US(eNB->ulsch_demodulation_stats),
TICK_TO_US(eNB->ulsch_rate_unmatching_stats));
LOG_D(PHY, "td:%lld dei:%lld dem:%lld llr:%lld tci:%lld ",
LOG_D(PHY, "td:%lld dei:%lld dem:%lld llr:%lld tci:%lld \n",
TICK_TO_US(eNB->ulsch_turbo_decoding_stats),
TICK_TO_US(eNB->ulsch_deinterleaving_stats),
TICK_TO_US(eNB->ulsch_demultiplexing_stats),
......@@ -385,8 +475,10 @@ static void *L1_thread( void *param ) {
char thread_name[100];
#if 0 /* MultiCell: Not Required for MultiCell case */
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
#endif
// set default return value
eNB_thread_rxtx_status = 0;
sprintf(thread_name,"RXn_TXnp4_%d\n",&eNB->proc.L1_proc == proc ? 0 : 1);
......@@ -423,9 +515,9 @@ static void *L1_thread( void *param ) {
if (oai_exit) break;
if (eNB->CC_id==0) {
/* MultiCell: Condition modified for MultiCell case */
/* This thread can only be wakeup for one cell SUBFRAME Ind under VNF as proxy would only send one SUBFRAME Ind for all cells. */
if (rxtx(eNB,proc,thread_name) < 0) break;
}
LOG_D(PHY,"L1 RX %d.%d done\n",proc->frame_rx,proc->subframe_rx);
......@@ -466,7 +558,6 @@ void eNB_top(PHY_VARS_eNB *eNB,
L1_proc->subframe_rx = ru_proc->tti_rx;
L1_proc->frame_tx = (L1_proc->subframe_rx > (9-ru->sf_ahead)) ? (L1_proc->frame_rx+1)&1023 : L1_proc->frame_rx;
L1_proc->subframe_tx = (L1_proc->subframe_rx + ru->sf_ahead)%10;
if (rxtx(eNB,L1_proc,string) < 0)
LOG_E(PHY,"eNB %d CC_id %d failed during execution\n",eNB->Mod_id,eNB->CC_id);
ru_proc->timestamp_tx = L1_proc->timestamp_tx;
......@@ -597,7 +688,6 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,
ru_proc->frame_rx,ru_proc->tti_rx,L1_proc->frame_rx,L1_proc->subframe_rx);
*/
return(0);
}
++L1_proc->instance_cnt;
......@@ -854,7 +944,7 @@ void init_eNB_proc(int inst) {
pthread_attr_t *attr_prach_br=NULL;
LOG_I(PHY,"%s(inst:%d) RC.nb_CC[inst]:%d \n",__FUNCTION__,inst,RC.nb_CC[inst]);
for (CC_id=0; CC_id<RC.nb_CC[inst]; CC_id++) {
for (CC_id=0; CC_id<RC.nb_mac_CC[inst]; CC_id++) {
eNB = RC.eNB[inst][CC_id];
LOG_I(PHY,"Initializing eNB processes instance:%d CC_id %d \n",inst,CC_id);
proc = &eNB->proc;
......@@ -869,6 +959,8 @@ void init_eNB_proc(int inst) {
proc->instance_cnt_asynch_rxtx = -1;
proc->instance_cnt_synch = -1;
proc->CC_id = CC_id;
L1_proc->CC_id = CC_id; /* MultiCell: Added for Multiple CC */
L1_proc_tx->CC_id = CC_id; /* MultiCell: Added for Multiple CC */
proc->first_rx =1;
proc->first_tx =1;
proc->RU_mask_tx = (1<<eNB->num_RU)-1;
......@@ -1136,7 +1228,6 @@ void init_transport(PHY_VARS_eNB *eNB) {
eNB->check_for_SUMIMO_transmissions = 0;
fp->pucch_config_common.deltaPUCCH_Shift = 1;
if (eNB->use_DTX == 0) fill_subframe_mask(eNB);
}
......@@ -1146,10 +1237,10 @@ void init_eNB_afterRU(void) {
LOG_I(PHY,"%s() RC.nb_inst:%d\n", __FUNCTION__, RC.nb_inst);
for (inst=0; inst<RC.nb_inst; inst++) {
LOG_I(PHY,"RC.nb_CC[inst]:%d\n", RC.nb_CC[inst]);
LOG_I(PHY,"RC.nb_mac_CC[inst]:%d\n", RC.nb_mac_CC[inst]);
for (CC_id=0; CC_id<RC.nb_CC[inst]; CC_id++) {
LOG_I(PHY,"RC.nb_CC[inst:%d][CC_id:%d]:%p\n", inst, CC_id, RC.eNB[inst][CC_id]);
for (CC_id=0; CC_id<RC.nb_mac_CC[inst]; CC_id++) {
LOG_I(PHY,"RC.nb_mac_CC[inst:%d][CC_id:%d]:%p\n", inst, CC_id, RC.eNB[inst][CC_id]);
eNB = RC.eNB[inst][CC_id];
// map antennas and PRACH signals to eNB RX
LOG_I(PHY,"Mapping RX ports from %d RUs to eNB %d\n",eNB->num_RU,eNB->Mod_id);
......
......@@ -103,6 +103,10 @@ int config_sync_var=-1;
uint16_t runtime_phy_rx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100]
uint16_t runtime_phy_tx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100]
/** FC Cell config */
pthread_cond_t cell_config_done_cond;
pthread_mutex_t cell_config_done_mutex;
int cell_config_done=-1;
int oai_exit = 0;
int NB_UE_INST = 0;
......@@ -429,6 +433,17 @@ static void init_pdcp(void)
pdcp_set_pdcp_data_ind_func(pdcp_data_ind);
}
static void wait_cell_config(char *thread_name) {
printf( "waiting for [SYS] CELL CONFIG Indication (%s)\n",thread_name);
pthread_mutex_lock( &cell_config_done_mutex );
while ( cell_config_done < 0 )
pthread_cond_wait( &cell_config_done_cond, &cell_config_done_mutex );
pthread_mutex_unlock(&cell_config_done_mutex );
printf( "SYS: got cell config (%s)\n", thread_name);
}
static void wait_nfapi_init(char *thread_name) {
printf( "waiting for NFAPI PNF connection and population of global structure (%s)\n",thread_name);
pthread_mutex_lock( &nfapi_sync_mutex );
......@@ -500,6 +515,13 @@ int main ( int argc, char **argv )
exit(-1);
}
/** TODO FC: Wait for Cell config, if SS RRC_CONFIGURATION_REQ will be triggered by TASK_SYS */
if (RC.ss.mode == SS_SOFTMODEM) {
/** wait for signal */
wait_cell_config("TASK_SYS");
rrc_enb_process_itti_msg(NULL);
} else
{
for (int enb_id = 0; enb_id < RC.nb_inst; enb_id++) {
MessageDef *msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, RRC_CONFIGURATION_REQ);
RRC_CONFIGURATION_REQ(msg_p) = RC.rrc[enb_id]->configuration;
......@@ -507,6 +529,7 @@ int main ( int argc, char **argv )
rrc_enb_process_itti_msg(NULL);
}
}
}
if (RC.nb_inst > 0) {
protocol_ctxt_t ctxt;
......
......@@ -81,6 +81,13 @@ unsigned short config_frames[4] = {2,9,11,13};
#include "gnb_config.h"
#include "openair2/E1AP/e1ap_common.h"
#include "openair2/E1AP/e1ap_api.h"
#include "ss_gNB_sys_task.h"
#include "ss_gNB_port_man_task.h"
#include "ss_gNB_srb_task.h"
#include "udp_eNB_task.h"
#include "ss_gNB_drb_task.h"
#include "ss_gNB_vtp_task.h"
#include "ss_gNB_vt_timer_task.h"
pthread_cond_t nfapi_sync_cond;
pthread_mutex_t nfapi_sync_mutex;
......@@ -176,6 +183,11 @@ openair0_config_t openair0_cfg[MAX_CARDS];
double cpuf;
/** FC Cell config */
pthread_cond_t cell_config_done_cond;
pthread_mutex_t cell_config_done_mutex;
int cell_config_done=-1;
/* hack: pdcp_run() is required by 4G scheduler which is compiled into
* nr-softmodem because of linker issues */
void pdcp_run(const protocol_ctxt_t *const ctxt_pP)
......@@ -389,10 +401,51 @@ static int create_gNB_tasks(void) {
}
if (gnb_nb > 0) {
RCconfig_nr_ssparam();
if (itti_create_task (TASK_GNB_APP, gNB_app_task, NULL) < 0) {
LOG_E(GNB_APP, "Create task for gNB APP failed\n");
return -1;
}
if (RC.ss.mode >= SS_SOFTMODEM)
{
if(itti_create_task(TASK_SS_PORTMAN_GNB, ss_gNB_port_man_task, NULL) < 0)
{
LOG_E(GNB_APP, "Create task for SS Port manager GNB failed\n");
return -1;
}
/* This sleep is for gNB_app_task to load the RRC configuration */
usleep(1000);
if(itti_create_task(TASK_SYS_GNB, ss_gNB_sys_task, NULL) < 0)
{
LOG_E(GNB_APP, "Create task for SS GNB failed\n");
return -1;
}
if(itti_create_task(TASK_UDP, udp_eNB_task, NULL) < 0) {
LOG_E(SCTP, "Create task for UDP failed\n");
return -1;
}
if(itti_create_task(TASK_SS_SRB_GNB, ss_gNB_srb_task, NULL) < 0) {
LOG_E(SCTP, "Create task for SS SRB GNB failed\n");
return -1;
}
if(itti_create_task(TASK_SS_DRB, ss_gNB_drb_task, NULL) < 0) {
LOG_E(SCTP, "Create task for SS DRB failed\n");
return -1;
}
if(itti_create_task(TASK_VTP, ss_gNB_vtp_task, NULL) < 0) {
LOG_E(SCTP, "Create task for TASK_VTP failed\n");
return -1;
}
if(itti_create_task(TASK_VT_TIMER, ss_gNB_vt_timer_task, NULL) < 0) {
LOG_E(SCTP, "Create task for TASK_VT_TIMER failed\n");
return -1;
}
}
LOG_I(NR_RRC, "Creating NR RRC gNB Task, that will also create TASKS\n");
if (itti_create_task (TASK_RRC_GNB, rrc_gnb_task, NULL) < 0) {
......
......@@ -221,6 +221,8 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot)
}
if (dl_tti_request) {
int dl_tti_sfn_slot = NFAPI_SFNSLOT2HEX(dl_tti_request->SFN, dl_tti_request->Slot);
LOG_A(NR_MAC, "[%d %d] sfn/slot dl_tti_request received \n",
NFAPI_SFNSLOT2SFN(dl_tti_sfn_slot), NFAPI_SFNSLOT2SLOT(dl_tti_sfn_slot));
nfapi_nr_tx_data_request_t *tx_data_request = unqueue_matching(&nr_tx_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &dl_tti_sfn_slot);
if (!tx_data_request) {
LOG_E(NR_MAC, "[%d %d] No corresponding tx_data_request for given dl_tti_request sfn/slot\n",
......@@ -247,6 +249,26 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot)
}
}
static void send_vt_slot_ack(nfapi_ue_slot_indication_vt_t *vt_ue_slot_ind, uint16_t sfn_slot)
{
/** Send VT ACK for SLOT */
if ( NULL != vt_ue_slot_ind)
{
LOG_D(NR_MAC, "Sfn [%d] Slot [%d] from %s\n", NFAPI_SFNSLOT2SFN(sfn_slot),
NFAPI_SFNSLOT2SLOT(sfn_slot), __FUNCTION__);
check_and_process_slot_ind(vt_ue_slot_ind, NFAPI_SFNSLOT2SFN(sfn_slot), NFAPI_SFNSLOT2SLOT(sfn_slot) );
NR_UL_IND_t ul_info = {
.vt_ue_slot_ind = *vt_ue_slot_ind,
};
send_nsa_standalone_msg(&ul_info, vt_ue_slot_ind->header.message_id);
ul_info.vt_ue_slot_ind.sfn = 0;
ul_info.vt_ue_slot_ind.slot = 0;
} else {
LOG_D(NR_MAC, "VT is NULL\n");
}
}
static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
{
LOG_I(MAC, "Clearing Queues\n");
......@@ -264,6 +286,8 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
int last_sfn_slot = -1;
uint16_t sfn_slot = 0;
nfapi_ue_slot_indication_vt_t *vt_ue_slot_ind = (nfapi_ue_slot_indication_vt_t *) calloc(1,
sizeof(nfapi_ue_slot_indication_vt_t));
module_id_t mod_id = 0;
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
for (int i = 0; i < NR_MAX_HARQ_PROCESSES; i++) {
......@@ -283,6 +307,9 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
continue;
}
if (slot_ind) {
frame_t frame = NFAPI_SFNSLOT2SFN(*slot_ind);
int slot = NFAPI_SFNSLOT2SLOT(*slot_ind);
LOG_A(NR_MAC, "The received sfn/slot [%d %d] from proxy\n", frame, slot);
sfn_slot = *slot_ind;
free_and_zero(slot_ind);
}
......@@ -310,6 +337,8 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
}
if (mac->scc == NULL && mac->scc_SIB == NULL) {
LOG_D(MAC, "[NSA] mac->scc == NULL and [SA] mac->scc_SIB == NULL!\n");
if (1 /** MODE == VT */)
send_vt_slot_ack(vt_ue_slot_ind, sfn_slot);
continue;
}
......@@ -339,6 +368,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
mac->scc->tdd_UL_DL_ConfigurationCommon :
mac->scc_SIB->tdd_UL_DL_ConfigurationCommon,
ul_info.slot_rx)) {
LOG_D(NR_MAC, "slot_ind frame %d Slot %d. calling nr_ue_dl_ind() and nr_ue_dl_indication() from %s\n", ul_info.frame_rx, ul_info.slot_rx, __FUNCTION__);
memset(&mac->dl_info, 0, sizeof(mac->dl_info));
mac->dl_info.cc_id = CC_id;
mac->dl_info.gNB_index = gNB_id;
......@@ -360,7 +390,12 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
nr_ue_ul_scheduler(&ul_info);
}
process_queued_nr_nfapi_msgs(mac, sfn_slot);
if (1 /** MODE == VT */)
send_vt_slot_ack(vt_ue_slot_ind, sfn_slot);
}
free(vt_ue_slot_ind);
return NULL;
}
......
This diff is collapsed.
This diff is collapsed.
......@@ -24,7 +24,9 @@ typedef enum {
P5_VENDOR_EXT_RSP,
P7_VENDOR_EXT_REQ,
P7_VENDOR_EXT_IND
P7_VENDOR_EXT_IND,
P7_CELL_SEARCH_IND
} vendor_ext_message_id_e;
......
......@@ -21,6 +21,7 @@
#define FAPI_NR_DCI_IND 0x04
#define FAPI_NR_RX_PDU_TYPE_RAR 0x05
#define FAPI_NR_CSIRS_IND 0x06
#define FAPI_NR_RX_PDU_TYPE_PCH 0x07
#define FAPI_NR_SIBS_MASK_SIB1 0x1
......
......@@ -2732,7 +2732,13 @@ typedef struct {
} nfapi_cqi_indication_rel8_t;
#define NFAPI_CQI_INDICATION_REL8_TAG 0x202f
//#define NFAPI_CC_MAX MAX_NUM_CCs
#ifndef MAX_NUM_CCs
#define NFAPI_CC_MAX 1
#else
#define NFAPI_CC_MAX MAX_NUM_CCs
#endif
typedef struct {
nfapi_tl_t tl;
uint16_t length;
......@@ -3177,6 +3183,7 @@ typedef struct {
#define NFAPI_NB_IOT_CELL_SEARCH_REQUEST_TAG 0x3021
#if 0 /** TODO: FC Moved below, Need clean up for OAI */
typedef struct {
uint16_t pci;
uint8_t rsrp;
......@@ -3191,6 +3198,36 @@ typedef struct {
} nfapi_lte_cell_search_indication_t;
#define NFAPI_LTE_CELL_SEARCH_INDICATION_TAG 0x3007
#else
typedef struct {
uint16_t pci;
uint8_t rsrp;
uint8_t rsrq;
int16_t frequency_offset;
} nfapi_lte_found_cell_t;
typedef struct {
nfapi_tl_t tl;
uint16_t number_of_lte_cells_found;
nfapi_lte_found_cell_t lte_found_cells[NFAPI_MAX_LTE_CELLS_FOUND];
} nfapi_lte_cell_search_indication_t;
#define NFAPI_LTE_CELL_SEARCH_INDICATION_TAG 0x3007
typedef struct {
nfapi_p7_message_header_t header;
uint32_t error_code;
nfapi_lte_cell_search_indication_t lte_cell_search_indication;
#if 0 /** TODO FC Lets's start with only LTE */
nfapi_utran_cell_search_indication_t utran_cell_search_indication;
nfapi_geran_cell_search_indication_t geran_cell_search_indication;
nfapi_pnf_cell_search_state_t pnf_cell_search_state;
nfapi_nb_iot_cell_search_indication_t nb_iot_cell_search_indication;
#endif
nfapi_vendor_extension_tlv_t vendor_extension;
} vendor_nfapi_cell_search_indication_t;
#endif
typedef struct {
uint16_t psc;
......@@ -3465,6 +3502,9 @@ typedef struct {
uint16_t sfn_sf;
} nfapi_subframe_indication_t;
/** VTUESF.indication sent from UE as an ACK in the virtual time scenario */
typedef nfapi_subframe_indication_t nfapi_ue_sf_indication_vt_t;
typedef struct {
nfapi_p7_message_header_t header;
uint16_t sfn_sf;
......
......@@ -10,7 +10,7 @@
#define _NFAPI_NR_INTERFACE_H_
#include "nfapi_interface.h"
#include "nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h"
#include "nfapi_nr_interface_scf.h"
#define NFAPI_NR_MAX_NB_CCE_AGGREGATION_LEVELS 5
#define NFAPI_NR_MAX_NB_TCI_STATES_PDCCH 64
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment