Commit 3cbf5168 authored by Laurent THOMAS's avatar Laurent THOMAS

Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g...

Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into code-cleanup-20210716
parents d649434b efc696cc
...@@ -384,6 +384,26 @@ pipeline { ...@@ -384,6 +384,26 @@ pipeline {
} }
} }
} }
stage ("Test 5G RF simulator") {
when {
expression {doMandatoryTests}
}
steps {
lock (vmResource) {
script {
timeout (time: 40, unit: 'MINUTES') {
try {
gitlabCommitStatus(name: "Test 5G RF-sim") {
sh "./ci-scripts/oai-ci-vm-tool test --workspace $WORKSPACE --variant rf5g-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
}
} catch (Exception e) {
currentBuild.result = 'FAILURE'
}
}
}
}
}
}
stage ("Test L2 simulator") { stage ("Test L2 simulator") {
when { when {
expression {doFullTestsuite} expression {doFullTestsuite}
......
...@@ -7,12 +7,29 @@ idefix: ...@@ -7,12 +7,29 @@ idefix:
Cmd : /home/oaicicd/quectel-CM/quectel-CM -s oai.ipv4 -4 Cmd : /home/oaicicd/quectel-CM/quectel-CM -s oai.ipv4 -4
WakeupScript : ci_ctl_qtel.py /dev/ttyUSB2 wup WakeupScript : ci_ctl_qtel.py /dev/ttyUSB2 wup
DetachScript : ci_ctl_qtel.py /dev/ttyUSB2 detach DetachScript : ci_ctl_qtel.py /dev/ttyUSB2 detach
LogStore : /media/usb-drive/ci_qlogs
PLMN : 22201 PLMN : 22201
UENetwork : wwan0 UENetwork : wwan0
HostIPAddress : 192.168.18.188 HostIPAddress : 192.168.18.188
HostUsername : oaicicd HostUsername : oaicicd
HostPassword : oaicicd HostPassword : oaicicd
HostSourceCodePath : none HostSourceCodePath : none
nrmodule2_quectel:
ID: nrmodule2_quectel
State : enabled
Kind : quectel
Process :
Name : quectel-CM
Cmd : /home/nrmodule2/quectel-CM/quectel-CM -s oai.ipv4 -4
WakeupScript : ci_ctl_qtel.py /dev/ttyUSB7 wup
DetachScript : ci_ctl_qtel.py /dev/ttyUSB7 detach
LogStore : /media/ci_qlogs
PLMN : 20899
UENetwork : wwan1
HostIPAddress : 192.168.18.189
HostUsername : nrmodule2
HostPassword : linux
HostSourceCodePath : none
dummy: dummy:
ID: '' ID: ''
State : '' State : ''
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
#USAGE: #USAGE:
# log=Log_Mgt(IPAddress,Password,Path) # log=Log_Mgt(Username,IPAddress,Password,Path)
# log.LogRotation() # log.LogRotation()
...@@ -38,7 +38,8 @@ import math ...@@ -38,7 +38,8 @@ import math
class Log_Mgt: class Log_Mgt:
def __init__(self,IPAddress,Password,Path): def __init__(self,Username, IPAddress,Password,Path):
self.Username=Username
self.IPAddress=IPAddress self.IPAddress=IPAddress
self.Password=Password self.Password=Password
self.path=Path self.path=Path
...@@ -49,7 +50,7 @@ class Log_Mgt: ...@@ -49,7 +50,7 @@ class Log_Mgt:
def __CheckAvailSpace(self): def __CheckAvailSpace(self):
HOST=self.IPAddress HOST=self.Username+'@'+self.IPAddress
COMMAND="df "+ self.path COMMAND="df "+ self.path
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
result = ssh.stdout.readlines() result = ssh.stdout.readlines()
...@@ -58,7 +59,7 @@ class Log_Mgt: ...@@ -58,7 +59,7 @@ class Log_Mgt:
return tmp[3] #return avail space from the line return tmp[3] #return avail space from the line
def __GetOldestFile(self): def __GetOldestFile(self):
HOST=self.IPAddress HOST=self.Username+'@'+self.IPAddress
COMMAND="ls -rtl "+ self.path #-rtl will bring oldest file on top COMMAND="ls -rtl "+ self.path #-rtl will bring oldest file on top
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
result = ssh.stdout.readlines() result = ssh.stdout.readlines()
...@@ -68,16 +69,19 @@ class Log_Mgt: ...@@ -68,16 +69,19 @@ class Log_Mgt:
def __AvgSize(self): def __AvgSize(self):
HOST=self.IPAddress HOST=self.Username+'@'+self.IPAddress
COMMAND="ls -rtl "+ self.path COMMAND="ls -rtl "+ self.path
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
result = ssh.stdout.readlines() result = ssh.stdout.readlines()
if len(result)>1: #at least 1 file present
total_size=0 total_size=0
for i in range(1,len(result)): for i in range(1,len(result)):
s=result[i].decode('utf-8').rstrip() s=result[i].decode('utf-8').rstrip()
tmp=s.split() tmp=s.split()
total_size+=int(tmp[4]) #get filesize total_size+=int(tmp[4]) #get filesize
return math.floor(total_size/(len(result)-1)) #compute average file/artifact size return math.floor(total_size/(len(result)-1)) #compute average file/artifact size
else:#empty,no files
return 0
#-----------------$ #-----------------$
...@@ -91,7 +95,7 @@ class Log_Mgt: ...@@ -91,7 +95,7 @@ class Log_Mgt:
logging.debug("Avail Space : " + str(avail_space) + " / Artifact Avg Size : " + str(avg_size)) logging.debug("Avail Space : " + str(avail_space) + " / Artifact Avg Size : " + str(avg_size))
if avail_space < 2*avg_size: #reserved space is 2x artifact file ; oldest file will be deleted if avail_space < 2*avg_size: #reserved space is 2x artifact file ; oldest file will be deleted
oldestfile=self.__GetOldestFile() oldestfile=self.__GetOldestFile()
HOST=self.IPAddress HOST=self.Username+'@'+self.IPAddress
COMMAND="echo " + self.Password + " | sudo -S rm "+ self.path + "/" + oldestfile COMMAND="echo " + self.Password + " | sudo -S rm "+ self.path + "/" + oldestfile
logging.debug(COMMAND) logging.debug(COMMAND)
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
......
...@@ -62,7 +62,7 @@ class Module_UE: ...@@ -62,7 +62,7 @@ class Module_UE:
#this method checks if the specified Process is running on the server hosting the module #this method checks if the specified Process is running on the server hosting the module
#if not it will be started #if not it will be started
def CheckCMProcess(self): def CheckCMProcess(self):
HOST=self.HostIPAddress HOST=self.HostUsername+'@'+self.HostIPAddress
COMMAND="ps aux | grep " + self.Process['Name'] + " | grep -v grep " COMMAND="ps aux | grep " + self.Process['Name'] + " | grep -v grep "
logging.debug(COMMAND) logging.debug(COMMAND)
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
...@@ -80,7 +80,7 @@ class Module_UE: ...@@ -80,7 +80,7 @@ class Module_UE:
mySSH.close() mySSH.close()
#checking the process #checking the process
time.sleep(5) time.sleep(5)
HOST=self.HostIPAddress HOST=self.HostUsername+'@'+self.HostIPAddress
COMMAND="ps aux | grep " + self.Process['Name'] + " | grep -v grep " COMMAND="ps aux | grep " + self.Process['Name'] + " | grep -v grep "
logging.debug(COMMAND) logging.debug(COMMAND)
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
...@@ -104,7 +104,7 @@ class Module_UE: ...@@ -104,7 +104,7 @@ class Module_UE:
#this method retrieves the Module IP address (not the Host IP address) #this method retrieves the Module IP address (not the Host IP address)
def GetModuleIPAddress(self): def GetModuleIPAddress(self):
HOST=self.HostIPAddress HOST=self.HostUsername+'@'+self.HostIPAddress
response= [] response= []
tentative = 3 tentative = 3
while (len(response)==0) and (tentative>0): while (len(response)==0) and (tentative>0):
...@@ -163,12 +163,12 @@ class Module_UE: ...@@ -163,12 +163,12 @@ class Module_UE:
now=datetime.now() now=datetime.now()
now_string = now.strftime("%Y%m%d-%H%M") now_string = now.strftime("%Y%m%d-%H%M")
source='ci_qlog' source='ci_qlog'
destination='/media/usb-drive/ci_qlogs/ci_qlog_'+now_string+'.zip' destination= self.LogStore + '/ci_qlog_'+now_string+'.zip'
#qlog artifact is zipped into the target folder #qlog artifact is zipped into the target folder
mySSH.command('echo $USER; echo ' + self.HostPassword + ' | nohup sudo -S zip -r '+destination+' '+source+' &','\$', 10) mySSH.command('echo $USER; echo ' + self.HostPassword + ' | nohup sudo -S zip -r '+destination+' '+source+' &','\$', 10)
mySSH.close() mySSH.close()
#post action : log cleaning to make sure enough space is reserved for the next run #post action : log cleaning to make sure enough space is reserved for the next run
Log_Mgt=cls_log_mgt.Log_Mgt(self.HostIPAddress, self.HostPassword, "/media/usb-drive/ci_qlogs") Log_Mgt=cls_log_mgt.Log_Mgt(self.HostUsername,self.HostIPAddress, self.HostPassword, self.LogStore)
Log_Mgt.LogRotation() Log_Mgt.LogRotation()
else: else:
destination="" destination=""
......
...@@ -1536,8 +1536,13 @@ class OaiCiTest(): ...@@ -1536,8 +1536,13 @@ class OaiCiTest():
SSH.command('cat ' + EPC.SourceCodePath + '/scripts/ping_' + self.testCase_id + '_' + device_id + '.log', '\$', 5) SSH.command('cat ' + EPC.SourceCodePath + '/scripts/ping_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
else: #launch from Module else: #launch from Module
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword) SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
#target address is different depending on EPC type
if re.match('OAI-Rel14-Docker', EPC.Type, re.IGNORECASE):
Target = EPC.MmeIPAddress
else:
Target = EPC.IPAddress
#ping from module NIC rather than IP address to make sure round trip is over the air #ping from module NIC rather than IP address to make sure round trip is over the air
cmd = 'ping -I ' + Module_UE.UENetwork + ' ' + self.ping_args + ' ' + EPC.IPAddress + ' 2>&1 > ping_' + self.testCase_id + '_' + self.ue_id + '.log' cmd = 'ping -I ' + Module_UE.UENetwork + ' ' + self.ping_args + ' ' + Target + ' 2>&1 > ping_' + self.testCase_id + '_' + self.ue_id + '.log'
SSH.command(cmd,'\$',int(ping_time[0])*1.5) SSH.command(cmd,'\$',int(ping_time[0])*1.5)
#copy the ping log file to have it locally for analysis (ping stats) #copy the ping log file to have it locally for analysis (ping stats)
SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, 'ping_' + self.testCase_id + '_' + self.ue_id + '.log', '.') SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, 'ping_' + self.testCase_id + '_' + self.ue_id + '.log', '.')
......
...@@ -245,7 +245,7 @@ class PhySim: ...@@ -245,7 +245,7 @@ class PhySim:
isFinished = False isFinished = False
# doing a deep copy! # doing a deep copy!
tmpPodNames = podNames.copy() tmpPodNames = podNames.copy()
while(count < 28 and isFinished == False): while(count < 32 and isFinished == False):
time.sleep(60) time.sleep(60)
for podName in tmpPodNames: for podName in tmpPodNames:
mySSH.command2(f'oc logs --tail=1 {podName} 2>&1', 6, silent=True) mySSH.command2(f'oc logs --tail=1 {podName} 2>&1', 6, silent=True)
...@@ -257,6 +257,8 @@ class PhySim: ...@@ -257,6 +257,8 @@ class PhySim:
count += 1 count += 1
if isFinished: if isFinished:
logging.debug('\u001B[1m PhySim test is Complete\u001B[0m') logging.debug('\u001B[1m PhySim test is Complete\u001B[0m')
else:
logging.error('\u001B[1m PhySim test Timed-out!\u001B[0m')
# Getting the logs of each executables running in individual pods # Getting the logs of each executables running in individual pods
for podName in podNames: for podName in podNames:
...@@ -279,15 +281,18 @@ class PhySim: ...@@ -279,15 +281,18 @@ class PhySim:
mySSH.command('oc logout', '\$', 6) mySSH.command('oc logout', '\$', 6)
mySSH.close() mySSH.close()
self.AnalyzeLogFile_phySim(HTML) self.AnalyzeLogFile_phySim(HTML)
if self.testStatus: if self.testStatus and isFinished:
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult) HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult)
logging.info('\u001B[1m Physical Simulator Pass\u001B[0m') logging.info('\u001B[1m Physical Simulator Pass\u001B[0m')
else: else:
RAN.prematureExit = True RAN.prematureExit = True
if isFinished:
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
else:
HTML.CreateHtmlTestRow('Some test(s) timed-out!', 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult) HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult)
logging.info('\u001B[1m Physical Simulator Fail\u001B[0m') logging.error('\u001B[1m Physical Simulator Fail\u001B[0m')
def AnalyzeLogFile_phySim(self, HTML): def AnalyzeLogFile_phySim(self, HTML):
lIpAddr = self.eNBIPAddress lIpAddr = self.eNBIPAddress
......
This diff is collapsed.
This diff is collapsed.
...@@ -12,8 +12,8 @@ gNBs = ...@@ -12,8 +12,8 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values // Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1; tracking_area_code = 1;
plmn_list = ({ plmn_list = ({
mcc = 222; mcc = 208;
mnc = 01; mnc = 99;
mnc_length = 2; mnc_length = 2;
snssaiList = ( snssaiList = (
{ {
...@@ -252,11 +252,12 @@ RUs = ( ...@@ -252,11 +252,12 @@ RUs = (
att_rx = 0; att_rx = 0;
bands = [7]; bands = [7];
max_pdschReferenceSignalPower = -27; max_pdschReferenceSignalPower = -27;
max_rxgain = 114; max_rxgain = 81;
eNB_instances = [0]; eNB_instances = [0];
#beamforming 1x4 matrix: #beamforming 1x4 matrix:
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000]; bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
clock_src = "internal"; #clock_src = "external";
sdr_addrs = "mgmt_addr=192.168.18.240,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
} }
); );
......
...@@ -155,6 +155,11 @@ def GetParametersFromXML(action): ...@@ -155,6 +155,11 @@ def GetParametersFromXML(action):
RAN.eNB_Trace=test.findtext('eNB_Trace') RAN.eNB_Trace=test.findtext('eNB_Trace')
RAN.Initialize_eNB_args=test.findtext('Initialize_eNB_args') RAN.Initialize_eNB_args=test.findtext('Initialize_eNB_args')
eNB_instance=test.findtext('eNB_instance') eNB_instance=test.findtext('eNB_instance')
USRPIPAddress=test.findtext('USRP_IPAddress')
if USRPIPAddress is None:
RAN.USRPIPAddress=''
else:
RAN.USRPIPAddress=USRPIPAddress
if (eNB_instance is None): if (eNB_instance is None):
RAN.eNB_instance=0 RAN.eNB_instance=0
else: else:
......
...@@ -170,20 +170,20 @@ function setvar_usage { ...@@ -170,20 +170,20 @@ function setvar_usage {
# for compatibility reasons # for compatibility reasons
function variant__v1__enb_usrp { function variant__v1__enb_usrp {
NB_PATTERN_FILES=9 NB_PATTERN_FILES=7
BUILD_OPTIONS="--eNB -w USRP --mu" BUILD_OPTIONS="--eNB -w USRP --mu"
VM_MEMORY=3072 VM_MEMORY=3072
} }
function variant__v2__basic_sim { function variant__v2__basic_sim {
NB_PATTERN_FILES=13 NB_PATTERN_FILES=11
BUILD_OPTIONS="--eNB --UE" BUILD_OPTIONS="--eNB --UE"
VM_MEMORY=8192 VM_MEMORY=8192
RUN_OPTIONS="complex" RUN_OPTIONS="complex"
} }
function variant__v3__phy_sim { function variant__v3__phy_sim {
NB_PATTERN_FILES=13 NB_PATTERN_FILES=11
BUILD_OPTIONS="--phy_simulators" BUILD_OPTIONS="--phy_simulators"
VM_MEMORY=8192 VM_MEMORY=8192
VM_DISK=20 VM_DISK=20
...@@ -200,28 +200,28 @@ function variant__v4__cppcheck { ...@@ -200,28 +200,28 @@ function variant__v4__cppcheck {
function variant__v5__gnb_usrp { function variant__v5__gnb_usrp {
VM_MEMORY=10240 VM_MEMORY=10240
VM_CPU=8 VM_CPU=8
NB_PATTERN_FILES=9 NB_PATTERN_FILES=7
BUILD_OPTIONS="--gNB -w USRP" BUILD_OPTIONS="--gNB -w USRP"
} }
function variant__v6__nr_ue_usrp { function variant__v6__nr_ue_usrp {
VM_MEMORY=4096 VM_MEMORY=4096
VM_CPU=4 VM_CPU=4
NB_PATTERN_FILES=9 NB_PATTERN_FILES=7
BUILD_OPTIONS="--nrUE -w USRP" BUILD_OPTIONS="--nrUE -w USRP"
} }
function variant__v7__enb_ethernet { function variant__v7__enb_ethernet {
VM_MEMORY=4096 VM_MEMORY=4096
ARCHIVES_LOC=enb_eth ARCHIVES_LOC=enb_eth
NB_PATTERN_FILES=9 NB_PATTERN_FILES=7
BUILD_OPTIONS="--eNB -w USRP" BUILD_OPTIONS="--eNB -w USRP"
} }
function variant__v8__ue_ethernet { function variant__v8__ue_ethernet {
VM_MEMORY=4096 VM_MEMORY=4096
ARCHIVES_LOC=ue_eth ARCHIVES_LOC=ue_eth
NB_PATTERN_FILES=13 NB_PATTERN_FILES=11
BUILD_OPTIONS="--UE -w USRP" BUILD_OPTIONS="--UE -w USRP"
} }
...@@ -247,6 +247,11 @@ function variant__v22__l2_sim { ...@@ -247,6 +247,11 @@ function variant__v22__l2_sim {
RUN_OPTIONS="complex" RUN_OPTIONS="complex"
} }
function variant__v23__rf5g_sim {
ARCHIVES_LOC=rf5g_sim
RUN_OPTIONS="complex"
}
# Following function lists all variant__v<n>__<variant name> functions # Following function lists all variant__v<n>__<variant name> functions
# and set the VARIANTS_SHORT and VARIANTS_LONG arrays from # and set the VARIANTS_SHORT and VARIANTS_LONG arrays from
# the function names # the function names
......
...@@ -94,6 +94,7 @@ class RANManagement(): ...@@ -94,6 +94,7 @@ class RANManagement():
self.runtime_stats= '' self.runtime_stats= ''
self.datalog_rt_stats={} self.datalog_rt_stats={}
self.eNB_Trace = '' #if 'yes', Tshark will be launched at initialization self.eNB_Trace = '' #if 'yes', Tshark will be launched at initialization
self.USRPIPAddress = ''
...@@ -341,20 +342,35 @@ class RANManagement(): ...@@ -341,20 +342,35 @@ class RANManagement():
self.testCase_id = HTML.testCase_id self.testCase_id = HTML.testCase_id
mySSH = SSH.SSHConnection() mySSH = SSH.SSHConnection()
#reboot USRP if requested in xml
if self.USRPIPAddress!='':
logging.debug('USRP '+ self.USRPIPAddress +'reboot request')
mySSH.open(lIpAddr, lUserName, lPassWord)
cmd2usrp='ssh root@'+self.USRPIPAddress+' reboot'
mySSH.command2(cmd2usrp,1)
mySSH.close()
logging.debug('Waiting for USRP to be ready')
time.sleep(120)
if (self.pStatus < 0): if (self.pStatus < 0):
HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' ' + self.Initialize_eNB_args, 'KO', self.pStatus) HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' ' + self.Initialize_eNB_args, 'KO', self.pStatus)
HTML.CreateHtmlTabFooter(False) HTML.CreateHtmlTabFooter(False)
sys.exit(1) sys.exit(1)
#Get pcap on S1 and X2 eNB interface, if enabled in the xml
#will not work for gNB at this stage #Get pcap on enb and/or gnb if enabled in the xml
if ((self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb')) and self.eNB_Trace=='yes': if self.eNB_Trace=='yes':
if ((self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb')):
pcapfile_prefix="enb_"
else:
pcapfile_prefix="gnb_"
mySSH.open(lIpAddr, lUserName, lPassWord) mySSH.open(lIpAddr, lUserName, lPassWord)
mySSH.command('ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"', '\$', 5) mySSH.command('ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"', '\$', 5)
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore()) result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
if result is not None: if result is not None:
eth_interface = result.group('eth_interface') eth_interface = result.group('eth_interface')
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + '\u001B[0m') logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + '\u001B[0m')
pcapfile = 'enb_' + self.testCase_id + '_s1x2log.pcap' pcapfile = pcapfile_prefix + self.testCase_id + '_log.pcap'
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -f /tmp/' + pcapfile , '\$', 5) mySSH.command('echo ' + lPassWord + ' | sudo -S rm -f /tmp/' + pcapfile , '\$', 5)
mySSH.command('echo $USER; nohup sudo -E tshark -i ' + eth_interface + ' -w /tmp/' + pcapfile + ' 2>&1 &','\$', 5) mySSH.command('echo $USER; nohup sudo -E tshark -i ' + eth_interface + ' -w /tmp/' + pcapfile + ' 2>&1 &','\$', 5)
mySSH.close() mySSH.close()
...@@ -672,10 +688,11 @@ class RANManagement(): ...@@ -672,10 +688,11 @@ class RANManagement():
mySSH.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword) mySSH.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
mySSH.command('cd ' + self.eNBSourceCodePath, '\$', 5) mySSH.command('cd ' + self.eNBSourceCodePath, '\$', 5)
mySSH.command('cd cmake_targets', '\$', 5) mySSH.command('cd cmake_targets', '\$', 5)
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/enb_*_s1x2log.pcap .','\$',20) 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 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 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', '\$', 60)
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap enb_*txt physim_*.log *stats.log', '\$', 5) 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() mySSH.close()
def AnalyzeLogFile_eNB(self, eNBlogFile, HTML): def AnalyzeLogFile_eNB(self, eNBlogFile, HTML):
...@@ -922,6 +939,7 @@ class RANManagement(): ...@@ -922,6 +939,7 @@ class RANManagement():
#remove 1- all useless char before relevant info 2- trailing char #remove 1- all useless char before relevant info 2- trailing char
line=line.replace('[0m','') line=line.replace('[0m','')
tmp=re.match(rf'^.*?(\b{k}\b.*)',line.rstrip()) #from python 3.6 we can use literal string interpolation for the variable k, using rf' in the regex tmp=re.match(rf'^.*?(\b{k}\b.*)',line.rstrip()) #from python 3.6 we can use literal string interpolation for the variable k, using rf' in the regex
if tmp!=None: #with ULULULUULULULLLL at the head of the line, we skip it
real_time_stats[k]=tmp.group(1) real_time_stats[k]=tmp.group(1)
#count "problem receiving samples" msg #count "problem receiving samples" msg
......
...@@ -576,8 +576,6 @@ function report_build { ...@@ -576,8 +576,6 @@ function report_build {
summary_table_row "RF Simulator - Release 15" ./archives/enb_eth/rfsimulator.Rel15.txt "Built target rfsimulator" ./enb_eth_row5.html summary_table_row "RF Simulator - Release 15" ./archives/enb_eth/rfsimulator.Rel15.txt "Built target rfsimulator" ./enb_eth_row5.html
summary_table_row "TCP OAI Bridge - Release 15" ./archives/enb_eth/tcp_bridge_oai.Rel15.txt "Built target tcp_bridge_oai" ./enb_eth_row6.html summary_table_row "TCP OAI Bridge - Release 15" ./archives/enb_eth/tcp_bridge_oai.Rel15.txt "Built target tcp_bridge_oai" ./enb_eth_row6.html
summary_table_row "OAI USRP device if - Release 15" ./archives/enb_eth/oai_usrpdevif.Rel15.txt "Built target oai_usrpdevif" ./enb_eth_row7.html summary_table_row "OAI USRP device if - Release 15" ./archives/enb_eth/oai_usrpdevif.Rel15.txt "Built target oai_usrpdevif" ./enb_eth_row7.html
summary_table_row "NASMESH - Release 15" ./archives/enb_eth/nasmesh.Rel15.txt "Built target nasmesh" ./enb_eth_row8.html
summary_table_row "RB Tool - Release 15" ./archives/enb_eth/rb_tool.Rel15.txt "Built target rb_tool" ./enb_eth_row9.html
summary_table_footer summary_table_footer
summary_table_header "OAI Build: 4G LTE UE -- USRP option" ./archives/ue_eth summary_table_header "OAI Build: 4G LTE UE -- USRP option" ./archives/ue_eth
...@@ -600,9 +598,7 @@ function report_build { ...@@ -600,9 +598,7 @@ function report_build {
summary_table_row "Coding - Release 15" ./archives/basic_sim/coding.Rel15.txt "Built target coding" ./basic_sim_row3.html summary_table_row "Coding - Release 15" ./archives/basic_sim/coding.Rel15.txt "Built target coding" ./basic_sim_row3.html
summary_table_row "Conf 2 UE data - Release 15" ./archives/basic_sim/conf2uedata.Rel15.txt "Built target conf2uedata" ./basic_sim_row4.html summary_table_row "Conf 2 UE data - Release 15" ./archives/basic_sim/conf2uedata.Rel15.txt "Built target conf2uedata" ./basic_sim_row4.html
summary_table_row "OAI ETHERNET transport - Release 15" ./archives/basic_sim/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./basic_sim_row5.html summary_table_row "OAI ETHERNET transport - Release 15" ./archives/basic_sim/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./basic_sim_row5.html
summary_table_row "NASMESH - Release 15" ./archives/basic_sim/nasmesh.Rel15.txt "Built target nasmesh" ./basic_sim_row6.html
summary_table_row "Parameters Lib Config - Release 15" ./archives/basic_sim/params_libconfig.Rel15.txt "Built target params_libconfig" ./basic_sim_row7.html summary_table_row "Parameters Lib Config - Release 15" ./archives/basic_sim/params_libconfig.Rel15.txt "Built target params_libconfig" ./basic_sim_row7.html
summary_table_row "RB Tool - Release 15" ./archives/basic_sim/rb_tool.Rel15.txt "Built target rb_tool" ./basic_sim_row8.html
summary_table_row "RF Simulator - Release 15" ./archives/basic_sim/rfsimulator.Rel15.txt "Built target rfsimulator" ./basic_sim_row9.html summary_table_row "RF Simulator - Release 15" ./archives/basic_sim/rfsimulator.Rel15.txt "Built target rfsimulator" ./basic_sim_row9.html
summary_table_row "TCP Bridge - Release 15" ./archives/basic_sim/tcp_bridge_oai.Rel15.txt "Built target tcp_bridge_oai" ./basic_sim_row10.html summary_table_row "TCP Bridge - Release 15" ./archives/basic_sim/tcp_bridge_oai.Rel15.txt "Built target tcp_bridge_oai" ./basic_sim_row10.html
summary_table_row "UE IP - Release 15" ./archives/basic_sim/ue_ip.Rel15.txt "Built target ue_ip" ./basic_sim_row11.html summary_table_row "UE IP - Release 15" ./archives/basic_sim/ue_ip.Rel15.txt "Built target ue_ip" ./basic_sim_row11.html
...@@ -617,9 +613,7 @@ function report_build { ...@@ -617,9 +613,7 @@ function report_build {
summary_table_row "Coding - Release 15" ./archives/gnb_usrp/coding.Rel15.txt "Built target coding" ./gnb_usrp_row2.html summary_table_row "Coding - Release 15" ./archives/gnb_usrp/coding.Rel15.txt "Built target coding" ./gnb_usrp_row2.html
summary_table_row "OAI USRP device if - Release 15" ./archives/gnb_usrp/oai_usrpdevif.Rel15.txt "Built target oai_usrpdevif" ./gnb_usrp_row3.html summary_table_row "OAI USRP device if - Release 15" ./archives/gnb_usrp/oai_usrpdevif.Rel15.txt "Built target oai_usrpdevif" ./gnb_usrp_row3.html
summary_table_row "OAI ETHERNET transport - Release 15" ./archives/gnb_usrp/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./gnb_usrp_row4.html summary_table_row "OAI ETHERNET transport - Release 15" ./archives/gnb_usrp/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./gnb_usrp_row4.html
summary_table_row "NASMESH - Release 15" ./archives/gnb_usrp/nasmesh.Rel15.txt "Built target nasmesh" ./gnb_usrp_row5.html
summary_table_row "Parameters Lib Config - Release 15" ./archives/gnb_usrp/params_libconfig.Rel15.txt "Built target params_libconfig" ./gnb_usrp_row6.html summary_table_row "Parameters Lib Config - Release 15" ./archives/gnb_usrp/params_libconfig.Rel15.txt "Built target params_libconfig" ./gnb_usrp_row6.html
summary_table_row "RB Tool - Release 15" ./archives/gnb_usrp/rb_tool.Rel15.txt "Built target rb_tool" ./gnb_usrp_row7.html
summary_table_footer summary_table_footer
fi fi
...@@ -630,9 +624,7 @@ function report_build { ...@@ -630,9 +624,7 @@ function report_build {
summary_table_row "Coding - Release 15" ./archives/nr_ue_usrp/coding.Rel15.txt "Built target coding" ./nr_ue_usrp_row2.html summary_table_row "Coding - Release 15" ./archives/nr_ue_usrp/coding.Rel15.txt "Built target coding" ./nr_ue_usrp_row2.html
summary_table_row "OAI USRP device if - Release 15" ./archives/nr_ue_usrp/oai_usrpdevif.Rel15.txt "Built target oai_usrpdevif" ./nr_ue_usrp_row3.html summary_table_row "OAI USRP device if - Release 15" ./archives/nr_ue_usrp/oai_usrpdevif.Rel15.txt "Built target oai_usrpdevif" ./nr_ue_usrp_row3.html
summary_table_row "OAI ETHERNET transport - Release 15" ./archives/nr_ue_usrp/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./nr_ue_usrp_row4.html summary_table_row "OAI ETHERNET transport - Release 15" ./archives/nr_ue_usrp/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./nr_ue_usrp_row4.html
summary_table_row "NASMESH - Release 15" ./archives/nr_ue_usrp/nasmesh.Rel15.txt "Built target nasmesh" ./nr_ue_usrp_row5.html
summary_table_row "Parameters Lib Config - Release 15" ./archives/nr_ue_usrp/params_libconfig.Rel15.txt "Built target params_libconfig" ./nr_ue_usrp_row6.html summary_table_row "Parameters Lib Config - Release 15" ./archives/nr_ue_usrp/params_libconfig.Rel15.txt "Built target params_libconfig" ./nr_ue_usrp_row6.html
summary_table_row "RB Tool - Release 15" ./archives/nr_ue_usrp/rb_tool.Rel15.txt "Built target rb_tool" ./nr_ue_usrp_row7.html
summary_table_footer summary_table_footer
fi fi
...@@ -652,7 +644,7 @@ function report_build { ...@@ -652,7 +644,7 @@ function report_build {
echo " <button data-toggle=\"collapse\" data-target=\"#oai-compilation-details\">Details for Compilation Errors and Warnings </button>" >> ./build_results.html echo " <button data-toggle=\"collapse\" data-target=\"#oai-compilation-details\">Details for Compilation Errors and Warnings </button>" >> ./build_results.html
echo " <div id=\"oai-compilation-details\" class=\"collapse\">" >> ./build_results.html echo " <div id=\"oai-compilation-details\" class=\"collapse\">" >> ./build_results.html
if [ -f ./enb_eth_row1.html ] || [ -f ./enb_eth_row2.html ] || [ -f ./enb_eth_row3.html ] || [ -f ./enb_eth_row4.html ] || [ -f ./enb_eth_row5.html ] || [ -f ./enb_eth_row6.html ] || [ -f ./enb_eth_row7.html ] || [ -f ./enb_eth_row8.html ] || [ -f ./enb_eth_row9.html ] if [ -f ./enb_eth_row1.html ] || [ -f ./enb_eth_row2.html ] || [ -f ./enb_eth_row3.html ] || [ -f ./enb_eth_row4.html ] || [ -f ./enb_eth_row5.html ] || [ -f ./enb_eth_row6.html ] || [ -f ./enb_eth_row7.html ]
then then
for DETAILS_TABLE in `ls ./enb_eth_row*.html` for DETAILS_TABLE in `ls ./enb_eth_row*.html`
do do
......
...@@ -717,7 +717,11 @@ function report_test { ...@@ -717,7 +717,11 @@ function report_test {
done done
echo " </table>" >> ./test_simulator_results.html echo " </table>" >> ./test_simulator_results.html
echo " </div>" >> ./test_simulator_results.html echo " </div>" >> ./test_simulator_results.html
fi
ARCHIVES_LOC=archives/rf5g_sim/test
if [ -d $ARCHIVES_LOC ]
then
echo " <h3>5G NR RF Simulator Check</h3>" >> ./test_simulator_results.html echo " <h3>5G NR RF Simulator Check</h3>" >> ./test_simulator_results.html
if [ -f $ARCHIVES_LOC/test_final_status.log ] if [ -f $ARCHIVES_LOC/test_final_status.log ]
...@@ -762,9 +766,9 @@ function report_test { ...@@ -762,9 +766,9 @@ function report_test {
echo " <tr bgcolor = \"#8FBC8F\" >" >> ./test_simulator_results.html echo " <tr bgcolor = \"#8FBC8F\" >" >> ./test_simulator_results.html
if [[ $CN_CONFIG =~ .*wS1.* ]] if [[ $CN_CONFIG =~ .*wS1.* ]]
then then
echo " <td align = \"center\" colspan = 4 >Test with EPC (aka withS1): ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html echo " <td align = \"center\" colspan = 4 >Test with CN5G : ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html
else else
echo " <td align = \"center\" colspan = 4 >Test without EPC (aka noS1): ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html echo " <td align = \"center\" colspan = 4 >Test without CN5G : ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html
fi fi
echo " </tr>" >> ./test_simulator_results.html echo " </tr>" >> ./test_simulator_results.html
...@@ -837,9 +841,9 @@ function report_test { ...@@ -837,9 +841,9 @@ function report_test {
echo " <tr bgcolor = \"#8FBC8F\" >" >> ./test_simulator_results.html echo " <tr bgcolor = \"#8FBC8F\" >" >> ./test_simulator_results.html
if [[ $CN_CONFIG =~ .*wS1.* ]] if [[ $CN_CONFIG =~ .*wS1.* ]]
then then
echo " <td align = \"center\" colspan = 4 >Test with EPC (aka withS1): ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html echo " <td align = \"center\" colspan = 4 >Test with CN5G : ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html
else else
echo " <td align = \"center\" colspan = 4 >Test without EPC (aka noS1): ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html echo " <td align = \"center\" colspan = 4 >Test without CN5G : ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html
fi fi
echo " </tr>" >> ./test_simulator_results.html echo " </tr>" >> ./test_simulator_results.html
...@@ -907,9 +911,9 @@ function report_test { ...@@ -907,9 +911,9 @@ function report_test {
echo " <tr bgcolor = \"#8FBC8F\" >" >> ./test_simulator_results.html echo " <tr bgcolor = \"#8FBC8F\" >" >> ./test_simulator_results.html
if [[ $CN_CONFIG =~ .*wS1.* ]] if [[ $CN_CONFIG =~ .*wS1.* ]]
then then
echo " <td align = \"center\" colspan = 4 >Test with EPC (aka withS1): ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html echo " <td align = \"center\" colspan = 4 >Test with CN5G : ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html
else else
echo " <td align = \"center\" colspan = 4 >Test without EPC (aka noS1): ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html echo " <td align = \"center\" colspan = 4 >Test without CN5G : ${TMODE} -- ${BW}PRB -- ${FR_MODE}</td>" >> ./test_simulator_results.html
fi fi
echo " </tr>" >> ./test_simulator_results.html echo " </tr>" >> ./test_simulator_results.html
......
...@@ -1355,8 +1355,11 @@ function start_rf_sim_gnb { ...@@ -1355,8 +1355,11 @@ function start_rf_sim_gnb {
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR < $1 ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR < $1
rm $1 rm $1
# Copy the RAW files from the gNB run for the NR-UE # Copy the RAW files from the gNB run for the NR-UE
if [ $LOC_RA_SA_TEST -ne 2 ]
then
scp -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/ran_build/build/rbconfig.raw . scp -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/ran_build/build/rbconfig.raw .
scp -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/ran_build/build/reconfig.raw . scp -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/ran_build/build/reconfig.raw .
fi
} }
function start_rf_sim_nr_ue { function start_rf_sim_nr_ue {
...@@ -1371,8 +1374,11 @@ function start_rf_sim_nr_ue { ...@@ -1371,8 +1374,11 @@ function start_rf_sim_nr_ue {
local LOC_RA_SA_TEST=$8 local LOC_RA_SA_TEST=$8
# Copy the RAW files from the gNB run # Copy the RAW files from the gNB run
if [ $LOC_RA_SA_TEST -ne 2 ]
then
scp -o StrictHostKeyChecking=no rbconfig.raw ubuntu@$LOC_NR_UE_VM_IP_ADDR:/home/ubuntu/tmp scp -o StrictHostKeyChecking=no rbconfig.raw ubuntu@$LOC_NR_UE_VM_IP_ADDR:/home/ubuntu/tmp
scp -o StrictHostKeyChecking=no reconfig.raw ubuntu@$LOC_NR_UE_VM_IP_ADDR:/home/ubuntu/tmp scp -o StrictHostKeyChecking=no reconfig.raw ubuntu@$LOC_NR_UE_VM_IP_ADDR:/home/ubuntu/tmp
fi
echo "echo \"sudo apt-get --yes --quiet install daemon \"" > $1 echo "echo \"sudo apt-get --yes --quiet install daemon \"" > $1
echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1 echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
...@@ -1380,8 +1386,12 @@ function start_rf_sim_nr_ue { ...@@ -1380,8 +1386,12 @@ function start_rf_sim_nr_ue {
echo "export RFSIMULATOR=${LOC_GNB_VM_IP_ADDR}" >> $1 echo "export RFSIMULATOR=${LOC_GNB_VM_IP_ADDR}" >> $1
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/ran_build/build/\"" >> $1 echo "echo \"cd /home/ubuntu/tmp/cmake_targets/ran_build/build/\"" >> $1
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1 echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
echo "sudo rm -f /home/ubuntu/tmp/cmake_targets/ran_build/build/r*config.raw" >> $1
if [ $LOC_RA_SA_TEST -ne 2 ]
then
echo "sudo cp /home/ubuntu/tmp/r*config.raw /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1 echo "sudo cp /home/ubuntu/tmp/r*config.raw /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
echo "sudo chmod 666 /home/ubuntu/tmp/cmake_targets/ran_build/build/r*config.raw" >> $1 echo "sudo chmod 666 /home/ubuntu/tmp/cmake_targets/ran_build/build/r*config.raw" >> $1
fi
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1 echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
if [ $LOC_S1_CONFIGURATION -eq 0 ] if [ $LOC_S1_CONFIGURATION -eq 0 ]
then then
...@@ -1472,11 +1482,13 @@ function run_test_on_vm { ...@@ -1472,11 +1482,13 @@ function run_test_on_vm {
UE_VM_CMDS=${UE_VM_NAME}_cmds.txt UE_VM_CMDS=${UE_VM_NAME}_cmds.txt
echo "UE_VM_NAME = $UE_VM_NAME" echo "UE_VM_NAME = $UE_VM_NAME"
echo "UE_VM_CMD_FILE = $UE_VM_CMDS" echo "UE_VM_CMD_FILE = $UE_VM_CMDS"
GNB_VM_NAME=`echo $VM_NAME | sed -e "s#l2-sim#gnb-usrp#" -e "s#rf-sim#gnb-usrp#"` elif [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-rf5g-sim.* )) ]]
then
GNB_VM_NAME=`echo $VM_NAME | sed -e "s#rf5g-sim#gnb-usrp#"`
GNB_VM_CMDS=${GNB_VM_NAME}_cmds.txt GNB_VM_CMDS=${GNB_VM_NAME}_cmds.txt
echo "GNB_VM_NAME = $GNB_VM_NAME" echo "GNB_VM_NAME = $GNB_VM_NAME"
echo "GNB_VM_CMD_FILE = $GNB_VM_CMDS" echo "GNB_VM_CMD_FILE = $GNB_VM_CMDS"
NR_UE_VM_NAME=`echo $VM_NAME | sed -e "s#l2-sim#nr-ue-usrp#" -e "s#rf-sim#nr-ue-usrp#"` NR_UE_VM_NAME=`echo $VM_NAME | sed -e "s#rf5g-sim#nr-ue-usrp#"`
NR_UE_VM_CMDS=${UE_VM_NAME}_cmds.txt NR_UE_VM_CMDS=${UE_VM_NAME}_cmds.txt
echo "NR_UE_VM_NAME = $NR_UE_VM_NAME" echo "NR_UE_VM_NAME = $NR_UE_VM_NAME"
echo "NR_UE_VM_CMD_FILE = $NR_UE_VM_CMDS" echo "NR_UE_VM_CMD_FILE = $NR_UE_VM_CMDS"
...@@ -1505,6 +1517,8 @@ function run_test_on_vm { ...@@ -1505,6 +1517,8 @@ function run_test_on_vm {
UE_VM_IP_ADDR=`uvt-kvm ip $UE_VM_NAME` UE_VM_IP_ADDR=`uvt-kvm ip $UE_VM_NAME`
echo "$UE_VM_NAME has for IP addr = $UE_VM_IP_ADDR" echo "$UE_VM_NAME has for IP addr = $UE_VM_IP_ADDR"
elif [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-rf5g-sim.* )) ]]
then
echo "############################################################" echo "############################################################"
echo "Waiting for GNB VM to be started" echo "Waiting for GNB VM to be started"
echo "############################################################" echo "############################################################"
...@@ -2239,14 +2253,23 @@ function run_test_on_vm { ...@@ -2239,14 +2253,23 @@ function run_test_on_vm {
fi fi
if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-rf-sim.* ]] if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-rf5g-sim.* ]]
then
PING_STATUS=0
IPERF_STATUS=0
NR_STATUS=0
if [ -d $ARCHIVES_LOC ]
then then
rm -Rf $ARCHIVES_LOC
fi
mkdir --parents $ARCHIVES_LOC
echo "############################################################" echo "############################################################"
echo "SA TEST" echo "SA TEST"
echo "############################################################" echo "############################################################"
#SA test, attention : has a different config file from the rest of the test #SA test, attention : has a different config file from the rest of the test
CN_CONFIG="noS1" CN_CONFIG="noS1"
CONF_FILE=gnb.band78.sa.fr1.106PRB.usrpb210.conf CONF_FILE=gnb.band78.sa.fr1.106PRB.usrpn310.conf
S1_NOS1_CFG=0 S1_NOS1_CFG=0
PRB=106 PRB=106
FREQUENCY=3510 FREQUENCY=3510
...@@ -2257,7 +2280,6 @@ function run_test_on_vm { ...@@ -2257,7 +2280,6 @@ function run_test_on_vm {
fi fi
local try_cnt=0 local try_cnt=0
NR_STATUS=0
######### start of SA TEST loop ######### start of SA TEST loop
while [ $try_cnt -lt 5 ] #5 because it hardly succeed within CI while [ $try_cnt -lt 5 ] #5 because it hardly succeed within CI
...@@ -2314,6 +2336,7 @@ function run_test_on_vm { ...@@ -2314,6 +2336,7 @@ function run_test_on_vm {
echo "try_cnt = " $try_cnt echo "try_cnt = " $try_cnt
try_cnt=$((try_cnt+1)) try_cnt=$((try_cnt+1))
else else
echo "SA test OK"
try_cnt=$((try_cnt+10)) try_cnt=$((try_cnt+10))
fi fi
done done
...@@ -2339,14 +2362,14 @@ function run_test_on_vm { ...@@ -2339,14 +2362,14 @@ function run_test_on_vm {
fi fi
local try_cnt=0 local try_cnt=0
NR_STATUS=0
######### start of RA TEST loop ######### start of RA TEST loop
RA_FR2_STATUS=0
while [ $try_cnt -lt 5 ] #5 because it hardly succeed within CI while [ $try_cnt -lt 5 ] #5 because it hardly succeed within CI
do do
SYNC_STATUS=0 SYNC_STATUS=0
RA_FR2_STATUS=0 RA_STATUS=0
rm -f $ARCHIVES_LOC/tdd_${PRB}prb_${CN_CONFIG}*ra_fr2_test.log rm -f $ARCHIVES_LOC/tdd_${PRB}prb_${CN_CONFIG}*ra_fr2_test.log
echo "############################################################" echo "############################################################"
...@@ -2390,12 +2413,15 @@ function run_test_on_vm { ...@@ -2390,12 +2413,15 @@ function run_test_on_vm {
# Proper check to be done when RA test is working! # Proper check to be done when RA test is working!
check_ra_result $ARCHIVES_LOC/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/$CURRENT_NR_UE_LOG_FILE check_ra_result $ARCHIVES_LOC/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/$CURRENT_NR_UE_LOG_FILE
if [ $RA_FR2_STATUS -ne 0 ] if [ $RA_STATUS -ne 0 ]
then then
echo "RA FR2 test NOT OK" echo "RA FR2 test NOT OK"
echo "try_cnt = " $try_cnt echo "try_cnt = " $try_cnt
try_cnt=$((try_cnt+1)) try_cnt=$((try_cnt+1))
RA_FR2_STATUS=-1
else else
echo "RA FR2 test OK"
RA_FR2_STATUS=0
try_cnt=$((try_cnt+10)) try_cnt=$((try_cnt+10))
fi fi
done done
...@@ -2439,8 +2465,8 @@ function run_test_on_vm { ...@@ -2439,8 +2465,8 @@ function run_test_on_vm {
FREQUENCY=3510 FREQUENCY=3510
fi fi
RA_FR1_STATUS=0
local try_cnt=0 local try_cnt=0
NR_STATUS=0
while [ $try_cnt -lt 5 ] #5 because it hardly succeed within CI while [ $try_cnt -lt 5 ] #5 because it hardly succeed within CI
do do
...@@ -2493,8 +2519,11 @@ function run_test_on_vm { ...@@ -2493,8 +2519,11 @@ function run_test_on_vm {
then then
echo "RA FR1 test NOT OK" echo "RA FR1 test NOT OK"
echo "try_cnt = " $try_cnt echo "try_cnt = " $try_cnt
RA_FR1_STATUS=-1
try_cnt=$((try_cnt+1)) try_cnt=$((try_cnt+1))
else else
echo "RA FR1 test OK"
RA_FR1_STATUS=0
try_cnt=$((try_cnt+10)) try_cnt=$((try_cnt+10))
fi fi
done done
...@@ -2629,17 +2658,17 @@ function run_test_on_vm { ...@@ -2629,17 +2658,17 @@ function run_test_on_vm {
if [ $SA_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $SA_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $RA_FR2_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $RA_FR2_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $RA_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $RA_FR1_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $SYNC_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $SYNC_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $PING_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $PING_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $NR_STATUS -eq 0 ] if [ $NR_STATUS -eq 0 ]
then then
echo "5G-NR RFSIM seems OK" echo "5G-NR RFSIM seems OK"
echo "5G-NR: TEST_OK" >> $ARCHIVES_LOC/test_final_status.log echo "5G-NR: TEST_OK" > $ARCHIVES_LOC/test_final_status.log
else else
echo "5G-NR RFSIM seems to FAIL" echo "5G-NR RFSIM seems to FAIL"
echo "5G-NR: TEST_KO" >> $ARCHIVES_LOC/test_final_status.log echo "5G-NR: TEST_KO" > $ARCHIVES_LOC/test_final_status.log
STATUS=-1 STATUS=-1
fi fi
fi fi
......
<!--
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 gNB</desc>
<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>
<testCase id="000002">
<class>WaitEndBuild_eNB</class>
<desc>Wait for end of Build gNB</desc>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
</testCaseList>
<!--
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</htmlTabRef>
<htmlTabName>NSA Ping DL UL with QUECTEL</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
030000
040000
000002
010000
000001
050000
000001
010002
080001
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</Initialize_eNB_args>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
<air_interface>lte</air_interface>
<eNB_Trace>yes</eNB_Trace>
<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
</testCase>
<testCase id="040000">
<class>Initialize_eNB</class>
<desc>Initialize gNB</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf -q</Initialize_eNB_args>
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
<air_interface>nr</air_interface>
<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>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>
</testCase>
<testCase id="070000">
<class>Iperf</class>
<desc>iperf (DL/20Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 20M -t 60</iperf_args>
<direction>DL</direction>
<id>nrmodule2_quectel</id>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="070001">
<class>Iperf</class>
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 3M -t 60</iperf_args>
<direction>UL</direction>
<id>nrmodule2_quectel</id>
<iperf_packetloss_threshold>50</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>
<!--
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-TM1</htmlTabRef>
<htmlTabName>SA Ping DL UL with QUECTEL</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount>
<TestCaseRequestedList>
040000
000002
010000
000001
050000
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.usrpn310.conf --sa -q</Initialize_eNB_args>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
<air_interface>nr</air_interface>
<eNB_Trace>yes</eNB_Trace>
<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>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>
</testCase>
<testCase id="070000">
<class>Iperf</class>
<desc>iperf (DL/20Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 20M -t 60</iperf_args>
<direction>DL</direction>
<id>nrmodule2_quectel</id>
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
<iperf_profile>single-ue</iperf_profile>
</testCase>
<testCase id="070001">
<class>Iperf</class>
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
<iperf_args>-u -b 3M -t 60</iperf_args>
<direction>UL</direction>
<id>nrmodule2_quectel</id>
<iperf_packetloss_threshold>50</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>
...@@ -40,18 +40,19 @@ services: ...@@ -40,18 +40,19 @@ services:
private_net: private_net:
ipv4_address: 192.168.68.3 ipv4_address: 192.168.68.3
public_net: public_net:
ipv4_address: 192.168.61.2 ipv4_address: 192.168.61.194
environment: environment:
TZ: Europe/Paris
REALM: openairinterface.org REALM: openairinterface.org
HSS_FQDN: hss.openairinterface.org HSS_FQDN: hss.openairinterface.org
PREFIX: /openair-hss/etc PREFIX: /openair-hss/etc
cassandra_Server_IP: 192.168.68.2 cassandra_Server_IP: 192.168.68.2
OP_KEY: 1006020f0a478bf6b699f15c062e42b3 OP_KEY: 1006020f0a478bf6b699f15c062e42b3
LTE_K: fec86ba6eb707ed08905757b1bb44b8f LTE_K: FEC86BA6EB707ED08905757B1BB44B8F
APN1: oai.ipv4 APN1: oai.ipv4
APN2: internet APN2: oai2.ipv4
FIRST_IMSI: 222010100001120 FIRST_IMSI: 208990100001127
NB_USERS: 10 NB_USERS: 5
healthcheck: healthcheck:
test: /bin/bash -c "pgrep oai_hss" test: /bin/bash -c "pgrep oai_hss"
interval: 10s interval: 10s
...@@ -65,45 +66,46 @@ services: ...@@ -65,45 +66,46 @@ services:
depends_on: [oai_hss] depends_on: [oai_hss]
networks: networks:
public_net: public_net:
ipv4_address: 192.168.61.3 ipv4_address: 192.168.61.195
environment: environment:
TZ: Europe/Paris
REALM: openairinterface.org REALM: openairinterface.org
PREFIX: /openair-mme/etc PREFIX: /openair-mme/etc
INSTANCE: 1 INSTANCE: 1
PID_DIRECTORY: /var/run PID_DIRECTORY: /var/run
HSS_IP_ADDR: 192.168.61.2 HSS_IP_ADDR: 192.168.61.194
HSS_HOSTNAME: hss HSS_HOSTNAME: hss
HSS_FQDN: hss.openairinterface.org HSS_FQDN: hss.openairinterface.org
HSS_REALM: openairinterface.org HSS_REALM: openairinterface.org
MCC: '222' MCC: '208'
MNC: '01' MNC: '99'
MME_GID: 32768 MME_GID: 32768
MME_CODE: 3 MME_CODE: 3
TAC_0: 1 TAC_0: 1
TAC_1: 2 TAC_1: 2
TAC_2: 3 TAC_2: 3
MME_FQDN: mme.openairinterface.org MME_FQDN: mme.openairinterface.org
MME_S6A_IP_ADDR: 192.168.61.3 MME_S6A_IP_ADDR: 192.168.61.195
MME_INTERFACE_NAME_FOR_S1_MME: eth0 MME_INTERFACE_NAME_FOR_S1_MME: eth0
MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3 MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.195
MME_INTERFACE_NAME_FOR_S11: eth0 MME_INTERFACE_NAME_FOR_S11: eth0
MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3 MME_IPV4_ADDRESS_FOR_S11: 192.168.61.195
MME_INTERFACE_NAME_FOR_S10: lo MME_INTERFACE_NAME_FOR_S10: lo
MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10 MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
OUTPUT: CONSOLE OUTPUT: CONSOLE
SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4 SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.196
PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0 PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0 PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
MCC_SGW_0: '222' MCC_SGW_0: '208'
MNC3_SGW_0: '001' MNC3_SGW_0: '099'
TAC_LB_SGW_0: '01' TAC_LB_SGW_0: '01'
TAC_HB_SGW_0: '00' TAC_HB_SGW_0: '00'
MCC_MME_0: '222' MCC_MME_0: '208'
MNC3_MME_0: '001' MNC3_MME_0: '099'
TAC_LB_MME_0: '02' TAC_LB_MME_0: '02'
TAC_HB_MME_0: '00' TAC_HB_MME_0: '00'
MCC_MME_1: '222' MCC_MME_1: '208'
MNC3_MME_1: '001' MNC3_MME_1: '099'
TAC_LB_MME_1: '03' TAC_LB_MME_1: '03'
TAC_HB_MME_1: '00' TAC_HB_MME_1: '00'
TAC_LB_SGW_TEST_0: '03' TAC_LB_SGW_TEST_0: '03'
...@@ -122,18 +124,25 @@ services: ...@@ -122,18 +124,25 @@ services:
container_name: prod-oai-spgwc container_name: prod-oai-spgwc
networks: networks:
public_net: public_net:
ipv4_address: 192.168.61.4 ipv4_address: 192.168.61.196
environment: environment:
PID_DIRECTORY: /var/run TZ: Europe/Paris
SGW_INTERFACE_NAME_FOR_S11: eth0 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 PGW_INTERFACE_NAME_FOR_SX: eth0
DEFAULT_APN: oai.ipv4
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129 DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4 DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
UE_IP_ADDRESS_POOL: '12.1.1.2 - 12.1.1.254' PUSH_PROTOCOL_OPTION: 'true'
PUSH_PROTOCOL_OPTION: 'yes' APN_NI_1: oai.ipv4
APN_NI_2: oai2.ipv4
DEFAULT_APN_NI_1: oai.ipv4
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: '99'
MNC03: '099'
TAC: 1
GW_ID: 1
REALM: openairinterface.org
healthcheck: healthcheck:
test: /bin/bash -c "pgrep oai_spgwc" test: /bin/bash -c "pgrep oai_spgwc"
interval: 10s interval: 10s
...@@ -147,45 +156,39 @@ services: ...@@ -147,45 +156,39 @@ services:
depends_on: [oai_spgwc] depends_on: [oai_spgwc]
networks: networks:
public_net: public_net:
ipv4_address: 192.168.61.5 ipv4_address: 192.168.61.197
environment: environment:
TZ: Europe/Paris
PID_DIRECTORY: /var/run PID_DIRECTORY: /var/run
INSTANCE: 1 INSTANCE: 1
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0 SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
PGW_INTERFACE_NAME_FOR_SGI: eth0 PGW_INTERFACE_NAME_FOR_SGI: eth0
SGW_INTERFACE_NAME_FOR_SX: eth0 SGW_INTERFACE_NAME_FOR_SX: eth0
SPGWC0_IP_ADDRESS: 192.168.61.4 SPGWC0_IP_ADDRESS: 192.168.61.196
NETWORK_UE_IP: '12.1.1.0/24' NETWORK_UE_IP: '12.1.1.0/24'
NETWORK_UE_NAT_OPTION: 'yes' NETWORK_UE_NAT_OPTION: 'yes'
MCC: '208'
MNC: '99'
MNC03: '099'
TAC: 1
GW_ID: 1
REALM: openairinterface.org
healthcheck: healthcheck:
test: /bin/bash -c "pgrep oai_spgwu" test: /bin/bash -c "pgrep oai_spgwu"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 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: trf_gen:
image: trf-gen:production image: trf-gen:production
privileged: true privileged: true
container_name: prod-trf-gen container_name: prod-trf-gen
networks: networks:
public_net: public_net:
ipv4_address: 192.168.61.11 ipv4_address: 192.168.61.200
entrypoint: /bin/bash -c "ip route add 12.1.1.0/24 via 192.168.61.5 dev eth0; sleep infinity" entrypoint: /bin/bash -c "ip route add 12.1.1.0/24 via 192.168.61.197 dev eth0; sleep infinity"
healthcheck: healthcheck:
test: /bin/bash -c "ping -c 2 192.168.61.5" test: /bin/bash -c "ping -c 2 192.168.61.197"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 5
...@@ -200,4 +203,4 @@ networks: ...@@ -200,4 +203,4 @@ networks:
name: prod-oai-public-net name: prod-oai-public-net
ipam: ipam:
config: config:
- subnet: 192.168.61.0/26 - subnet: 192.168.61.192/26
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
...@@ -683,21 +683,7 @@ function main() { ...@@ -683,21 +683,7 @@ function main() {
$build_dir coding \ $build_dir coding \
libcoding.so $dbin/libcoding.so libcoding.so $dbin/libcoding.so
#check if we run inside a container or not
#IS_CONTAINER variable is defined in build_helper file
#compile nasmesh and rb_tool only if NOT running in a container
if [ $IS_CONTAINER -eq 0 ]
then
compilations \
$build_dir nasmesh \
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
compilations \
$build_dir rb_tool \
rb_tool $dbin/rb_tool
cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
fi #IS_CONTAINER
fi fi
fi fi
fi fi
......
...@@ -89,7 +89,7 @@ void get_common_options(uint32_t execmask) { ...@@ -89,7 +89,7 @@ void get_common_options(uint32_t execmask) {
uint32_t online_log_messages=0; uint32_t online_log_messages=0;
uint32_t glog_level=0 ; uint32_t glog_level=0 ;
uint32_t start_telnetsrv = 0, start_telnetclt = 0; uint32_t start_telnetsrv = 0, start_telnetclt = 0;
uint32_t noS1 = 0, nokrnmod = 0, nonbiot = 0; uint32_t noS1 = 0, nokrnmod = 1, nonbiot = 0;
uint32_t rfsim = 0, basicsim = 0, do_forms = 0; uint32_t rfsim = 0, basicsim = 0, do_forms = 0;
char *logmem_filename = NULL; char *logmem_filename = NULL;
paramdef_t cmdline_params[] =CMDLINE_PARAMS_DESC ; paramdef_t cmdline_params[] =CMDLINE_PARAMS_DESC ;
......
...@@ -583,6 +583,23 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP, ...@@ -583,6 +583,23 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
memset(cc[CC_id].vrb_map_UL, 0, 100); memset(cc[CC_id].vrb_map_UL, 0, 100);
cc[CC_id].mcch_active = 0; cc[CC_id].mcch_active = 0;
clear_nfapi_information(RC.mac[module_idP], CC_id, frameP, subframeP); clear_nfapi_information(RC.mac[module_idP], CC_id, frameP, subframeP);
/* hack: skip BCH RBs in subframe 0 for DL scheduling,
* because with high MCS we may exceed code rate 0.93
* when using those RBs (36.213 7.1.7 says the UE may
* skip decoding if the code rate is higher than 0.93)
* TODO: remove this hack, deal with physical bits properly
* i.e. reduce MCS in the scheduler if code rate > 0.93
*/
if (subframeP == 0) {
int i;
int bw = cc[CC_id].mib->message.dl_Bandwidth;
/* start and count defined for RBs: 6, 15, 25, 50, 75, 100 */
int start[6] = { 0, 4, 9, 22, 34, 47 };
int count[6] = { 6, 7, 7, 6, 7, 6 };
for (i = 0; i < count[bw]; i++)
cc[CC_id].vrb_map[start[bw] + i] = 1;
}
} }
/* Refresh UE list based on UEs dropped by PHY in previous subframe */ /* Refresh UE list based on UEs dropped by PHY in previous subframe */
......
...@@ -113,10 +113,29 @@ bool try_allocate_harq_retransmission(module_id_t Mod_id, ...@@ -113,10 +113,29 @@ bool try_allocate_harq_retransmission(module_id_t Mod_id,
LOG_D(MAC, "cannot allocate UE %d: no CCE can be allocated\n", UE_id); LOG_D(MAC, "cannot allocate UE %d: no CCE can be allocated\n", UE_id);
return false; return false;
} }
/* if nb_rb is not multiple of RBGsize, then last RBG must be free
* (it will be allocated just below)
*/
if (nb_rb % RBGsize && !rbgalloc_mask[N_RBG-1]) {
LOG_E(MAC, "retransmission: last RBG already allocated (this should not happen)\n");
return false;
}
ue_ctrl->pre_dci_dl_pdu_idx = idx; ue_ctrl->pre_dci_dl_pdu_idx = idx;
// retransmissions: directly allocate // retransmissions: directly allocate
*n_rbg_sched -= nb_rbg; *n_rbg_sched -= nb_rbg;
ue_ctrl->pre_nb_available_rbs[CC_id] += nb_rb; ue_ctrl->pre_nb_available_rbs[CC_id] += nb_rb;
if (nb_rb % RBGsize) {
/* special case: if nb_rb is not multiple of RBGsize, then allocate last RBG.
* If we instead allocated another RBG then we will retransmit with more
* RBs and the UE will not accept it.
* (This has been seen in a test with cots UEs, if not true, then change
* code as needed.)
* At this point rbgalloc_mask[N_RBG-1] == 1 due to the test above.
*/
ue_ctrl->rballoc_sub_UE[CC_id][N_RBG-1] = 1;
rbgalloc_mask[N_RBG-1] = 0;
nb_rbg--;
}
for (; nb_rbg > 0; start_rbg++) { for (; nb_rbg > 0; start_rbg++) {
if (!rbgalloc_mask[start_rbg]) if (!rbgalloc_mask[start_rbg])
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment