Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenXG
OpenXG-RAN
Commits
39bb839d
Commit
39bb839d
authored
Nov 03, 2020
by
Laurent
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of
https://gitlab.eurecom.fr/oai/openairinterface5g
into noCore
parents
7d603191
adcf9e9f
Changes
26
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
1505 additions
and
537 deletions
+1505
-537
ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
+9
-9
ci-scripts/reportTestLocally.sh
ci-scripts/reportTestLocally.sh
+42
-50
ci-scripts/runTestOnVM.sh
ci-scripts/runTestOnVM.sh
+66
-104
common/utils/T/T_messages.txt
common/utils/T/T_messages.txt
+16
-0
common/utils/T/tracer/macpdu2wireshark.c
common/utils/T/tracer/macpdu2wireshark.c
+279
-40
common/utils/asn1_conversions.h
common/utils/asn1_conversions.h
+2
-2
common/utils/telnetsrv/telnetsrv_proccmd.c
common/utils/telnetsrv/telnetsrv_proccmd.c
+2
-0
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+3
-0
openair1/PHY/INIT/nr_parms.c
openair1/PHY/INIT/nr_parms.c
+1
-1
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+6
-6
openair1/PHY/NR_UE_TRANSPORT/nr_prach.c
openair1/PHY/NR_UE_TRANSPORT/nr_prach.c
+4
-3
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+9
-1
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+57
-108
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+18
-0
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+34
-0
openair2/LAYER2/NR_MAC_UE/config_ue.c
openair2/LAYER2/NR_MAC_UE/config_ue.c
+6
-3
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+5
-2
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
+89
-28
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+828
-171
openair2/LAYER2/NR_MAC_UE/rar_tools_nrUE.c
openair2/LAYER2/NR_MAC_UE/rar_tools_nrUE.c
+8
-1
openair2/LAYER2/NR_MAC_gNB/config.c
openair2/LAYER2/NR_MAC_gNB/config.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+4
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+3
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+6
-0
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
+1
-0
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
.../GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
+6
-7
No files found.
ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
View file @
39bb839d
...
...
@@ -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=1
3
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
;
...
...
@@ -249,7 +249,7 @@ RUs = (
eNB_instances
= [
0
];
#beamforming 1x4 matrix:
bf_weights
= [
0
x00007fff
,
0
x0000
,
0
x0000
,
0
x0000
];
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"
;
}
);
...
...
ci-scripts/reportTestLocally.sh
View file @
39bb839d
...
...
@@ -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 " <tr>" >> ./test_simulator_results.html
# echo " <td>$NAME_ENB --- $NAME_UE</td>" >> ./test_simulator_results.html
# echo " <td>Check if RA proc succeeded</td>" >> ./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 " <td bgcolor = \"green\" >OK</td>" >> ./test_simulator_results.html
# else
# echo " <td bgcolor = \"red\" >KO</td>" >> ./test_simulator_results.html
# fi
#
# echo " <td><pre>" >> ./test_simulator_results.html
# if [ $GNB_RECEIVED -gt 0 ]
# then
# echo "<font color = \"blue\">- gNB --> RA received</font>" >> ./test_simulator_results.html
# else
# echo "<font color = \"red\"><b>- gNB RA NOT RECEIVED</b></font>" >> ./test_simulator_results.html
# fi
# if [ $GNB_CONNECTED -gt 0 ]
# then
# echo "<font color = \"blue\">- gNB --> 5G connected</font>" >> ./test_simulator_results.html
# else
# echo "<font color = \"red\"><b>- gNB NOT 5G CONNECTED</b></font>" >> ./test_simulator_results.html
# fi
# if [ $UE_RA_PROC_OK -gt 0 ]
# then
# echo "<font color = \"blue\">- NR UE --> RA procedure succeded</font>" >> ./test_simulator_results.html
# else
# echo "<font color = \"red\"><b>- NR UE RA procedure failed</b></font>" >> ./test_simulator_results.html
# fi
# echo " </pre></td>" >> ./test_simulator_results.html
# echo " </tr>" >> ./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
" <tr>"
>>
./test_simulator_results.html
echo
" <td>
$NAME_ENB
---
$NAME_UE
</td>"
>>
./test_simulator_results.html
echo
" <td>Check if RA proc succeeded</td>"
>>
./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
" <td bgcolor =
\"
green
\"
>OK</td>"
>>
./test_simulator_results.html
else
echo
" <td bgcolor =
\"
red
\"
>KO</td>"
>>
./test_simulator_results.html
fi
echo
" <td><pre>"
>>
./test_simulator_results.html
if
[
$GNB_RECEIVED
-gt
0
]
then
echo
"<font color =
\"
blue
\"
>- gNB --> RA received</font>"
>>
./test_simulator_results.html
else
echo
"<font color =
\"
red
\"
><b>- gNB RA NOT RECEIVED</b></font>"
>>
./test_simulator_results.html
fi
if
[
$UE_RA_PROC_OK
-gt
0
]
then
echo
"<font color =
\"
blue
\"
>- NR UE --> RA procedure succeded</font>"
>>
./test_simulator_results.html
else
echo
"<font color =
\"
red
\"
><b>- NR UE RA procedure failed</b></font>"
>>
./test_simulator_results.html
fi
echo
" </pre></td>"
>>
./test_simulator_results.html
echo
" </tr>"
>>
./test_simulator_results.html
fi
#SYNC test
ENB_LOG
=
$ARCHIVES_LOC
/
${
TMODE
}
_
${
BW
}
prb_
${
CN_CONFIG
}
_gnb.log
...
...
ci-scripts/runTestOnVM.sh
View file @
39bb839d
...
...
@@ -281,14 +281,35 @@ function check_ra_result {
local
LOC_GNB_LOG
=
$1
local
LOC_UE_LOG
=
$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
"received correctly"
$1
egrep
"now 5G connected"
$1
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
"RA procedure succeeded"
$2
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,7 +1377,9 @@ 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
# 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
]
...
...
@@ -1398,8 +1405,7 @@ function start_rf_sim_nr_ue {
echo
"RF-SIM NR-UE oaitun_ue1 is UP and CONFIGURED"
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
1
0
]
#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
done
sleep
10
try_cnt
=
"0"
######### start of PHY TEST loop
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
]
check_ra_result
$ARCHIVES_LOC
/
$CURRENT_GNB_LOG_FILE
$ARCHIVES_LOC
/
$CURRENT_NR_UE_LOG_FILE
if
[
$RA_STATUS
-ne
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
echo
"RA test NOT OK"
try_cnt
=
$[$try_cnt
+1]
continue
else
try_cnt
=
$[$try_cnt
+10]
fi
done
########### end RA test
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
"############################################################"
sleep
30
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
######### start of PHY TEST loop
try_cnt
=
"0"
while
[
$try_cnt
-lt
4
]
do
#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
...
...
common/utils/T/T_messages.txt
View file @
39bb839d
...
...
@@ -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
...
...
common/utils/T/tracer/macpdu2wireshark.c
View file @
39bb839d
This diff is collapsed.
Click to expand it.
common/utils/asn1_conversions.h
View file @
39bb839d
...
...
@@ -101,11 +101,11 @@ static inline uint64_t BIT_STRING_to_uint64(BIT_STRING_t *asn) {
shift
=
((
asn
->
size
-
1
)
*
8
)
-
asn
->
bits_unused
;
for
(
index
=
0
;
index
<
(
asn
->
size
-
1
);
index
++
)
{
result
|=
asn
->
buf
[
index
]
<<
shift
;
result
|=
((
uint64_t
)
asn
->
buf
[
index
])
<<
shift
;
shift
-=
8
;
}
result
|=
asn
->
buf
[
index
]
>>
asn
->
bits_unused
;
result
|=
((
uint64_t
)
asn
->
buf
[
index
])
>>
asn
->
bits_unused
;
return
result
;
}
...
...
common/utils/telnetsrv/telnetsrv_proccmd.c
View file @
39bb839d
...
...
@@ -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
;
...
...
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
39bb839d
...
...
@@ -170,6 +170,7 @@ typedef struct {
uint8_t
prach_format
;
/// Num RA
uint8_t
num_ra
;
uint8_t
prach_slot
;
uint8_t
prach_start_symbol
;
/// 38.211 (NCS 38.211 6.3.3.1).
uint16_t
num_cs
;
...
...
@@ -179,6 +180,8 @@ typedef struct {
uint8_t
restricted_set
;
/// see TS 38.211 (6.3.3.2).
uint16_t
freq_msg1
;
// When multiple SSBs per RO is configured, this indicates which one is selected in this RO -> this is used to properly compute the PRACH preamble
uint8_t
ssb_nb_in_ro
;
// nfapi_nr_ul_beamforming_t beamforming;
}
fapi_nr_ul_config_prach_pdu
;
...
...
openair1/PHY/INIT/nr_parms.c
View file @
39bb839d
...
...
@@ -385,7 +385,7 @@ int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *fp,
fp
->
Lmax
=
64
;
}
fp
->
L_ssb
=
(((
uint64_t
)
config
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
)
<<
32
)
|
config
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
;
fp
->
L_ssb
=
(((
uint64_t
)
config
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
)
<<
32
)
|
config
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
;
fp
->
N_ssb
=
0
;
for
(
int
p
=
0
;
p
<
fp
->
Lmax
;
p
++
)
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
View file @
39bb839d
...
...
@@ -479,6 +479,11 @@ 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
;
// ------------------------------------------------------------------
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_prach.c
View file @
39bb839d
...
...
@@ -71,7 +71,7 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
int16_t
Ncp
=
0
,
amp
,
*
prach
,
*
prach2
,
*
prachF
,
*
Xu
;
int32_t
Xu_re
,
Xu_im
;
int
prach_start
,
prach_sequence_length
,
i
,
prach_len
,
dftlen
,
mu
,
kbar
,
K
,
n_ra_prb
,
k
;
int
prach_start
,
prach_sequence_length
,
i
,
prach_len
,
dftlen
,
mu
,
kbar
,
K
,
n_ra_prb
,
k
,
prachStartSymbol
,
sample_offset_slot
;
//int restricted_Type;
prach
=
prach_tmp
;
...
...
@@ -94,7 +94,7 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
kbar
=
1
;
K
=
24
;
k
=
12
*
n_ra_prb
-
6
*
fp
->
N_RB_UL
;
//prachStartSymbol = prach_config_pdu->prach_start_symbol
prachStartSymbol
=
prach_pdu
->
prach_start_symbol
;
//restricted_Type = 0;
compute_nr_prach_seq
(
nrUE_config
->
prach_config
.
prach_sequence_length
,
...
...
@@ -102,7 +102,8 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
nrUE_config
->
prach_config
.
num_prach_fd_occasions_list
[
fd_occasion
].
prach_root_sequence_index
,
ue
->
X_u
);
prach_start
=
fp
->
get_samples_slot_timestamp
(
slot
,
fp
,
0
);
sample_offset_slot
=
(
prachStartSymbol
==
0
?
0
:
fp
->
ofdm_symbol_size
*
prachStartSymbol
+
fp
->
nb_prefix_samples0
+
fp
->
nb_prefix_samples
*
(
prachStartSymbol
-
1
));
prach_start
=
fp
->
get_samples_slot_timestamp
(
slot
,
fp
,
0
)
+
sample_offset_slot
;
// First compute physical root sequence
/************************************************************************
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
39bb839d
...
...
@@ -114,6 +114,14 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int slot) {
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
,
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
39bb839d
...
...
@@ -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
,
...
...
@@ -1829,10 +1829,22 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
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
,
...
...
@@ -1842,6 +1854,18 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
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
);
}
...
...
@@ -1855,10 +1879,6 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
ue
->
dlsch_ra
[
gNB_id
],
NULL
);
// #if UE_TIMING_TRACE
// start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[nr_tti_rx]]);
// #endif
nr_ue_dlsch_procedures
(
ue
,
proc
,
gNB_id
,
...
...
@@ -1868,16 +1888,8 @@ 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
);
}
...
...
@@ -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
;
...
...
@@ -2154,13 +2108,8 @@ void nr_ue_prach_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
ue
->
ulsch_Msg3_active
[
i
]
=
0
;
}
}
nr_prach
=
nr_ue_get_rach
(
ue
->
prach_resources
[
gNB_id
],
mod_id
,
ue
->
CC_id
,
UE_mode
,
frame_tx
,
gNB_id
,
nr_tti_tx
);
}
nr_prach
=
nr_ue_get_rach
(
ue
->
prach_resources
[
gNB_id
],
&
ue
->
prach_vars
[
0
]
->
prach_pdu
,
mod_id
,
ue
->
CC_id
,
UE_mode
,
frame_tx
,
gNB_id
,
nr_tti_tx
);
}
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
)
{
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
39bb839d
...
...
@@ -947,6 +947,24 @@ int get_format0(uint8_t index,
return
format
;
}
int64_t
*
get_prach_config_info
(
uint32_t
pointa
,
uint8_t
index
,
uint8_t
unpaired
)
{
int64_t
*
prach_config_info_p
;
if
(
pointa
>
2016666
)
{
//FR2
prach_config_info_p
=
table_6_3_3_2_4_prachConfig_Index
[
index
];
}
else
{
// FR1
if
(
unpaired
)
prach_config_info_p
=
table_6_3_3_2_3_prachConfig_Index
[
index
];
else
prach_config_info_p
=
table_6_3_3_2_2_prachConfig_Index
[
index
];
}
// FR2 / FR1
return
prach_config_info_p
;
}
void
find_monitoring_periodicity_offset_common
(
NR_SearchSpace_t
*
ss
,
uint16_t
*
slot_period
,
uint16_t
*
offset
)
{
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
View file @
39bb839d
...
...
@@ -36,6 +36,36 @@
#include "NR_CellGroupConfig.h"
#include "nr_mac.h"
// ===============================================
// SSB to RO mapping public defines and structures
// ===============================================
#define MAX_SSB_PER_RO (16) // Maximum number of SSBs that can be mapped to a single RO
#define MAX_TDM (7) // Maximum nb of PRACH occasions TDMed in a slot
#define MAX_FDM (8) // Maximum nb of PRACH occasions FDMed in a slot
// PRACH occasion details
typedef
struct
prach_occasion_info
{
uint8_t
start_symbol
;
// 0 - 13 (14 symbols in a slot)
uint8_t
fdm
;
// 0-7 (possible values of msg1-FDM: 1, 2, 4 or 8)
uint8_t
slot
;
// 0 - 159 (maximum number of slots in a 10ms frame - @ 240kHz)
uint8_t
frame
;
// 0 - 15 (maximum number of frames in a 160ms association pattern)
uint8_t
mapped_ssb_idx
[
MAX_SSB_PER_RO
];
// List of mapped SSBs
uint8_t
nb_mapped_ssb
;
uint16_t
format
;
// RO preamble format
}
prach_occasion_info_t
;
// PRACH occasion slot details
// A PRACH occasion slot is a series of PRACH occasions in time (symbols) and frequency
typedef
struct
prach_occasion_slot
{
prach_occasion_info_t
prach_occasion
[
MAX_TDM
][
MAX_FDM
];
// Starting symbol of each PRACH occasions in a slot
uint8_t
nb_of_prach_occasion_in_time
;
uint8_t
nb_of_prach_occasion_in_freq
;
}
prach_occasion_slot_t
;
// ========================================
typedef
enum
{
NR_DL_DCI_FORMAT_1_0
=
0
,
NR_DL_DCI_FORMAT_1_1
,
...
...
@@ -133,6 +163,10 @@ int ul_ant_bits(NR_DMRS_UplinkConfig_t *NR_DMRS_UplinkConfig,long transformPreco
int
get_format0
(
uint8_t
index
,
uint8_t
unpaired
);
int64_t
*
get_prach_config_info
(
uint32_t
pointa
,
uint8_t
index
,
uint8_t
unpaired
);
uint16_t
get_NCS
(
uint8_t
index
,
uint16_t
format
,
uint8_t
restricted_set_config
);
int
get_num_dmrs
(
uint16_t
dmrs_mask
);
...
...
openair2/LAYER2/NR_MAC_UE/config_ue.c
View file @
39bb839d
...
...
@@ -204,7 +204,7 @@ void config_common_ue(NR_UE_MAC_INST_t *mac,
uint16_t
band
;
int32_t
offset
;
get_band
((
cfg
->
carrier_config
.
dl_frequency
)
*
1000
,
get_band
((
uint64_t
)(
cfg
->
carrier_config
.
dl_frequency
)
*
1000
,
&
band
,
&
offset
,
&
frame_type
);
...
...
@@ -243,8 +243,8 @@ void config_common_ue(NR_UE_MAC_INST_t *mac,
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
=
0
;
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
=
0
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
i
+
4
]
<<
i
*
8
);
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
i
]
<<
i
*
8
);
cfg
->
ssb_table
.
ssb_mask_list
[
0
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
i
]
<<
i
*
8
);
cfg
->
ssb_table
.
ssb_mask_list
[
1
].
ssb_mask
+=
(
scc
->
ssb_PositionsInBurst
->
choice
.
longBitmap
.
buf
[
i
+
4
]
<<
i
*
8
);
}
break
;
default:
...
...
@@ -433,6 +433,9 @@ int nr_rrc_mac_config_req_ue(
LOG_I
(
MAC
,
"Configuring CRNTI %x
\n
"
,
mac
->
crnti
);
}
// Setup the SSB to Rach Occasions mapping according to the config
build_ssb_to_ro_map
(
mac
->
scc
,
mac
->
phy_config
.
config_req
.
cell_config
.
frame_duplex_type
);
/*
if(mac_cell_group_configP != NULL){
if(mac_cell_group_configP->drx_Config != NULL ){
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
39bb839d
...
...
@@ -267,6 +267,7 @@ andom-access to transmit a BSR along with the C-RNTI control element (see 5.1.4
@param nr_tti_tx slot for PRACH transmission
@returns indication to generate PRACH to phy */
uint8_t
nr_ue_get_rach
(
NR_PRACH_RESOURCES_t
*
prach_resources
,
fapi_nr_ul_config_prach_pdu
*
prach_pdu
,
module_id_t
mod_id
,
int
CC_id
,
UE_MODE_t
UE_mode
,
...
...
@@ -278,15 +279,14 @@ uint8_t nr_ue_get_rach(NR_PRACH_RESOURCES_t *prach_resources,
@param module_idP Index of UE instance
@param CC_id Component Carrier Index
@param gNB_index gNB index
@param t_id
@param rach_ConfigDedicated
@returns void */
void
nr_get_prach_resources
(
module_id_t
mod_id
,
int
CC_id
,
uint8_t
gNB_id
,
uint8_t
t_id
,
uint8_t
first_Msg3
,
NR_PRACH_RESOURCES_t
*
prach_resources
,
fapi_nr_ul_config_prach_pdu
*
prach_pdu
,
NR_RACH_ConfigDedicated_t
*
rach_ConfigDedicated
);
void
nr_Msg1_transmitted
(
module_id_t
mod_id
,
uint8_t
CC_id
,
frame_t
frameP
,
uint8_t
gNB_id
);
...
...
@@ -305,5 +305,8 @@ void get_num_re_dmrs(nfapi_nr_ue_pusch_pdu_t *pusch_pdu,
uint8_t
*
nb_dmrs_re_per_rb
,
uint16_t
*
number_dmrs_symbols
);
void
build_ssb_to_ro_map
(
NR_ServingCellConfigCommon_t
*
scc
,
uint8_t
unpaired
);
#endif
/** @}*/
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
View file @
39bb839d
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
39bb839d
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_UE/rar_tools_nrUE.c
View file @
39bb839d
...
...
@@ -274,15 +274,22 @@ uint16_t nr_ue_process_rar(module_id_t mod_id,
if
(
ue_mac
->
RA_RAPID_found
)
{
uint8_t
freq_hopping
,
mcs
,
Msg3_t_alloc
,
Msg3_f_alloc
;
unsigned
char
tpc_command
,
csi_req
;
unsigned
char
tpc_command
;
#ifdef DEBUG_RAR
unsigned
char
csi_req
;
#endif
// TC-RNTI
*
t_crnti
=
rar
->
TCRNTI_2
+
(
rar
->
TCRNTI_1
<<
8
);
ue_mac
->
t_crnti
=
*
t_crnti
;
// TA command
ta_command
=
rar
->
TA2
+
(
rar
->
TA1
<<
5
);
#ifdef DEBUG_RAR
// CSI
csi_req
=
(
unsigned
char
)
(
rar
->
UL_GRANT_4
&
0x01
);
#endif
// TPC
tpc_command
=
(
unsigned
char
)
((
rar
->
UL_GRANT_4
>>
1
)
&
0x07
);
switch
(
tpc_command
){
...
...
openair2/LAYER2/NR_MAC_gNB/config.c
View file @
39bb839d
...
...
@@ -128,7 +128,7 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, NR_ServingCellConfigComm
uint16_t
band
;
int32_t
offset
;
get_band
((
cfg
->
carrier_config
.
dl_frequency
.
value
)
*
1000
,
get_band
((
uint64_t
)(
cfg
->
carrier_config
.
dl_frequency
.
value
)
*
1000
,
&
band
,
&
offset
,
&
frame_type
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
39bb839d
...
...
@@ -923,6 +923,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
++
)
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
39bb839d
...
...
@@ -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
,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
39bb839d
...
...
@@ -320,6 +320,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
...
...
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
View file @
39bb839d
...
...
@@ -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
;
}
}
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
View file @
39bb839d
...
...
@@ -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,10 +126,10 @@ 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
...
...
@@ -146,7 +146,6 @@ gNBs =
# this is SS=10 L=4
initialULBWPstartSymbolAndLength_2
=
52
;
msg3_DeltaPreamble
=
1
;
p0_NominalWithGrant
=-
90
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment