fix CU assert and bugs discovered after
This commit is contained in:
@@ -33,7 +33,7 @@ gNBs =
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
nr_cellid = 12345678L
|
nr_cellid = 12345678L;
|
||||||
|
|
||||||
tr_s_preference = "f1";
|
tr_s_preference = "f1";
|
||||||
|
|
||||||
@@ -44,7 +44,168 @@ gNBs =
|
|||||||
local_s_portd = 2152;
|
local_s_portd = 2152;
|
||||||
remote_s_portc = 500;
|
remote_s_portc = 500;
|
||||||
remote_s_portd = 2152;
|
remote_s_portd = 2152;
|
||||||
|
ssb_SubcarrierOffset = 0;
|
||||||
|
pdsch_AntennaPorts = 1;
|
||||||
|
pusch_AntennaPorts = 1;
|
||||||
|
min_rxtxtime = 6;
|
||||||
|
sib1_tda = 0;
|
||||||
|
|
||||||
|
pdcch_ConfigSIB1 = (
|
||||||
|
{
|
||||||
|
controlResourceSetZero = 12;
|
||||||
|
searchSpaceZero = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
#frequencyInfoDL
|
||||||
|
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
|
||||||
|
absoluteFrequencySSB = 641280;
|
||||||
|
dl_frequencyBand = 78;
|
||||||
|
# this is 3600 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 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 = 12;
|
||||||
|
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 = 13;
|
||||||
|
preambleReceivedTargetPower = -96;
|
||||||
|
#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 = 4;
|
||||||
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
|
||||||
|
#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 = 6; # used for UL slot
|
||||||
|
initialULBWPmappingType_0 = 1
|
||||||
|
initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13
|
||||||
|
|
||||||
|
initialULBWPk2_1 = 6; # 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 = -90;
|
||||||
|
# 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 definitions
|
||||||
SCTP :
|
SCTP :
|
||||||
{
|
{
|
||||||
@@ -74,6 +235,22 @@ gNBs =
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
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 :
|
log_config :
|
||||||
{
|
{
|
||||||
global_log_level ="info";
|
global_log_level ="info";
|
||||||
|
|||||||
@@ -32,16 +32,15 @@ gNBs =
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
nr_cellid = 12345678L
|
nr_cellid = 12345678L;
|
||||||
|
|
||||||
# tr_s_preference = "local_mac"
|
|
||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
pdsch_AntennaPorts = 1;
|
||||||
pusch_AntennaPorts = 1;
|
pusch_AntennaPorts = 1;
|
||||||
sib1_tda = 1;
|
min_rxtxtime = 6;
|
||||||
|
sib1_tda = 0;
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
{
|
{
|
||||||
@@ -72,26 +71,22 @@ gNBs =
|
|||||||
#initialDownlinkBWP
|
#initialDownlinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
# this is RBstart=27,L=48 (275*(L-1))+RBstart
|
# this is RBstart=27,L=48 (275*(L-1))+RBstart
|
||||||
initialDLBWPlocationAndBandwidth = 12952;
|
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialDLBWPsubcarrierSpacing = 1;
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
#pdcch-ConfigCommon
|
#pdcch-ConfigCommon
|
||||||
initialDLBWPcontrolResourceSetZero = 11;
|
initialDLBWPcontrolResourceSetZero = 12;
|
||||||
initialDLBWPsearchSpaceZero = 0;
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
#pdsch-ConfigCommon
|
#pdsch-ConfigCommon
|
||||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||||
initialDLBWPk0_0 = 0;
|
initialDLBWPk0_0 = 0; #for DL slot
|
||||||
#initialULBWPmappingType
|
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
|
||||||
#0=typeA,1=typeB
|
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
|
||||||
initialDLBWPmappingType_0 = 0;
|
|
||||||
#this is SS=1,L=13
|
|
||||||
initialDLBWPstartSymbolAndLength_0 = 40;
|
|
||||||
|
|
||||||
initialDLBWPk0_1 = 0;
|
initialDLBWPk0_1 = 0; #for mixed slot
|
||||||
initialDLBWPmappingType_1 = 0;
|
initialDLBWPmappingType_1 = 0;
|
||||||
#this is SS=2,L=12
|
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
|
||||||
initialDLBWPstartSymbolAndLength_1 = 57;
|
|
||||||
|
|
||||||
#uplinkConfigCommon
|
#uplinkConfigCommon
|
||||||
#frequencyInfoUL
|
#frequencyInfoUL
|
||||||
@@ -105,7 +100,7 @@ gNBs =
|
|||||||
pMax = 20;
|
pMax = 20;
|
||||||
#initialUplinkBWP
|
#initialUplinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
initialULBWPlocationAndBandwidth = 12952;
|
initialULBWPlocationAndBandwidth = 28875;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialULBWPsubcarrierSpacing = 1;
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
@@ -117,7 +112,7 @@ gNBs =
|
|||||||
prach_msg1_FDM = 0;
|
prach_msg1_FDM = 0;
|
||||||
prach_msg1_FrequencyStart = 0;
|
prach_msg1_FrequencyStart = 0;
|
||||||
zeroCorrelationZoneConfig = 13;
|
zeroCorrelationZoneConfig = 13;
|
||||||
preambleReceivedTargetPower = -118;
|
preambleReceivedTargetPower = -96;
|
||||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
preambleTransMax = 6;
|
preambleTransMax = 6;
|
||||||
#powerRampingStep
|
#powerRampingStep
|
||||||
@@ -147,20 +142,17 @@ gNBs =
|
|||||||
restrictedSetConfig = 0,
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
# pusch-ConfigCommon (up to 16 elements)
|
# pusch-ConfigCommon (up to 16 elements)
|
||||||
initialULBWPk2_0 = 6;
|
initialULBWPk2_0 = 6; # used for UL slot
|
||||||
initialULBWPmappingType_0 = 1
|
initialULBWPmappingType_0 = 1
|
||||||
# this is SS=0 L=11
|
initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13
|
||||||
initialULBWPstartSymbolAndLength_0 = 41;
|
|
||||||
|
|
||||||
initialULBWPk2_1 = 6;
|
initialULBWPk2_1 = 6; # used for mixed slot
|
||||||
initialULBWPmappingType_1 = 1;
|
initialULBWPmappingType_1 = 1;
|
||||||
# this is SS=0 L=12
|
initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4
|
||||||
initialULBWPstartSymbolAndLength_1 = 52;
|
|
||||||
|
|
||||||
initialULBWPk2_2 = 7;
|
initialULBWPk2_2 = 7; # used for Msg.3 during RA
|
||||||
initialULBWPmappingType_2 = 1;
|
initialULBWPmappingType_2 = 1;
|
||||||
# this is SS=10 L=4
|
initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4
|
||||||
initialULBWPstartSymbolAndLength_2 = 52;
|
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
msg3_DeltaPreamble = 1;
|
||||||
p0_NominalWithGrant =-90;
|
p0_NominalWithGrant =-90;
|
||||||
@@ -239,6 +231,9 @@ L1s = (
|
|||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 8;
|
pusch_proc_threads = 8;
|
||||||
|
prach_dtx_threshold = 120;
|
||||||
|
pucch0_dtx_threshold = 150;
|
||||||
|
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -249,21 +244,13 @@ RUs = (
|
|||||||
nb_rx = 1
|
nb_rx = 1
|
||||||
att_tx = 0
|
att_tx = 0
|
||||||
att_rx = 0;
|
att_rx = 0;
|
||||||
bands = [7];
|
bands = [78];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 75;
|
max_rxgain = 114;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
#beamforming 1x4 matrix:
|
||||||
bf_weights = [0x00007fff, 0x0000];
|
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||||
##beamforming 1x4 matrix: 1 layer x 4 antennas
|
clock_src = "internal";
|
||||||
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
|
||||||
## beamforming 2x2 matrix:
|
|
||||||
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
|
||||||
## beamforming 4x4 matrix:
|
|
||||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
|
||||||
|
|
||||||
sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.10.2,second_addr=192.168.20.2";
|
|
||||||
clock_src = "external";
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -277,6 +264,10 @@ THREAD_STRUCT = (
|
|||||||
);
|
);
|
||||||
rfsimulator: {
|
rfsimulator: {
|
||||||
serveraddr = "server";
|
serveraddr = "server";
|
||||||
|
serverport = "4043";
|
||||||
|
options = (); #("saviq"); or/and "chanmod"
|
||||||
|
modelname = "AWGN";
|
||||||
|
IQfile = "/tmp/rfsimulator.iqs"
|
||||||
}
|
}
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ typedef struct f1ap_setup_req_s {
|
|||||||
int fdd_flag;
|
int fdd_flag;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
struct {
|
struct fdd_s {
|
||||||
uint32_t ul_nr_arfcn;
|
uint32_t ul_nr_arfcn;
|
||||||
uint8_t ul_scs;
|
uint8_t ul_scs;
|
||||||
uint8_t ul_nrb;
|
uint8_t ul_nrb;
|
||||||
@@ -155,7 +155,7 @@ typedef struct f1ap_setup_req_s {
|
|||||||
uint8_t dl_num_sul_frequency_bands;
|
uint8_t dl_num_sul_frequency_bands;
|
||||||
uint16_t dl_nr_sul_band[32];
|
uint16_t dl_nr_sul_band[32];
|
||||||
} fdd;
|
} fdd;
|
||||||
struct {
|
struct tdd_s {
|
||||||
|
|
||||||
uint32_t nr_arfcn;
|
uint32_t nr_arfcn;
|
||||||
uint8_t scs;
|
uint8_t scs;
|
||||||
|
|||||||
@@ -443,6 +443,7 @@ typedef enum {
|
|||||||
CUtype
|
CUtype
|
||||||
} F1_t;
|
} F1_t;
|
||||||
|
|
||||||
|
static const int nrb_lut[29] = {11, 18, 24, 25, 31, 32, 38, 51, 52, 65, 66, 78, 79, 93, 106, 107, 121, 132, 133, 135, 160, 162, 189, 216, 217, 245, 264, 270, 273};
|
||||||
|
|
||||||
uint8_t F1AP_get_next_transaction_identifier(instance_t enb_mod_idP, instance_t cu_mod_idP);
|
uint8_t F1AP_get_next_transaction_identifier(instance_t enb_mod_idP, instance_t cu_mod_idP);
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
|||||||
OCTET_STRING_TO_INT16(servedCellInformation->fiveGS_TAC, req->cell[i].tac);
|
OCTET_STRING_TO_INT16(servedCellInformation->fiveGS_TAC, req->cell[i].tac);
|
||||||
LOG_D(F1AP, "req->tac[%d] %d \n", i, req->cell[i].tac);
|
LOG_D(F1AP, "req->tac[%d] %d \n", i, req->cell[i].tac);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* - nRCGI */
|
/* - nRCGI */
|
||||||
TBCD_TO_MCC_MNC(&(servedCellInformation->nRCGI.pLMN_Identity), req->cell[i].mcc,
|
TBCD_TO_MCC_MNC(&(servedCellInformation->nRCGI.pLMN_Identity), req->cell[i].mcc,
|
||||||
req->cell[i].mnc,req->cell[i].mnc_digit_length);
|
req->cell[i].mnc,req->cell[i].mnc_digit_length);
|
||||||
@@ -141,15 +141,65 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
|||||||
/* - nRPCI */
|
/* - nRPCI */
|
||||||
req->cell[i].nr_pci = servedCellInformation->nRPCI;
|
req->cell[i].nr_pci = servedCellInformation->nRPCI;
|
||||||
LOG_D(F1AP, "req->nr_pci[%d] %d \n", i, req->cell[i].nr_pci);
|
LOG_D(F1AP, "req->nr_pci[%d] %d \n", i, req->cell[i].nr_pci);
|
||||||
|
|
||||||
// LTS: FIXME data model failure: we don't KNOW if we receive a 4G or a 5G cell
|
// LTS: FIXME data model failure: we don't KNOW if we receive a 4G or a 5G cell
|
||||||
// Furthermore, cell_type is not a attribute of a cell in the data structure !!!!!!!!!!
|
// Furthermore, cell_type is not a attribute of a cell in the data structure !!!!!!!!!!
|
||||||
if (RC.nrrrc && RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)]->node_type == ngran_gNB_CU)
|
if (RC.nrrrc && RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)]->node_type == ngran_gNB_CU)
|
||||||
f1ap_req(true, instance)->cell_type=CELL_MACRO_GNB;
|
f1ap_req(true, instance)->cell_type=CELL_MACRO_GNB;
|
||||||
else
|
else
|
||||||
f1ap_req(true, instance)->cell_type=CELL_MACRO_ENB;
|
f1ap_req(true, instance)->cell_type=CELL_MACRO_ENB;
|
||||||
|
|
||||||
|
|
||||||
|
// FDD Cells
|
||||||
|
if (servedCellInformation->nR_Mode_Info.present==F1AP_NR_Mode_Info_PR_fDD) {
|
||||||
|
struct fdd_s *FDDs=&req->nr_mode_info[i].fdd;
|
||||||
|
F1AP_FDD_Info_t * fDD_Info=servedCellInformation->nR_Mode_Info.choice.fDD;
|
||||||
|
FDDs->ul_nr_arfcn=fDD_Info->uL_NRFreqInfo.nRARFCN;
|
||||||
|
FDDs->ul_num_frequency_bands=fDD_Info->uL_NRFreqInfo.freqBandListNr.list.count;
|
||||||
|
for (int f=0; f < fDD_Info->uL_NRFreqInfo.freqBandListNr.list.count; f++) {
|
||||||
|
F1AP_FreqBandNrItem_t * FreqItem=fDD_Info->uL_NRFreqInfo.freqBandListNr.list.array[f];
|
||||||
|
FDDs->ul_nr_band[f]=FreqItem->freqBandIndicatorNr;
|
||||||
|
int num_available_supported_SULBands=FreqItem->supportedSULBandList.list.count;
|
||||||
|
for (int sul=0; sul < num_available_supported_SULBands; sul ++ ) {
|
||||||
|
F1AP_SupportedSULFreqBandItem_t * SulItem= FreqItem->supportedSULBandList.list.array[sul];
|
||||||
|
FDDs->ul_nr_sul_band[sul]=SulItem->freqBandIndicatorNr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FDDs->dl_nr_arfcn=fDD_Info->dL_NRFreqInfo.nRARFCN;
|
||||||
|
int dlBands=fDD_Info->dL_NRFreqInfo.freqBandListNr.list.count;
|
||||||
|
for (int dlB=0; dlB < dlBands; dlB++) {
|
||||||
|
F1AP_FreqBandNrItem_t * FreqItem=fDD_Info->dL_NRFreqInfo.freqBandListNr.list.array[dlB];
|
||||||
|
FDDs->dl_nr_band[dlB]=FreqItem->freqBandIndicatorNr;
|
||||||
|
int num_available_supported_SULBands = FreqItem->supportedSULBandList.list.count;
|
||||||
|
for (int sul=0; sul < num_available_supported_SULBands; sul ++ ) {
|
||||||
|
F1AP_SupportedSULFreqBandItem_t * SulItem= FreqItem->supportedSULBandList.list.array[sul];
|
||||||
|
FDDs->ul_nr_sul_band[sul]=SulItem->freqBandIndicatorNr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FDDs->ul_scs=fDD_Info->uL_Transmission_Bandwidth.nRSCS;
|
||||||
|
FDDs->ul_nrb=nrb_lut[fDD_Info->uL_Transmission_Bandwidth.nRNRB];
|
||||||
|
FDDs->dl_scs=fDD_Info->dL_Transmission_Bandwidth.nRSCS;
|
||||||
|
FDDs->dl_nrb=nrb_lut[fDD_Info->dL_Transmission_Bandwidth.nRNRB];
|
||||||
|
}
|
||||||
|
|
||||||
|
// TDD
|
||||||
|
if (servedCellInformation->nR_Mode_Info.present==F1AP_NR_Mode_Info_PR_tDD) {
|
||||||
|
struct tdd_s *TDDs=&req->nr_mode_info[i].tdd;
|
||||||
|
F1AP_TDD_Info_t * tDD_Info=servedCellInformation->nR_Mode_Info.choice.tDD;
|
||||||
|
TDDs->nr_arfcn=tDD_Info->nRFreqInfo.nRARFCN;
|
||||||
|
TDDs->num_frequency_bands=tDD_Info->nRFreqInfo.freqBandListNr.list.count;
|
||||||
|
for (int f=0; f < tDD_Info->nRFreqInfo.freqBandListNr.list.count; f++) {
|
||||||
|
struct F1AP_FreqBandNrItem * FreqItem=tDD_Info->nRFreqInfo.freqBandListNr.list.array[f];
|
||||||
|
TDDs->nr_band[f]=FreqItem->freqBandIndicatorNr;
|
||||||
|
int num_available_supported_SULBands=FreqItem->supportedSULBandList.list.count;
|
||||||
|
for (int sul=0; sul < num_available_supported_SULBands; sul ++ ) {
|
||||||
|
struct F1AP_SupportedSULFreqBandItem * SulItem= FreqItem->supportedSULBandList.list.array[sul];
|
||||||
|
TDDs->nr_sul_band[sul]=SulItem->freqBandIndicatorNr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TDDs->scs=tDD_Info->transmission_Bandwidth.nRSCS;
|
||||||
|
TDDs->nrb=nrb_lut[tDD_Info->transmission_Bandwidth.nRNRB];
|
||||||
|
}
|
||||||
|
|
||||||
struct F1AP_GNB_DU_System_Information * DUsi=served_cells_item->gNB_DU_System_Information;
|
struct F1AP_GNB_DU_System_Information * DUsi=served_cells_item->gNB_DU_System_Information;
|
||||||
LOG_I(F1AP, "Received Cell in %d context\n", f1ap_req(true, instance)->cell_type==CELL_MACRO_GNB);
|
LOG_I(F1AP, "Received Cell in %d context\n", f1ap_req(true, instance)->cell_type==CELL_MACRO_GNB);
|
||||||
// System Information
|
// System Information
|
||||||
@@ -168,7 +218,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
|||||||
req->sib1_length[i] = DUsi->sIB1_message.size;
|
req->sib1_length[i] = DUsi->sIB1_message.size;
|
||||||
LOG_D(F1AP, "req->sib1[%d] len = %d \n", i, req->sib1_length[i]);
|
LOG_D(F1AP, "req->sib1[%d] len = %d \n", i, req->sib1_length[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// char *measurement_timing_information[F1AP_MAX_NB_CELLS];
|
// char *measurement_timing_information[F1AP_MAX_NB_CELLS];
|
||||||
// uint8_t ranac[F1AP_MAX_NB_CELLS];
|
// uint8_t ranac[F1AP_MAX_NB_CELLS];
|
||||||
// int fdd_flag = f1ap_setup_req->fdd_flag;
|
// int fdd_flag = f1ap_setup_req->fdd_flag;
|
||||||
@@ -209,7 +259,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
|||||||
// We copy and store in F1 task data, RRC will free "req" as it frees all itti received messages
|
// We copy and store in F1 task data, RRC will free "req" as it frees all itti received messages
|
||||||
message_p = itti_alloc_new_message(TASK_CU_F1, 0, F1AP_SETUP_REQ);
|
message_p = itti_alloc_new_message(TASK_CU_F1, 0, F1AP_SETUP_REQ);
|
||||||
memcpy(&F1AP_SETUP_REQ(message_p), req, sizeof(f1ap_setup_req_t) );
|
memcpy(&F1AP_SETUP_REQ(message_p), req, sizeof(f1ap_setup_req_t) );
|
||||||
|
|
||||||
if (req->num_cells_available > 0) {
|
if (req->num_cells_available > 0) {
|
||||||
if (f1ap_req(true, instance)->cell_type == CELL_MACRO_GNB) {
|
if (f1ap_req(true, instance)->cell_type == CELL_MACRO_GNB) {
|
||||||
itti_send_msg_to_task(TASK_RRC_GNB, GNB_MODULE_ID_TO_INSTANCE(instance), message_p);
|
itti_send_msg_to_task(TASK_RRC_GNB, GNB_MODULE_ID_TO_INSTANCE(instance), message_p);
|
||||||
@@ -221,7 +271,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
|||||||
itti_free(TASK_CU_F1,message_p);
|
itti_free(TASK_CU_F1,message_p);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ int CU_handle_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
|||||||
/* RRC Container */
|
/* RRC Container */
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_ULRRCMessageTransferIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_ULRRCMessageTransferIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_RRCContainer, true);
|
F1AP_ProtocolIE_ID_id_RRCContainer, true);
|
||||||
protocol_ctxt_t ctxt;
|
protocol_ctxt_t ctxt={0};
|
||||||
ctxt.instance = instance;
|
ctxt.instance = instance;
|
||||||
ctxt.module_id = instance;
|
ctxt.module_id = instance;
|
||||||
ctxt.rnti = f1ap_get_rnti_by_cu_id(CUtype, instance, cu_ue_f1ap_id);
|
ctxt.rnti = f1ap_get_rnti_by_cu_id(CUtype, instance, cu_ue_f1ap_id);
|
||||||
|
|||||||
@@ -37,9 +37,6 @@
|
|||||||
#include "f1ap_du_interface_management.h"
|
#include "f1ap_du_interface_management.h"
|
||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
|
|
||||||
|
|
||||||
static const int nrb_lut[29] = {11, 18, 24, 25, 31, 32, 38, 51, 52, 65, 66, 78, 79, 93, 106, 107, 121, 132, 133, 135, 160, 162, 189, 216, 217, 245, 264, 270, 273};
|
|
||||||
|
|
||||||
int to_NRNRB(int nrb) {
|
int to_NRNRB(int nrb) {
|
||||||
for (int i=0; i<sizeofArray(nrb_lut); i++)
|
for (int i=0; i<sizeofArray(nrb_lut); i++)
|
||||||
if (nrb_lut[i] == nrb)
|
if (nrb_lut[i] == nrb)
|
||||||
|
|||||||
@@ -211,15 +211,13 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
|||||||
AssertFatal(rrcConnectionSetup!=NULL,"rrcConnectionSetup is null\n");
|
AssertFatal(rrcConnectionSetup!=NULL,"rrcConnectionSetup is null\n");
|
||||||
LTE_RadioResourceConfigDedicated_t *radioResourceConfigDedicated = &rrcConnectionSetup->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r8.radioResourceConfigDedicated;
|
LTE_RadioResourceConfigDedicated_t *radioResourceConfigDedicated = &rrcConnectionSetup->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r8.radioResourceConfigDedicated;
|
||||||
// get SRB logical channel information
|
// get SRB logical channel information
|
||||||
LTE_SRB_ToAddModList_t *SRB_configList;
|
LTE_SRB_ToAddModList_t *SRB_configList = radioResourceConfigDedicated->srb_ToAddModList;
|
||||||
LTE_SRB_ToAddMod_t *SRB1_config;
|
|
||||||
LTE_LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL;
|
|
||||||
SRB_configList = radioResourceConfigDedicated->srb_ToAddModList;
|
|
||||||
AssertFatal(SRB_configList!=NULL,"SRB_configList is null\n");
|
AssertFatal(SRB_configList!=NULL,"SRB_configList is null\n");
|
||||||
|
LTE_LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL;
|
||||||
|
|
||||||
for (int cnt = 0; cnt < (SRB_configList)->list.count; cnt++) {
|
for (int cnt = 0; cnt < (SRB_configList)->list.count; cnt++) {
|
||||||
if ((SRB_configList)->list.array[cnt]->srb_Identity == 1) {
|
if ((SRB_configList)->list.array[cnt]->srb_Identity == 1) {
|
||||||
SRB1_config = (SRB_configList)->list.array[cnt];
|
LTE_SRB_ToAddMod_t * SRB1_config = (SRB_configList)->list.array[cnt];
|
||||||
|
|
||||||
if (SRB1_config->logicalChannelConfig) {
|
if (SRB1_config->logicalChannelConfig) {
|
||||||
if (SRB1_config->logicalChannelConfig->present ==
|
if (SRB1_config->logicalChannelConfig->present ==
|
||||||
@@ -411,7 +409,7 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
|||||||
ue_context_p->ue_context.Srb2.Srb_info.Srb_id=2;
|
ue_context_p->ue_context.Srb2.Srb_info.Srb_id=2;
|
||||||
LOG_I(F1AP, "[DU %ld] SRB2 is now active\n",ctxt.instance);
|
LOG_I(F1AP, "[DU %ld] SRB2 is now active\n",ctxt.instance);
|
||||||
} else {
|
} else {
|
||||||
LOG_W(F1AP, "[DU %ld] invalide SRB identity %ld\n",ctxt.instance,
|
LOG_W(F1AP, "[DU %ld] invalid SRB identity %ld\n",ctxt.instance,
|
||||||
SRB_configList->list.array[i]->srb_Identity);
|
SRB_configList->list.array[i]->srb_Identity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -164,7 +164,6 @@ rrc_eNB_S1AP_get_ue_ids(
|
|||||||
instance_t instance = 0;
|
instance_t instance = 0;
|
||||||
s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL;
|
s1ap_eNB_instance_t *s1ap_eNB_instance_p = NULL;
|
||||||
s1ap_eNB_ue_context_t *ue_desc_p = NULL;
|
s1ap_eNB_ue_context_t *ue_desc_p = NULL;
|
||||||
rrc_eNB_ue_context_t *ue_context_p = NULL;
|
|
||||||
/*****************************/
|
/*****************************/
|
||||||
hashtable_rc_t h_rc;
|
hashtable_rc_t h_rc;
|
||||||
|
|
||||||
@@ -252,29 +251,7 @@ rrc_eNB_S1AP_get_ue_ids(
|
|||||||
LOG_E(RRC, "Removing UE context eNB_ue_s1ap_id %u: did not find context\n",ue_desc_p->eNB_ue_s1ap_id);
|
LOG_E(RRC, "Removing UE context eNB_ue_s1ap_id %u: did not find context\n",ue_desc_p->eNB_ue_s1ap_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL; //skip the operation below to avoid loop
|
return NULL;
|
||||||
result = rrc_eNB_S1AP_get_ue_ids(rrc_instance_pP, ue_desc_p->ue_initial_id, eNB_ue_s1ap_id);
|
|
||||||
|
|
||||||
if (ue_desc_p->ue_initial_id != UE_INITIAL_ID_INVALID) {
|
|
||||||
result = rrc_eNB_S1AP_get_ue_ids(rrc_instance_pP, ue_desc_p->ue_initial_id, eNB_ue_s1ap_id);
|
|
||||||
|
|
||||||
if (result != NULL) {
|
|
||||||
ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ENB_INSTANCE_TO_MODULE_ID(instance)], result->ue_rnti);
|
|
||||||
|
|
||||||
if ((ue_context_p != NULL) && (ue_context_p->ue_context.eNB_ue_s1ap_id == 0)) {
|
|
||||||
ue_context_p->ue_context.eNB_ue_s1ap_id = eNB_ue_s1ap_id;
|
|
||||||
} else {
|
|
||||||
LOG_E(RRC, "[eNB %ld] Incoherence between RRC context and S1AP context (%d != %d) for UE RNTI %d or UE RRC context doesn't exist\n",
|
|
||||||
rrc_instance_pP - RC.rrc[0],
|
|
||||||
(ue_context_p==NULL)?99999:ue_context_p->ue_context.eNB_ue_s1ap_id,
|
|
||||||
eNB_ue_s1ap_id,
|
|
||||||
result->ue_rnti);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
LOG_E(S1AP, "[eNB %ld] S1AP context found but ue_initial_id is invalid (0)\n", rrc_instance_pP - RC.rrc[0]);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
LOG_E(S1AP, "[eNB %ld] In hashtable_get, couldn't find in s1ap_id2_s1ap_ids eNB_ue_s1ap_id %"PRIu32", because ue_initial_id is invalid in S1AP context\n",
|
LOG_E(S1AP, "[eNB %ld] In hashtable_get, couldn't find in s1ap_id2_s1ap_ids eNB_ue_s1ap_id %"PRIu32", because ue_initial_id is invalid in S1AP context\n",
|
||||||
rrc_instance_pP - RC.rrc[0],
|
rrc_instance_pP - RC.rrc[0],
|
||||||
|
|||||||
Reference in New Issue
Block a user