Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
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 UE
Commits
d516efcf
Commit
d516efcf
authored
Nov 23, 2021
by
Melissa Elkadi
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'eurecom-develop' into eurecom-episys-merge-nsa
parents
e4342fa9
765f4583
Changes
41
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
1474 additions
and
269 deletions
+1474
-269
ci-scripts/Jenkinsfile-GitLab-Container
ci-scripts/Jenkinsfile-GitLab-Container
+6
-11
ci-scripts/Jenkinsfile-git-dashboard
ci-scripts/Jenkinsfile-git-dashboard
+6
-3
ci-scripts/cls_containerize.py
ci-scripts/cls_containerize.py
+15
-8
ci-scripts/cls_oaicitest.py
ci-scripts/cls_oaicitest.py
+59
-49
ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf
ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf
+1
-1
ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
...cripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
+1
-0
ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
...cripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
+1
-0
ci-scripts/main.py
ci-scripts/main.py
+11
-11
ci-scripts/mysql4testresults/docker-compose.yml
ci-scripts/mysql4testresults/docker-compose.yml
+12
-0
ci-scripts/mysql4testresults/sql_connect.py
ci-scripts/mysql4testresults/sql_connect.py
+33
-0
ci-scripts/ran.py
ci-scripts/ran.py
+18
-6
ci-scripts/ran_dashboard/Hdashboard.py
ci-scripts/ran_dashboard/Hdashboard.py
+401
-0
ci-scripts/ran_dashboard/mr_styles.css
ci-scripts/ran_dashboard/mr_styles.css
+136
-0
ci-scripts/ran_dashboard/ran_dashboard.py
ci-scripts/ran_dashboard/ran_dashboard.py
+150
-44
ci-scripts/ran_dashboard/ran_dashboard_cfg.yaml
ci-scripts/ran_dashboard/ran_dashboard_cfg.yaml
+21
-0
ci-scripts/ran_dashboard/readme.txt
ci-scripts/ran_dashboard/readme.txt
+3
-0
ci-scripts/ran_dashboard/sqlconnect.py
ci-scripts/ran_dashboard/sqlconnect.py
+107
-0
ci-scripts/ran_dashboard/test_styles.css
ci-scripts/ran_dashboard/test_styles.css
+103
-0
ci-scripts/xml_files/container_4g_rfsim.xml
ci-scripts/xml_files/container_4g_rfsim.xml
+1
-0
ci-scripts/xml_files/container_5g_rfsim.xml
ci-scripts/xml_files/container_5g_rfsim.xml
+1
-0
ci-scripts/xml_files/container_nsa_b200_quectel.xml
ci-scripts/xml_files/container_nsa_b200_quectel.xml
+2
-2
ci-scripts/xml_files/container_nsa_b200_terminate.xml
ci-scripts/xml_files/container_nsa_b200_terminate.xml
+51
-0
ci-scripts/xml_files/fr1_sa_quectel.xml
ci-scripts/xml_files/fr1_sa_quectel.xml
+1
-1
ci-scripts/xml_files/fr1_sa_quectel_stages.xml
ci-scripts/xml_files/fr1_sa_quectel_stages.xml
+156
-0
ci-scripts/yaml_files/nsa_b200_enb/docker-compose.yml
ci-scripts/yaml_files/nsa_b200_enb/docker-compose.yml
+1
-1
docker/scripts/enb_entrypoint.sh
docker/scripts/enb_entrypoint.sh
+9
-9
docker/scripts/gnb_entrypoint.sh
docker/scripts/gnb_entrypoint.sh
+2
-2
docker/scripts/lte_ru_entrypoint.sh
docker/scripts/lte_ru_entrypoint.sh
+2
-2
docker/scripts/lte_ue_entrypoint.sh
docker/scripts/lte_ue_entrypoint.sh
+1
-1
docker/scripts/nr_ue_entrypoint.sh
docker/scripts/nr_ue_entrypoint.sh
+1
-1
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+2
-0
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+19
-9
openair2/LAYER2/NR_MAC_UE/config_ue.c
openair2/LAYER2/NR_MAC_UE/config_ue.c
+2
-0
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
+3
-0
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+9
-6
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+91
-66
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+3
-3
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+2
-2
openair2/LAYER2/NR_MAC_gNB/main.c
openair2/LAYER2/NR_MAC_gNB/main.c
+15
-15
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+12
-12
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+4
-4
No files found.
ci-scripts/Jenkinsfile-GitLab-Container
View file @
d516efcf
...
...
@@ -246,17 +246,12 @@ pipeline {
script
{
triggerSlaveJob
(
'RAN-DockerHub-Push'
,
'Push-to-Docker-Hub'
)
}
post
{
always
{
script
{
echo
"Push to Docker-Hub OK"
}
}
failure
{
script
{
echo
"Push to Docker-Hub KO"
currentBuild
.
result
=
'FAILURE'
}
}
post
{
failure
{
script
{
echo
"Push to Docker-Hub KO"
currentBuild
.
result
=
'FAILURE'
}
}
}
...
...
ci-scripts/Jenkinsfile-git-dashboard
View file @
d516efcf
...
...
@@ -33,9 +33,12 @@ pipeline {
stages
{
stage
(
"gDashboard"
)
{
steps
{
script
{
//retrieve MR data from gitlab and export to gSheet
sh
returnStdout:
true
,
script:
'python3 ci-scripts/ran_dashboard.py'
script
{
dir
(
"ci-scripts/ran_dashboard"
)
{
//retrieve MR data from gitlab / mySQL db, build HTML pages and load them to AWS S3 bucket (configured as static web page hosting)
//deprecated method : sh returnStdout: true, script: 'python3 ran_dashboard.py'
sh
returnStdout:
true
,
script:
'python3 Hdashboard.py'
}
}
}
}
...
...
ci-scripts/cls_containerize.py
View file @
d516efcf
...
...
@@ -227,6 +227,8 @@ class Containerize():
if
result
is
not
None
:
forceSharedImageBuild
=
True
sharedTag
=
'ci-temp'
else
:
forceSharedImageBuild
=
True
# Let's remove any previous run artifacts if still there
mySSH
.
command
(
self
.
cli
+
' image prune --force'
,
'\$'
,
30
)
...
...
@@ -578,6 +580,8 @@ class Containerize():
# Currently support only one
mySSH
.
command
(
'docker-compose --file ci-docker-compose.yml config'
,
'\$'
,
5
)
result
=
re
.
search
(
'container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)'
,
mySSH
.
getBefore
())
if
self
.
eNB_logFile
[
self
.
eNB_instance
]
==
''
:
self
.
eNB_logFile
[
self
.
eNB_instance
]
=
'enb_'
+
HTML
.
testCase_id
+
'.log'
if
result
is
not
None
:
containerName
=
result
.
group
(
'container_name'
)
mySSH
.
command
(
'docker kill --signal INT '
+
containerName
,
'\$'
,
30
)
...
...
@@ -718,7 +722,7 @@ class Containerize():
cmd
=
'mkdir -p ../cmake_targets/log'
deployStatus
=
subprocess
.
check_output
(
cmd
,
shell
=
True
,
stderr
=
subprocess
.
STDOUT
,
universal_newlines
=
True
,
timeout
=
10
)
cmd
=
'docker exec '
+
self
.
pingContName
+
' /bin/bash -c "ping '
+
self
.
pingOptions
+
'" 2>&1 | tee ../cmake_targets/log/ping_'
+
HTML
.
testCase_id
+
'.log'
cmd
=
'docker exec '
+
self
.
pingContName
+
' /bin/bash -c "ping '
+
self
.
pingOptions
+
'" 2>&1 | tee ../cmake_targets/log/ping_'
+
HTML
.
testCase_id
+
'.log
|| true
'
logging
.
debug
(
cmd
)
deployStatus
=
subprocess
.
check_output
(
cmd
,
shell
=
True
,
stderr
=
subprocess
.
STDOUT
,
universal_newlines
=
True
,
timeout
=
100
)
...
...
@@ -784,18 +788,18 @@ class Containerize():
logStatus
=
subprocess
.
check_output
(
cmd
,
shell
=
True
,
stderr
=
subprocess
.
STDOUT
,
universal_newlines
=
True
,
timeout
=
10
)
# Start the server process
cmd
=
'docker exec -d '
+
self
.
svrContName
+
' /bin/bash -c "nohup iperf '
+
self
.
svrOptions
+
' > /tmp/iperf_server.log 2>&1"'
cmd
=
'docker exec -d '
+
self
.
svrContName
+
' /bin/bash -c "nohup iperf '
+
self
.
svrOptions
+
' > /tmp/iperf_server.log 2>&1"
|| true
'
logging
.
debug
(
cmd
)
serverStatus
=
subprocess
.
check_output
(
cmd
,
shell
=
True
,
stderr
=
subprocess
.
STDOUT
,
universal_newlines
=
True
,
timeout
=
10
)
time
.
sleep
(
5
)
# Start the client process
cmd
=
'docker exec '
+
self
.
cliContName
+
' /bin/bash -c "iperf '
+
self
.
cliOptions
+
'" 2>&1 | tee ../cmake_targets/log/iperf_client_'
+
HTML
.
testCase_id
+
'.log'
cmd
=
'docker exec '
+
self
.
cliContName
+
' /bin/bash -c "iperf '
+
self
.
cliOptions
+
'" 2>&1 | tee ../cmake_targets/log/iperf_client_'
+
HTML
.
testCase_id
+
'.log
|| true
'
logging
.
debug
(
cmd
)
clientStatus
=
subprocess
.
check_output
(
cmd
,
shell
=
True
,
stderr
=
subprocess
.
STDOUT
,
universal_newlines
=
True
,
timeout
=
100
)
# Stop the server process
cmd
=
'docker exec '
+
self
.
svrContName
+
' /bin/bash -c "pkill iperf"'
cmd
=
'docker exec '
+
self
.
svrContName
+
' /bin/bash -c "pkill iperf"
|| true
'
logging
.
debug
(
cmd
)
serverStatus
=
subprocess
.
check_output
(
cmd
,
shell
=
True
,
stderr
=
subprocess
.
STDOUT
,
universal_newlines
=
True
,
timeout
=
10
)
time
.
sleep
(
5
)
...
...
@@ -812,6 +816,7 @@ class Containerize():
else
:
message
=
'Server Report and Connection refused Not Found!'
self
.
IperfExit
(
HTML
,
False
,
message
)
logging
.
error
(
'
\u001B
[1;37;41m Iperf Test FAIL
\u001B
[0m'
)
return
# Computing the requested bandwidth in float
...
...
@@ -884,6 +889,8 @@ class Containerize():
self
.
IperfExit
(
HTML
,
iperfStatus
,
'problem?'
)
if
iperfStatus
:
logging
.
info
(
'
\u001B
[1m Iperf Test PASS
\u001B
[0m'
)
else
:
logging
.
error
(
'
\u001B
[1;37;41m Iperf Test FAIL
\u001B
[0m'
)
def
IperfExit
(
self
,
HTML
,
status
,
message
):
html_queue
=
SimpleQueue
()
...
...
@@ -921,7 +928,7 @@ class Containerize():
if
result
is
None
:
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S sysctl net.ipv4.conf.all.forwarding=1'
,
'\$'
,
10
)
# Check if iptables forwarding is accepted
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -L'
,
'\$'
,
10
)
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -L
FORWARD
'
,
'\$'
,
10
)
result
=
re
.
search
(
'Chain FORWARD .*policy ACCEPT'
,
mySSH
.
getBefore
())
if
result
is
None
:
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -P FORWARD ACCEPT'
,
'\$'
,
10
)
...
...
@@ -949,7 +956,7 @@ class Containerize():
if
result
is
None
:
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S sysctl net.ipv4.conf.all.forwarding=1'
,
'\$'
,
10
)
# Check if iptables forwarding is accepted
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -L'
,
'\$'
,
10
)
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -L
FORWARD
'
,
'\$'
,
10
)
result
=
re
.
search
(
'Chain FORWARD .*policy ACCEPT'
,
mySSH
.
getBefore
())
if
result
is
None
:
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -P FORWARD ACCEPT'
,
'\$'
,
10
)
...
...
@@ -977,7 +984,7 @@ class Containerize():
if
result
is
None
:
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S sysctl net.ipv4.conf.all.forwarding=1'
,
'\$'
,
10
)
# Check if iptables forwarding is accepted
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -L'
,
'\$'
,
10
)
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -L
FORWARD
'
,
'\$'
,
10
)
result
=
re
.
search
(
'Chain FORWARD .*policy ACCEPT'
,
mySSH
.
getBefore
())
if
result
is
None
:
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -P FORWARD ACCEPT'
,
'\$'
,
10
)
...
...
@@ -1000,7 +1007,7 @@ class Containerize():
if
result
is
None
:
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S sysctl net.ipv4.conf.all.forwarding=1'
,
'\$'
,
10
)
# Check if iptables forwarding is accepted
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -L'
,
'\$'
,
10
)
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -L
FORWARD
'
,
'\$'
,
10
)
result
=
re
.
search
(
'Chain FORWARD .*policy ACCEPT'
,
mySSH
.
getBefore
())
if
result
is
None
:
mySSH
.
command
(
'echo '
+
password
+
' | sudo -S iptables -P FORWARD ACCEPT'
,
'\$'
,
10
)
...
...
ci-scripts/cls_oaicitest.py
View file @
d516efcf
This diff is collapsed.
Click to expand it.
ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf
View file @
d516efcf
...
...
@@ -245,7 +245,7 @@ THREAD_STRUCT =
(
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_
RU_L1_TRX_SPLIT
"
;
parallel_config
=
"PARALLEL_
SINGLE_THREAD
"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
}
...
...
ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
View file @
d516efcf
...
...
@@ -226,6 +226,7 @@ MACRLCs = (
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
ulsch_max_frame_inactivity
=
1
;
}
);
...
...
ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
View file @
d516efcf
...
...
@@ -226,6 +226,7 @@ MACRLCs = (
tr_n_preference
=
"local_RRC"
;
pusch_TargetSNRx10
=
200
;
pucch_TargetSNRx10
=
200
;
ulsch_max_frame_inactivity
=
1
;
}
);
...
...
ci-scripts/main.py
View file @
d516efcf
...
...
@@ -544,7 +544,7 @@ elif re.match('^TerminateOAIUE$', mode, re.IGNORECASE):
HELP
.
GenericHelp
(
CONST
.
Version
)
sys
.
exit
(
'Insufficient Parameter'
)
signal
.
signal
(
signal
.
SIGUSR1
,
receive_signal
)
CiTestObj
.
TerminateOAIUE
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
)
CiTestObj
.
TerminateOAIUE
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
elif
re
.
match
(
'^TerminateHSS$'
,
mode
,
re
.
IGNORECASE
):
if
EPC
.
IPAddress
==
''
or
EPC
.
UserName
==
''
or
EPC
.
Password
==
''
or
EPC
.
Type
==
''
or
EPC
.
SourceCodePath
==
''
:
HELP
.
GenericHelp
(
CONST
.
Version
)
...
...
@@ -809,39 +809,39 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
elif
action
==
'Terminate_eNB'
:
RAN
.
TerminateeNB
(
HTML
,
EPC
)
elif
action
==
'Initialize_UE'
:
CiTestObj
.
InitializeUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CiTestObj
.
ue_trace
)
CiTestObj
.
InitializeUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CiTestObj
.
ue_trace
,
CONTAINERS
)
elif
action
==
'Terminate_UE'
:
CiTestObj
.
TerminateUE
(
HTML
,
COTS_UE
,
InfraUE
,
CiTestObj
.
ue_trace
)
elif
action
==
'Attach_UE'
:
CiTestObj
.
AttachUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
)
CiTestObj
.
AttachUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CONTAINERS
)
elif
action
==
'Detach_UE'
:
CiTestObj
.
DetachUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
)
CiTestObj
.
DetachUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CONTAINERS
)
elif
action
==
'DataDisable_UE'
:
CiTestObj
.
DataDisableUE
(
HTML
)
elif
action
==
'DataEnable_UE'
:
CiTestObj
.
DataEnableUE
(
HTML
)
elif
action
==
'CheckStatusUE'
:
CiTestObj
.
CheckStatusUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
)
CiTestObj
.
CheckStatusUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CONTAINERS
)
elif
action
==
'Build_OAI_UE'
:
CiTestObj
.
BuildOAIUE
(
HTML
)
elif
action
==
'Initialize_OAI_UE'
:
CiTestObj
.
InitializeOAIUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
)
CiTestObj
.
InitializeOAIUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CONTAINERS
)
elif
action
==
'Terminate_OAI_UE'
:
CiTestObj
.
TerminateOAIUE
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
)
CiTestObj
.
TerminateOAIUE
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
elif
action
==
'Initialize_CatM_module'
:
CiTestObj
.
InitializeCatM
(
HTML
)
elif
action
==
'Terminate_CatM_module'
:
CiTestObj
.
TerminateCatM
(
HTML
)
elif
action
==
'Attach_CatM_module'
:
CiTestObj
.
AttachCatM
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
)
CiTestObj
.
AttachCatM
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
elif
action
==
'Detach_CatM_module'
:
CiTestObj
.
TerminateCatM
(
HTML
)
elif
action
==
'Ping_CatM_module'
:
CiTestObj
.
PingCatM
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
EPC
,
InfraUE
)
CiTestObj
.
PingCatM
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
elif
action
==
'Ping'
:
CiTestObj
.
Ping
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
)
CiTestObj
.
Ping
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CONTAINERS
)
elif
action
==
'Iperf'
:
CiTestObj
.
Iperf
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
)
CiTestObj
.
Iperf
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CONTAINERS
)
elif
action
==
'Reboot_UE'
:
CiTestObj
.
RebootUE
(
HTML
,
RAN
,
EPC
)
elif
action
==
'Initialize_HSS'
:
...
...
ci-scripts/mysql4testresults/docker-compose.yml
0 → 100644
View file @
d516efcf
version
:
'
2'
services
:
mysql
:
container_name
:
oaicicd_mysql
restart
:
always
image
:
mysql:latest
environment
:
MYSQL_ROOT_PASSWORD
:
'
ucZBc2XRYdvEm59F'
ports
:
-
"
3307:3306"
volumes
:
-
/home/oaicicd/mysql/data:/var/lib/mysql
ci-scripts/mysql4testresults/sql_connect.py
0 → 100644
View file @
d516efcf
import
pymysql
import
sys
from
datetime
import
datetime
#This is the script used to write the test results to the mysql DB
#Called by Jenkins pipeline (jenkinsfile)
#Must be located in /home/oaicicid/mysql on the database host
#Usage from Jenkinsfile :
#python3 /home/oaicicd/mysql/sql_connect.py ${JOB_NAME} ${params.eNB_MR} ${params.eNB_Branch} ${env.BUILD_ID} ${env.BUILD_URL} ${StatusForDb} ''
class
SQLConnect
:
def
__init__
(
self
):
self
.
connection
=
pymysql
.
connect
(
host
=
'172.22.0.2'
,
user
=
'root'
,
password
=
'ucZBc2XRYdvEm59F'
,
db
=
'oaicicd_tests'
,
port
=
3306
)
def
put
(
self
,
TEST
,
MR
,
BRANCH
,
BUILD
,
BUILD_LINK
,
STATUS
):
now
=
datetime
.
now
().
strftime
(
"%Y-%m-%d %H:%M:%S"
)
cur
=
self
.
connection
.
cursor
()
cur
.
execute
(
'INSERT INTO test_results (TEST,MR,BRANCH,BUILD,BUILD_LINK,STATUS,DATE) VALUES (%s,%s,%s,%s,%s,%s,%s);'
,
(
TEST
,
MR
,
BRANCH
,
BUILD
,
BUILD_LINK
,
STATUS
,
now
))
self
.
connection
.
commit
()
self
.
connection
.
close
()
if
__name__
==
"__main__"
:
mydb
=
SQLConnect
()
mydb
.
put
(
sys
.
argv
[
1
],
sys
.
argv
[
2
],
sys
.
argv
[
3
],
sys
.
argv
[
4
],
sys
.
argv
[
5
],
sys
.
argv
[
6
])
ci-scripts/ran.py
View file @
d516efcf
...
...
@@ -738,8 +738,8 @@ class RANManagement():
mySSH
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S mv /tmp/enb_*.pcap .'
,
'\$'
,
20
)
mySSH
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S mv /tmp/gnb_*.pcap .'
,
'\$'
,
20
)
mySSH
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S rm -f enb.log.zip'
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S zip enb.log.zip enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png'
,
'\$'
,
60
)
mySSH
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png
'
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S zip enb.log.zip enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png
log/*/*.log log/*/*.pcap
'
,
'\$'
,
60
)
mySSH
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png
log/*/*.log log/*/*.pcap'
,
'\$'
,
1
5
)
mySSH
.
close
()
def
AnalyzeLogFile_eNB
(
self
,
eNBlogFile
,
HTML
):
...
...
@@ -800,10 +800,21 @@ class RANManagement():
x2ap_pdu
=
0
#NSA specific log markers
nsa_markers
=
{
'SgNBReleaseRequestAcknowledge'
:
[],
'FAILURE'
:
[],
'scgFailureInformationNR-r15'
:
[],
'SgNBReleaseRequest'
:
[]}
nodeB_prefix_found
=
False
line_cnt
=
0
#log file line counter
for
line
in
enb_log_file
.
readlines
():
line_cnt
+=
1
# Detection of eNB/gNB from a container log
result
=
re
.
search
(
'Starting eNB soft modem'
,
str
(
line
))
if
result
is
not
None
:
nodeB_prefix_found
=
True
nodeB_prefix
=
'e'
result
=
re
.
search
(
'Starting gNB soft modem'
,
str
(
line
))
if
result
is
not
None
:
nodeB_prefix_found
=
True
nodeB_prefix
=
'g'
result
=
re
.
search
(
'Run time:'
,
str
(
line
))
# Runtime statistics
result
=
re
.
search
(
'Run time:'
,
str
(
line
))
if
result
is
not
None
:
...
...
@@ -1037,10 +1048,11 @@ class RANManagement():
logging
.
debug
(
' File analysis (stdout, stats) completed'
)
#post processing depending on the node type
if
(
self
.
air_interface
[
self
.
eNB_instance
]
==
'lte-softmodem'
)
or
(
self
.
air_interface
[
self
.
eNB_instance
]
==
'ocp-enb'
):
nodeB_prefix
=
'e'
else
:
nodeB_prefix
=
'g'
if
not
nodeB_prefix_found
:
if
(
self
.
air_interface
[
self
.
eNB_instance
]
==
'lte-softmodem'
)
or
(
self
.
air_interface
[
self
.
eNB_instance
]
==
'ocp-enb'
):
nodeB_prefix
=
'e'
else
:
nodeB_prefix
=
'g'
if
nodeB_prefix
==
'g'
:
if
ulschReceiveOK
>
0
:
...
...
ci-scripts/ran_dashboard/Hdashboard.py
0 → 100644
View file @
d516efcf
This diff is collapsed.
Click to expand it.
ci-scripts/ran_dashboard/mr_styles.css
0 → 100755
View file @
d516efcf
body
{
font-family
:
'lato'
,
sans-serif
;
}
.Main
{
text-align
:
left
;
font-size
:
30px
;
font-weight
:
bold
;
}
.DashLink
{
text-align
:
left
;
font-size
:
16px
;
}
.DashLink
:hover
{
font-weight
:
bold
;
}
.Date
{
text-align
:
left
;
font-size
:
16px
;
font-weight
:
bold
;
}
a
{
text-decoration
:
none
;
}
a
:visited
{
text-decoration
:
none
;
color
:
blue
}
a
:hover
{
text-decoration
:
none
;
font-weight
:
bold
;
color
:
blue
}
.MR_Table
{
border-collapse
:
collapse
;
}
.MR_Table
tr
{
font-size
:
12px
;
text-align
:
center
;
}
.MR_Table
tr
:hover
{
background-color
:
lightgray
;
}
.MR_Table
td
{
border
:
1px
solid
black
;
padding
:
5px
;
}
.MR_Table
td
:hover
{
font-weight
:
bold
;
}
.MR_Table
th
{
font-size
:
14px
;
text-align
:
center
;
padding
:
5px
;
}
.title_cell
{
text-align
:
left
;
}
.MR
{
table-layout
:
fixed
;
width
:
50px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.CREATED_AT
{
table-layout
:
fixed
;
width
:
100px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.AUTHOR
{
table-layout
:
fixed
;
width
:
150px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.TITLE
{
table-layout
:
fixed
;
width
:
500px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.ASSIGNEE
{
table-layout
:
fixed
;
width
:
150px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.REVIEWER
{
table-layout
:
fixed
;
width
:
150px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.CAN_START
{
background-color
:
orange
;
table-layout
:
fixed
;
width
:
150px
;
}
.IN_PROGRESS
{
background-color
:
yellow
;
table-layout
:
fixed
;
width
:
150px
;
}
.COMPLETED
{
background-color
:
rgb
(
144
,
221
,
231
);
table-layout
:
fixed
;
width
:
150px
;
}
.REVIEW_FORM
{
table-layout
:
fixed
;
width
:
100px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.OK_MERGE
{
background-color
:
rgb
(
58
,
236
,
58
);
table-layout
:
fixed
;
width
:
150px
;
}
.MERGE_CONFLICTS
{
table-layout
:
fixed
;
width
:
100px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
ci-scripts/ran_dashboard.py
→
ci-scripts/ran_dashboard
/ran_dashboard
.py
View file @
d516efcf
This diff is collapsed.
Click to expand it.
ci-scripts/ran_dashboard/ran_dashboard_cfg.yaml
0 → 100644
View file @
d516efcf
LTE-2x2
:
#short name used in the dashboard
job
:
'
RAN-LTE-2x2-Module-OAIEPC'
#job name from Jenkins, used in the database
link
:
'
https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-LTE-2x2-Module-OAIEPC'
bench
:
'
Obelix-N310-OAIEPC-Quectel(nrmodule2)'
test
:
'
TDD,
40MHz,
MCS9,
26Mb
DL,
7Mb
UL'
NSA-B200
:
job
:
'
RAN-NSA-B200-Module-LTEBOX'
link
:
'
https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-NSA-B200-Module-LTEBOX'
bench
:
'
Nepes-B200-Obelix-B200-LTEBOX-Quectel(idefix)'
test
:
'
20MHz,
60Mb
DL,
3Mb
UL'
NSA-2x2
:
job
:
'
RAN-NSA-2x2-Module-OAIEPC'
link
:
'
https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-NSA-2x2-Module-OAIEPC'
bench
:
'
Asterix-N310-Obelix-N310-OAIEPC-Quectel(nrmodule2)'
test
:
'
TDD,
40MHz,
60Mb
DL,
3Mb
UL'
SA-N310
:
job
:
'
RAN-SA-Module-CN5G'
link
:
'
https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-Module-CN5G'
bench
:
'
Asterix-N310-OAICN5G-Quectel(nrmodule2)'
test
:
'
TDD,
40MHz,
60Mb
DL,
3Mb
UL'
ci-scripts/ran_dashboard/readme.txt
0 → 100644
View file @
d516efcf
The code ran_dashboard.py was initially developped to bring MR status and test resuts to a google sheet, using google sheets API.
This method is now deprecated, and replaced by Hdashboard.py that builds the results as HTML page and loads it to AWS S3.
ran_dashboard_cfg.yaml is still used by Hdashboard.py as tests config file.
ci-scripts/ran_dashboard/sqlconnect.py
0 → 100644
View file @
d516efcf
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
# Merge Requests Dashboard for RAN on googleSheet
#
# Required Python Version
# Python 3.x
#
#---------------------------------------------------------------------
#author Remi
import
pymysql
import
sys
from
datetime
import
datetime
import
pickle
#This is the script/package used by the dashboard to retrieve the MR test results from the database
class
SQLConnect
:
def
__init__
(
self
):
self
.
connection
=
pymysql
.
connect
(
host
=
'172.22.0.2'
,
user
=
'root'
,
password
=
'ucZBc2XRYdvEm59F'
,
db
=
'oaicicd_tests'
,
port
=
3306
)
self
.
data
=
{}
#retrieve data from mysql database and organize it in a dictionary (per MR passed as argument)
def
get
(
self
,
MR
):
self
.
data
[
MR
]
=
{}
cur
=
self
.
connection
.
cursor
()
#get counters per test
sql
=
"select TEST,STATUS, count(*) AS COUNT from test_results where MR=(%s) group by TEST, STATUS;"
cur
.
execute
(
sql
,
MR
)
response
=
cur
.
fetchall
()
if
len
(
response
)
==
0
:
#no test results yet
self
.
data
[
MR
][
'PASS'
]
=
''
self
.
data
[
MR
][
'FAIL'
]
=
''
else
:
for
i
in
range
(
0
,
len
(
response
)):
test
=
response
[
i
][
0
]
status
=
response
[
i
][
1
]
count
=
response
[
i
][
2
]
if
test
in
self
.
data
[
MR
]:
self
.
data
[
MR
][
test
][
status
]
=
count
else
:
self
.
data
[
MR
][
test
]
=
{}
self
.
data
[
MR
][
test
][
status
]
=
count
#get last failing build and link
sql
=
"select TEST,BUILD, BUILD_LINK from test_results where MR=(%s) and STATUS='FAIL' order by DATE DESC;"
cur
.
execute
(
sql
,
MR
)
response
=
cur
.
fetchall
()
if
len
(
response
)
!=
0
:
for
i
in
range
(
0
,
len
(
response
)):
test
=
response
[
i
][
0
]
build
=
response
[
i
][
1
]
link
=
response
[
i
][
2
]
if
'last_fail'
not
in
self
.
data
[
MR
][
test
]:
self
.
data
[
MR
][
test
][
'last_fail'
]
=
[]
self
.
data
[
MR
][
test
][
'last_fail'
].
append
(
build
)
self
.
data
[
MR
][
test
][
'last_fail'
].
append
(
link
)
#get last passing build and link
sql
=
"select TEST,BUILD, BUILD_LINK from test_results where MR=(%s) and STATUS='PASS' order by DATE DESC;"
cur
.
execute
(
sql
,
MR
)
response
=
cur
.
fetchall
()
if
len
(
response
)
!=
0
:
for
i
in
range
(
0
,
len
(
response
)):
test
=
response
[
i
][
0
]
build
=
response
[
i
][
1
]
link
=
response
[
i
][
2
]
if
'last_pass'
not
in
self
.
data
[
MR
][
test
]:
self
.
data
[
MR
][
test
][
'last_pass'
]
=
[]
self
.
data
[
MR
][
test
][
'last_pass'
].
append
(
build
)
self
.
data
[
MR
][
test
][
'last_pass'
].
append
(
link
)
#close database connection
def
close_connection
(
self
):
self
.
connection
.
close
()
ci-scripts/ran_dashboard/test_styles.css
0 → 100755
View file @
d516efcf
body
{
font-family
:
'lato'
,
sans-serif
;
}
.Main
{
text-align
:
left
;
font-size
:
30px
;
font-weight
:
bold
;
}
.DashLink
{
text-align
:
left
;
font-size
:
16px
;
}
.DashLink
:hover
{
font-weight
:
bold
;
}
.Date
{
text-align
:
left
;
font-size
:
16px
;
font-weight
:
bold
;
}
h3
{
font-size
:
16px
;
}
a
{
text-decoration
:
none
;
}
a
:visited
{
text-decoration
:
none
;
color
:
blue
}
a
:hover
{
text-decoration
:
none
;
font-weight
:
bold
;
color
:
blue
}
.Test_Table
{
border-collapse
:
collapse
;
}
.Test_Table
tr
{
font-size
:
12px
;
text-align
:
center
;
}
.Test_Table
tr
:hover
{
background-color
:
lightgray
;
}
.Test_Table
td
{
border
:
1px
solid
black
;
padding
:
5px
;
}
.Test_Table
td
:hover
{
font-weight
:
bold
;
}
.Test_Table
th
{
font-size
:
14px
;
text-align
:
center
;
padding
:
5px
;
}
.Test_Name
{
table-layout
:
fixed
;
width
:
100px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.Test_Descr
{
table-layout
:
fixed
;
width
:
400px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.Pass
{
table-layout
:
fixed
;
width
:
100px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.Fail
{
table-layout
:
fixed
;
width
:
100px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.Last_Pass
{
table-layout
:
fixed
;
width
:
100px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
.Last_Fail
{
table-layout
:
fixed
;
width
:
100px
;
background-color
:
rgb
(
143
,
154
,
216
);
}
ci-scripts/xml_files/container_4g_rfsim.xml
View file @
d516efcf
...
...
@@ -24,6 +24,7 @@
<htmlTabRef>
rfsim-4glte
</htmlTabRef>
<htmlTabName>
Testing 4G LTE RF sim in containers
</htmlTabName>
<htmlTabIcon>
wrench
</htmlTabIcon>
<repeatCount>
2
</repeatCount>
<TestCaseRequestedList>
100011
000011
...
...
ci-scripts/xml_files/container_5g_rfsim.xml
View file @
d516efcf
...
...
@@ -24,6 +24,7 @@
<htmlTabRef>
rfsim-5gnr
</htmlTabRef>
<htmlTabName>
Testing 5G NR RF sim in containers
</htmlTabName>
<htmlTabIcon>
wrench
</htmlTabIcon>
<repeatCount>
4
</repeatCount>
<TestCaseRequestedList>
100001
000001
...
...
ci-scripts/xml_files/container_nsa_b200_quectel.xml
View file @
d516efcf
...
...
@@ -115,8 +115,8 @@
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<desc>
iperf (DL/
2
0Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
2
0M -t 60
</iperf_args>
<desc>
iperf (DL/
4
0Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
4
0M -t 60
</iperf_args>
<direction>
DL
</direction>
<id>
idefix
</id>
<iperf_packetloss_threshold>
3
</iperf_packetloss_threshold>
...
...
ci-scripts/xml_files/container_nsa_b200_terminate.xml
0 → 100644
View file @
d516efcf
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
TEST-NSA-FR1-TM1-B200-terminate
</htmlTabRef>
<htmlTabName>
NSA tear-down in case of problem
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
1
</repeatCount>
<TestCaseRequestedList>
030202
030201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"030201"
>
<class>
Undeploy_Object
</class>
<desc>
Undeploy eNB
</desc>
<yaml_path>
ci-scripts/yaml_files/nsa_b200_enb
</yaml_path>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
</testCase>
<testCase
id=
"030202"
>
<class>
Undeploy_Object
</class>
<desc>
Undeploy gNB
</desc>
<yaml_path>
ci-scripts/yaml_files/nsa_b200_gnb
</yaml_path>
<eNB_instance>
1
</eNB_instance>
<eNB_serverId>
1
</eNB_serverId>
</testCase>
</testCaseList>
ci-scripts/xml_files/fr1_sa_quectel.xml
View file @
d516efcf
...
...
@@ -21,7 +21,7 @@
-->
<testCaseList>
<htmlTabRef>
TEST-SA-FR1-T
M
1
</htmlTabRef>
<htmlTabRef>
TEST-SA-FR1-T
ab
1
</htmlTabRef>
<htmlTabName>
SA Ping DL UL with QUECTEL
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
1
</repeatCount>
...
...
ci-scripts/xml_files/fr1_sa_quectel_stages.xml
0 → 100644
View file @
d516efcf
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
TEST-SA-FR1-Tab2
</htmlTabRef>
<htmlTabName>
SA Staged DL with QUECTEL
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
1
</repeatCount>
<TestCaseRequestedList>
040000
000002
010000
000001
050000
000001
070000
000001
070001
000001
070002
000001
070003
000001
070004
000001
010002
080000
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"010000"
>
<class>
Initialize_UE
</class>
<desc>
Initialize Quectel
</desc>
<id>
nrmodule2_quectel
</id>
<UE_Trace>
yes
</UE_Trace>
</testCase>
<testCase
id=
"010002"
>
<class>
Terminate_UE
</class>
<desc>
Terminate Quectel
</desc>
<id>
nrmodule2_quectel
</id>
</testCase>
<testCase
id=
"040000"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1 --thread-pool 0,2,4,6
</Initialize_eNB_args>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
nr
</air_interface>
<eNB_Trace>
yes
</eNB_Trace>
<eNB_Stats>
yes
</eNB_Stats>
<USRP_IPAddress>
192.168.18.240
</USRP_IPAddress>
</testCase>
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
5
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"000002"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
20
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"050000"
>
<class>
Ping
</class>
<desc>
Ping: 20pings in 20sec
</desc>
<id>
nrmodule2_quectel
</id>
<ping_args>
-c 20
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<desc>
iperf (DL/10Mbps/UDP)(30 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 10M -t 30
</iperf_args>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"070001"
>
<class>
Iperf
</class>
<desc>
iperf (DL/20Mbps/UDP)(30 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 20M -t 30
</iperf_args>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"070002"
>
<class>
Iperf
</class>
<desc>
iperf (DL/40Mbps/UDP)(30 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 40M -t 30
</iperf_args>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"070003"
>
<class>
Iperf
</class>
<desc>
iperf (DL/60Mbps/UDP)(30 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 60M -t 30
</iperf_args>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"070004"
>
<class>
Iperf
</class>
<desc>
iperf (DL/90Mbps/UDP)(30 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 90M -t 30
</iperf_args>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"080000"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate gNB
</desc>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
nr
</air_interface>
</testCase>
</testCaseList>
ci-scripts/yaml_files/nsa_b200_enb/docker-compose.yml
View file @
d516efcf
...
...
@@ -30,7 +30,7 @@ services:
FLEXRAN_ENABLED
:
'
no'
FLEXRAN_INTERFACE_NAME
:
eth0
FLEXRAN_IPV4_ADDRESS
:
192.168.18.210
THREAD_PARALLEL_CONFIG
:
PARALLEL_
RU_L1_TRX_SPLIT
THREAD_PARALLEL_CONFIG
:
PARALLEL_
SINGLE_THREAD
volumes
:
-
/dev:/dev
networks
:
...
...
docker/scripts/enb_entrypoint.sh
View file @
d516efcf
...
...
@@ -9,15 +9,15 @@ ENABLE_X2=${ENABLE_X2:-no}
THREAD_PARALLEL_CONFIG
=
${
THREAD_PARALLEL_CONFIG
:-
PARALLEL_SINGLE_THREAD
}
# Based another env var, pick one template to use
if
[[
-v
USE_FDD_CU
]]
;
then
ln
-s
$PREFIX
/etc/cu.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_DU
]]
;
then
ln
-s
$PREFIX
/etc/du.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_MONO
]]
;
then
ln
-s
$PREFIX
/etc/enb.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_TDD_MONO
]]
;
then
ln
-s
$PREFIX
/etc/enb.tdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_FAPI_RCC
]]
;
then
ln
-s
$PREFIX
/etc/rcc.nfapi.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_IF4P5_RCC
]]
;
then
ln
-s
$PREFIX
/etc/rcc.if4p5.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_TDD_IF4P5_RCC
]]
;
then
ln
-s
$PREFIX
/etc/rcc.if4p5.tdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_RRU
]]
;
then
ln
-s
$PREFIX
/etc/rru.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_TDD_RRU
]]
;
then
ln
-s
$PREFIX
/etc/rru.tdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_CU
]]
;
then
cp
$PREFIX
/etc/cu.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_DU
]]
;
then
cp
$PREFIX
/etc/du.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_MONO
]]
;
then
cp
$PREFIX
/etc/enb.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_TDD_MONO
]]
;
then
cp
$PREFIX
/etc/enb.tdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_FAPI_RCC
]]
;
then
cp
$PREFIX
/etc/rcc.nfapi.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_IF4P5_RCC
]]
;
then
cp
$PREFIX
/etc/rcc.if4p5.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_TDD_IF4P5_RCC
]]
;
then
cp
$PREFIX
/etc/rcc.if4p5.tdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_FDD_RRU
]]
;
then
cp
$PREFIX
/etc/rru.fdd.conf
$PREFIX
/etc/enb.conf
;
fi
if
[[
-v
USE_TDD_RRU
]]
;
then
cp
$PREFIX
/etc/rru.tdd.conf
$PREFIX
/etc/enb.conf
;
fi
# Only this template will be manipulated
CONFIG_FILES
=
`
ls
$PREFIX
/etc/enb.conf
||
true
`
...
...
docker/scripts/gnb_entrypoint.sh
View file @
d516efcf
...
...
@@ -7,8 +7,8 @@ ENABLE_X2=${ENABLE_X2:-yes}
THREAD_PARALLEL_CONFIG
=
${
THREAD_PARALLEL_CONFIG
:-
PARALLEL_SINGLE_THREAD
}
# Based another env var, pick one template to use
if
[[
-v
USE_NSA_TDD_MONO
]]
;
then
ln
-s
$PREFIX
/etc/gnb.nsa.tdd.conf
$PREFIX
/etc/gnb.conf
;
fi
if
[[
-v
USE_SA_TDD_MONO
]]
;
then
ln
-s
$PREFIX
/etc/gnb.sa.tdd.conf
$PREFIX
/etc/gnb.conf
;
fi
if
[[
-v
USE_NSA_TDD_MONO
]]
;
then
cp
$PREFIX
/etc/gnb.nsa.tdd.conf
$PREFIX
/etc/gnb.conf
;
fi
if
[[
-v
USE_SA_TDD_MONO
]]
;
then
cp
$PREFIX
/etc/gnb.sa.tdd.conf
$PREFIX
/etc/gnb.conf
;
fi
# Only this template will be manipulated
CONFIG_FILES
=
`
ls
$PREFIX
/etc/gnb.conf
||
true
`
...
...
docker/scripts/lte_ru_entrypoint.sh
View file @
d516efcf
...
...
@@ -5,8 +5,8 @@ set -euo pipefail
PREFIX
=
/opt/oai-lte-ru
# Based another env var, pick one template to use
if
[[
-v
USE_FDD_RRU
]]
;
then
ln
-s
$PREFIX
/etc/rru.fdd.conf
$PREFIX
/etc/rru.conf
;
fi
if
[[
-v
USE_TDD_RRU
]]
;
then
ln
-s
$PREFIX
/etc/rru.tdd.conf
$PREFIX
/etc/rru.conf
;
fi
if
[[
-v
USE_FDD_RRU
]]
;
then
cp
$PREFIX
/etc/rru.fdd.conf
$PREFIX
/etc/rru.conf
;
fi
if
[[
-v
USE_TDD_RRU
]]
;
then
cp
$PREFIX
/etc/rru.tdd.conf
$PREFIX
/etc/rru.conf
;
fi
# Only this template will be manipulated
CONFIG_FILES
=
`
ls
$PREFIX
/etc/rru.conf
||
true
`
...
...
docker/scripts/lte_ue_entrypoint.sh
View file @
d516efcf
...
...
@@ -5,7 +5,7 @@ set -euo pipefail
PREFIX
=
/opt/oai-lte-ue
# Based another env var, pick one template to use
if
[[
-v
USE_NFAPI
]]
;
then
ln
-s
$PREFIX
/etc/ue.nfapi.conf
$PREFIX
/etc/ue.conf
;
fi
if
[[
-v
USE_NFAPI
]]
;
then
cp
$PREFIX
/etc/ue.nfapi.conf
$PREFIX
/etc/ue.conf
;
fi
# Only this template will be manipulated and the USIM one!
CONFIG_FILES
=
`
ls
$PREFIX
/etc/ue.conf
$PREFIX
/etc/ue_usim.conf
||
true
`
...
...
docker/scripts/nr_ue_entrypoint.sh
View file @
d516efcf
...
...
@@ -5,7 +5,7 @@ set -euo pipefail
PREFIX
=
/opt/oai-nr-ue
# Based another env var, pick one template to use
#if [[ -v USE_NFAPI ]]; then
ln -s
$PREFIX/etc/ue.nfapi.conf $PREFIX/etc/ue.conf; fi
#if [[ -v USE_NFAPI ]]; then
cp
$PREFIX/etc/ue.nfapi.conf $PREFIX/etc/ue.conf; fi
# Only this template will be manipulated and the USIM one!
CONFIG_FILES
=
`
ls
$PREFIX
/etc/ue.conf
$PREFIX
/etc/nr-ue-sim.conf
||
true
`
...
...
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
d516efcf
...
...
@@ -16,6 +16,7 @@
#ifndef _FAPI_NR_UE_INTERFACE_H_
#define _FAPI_NR_UE_INTERFACE_H_
#include <pthread.h>
#include "stddef.h"
#include "platform_types.h"
...
...
@@ -356,6 +357,7 @@ typedef struct {
uint16_t
slot
;
uint8_t
number_pdus
;
fapi_nr_ul_config_request_pdu_t
ul_config_list
[
FAPI_NR_UL_CONFIG_LIST_NUM
];
pthread_mutex_t
mutex_ul_config
;
}
fapi_nr_ul_config_request_t
;
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
d516efcf
...
...
@@ -318,6 +318,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
fapi_nr_ul_config_request_t
*
ul_config
=
scheduled_response
->
ul_config
;
pthread_mutex_lock
(
&
ul_config
->
mutex_ul_config
);
for
(
i
=
0
;
i
<
ul_config
->
number_pdus
;
++
i
){
AssertFatal
(
ul_config
->
ul_config_list
[
i
].
pdu_type
<=
FAPI_NR_UL_CONFIG_TYPES
,
"pdu_type %d out of bounds
\n
"
,
ul_config
->
ul_config_list
[
i
].
pdu_type
);
...
...
@@ -339,6 +340,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
pusch_config_pdu
=
&
ul_config
->
ul_config_list
[
i
].
pusch_config_pdu
;
current_harq_pid
=
pusch_config_pdu
->
pusch_data
.
harq_process_id
;
NR_UL_UE_HARQ_t
*
harq_process_ul_ue
=
ulsch0
->
harq_processes
[
current_harq_pid
];
harq_process_ul_ue
->
status
=
0
;
if
(
harq_process_ul_ue
){
...
...
@@ -348,14 +350,16 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
ulsch0
->
f_pusch
=
pusch_config_pdu
->
absolute_delta_PUSCH
;
if
(
scheduled_response
->
tx_request
){
fapi_nr_tx_request_body_t
*
tx_req_body
=
&
scheduled_response
->
tx_request
->
tx_request_body
[
i
];
LOG_D
(
PHY
,
"%d.%d Copying %d bytes to harq_process_ul_ue->a (harq_pid %d)
\n
"
,
scheduled_response
->
frame
,
slot
,
tx_req_body
->
pdu_length
,
current_harq_pid
);
memcpy
(
harq_process_ul_ue
->
a
,
tx_req_body
->
pdu
,
tx_req_body
->
pdu_length
);
harq_process_ul_ue
->
status
=
ACTIVE
;
scheduled_response
->
tx_request
->
number_of_pdus
=
0
;
if
(
scheduled_response
->
tx_request
)
{
for
(
int
j
=
0
;
j
<
scheduled_response
->
tx_request
->
number_of_pdus
;
j
++
)
{
fapi_nr_tx_request_body_t
*
tx_req_body
=
&
scheduled_response
->
tx_request
->
tx_request_body
[
j
];
if
(
tx_req_body
->
pdu_index
==
i
)
{
LOG_D
(
PHY
,
"%d.%d Copying %d bytes to harq_process_ul_ue->a (harq_pid %d)
\n
"
,
scheduled_response
->
frame
,
slot
,
tx_req_body
->
pdu_length
,
current_harq_pid
);
memcpy
(
harq_process_ul_ue
->
a
,
tx_req_body
->
pdu
,
tx_req_body
->
pdu_length
);
harq_process_ul_ue
->
status
=
ACTIVE
;
break
;
}
}
}
}
else
{
...
...
@@ -393,7 +397,13 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
break
;
}
}
memset
(
ul_config
,
0
,
sizeof
(
fapi_nr_ul_config_request_t
));
if
(
scheduled_response
->
tx_request
)
scheduled_response
->
tx_request
->
number_of_pdus
=
0
;
ul_config
->
sfn
=
0
;
ul_config
->
slot
=
0
;
ul_config
->
number_pdus
=
0
;
memset
(
ul_config
->
ul_config_list
,
0
,
sizeof
(
ul_config
->
ul_config_list
));
pthread_mutex_unlock
(
&
ul_config
->
mutex_ul_config
);
}
}
return
0
;
...
...
openair2/LAYER2/NR_MAC_UE/config_ue.c
View file @
d516efcf
...
...
@@ -660,6 +660,8 @@ int nr_rrc_mac_config_req_ue(
if
(
mac
->
scc_SIB
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
nrofUplinkSymbols
>
0
)
num_slots_ul
++
;
LOG_I
(
MAC
,
"Initializing ul_config_request. num_slots_ul = %d
\n
"
,
num_slots_ul
);
mac
->
ul_config_request
=
(
fapi_nr_ul_config_request_t
*
)
calloc
(
num_slots_ul
,
sizeof
(
fapi_nr_ul_config_request_t
));
for
(
int
i
=
0
;
i
<
num_slots_ul
;
i
++
)
pthread_mutex_init
(
&
(
mac
->
ul_config_request
[
i
].
mutex_ul_config
),
NULL
);
// 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
(
!
get_softmodem_params
()
->
emulate_l1
)
...
...
openair2/LAYER2/NR_MAC_UE/main_ue_nr.c
View file @
d516efcf
...
...
@@ -40,6 +40,7 @@
#include "openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h"
#include "executables/softmodem-common.h"
#include "openair2/LAYER2/nr_pdcp/nr_pdcp.h"
#include <pthread.h>
static
NR_UE_MAC_INST_t
*
nr_ue_mac_inst
;
...
...
@@ -74,6 +75,8 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) {
num_slots_ul
++
;
LOG_D
(
MAC
,
"Initializing ul_config_request. num_slots_ul = %d
\n
"
,
num_slots_ul
);
nr_ue_mac_inst
->
ul_config_request
=
(
fapi_nr_ul_config_request_t
*
)
calloc
(
num_slots_ul
,
sizeof
(
fapi_nr_ul_config_request_t
));
for
(
int
i
=
0
;
i
<
num_slots_ul
;
i
++
)
pthread_mutex_init
(
&
(
nr_ue_mac_inst
->
ul_config_request
[
i
].
mutex_ul_config
),
NULL
);
}
}
else
{
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
d516efcf
...
...
@@ -667,15 +667,15 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
LOG_W
(
MAC
,
"In %s: ul_config request is NULL. Probably due to unexpected UL DCI in frame.slot %d.%d. Ignoring DCI!
\n
"
,
__FUNCTION__
,
frame
,
slot
);
return
-
1
;
}
pthread_mutex_lock
(
&
ul_config
->
mutex_ul_config
);
AssertFatal
(
ul_config
->
number_pdus
<
FAPI_NR_UL_CONFIG_LIST_NUM
,
"ul_config->number_pdus %d out of bounds
\n
"
,
ul_config
->
number_pdus
);
nfapi_nr_ue_pusch_pdu_t
*
pusch_config_pdu
=
&
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
;
fill_ul_config
(
ul_config
,
frame_tx
,
slot_tx
,
FAPI_NR_UL_CONFIG_TYPE_PUSCH
);
pthread_mutex_unlock
(
&
ul_config
->
mutex_ul_config
);
// Config PUSCH PDU
ret
=
nr_config_pusch_pdu
(
mac
,
pusch_config_pdu
,
dci
,
NULL
,
rnti
,
&
dci_format
);
}
break
;
...
...
@@ -728,15 +728,16 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
return
-
1
;
}
ul_config
->
number_pdus
=
0
;
AssertFatal
(
ul_config
->
number_pdus
<
sizeof
(
ul_config
->
ul_config_list
)
/
sizeof
(
ul_config
->
ul_config_list
[
0
]),
"Number of PDUS in ul_config = %d > ul_config_list num elements"
,
ul_config
->
number_pdus
);
pthread_mutex_lock
(
&
ul_config
->
mutex_ul_config
);
AssertFatal
(
ul_config
->
number_pdus
<
FAPI_NR_UL_CONFIG_LIST_NUM
,
"ul_config->number_pdus %d out of bounds
\n
"
,
ul_config
->
number_pdus
);
nfapi_nr_ue_pusch_pdu_t
*
pusch_config_pdu
=
&
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
;
fill_ul_config
(
ul_config
,
frame_tx
,
slot_tx
,
FAPI_NR_UL_CONFIG_TYPE_PUSCH
);
pthread_mutex_unlock
(
&
ul_config
->
mutex_ul_config
);
// Config PUSCH PDU
ret
=
nr_config_pusch_pdu
(
mac
,
pusch_config_pdu
,
dci
,
NULL
,
rnti
,
&
dci_format
);
}
else
AssertFatal
(
1
==
0
,
"Cannot schedule PUSCH
\n
"
);
break
;
}
...
...
@@ -3938,13 +3939,15 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t
rnti
=
ra
->
t_crnti
;
}
pthread_mutex_lock
(
&
ul_config
->
mutex_ul_config
);
AssertFatal
(
ul_config
->
number_pdus
<
FAPI_NR_UL_CONFIG_LIST_NUM
,
"ul_config->number_pdus %d out of bounds
\n
"
,
ul_config
->
number_pdus
);
nfapi_nr_ue_pusch_pdu_t
*
pusch_config_pdu
=
&
ul_config
->
ul_config_list
[
ul_config
->
number_pdus
].
pusch_config_pdu
;
fill_ul_config
(
ul_config
,
frame_tx
,
slot_tx
,
FAPI_NR_UL_CONFIG_TYPE_PUSCH
);
pthread_mutex_unlock
(
&
ul_config
->
mutex_ul_config
);
// Config Msg3 PDU
nr_config_pusch_pdu
(
mac
,
pusch_config_pdu
,
NULL
,
&
rar_grant
,
rnti
,
NULL
);
}
}
else
{
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
d516efcf
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
d516efcf
...
...
@@ -420,9 +420,9 @@ int get_mcs_from_bler(module_id_t mod_id, int CC_id, frame_t frame, sub_frame_t
return
old_mcs
;
// no update
// last update is longer than x frames ago
const
int
dtx
=
stats
->
dlsch_rounds
[
0
]
-
bler_stats
->
dlsch_rounds
[
0
]
;
const
int
dretx
=
stats
->
dlsch_rounds
[
1
]
-
bler_stats
->
dlsch_rounds
[
1
]
;
const
int
dretx2
=
stats
->
dlsch_rounds
[
2
]
-
bler_stats
->
dlsch_rounds
[
2
]
;
const
int
dtx
=
(
int
)(
stats
->
dlsch_rounds
[
0
]
-
bler_stats
->
dlsch_rounds
[
0
])
;
const
int
dretx
=
(
int
)(
stats
->
dlsch_rounds
[
1
]
-
bler_stats
->
dlsch_rounds
[
1
])
;
const
int
dretx2
=
(
int
)(
stats
->
dlsch_rounds
[
2
]
-
bler_stats
->
dlsch_rounds
[
2
])
;
const
float
bler_window
=
dtx
>
0
?
(
float
)
dretx
/
dtx
:
bler_stats
->
bler
;
const
float
rd2_bler_wnd
=
dtx
>
0
?
(
float
)
dretx2
/
dtx
:
bler_stats
->
rd2_bler
;
bler_stats
->
bler
=
BLER_FILTER
*
bler_stats
->
bler
+
(
1
-
BLER_FILTER
)
*
bler_window
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
View file @
d516efcf
...
...
@@ -583,7 +583,7 @@ static void handle_dl_harq(module_id_t mod_id,
harq
->
ndi
^=
1
;
NR_mac_stats_t
*
stats
=
&
UE_info
->
mac_stats
[
UE_id
];
stats
->
dlsch_errors
++
;
LOG_D
(
NR_MAC
,
"retransmission error for UE %d (total %
d
)
\n
"
,
UE_id
,
stats
->
dlsch_errors
);
LOG_D
(
NR_MAC
,
"retransmission error for UE %d (total %
"
PRIu64
"
)
\n
"
,
UE_id
,
stats
->
dlsch_errors
);
}
else
{
add_tail_nr_list
(
&
UE_info
->
UE_sched_ctrl
[
UE_id
].
retrans_dl_harq
,
harq_pid
);
harq
->
round
++
;
...
...
@@ -1343,7 +1343,7 @@ int nr_acknack_scheduling(int mod_id,
pucch
->
ul_slot
=
(
s
+
1
)
%
n_slots_frame
;
}
if
(
ind_found
==-
1
)
{
LOG_
W
(
NR_MAC
,
LOG_
D
(
NR_MAC
,
"%4d.%2d could not find pdsch_to_harq_feedback for UE %d: earliest "
"ack slot %d
\n
"
,
frame
,
...
...
openair2/LAYER2/NR_MAC_gNB/main.c
View file @
d516efcf
...
...
@@ -94,36 +94,36 @@ void dump_mac_stats(gNB_MAC_INST *gNB, char *output, int strlen)
avg_rsrp
,
stats
->
num_rsrp_meas
);
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: dlsch_rounds %
d/%d/%d/%d, dlsch_errors %d
, pucch0_DTX %d, BLER %.5f MCS %d
\n
"
,
UE_id
,
stats
->
dlsch_rounds
[
0
],
stats
->
dlsch_rounds
[
1
],
stats
->
dlsch_rounds
[
2
],
stats
->
dlsch_rounds
[
3
],
stats
->
dlsch_errors
,
stats
->
pucch0_DTX
,
sched_ctrl
->
dl_bler_stats
.
bler
,
sched_ctrl
->
dl_bler_stats
.
mcs
);
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: dlsch_rounds %
"
PRIu64
"/%"
PRIu64
"/%"
PRIu64
"/%"
PRIu64
", dlsch_errors %"
PRIu64
"
, pucch0_DTX %d, BLER %.5f MCS %d
\n
"
,
UE_id
,
stats
->
dlsch_rounds
[
0
],
stats
->
dlsch_rounds
[
1
],
stats
->
dlsch_rounds
[
2
],
stats
->
dlsch_rounds
[
3
],
stats
->
dlsch_errors
,
stats
->
pucch0_DTX
,
sched_ctrl
->
dl_bler_stats
.
bler
,
sched_ctrl
->
dl_bler_stats
.
mcs
);
stats
->
num_rsrp_meas
=
0
;
stats
->
cumul_rsrp
=
0
;
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: dlsch_total_bytes %
d
\n
"
,
UE_id
,
stats
->
dlsch_total_bytes
);
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: ulsch_rounds %
d/%d/%d/%d, ulsch_DTX %d, ulsch_errors %d
\n
"
,
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: dlsch_total_bytes %
"
PRIu64
"
\n
"
,
UE_id
,
stats
->
dlsch_total_bytes
);
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: ulsch_rounds %
"
PRIu64
"/%"
PRIu64
"/%"
PRIu64
"/%"
PRIu64
", ulsch_DTX %d, ulsch_errors %"
PRIu64
"
\n
"
,
UE_id
,
stats
->
ulsch_rounds
[
0
],
stats
->
ulsch_rounds
[
1
],
stats
->
ulsch_rounds
[
2
],
stats
->
ulsch_rounds
[
3
],
stats
->
ulsch_DTX
,
stats
->
ulsch_errors
);
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: ulsch_total_bytes_scheduled %
d, ulsch_total_bytes_received %d
\n
"
,
"UE %d: ulsch_total_bytes_scheduled %
"
PRIu64
", ulsch_total_bytes_received %"
PRIu64
"
\n
"
,
UE_id
,
stats
->
ulsch_total_bytes_scheduled
,
stats
->
ulsch_total_bytes_rx
);
for
(
int
lc_id
=
0
;
lc_id
<
63
;
lc_id
++
)
{
if
(
stats
->
lc_bytes_tx
[
lc_id
]
>
0
)
{
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: LCID %d: %
d
bytes TX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_tx
[
lc_id
]);
LOG_D
(
NR_MAC
,
"UE %d: LCID %d: %
d
bytes TX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_tx
[
lc_id
]);
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: LCID %d: %
"
PRIu64
"
bytes TX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_tx
[
lc_id
]);
LOG_D
(
NR_MAC
,
"UE %d: LCID %d: %
"
PRIu64
"
bytes TX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_tx
[
lc_id
]);
}
if
(
stats
->
lc_bytes_rx
[
lc_id
]
>
0
)
{
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: LCID %d: %
d
bytes RX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_rx
[
lc_id
]);
LOG_D
(
NR_MAC
,
"UE %d: LCID %d: %
d
bytes RX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_rx
[
lc_id
]);
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: LCID %d: %
"
PRIu64
"
bytes RX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_rx
[
lc_id
]);
LOG_D
(
NR_MAC
,
"UE %d: LCID %d: %
"
PRIu64
"
bytes RX
\n
"
,
UE_id
,
lc_id
,
stats
->
lc_bytes_rx
[
lc_id
]);
}
}
}
...
...
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
d516efcf
...
...
@@ -427,7 +427,7 @@ typedef struct NR_DL_bler_stats {
float
bler
;
float
rd2_bler
;
uint8_t
mcs
;
in
t
dlsch_rounds
[
8
];
uint64_
t
dlsch_rounds
[
8
];
}
NR_DL_bler_stats_t
;
//
...
...
@@ -618,19 +618,19 @@ typedef struct {
}
NRUEcontext_t
;
typedef
struct
{
in
t
lc_bytes_tx
[
64
];
in
t
lc_bytes_rx
[
64
];
in
t
dlsch_rounds
[
8
];
in
t
dlsch_errors
;
in
t
dlsch_total_bytes
;
uint64_
t
lc_bytes_tx
[
64
];
uint64_
t
lc_bytes_rx
[
64
];
uint64_
t
dlsch_rounds
[
8
];
uint64_
t
dlsch_errors
;
uint64_
t
dlsch_total_bytes
;
int
dlsch_current_bytes
;
in
t
ulsch_rounds
[
8
];
in
t
ulsch_errors
;
in
t
ulsch_DTX
;
in
t
ulsch_total_bytes_scheduled
;
in
t
ulsch_total_bytes_rx
;
uint64_
t
ulsch_rounds
[
8
];
uint64_
t
ulsch_errors
;
uint32_
t
ulsch_DTX
;
uint64_
t
ulsch_total_bytes_scheduled
;
uint64_
t
ulsch_total_bytes_rx
;
int
ulsch_current_bytes
;
in
t
pucch0_DTX
;
uint32_
t
pucch0_DTX
;
int
cumul_rsrp
;
uint8_t
num_rsrp_meas
;
}
NR_mac_stats_t
;
...
...
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
d516efcf
...
...
@@ -991,7 +991,6 @@ void fill_initial_SpCellConfig(rnti_t rnti,
NR_SpCellConfig_t
*
SpCellConfig
,
NR_ServingCellConfigCommon_t
*
scc
,
rrc_gNB_carrier_data_t
*
carrier
)
{
int
curr_bwp
=
NRRIV2BW
(
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
locationAndBandwidth
,
MAX_BWP_SIZE
);
SpCellConfig
->
servCellIndex
=
NULL
;
SpCellConfig
->
reconfigurationWithSync
=
NULL
;
...
...
@@ -1021,6 +1020,7 @@ void fill_initial_SpCellConfig(rnti_t rnti,
// one symbol (13)
NR_PUCCH_Resource_t
*
pucchres0
=
calloc
(
1
,
sizeof
(
*
pucchres0
));
pucchres0
->
pucch_ResourceId
=
0
;
//pucchres0->startingPRB=0;
pucchres0
->
startingPRB
=
(
8
+
rnti
)
%
curr_bwp
;
LOG_D
(
NR_RRC
,
"pucchres0->startPRB %ld rnti %d curr_bwp %d
\n
"
,
pucchres0
->
startingPRB
,
rnti
,
curr_bwp
);
pucchres0
->
intraSlotFrequencyHopping
=
NULL
;
...
...
@@ -1174,9 +1174,9 @@ void fill_initial_SpCellConfig(rnti_t rnti,
AssertFatal
(
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
subcarrierSpacing
==
NR_SubcarrierSpacing_kHz30
,
"SCS != 30kHz
\n
"
);
AssertFatal
(
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
dl_UL_TransmissionPeriodicity
==
NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms5
,
"TDD period != 5ms : %ld
\n
"
,
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
dl_UL_TransmissionPeriodicity
);
schedulingRequestResourceConfig
->
periodicityAndOffset
->
choice
.
sl40
=
8
+
10
*
((
rnti
>>
1
)
&
3
)
+
(
rnti
&
1
)
;
"TDD period != 5ms : %ld
\n
"
,
scc
->
tdd_UL_DL_ConfigurationCommon
->
pattern1
.
dl_UL_TransmissionPeriodicity
);
schedulingRequestResourceConfig
->
periodicityAndOffset
->
choice
.
sl40
=
8
;
schedulingRequestResourceConfig
->
resource
=
calloc
(
1
,
sizeof
(
*
schedulingRequestResourceConfig
->
resource
));
*
schedulingRequestResourceConfig
->
resource
=
0
;
ASN_SEQUENCE_ADD
(
&
pucch_Config
->
schedulingRequestResourceToAddModList
->
list
,
schedulingRequestResourceConfig
);
...
...
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