diff --git a/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
index aa03e91fd0..884ab771e6 100644
--- a/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
+++ b/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
@@ -45,8 +45,8 @@ gNBs =
dl_carrierBandwidth = 106;
#initialDownlinkBWP
#genericParameters
- # this is RBstart=0,L=50 (275*(L-1))+RBstart
- initialDLBWPlocationAndBandwidth = 13475;
+ # this is RBstart=41,L=24 (275*(L-1))+RBstart
+ initialDLBWPlocationAndBandwidth = 6366;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
@@ -59,7 +59,7 @@ gNBs =
#initialULBWPmappingType
#0=typeA,1=typeB
initialDLBWPmappingType_0 = 0;
- #this is SS=2,L=3
+ #this is SS=1,L=13
initialDLBWPstartSymbolAndLength_0 = 40;
initialDLBWPk0_1 = 0;
@@ -74,7 +74,7 @@ gNBs =
initialDLBWPk0_3 = 0;
initialDLBWPmappingType_3 = 0;
- #this is SS=1,L=4
+ #this is SS=1,L=5
initialDLBWPstartSymbolAndLength_3 = 57;
#uplinkConfigCommon
@@ -89,7 +89,7 @@ gNBs =
pMax = 20;
#initialUplinkBWP
#genericParameters
- initialULBWPlocationAndBandwidth = 13475;
+ initialULBWPlocationAndBandwidth = 6366;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
@@ -135,8 +135,8 @@ gNBs =
initialULBWPmappingType_0 = 1
# this is SS=0 L=11
initialULBWPstartSymbolAndLength_0 = 55;
-
- initialULBWPk2_1 = 6;
+
+ initialULBWPk2_1 = 6;
initialULBWPmappingType_1 = 1;
# this is SS=0 L=12
initialULBWPstartSymbolAndLength_1 = 69;
@@ -145,7 +145,7 @@ gNBs =
initialULBWPmappingType_2 = 1;
# this is SS=10 L=4
initialULBWPstartSymbolAndLength_2 = 52;
-
+
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
@@ -249,7 +249,7 @@ RUs = (
eNB_instances = [0];
#beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
- sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
+ sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.10.2,second_addr=192.168.20.2";
clock_src = "external";
}
);
diff --git a/ci-scripts/reportTestLocally.sh b/ci-scripts/reportTestLocally.sh
index 03cda20542..8562f4b2de 100755
--- a/ci-scripts/reportTestLocally.sh
+++ b/ci-scripts/reportTestLocally.sh
@@ -470,7 +470,7 @@ function report_test {
then
NB_UE_TUNNEL_UP=`egrep -c "Interface oaitun_ue1 successfully configured" $UE_LOG`
else
- NB_UE_TUNNEL_UP=`egrep -c "executing ifconfig oaitun_ue1" $UE_LOG`
+ NB_UE_TUNNEL_UP=`egrep -c "ip link set oaitun_ue1 up" $UE_LOG`
fi
if [ $NB_ENB_GOT_SYNC -gt 0 ] && [ $NB_UE_GOT_SYNC -gt 0 ] && [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
then
@@ -768,55 +768,47 @@ function report_test {
#RA test (--do-ra option)
-# Currently disabled
-# #build log files names
-# RA_ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_gnb_ra_test.log
-# RA_UE_LOG=$ARCHIVES_LOC/ra_check_${TMODE}_${BW}prb_${CN_CONFIG}_ue_ra_test.log
-# if [ -f $RA_ENB_LOG ] && [ -f $RA_UE_LOG ]
-# then
-# #get rid of full path
-# NAME_ENB=`echo $RA_ENB_LOG | sed -e "s#$ARCHIVES_LOC/##"`
-# NAME_UE=`echo $RA_UE_LOG | sed -e "s#$ARCHIVES_LOC/##"`
-# echo "
" >> ./test_simulator_results.html
-# echo " | $NAME_ENB --- $NAME_UE | " >> ./test_simulator_results.html
-# echo " Check if RA proc succeeded | " >> ./test_simulator_results.html
-#
-# #gNB RA check
-# GNB_RECEIVED=`egrep -c "received correctly" $RA_ENB_LOG`
-# GNB_CONNECTED=`egrep -c "now 5G connected" $RA_ENB_LOG`
-# #UE RA check
-# UE_RA_PROC_OK=`egrep -c "RA procedure succeeded" $RA_UE_LOG`
-#
-#
-# if [ $GNB_RECEIVED -gt 0 ] && [ $GNB_CONNECTED -gt 0 ] && [ $UE_RA_PROC_OK -gt 0 ]
-# then
-# echo " OK | " >> ./test_simulator_results.html
-# else
-# echo " KO | " >> ./test_simulator_results.html
-# fi
-#
-# echo " " >> ./test_simulator_results.html
-# if [ $GNB_RECEIVED -gt 0 ]
-# then
-# echo "- gNB --> RA received" >> ./test_simulator_results.html
-# else
-# echo "- gNB RA NOT RECEIVED" >> ./test_simulator_results.html
-# fi
-# if [ $GNB_CONNECTED -gt 0 ]
-# then
-# echo "- gNB --> 5G connected" >> ./test_simulator_results.html
-# else
-# echo "- gNB NOT 5G CONNECTED" >> ./test_simulator_results.html
-# fi
-# if [ $UE_RA_PROC_OK -gt 0 ]
-# then
-# echo "- NR UE --> RA procedure succeded" >> ./test_simulator_results.html
-# else
-# echo "- NR UE RA procedure failed" >> ./test_simulator_results.html
-# fi
-# echo " | " >> ./test_simulator_results.html
-# echo "
" >> ./test_simulator_results.html
-# fi
+ #build log files names
+ RA_ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_gnb_ra_test.log
+ RA_UE_LOG=$ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_ue_ra_test.log
+ if [ -f $RA_ENB_LOG ] && [ -f $RA_UE_LOG ]
+ then
+ #get rid of full path
+ NAME_ENB=`echo $RA_ENB_LOG | sed -e "s#$ARCHIVES_LOC/##"`
+ NAME_UE=`echo $RA_UE_LOG | sed -e "s#$ARCHIVES_LOC/##"`
+ echo " " >> ./test_simulator_results.html
+ echo " | $NAME_ENB --- $NAME_UE | " >> ./test_simulator_results.html
+ echo " Check if RA proc succeeded | " >> ./test_simulator_results.html
+
+ #gNB RA check
+ GNB_RECEIVED=`egrep -c "\[RAPROC\] PUSCH with TC_RNTI (.+) received correctly" $RA_ENB_LOG`
+ #UE RA check
+ UE_RA_PROC_OK=`egrep -c "\[RAPROC\] RA procedure succeeded" $RA_UE_LOG`
+
+
+ if [ $GNB_RECEIVED -gt 0 ] && [ $UE_RA_PROC_OK -gt 0 ]
+ then
+ echo " OK | " >> ./test_simulator_results.html
+ else
+ echo " KO | " >> ./test_simulator_results.html
+ fi
+
+ echo " " >> ./test_simulator_results.html
+ if [ $GNB_RECEIVED -gt 0 ]
+ then
+ echo "- gNB --> RA received" >> ./test_simulator_results.html
+ else
+ echo "- gNB RA NOT RECEIVED" >> ./test_simulator_results.html
+ fi
+ if [ $UE_RA_PROC_OK -gt 0 ]
+ then
+ echo "- NR UE --> RA procedure succeded" >> ./test_simulator_results.html
+ else
+ echo "- NR UE RA procedure failed" >> ./test_simulator_results.html
+ fi
+ echo " | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ fi
#SYNC test
ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_gnb.log
diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh
index 734001040c..9f44e0ae91 100755
--- a/ci-scripts/runTestOnVM.sh
+++ b/ci-scripts/runTestOnVM.sh
@@ -281,14 +281,35 @@ function check_ra_result {
local LOC_GNB_LOG=$1
local LOC_UE_LOG=$2
- #gNB RA test
- echo "Checking gNB Log for RA success"
- egrep "received correctly" $1
- egrep "now 5G connected" $1
-
- #UE RA test
- echo 'Checking UE Log for RA success'
- egrep "RA procedure succeeded" $2
+ #if log files exist
+ if [ -f $LOC_GNB_LOG ] && [ -f $LOC_UE_LOG ]
+ then
+
+ #gNB RA test
+ #console check
+ echo "Checking gNB Log for RA success"
+ egrep "\[RAPROC\] PUSCH with TC_RNTI (.+) received correctly" $1
+ #script check
+ local GNB_COMPLETE=`egrep -c "\[RAPROC\] PUSCH with TC_RNTI (.+) received correctly" $1`
+
+ #UE RA test
+ #console check
+ echo 'Checking UE Log for RA success'
+ egrep "\[RAPROC\] RA procedure succeeded" $2
+ #script check
+ local UE_COMPLETE=`egrep -c "\[RAPROC\] RA procedure succeeded" $2`
+
+ #generate status
+ if [ $GNB_COMPLETE -eq 0 ] || [ $UE_COMPLETE -eq 0 ]
+ then
+ RA_STATUS=-1
+ echo "RA test FAILED, could not find the markers"
+ fi
+ #case where log files do not exist
+ else
+ echo "RA test log files not present"
+ RA_STATUS=-1
+ fi
}
@@ -1225,16 +1246,6 @@ function start_rf_sim_gnb {
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR < $1
rm $1
- # For the moment, in RA test, no check and no copy of generated raw files
- if [ $LOC_RA_TEST -eq 1 ] # RA test
- then
- sleep 30
- echo "echo \"free -m\"" > $1
- echo "free -m" >> $1
- ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR < $1
- rm $1
- return 0
- fi
local i="0"
echo "egrep -c \"got sync\" /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE" > $1
@@ -1258,7 +1269,9 @@ function start_rf_sim_gnb {
GNB_SYNC=1
echo "RF-SIM gNB is sync'ed: waiting for UE(s) to connect"
fi
- if [ $LOC_S1_CONFIGURATION -eq 0 ]
+
+ # check noS1 config only outside RA test (as it does not support noS1)
+ if [ $LOC_S1_CONFIGURATION -eq 0 ] && [ $LOC_RA_TEST -eq 0 ]
then
echo "ifconfig oaitun_enb1 | egrep -c \"inet addr\"" > $1
# Checking oaitun_enb1 interface has now an IP address
@@ -1341,14 +1354,6 @@ function start_rf_sim_nr_ue {
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_NR_UE_VM_IP_ADDR < $1
rm $1
- # In case of RA test mode, no UE sync check for the moment.
- # To be removed later?
- if [ $LOC_RA_TEST -eq 1 ] # RA test
- then
- sleep 30
- NR_UE_SYNC=1
- return 0
- fi
local i="0"
echo "egrep -c \"Initial sync: pbch decoded sucessfully\" /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE" > $1
while [ $i -lt 10 ]
@@ -1372,11 +1377,13 @@ function start_rf_sim_nr_ue {
else
echo "RF-SIM NR-UE is sync'ed w/ gNB"
fi
- # Checking oaitun_ue1 interface has now an IP address
- i="0"
- echo "ifconfig oaitun_ue1 | egrep -c \"inet addr\"" > $1
- while [ $i -lt 10 ]
- do
+ # Checking oaitun_ue1 interface has now an IP address (only outside RA test)
+ if [ $LOC_RA_TEST -eq 0 ]
+ then
+ i="0"
+ echo "ifconfig oaitun_ue1 | egrep -c \"inet addr\"" > $1
+ while [ $i -lt 10 ]
+ do
sleep 5
CONNECTED=`ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_NR_UE_VM_IP_ADDR < $1`
if [ $CONNECTED -eq 1 ]
@@ -1385,21 +1392,20 @@ function start_rf_sim_nr_ue {
else
i=$[$i+1]
fi
- done
- echo "echo \"free -m\"" > $1
- echo "free -m" >> $1
- ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_NR_UE_VM_IP_ADDR < $1
- rm $1
- if [ $i -lt 50 ]
- then
+ done
+ echo "echo \"free -m\"" > $1
+ echo "free -m" >> $1
+ ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_NR_UE_VM_IP_ADDR < $1
+ rm $1
+ if [ $i -lt 50 ]
+ then
NR_UE_SYNC=0
echo "RF-SIM NR-UE oaitun_ue1 is DOWN or NOT CONFIGURED"
- else
+ else
echo "RF-SIM NR-UE oaitun_ue1 is UP and CONFIGURED"
- fi
- sleep 10
-
-
+ fi
+ sleep 10
+ fi
}
@@ -2196,10 +2202,11 @@ function run_test_on_vm {
NR_STATUS=0
######### start of RA TEST loop
- while [ $try_cnt -lt 1 ]
+ while [ $try_cnt -lt 10 ] #10 because it hardly succeed within CI
do
SYNC_STATUS=0
+ RA_STATUS=0
echo "############################################################"
echo "${CN_CONFIG} : Starting the gNB"
@@ -2241,71 +2248,25 @@ function run_test_on_vm {
echo "############################################################"
# Proper check to be done when RA test is working!
- #check_ra_result $ARCHIVES_LOC/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/$CURRENT_NR_UE_LOG_FILE
-
- try_cnt=$[$try_cnt+1]
-
- ########### end RA test
+ check_ra_result $ARCHIVES_LOC/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/$CURRENT_NR_UE_LOG_FILE
+ if [ $RA_STATUS -ne 0 ]
+ then
+ echo "RA test NOT OK"
+ try_cnt=$[$try_cnt+1]
+ else
+ try_cnt=$[$try_cnt+10]
+ fi
done
- sleep 10
- try_cnt="0"
+ ########### end RA test
+
+ sleep 30
+
######### start of PHY TEST loop
+ try_cnt="0"
while [ $try_cnt -lt 4 ]
do
- #start RA test
- SYNC_STATUS=0
- PING_STATUS=0
- IPERF_STATUS=0
-
- echo "############################################################"
- echo "${CN_CONFIG} : Starting the gNB"
- echo "############################################################"
- CURRENT_GNB_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_gnb.log
- #last argument = 1 is to enable --do-ra for RA test
- start_rf_sim_gnb $GNB_VM_CMDS "$GNB_VM_IP_ADDR" $CURRENT_GNB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG 1
-
- echo "############################################################"
- echo "${CN_CONFIG} : Starting the NR-UE"
- echo "############################################################"
- CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue.log
- #last argument = 1 is to enable --do-ra for RA test
- start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
- if [ $NR_UE_SYNC -eq 0 ]
- then
- echo "Problem w/ gNB and NR-UE not syncing"
- terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
- terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
- scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
- scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
- SYNC_STATUS=-1
- try_cnt=$[$try_cnt+1]
- continue
- fi
-
- echo "############################################################"
- echo "${CN_CONFIG} : Terminate gNB/NR-UE simulators"
- echo "############################################################"
- sleep 20
- terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
- terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
- scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
- scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
-
- #check RA markers in gNB and NR UE log files
- echo "############################################################"
- echo "${CN_CONFIG} : Checking RA on gNB / NR-UE"
- echo "############################################################"
-
- mv $ARCHIVES_LOC/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/ra_check_$CURRENT_GNB_LOG_FILE
- mv $ARCHIVES_LOC/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC/ra_check_$CURRENT_NR_UE_LOG_FILE
- # Proper check to be done when RA test is working!
- #check_ra_result $ARCHIVES_LOC/ra_check_$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/ra_check_$CURRENT_NR_UE_LOG_FILE
-
-
- #end RA test
- sleep 30
SYNC_STATUS=0
PING_STATUS=0
@@ -2409,6 +2370,7 @@ function run_test_on_vm {
echo "Checking run status"
echo "############################################################"
+ if [ $RA_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $SYNC_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $PING_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi
diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt
index d036b40560..a4c92f9e3c 100644
--- a/common/utils/T/T_messages.txt
+++ b/common/utils/T/T_messages.txt
@@ -85,6 +85,10 @@ ID = ENB_PHY_MIB
DESC = MIB data
GROUP = ALL:PHY:ENB:WIRESHARK
FORMAT = int,eNB_ID : int,frame : int,subframe : buffer,data
+ID = GNB_PHY_MIB
+ DESC = NR MIB data
+ GROUP = ALL:PHY:GNB:WIRESHARK
+ FORMAT = int,gNB_ID : int,frame : int,slot : buffer,data
#MAC logs
ID = ENB_MAC_UE_DL_SDU
@@ -131,6 +135,18 @@ ID = ENB_MAC_UE_DL_RAR_PDU_WITH_DATA
DESC = MAC downlink PDU for an UE
GROUP = ALL:MAC:ENB:WIRESHARK
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : buffer,data
+ID = GNB_MAC_DL_PDU_WITH_DATA
+ DESC = NR MAC downlink PDU for an UE
+ GROUP = ALL:MAC:GNB:WIRESHARK
+ FORMAT = int,gNB_ID : int,CC_id : int,rnti : int,frame : int,slot : int,harq_pid : buffer,data
+ID = GNB_MAC_UL_PDU_WITH_DATA
+ DESC = NR MAC uplink PDU for an UE
+ GROUP = ALL:MAC:GNB:WIRESHARK
+ FORMAT = int,gNB_ID : int,CC_id : int,rnti : int,frame : int,slot : int,harq_pid : buffer,data
+ID = GNB_MAC_DL_RAR_PDU_WITH_DATA
+ DESC = NR MAC downlink PDU for RAR
+ GROUP = ALL:MAC:GNB:WIRESHARK
+ FORMAT = int,gNB_ID : int,CC_id : int,rnti : int,frame : int,slot : int,harq_pid : buffer,data
#RLC logs
ID = ENB_RLC_DL
diff --git a/common/utils/T/tracer/macpdu2wireshark.c b/common/utils/T/tracer/macpdu2wireshark.c
index c391a99786..d262f09e4a 100644
--- a/common/utils/T/tracer/macpdu2wireshark.c
+++ b/common/utils/T/tracer/macpdu2wireshark.c
@@ -23,6 +23,8 @@ typedef struct {
int socket;
struct sockaddr_in to;
OBUF buf;
+
+ /* LTE traces */
/* ul */
int ul_rnti;
int ul_frame;
@@ -46,6 +48,28 @@ typedef struct {
int rar_frame;
int rar_subframe;
int rar_data;
+
+ /* NR traces */
+ /* NR ul */
+ int nr_ul_rnti;
+ int nr_ul_frame;
+ int nr_ul_slot;
+ int nr_ul_data;
+ /* NR dl */
+ int nr_dl_rnti;
+ int nr_dl_frame;
+ int nr_dl_slot;
+ int nr_dl_data;
+ /* NR mib */
+ int nr_mib_frame;
+ int nr_mib_slot;
+ int nr_mib_data;
+ /* NR RAR */
+ int nr_rar_rnti;
+ int nr_rar_frame;
+ int nr_rar_slot;
+ int nr_rar_data;
+
/* config */
int no_mib;
int no_sib;
@@ -58,8 +82,13 @@ typedef struct {
int cur_sib;
} ev_data;
-void trace(ev_data *d, int direction, int rnti_type, int rnti,
- int frame, int subframe, void *buf, int bufsize, int preamble) {
+/****************************************************************************/
+/* LTE */
+/****************************************************************************/
+
+void trace_lte(ev_data *d, int direction, int rnti_type, int rnti,
+ int frame, int subframe, void *buf, int bufsize, int preamble)
+{
ssize_t ret;
int fsf;
int i;
@@ -100,15 +129,17 @@ void trace(ev_data *d, int direction, int rnti_type, int rnti,
if (ret != d->buf.osize) abort();
}
-void ul(void *_d, event e) {
+void ul(void *_d, event e)
+{
ev_data *d = _d;
- trace(d, DIRECTION_UPLINK, C_RNTI, e.e[d->ul_rnti].i,
- e.e[d->ul_frame].i, e.e[d->ul_subframe].i,
- e.e[d->ul_data].b, e.e[d->ul_data].bsize,
- NO_PREAMBLE);
+ trace_lte(d, DIRECTION_UPLINK, C_RNTI, e.e[d->ul_rnti].i,
+ e.e[d->ul_frame].i, e.e[d->ul_subframe].i,
+ e.e[d->ul_data].b, e.e[d->ul_data].bsize,
+ NO_PREAMBLE);
}
-void dl(void *_d, event e) {
+void dl(void *_d, event e)
+{
ev_data *d = _d;
if (e.e[d->dl_rnti].i == 0xffff) {
@@ -119,14 +150,15 @@ void dl(void *_d, event e) {
d->cur_sib++;
}
- trace(d, DIRECTION_DOWNLINK,
- e.e[d->dl_rnti].i != 0xffff ? C_RNTI : SI_RNTI, e.e[d->dl_rnti].i,
- e.e[d->dl_frame].i, e.e[d->dl_subframe].i,
- e.e[d->dl_data].b, e.e[d->dl_data].bsize,
- NO_PREAMBLE);
+ trace_lte(d, DIRECTION_DOWNLINK,
+ e.e[d->dl_rnti].i != 0xffff ? C_RNTI : SI_RNTI, e.e[d->dl_rnti].i,
+ e.e[d->dl_frame].i, e.e[d->dl_subframe].i,
+ e.e[d->dl_data].b, e.e[d->dl_data].bsize,
+ NO_PREAMBLE);
}
-void mib(void *_d, event e) {
+void mib(void *_d, event e)
+{
ev_data *d = _d;
if (d->no_mib) return;
@@ -134,30 +166,141 @@ void mib(void *_d, event e) {
if (d->max_mib && d->cur_mib == d->max_mib) return;
d->cur_mib++;
- trace(d, DIRECTION_DOWNLINK, NO_RNTI, 0,
- e.e[d->mib_frame].i, e.e[d->mib_subframe].i,
- e.e[d->mib_data].b, e.e[d->mib_data].bsize,
- NO_PREAMBLE);
+ trace_lte(d, DIRECTION_DOWNLINK, NO_RNTI, 0,
+ e.e[d->mib_frame].i, e.e[d->mib_subframe].i,
+ e.e[d->mib_data].b, e.e[d->mib_data].bsize,
+ NO_PREAMBLE);
}
-void preamble(void *_d, event e) {
+void preamble(void *_d, event e)
+{
ev_data *d = _d;
- trace(d, DIRECTION_UPLINK, NO_RNTI, 0,
- e.e[d->preamble_frame].i, e.e[d->preamble_subframe].i,
- NULL, 0,
- e.e[d->preamble_preamble].i);
+ trace_lte(d, DIRECTION_UPLINK, NO_RNTI, 0,
+ e.e[d->preamble_frame].i, e.e[d->preamble_subframe].i,
+ NULL, 0,
+ e.e[d->preamble_preamble].i);
}
-void rar(void *_d, event e) {
+void rar(void *_d, event e)
+{
ev_data *d = _d;
- trace(d, DIRECTION_DOWNLINK, RA_RNTI, e.e[d->rar_rnti].i,
- e.e[d->rar_frame].i, e.e[d->rar_subframe].i,
- e.e[d->rar_data].b, e.e[d->rar_data].bsize,
- NO_PREAMBLE);
+ trace_lte(d, DIRECTION_DOWNLINK, RA_RNTI, e.e[d->rar_rnti].i,
+ e.e[d->rar_frame].i, e.e[d->rar_subframe].i,
+ e.e[d->rar_data].b, e.e[d->rar_data].bsize,
+ NO_PREAMBLE);
}
+/****************************************************************************/
+/* NR */
+/****************************************************************************/
+
+#define MAC_NR_START_STRING "mac-nr"
+
+#define MAC_NR_PAYLOAD_TAG 0x01
+#define MAC_NR_RNTI_TAG 0x02
+#define MAC_NR_FRAME_SLOT_TAG 0x07
+
+#define NR_FDD_RADIO 1
+#define NR_TDD_RADIO 2
+
+#define NR_DIRECTION_UPLINK 0
+#define NR_DIRECTION_DOWNLINK 1
+
+#define NR_NO_RNTI 0
+#define NR_RA_RNTI 2
+#define NR_C_RNTI 3
+
+void trace_nr(ev_data *d, int direction, int rnti_type, int rnti,
+ int frame, int slot, void *buf, int bufsize, int preamble)
+{
+ ssize_t ret;
+ int i;
+ d->buf.osize = 0;
+ PUTS(&d->buf, MAC_NR_START_STRING);
+ PUTC(&d->buf, NR_TDD_RADIO);
+ PUTC(&d->buf, direction);
+ PUTC(&d->buf, rnti_type);
+
+ if (rnti_type == NR_C_RNTI || rnti_type == NR_RA_RNTI) {
+ PUTC(&d->buf, MAC_NR_RNTI_TAG);
+ PUTC(&d->buf, (rnti>>8) & 255);
+ PUTC(&d->buf, rnti & 255);
+ }
+
+#if 0
+ /* for old versions of wireshark; not sure if correct */
+ int fsf = (frame << 4) + slot;
+ PUTC(&d->buf, 4 /* MAC_NR_FRAME_SUBFRAME_TAG */);
+ PUTC(&d->buf, (fsf>>8) & 255);
+ PUTC(&d->buf, fsf & 255);
+#else
+ PUTC(&d->buf, MAC_NR_FRAME_SLOT_TAG);
+ PUTC(&d->buf, (frame>>8) & 255);
+ PUTC(&d->buf, frame & 255);
+ PUTC(&d->buf, (slot>>8) & 255);
+ PUTC(&d->buf, slot & 255);
+#endif
+
+ PUTC(&d->buf, MAC_NR_PAYLOAD_TAG);
+
+ for (i = 0; i < bufsize; i++)
+ PUTC(&d->buf, ((char *)buf)[i]);
+
+ ret = sendto(d->socket, d->buf.obuf, d->buf.osize, 0,
+ (struct sockaddr *)&d->to, sizeof(struct sockaddr_in));
+
+ if (ret != d->buf.osize) abort();
+}
+
+void nr_ul(void *_d, event e)
+{
+ ev_data *d = _d;
+
+ trace_nr(d, NR_DIRECTION_UPLINK, NR_C_RNTI, e.e[d->nr_ul_rnti].i,
+ e.e[d->nr_ul_frame].i, e.e[d->nr_ul_slot].i,
+ e.e[d->nr_ul_data].b, e.e[d->nr_ul_data].bsize, NO_PREAMBLE);
+}
+
+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,
+ e.e[d->nr_dl_frame].i, e.e[d->nr_dl_slot].i,
+ e.e[d->nr_dl_data].b, e.e[d->nr_dl_data].bsize, NO_PREAMBLE);
+}
+
+void nr_mib(void *_d, event e)
+{
+ ev_data *d = _d;
+
+ if (d->no_mib) return;
+
+ if (d->max_mib && d->cur_mib == d->max_mib) return;
+
+ d->cur_mib++;
+
+ trace_nr(d, NR_DIRECTION_DOWNLINK, NR_NO_RNTI, 0,
+ e.e[d->nr_mib_frame].i, e.e[d->nr_mib_slot].i,
+ e.e[d->nr_mib_data].b, e.e[d->nr_mib_data].bsize, NO_PREAMBLE);
+}
+
+void nr_rar(void *_d, event e)
+{
+ ev_data *d = _d;
+
+ trace_nr(d, NR_DIRECTION_DOWNLINK, NR_RA_RNTI, e.e[d->nr_rar_rnti].i,
+ e.e[d->nr_rar_frame].i, e.e[d->nr_rar_slot].i,
+ e.e[d->nr_rar_data].b, e.e[d->nr_rar_data].bsize, NO_PREAMBLE);
+}
+
+/****************************************************************************/
+/****************************************************************************/
+
void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
- int preamble_id, int rar_id) {
+ int preamble_id, int rar_id,
+ int nr_ul_id, int nr_dl_id, int nr_mib_id, int nr_rar_id)
+{
database_event_format f;
int i;
d->ul_rnti = -1;
@@ -174,10 +317,27 @@ void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
d->preamble_frame = -1;
d->preamble_subframe = -1;
d->preamble_preamble = -1;
- d->rar_rnti = -1;
- d->rar_frame = -1;
- d->rar_subframe = -1;
- d->rar_data = -1;
+ d->rar_rnti = -1;
+ d->rar_frame = -1;
+ d->rar_subframe = -1;
+ d->rar_data = -1;
+
+ d->nr_ul_rnti = -1;
+ d->nr_ul_frame = -1;
+ d->nr_ul_slot = -1;
+ d->nr_ul_data = -1;
+ d->nr_dl_rnti = -1;
+ d->nr_dl_frame = -1;
+ d->nr_dl_slot = -1;
+ d->nr_dl_data = -1;
+ d->nr_mib_frame = -1;
+ d->nr_mib_slot = -1;
+ d->nr_mib_data = -1;
+ d->nr_rar_rnti = -1;
+ d->nr_rar_frame = -1;
+ d->nr_rar_slot = -1;
+ d->nr_rar_data = -1;
+
#define G(var_name, var_type, var) \
if (!strcmp(f.name[i], var_name)) { \
if (strcmp(f.type[i], var_type)) goto error; \
@@ -247,6 +407,60 @@ void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
if (d->rar_rnti == -1 || d->rar_frame == -1 || d->rar_subframe == -1 ||
d->rar_data == -1) goto error;
+ /* NR ul: rnti, frame, slot, data */
+ f = get_format(database, nr_ul_id);
+
+ for (i = 0; i < f.count; i++) {
+ G("rnti", "int", d->nr_ul_rnti);
+ G("frame", "int", d->nr_ul_frame);
+ G("slot", "int", d->nr_ul_slot);
+ G("data", "buffer", d->nr_ul_data);
+ }
+
+ if (d->nr_ul_rnti == -1 || d->nr_ul_frame == -1 || d->nr_ul_slot == -1 ||
+ d->nr_ul_data == -1)
+ goto error;
+
+ /* NR dl: rnti, frame, slot, data */
+ f = get_format(database, nr_dl_id);
+
+ for (i = 0; i < f.count; i++) {
+ G("rnti", "int", d->nr_dl_rnti);
+ G("frame", "int", d->nr_dl_frame);
+ G("slot", "int", d->nr_dl_slot);
+ G("data", "buffer", d->nr_dl_data);
+ }
+
+ if (d->nr_dl_rnti == -1 || d->nr_dl_frame == -1 || d->nr_dl_slot == -1 ||
+ d->nr_dl_data == -1)
+ goto error;
+
+ /* NR MIB: frame, slot, data */
+ f = get_format(database, nr_mib_id);
+
+ for (i = 0; i < f.count; i++) {
+ G("frame", "int", d->nr_mib_frame);
+ G("slot", "int", d->nr_mib_slot);
+ G("data", "buffer", d->nr_mib_data);
+ }
+
+ if (d->nr_mib_frame == -1 || d->nr_mib_slot== -1 || d->nr_mib_data == -1)
+ goto error;
+
+ /* NR RAR: rnti, frame, slot, data */
+ f = get_format(database, nr_rar_id);
+
+ for (i = 0; i < f.count; i++) {
+ G("rnti", "int", d->nr_rar_rnti);
+ G("frame", "int", d->nr_rar_frame);
+ G("slot", "int", d->nr_rar_slot);
+ G("data", "buffer", d->nr_rar_data);
+ }
+
+ if (d->nr_rar_rnti == -1 || d->nr_rar_frame == -1 || d->nr_rar_slot == -1 ||
+ d->nr_rar_data == -1)
+ goto error;
+
#undef G
return;
error:
@@ -254,7 +468,8 @@ error:
abort();
}
-void *receiver(void *_d) {
+void *receiver(void *_d)
+{
ev_data *d = _d;
int s;
char buf[100000];
@@ -279,7 +494,8 @@ void *receiver(void *_d) {
return 0;
}
-void usage(void) {
+void usage(void)
+{
printf(
"options:\n"
" -d this option is mandatory\n"
@@ -304,14 +520,16 @@ void usage(void) {
exit(1);
}
-int main(int n, char **v) {
+int main(int n, char **v)
+{
char *database_filename = NULL;
char *input_filename = NULL;
void *database;
event_handler *h;
int in;
int i;
- int ul_id, dl_id, mib_id = -1, preamble_id, rar_id;
+ int ul_id, dl_id, mib_id, preamble_id, rar_id;
+ int nr_ul_id, nr_dl_id, nr_mib_id, nr_rar_id;
ev_data d;
char *ip = DEFAULT_IP;
int port = DEFAULT_PORT;
@@ -382,6 +600,11 @@ int main(int n, char **v) {
on_off(database, "ENB_PHY_INITIATE_RA_PROCEDURE", is_on, 1);
on_off(database, "ENB_MAC_UE_DL_RAR_PDU_WITH_DATA", is_on, 1);
+ on_off(database, "GNB_MAC_UL_PDU_WITH_DATA", is_on, 1);
+ on_off(database, "GNB_MAC_DL_PDU_WITH_DATA", is_on, 1);
+ on_off(database, "GNB_PHY_MIB", is_on, 1);
+ on_off(database, "GNB_MAC_DL_RAR_PDU_WITH_DATA", is_on, 1);
+
/* activate selected traces */
if (socket_send(in, &mt, 1) == -1 ||
socket_send(in, &number_of_events, sizeof(int)) == -1 ||
@@ -398,12 +621,26 @@ int main(int n, char **v) {
mib_id = event_id_from_name(database, "ENB_PHY_MIB");
preamble_id = event_id_from_name(database, "ENB_PHY_INITIATE_RA_PROCEDURE");
rar_id = event_id_from_name(database, "ENB_MAC_UE_DL_RAR_PDU_WITH_DATA");
- setup_data(&d, database, ul_id, dl_id, mib_id, preamble_id, rar_id);
+
+ nr_ul_id = event_id_from_name(database, "GNB_MAC_UL_PDU_WITH_DATA");
+ nr_dl_id = event_id_from_name(database, "GNB_MAC_DL_PDU_WITH_DATA");
+ nr_mib_id = event_id_from_name(database, "GNB_PHY_MIB");
+ nr_rar_id = event_id_from_name(database, "GNB_MAC_DL_RAR_PDU_WITH_DATA");
+
+ setup_data(&d, database, ul_id, dl_id, mib_id, preamble_id, rar_id,
+ nr_ul_id, nr_dl_id, nr_mib_id, nr_rar_id);
+
register_handler_function(h, ul_id, ul, &d);
register_handler_function(h, dl_id, dl, &d);
register_handler_function(h, mib_id, mib, &d);
register_handler_function(h, preamble_id, preamble, &d);
register_handler_function(h, rar_id, rar, &d);
+
+ register_handler_function(h, nr_ul_id, nr_ul, &d);
+ register_handler_function(h, nr_dl_id, nr_dl, &d);
+ register_handler_function(h, nr_mib_id, nr_mib, &d);
+ register_handler_function(h, nr_rar_id, nr_rar, &d);
+
d.socket = socket(AF_INET, SOCK_DGRAM, 0);
if (d.socket == -1) {
@@ -424,8 +661,10 @@ int main(int n, char **v) {
if (e.type == -1) break;
- if (!(e.type == ul_id || e.type == dl_id || e.type == mib_id ||
- e.type == preamble_id || e.type == rar_id)) continue;
+ if (!(e.type == ul_id || e.type == dl_id || e.type == mib_id ||
+ e.type == preamble_id || e.type == rar_id ||
+ e.type == nr_ul_id || e.type == nr_dl_id ||
+ e.type == nr_mib_id || e.type == nr_rar_id)) continue;
handle_event(h, e);
}
diff --git a/common/utils/telnetsrv/telnetsrv_proccmd.c b/common/utils/telnetsrv/telnetsrv_proccmd.c
index 9dd512091d..6a0da678e2 100644
--- a/common/utils/telnetsrv/telnetsrv_proccmd.c
+++ b/common/utils/telnetsrv/telnetsrv_proccmd.c
@@ -121,9 +121,11 @@ char toksep[2];
case SCHED_RR:
lptr+=sprintf(lptr,"%s ","rt: rr");
break;
+#ifdef SCHED_DEADLINE
case SCHED_DEADLINE:
lptr+=sprintf(lptr,"%s ","rt: deadline");
break;
+#endif
default:
lptr+=sprintf(lptr,"%s ","????");
break;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
index 42f88d16f4..a528eb734c 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
@@ -478,7 +478,12 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
NR_gNB_ULSCH_t *ulsch = phy_vars_gNB->ulsch[UE_id][0];
NR_UL_gNB_HARQ_t *harq_process = ulsch->harq_processes[harq_pid];
-
+
+ if (!harq_process) {
+ LOG_E(PHY,"ulsch_decoding.c: NULL harq_process pointer\n");
+ return 1;
+ }
+
t_nrLDPC_dec_params decParams;
t_nrLDPC_dec_params* p_decParams = &decParams;
@@ -488,11 +493,6 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
phy_vars_gNB->nbDecode = 0;
harq_process->processedSegments = 0;
- if (!harq_process) {
- LOG_E(PHY,"ulsch_decoding.c: NULL harq_process pointer\n");
- return 1;
- }
-
double Coderate = 0.0;
// ------------------------------------------------------------------
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index 38ed59e18f..f63af082db 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -113,7 +113,15 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int slot) {
nr_generate_pbch_dmrs(gNB->nr_gold_pbch_dmrs[n_hf][ssb_index&7],&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
else
nr_generate_pbch_dmrs(gNB->nr_gold_pbch_dmrs[0][ssb_index&7],&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
-
+
+ if (T_ACTIVE(T_GNB_PHY_MIB)) {
+ unsigned char bch[3];
+ bch[0] = gNB->ssb_pdu.ssb_pdu_rel15.bchPayload & 0xff;
+ bch[1] = (gNB->ssb_pdu.ssb_pdu_rel15.bchPayload >> 8) & 0xff;
+ bch[2] = (gNB->ssb_pdu.ssb_pdu_rel15.bchPayload >> 16) & 0xff;
+ T(T_GNB_PHY_MIB, T_INT(0) /* module ID */, T_INT(frame), T_INT(slot), T_BUFFER(bch, 3));
+ }
+
nr_generate_pbch(&gNB->pbch,
&gNB->ssb_pdu,
gNB->nr_pbch_interleaver,
diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
index abbb1af276..a6dd9fb8c7 100644
--- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
@@ -218,7 +218,7 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue,
/* RACH */
if (get_softmodem_params()->do_ra==1) {
- if ((ue->UE_mode[gNB_id] < PUSCH) && (ue->prach_vars[gNB_id]->prach_Config_enabled == 1)) {
+ if ((ue->UE_mode[gNB_id] > NOT_SYNCHED && ue->UE_mode[gNB_id] < PUSCH) && (ue->prach_vars[gNB_id]->prach_Config_enabled == 1)) {
nr_ue_prach_procedures(ue, proc, gNB_id, mode);
}
}
@@ -896,6 +896,9 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
int *dlsch_errors,
runmode_t mode) {
+ if (dlsch0==NULL)
+ AssertFatal(0,"dlsch0 should be defined at this level \n");
+
int harq_pid = dlsch0->current_harq_pid;
int frame_rx = proc->frame_rx;
int nr_tti_rx = proc->nr_tti_rx;
@@ -923,9 +926,6 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
uint16_t bw_scaling, start_symbol;
float tc_factor;
- if (dlsch0==NULL)
- AssertFatal(0,"dlsch0 should be defined at this level \n");
-
is_cw0_active = dlsch0->harq_processes[harq_pid]->status;
nb_symb_sch = dlsch0->harq_processes[harq_pid]->nb_symbols;
start_symbol = dlsch0->harq_processes[harq_pid]->start_symbol;
@@ -1354,9 +1354,9 @@ void *UE_thread_slot1_dl_processing(void *arg) {
CPU_ZERO(&cpuset);
if ( (proc->sub_frame_start+1)%RX_NB_TH == 0 && threads.slot1_proc_one != -1 )
CPU_SET(threads.slot1_proc_one, &cpuset);
- if ( (proc->sub_frame_start+1)%RX_NB_TH == 1 && threads.slot1_proc_two != -1 )
+ if ( RX_NB_TH > 1 && (proc->sub_frame_start+1)%RX_NB_TH == 1 && threads.slot1_proc_two != -1 )
CPU_SET(threads.slot1_proc_two, &cpuset);
- if ( (proc->sub_frame_start+1)%RX_NB_TH == 2 && threads.slot1_proc_three != -1 )
+ if ( RX_NB_TH > 2 && (proc->sub_frame_start+1)%RX_NB_TH == 2 && threads.slot1_proc_three != -1 )
CPU_SET(threads.slot1_proc_three, &cpuset);
init_thread(900000,1000000 , FIFO_PRIORITY-1, &cpuset,
@@ -1823,24 +1823,48 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
if ((ue->dlsch_SI[gNB_id]) && (ue->dlsch_SI[gNB_id]->active == 1)) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_IN);
nr_ue_pdsch_procedures(ue,
- proc,
- gNB_id,
- SI_PDSCH,
- ue->dlsch_SI[gNB_id],
- NULL);
+ proc,
+ gNB_id,
+ SI_PDSCH,
+ ue->dlsch_SI[gNB_id],
+ NULL);
+ nr_ue_dlsch_procedures(ue,
+ proc,
+ gNB_id,
+ SI_PDSCH,
+ ue->dlsch_SI[gNB_id],
+ NULL,
+ &ue->dlsch_SI_errors[gNB_id],
+ mode);
+
+ // deactivate dlsch once dlsch proc is done
+ ue->dlsch_SI[gNB_id]->active = 0;
+
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_OUT);
}
- // do procedures for SI-RNTI
+ // do procedures for P-RNTI
if ((ue->dlsch_p[gNB_id]) && (ue->dlsch_p[gNB_id]->active == 1)) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_IN);
nr_ue_pdsch_procedures(ue,
- proc,
- gNB_id,
- P_PDSCH,
- ue->dlsch_p[gNB_id],
- NULL);
+ proc,
+ gNB_id,
+ P_PDSCH,
+ ue->dlsch_p[gNB_id],
+ NULL);
+
+ nr_ue_dlsch_procedures(ue,
+ proc,
+ gNB_id,
+ P_PDSCH,
+ ue->dlsch_p[gNB_id],
+ NULL,
+ &ue->dlsch_p_errors[gNB_id],
+ mode);
+
+ // deactivate dlsch once dlsch proc is done
+ ue->dlsch_p[gNB_id]->active = 0;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_OUT);
}
@@ -1849,15 +1873,11 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
if ((ue->dlsch_ra[gNB_id]) && (ue->dlsch_ra[gNB_id]->active == 1)) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_IN);
nr_ue_pdsch_procedures(ue,
- proc,
- gNB_id,
- RA_PDSCH,
- ue->dlsch_ra[gNB_id],
- NULL);
-
- // #if UE_TIMING_TRACE
- // start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[nr_tti_rx]]);
- // #endif
+ proc,
+ gNB_id,
+ RA_PDSCH,
+ ue->dlsch_ra[gNB_id],
+ NULL);
nr_ue_dlsch_procedures(ue,
proc,
@@ -1868,18 +1888,10 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
&ue->dlsch_ra_errors[gNB_id],
mode);
- // #if UE_TIMING_TRACE
- // stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[nr_tti_rx]]);
- #if DISABLE_LOG_X
- printf("[SFN %d] Slot1: Pdsch Proc %5.2f\n", nr_tti_rx, ue->pdsch_procedures_stat[ue->current_thread_id[nr_tti_rx]].p_time/(cpuf*1000.0));
- printf("[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n", nr_tti_rx, ue->dlsch_procedures_stat[ue->current_thread_id[ nr_tti_rx]].p_time/(cpuf*1000.0));
- #else
- LOG_D(PHY, "[SFN %d] Slot1: Pdsch Proc %5.2f\n", nr_tti_rx, ue->pdsch_procedures_stat[ue->current_thread_id[ nr_tti_rx]].p_time/(cpuf*1000.0));
- LOG_D(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n", nr_tti_rx, ue->dlsch_procedures_stat[ue->current_thread_id[ nr_tti_rx]].p_time/(cpuf*1000.0));
- #endif
- // #endif
+ // deactivate dlsch once dlsch proc is done
+ ue->dlsch_ra[gNB_id]->active = 0;
- VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_OUT);
+ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_OUT);
}
// do procedures for C-RNTI
@@ -1946,71 +1958,8 @@ start_meas(&ue->generic_stat);
}
#endif
- // do procedures for SI-RNTI
- if ((ue->dlsch_SI[gNB_id]) && (ue->dlsch_SI[gNB_id]->active == 1)) {
- nr_ue_pdsch_procedures(ue,
- proc,
- gNB_id,
- SI_PDSCH,
- ue->dlsch_SI[gNB_id],
- NULL);
-
- /*ue_dlsch_procedures(ue,
- proc,
- gNB_id,
- SI_PDSCH,
- ue->dlsch_SI[gNB_id],
- NULL,
- &ue->dlsch_SI_errors[gNB_id],
- mode,
- abstraction_flag);
- ue->dlsch_SI[gNB_id]->active = 0;*/
- }
-
- // do procedures for P-RNTI
- if ((ue->dlsch_p[gNB_id]) && (ue->dlsch_p[gNB_id]->active == 1)) {
- nr_ue_pdsch_procedures(ue,
- proc,
- gNB_id,
- P_PDSCH,
- ue->dlsch_p[gNB_id],
- NULL);
-
-
- /*ue_dlsch_procedures(ue,
- proc,
- gNB_id,
- P_PDSCH,
- ue->dlsch_p[gNB_id],
- NULL,
- &ue->dlsch_p_errors[gNB_id],
- mode,
- abstraction_flag);*/
- ue->dlsch_p[gNB_id]->active = 0;
- }
- // do procedures for RA-RNTI
- if ((ue->dlsch_ra[gNB_id]) && (ue->dlsch_ra[gNB_id]->active == 1)) {
- nr_ue_pdsch_procedures(ue,
- proc,
- gNB_id,
- RA_PDSCH,
- ue->dlsch_ra[gNB_id],
- NULL);
-
- /*ue_dlsch_procedures(ue,
- proc,
- gNB_id,
- RA_PDSCH,
- ue->dlsch_ra[gNB_id],
- NULL,
- &ue->dlsch_ra_errors[gNB_id],
- mode,
- abstraction_flag);*/
- ue->dlsch_ra[gNB_id]->active = 0;
- }
-
// duplicate harq structure
- /*
+/*
uint8_t current_harq_pid = ue->dlsch[ue->current_thread_id[nr_tti_rx]][gNB_id][0]->current_harq_pid;
NR_DL_UE_HARQ_t *current_harq_processes = ue->dlsch[ue->current_thread_id[nr_tti_rx]][gNB_id][0]->harq_processes[current_harq_pid];
NR_DL_UE_HARQ_t *harq_processes_dest = ue->dlsch[next1_thread_id][gNB_id][0]->harq_processes[current_harq_pid];
@@ -2138,6 +2087,11 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH, VCD_FUNCTION_IN);
+ if (!prach_resources->init_msg1 && (frame_tx == (ue->prach_resources[gNB_id]->sync_frame + 150) % MAX_FRAME_NUMBER)){
+ ue->prach_cnt = 0;
+ prach_resources->init_msg1 = 1;
+ }
+
if (ue->mac_enabled == 0){
// prach_resources->ra_PreambleIndex = preamble_tx;
prach_resources->ra_TDD_map_index = 0;
@@ -2158,11 +2112,6 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
}
}
- if (!prach_resources->init_msg1 && (frame_tx > ue->prach_resources[gNB_id]->sync_frame + 150)){
- ue->prach_cnt = 0;
- prach_resources->init_msg1 = 1;
- }
-
if (ue->prach_resources[gNB_id] != NULL && nr_prach == 1 && prach_resources->init_msg1) {
pathloss = get_nr_PL(mod_id, ue->CC_id, gNB_id);
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
index bc7e03324a..f54aa711f5 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
@@ -424,7 +424,7 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
AssertFatal(CC_id == 0,"Transmission on secondary CCs is not supported yet\n");
- if (UE_mode < PUSCH && prach_resources->init_msg1) {
+ if (prach_resources->init_msg1) {
LOG_D(MAC, "nr_ue_get_rach, RA_active value: %d", mac->RA_active);
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
index af40c9ccd8..03e0ffa6fd 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
@@ -921,6 +921,10 @@ void nr_generate_Msg2(module_id_t module_idP,
nr_mac->TX_req[CC_id].Slot = slotP;
memcpy((void*)&tx_req->TLVs[0].value.direct[0], (void*)&cc[CC_id].RAR_pdu.payload[0], tx_req->TLVs[0].length);
+ T(T_GNB_MAC_DL_RAR_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id),
+ T_INT(RA_rnti), T_INT(frameP), T_INT(slotP), T_INT(0) /* harq pid, meaningful? */,
+ T_BUFFER(&cc[CC_id].RAR_pdu.payload[0], tx_req->TLVs[0].length));
+
/* mark the corresponding RBs as used */
uint8_t *vrb_map = cc[CC_id].vrb_map;
for (int rb = 0; rb < pdsch_pdu_rel15->rbSize; rb++)
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
index f1d1ed2b72..640068ecae 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
@@ -840,6 +840,9 @@ void nr_schedule_ue_spec(module_id_t module_id,
retInfo->mcs = sched_ctrl->mcs;
retInfo->numDmrsCdmGrpsNoData = sched_ctrl->numDmrsCdmGrpsNoData;
+ T(T_GNB_MAC_DL_PDU_WITH_DATA, T_INT(module_id), T_INT(CC_id), T_INT(rnti),
+ T_INT(frame), T_INT(slot), T_INT(current_harq_pid), T_BUFFER(buf, TBS));
+
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
if (frame%100 == 0) {
LOG_I(MAC,
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index 1c23711315..2dc6f14c96 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -324,6 +324,12 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
NR_RA_t *ra = &gNB_mac->common_channels[CC_idP].ra[0];
+ if (sduP != NULL) {
+ T(T_GNB_MAC_UL_PDU_WITH_DATA, T_INT(gnb_mod_idP), T_INT(CC_idP),
+ T_INT(rntiP), T_INT(frameP), T_INT(slotP), T_INT(-1) /* harq_pid */,
+ T_BUFFER(sduP, sdu_lenP));
+ }
+
// random access pusch with TC-RNTI
if (ra->state == WAIT_Msg3) {
if (sduP != NULL) { // if the CRC passed
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c b/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
index 78a49e4604..e1ae1df077 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
@@ -922,6 +922,7 @@ static missing_data_t next_missing(nr_rlc_entity_am_t *entity,
*/
ret.sn_start = entity->rx_next;
ret.so_start = 0;
+ ret.next = cur;
goto set_end_different_sdu;
}
}
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
index 60acb20ecb..884ab771e6 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
@@ -45,7 +45,7 @@ gNBs =
dl_carrierBandwidth = 106;
#initialDownlinkBWP
#genericParameters
- # this is RBstart=0,L=50 (275*(L-1))+RBstart
+ # this is RBstart=41,L=24 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 6366;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
@@ -74,7 +74,7 @@ gNBs =
initialDLBWPk0_3 = 0;
initialDLBWPmappingType_3 = 0;
- #this is SS=1,L=4
+ #this is SS=1,L=5
initialDLBWPstartSymbolAndLength_3 = 57;
#uplinkConfigCommon
@@ -126,27 +126,26 @@ gNBs =
# 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;
initialULBWPmappingType_0 = 1
# this is SS=0 L=11
initialULBWPstartSymbolAndLength_0 = 55;
-
- initialULBWPk2_1 = 6;
+
+ initialULBWPk2_1 = 6;
initialULBWPmappingType_1 = 1;
# this is SS=0 L=12
initialULBWPstartSymbolAndLength_1 = 69;
- initialULBWPk2_2 = 7;
+ initialULBWPk2_2 = 7;
initialULBWPmappingType_2 = 1;
# this is SS=10 L=4
initialULBWPstartSymbolAndLength_2 = 52;
-
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;