Commit aee672d1 authored by Laurent THOMAS's avatar Laurent THOMAS

fix CU assert and bugs discovered after

parent 3734f7b9
...@@ -33,7 +33,7 @@ gNBs = ...@@ -33,7 +33,7 @@ gNBs =
}); });
nr_cellid = 12345678L nr_cellid = 12345678L;
tr_s_preference = "f1"; tr_s_preference = "f1";
...@@ -44,7 +44,168 @@ gNBs = ...@@ -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 = ...@@ -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 = ...@@ -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 = ...@@ -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 initialDLBWPk0_1 = 0; #for mixed slot
initialDLBWPstartSymbolAndLength_0 = 40;
initialDLBWPk0_1 = 0;
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 = ...@@ -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 = ...@@ -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 = ...@@ -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 = ( ...@@ -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 = ( ...@@ -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 = ( ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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 @@ ...@@ -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, ...@@ -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, ...@@ -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( ...@@ -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( ...@@ -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],
......
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