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
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
spbro
OpenXG-RAN
Commits
0276ec0c
Commit
0276ec0c
authored
Oct 11, 2021
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/ci_test_sa_nsa' into integration_2021_wk41
parents
81e4a783
ace49882
Changes
19
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
604 additions
and
315 deletions
+604
-315
ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
+15
-0
ci-scripts/ci_ueinfra.yaml
ci-scripts/ci_ueinfra.yaml
+11
-3
ci-scripts/cls_module_ue.py
ci-scripts/cls_module_ue.py
+29
-2
ci-scripts/cls_oaicitest.py
ci-scripts/cls_oaicitest.py
+152
-68
ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf
...cripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf
+3
-3
ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
...cripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
+1
-1
ci-scripts/epc.py
ci-scripts/epc.py
+37
-1
ci-scripts/main.py
ci-scripts/main.py
+1
-0
ci-scripts/ran.py
ci-scripts/ran.py
+33
-2
ci-scripts/sshconnection.py
ci-scripts/sshconnection.py
+12
-0
ci-scripts/stats_monitor.py
ci-scripts/stats_monitor.py
+90
-0
ci-scripts/xml_files/fr1_enb_build.xml
ci-scripts/xml_files/fr1_enb_build.xml
+50
-0
ci-scripts/xml_files/fr1_gnb_build.xml
ci-scripts/xml_files/fr1_gnb_build.xml
+0
-2
ci-scripts/xml_files/fr1_lte_2x2_quectel.xml
ci-scripts/xml_files/fr1_lte_2x2_quectel.xml
+141
-0
ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
+7
-4
ci-scripts/xml_files/fr1_oai_cn_deploy.xml
ci-scripts/xml_files/fr1_oai_cn_deploy.xml
+1
-1
ci-scripts/xml_files/fr1_sa_quectel.xml
ci-scripts/xml_files/fr1_sa_quectel.xml
+12
-16
ci-scripts/yaml_files/fr1_epc_20897/docker-compose.yml
ci-scripts/yaml_files/fr1_epc_20897/docker-compose.yml
+9
-9
ci-scripts/yaml_files/fr1_epc_tim/docker-compose.yml.orig
ci-scripts/yaml_files/fr1_epc_tim/docker-compose.yml.orig
+0
-203
No files found.
ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
View file @
0276ec0c
...
...
@@ -265,6 +265,21 @@ pipeline {
if
(
fileExists
(
"enb.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"enb.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (CN)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.EPC_Credentials}"
,
usernameVariable:
'EPC_Username'
,
passwordVariable:
'EPC_Password'
]
])
{
echo
'\u2705 \u001B[32mLog Transfer (CN)\u001B[0m'
sh
"sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/logs/oai-cn5g.log.zip ./oai-cn5g.log.${env.BUILD_ID}.zip || true"
}
script
{
if
(
fileExists
(
"oai-cn5g.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"oai-cn5g.log.${env.BUILD_ID}.zip"
}
if
(
fileExists
(
"ci-scripts/test_results.html"
))
{
sh
"mv ci-scripts/test_results.html test_results-${JOB_NAME}.html"
sh
"sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
...
...
ci-scripts/ci_ueinfra.yaml
View file @
0276ec0c
...
...
@@ -4,7 +4,9 @@ idefix:
Kind
:
quectel
Process
:
Name
:
quectel-CM
Cmd
:
/home/oaicicd/quectel-CM/quectel-CM -s oai.ipv4 -4
Cmd
:
/home/oaicicd/quectel-CM/quectel-CM -4 -s
Apn
:
ltebox
:
oai.ipv4
WakeupScript
:
ci_ctl_qtel.py /dev/ttyUSB2 wup
DetachScript
:
ci_ctl_qtel.py /dev/ttyUSB2 detach
LogStore
:
/media/usb-drive/ci_qlogs
...
...
@@ -20,16 +22,22 @@ nrmodule2_quectel:
Kind
:
quectel
Process
:
Name
:
quectel-CM
Cmd
:
/home/nrmodule2/quectel-CM/quectel-CM -s oai.ipv4 -4
Cmd
:
/home/nrmodule2/quectel-CM/quectel-CM -4 -s
Apn
:
OAICN5G
:
oai
OAI-Rel14-Docker
:
oai.ipv4
WakeupScript
:
ci_ctl_qtel.py /dev/ttyUSB7 wup
DetachScript
:
ci_ctl_qtel.py /dev/ttyUSB7 detach
LogStore
:
/media/ci_qlogs
PLMN
:
2089
9
PLMN
:
2089
7
UENetwork
:
wwan1
HostIPAddress
:
192.168.18.189
HostUsername
:
nrmodule2
HostPassword
:
linux
HostSourceCodePath
:
none
StartCommands
:
-
sudo -S ip link set dev wwan1 mtu
1500
MTU
:
1500
dummy
:
ID
:
'
'
State
:
'
'
...
...
ci-scripts/cls_module_ue.py
View file @
0276ec0c
...
...
@@ -61,7 +61,7 @@ class Module_UE:
#this method checks if the specified Process is running on the server hosting the module
#if not it will be started
def
CheckCMProcess
(
self
):
def
CheckCMProcess
(
self
,
CNType
):
HOST
=
self
.
HostUsername
+
'@'
+
self
.
HostIPAddress
COMMAND
=
"ps aux | grep "
+
self
.
Process
[
'Name'
]
+
" | grep -v grep "
logging
.
debug
(
COMMAND
)
...
...
@@ -76,7 +76,7 @@ class Module_UE:
logging
.
debug
(
'Starting '
+
self
.
Process
[
'Name'
])
mySSH
=
sshconnection
.
SSHConnection
()
mySSH
.
open
(
self
.
HostIPAddress
,
self
.
HostUsername
,
self
.
HostPassword
)
mySSH
.
command
(
'echo $USER; echo '
+
self
.
HostPassword
+
' | nohup sudo -S '
+
self
.
Process
[
'Cmd'
]
+
' &'
,
'\$'
,
5
)
mySSH
.
command
(
'echo $USER; echo '
+
self
.
HostPassword
+
' | nohup sudo -S '
+
self
.
Process
[
'Cmd'
]
+
'
'
+
self
.
Process
[
'Apn'
][
CNType
]
+
'
&'
,
'\$'
,
5
)
mySSH
.
close
()
#checking the process
time
.
sleep
(
5
)
...
...
@@ -131,6 +131,33 @@ class Module_UE:
logging
.
debug
(
'
\u001B
[1;37;41m Module IP Address Not Found!
\u001B
[0m'
)
return
-
1
def
CheckModuleMTU
(
self
):
HOST
=
self
.
HostUsername
+
'@'
+
self
.
HostIPAddress
response
=
[]
tentative
=
3
while
(
len
(
response
)
==
0
)
and
(
tentative
>
0
):
COMMAND
=
"ip a show dev "
+
self
.
UENetwork
+
" | grep mtu"
logging
.
debug
(
COMMAND
)
ssh
=
subprocess
.
Popen
([
"ssh"
,
"%s"
%
HOST
,
COMMAND
],
shell
=
False
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
response
=
ssh
.
stdout
.
readlines
()
tentative
-=
1
time
.
sleep
(
10
)
if
(
tentative
==
0
)
and
(
len
(
response
)
==
0
):
logging
.
debug
(
'
\u001B
[1;37;41m Module NIC MTU Not Found! Time expired
\u001B
[0m'
)
return
-
1
else
:
#check response
result
=
re
.
search
(
'mtu (?P<mtu>[0-9]+)'
,
response
[
0
].
decode
(
"utf-8"
)
)
if
result
is
not
None
:
if
(
result
.
group
(
'mtu'
)
is
not
None
)
and
(
str
(
result
.
group
(
'mtu'
))
==
str
(
self
.
MTU
))
:
logging
.
debug
(
'
\u001B
[1mUE Module NIC MTU is '
+
str
(
self
.
MTU
)
+
' as expected
\u001B
[0m'
)
return
0
else
:
logging
.
debug
(
'
\u001B
[1;37;41m Incorrect Module NIC MTU '
+
str
(
result
.
group
(
'mtu'
))
+
'! Expected : '
+
str
(
self
.
MTU
)
+
'
\u001B
[0m'
)
return
-
1
else
:
logging
.
debug
(
'
\u001B
[1;37;41m Module NIC MTU Not Found!
\u001B
[0m'
)
return
-
1
def
EnableTrace
(
self
):
if
self
.
ue_trace
==
"yes"
:
mySSH
=
sshconnection
.
SSHConnection
()
...
...
ci-scripts/cls_oaicitest.py
View file @
0276ec0c
...
...
@@ -388,7 +388,7 @@ class OaiCiTest():
#RH
Module_UE
=
cls_module_ue
.
Module_UE
(
InfraUE
.
ci_ue_infra
[
self
.
ue_id
])
Module_UE
.
ue_trace
=
ue_trace
is_module
=
Module_UE
.
CheckCMProcess
()
is_module
=
Module_UE
.
CheckCMProcess
(
EPC
.
Type
)
if
is_module
:
Module_UE
.
EnableTrace
()
time
.
sleep
(
5
)
...
...
@@ -400,12 +400,22 @@ class OaiCiTest():
if
status
==
0
:
HTML
.
CreateHtmlTestRow
(
Module_UE
.
UEIPAddress
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
logging
.
debug
(
'UE IP addresss : '
+
Module_UE
.
UEIPAddress
)
#execute additional commands from yaml file after UE attach
SSH
=
sshconnection
.
SSHConnection
()
SSH
.
open
(
Module_UE
.
HostIPAddress
,
Module_UE
.
HostUsername
,
Module_UE
.
HostPassword
)
for
startcommand
in
Module_UE
.
StartCommands
:
cmd
=
'echo '
+
Module_UE
.
HostPassword
+
' | '
+
startcommand
SSH
.
command
(
cmd
,
'\$'
,
5
)
SSH
.
close
()
#check that the MTU is as expected / requested
Module_UE
.
CheckModuleMTU
()
else
:
#status==-1 failed to retrieve IP address
HTML
.
CreateHtmlTestRow
(
'N/A'
,
'KO'
,
CONST
.
UE_IP_ADDRESS_ISSUE
)
self
.
AutoTerminateUEandeNB
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
)
return
def
InitializeOAIUE
(
self
,
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
):
if
self
.
UEIPAddress
==
''
or
self
.
UEUserName
==
''
or
self
.
UEPassword
==
''
or
self
.
UESourceCodePath
==
''
:
HELP
.
GenericHelp
(
CONST
.
Version
)
...
...
@@ -1539,6 +1549,8 @@ class OaiCiTest():
#target address is different depending on EPC type
if
re
.
match
(
'OAI-Rel14-Docker'
,
EPC
.
Type
,
re
.
IGNORECASE
):
Target
=
EPC
.
MmeIPAddress
elif
re
.
match
(
'OAICN5G'
,
EPC
.
Type
,
re
.
IGNORECASE
):
Target
=
'8.8.8.8'
else
:
Target
=
EPC
.
IPAddress
#ping from module NIC rather than IP address to make sure round trip is over the air
...
...
@@ -1986,7 +1998,7 @@ class OaiCiTest():
if
type
==
0
:
result
=
re
.
search
(
'(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(?P<lostPack>[0-9]+)/ +(?P<sentPack>[0-9]+)'
,
str
(
line
))
else
:
result
=
re
.
search
(
'^\[
\d\].+ +(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(?P<lostPack>[0-9]+)\/
(?P<sentPack>[0-9]+)'
,
str
(
line
))
result
=
re
.
search
(
'^\[
\s+\d\].+ (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(?P<lostPack>[0-9]+)\/\s*
(?P<sentPack>[0-9]+)'
,
str
(
line
))
if
result
is
not
None
:
bitrate
=
result
.
group
(
'bitrate'
)
...
...
@@ -2230,13 +2242,85 @@ class OaiCiTest():
def
Iperf_Module
(
self
,
lock
,
UE_IPAddress
,
device_id
,
idx
,
ue_num
,
statusQueue
,
EPC
,
Module_UE
):
if
(
re
.
match
(
'OAI-Rel14-Docker'
,
EPC
.
Type
,
re
.
IGNORECASE
))
or
(
re
.
match
(
'OAICN5G'
,
EPC
.
Type
,
re
.
IGNORECASE
)):
#retrieve trf-gen container IP address
SSH
=
sshconnection
.
SSHConnection
()
#RH temporary quick n dirty for test
SSH
.
open
(
EPC
.
IPAddress
,
EPC
.
UserName
,
EPC
.
Password
)
cmd
=
'echo '
+
EPC
.
Password
+
' | sudo -S ip link set dev tun5 mtu 1358'
SSH
.
command
(
'docker inspect --format="TRF_IP_ADDR = {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" prod-trf-gen'
,
'\$'
,
5
)
result
=
re
.
search
(
'TRF_IP_ADDR = (?P<trf_ip_addr>[0-9\.]+)'
,
SSH
.
getBefore
())
if
result
is
not
None
:
trf_gen_IP
=
result
.
group
(
'trf_ip_addr'
)
SSH
.
close
()
#kill iperf processes on UE side before (in case there are still some remaining)
SSH
.
open
(
Module_UE
.
HostIPAddress
,
Module_UE
.
HostUsername
,
Module_UE
.
HostPassword
)
cmd
=
'killall --signal=SIGKILL iperf'
SSH
.
command
(
cmd
,
'\$'
,
5
)
SSH
.
close
()
iperf_time
=
self
.
Iperf_ComputeTime
()
if
self
.
iperf_direction
==
"DL"
:
logging
.
debug
(
"Iperf for Module in DL mode detected"
)
#server side UE
server_filename
=
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
self
.
ue_id
+
'.log'
SSH
.
open
(
Module_UE
.
HostIPAddress
,
Module_UE
.
HostUsername
,
Module_UE
.
HostPassword
)
cmd
=
'rm '
+
server_filename
SSH
.
command
(
cmd
,
'\$'
,
5
)
cmd
=
'echo $USER; nohup iperf -s -B '
+
UE_IPAddress
+
' -u 2>&1 > '
+
server_filename
SSH
.
command
(
cmd
,
'\$'
,
5
)
SSH
.
close
()
#client side EPC
SSH
.
open
(
EPC
.
IPAddress
,
EPC
.
UserName
,
EPC
.
Password
)
client_filename
=
'iperf_client_'
+
self
.
testCase_id
+
'_'
+
self
.
ue_id
+
'.log'
SSH
.
command
(
'docker exec -it prod-trf-gen /bin/bash -c "killall --signal SIGKILL iperf"'
,
'\$'
,
5
)
iperf_cmd
=
'bin/iperf -c '
+
UE_IPAddress
+
' '
+
self
.
iperf_args
+
' 2>&1 > '
+
client_filename
cmd
=
'docker exec -it prod-trf-gen /bin/bash -c
\"
'
+
iperf_cmd
+
'
\"
'
SSH
.
command
(
cmd
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
SSH
.
command
(
'docker cp prod-trf-gen:/iperf-2.0.13/'
+
client_filename
+
' '
+
EPC
.
SourceCodePath
,
'\$'
,
5
)
SSH
.
copyin
(
EPC
.
IPAddress
,
EPC
.
UserName
,
EPC
.
Password
,
EPC
.
SourceCodePath
+
'/'
+
client_filename
,
'.'
)
SSH
.
close
()
#copy the 2 resulting files locally
SSH
.
copyin
(
Module_UE
.
HostIPAddress
,
Module_UE
.
HostUsername
,
Module_UE
.
HostPassword
,
server_filename
,
'.'
)
SSH
.
copyin
(
EPC
.
IPAddress
,
EPC
.
UserName
,
EPC
.
Password
,
client_filename
,
'.'
)
#send for analysis
self
.
Iperf_analyzeV2Server
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
,
self
.
iperf_args
,
server_filename
,
1
)
elif
self
.
iperf_direction
==
"UL"
:
logging
.
debug
(
"Iperf for Module in UL mode detected"
)
#server side EPC
SSH
.
open
(
EPC
.
IPAddress
,
EPC
.
UserName
,
EPC
.
Password
)
server_filename
=
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
self
.
ue_id
+
'.log'
SSH
.
command
(
'docker exec -it prod-trf-gen /bin/bash -c "killall --signal SIGKILL iperf"'
,
'\$'
,
5
)
iperf_cmd
=
'echo $USER; nohup bin/iperf -s -u 2>&1 > '
+
server_filename
cmd
=
'docker exec -it prod-trf-gen /bin/bash -c
\"
'
+
iperf_cmd
+
'
\"
'
SSH
.
command
(
cmd
,
'\$'
,
5
)
SSH
.
close
()
#client side UE
SSH
.
open
(
Module_UE
.
HostIPAddress
,
Module_UE
.
HostUsername
,
Module_UE
.
HostPassword
)
client_filename
=
'iperf_client_'
+
self
.
testCase_id
+
'_'
+
self
.
ue_id
+
'.log'
cmd
=
'rm '
+
client_filename
SSH
.
command
(
cmd
,
'\$'
,
5
)
SSH
.
command
(
'iperf -B '
+
UE_IPAddress
+
' -c '
+
trf_gen_IP
+
' '
+
self
.
iperf_args
+
' 2>&1 > '
+
client_filename
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
SSH
.
close
()
#once client is done, retrieve the server file from container to EPC Host
SSH
.
open
(
EPC
.
IPAddress
,
EPC
.
UserName
,
EPC
.
Password
)
SSH
.
command
(
'docker cp prod-trf-gen:/iperf-2.0.13/'
+
server_filename
+
' '
+
EPC
.
SourceCodePath
,
'\$'
,
5
)
SSH
.
copyin
(
EPC
.
IPAddress
,
EPC
.
UserName
,
EPC
.
Password
,
EPC
.
SourceCodePath
+
'/'
+
server_filename
,
'.'
)
SSH
.
close
()
#copy the 2 resulting files locally
SSH
.
copyin
(
Module_UE
.
HostIPAddress
,
Module_UE
.
HostUsername
,
Module_UE
.
HostPassword
,
client_filename
,
'.'
)
SSH
.
copyin
(
EPC
.
IPAddress
,
EPC
.
UserName
,
EPC
.
Password
,
server_filename
,
'.'
)
#send for analysis
self
.
Iperf_analyzeV2Server
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
,
self
.
iperf_args
,
server_filename
,
1
)
else
:
logging
.
debug
(
"Incorrect or missing IPERF direction in XML"
)
else
:
#default is ltebox
SSH
=
sshconnection
.
SSHConnection
()
#kill iperf processes before (in case there are still some remaining)
SSH
.
open
(
Module_UE
.
HostIPAddress
,
Module_UE
.
HostUsername
,
Module_UE
.
HostPassword
)
...
...
@@ -2273,7 +2357,7 @@ class OaiCiTest():
filename
=
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
self
.
ue_id
+
'.log'
self
.
Iperf_analyzeV2Server
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
,
self
.
iperf_args
,
filename
,
1
)
elif
self
.
iperf_direction
==
"UL"
:
#does not work at the moment
elif
self
.
iperf_direction
==
"UL"
:
logging
.
debug
(
"Iperf for Module in UL mode detected"
)
#server side EPC
SSH
.
open
(
EPC
.
IPAddress
,
EPC
.
UserName
,
EPC
.
Password
)
...
...
ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf
View file @
0276ec0c
...
...
@@ -14,7 +14,7 @@ eNBs =
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
9
9
;
mnc_length
=
2
; } );
plmn_list
= ( {
mcc
=
208
;
mnc
=
9
7
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
@@ -209,8 +209,8 @@ MACRLCs = (
scheduler_mode
=
"fairRR"
;
bler_target_upper
=
20
.
0
;
bler_target_lower
=
10
.
0
;
max_ul_rb_index
=
2
4
;
puSch10xSnr
=
1
00
;
max_ul_rb_index
=
2
7
;
puSch10xSnr
=
2
00
;
puCch10xSnr
=
150
;
}
);
...
...
ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
View file @
0276ec0c
...
...
@@ -13,7 +13,7 @@ gNBs =
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
1
;
plmn_list
= ({
mcc
=
208
;
mnc
=
9
9
;
mnc_length
=
2
;});
plmn_list
= ({
mcc
=
208
;
mnc
=
9
7
;
mnc_length
=
2
;});
tr_s_preference
=
"local_mac"
...
...
ci-scripts/epc.py
View file @
0276ec0c
...
...
@@ -220,7 +220,7 @@ class EPCManagement():
mySSH
=
SSH
.
SSHConnection
()
mySSH
.
open
(
self
.
IPAddress
,
self
.
UserName
,
self
.
Password
)
if
re
.
match
(
'ltebox'
,
self
.
Type
,
re
.
IGNORECASE
):
logging
.
debug
(
'Using the
sabox
simulated HSS'
)
logging
.
debug
(
'Using the
SABOX
simulated HSS'
)
mySSH
.
command
(
'if [ -d '
+
self
.
SourceCodePath
+
'/scripts ]; then echo '
+
self
.
Password
+
' | sudo -S rm -Rf '
+
self
.
SourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
mySSH
.
command
(
'mkdir -p '
+
self
.
SourceCodePath
+
'/scripts'
,
'\$'
,
5
)
mySSH
.
command
(
'cd /opt/hss_sim0609'
,
'\$'
,
5
)
...
...
@@ -229,6 +229,12 @@ class EPCManagement():
logging
.
debug
(
'Using the sabox'
)
mySSH
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
self
.
Password
+
' | sudo -S ./start_sabox'
,
'\$'
,
5
)
elif
re
.
match
(
'OAICN5G'
,
self
.
Type
,
re
.
IGNORECASE
):
logging
.
debug
(
'Starting OAI CN5G'
)
mySSH
.
command
(
'if [ -d '
+
self
.
SourceCodePath
+
'/scripts ]; then echo '
+
self
.
Password
+
' | sudo -S rm -Rf '
+
self
.
SourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
mySSH
.
command
(
'mkdir -p '
+
self
.
SourceCodePath
+
'/scripts'
,
'\$'
,
5
)
mySSH
.
command
(
'cd /opt/oai-cn5g-fed/docker-compose'
,
'\$'
,
5
)
mySSH
.
command
(
'./core-network.sh start nrf spgwu'
,
'\$'
,
60
)
else
:
logging
.
error
(
'This option should not occur!'
)
mySSH
.
close
()
...
...
@@ -242,6 +248,16 @@ class EPCManagement():
return
if
re
.
match
(
'ltebox'
,
self
.
Type
,
re
.
IGNORECASE
):
self
.
MmeIPAddress
=
self
.
IPAddress
elif
re
.
match
(
'OAICN5G'
,
self
.
Type
,
re
.
IGNORECASE
):
mySSH
=
SSH
.
SSHConnection
()
mySSH
.
open
(
self
.
IPAddress
,
self
.
UserName
,
self
.
Password
)
response
=
mySSH
.
command3
(
'docker container ls -f name=oai-amf'
,
10
)
if
len
(
response
)
>
1
:
response
=
mySSH
.
command3
(
'docker inspect --format=
\'
{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}
\'
oai-amf'
,
10
)
tmp
=
str
(
response
[
0
],
'utf-8'
)
self
.
MmeIPAddress
=
tmp
.
rstrip
()
logging
.
debug
(
'AMF IP Address '
+
self
.
MmeIPAddress
)
mySSH
.
close
()
def
CheckHSSProcess
(
self
,
status_queue
):
try
:
...
...
@@ -433,6 +449,7 @@ class EPCManagement():
mySSH
=
SSH
.
SSHConnection
()
mySSH
.
open
(
self
.
IPAddress
,
self
.
UserName
,
self
.
Password
)
if
re
.
match
(
'ltebox'
,
self
.
Type
,
re
.
IGNORECASE
):
logging
.
debug
(
'Terminating SA BOX'
)
mySSH
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
self
.
Password
+
' | sudo -S ./stop_sabox'
,
'\$'
,
5
)
time
.
sleep
(
1
)
...
...
@@ -440,6 +457,12 @@ class EPCManagement():
mySSH
.
command
(
'cd scripts'
,
'\$'
,
5
)
time
.
sleep
(
1
)
mySSH
.
command
(
'echo '
+
self
.
Password
+
' | sudo -S screen -S simulated_5g_hss -X quit'
,
'\$'
,
5
)
elif
re
.
match
(
'OAICN5G'
,
self
.
Type
,
re
.
IGNORECASE
):
self
.
LogCollectOAICN5G
()
logging
.
debug
(
'Terminating OAI CN5G'
)
mySSH
.
command
(
'cd /opt/oai-cn5g-fed/docker-compose'
,
'\$'
,
5
)
mySSH
.
command
(
'docker-compose down'
,
'\$'
,
5
)
mySSH
.
command
(
'./core-network.sh stop nrf spgwu'
,
'\$'
,
60
)
else
:
logging
.
error
(
'This should not happen!'
)
mySSH
.
close
()
...
...
@@ -679,3 +702,16 @@ class EPCManagement():
logging
.
error
(
'This option should not occur!'
)
mySSH
.
close
()
def
LogCollectOAICN5G
(
self
):
mySSH
=
SSH
.
SSHConnection
()
mySSH
.
open
(
self
.
IPAddress
,
self
.
UserName
,
self
.
Password
)
logging
.
debug
(
'OAI CN5G Collecting Log files to workspace'
)
mySSH
.
command
(
'echo '
+
self
.
Password
+
' | sudo rm -rf '
+
self
.
SourceCodePath
+
'/logs'
,
'\$'
,
5
)
mySSH
.
command
(
'mkdir '
+
self
.
SourceCodePath
+
'/logs'
,
'\$'
,
5
)
containers_list
=
[
'oai-smf'
,
'oai-spgwu'
,
'oai-amf'
,
'oai-nrf'
]
for
c
in
containers_list
:
mySSH
.
command
(
'docker logs '
+
c
+
' > '
+
self
.
SourceCodePath
+
'/logs/'
+
c
+
'.log'
,
'\$'
,
5
)
mySSH
.
command
(
'cd '
+
self
.
SourceCodePath
+
'/logs'
,
'\$'
,
5
)
mySSH
.
command
(
'zip oai-cn5g.log.zip *.log'
,
'\$'
,
60
)
mySSH
.
close
()
ci-scripts/main.py
View file @
0276ec0c
...
...
@@ -154,6 +154,7 @@ def GetParametersFromXML(action):
elif
action
==
'Initialize_eNB'
:
RAN
.
eNB_Trace
=
test
.
findtext
(
'eNB_Trace'
)
RAN
.
eNB_Stats
=
test
.
findtext
(
'eNB_Stats'
)
RAN
.
Initialize_eNB_args
=
test
.
findtext
(
'Initialize_eNB_args'
)
eNB_instance
=
test
.
findtext
(
'eNB_instance'
)
USRPIPAddress
=
test
.
findtext
(
'USRP_IPAddress'
)
...
...
ci-scripts/ran.py
View file @
0276ec0c
...
...
@@ -94,6 +94,7 @@ class RANManagement():
self
.
runtime_stats
=
''
self
.
datalog_rt_stats
=
{}
self
.
eNB_Trace
=
''
#if 'yes', Tshark will be launched at initialization
self
.
eNB_Stats
=
''
#if 'yes', Statistics Monitor will be launched at initialization
self
.
USRPIPAddress
=
''
...
...
@@ -339,6 +340,8 @@ class RANManagement():
sys
.
exit
(
'Insufficient Parameter'
)
logging
.
debug
(
'Starting eNB/gNB on server: '
+
lIpAddr
)
SSH
.
copyout
(
lIpAddr
,
lUserName
,
lPassWord
,
cwd
+
"/active_net_interfaces.awk"
,
"/tmp"
)
self
.
testCase_id
=
HTML
.
testCase_id
mySSH
=
SSH
.
SSHConnection
()
...
...
@@ -461,10 +464,34 @@ class RANManagement():
mySSH
.
command
(
'if [ -e rbconfig.raw ]; then echo '
+
lPassWord
+
' | sudo -S rm rbconfig.raw; fi'
,
'\$'
,
5
)
mySSH
.
command
(
'if [ -e reconfig.raw ]; then echo '
+
lPassWord
+
' | sudo -S rm reconfig.raw; fi'
,
'\$'
,
5
)
# NOTE: WE SHALL do a check if the executable is present (in case build went wrong)
#hack UHD_RFNOC_DIR variable for gNB / N310 on RHEL8 server:
#if the USRP address is in the xml then we are using an eth USRP (N3xx)
if
(
self
.
air_interface
[
self
.
eNB_instance
]
==
'lte-softmodem'
)
or
(
self
.
air_interface
[
self
.
eNB_instance
]
==
'ocp-enb'
):
gNB
=
False
else
:
gNB
=
True
if
((
self
.
USRPIPAddress
!=
''
)
and
(
gNB
==
True
)):
mySSH
.
command
(
'echo '
+
lPassWord
+
' | echo "ulimit -c unlimited && sudo UHD_RFNOC_DIR=/usr/local/share/uhd/rfnoc ./ran_build/build/'
+
self
.
air_interface
[
self
.
eNB_instance
]
+
' -O '
+
lSourcePath
+
'/'
+
ci_full_config_file
+
extra_options
+
'" > ./my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
#otherwise the regular command is ok
else
:
mySSH
.
command
(
'echo "ulimit -c unlimited && ./ran_build/build/'
+
self
.
air_interface
[
self
.
eNB_instance
]
+
' -O '
+
lSourcePath
+
'/'
+
ci_full_config_file
+
extra_options
+
'" > ./my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
mySSH
.
command
(
'chmod 775 ./my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
lPassWord
+
' | sudo -S rm -Rf enb_'
+
self
.
testCase_id
+
'.log'
,
'\$'
,
5
)
mySSH
.
command
(
'echo $USER; nohup sudo -E ./my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh > '
+
lSourcePath
+
'/cmake_targets/enb_'
+
self
.
testCase_id
+
'.log 2>&1 &'
,
lUserName
,
10
)
#tentative
time
.
sleep
(
20
)
if
self
.
eNB_Stats
==
'yes'
:
monitor_file
=
'stats_monitor.py'
#mySSH.command('echo ' + lPassWord + ' | sudo -S cp ' + self.eNBSourceCodePath + '/ci-scripts/'+ monitor_file + ' ' + self.eNBSourceCodePath + '/cmake_targets/ran_build/build/.','\$', 5)
#mySSH.command('echo $USER; nohup python3 ' + self.eNBSourceCodePath + '/cmake_targets/ran_build/build/' + monitor_file + ' 2>&1 &', '\$', 5)
mySSH
.
command
(
'echo $USER; nohup python3 ../ci-scripts/'
+
monitor_file
+
' 2>&1 > stats_monitor_execution.log &'
,
'\$'
,
5
)
self
.
eNBLogFiles
[
int
(
self
.
eNB_instance
)]
=
'enb_'
+
self
.
testCase_id
+
'.log'
if
extra_options
!=
''
:
self
.
eNBOptions
[
int
(
self
.
eNB_instance
)]
=
extra_options
...
...
@@ -539,6 +566,8 @@ class RANManagement():
self
.
eNBstatuses
[
int
(
self
.
eNB_instance
)]
=
int
(
self
.
eNB_serverId
[
self
.
eNB_instance
])
mySSH
.
close
()
HTML
.
CreateHtmlTestRow
(
self
.
air_interface
[
self
.
eNB_instance
]
+
' -O '
+
config_file
+
extra_options
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
logging
.
debug
(
'
\u001B
[1m Initialize eNB/gNB/ocp-eNB Completed
\u001B
[0m'
)
...
...
@@ -690,8 +719,10 @@ class RANManagement():
mySSH
.
command
(
'cd cmake_targets'
,
'\$'
,
5
)
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 mv /tmp/*monitor.pickle .'
,
'\$'
,
20
)
mySSH
.
command
(
'echo '
+
self
.
eNBPassword
+
' | sudo -S mv /tmp/*monitor.png .'
,
'\$'
,
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'
,
'\$'
,
60
)
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'
,
'\$'
,
5
)
mySSH
.
close
()
...
...
ci-scripts/sshconnection.py
View file @
0276ec0c
...
...
@@ -163,6 +163,18 @@ class SSHConnection():
lSsh
=
subprocess
.
Popen
([
"ssh"
,
"%s"
%
myHost
,
commandline
],
shell
=
False
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
self
.
cmd2Results
=
str
(
lSsh
.
stdout
.
readlines
())
def
command3
(
self
,
commandline
,
timeout
,
silent
=
False
):
if
not
silent
:
logging
.
debug
(
commandline
)
self
.
cmd2Results
=
''
myHost
=
self
.
username
+
'@'
+
self
.
ipaddress
# CAUTION: THIS METHOD IMPLIES THAT THERE ARE VALID SSH KEYS
# BETWEEN THE PYTHON EXECUTOR NODE AND THE REMOTE HOST
# OTHERWISE IT WON'T WORK
lSsh
=
subprocess
.
Popen
([
"ssh"
,
"%s"
%
myHost
,
commandline
],
shell
=
False
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
return
lSsh
.
stdout
.
readlines
()
def
close
(
self
):
self
.
ssh
.
timeout
=
5
self
.
ssh
.
sendline
(
'exit'
)
...
...
ci-scripts/stats_monitor.py
0 → 100755
View file @
0276ec0c
import
subprocess
import
time
import
shlex
import
re
import
sys
import
matplotlib.pyplot
as
plt
import
pickle
import
numpy
as
np
import
os
def
collect
(
d
):
cmd
=
'cat L1_stats.log MAC_stats.log PDCP_stats.log RRC_stats.log nrL1_stats.log nrMAC_stats.log nrPDCP_stats.log nrRRC_stats.log'
process
=
subprocess
.
Popen
(
shlex
.
split
(
cmd
),
stdout
=
subprocess
.
PIPE
)
output
=
process
.
stdout
.
readlines
()
for
l
in
output
:
tmp
=
l
.
decode
(
"utf-8"
)
result
=
re
.
match
(
rf'^.*\bPHR\b ([0-9]+).+\bbler\b ([0-9]+\.[0-9]+).+\bmcsoff\b ([0-9]+).+\bmcs\b ([0-9]+)'
,
tmp
)
if
result
is
not
None
:
d
[
'PHR'
].
append
(
int
(
result
.
group
(
1
)))
d
[
'bler'
].
append
(
float
(
result
.
group
(
2
)))
d
[
'mcsoff'
].
append
(
int
(
result
.
group
(
3
)))
d
[
'mcs'
].
append
(
int
(
result
.
group
(
4
)))
def
graph
(
d
):
figure
,
axis
=
plt
.
subplots
(
4
,
1
,
figsize
=
(
10
,
10
))
major_ticks
=
np
.
arange
(
0
,
len
(
d
[
'PHR'
])
+
1
,
1
)
axis
[
0
].
set_xticks
(
major_ticks
)
axis
[
0
].
set_xticklabels
([])
axis
[
0
].
plot
(
d
[
'PHR'
],
marker
=
'o'
)
axis
[
0
].
set_xlabel
(
'time'
)
axis
[
0
].
set_ylabel
(
'PHR'
)
axis
[
0
].
set_title
(
"PHR"
)
major_ticks
=
np
.
arange
(
0
,
len
(
d
[
'bler'
])
+
1
,
1
)
axis
[
1
].
set_xticks
(
major_ticks
)
axis
[
1
].
set_xticklabels
([])
axis
[
1
].
plot
(
d
[
'bler'
],
marker
=
'o'
)
axis
[
1
].
set_xlabel
(
'time'
)
axis
[
1
].
set_ylabel
(
'bler'
)
axis
[
1
].
set_title
(
"bler"
)
major_ticks
=
np
.
arange
(
0
,
len
(
d
[
'mcsoff'
])
+
1
,
1
)
axis
[
2
].
set_xticks
(
major_ticks
)
axis
[
2
].
set_xticklabels
([])
axis
[
2
].
plot
(
d
[
'mcsoff'
],
marker
=
'o'
)
axis
[
2
].
set_xlabel
(
'time'
)
axis
[
2
].
set_ylabel
(
'mcsoff'
)
axis
[
2
].
set_title
(
"mcsoff"
)
major_ticks
=
np
.
arange
(
0
,
len
(
d
[
'mcs'
])
+
1
,
1
)
axis
[
3
].
set_xticks
(
major_ticks
)
axis
[
3
].
set_xticklabels
([])
axis
[
3
].
plot
(
d
[
'mcs'
],
marker
=
'o'
)
axis
[
3
].
set_xlabel
(
'time'
)
axis
[
3
].
set_ylabel
(
'mcs'
)
axis
[
3
].
set_title
(
"mcs"
)
plt
.
tight_layout
()
# Combine all the operations and display
plt
.
savefig
(
'/tmp/stats_monitor.png'
)
plt
.
show
()
if
__name__
==
"__main__"
:
d
=
{}
d
[
'PHR'
]
=
[]
d
[
'bler'
]
=
[]
d
[
'mcsoff'
]
=
[]
d
[
'mcs'
]
=
[]
cmd
=
'ps aux | grep mode | grep -v grep'
process
=
subprocess
.
Popen
(
cmd
,
shell
=
True
,
stdout
=
subprocess
.
PIPE
)
output
=
process
.
stdout
.
readlines
()
while
len
(
output
)
!=
0
:
collect
(
d
)
process
=
subprocess
.
Popen
(
cmd
,
shell
=
True
,
stdout
=
subprocess
.
PIPE
)
output
=
process
.
stdout
.
readlines
()
time
.
sleep
(
1
)
print
(
'process stopped'
)
with
open
(
'/tmp/stats_monitor.pickle'
,
'wb'
)
as
handle
:
pickle
.
dump
(
d
,
handle
,
protocol
=
pickle
.
HIGHEST_PROTOCOL
)
graph
(
d
)
ci-scripts/xml_files/fr1_enb_build.xml
0 → 100644
View file @
0276ec0c
<!--
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>
build-tab
</htmlTabRef>
<htmlTabName>
Build
</htmlTabName>
<htmlTabIcon>
wrench
</htmlTabIcon>
<TestCaseRequestedList>
000001
000002
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"000001"
>
<class>
Build_eNB
</class>
<desc>
Build eNB
</desc>
<Build_eNB_args>
-w USRP -c --eNB --ninja
</Build_eNB_args>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<backgroundBuild>
True
</backgroundBuild>
<forced_workspace_cleanup>
True
</forced_workspace_cleanup>
</testCase>
<testCase
id=
"000002"
>
<class>
WaitEndBuild_eNB
</class>
<desc>
Wait for end of Build eNB
</desc>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
</testCase>
</testCaseList>
ci-scripts/xml_files/fr1_gnb_build.xml
View file @
0276ec0c
...
...
@@ -26,7 +26,6 @@
<htmlTabIcon>
wrench
</htmlTabIcon>
<TestCaseRequestedList>
000001
000002
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
...
...
@@ -36,7 +35,6 @@
<Build_eNB_args>
-w USRP -c --gNB --ninja
</Build_eNB_args>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<backgroundBuild>
True
</backgroundBuild>
<forced_workspace_cleanup>
True
</forced_workspace_cleanup>
</testCase>
...
...
ci-scripts/xml_files/fr1_lte_2x2_quectel.xml
0 → 100644
View file @
0276ec0c
<!--
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-LTE-TM2
</htmlTabRef>
<htmlTabName>
LTE 2x2 Ping DL UL with QUECTEL
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
1
</repeatCount>
<TestCaseRequestedList>
030000
000002
010000
000001
050000
050001
000002
070000
070001
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=
"030000"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize eNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf --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>
lte
</air_interface>
<eNB_Trace>
yes
</eNB_Trace>
<eNB_Stats>
yes
</eNB_Stats>
<USRP_IPAddress>
192.168.18.241
</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: 20 pings
</desc>
<id>
nrmodule2_quectel
</id>
<ping_args>
-c 20
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"050001"
>
<class>
Ping
</class>
<desc>
Ping: 100 pings, size 1024
</desc>
<id>
nrmodule2_quectel
</id>
<ping_args>
-c 100 -s 1024 -i 0,2
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<desc>
iperf (DL/26Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 26M -t 60
</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 (UL/7Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 7M -t 60
</iperf_args>
<direction>
UL
</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 eNB
</desc>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
lte
</air_interface>
</testCase>
<testCase
id=
"080001"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate gNB
</desc>
<eNB_instance>
1
</eNB_instance>
<eNB_serverId>
1
</eNB_serverId>
<air_interface>
nr
</air_interface>
</testCase>
</testCaseList>
ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
View file @
0276ec0c
...
...
@@ -21,8 +21,8 @@
-->
<testCaseList>
<htmlTabRef>
TEST-NSA-FR1-TM
1
</htmlTabRef>
<htmlTabName>
NSA Ping DL UL with QUECTEL
</htmlTabName>
<htmlTabRef>
TEST-NSA-FR1-TM
2
</htmlTabRef>
<htmlTabName>
NSA
2x2
Ping DL UL with QUECTEL
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
1
</repeatCount>
<TestCaseRequestedList>
...
...
@@ -32,6 +32,9 @@
010000
000001
050000
000002
070000
070001
000001
010002
080001
...
...
@@ -111,7 +114,7 @@
<iperf_args>
-u -b 20M -t 60
</iperf_args>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
0
</iperf_packetloss_threshold>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
...
...
@@ -121,7 +124,7 @@
<iperf_args>
-u -b 3M -t 60
</iperf_args>
<direction>
UL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
0
</iperf_packetloss_threshold>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
...
...
ci-scripts/xml_files/fr1_oai_cn_deploy.xml
View file @
0276ec0c
...
...
@@ -33,7 +33,7 @@
<testCase
id=
"000100"
>
<class>
Deploy_EPC
</class>
<desc>
Deploy all EPC containers
</desc>
<parameters>
yaml_files/fr1_epc_
tim
</parameters>
<parameters>
yaml_files/fr1_epc_
20897
</parameters>
</testCase>
</testCaseList>
ci-scripts/xml_files/fr1_sa_quectel.xml
View file @
0276ec0c
...
...
@@ -31,6 +31,9 @@
010000
000001
050000
050001
070000
070001
000001
010002
080000
...
...
@@ -55,11 +58,12 @@
<testCase
id=
"040000"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf --sa -q
</Initialize_eNB_args>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.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>
...
...
@@ -81,34 +85,26 @@
<desc>
Ping: 20pings in 20sec
</desc>
<id>
nrmodule2_quectel
</id>
<ping_args>
-c 20
</ping_args>
<ping_packetloss_threshold>
50
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"050001"
>
<class>
Ping
</class>
<desc>
Ping: 100pings in 20sec
</desc>
<id>
nrmodule2_quectel
</id>
<ping_args>
-c 100 -i 0.2
</ping_args>
<ping_packetloss_threshold>
50
</ping_packetloss_threshold>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<desc>
iperf (DL/
20
Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
20
M -t 60
</iperf_args>
<desc>
iperf (DL/
5
Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
5
M -t 60
</iperf_args>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
0
</iperf_packetloss_threshold>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"070001"
>
<class>
Iperf
</class>
<desc>
iperf (UL/
3
Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
3
M -t 60
</iperf_args>
<desc>
iperf (UL/
1
Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
1
M -t 60
</iperf_args>
<direction>
UL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
0
</iperf_packetloss_threshold>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
...
...
ci-scripts/yaml_files/fr1_epc_
tim
/docker-compose.yml
→
ci-scripts/yaml_files/fr1_epc_
20897
/docker-compose.yml
View file @
0276ec0c
...
...
@@ -51,7 +51,7 @@ services:
LTE_K
:
FEC86BA6EB707ED08905757B1BB44B8F
APN1
:
oai.ipv4
APN2
:
oai2.ipv4
FIRST_IMSI
:
2089
9
0100001127
FIRST_IMSI
:
2089
7
0100001127
NB_USERS
:
5
healthcheck
:
test
:
/bin/bash -c "pgrep oai_hss"
...
...
@@ -78,7 +78,7 @@ services:
HSS_FQDN
:
hss.openairinterface.org
HSS_REALM
:
openairinterface.org
MCC
:
'
208'
MNC
:
'
9
9
'
MNC
:
'
9
7
'
MME_GID
:
32768
MME_CODE
:
3
TAC_0
:
1
...
...
@@ -97,15 +97,15 @@ services:
PEER_MME_IPV4_ADDRESS_FOR_S10_0
:
0.0.0.0
PEER_MME_IPV4_ADDRESS_FOR_S10_1
:
0.0.0.0
MCC_SGW_0
:
'
208'
MNC3_SGW_0
:
'
09
9
'
MNC3_SGW_0
:
'
09
7
'
TAC_LB_SGW_0
:
'
01'
TAC_HB_SGW_0
:
'
00'
MCC_MME_0
:
'
208'
MNC3_MME_0
:
'
09
9
'
MNC3_MME_0
:
'
09
7
'
TAC_LB_MME_0
:
'
02'
TAC_HB_MME_0
:
'
00'
MCC_MME_1
:
'
208'
MNC3_MME_1
:
'
09
9
'
MNC3_MME_1
:
'
09
7
'
TAC_LB_MME_1
:
'
03'
TAC_HB_MME_1
:
'
00'
TAC_LB_SGW_TEST_0
:
'
03'
...
...
@@ -138,8 +138,8 @@ services:
UE_IP_ADDRESS_POOL_1
:
'
12.1.1.2
-
12.1.1.254'
UE_IP_ADDRESS_POOL_2
:
'
12.0.0.2
-
12.0.0.254'
MCC
:
'
208'
MNC
:
'
9
9
'
MNC03
:
'
09
9
'
MNC
:
'
9
7
'
MNC03
:
'
09
7
'
TAC
:
1
GW_ID
:
1
REALM
:
openairinterface.org
...
...
@@ -168,8 +168,8 @@ services:
NETWORK_UE_IP
:
'
12.1.1.0/24'
NETWORK_UE_NAT_OPTION
:
'
yes'
MCC
:
'
208'
MNC
:
'
9
9
'
MNC03
:
'
09
9
'
MNC
:
'
9
7
'
MNC03
:
'
09
7
'
TAC
:
1
GW_ID
:
1
REALM
:
openairinterface.org
...
...
ci-scripts/yaml_files/fr1_epc_tim/docker-compose.yml.orig
deleted
100644 → 0
View file @
81e4a783
version: '3.8'
services:
cassandra:
image: cassandra:2.1
container_name: prod-cassandra
networks:
private_net:
ipv4_address: 192.168.68.2
environment:
CASSANDRA_CLUSTER_NAME: "OAI HSS Cluster"
CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
healthcheck:
test: /bin/bash -c "nodetool status"
interval: 10s
timeout: 5s
retries: 5
db_init:
image: cassandra:2.1
container_name: prod-db-init
depends_on: [cassandra]
deploy:
restart_policy:
condition: on-failure
max_attempts: 10
networks:
private_net:
ipv4_address: 192.168.68.4
volumes:
- ./oai_db.cql:/home/oai_db.cql
entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
oai_hss:
image: oai-hss:production
container_name: prod-oai-hss
privileged: true
depends_on: [cassandra]
networks:
private_net:
ipv4_address: 192.168.68.3
public_net:
ipv4_address: 192.168.61.2
environment:
REALM: openairinterface.org
HSS_FQDN: hss.openairinterface.org
PREFIX: /openair-hss/etc
cassandra_Server_IP: 192.168.68.2
OP_KEY: 1006020f0a478bf6b699f15c062e42b3
LTE_K: fec86ba6eb707ed08905757b1bb44b8f
APN1: oai.ipv4
APN2: internet
FIRST_IMSI: 222010100001120
NB_USERS: 10
healthcheck:
test: /bin/bash -c "pgrep oai_hss"
interval: 10s
timeout: 5s
retries: 5
oai_mme:
image: oai-mme:production
container_name: prod-oai-mme
privileged: true
depends_on: [oai_hss]
networks:
public_net:
ipv4_address: 192.168.61.3
environment:
REALM: openairinterface.org
PREFIX: /openair-mme/etc
INSTANCE: 1
PID_DIRECTORY: /var/run
HSS_IP_ADDR: 192.168.61.2
HSS_HOSTNAME: hss
HSS_FQDN: hss.openairinterface.org
HSS_REALM: openairinterface.org
MCC: '222'
MNC: '01'
MME_GID: 32768
MME_CODE: 3
TAC_0: 1
TAC_1: 2
TAC_2: 3
MME_FQDN: mme.openairinterface.org
MME_S6A_IP_ADDR: 192.168.61.3
MME_INTERFACE_NAME_FOR_S1_MME: eth0
MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
MME_INTERFACE_NAME_FOR_S11: eth0
MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
MME_INTERFACE_NAME_FOR_S10: lo
MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
OUTPUT: CONSOLE
SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
MCC_SGW_0: '222'
MNC3_SGW_0: '001'
TAC_LB_SGW_0: '01'
TAC_HB_SGW_0: '00'
MCC_MME_0: '222'
MNC3_MME_0: '001'
TAC_LB_MME_0: '02'
TAC_HB_MME_0: '00'
MCC_MME_1: '222'
MNC3_MME_1: '001'
TAC_LB_MME_1: '03'
TAC_HB_MME_1: '00'
TAC_LB_SGW_TEST_0: '03'
TAC_HB_SGW_TEST_0: '00'
SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
healthcheck:
test: /bin/bash -c "pgrep oai_mme"
interval: 10s
timeout: 5s
retries: 5
oai_spgwc:
image: oai-spgwc:production
privileged: true
depends_on: [oai_mme]
container_name: prod-oai-spgwc
networks:
public_net:
ipv4_address: 192.168.61.4
environment:
PID_DIRECTORY: /var/run
SGW_INTERFACE_NAME_FOR_S11: eth0
SGW_IP_FOR_S5_S8_CP: 127.0.0.11/8
PGW_IP_FOR_S5_S8_CP: 127.0.0.12/8
PGW_INTERFACE_NAME_FOR_SX: eth0
DEFAULT_APN: oai.ipv4
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
UE_IP_ADDRESS_POOL: '12.1.1.2 - 12.1.1.254'
PUSH_PROTOCOL_OPTION: 'yes'
healthcheck:
test: /bin/bash -c "pgrep oai_spgwc"
interval: 10s
timeout: 5s
retries: 5
oai_spgwu:
image: oai-spgwu-tiny:production
privileged: true
container_name: prod-oai-spgwu-tiny
depends_on: [oai_spgwc]
networks:
public_net:
ipv4_address: 192.168.61.5
environment:
PID_DIRECTORY: /var/run
INSTANCE: 1
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
PGW_INTERFACE_NAME_FOR_SGI: eth0
SGW_INTERFACE_NAME_FOR_SX: eth0
SPGWC0_IP_ADDRESS: 192.168.61.4
NETWORK_UE_IP: '12.1.1.0/24'
NETWORK_UE_NAT_OPTION: 'yes'
healthcheck:
test: /bin/bash -c "pgrep oai_spgwu"
interval: 10s
timeout: 5s
retries: 5
flexran_rtc:
image: flexran-rtc:production
privileged: true
container_name: prod-flexran-rtc
networks:
public_net:
ipv4_address: 192.168.61.10
healthcheck:
test: /bin/bash -c "pgrep rt_controller"
interval: 10s
timeout: 5s
retries: 5
trf_gen:
image: trf-gen:production
privileged: true
container_name: prod-trf-gen
networks:
public_net:
ipv4_address: 192.168.61.11
entrypoint: /bin/bash -c "ip route add 12.1.1.0/24 via 192.168.61.5 dev eth0; sleep infinity"
healthcheck:
test: /bin/bash -c "ping -c 2 192.168.61.5"
interval: 10s
timeout: 5s
retries: 5
networks:
private_net:
name: prod-oai-private-net
ipam:
config:
- subnet: 192.168.68.0/26
public_net:
name: prod-oai-public-net
ipam:
config:
- subnet: 192.168.61.0/26
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