Merge branch 'integration_2024_w13' into 'develop'
Integration `2024.w13` Closes #696 and #762 See merge request oai/openairinterface5g!2653 * !1911 Preparatory work for NR DL 4-layer MIMO at gNB * !2610 fix ug on pilot 2 in nr_pbch_dmrs_correlation() that is lacking signal... * !2639 NR gNB PUCCH2 CQI workaround * !2642 NR UE demoting to LOG_D another log that cause flooding * !2644 NR UE prevent segfault at detach * !2645 add error code for pdu session reject in the ue * !2600 Handle Msg3 with SRB1 RRCReestablishmentComplete and MAC CE C-RNTI * trigger RF-sim E1+F1 test without asan * !2636 Fix various F1 problems * !2641 NR DL and UL channel estimation fix * !2652 Provide additional troubleshooting documentation for QtScope * !2646 NRUE fix asn_sequence_del to clear a list * !2504 CI: use iperf3, refactor Iperf_Module * !2617 use UE ID instead of RNTI internally in NR RLC * !2619 Minor PDCP fixes * !2648 Minor CI fixes, stack protection, fix E1+F1 Quectel test, L2sim5G test
This commit is contained in:
@@ -308,29 +308,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("L2-Sim-Test-5G") {
|
|
||||||
when { expression {do5Gtest} }
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
triggerSlaveJob ('RAN-L2-Sim-Test-5G', 'L2-Sim-Test-5G')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
|
||||||
// due to parallel-time concurrency
|
|
||||||
l2Sim5GStatus = finalizeSlaveJob('RAN-L2-Sim-Test-5G')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
failure {
|
|
||||||
script {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
failingStages += l2Sim5GStatus
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("LTE-B200-FDD-LTEBOX-Container") {
|
stage ("LTE-B200-FDD-LTEBOX-Container") {
|
||||||
when { expression {do4Gtest} }
|
when { expression {do4Gtest} }
|
||||||
steps {
|
steps {
|
||||||
|
|||||||
@@ -56,6 +56,39 @@ adb_ue_2:
|
|||||||
MTU: 1500
|
MTU: 1500
|
||||||
LogStore: /media/usb-drive/ci_adb_2-logs
|
LogStore: /media/usb-drive/ci_adb_2-logs
|
||||||
|
|
||||||
|
oc-cn5g:
|
||||||
|
Host: avra
|
||||||
|
NetworkScript: echo "inet 172.21.6.102"
|
||||||
|
RunIperf3Server: False
|
||||||
|
|
||||||
|
porcepix-cn4g:
|
||||||
|
Host: porcepix
|
||||||
|
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
||||||
|
CmdPrefix: docker exec prod-trf-gen
|
||||||
|
|
||||||
|
porcepix-cn5g:
|
||||||
|
Host: porcepix
|
||||||
|
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
||||||
|
CmdPrefix: docker exec prod-trf-gen
|
||||||
|
RunIperf3Server: False
|
||||||
|
|
||||||
|
nano-cn4g:
|
||||||
|
Host: nano
|
||||||
|
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
||||||
|
CmdPrefix: docker exec prod-trf-gen
|
||||||
|
|
||||||
|
ltebox-nano:
|
||||||
|
Host: nano
|
||||||
|
NetworkScript: ip a show dev tun1
|
||||||
|
|
||||||
|
sabox-nepes:
|
||||||
|
Host: nepes
|
||||||
|
NetworkScript: ip a show dev tun1
|
||||||
|
|
||||||
|
ltebox-nepes:
|
||||||
|
Host: nepes
|
||||||
|
NetworkScript: ip a show dev tun1
|
||||||
|
|
||||||
amarisoft_ue:
|
amarisoft_ue:
|
||||||
Host: amariue
|
Host: amariue
|
||||||
InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_aw2s_asue_2x2/aw2s-multi-20897-2x2.cfg &
|
InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_aw2s_asue_2x2/aw2s-multi-20897-2x2.cfg &
|
||||||
@@ -306,6 +339,18 @@ rfsim4g_enb_nos1:
|
|||||||
CmdPrefix: docker exec rfsim4g-oai-enb
|
CmdPrefix: docker exec rfsim4g-oai-enb
|
||||||
IF: oaitun_enb1
|
IF: oaitun_enb1
|
||||||
|
|
||||||
|
rfsim4g_enb_fembms:
|
||||||
|
Host: localhost
|
||||||
|
NetworkScript: docker exec rfsim4g-oai-enb ip a show dev oaitun_enm1
|
||||||
|
CmdPrefix: docker exec rfsim4g-oai-enb
|
||||||
|
IF: oaitun_enm1
|
||||||
|
|
||||||
|
rfsim4g_ue_fembms:
|
||||||
|
Host: localhost
|
||||||
|
NetworkScript: docker exec rfsim4g-oai-lte-ue0 ip a show dev oaitun_uem1
|
||||||
|
CmdPrefix: docker exec rfsim4g-oai-lte-ue0
|
||||||
|
IF: oaitun_uem1
|
||||||
|
|
||||||
l2sim5g_ue:
|
l2sim5g_ue:
|
||||||
Host: localhost
|
Host: localhost
|
||||||
AttachScript: docker start l2sim-oai-nr-ue0
|
AttachScript: docker start l2sim-oai-nr-ue0
|
||||||
@@ -31,7 +31,8 @@ import subprocess as sp
|
|||||||
import os
|
import os
|
||||||
import paramiko
|
import paramiko
|
||||||
import uuid
|
import uuid
|
||||||
import sys
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
SSHTIMEOUT=7
|
SSHTIMEOUT=7
|
||||||
|
|
||||||
@@ -106,6 +107,7 @@ class LocalCmd(Cmd):
|
|||||||
# if we wait for stdout, subprocess does not return before the end of the command
|
# if we wait for stdout, subprocess does not return before the end of the command
|
||||||
# however, we don't want to wait for commands with &, so just return fake command
|
# however, we don't want to wait for commands with &, so just return fake command
|
||||||
ret = sp.run(line, shell=True, cwd=self.cwd, timeout=5)
|
ret = sp.run(line, shell=True, cwd=self.cwd, timeout=5)
|
||||||
|
time.sleep(0.1)
|
||||||
else:
|
else:
|
||||||
ret = sp.run(line, shell=True, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout)
|
ret = sp.run(line, shell=True, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -210,6 +212,7 @@ class RemoteCmd(Cmd):
|
|||||||
# however, we don't want to wait for commands with &, so just return fake command
|
# however, we don't want to wait for commands with &, so just return fake command
|
||||||
self.client.exec_command(line, timeout = 5)
|
self.client.exec_command(line, timeout = 5)
|
||||||
ret = sp.CompletedProcess(args=line, returncode=0, stdout=b'')
|
ret = sp.CompletedProcess(args=line, returncode=0, stdout=b'')
|
||||||
|
time.sleep(0.1)
|
||||||
else:
|
else:
|
||||||
stdin, stdout, stderr = self.client.exec_command(line, timeout=timeout)
|
stdin, stdout, stderr = self.client.exec_command(line, timeout=timeout)
|
||||||
ret = sp.CompletedProcess(args=line, returncode=stdout.channel.recv_exit_status(), stdout=stdout.read(size=None) + stderr.read(size=None))
|
ret = sp.CompletedProcess(args=line, returncode=stdout.channel.recv_exit_status(), stdout=stdout.read(size=None) + stderr.read(size=None))
|
||||||
|
|||||||
@@ -169,97 +169,6 @@ def AnalyzeBuildLogs(buildRoot, images, globalStatus):
|
|||||||
collectInfo[image] = files
|
collectInfo[image] = files
|
||||||
return collectInfo
|
return collectInfo
|
||||||
|
|
||||||
def AnalyzeIperf(cliOptions, clientReport, serverReport):
|
|
||||||
req_bw = 1.0 # default iperf throughput, in Mbps
|
|
||||||
result = re.search('-b *(?P<iperf_bandwidth>[0-9\.]+)(?P<magnitude>[kKMG])', cliOptions)
|
|
||||||
if result is not None:
|
|
||||||
req_bw = float(result.group('iperf_bandwidth'))
|
|
||||||
magn = result.group('magnitude')
|
|
||||||
if magn == "k" or magn == "K":
|
|
||||||
req_bw /= 1000
|
|
||||||
elif magn == "G":
|
|
||||||
req_bw *= 1000
|
|
||||||
req_dur = 10 # default iperf send duration
|
|
||||||
result = re.search('-t *(?P<duration>[0-9]+)', cliOptions)
|
|
||||||
if result is not None:
|
|
||||||
req_dur = int(result.group('duration'))
|
|
||||||
|
|
||||||
reportLine = None
|
|
||||||
# find server report in client status
|
|
||||||
clientReportLines = clientReport.split('\n')
|
|
||||||
for l in range(len(clientReportLines)):
|
|
||||||
res = re.search('read failed: Connection refused', clientReportLines[l])
|
|
||||||
if res is not None:
|
|
||||||
message = 'iperf connection refused by server!'
|
|
||||||
logging.error(f'\u001B[1;37;41mIperf Test FAIL: {message}\u001B[0m')
|
|
||||||
return (False, message)
|
|
||||||
res = re.search('Server Report:', clientReportLines[l])
|
|
||||||
if res is not None and l + 1 < len(clientReportLines):
|
|
||||||
reportLine = clientReportLines[l+1]
|
|
||||||
logging.debug(f'found server report: "{reportLine}"')
|
|
||||||
|
|
||||||
statusTemplate = '(?:|\[ *\d+\].*) +0\.0-\s*(?P<duration>[0-9\.]+) +sec +[0-9\.]+ [kKMG]Bytes +(?P<bitrate>[0-9\.]+) (?P<magnitude>[kKMG])bits\/sec +(?P<jitter>[0-9\.]+) ms +(\d+\/ *\d+) +(\((?P<packetloss>[0-9\.]+)%\))'
|
|
||||||
# if we do not find a server report in the client logs, check the server logs
|
|
||||||
# and use the last line which is typically close/identical to server report
|
|
||||||
if reportLine is None:
|
|
||||||
for l in serverReport.split('\n'):
|
|
||||||
res = re.search(statusTemplate, l)
|
|
||||||
if res is not None:
|
|
||||||
reportLine = l
|
|
||||||
if reportLine is None:
|
|
||||||
logging.warning('no report in server status found!')
|
|
||||||
return (False, 'could not parse iperf logs')
|
|
||||||
logging.debug(f'found client status: {reportLine}')
|
|
||||||
|
|
||||||
result = re.search(statusTemplate, reportLine)
|
|
||||||
if result is None:
|
|
||||||
logging.error('could not analyze report from statusTemplate')
|
|
||||||
return (False, 'could not parse iperf logs')
|
|
||||||
|
|
||||||
duration = float(result.group('duration'))
|
|
||||||
bitrate = float(result.group('bitrate'))
|
|
||||||
magn = result.group('magnitude')
|
|
||||||
if magn == "k" or magn == "K":
|
|
||||||
bitrate /= 1000
|
|
||||||
elif magn == "G": # we assume bitrate in Mbps, therefore it must be G now
|
|
||||||
bitrate *= 1000
|
|
||||||
jitter = float(result.group('jitter'))
|
|
||||||
packetloss = float(result.group('packetloss'))
|
|
||||||
|
|
||||||
logging.debug('\u001B[1;37;44m iperf result \u001B[0m')
|
|
||||||
msg = f'Req Bitrate: {req_bw}'
|
|
||||||
logging.debug(f'\u001B[1;34m{msg}\u001B[0m')
|
|
||||||
|
|
||||||
br_loss = bitrate/req_bw
|
|
||||||
bmsg = f'Bitrate : {bitrate} (perf {br_loss})'
|
|
||||||
logging.debug(f'\u001B[1;34m{bmsg}\u001B[0m')
|
|
||||||
msg += '\n' + bmsg
|
|
||||||
if br_loss < 0.9:
|
|
||||||
msg += '\nBitrate performance too low (<90%)'
|
|
||||||
logging.debug(f'\u001B[1;37;41mBitrate performance too low (<90%)\u001B[0m')
|
|
||||||
return (False, msg)
|
|
||||||
|
|
||||||
plmsg = f'Packet Loss: {packetloss}%'
|
|
||||||
logging.debug(f'\u001B[1;34m{plmsg}\u001B[0m')
|
|
||||||
msg += '\n' + plmsg
|
|
||||||
if packetloss > 5.0:
|
|
||||||
msg += '\nPacket Loss too high!'
|
|
||||||
logging.debug(f'\u001B[1;37;41mPacket Loss too high \u001B[0m')
|
|
||||||
return (False, msg)
|
|
||||||
|
|
||||||
dmsg = f'Duration : {duration} (req {req_dur})'
|
|
||||||
logging.debug(f'\u001B[1;34m{dmsg}\u001B[0m')
|
|
||||||
msg += '\n' + dmsg
|
|
||||||
if duration < float(req_dur):
|
|
||||||
msg += '\nDuration of iperf too short!'
|
|
||||||
logging.debug(f'\u001B[1;37;41mDuration of iperf too short\u001B[0m')
|
|
||||||
return (False, msg)
|
|
||||||
|
|
||||||
jmsg = f'Jitter : {jitter}'
|
|
||||||
logging.debug(f'\u001B[1;34m{jmsg}\u001B[0m')
|
|
||||||
msg += '\n' + jmsg
|
|
||||||
return (True, msg)
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# Class Declaration
|
# Class Declaration
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
@@ -1026,7 +935,6 @@ class Containerize():
|
|||||||
cnt = 100
|
cnt = 100
|
||||||
status = True
|
status = True
|
||||||
logging.info('\u001B[1m Deploying OAI object Pass\u001B[0m')
|
logging.info('\u001B[1m Deploying OAI object Pass\u001B[0m')
|
||||||
time.sleep(10)
|
|
||||||
else:
|
else:
|
||||||
# containers are unhealthy, so we won't start. However, logs are stored at the end
|
# containers are unhealthy, so we won't start. However, logs are stored at the end
|
||||||
# in UndeployObject so we here store the logs of the unhealthy container to report it
|
# in UndeployObject so we here store the logs of the unhealthy container to report it
|
||||||
@@ -1467,76 +1375,6 @@ class Containerize():
|
|||||||
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', [message])
|
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', [message])
|
||||||
|
|
||||||
def PingExit(self, HTML, RAN, UE, status, message):
|
|
||||||
if status:
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', [message])
|
|
||||||
else:
|
|
||||||
logging.error('\u001B[1;37;41m ping test FAIL -- ' + message + ' \u001B[0m')
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'KO', [message])
|
|
||||||
# Automatic undeployment
|
|
||||||
logging.warning('----------------------------------------')
|
|
||||||
logging.warning('\u001B[1m Starting Automatic undeployment \u001B[0m')
|
|
||||||
logging.warning('----------------------------------------')
|
|
||||||
HTML.testCase_id = 'AUTO-UNDEPLOY'
|
|
||||||
HTML.desc = 'Automatic Un-Deployment'
|
|
||||||
self.UndeployGenObject(HTML, RAN, UE)
|
|
||||||
self.exitStatus = 1
|
|
||||||
|
|
||||||
def IperfFromContainer(self, HTML, RAN, UE):
|
|
||||||
myCmd = cls_cmd.LocalCmd()
|
|
||||||
self.exitStatus = 0
|
|
||||||
|
|
||||||
ymlPath = self.yamlPath[0].split('/')
|
|
||||||
logPath = '../cmake_targets/log/' + ymlPath[1]
|
|
||||||
cmd = f'mkdir -p {logPath}'
|
|
||||||
myCmd.run(cmd, silent=True)
|
|
||||||
|
|
||||||
# Start the server process
|
|
||||||
cmd = f'docker exec -d {self.svrContName} /bin/bash -c "nohup iperf {self.svrOptions} > /tmp/iperf_server.log 2>&1"'
|
|
||||||
myCmd.run(cmd)
|
|
||||||
time.sleep(3)
|
|
||||||
|
|
||||||
# Start the client process
|
|
||||||
cmd = f'docker exec {self.cliContName} /bin/bash -c "iperf {self.cliOptions}" 2>&1 | tee {logPath}/iperf_client_{HTML.testCase_id}.log'
|
|
||||||
clientStatus = myCmd.run(cmd, timeout=100)
|
|
||||||
|
|
||||||
# Stop the server process
|
|
||||||
cmd = f'docker exec {self.svrContName} /bin/bash -c "pkill iperf"'
|
|
||||||
myCmd.run(cmd)
|
|
||||||
time.sleep(3)
|
|
||||||
serverStatusFilename = f'{logPath}/iperf_server_{HTML.testCase_id}.log'
|
|
||||||
cmd = f'docker cp {self.svrContName}:/tmp/iperf_server.log {serverStatusFilename}'
|
|
||||||
myCmd.run(cmd, timeout=60)
|
|
||||||
myCmd.close()
|
|
||||||
|
|
||||||
# clientStatus was retrieved above. The serverStatus was
|
|
||||||
# written in the background, then copied to the local machine
|
|
||||||
with open(serverStatusFilename, 'r') as f:
|
|
||||||
serverStatus = f.read()
|
|
||||||
(iperfStatus, msg) = AnalyzeIperf(self.cliOptions, clientStatus.stdout, serverStatus)
|
|
||||||
if iperfStatus:
|
|
||||||
logging.info('\u001B[1m Iperf Test PASS\u001B[0m')
|
|
||||||
else:
|
|
||||||
logging.error('\u001B[1;37;41m Iperf Test FAIL\u001B[0m')
|
|
||||||
self.IperfExit(HTML, RAN, UE, iperfStatus, msg)
|
|
||||||
|
|
||||||
def IperfExit(self, HTML, RAN, UE, status, message):
|
|
||||||
html_cell = f'UE\n{message}'
|
|
||||||
if status:
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.cliOptions, 'OK', [html_cell])
|
|
||||||
else:
|
|
||||||
logging.error('\u001B[1m Iperf Test FAIL -- ' + message + ' \u001B[0m')
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.cliOptions, 'KO', [html_cell])
|
|
||||||
# Automatic undeployment
|
|
||||||
logging.warning('----------------------------------------')
|
|
||||||
logging.warning('\u001B[1m Starting Automatic undeployment \u001B[0m')
|
|
||||||
logging.warning('----------------------------------------')
|
|
||||||
HTML.testCase_id = 'AUTO-UNDEPLOY'
|
|
||||||
HTML.desc = 'Automatic Un-Deployment'
|
|
||||||
self.UndeployGenObject(HTML, RAN, UE)
|
|
||||||
self.exitStatus = 1
|
|
||||||
|
|
||||||
|
|
||||||
def CheckAndAddRoute(self, svrName, ipAddr, userName, password):
|
def CheckAndAddRoute(self, svrName, ipAddr, userName, password):
|
||||||
logging.debug('Checking IP routing on ' + svrName)
|
logging.debug('Checking IP routing on ' + svrName)
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ import cls_cmd
|
|||||||
|
|
||||||
class Module_UE:
|
class Module_UE:
|
||||||
|
|
||||||
def __init__(self, module_name, filename="ci_ueinfra.yaml"):
|
def __init__(self, module_name, filename="ci_infra.yaml"):
|
||||||
with open(filename, 'r') as f:
|
with open(filename, 'r') as f:
|
||||||
all_ues = yaml.load(f, Loader=yaml.FullLoader)
|
all_ues = yaml.load(f, Loader=yaml.FullLoader)
|
||||||
m = all_ues.get(module_name)
|
m = all_ues.get(module_name)
|
||||||
@@ -64,7 +64,8 @@ class Module_UE:
|
|||||||
self.trace = m.get('trace') == True
|
self.trace = m.get('trace') == True
|
||||||
self.logStore = m.get('LogStore')
|
self.logStore = m.get('LogStore')
|
||||||
self.cmd_prefix = m.get('CmdPrefix')
|
self.cmd_prefix = m.get('CmdPrefix')
|
||||||
logging.info(f'initialized UE {self.module_name}@{self.host} from {filename}')
|
self.runIperf3Server = m.get('RunIperf3Server', True)
|
||||||
|
logging.info(f'initialized {self.module_name}@{self.host} from {filename}')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.module_name}@{self.host} [IP: {self.getIP()}]"
|
return f"{self.module_name}@{self.host} [IP: {self.getIP()}]"
|
||||||
@@ -189,6 +190,9 @@ class Module_UE:
|
|||||||
def getHost(self):
|
def getHost(self):
|
||||||
return self.host
|
return self.host
|
||||||
|
|
||||||
|
def getRunIperf3Server(self):
|
||||||
|
return self.runIperf3Server
|
||||||
|
|
||||||
def getCmdPrefix(self):
|
def getCmdPrefix(self):
|
||||||
return self.cmd_prefix if self.cmd_prefix else ""
|
return self.cmd_prefix if self.cmd_prefix else ""
|
||||||
|
|
||||||
+246
-372
@@ -45,6 +45,7 @@ import signal
|
|||||||
import statistics as stat
|
import statistics as stat
|
||||||
from multiprocessing import SimpleQueue, Lock
|
from multiprocessing import SimpleQueue, Lock
|
||||||
import concurrent.futures
|
import concurrent.futures
|
||||||
|
import json
|
||||||
|
|
||||||
#import our libs
|
#import our libs
|
||||||
import helpreadme as HELP
|
import helpreadme as HELP
|
||||||
@@ -52,13 +53,188 @@ import constants as CONST
|
|||||||
import cls_cluster as OC
|
import cls_cluster as OC
|
||||||
import sshconnection
|
import sshconnection
|
||||||
|
|
||||||
import cls_module_ue
|
import cls_module
|
||||||
import cls_cmd
|
import cls_cmd
|
||||||
|
|
||||||
logging.getLogger("matplotlib").setLevel(logging.WARNING)
|
logging.getLogger("matplotlib").setLevel(logging.WARNING)
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# Helper functions used here and in other classes
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
def Iperf_ComputeModifiedBW(idx, ue_num, profile, args):
|
||||||
|
result = re.search('-b\s*(?P<iperf_bandwidth>[0-9\.]+)(?P<unit>[KMG])', str(args))
|
||||||
|
if result is None:
|
||||||
|
raise Exception('Iperf bandwidth not found or in incorrect format!')
|
||||||
|
iperf_bandwidth = result.group('iperf_bandwidth')
|
||||||
|
if profile == 'balanced':
|
||||||
|
iperf_bandwidth_new = float(iperf_bandwidth)/ue_num
|
||||||
|
if profile == 'single-ue':
|
||||||
|
iperf_bandwidth_new = float(iperf_bandwidth)
|
||||||
|
if profile == 'unbalanced':
|
||||||
|
# residual is 2% of max bw
|
||||||
|
residualBW = float(iperf_bandwidth) / 50
|
||||||
|
if idx == 0:
|
||||||
|
iperf_bandwidth_new = float(iperf_bandwidth) - ((ue_num - 1) * residualBW)
|
||||||
|
else:
|
||||||
|
iperf_bandwidth_new = residualBW
|
||||||
|
iperf_bandwidth_str = result.group(0)
|
||||||
|
iperf_bandwidth_unit = result.group(2)
|
||||||
|
iperf_bandwidth_str_new = f"-b {'%.2f' % iperf_bandwidth_new}{iperf_bandwidth_unit}"
|
||||||
|
result = re.sub(iperf_bandwidth_str, iperf_bandwidth_str_new, str(args))
|
||||||
|
if result is None:
|
||||||
|
raise Exception('Calculate Iperf bandwidth failed!')
|
||||||
|
return result
|
||||||
|
|
||||||
|
def Iperf_ComputeTime(args):
|
||||||
|
result = re.search('-t\s*(?P<iperf_time>\d+)', str(args))
|
||||||
|
if result is None:
|
||||||
|
raise Exception('Iperf time not found!')
|
||||||
|
return int(result.group('iperf_time'))
|
||||||
|
|
||||||
|
def Iperf_analyzeV3TCPJson(filename, iperf_tcp_rate_target):
|
||||||
|
if (not os.path.isfile(filename)):
|
||||||
|
return (False, 'Iperf3 TCP: Log file not present')
|
||||||
|
if (os.path.getsize(filename)==0):
|
||||||
|
return (False, 'Iperf3 TCP: Log file is empty')
|
||||||
|
|
||||||
|
with open(filename) as file:
|
||||||
|
filename = json.load(file)
|
||||||
|
try:
|
||||||
|
sender_bitrate = round(filename['end']['streams'][0]['sender']['bits_per_second']/1000000,2)
|
||||||
|
receiver_bitrate = round(filename['end']['streams'][0]['receiver']['bits_per_second']/1000000,2)
|
||||||
|
except Exception as e:
|
||||||
|
return (False, 'Could not compute Iperf3 bitrate!')
|
||||||
|
|
||||||
|
snd_msg = f'Sender Bitrate : {sender_bitrate} Mbps'
|
||||||
|
rcv_msg = f'Receiver Bitrate : {receiver_bitrate} Mbps'
|
||||||
|
success = True
|
||||||
|
if (iperf_tcp_rate_target is not None):
|
||||||
|
if (int(receiver_bitrate) < int(iperf_tcp_rate_target)):
|
||||||
|
rcv_msg += f" (too low! < {iperf_tcp_rate_target} Mbps)"
|
||||||
|
success = False
|
||||||
|
else:
|
||||||
|
rcv_msg += f" (target : {iperf_tcp_rate_target} Mbps)"
|
||||||
|
return(success, f'{snd_msg}\n{rcv_msg}')
|
||||||
|
|
||||||
|
def Iperf_analyzeV3BIDIRJson(filename):
|
||||||
|
if (not os.path.isfile(filename)):
|
||||||
|
return (False, 'Iperf3 Bidir TCP: Log file not present')
|
||||||
|
if (os.path.getsize(filename)==0):
|
||||||
|
return (False, 'Iperf3 Bidir TCP: Log file is empty')
|
||||||
|
|
||||||
|
with open(filename) as file:
|
||||||
|
filename = json.load(file)
|
||||||
|
try:
|
||||||
|
sender_bitrate_dl = round(filename['end']['streams'][0]['sender']['bits_per_second']/1000000,2)
|
||||||
|
receiver_bitrate_dl = round(filename['end']['streams'][0]['receiver']['bits_per_second']/1000000,2)
|
||||||
|
sender_bitrate_ul = round(filename['end']['streams'][1]['sender']['bits_per_second']/1000000,2)
|
||||||
|
receiver_bitrate_ul = round(filename['end']['streams'][1]['receiver']['bits_per_second']/1000000,2)
|
||||||
|
except Exception as e:
|
||||||
|
return (False, 'Could not compute BIDIR bitrate!')
|
||||||
|
|
||||||
|
msg = f'Sender Bitrate DL : {sender_bitrate_dl} Mbps\n'
|
||||||
|
msg += f'Receiver Bitrate DL : {receiver_bitrate_dl} Mbps\n'
|
||||||
|
msg += f'Sender Bitrate UL : {sender_bitrate_ul} Mbps\n'
|
||||||
|
msg += f'Receiver Bitrate UL : {receiver_bitrate_ul} Mbps\n'
|
||||||
|
return (True, msg)
|
||||||
|
|
||||||
|
def Iperf_analyzeV3UDP(filename, iperf_bitrate_threshold, iperf_packetloss_threshold):
|
||||||
|
if (not os.path.isfile(filename)):
|
||||||
|
return (False, 'Iperf3 UDP: Log file not present')
|
||||||
|
if (os.path.getsize(filename)==0):
|
||||||
|
return (False, 'Iperf3 UDP: Log file is empty')
|
||||||
|
sender_bitrate = None
|
||||||
|
receiver_bitrate = None
|
||||||
|
with open(filename, 'r') as server_file:
|
||||||
|
for line in server_file.readlines():
|
||||||
|
res_sender = re.search(r'(?P<bitrate>[0-9\.]+)\s+(?P<unit>[KMG]bits\/sec)\s+(?P<jitter>[0-9\.]+\s+ms)\s+(?P<lostPack>\d+)/(?P<sentPack>\d+) \((?P<lost>[0-9\.]+).*?\s+(sender)', line)
|
||||||
|
res_receiver = re.search(r'(?P<bitrate>[0-9\.]+)\s+(?P<unit>[KMG]bits\/sec)\s+(?P<jitter>[0-9\.]+\s+ms)\s+(?P<lostPack>\d+)/(?P<receivedPack>\d+) \((?P<lost>[0-9\.]+).*?\s+(receiver)', line)
|
||||||
|
if res_sender is not None:
|
||||||
|
sender_bitrate = res_sender.group('bitrate')
|
||||||
|
sender_unit = res_sender.group('unit')
|
||||||
|
sender_jitter = res_sender.group('jitter')
|
||||||
|
sender_lostPack = res_sender.group('lostPack')
|
||||||
|
sender_sentPack = res_sender.group('sentPack')
|
||||||
|
sender_packetloss = res_sender.group('lost')
|
||||||
|
if res_receiver is not None:
|
||||||
|
receiver_bitrate = res_receiver.group('bitrate')
|
||||||
|
receiver_unit = res_receiver.group('unit')
|
||||||
|
receiver_jitter = res_receiver.group('jitter')
|
||||||
|
receiver_lostPack = res_receiver.group('lostPack')
|
||||||
|
receiver_receivedPack = res_receiver.group('receivedPack')
|
||||||
|
receiver_packetloss = res_receiver.group('lost')
|
||||||
|
|
||||||
|
if receiver_bitrate is not None and sender_bitrate is not None:
|
||||||
|
if sender_unit == 'Kbits/sec':
|
||||||
|
sender_bitrate = float(sender_bitrate) / 1000
|
||||||
|
if receiver_unit == 'Kbits/sec':
|
||||||
|
receiver_bitrate = float(receiver_bitrate) / 1000
|
||||||
|
br_perf = 100 * float(receiver_bitrate) / float(sender_bitrate)
|
||||||
|
br_perf = '%.2f ' % br_perf
|
||||||
|
sender_bitrate = '%.2f ' % float(sender_bitrate)
|
||||||
|
receiver_bitrate = '%.2f ' % float(receiver_bitrate)
|
||||||
|
req_msg = f'Sender Bitrate : {sender_bitrate} Mbps'
|
||||||
|
bir_msg = f'Receiver Bitrate : {receiver_bitrate} Mbps'
|
||||||
|
brl_msg = f'{br_perf}%'
|
||||||
|
jit_msg = f'Jitter : {receiver_jitter}'
|
||||||
|
pal_msg = f'Packet Loss : {receiver_packetloss} %'
|
||||||
|
if float(br_perf) < float(iperf_bitrate_threshold):
|
||||||
|
brl_msg = f'too low! < {iperf_bitrate_threshold}%'
|
||||||
|
if float(receiver_packetloss) > float(iperf_packetloss_threshold):
|
||||||
|
pal_msg += f' (too high! > {iperf_packetloss_threshold}%)'
|
||||||
|
result = float(br_perf) >= float(iperf_bitrate_threshold) and float(receiver_packetloss) <= float(iperf_packetloss_threshold)
|
||||||
|
return (result, f'{req_msg}\n{bir_msg} ({brl_msg})\n{jit_msg}\n{pal_msg}')
|
||||||
|
else:
|
||||||
|
return (False, 'Could not analyze iperf report')
|
||||||
|
|
||||||
|
def Iperf_analyzeV2UDP(server_filename, iperf_bitrate_threshold, iperf_packetloss_threshold, iperf_opt):
|
||||||
|
if (not os.path.isfile(server_filename)):
|
||||||
|
return (False, 'Could not analyze, server report not found!')
|
||||||
|
# Computing the requested bandwidth in float
|
||||||
|
req_bw = 1.0 # default iperf throughput, in Mbps
|
||||||
|
result = re.search('-b *(?P<iperf_bandwidth>[0-9\.]+)(?P<magnitude>[kKMG])', iperf_opt)
|
||||||
|
if result is not None:
|
||||||
|
req_bw = float(result.group('iperf_bandwidth'))
|
||||||
|
magn = result.group('magnitude')
|
||||||
|
if magn == "k" or magn == "K":
|
||||||
|
req_bw /= 1000
|
||||||
|
elif magn == "G":
|
||||||
|
req_bw *= 1000
|
||||||
|
statusTemplate = '(?:|\[ *\d+\].*) +0\.0-\s*(?P<duration>[0-9\.]+) +sec +[0-9\.]+ [kKMG]Bytes +(?P<bitrate>[0-9\.]+) (?P<magnitude>[kKMG])bits\/sec +(?P<jitter>[0-9\.]+) ms +(\d+\/ *\d+) +(\((?P<packetloss>[0-9\.]+)%\))'
|
||||||
|
|
||||||
|
with open(server_filename, 'r') as server_file:
|
||||||
|
for line in server_file.readlines():
|
||||||
|
res = re.search(statusTemplate, str(line))
|
||||||
|
if res is not None:
|
||||||
|
result = res
|
||||||
|
if result is None:
|
||||||
|
return (False, 'Could not parse server report!')
|
||||||
|
|
||||||
|
bitrate = float(result.group('bitrate'))
|
||||||
|
magn = result.group('magnitude')
|
||||||
|
if magn == "k" or magn == "K":
|
||||||
|
bitrate /= 1000
|
||||||
|
elif magn == "G": # we assume bitrate in Mbps, therefore it must be G now
|
||||||
|
bitrate *= 1000
|
||||||
|
jitter = float(result.group('jitter'))
|
||||||
|
packetloss = float(result.group('packetloss'))
|
||||||
|
br_perf = float(bitrate)/float(req_bw) * 100
|
||||||
|
br_perf = '%.2f ' % br_perf
|
||||||
|
|
||||||
|
result = float(br_perf) >= float(iperf_bitrate_threshold) and float(packetloss) <= float(iperf_packetloss_threshold)
|
||||||
|
req_msg = f'Req Bitrate : {req_bw}'
|
||||||
|
bir_msg = f'Bitrate : {bitrate}'
|
||||||
|
brl_msg = f'Bitrate Perf: {br_perf} %'
|
||||||
|
if float(br_perf) < float(iperf_bitrate_threshold):
|
||||||
|
brl_msg += f' (too low! <{iperf_bitrate_threshold}%)'
|
||||||
|
jit_msg = f'Jitter : {jitter}'
|
||||||
|
pal_msg = f'Packet Loss : {packetloss}'
|
||||||
|
if float(packetloss) > float(iperf_packetloss_threshold):
|
||||||
|
pal_msg += f' (too high! >{self.iperf_packetloss_threshold}%)'
|
||||||
|
return (result, f'{req_msg}\n{bir_msg}\n{brl_msg}\n{jit_msg}\n{pal_msg}')
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# OaiCiTest Class Definition
|
# OaiCiTest Class Definition
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
@@ -86,7 +262,7 @@ class OaiCiTest():
|
|||||||
self.iperf_bitrate_threshold = ''
|
self.iperf_bitrate_threshold = ''
|
||||||
self.iperf_profile = ''
|
self.iperf_profile = ''
|
||||||
self.iperf_options = ''
|
self.iperf_options = ''
|
||||||
self.iperf_direction = ''
|
self.iperf_tcp_rate_target = ''
|
||||||
self.nbMaxUEtoAttach = -1
|
self.nbMaxUEtoAttach = -1
|
||||||
self.UEDevices = []
|
self.UEDevices = []
|
||||||
self.UEDevicesStatus = []
|
self.UEDevicesStatus = []
|
||||||
@@ -113,6 +289,7 @@ class OaiCiTest():
|
|||||||
self.clean_repository = True
|
self.clean_repository = True
|
||||||
self.air_interface=''
|
self.air_interface=''
|
||||||
self.ue_ids = []
|
self.ue_ids = []
|
||||||
|
self.svr_id = None
|
||||||
self.cmd_prefix = '' # prefix before {lte,nr}-uesoftmodem
|
self.cmd_prefix = '' # prefix before {lte,nr}-uesoftmodem
|
||||||
|
|
||||||
|
|
||||||
@@ -222,7 +399,7 @@ class OaiCiTest():
|
|||||||
|
|
||||||
|
|
||||||
def InitializeUE(self, HTML):
|
def InitializeUE(self, HTML):
|
||||||
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
|
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
|
||||||
messages = []
|
messages = []
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor:
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
futures = [executor.submit(ue.initialize) for ue in ues]
|
futures = [executor.submit(ue.initialize) for ue in ues]
|
||||||
@@ -438,7 +615,7 @@ class OaiCiTest():
|
|||||||
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
|
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
|
||||||
|
|
||||||
def AttachUE(self, HTML, RAN, EPC, CONTAINERS):
|
def AttachUE(self, HTML, RAN, EPC, CONTAINERS):
|
||||||
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
|
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor:
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
futures = [executor.submit(ue.attach) for ue in ues]
|
futures = [executor.submit(ue.attach) for ue in ues]
|
||||||
attached = [f.result() for f in futures]
|
attached = [f.result() for f in futures]
|
||||||
@@ -453,7 +630,7 @@ class OaiCiTest():
|
|||||||
self.AutoTerminateUEandeNB(HTML, RAN, EPC, CONTAINERS)
|
self.AutoTerminateUEandeNB(HTML, RAN, EPC, CONTAINERS)
|
||||||
|
|
||||||
def DetachUE(self, HTML):
|
def DetachUE(self, HTML):
|
||||||
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
|
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor:
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
futures = [executor.submit(ue.detach) for ue in ues]
|
futures = [executor.submit(ue.detach) for ue in ues]
|
||||||
[f.result() for f in futures]
|
[f.result() for f in futures]
|
||||||
@@ -461,7 +638,7 @@ class OaiCiTest():
|
|||||||
HTML.CreateHtmlTestRowQueue('NA', 'OK', messages)
|
HTML.CreateHtmlTestRowQueue('NA', 'OK', messages)
|
||||||
|
|
||||||
def DataDisableUE(self, HTML):
|
def DataDisableUE(self, HTML):
|
||||||
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
|
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor:
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
futures = [executor.submit(ue.dataDisable) for ue in ues]
|
futures = [executor.submit(ue.dataDisable) for ue in ues]
|
||||||
status = [f.result() for f in futures]
|
status = [f.result() for f in futures]
|
||||||
@@ -473,7 +650,7 @@ class OaiCiTest():
|
|||||||
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["Could not disable UE data!"])
|
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["Could not disable UE data!"])
|
||||||
|
|
||||||
def DataEnableUE(self, HTML):
|
def DataEnableUE(self, HTML):
|
||||||
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
|
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
|
||||||
logging.debug(f'disabling data for UEs {ues}')
|
logging.debug(f'disabling data for UEs {ues}')
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor:
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
futures = [executor.submit(ue.dataEnable) for ue in ues]
|
futures = [executor.submit(ue.dataEnable) for ue in ues]
|
||||||
@@ -486,7 +663,7 @@ class OaiCiTest():
|
|||||||
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["Could not enable UE data!"])
|
HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["Could not enable UE data!"])
|
||||||
|
|
||||||
def CheckStatusUE(self,HTML):
|
def CheckStatusUE(self,HTML):
|
||||||
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
|
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
|
||||||
logging.debug(f'checking status of UEs {ues}')
|
logging.debug(f'checking status of UEs {ues}')
|
||||||
messages = []
|
messages = []
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor:
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
@@ -590,7 +767,7 @@ class OaiCiTest():
|
|||||||
if self.ue_ids == []:
|
if self.ue_ids == []:
|
||||||
raise Exception("no module names in self.ue_ids provided")
|
raise Exception("no module names in self.ue_ids provided")
|
||||||
|
|
||||||
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
|
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
|
||||||
logging.debug(ues)
|
logging.debug(ues)
|
||||||
pingLock = Lock()
|
pingLock = Lock()
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor:
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
@@ -604,372 +781,65 @@ class OaiCiTest():
|
|||||||
HTML.CreateHtmlTestRowQueue(self.ping_args, 'KO', messages)
|
HTML.CreateHtmlTestRowQueue(self.ping_args, 'KO', messages)
|
||||||
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
|
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
|
||||||
|
|
||||||
def Iperf_ComputeTime(self):
|
def Iperf_Module(self, EPC, ue, svr, RAN, idx, ue_num, CONTAINERS):
|
||||||
result = re.search('-t (?P<iperf_time>\d+)', str(self.iperf_args))
|
|
||||||
if result is None:
|
|
||||||
logging.debug('\u001B[1;37;41m Iperf time Not Found! \u001B[0m')
|
|
||||||
sys.exit(1)
|
|
||||||
return result.group('iperf_time')
|
|
||||||
|
|
||||||
def Iperf_ComputeModifiedBW(self, idx, ue_num):
|
|
||||||
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(self.iperf_args))
|
|
||||||
if result is None:
|
|
||||||
logging.error('\u001B[1;37;41m Iperf bandwidth Not Found! \u001B[0m')
|
|
||||||
sys.exit(1)
|
|
||||||
iperf_bandwidth = result.group('iperf_bandwidth')
|
|
||||||
if self.iperf_profile == 'balanced':
|
|
||||||
iperf_bandwidth_new = float(iperf_bandwidth)/ue_num
|
|
||||||
if self.iperf_profile == 'single-ue':
|
|
||||||
iperf_bandwidth_new = float(iperf_bandwidth)
|
|
||||||
if self.iperf_profile == 'unbalanced':
|
|
||||||
# residual is 2% of max bw
|
|
||||||
residualBW = float(iperf_bandwidth) / 50
|
|
||||||
if idx == 0:
|
|
||||||
iperf_bandwidth_new = float(iperf_bandwidth) - ((ue_num - 1) * residualBW)
|
|
||||||
else:
|
|
||||||
iperf_bandwidth_new = residualBW
|
|
||||||
iperf_bandwidth_str = f'-b {iperf_bandwidth}'
|
|
||||||
iperf_bandwidth_str_new = f"-b {'%.2f' % iperf_bandwidth_new}"
|
|
||||||
result = re.sub(iperf_bandwidth_str, iperf_bandwidth_str_new, str(self.iperf_args))
|
|
||||||
if result is None:
|
|
||||||
logging.error('\u001B[1;37;41m Calculate Iperf bandwidth Failed! \u001B[0m')
|
|
||||||
sys.exit(1)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def Iperf_analyzeV2TCPOutput(self, SSH, filename):
|
|
||||||
|
|
||||||
SSH.command(f'awk -f /tmp/tcp_iperf_stats.awk {filename}', '\$', 5)
|
|
||||||
result = re.search('Avg Bitrate : (?P<average>[0-9\.]+ Mbits\/sec) Max Bitrate : (?P<maximum>[0-9\.]+ Mbits\/sec) Min Bitrate : (?P<minimum>[0-9\.]+ Mbits\/sec)', SSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
avgbitrate = result.group('average')
|
|
||||||
maxbitrate = result.group('maximum')
|
|
||||||
minbitrate = result.group('minimum')
|
|
||||||
msg = 'TCP Stats :\n'
|
|
||||||
if avgbitrate is not None:
|
|
||||||
msg += f'Avg Bitrate : {avgbitrate} \n'
|
|
||||||
if maxbitrate is not None:
|
|
||||||
msg += f'Max Bitrate : {maxbitrate} \n'
|
|
||||||
if minbitrate is not None:
|
|
||||||
msg += f'Min Bitrate : {minbitrate} \n'
|
|
||||||
return (True, msg)
|
|
||||||
|
|
||||||
return (False, "could not analyze log file")
|
|
||||||
|
|
||||||
def Iperf_analyzeV2Output(self, iperf_real_options, EPC, SSH):
|
|
||||||
|
|
||||||
result = re.search('-u', str(iperf_real_options))
|
|
||||||
if result is None:
|
|
||||||
filename = f'{EPC.SourceCodePath}/scripts/iperf_{self.testCase_id}_{device_id}.log'
|
|
||||||
response = self.Iperf_analyzeV2TCPOutput(SSH, filename)
|
|
||||||
return response
|
|
||||||
|
|
||||||
result = re.search('Server Report:', SSH.getBefore())
|
|
||||||
if result is None:
|
|
||||||
result = re.search('read failed: Connection refused', SSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
msg = 'Could not connect to iperf server!'
|
|
||||||
return (False, msg)
|
|
||||||
else:
|
|
||||||
msg = 'Server Report and Connection refused Not Found!'
|
|
||||||
return (False, msg)
|
|
||||||
# Computing the requested bandwidth in float
|
|
||||||
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(iperf_real_options))
|
|
||||||
if result is not None:
|
|
||||||
req_bandwidth = result.group('iperf_bandwidth')
|
|
||||||
req_bw = float(req_bandwidth)
|
|
||||||
result = re.search('-b [0-9\.]+K', str(iperf_real_options))
|
|
||||||
if result is not None:
|
|
||||||
req_bandwidth = '%.1f Kbits/sec' % req_bw
|
|
||||||
req_bw = req_bw * 1000
|
|
||||||
result = re.search('-b [0-9\.]+M', str(iperf_real_options))
|
|
||||||
if result is not None:
|
|
||||||
req_bandwidth = '%.1f Mbits/sec' % req_bw
|
|
||||||
req_bw = req_bw * 1000000
|
|
||||||
result = re.search('-b [0-9\.]+G', str(iperf_real_options))
|
|
||||||
if result is not None:
|
|
||||||
req_bandwidth = '%.1f Gbits/sec' % req_bw
|
|
||||||
req_bw = req_bw * 1000000000
|
|
||||||
|
|
||||||
result = re.search('Server Report:\r\n(?:|\[ *\d+\].*) (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(\d+\/..\d+) +(\((?P<packetloss>[0-9\.]+)%\))', SSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
bitrate = result.group('bitrate')
|
|
||||||
packetloss = result.group('packetloss')
|
|
||||||
jitter = result.group('jitter')
|
|
||||||
|
|
||||||
iperfStatus = True
|
|
||||||
msg = f'Req Bitrate : {req_bandwidth} \n'
|
|
||||||
if bitrate is not None:
|
|
||||||
msg += f'Bitrate : {bitrate} \n'
|
|
||||||
result = re.search('(?P<real_bw>[0-9\.]+) [KMG]bits/sec', str(bitrate))
|
|
||||||
if result is not None:
|
|
||||||
actual_bw = float(str(result.group('real_bw')))
|
|
||||||
result = re.search('[0-9\.]+ K', bitrate)
|
|
||||||
if result is not None:
|
|
||||||
actual_bw = actual_bw * 1000
|
|
||||||
result = re.search('[0-9\.]+ M', bitrate)
|
|
||||||
if result is not None:
|
|
||||||
actual_bw = actual_bw * 1000000
|
|
||||||
result = re.search('[0-9\.]+ G', bitrate)
|
|
||||||
if result is not None:
|
|
||||||
actual_bw = actual_bw * 1000000000
|
|
||||||
br_loss = 100 * actual_bw / req_bw
|
|
||||||
bitperf = '%.2f ' % br_loss
|
|
||||||
msg += f'Bitrate Perf: {bitperf} %\n'
|
|
||||||
if packetloss is not None:
|
|
||||||
msg += f'Packet Loss : {packetloss} %\n'
|
|
||||||
if float(packetloss) > float(self.iperf_packetloss_threshold):
|
|
||||||
msg += 'Packet Loss too high!\n'
|
|
||||||
iperfStatus = False
|
|
||||||
if jitter is not None:
|
|
||||||
msg += f'Jitter : {jitter} \n'
|
|
||||||
|
|
||||||
return (iperfStatus, msg)
|
|
||||||
else:
|
|
||||||
return (False, "could not analyze server log")
|
|
||||||
|
|
||||||
|
|
||||||
def Iperf_analyzeV2BIDIR(self, server_filename, client_filename):
|
|
||||||
|
|
||||||
#check the 2 files are here
|
|
||||||
if (not os.path.isfile(client_filename)) or (not os.path.isfile(server_filename)):
|
|
||||||
return (False, 'Bidir TCP: Client or Server Log File not present')
|
|
||||||
#check the 2 files size
|
|
||||||
if (os.path.getsize(client_filename)==0) and (os.path.getsize(server_filename)==0):
|
|
||||||
return (False, 'Bidir TCP: Client and Server Log File are empty')
|
|
||||||
|
|
||||||
report_msg = ''
|
|
||||||
#if client is not empty, all the info is in, otherwise we ll use the server file to get some partial info
|
|
||||||
client_filesize = os.path.getsize(client_filename)
|
|
||||||
if client_filesize == 0:
|
|
||||||
report_msg+="Client file (UE) present but !!! EMPTY !!!\n"
|
|
||||||
report_msg+="Partial report from server file"
|
|
||||||
filename = server_filename
|
|
||||||
else :
|
|
||||||
report_msg+="Report from client file (UE)"
|
|
||||||
filename = client_filename
|
|
||||||
|
|
||||||
report=[] #used to check if relevant lines were found
|
|
||||||
|
|
||||||
with open(filename, 'r') as f_client:
|
|
||||||
for line in f_client.readlines():
|
|
||||||
result = re.search(rf'^\[\s+\d+\](?P<direction>\[.+\]).*\s+(?P<bitrate>[0-9\.]+ [KMG]bits\/sec).*\s+(?P<role>\bsender|receiver\b)', str(line))
|
|
||||||
if result is not None:
|
|
||||||
report.append(str(line))
|
|
||||||
report_msg += f"\n{result.group('role')} {result.group('direction')}\t: {result.group('bitrate')}"
|
|
||||||
if len(report) == 0:
|
|
||||||
return (False, 'Bidir TCP: Could not analyze from Log file')
|
|
||||||
|
|
||||||
return (True, report_msg)
|
|
||||||
|
|
||||||
def Iperf_analyzeV2Server(self, iperf_real_options, filename, type):
|
|
||||||
if (not os.path.isfile(filename)):
|
|
||||||
return (False, 'Could not analyze from server log')
|
|
||||||
# Computing the requested bandwidth in float
|
|
||||||
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(iperf_real_options))
|
|
||||||
if result is None:
|
|
||||||
return (False, 'Could not compute Iperf bandwidth!')
|
|
||||||
else:
|
|
||||||
req_bandwidth = result.group('iperf_bandwidth')
|
|
||||||
req_bw = float(req_bandwidth)
|
|
||||||
result = re.search('-b [0-9\.]+K', str(iperf_real_options))
|
|
||||||
if result is not None:
|
|
||||||
req_bandwidth = '%.1f Kbits/sec' % req_bw
|
|
||||||
req_bw = req_bw * 1000
|
|
||||||
result = re.search('-b [0-9\.]+M', str(iperf_real_options))
|
|
||||||
if result is not None:
|
|
||||||
req_bandwidth = '%.1f Mbits/sec' % req_bw
|
|
||||||
req_bw = req_bw * 1000000
|
|
||||||
result = re.search('-b [0-9\.]+G', str(iperf_real_options))
|
|
||||||
if result is not None:
|
|
||||||
req_bandwidth = '%.1f Gbits/sec' % req_bw
|
|
||||||
req_bw = req_bw * 1000000000
|
|
||||||
|
|
||||||
server_file = open(filename, 'r')
|
|
||||||
br_sum = 0.0
|
|
||||||
ji_sum = 0.0
|
|
||||||
pl_sum = 0
|
|
||||||
ps_sum = 0
|
|
||||||
row_idx = 0
|
|
||||||
for line in server_file.readlines():
|
|
||||||
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('^\[\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')
|
|
||||||
jitter = result.group('jitter')
|
|
||||||
packetlost = result.group('lostPack')
|
|
||||||
packetsent = result.group('sentPack')
|
|
||||||
br = bitrate.split(' ')
|
|
||||||
ji = jitter.split(' ')
|
|
||||||
row_idx = row_idx + 1
|
|
||||||
curr_br = float(br[0])
|
|
||||||
pl_sum = pl_sum + int(packetlost)
|
|
||||||
ps_sum = ps_sum + int(packetsent)
|
|
||||||
if (br[1] == 'Kbits/sec'):
|
|
||||||
curr_br = curr_br * 1000
|
|
||||||
if (br[1] == 'Mbits/sec'):
|
|
||||||
curr_br = curr_br * 1000 * 1000
|
|
||||||
br_sum = curr_br + br_sum
|
|
||||||
ji_sum = float(ji[0]) + ji_sum
|
|
||||||
|
|
||||||
server_file.close()
|
|
||||||
|
|
||||||
if (row_idx > 0):
|
|
||||||
br_sum = br_sum / row_idx
|
|
||||||
ji_sum = ji_sum / row_idx
|
|
||||||
br_loss = 100 * br_sum / req_bw
|
|
||||||
if (br_sum > 1000):
|
|
||||||
br_sum = br_sum / 1000
|
|
||||||
if (br_sum > 1000):
|
|
||||||
br_sum = br_sum / 1000
|
|
||||||
bitrate = '%.2f Mbits/sec' % br_sum
|
|
||||||
else:
|
|
||||||
bitrate = '%.2f Kbits/sec' % br_sum
|
|
||||||
else:
|
|
||||||
bitrate = '%.2f bits/sec' % br_sum
|
|
||||||
bitperf = '%.2f ' % br_loss
|
|
||||||
bitperf += '%'
|
|
||||||
jitter = '%.2f ms' % (ji_sum)
|
|
||||||
if (ps_sum > 0):
|
|
||||||
pl = float(100 * pl_sum / ps_sum)
|
|
||||||
packetloss = '%2.1f ' % (pl)
|
|
||||||
packetloss += '%'
|
|
||||||
|
|
||||||
result = float(br_loss) >= float(self.iperf_bitrate_threshold) and float(pl) <= float(self.iperf_packetloss_threshold)
|
|
||||||
req_msg = f'Req Bitrate : {req_bandwidth}'
|
|
||||||
bir_msg = f'Bitrate : {bitrate}'
|
|
||||||
brl_msg = f'Bitrate Perf: {bitperf}'
|
|
||||||
if float(br_loss) < float(self.iperf_bitrate_threshold):
|
|
||||||
brl_msg += f' (too low! <{self.iperf_bitrate_threshold}%)'
|
|
||||||
jit_msg = f'Jitter : {jitter}'
|
|
||||||
pal_msg = f'Packet Loss : {packetloss}'
|
|
||||||
if float(pl) > float(self.iperf_packetloss_threshold):
|
|
||||||
pal_msg += f' (too high! >{self.iperf_packetloss_threshold}%)'
|
|
||||||
return (result, f'{req_msg}\n{bir_msg}\n{brl_msg}\n{jit_msg}\n{pal_msg}')
|
|
||||||
else:
|
|
||||||
return (False, 'Could not analyze from server log')
|
|
||||||
|
|
||||||
def Iperf_Module(self, EPC, ue, RAN, idx, ue_num):
|
|
||||||
ueIP = ue.getIP()
|
ueIP = ue.getIP()
|
||||||
if not ueIP:
|
if not ueIP:
|
||||||
return (False, f"UE {ue.getName()} has no IP address")
|
return (False, f"UE {ue.getName()} has no IP address")
|
||||||
SSH = sshconnection.SSHConnection()
|
svrIP = svr.getIP()
|
||||||
server_filename = f'iperf_server_{self.testCase_id}_{ue.getName()}.log'
|
if not svrIP:
|
||||||
client_filename = f'iperf_client_{self.testCase_id}_{ue.getName()}.log'
|
return (False, f"Iperf server {ue.getName()} has no IP address")
|
||||||
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.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
|
||||||
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 None:
|
|
||||||
raise Exception("could not corver prod-trf-gen IP address")
|
|
||||||
cn_target_ip = result.group('trf_ip_addr')
|
|
||||||
SSH.close()
|
|
||||||
cn_iperf_prefix = "docker exec prod-trf-gen" # -w /iperf-2.0.13 necessary?
|
|
||||||
elif (re.match('OC-OAI-CN5G', EPC.Type, re.IGNORECASE)):
|
|
||||||
cn_target_ip = "172.21.6.102"
|
|
||||||
else: # lteboix, sabox
|
|
||||||
cn_target_ip = "192.172.0.1"
|
|
||||||
cn_iperf_prefix = ""
|
|
||||||
|
|
||||||
|
runIperf3Server = svr.getRunIperf3Server()
|
||||||
iperf_opt = self.iperf_args
|
iperf_opt = self.iperf_args
|
||||||
|
jsonReport = "--json"
|
||||||
|
serverReport = ""
|
||||||
udpIperf = re.search('-u', iperf_opt) is not None
|
udpIperf = re.search('-u', iperf_opt) is not None
|
||||||
udpSwitch = '-u' if udpIperf else ''
|
bidirIperf = re.search('--bidir', iperf_opt) is not None
|
||||||
if udpIperf:
|
client_filename = f'iperf_client_{self.testCase_id}_{ue.getName()}.log'
|
||||||
iperf_opt = self.Iperf_ComputeModifiedBW(idx, ue_num)
|
server_filename = f'iperf_server_{self.testCase_id}_{ue.getName()}.log'
|
||||||
logging.info(f'iperf options modified from "{self.iperf_args}" to "{iperf_opt}" for {ue.getName()}')
|
ymlPath = CONTAINERS.yamlPath[0].split('/')
|
||||||
iperf_time = int(self.Iperf_ComputeTime())
|
logPath = f'../cmake_targets/log/{ymlPath[1]}'
|
||||||
port = f'-p {5001+idx}'
|
|
||||||
# hack: the ADB UEs don't have iperf in $PATH, so we need to hardcode for the moment
|
|
||||||
iperf_ue = '/data/local/tmp/iperf' if re.search('adb', ue.getName()) else 'iperf'
|
|
||||||
|
|
||||||
|
if udpIperf:
|
||||||
|
iperf_opt = Iperf_ComputeModifiedBW(idx, ue_num, self.iperf_profile, self.iperf_args)
|
||||||
|
# note: for UDP testing we don't want to use json report - reports 0 Mbps received bitrate
|
||||||
|
jsonReport = ""
|
||||||
|
# note: enable server report collection on the UE side, no need to store and collect server report separately on the server side
|
||||||
|
serverReport = "--get-server-output"
|
||||||
|
logging.info(f'iperf options modified from "{self.iperf_args}" to "{iperf_opt}" for {ue.getName()}')
|
||||||
|
iperf_time = Iperf_ComputeTime(self.iperf_args)
|
||||||
|
# hack: the ADB UEs don't have iperf in $PATH, so we need to hardcode for the moment
|
||||||
|
iperf_ue = '/data/local/tmp/iperf3' if re.search('adb', ue.getName()) else 'iperf3'
|
||||||
ue_header = f'UE {ue.getName()} ({ueIP})'
|
ue_header = f'UE {ue.getName()} ({ueIP})'
|
||||||
|
|
||||||
if self.iperf_direction == "DL":
|
if svr.getName() == "rfsim4g_enb_fembms":
|
||||||
logging.debug("Iperf in DL requested")
|
with cls_cmd.getConnection(ue.getHost()) as cmd_ue, cls_cmd.getConnection(EPC.IPAddress) as cmd_svr:
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
port = 5002 + idx
|
||||||
cmd.run(f'rm {server_filename}')
|
cmd_ue.run(f'{ue.getCmdPrefix()} iperf -B {ueIP} -s -u -i1 >> {server_filename} &', timeout=iperf_time*1.5)
|
||||||
cmd.run(f'{ue.getCmdPrefix()} {iperf_ue} -s -B {ueIP} {udpSwitch} -i 1 -t {iperf_time * 1.5} {port} &> /tmp/{server_filename} &')
|
cmd_svr.run(f'{svr.getCmdPrefix()} iperf -c {ueIP} -B {svrIP} {iperf_opt} -i1 2>&1 | tee {client_filename}', timeout=iperf_time*1.5)
|
||||||
cmd.close()
|
cmd_ue.run(f'cp {client_filename} {logPath}/{client_filename}')
|
||||||
|
cmd_ue.run(f'cp {server_filename} {logPath}/{server_filename}')
|
||||||
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
status, msg = Iperf_analyzeV2UDP(server_filename, self.iperf_bitrate_threshold, self.iperf_packetloss_threshold, iperf_opt)
|
||||||
cmd.run(f'rm {EPC.SourceCodePath}/{client_filename}')
|
else:
|
||||||
cmd.run(f'{cn_iperf_prefix} iperf -c {ueIP} {iperf_opt} {port} &> {EPC.SourceCodePath}/{client_filename}', timeout=iperf_time * 1.5)
|
with cls_cmd.getConnection(ue.getHost()) as cmd_ue, cls_cmd.getConnection(EPC.IPAddress) as cmd_svr:
|
||||||
cmd.copyin(f'{EPC.SourceCodePath}/{client_filename}', client_filename)
|
port = 5002 + idx
|
||||||
cmd.close()
|
# note: some core setups start an iperf3 server automatically, indicated in ci_infra by runIperf3Server: False`
|
||||||
|
if runIperf3Server:
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
cmd_svr.run(f'{svr.getCmdPrefix()} nohup iperf3 -s -B {svrIP} -p {port} -1 {jsonReport} &', timeout=iperf_time*1.5)
|
||||||
cmd.copyin(f'/tmp/{server_filename}', server_filename)
|
cmd_ue.run(f'rm /tmp/{client_filename}', reportNonZero=False)
|
||||||
cmd.close()
|
cmd_ue.run(f'{ue.getCmdPrefix()} {iperf_ue} -B {ueIP} -c {svrIP} -p {port} {iperf_opt} {jsonReport} {serverReport} -O 5 >> /tmp/{client_filename}', timeout=iperf_time*1.5)
|
||||||
|
if svr.getHost() == 'localhost':
|
||||||
|
cmd_ue.run(f'mkdir -p {logPath}')
|
||||||
|
cmd_ue.run(f'cp /tmp/{client_filename} {logPath}/{client_filename}')
|
||||||
|
cmd_ue.run(f'cp /tmp/{client_filename} {client_filename}')
|
||||||
|
else:
|
||||||
|
cmd_ue.copyin(f'/tmp/{client_filename}', client_filename)
|
||||||
if udpIperf:
|
if udpIperf:
|
||||||
status, msg = self.Iperf_analyzeV2Server(iperf_opt, server_filename, 1)
|
status, msg = Iperf_analyzeV3UDP(client_filename, self.iperf_bitrate_threshold, self.iperf_packetloss_threshold)
|
||||||
|
elif bidirIperf:
|
||||||
|
status, msg = Iperf_analyzeV3BIDIRJson(client_filename)
|
||||||
else:
|
else:
|
||||||
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
status, msg = Iperf_analyzeV3TCPJson(client_filename, self.iperf_tcp_rate_target)
|
||||||
status, msg = self.Iperf_analyzeV2TCPOutput(cmd, f"{EPC.SourceCodePath}/{client_filename}")
|
|
||||||
cmd.close()
|
|
||||||
|
|
||||||
elif self.iperf_direction == "UL":
|
|
||||||
logging.debug("Iperf in UL requested")
|
|
||||||
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
|
||||||
cmd.run(f'rm {EPC.SourceCodePath}/{server_filename}')
|
|
||||||
cmd.run(f'{cn_iperf_prefix} iperf -s {udpSwitch} -t {iperf_time * 1.5} {port} &> {EPC.SourceCodePath}/{server_filename} &')
|
|
||||||
cmd.close()
|
|
||||||
|
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
|
||||||
cmd.run(f'rm /tmp/{client_filename}')
|
|
||||||
cmd.run(f'{ue.getCmdPrefix()} {iperf_ue} -B {ueIP} -c {cn_target_ip} {iperf_opt} {port} &> /tmp/{client_filename}', timeout=iperf_time*1.5)
|
|
||||||
cmd.copyin(f'/tmp/{client_filename}', client_filename)
|
|
||||||
cmd.close()
|
|
||||||
|
|
||||||
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
|
||||||
cmd.copyin(f'{EPC.SourceCodePath}/{server_filename}', server_filename)
|
|
||||||
cmd.close()
|
|
||||||
|
|
||||||
if udpIperf:
|
|
||||||
status, msg = self.Iperf_analyzeV2Server(iperf_opt, server_filename, 1)
|
|
||||||
else:
|
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
|
||||||
status, msg = self.Iperf_analyzeV2TCPOutput(cmd, f"/tmp/{client_filename}")
|
|
||||||
cmd.close()
|
|
||||||
|
|
||||||
elif self.iperf_direction=="BIDIR":
|
|
||||||
logging.debug("Bi-directional iperf requested")
|
|
||||||
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
|
||||||
cmd.run(f'rm {EPC.SourceCodePath}/{server_filename}')
|
|
||||||
cmd.run(f'{cn_iperf_prefix} iperf3 -s -i 1 -1 {port} &> {EPC.SourceCodePath}/{server_filename} &')
|
|
||||||
cmd.close()
|
|
||||||
|
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
|
||||||
cmd.run(f'rm /tmp/{client_filename}')
|
|
||||||
cmd.run(f'iperf3 -B {ueIP} -c {cn_target_ip} {iperf_opt} {port} &> /tmp/{client_filename}', timeout=iperf_time*1.5)
|
|
||||||
cmd.copyin(f'/tmp/{client_filename}', client_filename)
|
|
||||||
cmd.close()
|
|
||||||
|
|
||||||
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
|
||||||
cmd.copyin(f'{EPC.SourceCodePath}/{server_filename}', server_filename)
|
|
||||||
cmd.close()
|
|
||||||
|
|
||||||
status, msg = self.Iperf_analyzeV2BIDIR(server_filename, client_filename)
|
|
||||||
|
|
||||||
elif self.iperf_direction == "IPERF3":
|
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
|
||||||
cmd.run(f'rm /tmp/{server_filename}', reportNonZero=False)
|
|
||||||
port = f'{5002+idx}'
|
|
||||||
cmd.run(f'{ue.getCmdPrefix()} iperf3 -B {ueIP} -c {cn_target_ip} -p {port} {iperf_opt} --get-server-output &> /tmp/{server_filename}', timeout=iperf_time*1.5)
|
|
||||||
cmd.copyin(f'/tmp/{server_filename}', server_filename)
|
|
||||||
cmd.close()
|
|
||||||
if udpIperf:
|
|
||||||
status, msg = self.Iperf_analyzeV2Server(iperf_opt, server_filename, 1)
|
|
||||||
else:
|
|
||||||
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
|
||||||
status, msg = self.Iperf_analyzeV2TCPOutput(cmd, f'/tmp/{server_filename}')
|
|
||||||
cmd.close()
|
|
||||||
|
|
||||||
else :
|
|
||||||
raise Exception("Incorrect or missing IPERF direction in XML")
|
|
||||||
|
|
||||||
logging.info(f'\u001B[1;37;45m iperf result for {ue_header}\u001B[0m')
|
logging.info(f'\u001B[1;37;45m iperf result for {ue_header}\u001B[0m')
|
||||||
for l in msg.split('\n'):
|
for l in msg.split('\n'):
|
||||||
@@ -988,12 +858,16 @@ class OaiCiTest():
|
|||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
|
|
||||||
logging.debug(f'Iperf: iperf_args "{self.iperf_args}" iperf_direction "{self.iperf_direction}" iperf_packetloss_threshold "{self.iperf_packetloss_threshold}" iperf_bitrate_threshold "{self.iperf_bitrate_threshold}" iperf_profile "{self.iperf_profile}" iperf_options "{self.iperf_options}"')
|
logging.debug(f'Iperf: iperf_args "{self.iperf_args}" iperf_packetloss_threshold "{self.iperf_packetloss_threshold}" iperf_bitrate_threshold "{self.iperf_bitrate_threshold}" iperf_profile "{self.iperf_profile}" iperf_options "{self.iperf_options}"')
|
||||||
|
|
||||||
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
|
if self.ue_ids == [] or self.svr_id == None:
|
||||||
|
raise Exception("no module names in self.ue_ids or/and self.svr_id provided")
|
||||||
|
|
||||||
|
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
|
||||||
|
svr = cls_module.Module_UE(self.svr_id)
|
||||||
logging.debug(ues)
|
logging.debug(ues)
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor:
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
futures = [executor.submit(self.Iperf_Module, EPC, ue, RAN, i, len(ues)) for i, ue in enumerate(ues)]
|
futures = [executor.submit(self.Iperf_Module, EPC, ue, svr, RAN, i, len(ues), CONTAINERS) for i, ue in enumerate(ues)]
|
||||||
results = [f.result() for f in futures]
|
results = [f.result() for f in futures]
|
||||||
# each result in results is a tuple, first member goes to successes, second to messages
|
# each result in results is a tuple, first member goes to successes, second to messages
|
||||||
successes, messages = map(list, zip(*results))
|
successes, messages = map(list, zip(*results))
|
||||||
@@ -1127,15 +1001,15 @@ class OaiCiTest():
|
|||||||
mib_found = True
|
mib_found = True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f'\033[91m MIB marker was not found \033[0m')
|
logging.error(f'\033[91m MIB marker was not found \033[0m')
|
||||||
result = re.search("Measured Carrier Frequency (?P<measured_carrier_frequency>\d{1,15}) Hz", str(line))
|
result = re.search("Initial sync: pbch decoded sucessfully", str(line))
|
||||||
if result is not None and (not frequency_found):
|
if result is not None and (not frequency_found):
|
||||||
try:
|
try:
|
||||||
mibMsg = f"Measured Carrier Frequency = {result.group('measured_carrier_frequency')} Hz"
|
mibMsg = f"UE decoded PBCH successfully"
|
||||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + mibMsg + '\n'
|
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + mibMsg + '\n'
|
||||||
logging.debug(f'\033[94m{mibMsg}\033[0m')
|
logging.debug(f'\033[94m{mibMsg}\033[0m')
|
||||||
frequency_found = True
|
frequency_found = True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f'\033[91m Measured Carrier Frequency not found \033[0m')
|
logging.error(f'\033[91m UE did not find PBCH\033[0m')
|
||||||
result = re.search("PLMN MCC (?P<mcc>\d{1,3}), MNC (?P<mnc>\d{1,3}), TAC", str(line))
|
result = re.search("PLMN MCC (?P<mcc>\d{1,3}), MNC (?P<mnc>\d{1,3}), TAC", str(line))
|
||||||
if result is not None and (not plmn_found):
|
if result is not None and (not plmn_found):
|
||||||
try:
|
try:
|
||||||
@@ -1272,7 +1146,7 @@ class OaiCiTest():
|
|||||||
return global_status
|
return global_status
|
||||||
|
|
||||||
def TerminateUE(self, HTML):
|
def TerminateUE(self, HTML):
|
||||||
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
|
ues = [cls_module.Module_UE(n.strip()) for n in self.ue_ids]
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor:
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
futures = [executor.submit(ue.terminate) for ue in ues]
|
futures = [executor.submit(ue.terminate) for ue in ues]
|
||||||
archives = [f.result() for f in futures]
|
archives = [f.result() for f in futures]
|
||||||
@@ -1404,7 +1278,7 @@ class OaiCiTest():
|
|||||||
time.sleep(self.idle_sleep_time)
|
time.sleep(self.idle_sleep_time)
|
||||||
HTML.CreateHtmlTestRow(str(self.idle_sleep_time) + ' sec', 'OK', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRow(str(self.idle_sleep_time) + ' sec', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
|
||||||
def X2_Status(self, idx, fileName):
|
def X2_Status(self, idx, fileName, EPC):
|
||||||
cmd = "curl --silent http://" + EPC.IPAddress + ":9999/stats | jq '.' > " + fileName
|
cmd = "curl --silent http://" + EPC.IPAddress + ":9999/stats | jq '.' > " + fileName
|
||||||
message = cmd + '\n'
|
message = cmd + '\n'
|
||||||
logging.debug(cmd)
|
logging.debug(cmd)
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ L1s = (
|
|||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
prach_dtx_threshold = 200;
|
prach_dtx_threshold = 200;
|
||||||
pucch0_dtx_threshold = 150;
|
pucch0_dtx_threshold = 100;
|
||||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
+2
-15
@@ -268,10 +268,11 @@ def GetParametersFromXML(action):
|
|||||||
elif action == 'Iperf':
|
elif action == 'Iperf':
|
||||||
CiTestObj.iperf_args = test.findtext('iperf_args')
|
CiTestObj.iperf_args = test.findtext('iperf_args')
|
||||||
CiTestObj.ue_ids = test.findtext('id').split(' ')
|
CiTestObj.ue_ids = test.findtext('id').split(' ')
|
||||||
CiTestObj.iperf_direction = test.findtext('direction')
|
CiTestObj.svr_id = test.findtext('svr_id') or None
|
||||||
CiTestObj.iperf_packetloss_threshold = test.findtext('iperf_packetloss_threshold')
|
CiTestObj.iperf_packetloss_threshold = test.findtext('iperf_packetloss_threshold')
|
||||||
CiTestObj.iperf_bitrate_threshold = test.findtext('iperf_bitrate_threshold') or '90'
|
CiTestObj.iperf_bitrate_threshold = test.findtext('iperf_bitrate_threshold') or '90'
|
||||||
CiTestObj.iperf_profile = test.findtext('iperf_profile') or 'balanced'
|
CiTestObj.iperf_profile = test.findtext('iperf_profile') or 'balanced'
|
||||||
|
CiTestObj.iperf_tcp_rate_target = test.findtext('iperf_tcp_rate_target') or None
|
||||||
if CiTestObj.iperf_profile != 'balanced' and CiTestObj.iperf_profile != 'unbalanced' and CiTestObj.iperf_profile != 'single-ue':
|
if CiTestObj.iperf_profile != 'balanced' and CiTestObj.iperf_profile != 'unbalanced' and CiTestObj.iperf_profile != 'single-ue':
|
||||||
logging.error(f'test-case has wrong profile {CiTestObj.iperf_profile}, forcing balanced')
|
logging.error(f'test-case has wrong profile {CiTestObj.iperf_profile}, forcing balanced')
|
||||||
CiTestObj.iperf_profile = 'balanced'
|
CiTestObj.iperf_profile = 'balanced'
|
||||||
@@ -375,20 +376,6 @@ def GetParametersFromXML(action):
|
|||||||
if (string_field is not None):
|
if (string_field is not None):
|
||||||
CONTAINERS.ran_checkers['u_retx_th'] = [float(x) for x in string_field.split(',')]
|
CONTAINERS.ran_checkers['u_retx_th'] = [float(x) for x in string_field.split(',')]
|
||||||
|
|
||||||
elif action == 'IperfFromContainer':
|
|
||||||
string_field = test.findtext('server_container_name')
|
|
||||||
if (string_field is not None):
|
|
||||||
CONTAINERS.svrContName = string_field
|
|
||||||
string_field = test.findtext('server_options')
|
|
||||||
if (string_field is not None):
|
|
||||||
CONTAINERS.svrOptions = string_field
|
|
||||||
string_field = test.findtext('client_container_name')
|
|
||||||
if (string_field is not None):
|
|
||||||
CONTAINERS.cliContName = string_field
|
|
||||||
string_field = test.findtext('client_options')
|
|
||||||
if (string_field is not None):
|
|
||||||
CONTAINERS.cliOptions = string_field
|
|
||||||
|
|
||||||
elif action == 'Run_LDPCTest' or action == 'Run_NRulsimTest' or action == 'Run_LDPCt1Test':
|
elif action == 'Run_LDPCTest' or action == 'Run_NRulsimTest' or action == 'Run_LDPCt1Test':
|
||||||
ldpc.runargs = test.findtext('physim_run_args')
|
ldpc.runargs = test.findtext('physim_run_args')
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,6 @@
|
|||||||
- Deploy_Run_PhySim
|
- Deploy_Run_PhySim
|
||||||
- DeployGenObject
|
- DeployGenObject
|
||||||
- UndeployGenObject
|
- UndeployGenObject
|
||||||
- IperfFromContainer
|
|
||||||
- StatsFromGenObject
|
- StatsFromGenObject
|
||||||
- LicenceAndFormattingCheck
|
- LicenceAndFormattingCheck
|
||||||
- Push_Local_Registry
|
- Push_Local_Registry
|
||||||
|
|||||||
@@ -105,21 +105,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030011">
|
<testCase id="030011">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf UDP Downlink</desc>
|
||||||
<server_container_name>l2sim4g-oai-lte-ue1</server_container_name>
|
<id>l2sim4g_ue</id>
|
||||||
<client_container_name>l2sim4g-trf-gen</client_container_name>
|
<svr_id>l2sim4g_ext_dn</svr_id>
|
||||||
<server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 1M -R</iperf_args>
|
||||||
<client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 1M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030012">
|
<testCase id="030012">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf UDP Uplink</desc>
|
||||||
<server_container_name>l2sim4g-trf-gen</server_container_name>
|
<id>l2sim4g_ue</id>
|
||||||
<client_container_name>l2sim4g-oai-lte-ue1</client_container_name>
|
<svr_id>l2sim4g_ext_dn</svr_id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 3M</iperf_args>
|
||||||
<client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 3M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100001">
|
<testCase id="100001">
|
||||||
|
|||||||
@@ -110,22 +110,24 @@
|
|||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030011">
|
<testCase id="030012">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf UDP DL</desc>
|
||||||
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-trf-gen</client_container_name>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
<server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
|
||||||
<client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 2M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030012">
|
<testCase id="030011">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf UDP UL</desc>
|
||||||
<server_container_name>rfsim4g-trf-gen</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 1M</iperf_args>
|
||||||
<client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 1M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
|
|||||||
@@ -91,21 +91,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030011">
|
<testCase id="030011">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf UDP DL</desc>
|
||||||
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-oai-enb</client_container_name>
|
<svr_id>rfsim4g_enb_nos1</svr_id>
|
||||||
<server_options>-B 10.0.1.2 -u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
|
||||||
<client_options>-B 10.0.1.1 -c 10.0.1.2 -u -i 1 -t 30 -b 2M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030012">
|
<testCase id="030012">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf UDP UL</desc>
|
||||||
<server_container_name>rfsim4g-oai-enb</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
|
<svr_id>rfsim4g_enb_nos1</svr_id>
|
||||||
<server_options>-B 10.0.1.1 -u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 1M</iperf_args>
|
||||||
<client_options>-B 10.0.1.2 -c 10.0.1.1 -u -i 1 -t 30 -b 1M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
|
|||||||
@@ -111,21 +111,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030011">
|
<testCase id="030011">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf UDP DL</desc>
|
||||||
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-trf-gen</client_container_name>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
<server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
|
||||||
<client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 2M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030012">
|
<testCase id="030012">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf UDP UL</desc>
|
||||||
<server_container_name>rfsim4g-trf-gen</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 1M</iperf_args>
|
||||||
<client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 1M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
|
|||||||
@@ -111,21 +111,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030011">
|
<testCase id="030011">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf UDP DL</desc>
|
||||||
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-trf-gen</client_container_name>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
<server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
|
||||||
<client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 2M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030012">
|
<testCase id="030012">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf UDP UL</desc>
|
||||||
<server_container_name>rfsim4g-trf-gen</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 1M</iperf_args>
|
||||||
<client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 1M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
|
|||||||
@@ -72,12 +72,13 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030011">
|
<testCase id="030011">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Push MBMS traffic</desc>
|
<desc>Iperf UDP DL</desc>
|
||||||
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
<id>rfsim4g_ue_fembms</id>
|
||||||
<client_container_name>rfsim4g-oai-enb</client_container_name>
|
<svr_id>rfsim4g_enb_fembms</svr_id>
|
||||||
<server_options>-sui1 -B 10.0.2.2</server_options>
|
<iperf_args>-u -t 30 -b 2M</iperf_args>
|
||||||
<client_options>-uc 10.0.2.2 -i1 -t10 -b2M -B10.0.2.1</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
|
|||||||
@@ -72,12 +72,13 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030011">
|
<testCase id="030011">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Push MBMS traffic</desc>
|
<desc>Iperf UDP DL</desc>
|
||||||
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-oai-enb</client_container_name>
|
<svr_id>rfsim4g_enb_nos1</svr_id>
|
||||||
<server_options>-sui1 -B 10.0.2.2</server_options>
|
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
|
||||||
<client_options>-uc 10.0.2.2 -i1 -t10 -b2M -B10.0.2.1</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
|
|||||||
@@ -112,21 +112,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030011">
|
<testCase id="030011">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf UDP DL</desc>
|
||||||
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-trf-gen</client_container_name>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
<server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 2M -R</iperf_args>
|
||||||
<client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 2M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030012">
|
<testCase id="030012">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf UDP UL</desc>
|
||||||
<server_container_name>rfsim4g-trf-gen</server_container_name>
|
<id>rfsim4g_ue</id>
|
||||||
<client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<iperf_args>-u -t 30 -b 1M</iperf_args>
|
||||||
<client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 1M</client_options>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
<class>Pull_Local_Registry</class>
|
<class>Pull_Local_Registry</class>
|
||||||
<desc>Pull Images from Local Registry</desc>
|
<desc>Pull Images from Local Registry</desc>
|
||||||
<test_svr_id>0</test_svr_id>
|
<test_svr_id>0</test_svr_id>
|
||||||
<images_to_pull>oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan</images_to_pull>
|
<images_to_pull>oai-gnb oai-nr-cuup oai-nr-ue</images_to_pull>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000021">
|
<testCase id="000021">
|
||||||
|
|||||||
@@ -75,21 +75,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030021">
|
<testCase id="030021">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf (DL/20Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-nr-ue</server_container_name>
|
<iperf_args>-u -b 20M -t 30 -R</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-ext-dn</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-B 12.1.1.2 -u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-c 12.1.1.2 -u -i 1 -t 10 -b 20M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030022">
|
<testCase id="030022">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf (UL/5Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-ext-dn</server_container_name>
|
<iperf_args>-u -b 5M -t 30</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-nr-ue</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 10 -b 5M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100021">
|
<testCase id="100021">
|
||||||
|
|||||||
@@ -85,21 +85,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030011">
|
<testCase id="030011">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-nr-ue</server_container_name>
|
<iperf_args>-u -b 3M -t 30 -R</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-ext-dn</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-B 12.1.1.2 -u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-c 12.1.1.2 -u -i 1 -t 30 -b 3M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030012">
|
<testCase id="030012">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf (UL/3Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-ext-dn</server_container_name>
|
<iperf_args>-u -b 3M -t 30</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-nr-ue</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 30 -b 3M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
|
|||||||
@@ -180,21 +180,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030001">
|
<testCase id="030001">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-nr-ue</server_container_name>
|
<iperf_args>-u -b 3M -t 30 -R</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-ext-dn</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-B 12.1.1.2 -u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-c 12.1.1.2 -u -i 1 -t 30 -b 3M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030002">
|
<testCase id="030002">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-ext-dn</server_container_name>
|
<iperf_args>-u -b 1M -t 30</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-nr-ue</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 30 -b 1M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="333333">
|
<testCase id="333333">
|
||||||
|
|||||||
@@ -85,21 +85,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030001">
|
<testCase id="030001">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-nr-ue</server_container_name>
|
<iperf_args>-u -b 3M -t 30 -R</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-ext-dn</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-B 12.1.1.2 -u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-c 12.1.1.2 -u -i 1 -t 5 -b 3M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030002">
|
<testCase id="030002">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-ext-dn</server_container_name>
|
<iperf_args>-u -b 1M -t 30</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-nr-ue</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 5 -b 1M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100001">
|
<testCase id="100001">
|
||||||
|
|||||||
@@ -85,21 +85,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030001">
|
<testCase id="030001">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-nr-ue</server_container_name>
|
<iperf_args>-u -b 3M -t 30 -R</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-ext-dn</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-B 12.1.1.2 -u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-c 12.1.1.2 -u -i 1 -t 10 -b 3M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030002">
|
<testCase id="030002">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-ext-dn</server_container_name>
|
<iperf_args>-u -b 1M -t 30</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-nr-ue</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 10 -b 1M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100001">
|
<testCase id="100001">
|
||||||
|
|||||||
@@ -86,21 +86,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030011">
|
<testCase id="030011">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf (DL/30kbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-nr-ue</server_container_name>
|
<iperf_args>-u -b 0.03M -t 30 -R -c 10.0.1.1</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-gnb</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-sui1 -B10.0.1.2</server_options>
|
<svr_id>rfsim5g_gnb_nos1</svr_id>
|
||||||
<client_options>-uc10.0.1.2 -i1 -t10 -b30k -B10.0.1.1</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030012">
|
<testCase id="030012">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf (UL/30kbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-gnb</server_container_name>
|
<iperf_args>-u -b 0.03M -t 30 -c 10.0.1.1</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-nr-ue</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-sui1 -B10.0.1.1</server_options>
|
<svr_id>rfsim5g_gnb_nos1</svr_id>
|
||||||
<client_options>-uc10.0.1.1 -i1 -t10 -b30k -B10.0.1.2</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
|
|||||||
@@ -85,21 +85,23 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030001">
|
<testCase id="030001">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-nr-ue</server_container_name>
|
<iperf_args>-u -b 3M -t 30 -R</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-ext-dn</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-B 12.1.1.2 -u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-c 12.1.1.2 -u -i 1 -t 10 -b 3M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030002">
|
<testCase id="030002">
|
||||||
<class>IperfFromContainer</class>
|
<class>Iperf</class>
|
||||||
<desc>Iperf UDP Uplink</desc>
|
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
|
||||||
<server_container_name>rfsim5g-oai-ext-dn</server_container_name>
|
<iperf_args>-u -b 1M -t 30</iperf_args>
|
||||||
<client_container_name>rfsim5g-oai-nr-ue</client_container_name>
|
<id>rfsim5g_ue</id>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 10 -b 1M</client_options>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100001">
|
<testCase id="100001">
|
||||||
|
|||||||
@@ -118,91 +118,82 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
|
|||||||
<testCase id="040603">
|
<testCase id="040603">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 15M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040604">
|
<testCase id="040604">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 15M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040605">
|
<testCase id="040605">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
||||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 15M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040606">
|
<testCase id="040606">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_2</id>
|
<id>adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040607">
|
<testCase id="040607">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>balanced</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040641">
|
<testCase id="040641">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 9M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040642">
|
<testCase id="040642">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 9M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040643">
|
<testCase id="040643">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040644">
|
<testCase id="040644">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>balanced</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -126,62 +126,57 @@
|
|||||||
<testCase id="040633">
|
<testCase id="040633">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 15M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040634">
|
<testCase id="040634">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 15M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040636">
|
<testCase id="040636">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_2</id>
|
<id>adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040671">
|
<testCase id="040671">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 9M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040672">
|
<testCase id="040672">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 9M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040673">
|
<testCase id="040673">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -112,92 +112,83 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
|
|||||||
<testCase id="040613">
|
<testCase id="040613">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 30M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040614">
|
<testCase id="040614">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 30M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040615">
|
<testCase id="040615">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
||||||
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 30M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040616">
|
<testCase id="040616">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (10MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040617">
|
<testCase id="040617">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>balanced</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040651">
|
<testCase id="040651">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/18Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - UL/18Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 18M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 18M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040652">
|
<testCase id="040652">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/18Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (10MHz - UL/18Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 18M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 18M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040653">
|
<testCase id="040653">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (10MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040654">
|
<testCase id="040654">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -105,22 +105,22 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
|
|||||||
<testCase id="040612">
|
<testCase id="040612">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 30M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040650">
|
<testCase id="040650">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/20Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - UL/20Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 20M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 20M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -134,41 +134,38 @@
|
|||||||
<testCase id="040613">
|
<testCase id="040613">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/10Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - DL/10Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 10M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 10M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>lte_oai_ue_carabe</id>
|
<id>lte_oai_ue_carabe</id>
|
||||||
|
<svr_id>nano-cn4g</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040616">
|
<testCase id="040616">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (10MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>lte_oai_ue_carabe</id>
|
<id>lte_oai_ue_carabe</id>
|
||||||
|
<svr_id>nano-cn4g</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040651">
|
<testCase id="040651">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/10Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - UL/10Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 10M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 10M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>lte_oai_ue_carabe</id>
|
<id>lte_oai_ue_carabe</id>
|
||||||
|
<svr_id>nano-cn4g</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040654">
|
<testCase id="040654">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>lte_oai_ue_carabe</id>
|
<id>lte_oai_ue_carabe</id>
|
||||||
|
<svr_id>nano-cn4g</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -25,11 +25,29 @@
|
|||||||
<htmlTabName>Images Clean-Up</htmlTabName>
|
<htmlTabName>Images Clean-Up</htmlTabName>
|
||||||
<htmlTabIcon>trash</htmlTabIcon>
|
<htmlTabIcon>trash</htmlTabIcon>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
|
000000
|
||||||
|
111111
|
||||||
222222
|
222222
|
||||||
333333
|
333333
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000000">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy eNB</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="111111">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy LTE-UE</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma</yaml_path>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="222222">
|
<testCase id="222222">
|
||||||
<class>Clean_Test_Server_Images</class>
|
<class>Clean_Test_Server_Images</class>
|
||||||
<desc>Clean Test Images on eNB Test Server</desc>
|
<desc>Clean Test Images on eNB Test Server</desc>
|
||||||
|
|||||||
@@ -111,92 +111,84 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
|
|||||||
<testCase id="040623">
|
<testCase id="040623">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 70M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040624">
|
<testCase id="040624">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 70M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040625">
|
<testCase id="040625">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
||||||
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 70M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040626">
|
<testCase id="040626">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (20MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040627">
|
<testCase id="040627">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (20MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040661">
|
<testCase id="040661">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/12Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (20MHz - UL/12Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 12M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 12M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040662">
|
<testCase id="040662">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/17Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (20MHz - UL/17Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 17M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 17M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040663">
|
<testCase id="040663">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (20MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040664">
|
<testCase id="040664">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (20MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -119,100 +119,93 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
|
|||||||
<testCase id="040601">
|
<testCase id="040601">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 6.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040602">
|
<testCase id="040602">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 6.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040603">
|
<testCase id="040603">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 6.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040604">
|
<testCase id="040604">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040605">
|
<testCase id="040605">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
|
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040641">
|
<testCase id="040641">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040642">
|
<testCase id="040642">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040643">
|
<testCase id="040643">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040644">
|
<testCase id="040644">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040645">
|
<testCase id="040645">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)</desc>
|
<desc>iperf (5MHz - UL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -127,80 +127,72 @@
|
|||||||
<testCase id="040631">
|
<testCase id="040631">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 6.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040632">
|
<testCase id="040632">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 6.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040634">
|
<testCase id="040634">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040635">
|
<testCase id="040635">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
|
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040681">
|
<testCase id="040681">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040682">
|
<testCase id="040682">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040684">
|
<testCase id="040684">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040685">
|
<testCase id="040685">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)</desc>
|
<desc>iperf (5MHz - UL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -109,99 +109,86 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
|
|||||||
<testCase id="040601">
|
<testCase id="040601">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 6.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040606">
|
<testCase id="040606">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 6.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040603">
|
<testCase id="040603">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 6.5M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040608">
|
<testCase id="040608">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040605">
|
<testCase id="040605">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
|
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040641">
|
<testCase id="040641">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040646">
|
<testCase id="040646">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040643">
|
<testCase id="040643">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040648">
|
<testCase id="040648">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040645">
|
<testCase id="040645">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)</desc>
|
<desc>iperf (5MHz - UL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -109,100 +109,93 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml
|
|||||||
<testCase id="040611">
|
<testCase id="040611">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 13.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040612">
|
<testCase id="040612">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 13.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040613">
|
<testCase id="040613">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 13.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040614">
|
<testCase id="040614">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/TCP)(30 sec)(single-ue)</desc>
|
<desc>iperf (10MHz - DL/TCP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040615">
|
<testCase id="040615">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/TCP)(30 sec)</desc>
|
<desc>iperf (10MHz - DL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040651">
|
<testCase id="040651">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (10MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040652">
|
<testCase id="040652">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (10MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040653">
|
<testCase id="040653">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (10MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040654">
|
<testCase id="040654">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
<desc>iperf (10MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040655">
|
<testCase id="040655">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - UL/TCP)(30 sec)</desc>
|
<desc>iperf (10MHz - UL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -109,99 +109,91 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
|
|||||||
<testCase id="040621">
|
<testCase id="040621">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 13.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040622">
|
<testCase id="040622">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 13.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040623">
|
<testCase id="040623">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (20MHz - DL/13.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 13.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040624">
|
<testCase id="040624">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/TCP)(30 sec)(single-ue)</desc>
|
<desc>iperf (20MHz - DL/TCP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040625">
|
<testCase id="040625">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/TCP)(30 sec)</desc>
|
<desc>iperf (20MHz - DL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040661">
|
<testCase id="040661">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (20MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040662">
|
<testCase id="040662">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (20MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040663">
|
<testCase id="040663">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (20MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 2M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 2M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040664">
|
<testCase id="040664">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
<desc>iperf (20MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040665">
|
<testCase id="040665">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/TCP)(30 sec)</desc>
|
<desc>iperf (20MHz - UL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -111,102 +111,95 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
|
|||||||
<testCase id="040626">
|
<testCase id="040626">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 27.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040627">
|
<testCase id="040627">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 27.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040628">
|
<testCase id="040628">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 27.5M -t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040629">
|
<testCase id="040629">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/TCP)(30 sec)(single-ue)</desc>
|
<desc>iperf (20MHz - DL/TCP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040630">
|
<testCase id="040630">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - DL/TCP)(30 sec)</desc>
|
<desc>iperf (20MHz - DL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040666">
|
<testCase id="040666">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/7Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (20MHz - UL/7Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 7M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 7M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040667">
|
<testCase id="040667">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/7Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (20MHz - UL/7Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 7M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 7M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040668">
|
<testCase id="040668">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/7Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (20MHz - UL/7Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 7M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 7M -t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040669">
|
<testCase id="040669">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
<desc>iperf (20MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040670">
|
<testCase id="040670">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (20MHz - UL/TCP)(30 sec)</desc>
|
<desc>iperf (20MHz - UL/TCP)(30 sec)</desc>
|
||||||
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-t 30</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<direction>UL</direction>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>images-clean-up</htmlTabRef>
|
||||||
|
<htmlTabName>Images Clean-Up</htmlTabName>
|
||||||
|
<htmlTabIcon>trash</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
111111
|
||||||
|
222222
|
||||||
|
333333
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="111111">
|
||||||
|
<class>Detach_UE</class>
|
||||||
|
<desc>Detach UE</desc>
|
||||||
|
<id>up2</id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="222222">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy eNB</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/lte_n3xx_tdd_2x2_tm2</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="333333">
|
||||||
|
<class>Clean_Test_Server_Images</class>
|
||||||
|
<desc>Clean Test Images</desc>
|
||||||
|
<test_svr_id>0</test_svr_id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -106,23 +106,21 @@
|
|||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/26Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/26Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 26M -t 60</iperf_args>
|
<iperf_args>-u -b 26M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
|
<svr_id>porcepix-cn4g</svr_id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 7M -t 60</iperf_args>
|
<iperf_args>-u -b 7M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
|
<svr_id>porcepix-cn4g</svr_id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="010010">
|
<testCase id="010010">
|
||||||
|
|||||||
@@ -106,23 +106,21 @@
|
|||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/26Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/26Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 1M -t 60</iperf_args>
|
<iperf_args>-u -b 1M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
|
<svr_id>porcepix-cn4g</svr_id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 7M -t 60</iperf_args>
|
<iperf_args>-u -b 7M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
|
<svr_id>porcepix-cn4g</svr_id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="010010">
|
<testCase id="010010">
|
||||||
|
|||||||
@@ -186,32 +186,29 @@
|
|||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/70Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/70Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 70M -t 60 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 70M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
|
<svr_id>ltebox-nepes</svr_id>
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 8M -t 60 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 8M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
|
<svr_id>ltebox-nepes</svr_id>
|
||||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070002">
|
<testCase id="070002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 10 --bidir</iperf_args>
|
<iperf_args>-t 10 --bidir</iperf_args>
|
||||||
<direction>BIDIR</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<svr_id>ltebox-nepes</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030201">
|
<testCase id="030201">
|
||||||
|
|||||||
@@ -98,7 +98,7 @@
|
|||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/UDP/80M)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/UDP/80M)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 80M -t 30 -R</iperf_args>
|
<iperf_args>-u -b 80M -t 30 -R</iperf_args>
|
||||||
<direction>IPERF3</direction>
|
<svr_id>porcepix-cn5g</svr_id>
|
||||||
<id>sphex_quectel</id>
|
<id>sphex_quectel</id>
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/UDP/40M)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/UDP/40M)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 40M -t 30</iperf_args>
|
<iperf_args>-u -b 40M -t 30</iperf_args>
|
||||||
<direction>IPERF3</direction>
|
<svr_id>porcepix-cn5g</svr_id>
|
||||||
<id>sphex_quectel</id>
|
<id>sphex_quectel</id>
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
|
|||||||
@@ -25,12 +25,21 @@
|
|||||||
<htmlTabName>CleanUp AERIAL</htmlTabName>
|
<htmlTabName>CleanUp AERIAL</htmlTabName>
|
||||||
<htmlTabIcon>trash</htmlTabIcon>
|
<htmlTabIcon>trash</htmlTabIcon>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
|
000000
|
||||||
111111
|
111111
|
||||||
222222
|
222222
|
||||||
333333
|
333333
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000000">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy gNB</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/sa_gnb_aerial</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="111111">
|
<testCase id="111111">
|
||||||
<class>Clean_Test_Server_Images</class>
|
<class>Clean_Test_Server_Images</class>
|
||||||
<desc>Clean Test Images on Test Server</desc>
|
<desc>Clean Test Images on Test Server</desc>
|
||||||
|
|||||||
@@ -49,6 +49,8 @@
|
|||||||
000010
|
000010
|
||||||
000020
|
000020
|
||||||
002016
|
002016
|
||||||
|
000030
|
||||||
|
000040
|
||||||
000200
|
000200
|
||||||
003000
|
003000
|
||||||
004000
|
004000
|
||||||
@@ -171,23 +173,42 @@
|
|||||||
<testCase id="000010">
|
<testCase id="000010">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/7Mbps/UDP)(30 sec)(multi-ue profile)</desc>
|
<desc>iperf (DL/7Mbps/UDP)(30 sec)(multi-ue profile)</desc>
|
||||||
<iperf_args>-u -b 70M -t 30 -i 1 -R</iperf_args>
|
<iperf_args>-u -b 70M -t 30 -R</iperf_args>
|
||||||
<direction>IPERF3</direction>
|
|
||||||
<id>amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
|
<id>amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
<svr_id>oc-cn5g</svr_id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000030">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (DL/TCP)(30 sec)(multi-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
|
<id>amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
|
||||||
|
<iperf_tcp_rate_target>4</iperf_tcp_rate_target>
|
||||||
|
<svr_id>oc-cn5g</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000020">
|
<testCase id="000020">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/3.6Mbps/UDP)(30 sec)(multi-ue profile)</desc>
|
<desc>iperf (UL/3.6Mbps/UDP)(30 sec)(multi-ue profile)</desc>
|
||||||
<iperf_args>-u -b 36M -t 30 -i 1 </iperf_args>
|
<iperf_args>-u -b 36M -t 30</iperf_args>
|
||||||
<direction>IPERF3</direction>
|
|
||||||
<id>amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
|
<id>amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
<svr_id>oc-cn5g</svr_id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000040">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (UL/TCP)(30 sec)(multi-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30</iperf_args>
|
||||||
|
<svr_id>oc-cn5g</svr_id>
|
||||||
|
<id>amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
|
||||||
|
<iperf_tcp_rate_target>1</iperf_tcp_rate_target>
|
||||||
|
<svr_id>oc-cn5g</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000100">
|
<testCase id="000100">
|
||||||
|
|||||||
@@ -27,20 +27,29 @@
|
|||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
111111
|
111111
|
||||||
222222
|
222222
|
||||||
|
333333
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="111111">
|
<testCase id="111111">
|
||||||
<class>Clean_Test_Server_Images</class>
|
|
||||||
<desc>Clean Test Images on Test Server</desc>
|
|
||||||
<test_svr_id>0</test_svr_id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="222222">
|
|
||||||
<class>Terminate_UE</class>
|
<class>Terminate_UE</class>
|
||||||
<desc>Terminate UE</desc>
|
<desc>Terminate UE</desc>
|
||||||
<id>amarisoft_ue</id>
|
<id>amarisoft_ue</id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="222222">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy gNB</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/sa_aw2s_gnb</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="333333">
|
||||||
|
<class>Clean_Test_Server_Images</class>
|
||||||
|
<desc>Clean Test Images on Test Server</desc>
|
||||||
|
<test_svr_id>0</test_svr_id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,8 @@
|
|||||||
070000
|
070000
|
||||||
070001
|
070001
|
||||||
070002
|
070002
|
||||||
|
070003
|
||||||
|
070004
|
||||||
060001
|
060001
|
||||||
000002
|
000002
|
||||||
060002
|
060002
|
||||||
@@ -136,32 +138,47 @@
|
|||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/30Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/30Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 30M -t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 30M -t 30 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/3.5Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/3.5Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 3.5M -t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 3.5M -t 30</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070002">
|
<testCase id="070002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 10 --bidir</iperf_args>
|
<iperf_args>-t 10 --bidir</iperf_args>
|
||||||
<direction>BIDIR</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070003">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (DL/TCP)(30 sec)(multi-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<iperf_tcp_rate_target>40</iperf_tcp_rate_target>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070004">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (UL/TCP)(30 sec)(multi-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30</iperf_args>
|
||||||
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<iperf_tcp_rate_target>10</iperf_tcp_rate_target>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="060001">
|
<testCase id="060001">
|
||||||
|
|||||||
@@ -37,6 +37,8 @@
|
|||||||
370001
|
370001
|
||||||
370000
|
370000
|
||||||
370002
|
370002
|
||||||
|
370003
|
||||||
|
370004
|
||||||
360001
|
360001
|
||||||
100002
|
100002
|
||||||
360002
|
360002
|
||||||
@@ -128,32 +130,47 @@
|
|||||||
<testCase id="370000">
|
<testCase id="370000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/80Mbps/UDP)(30 sec)</desc>
|
<desc>iperf (DL/80Mbps/UDP)(30 sec)</desc>
|
||||||
<iperf_args>-u -b 80M -t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 80M -t 30 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="370001">
|
<testCase id="370001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/8Mbps/UDP)(30 sec)</desc>
|
<desc>iperf (UL/8Mbps/UDP)(30 sec)</desc>
|
||||||
<iperf_args>-u -b 8M -t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 8M -t 30</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="370002">
|
<testCase id="370002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 20 --bidir</iperf_args>
|
<iperf_args>-t 20 --bidir</iperf_args>
|
||||||
<direction>BIDIR</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="370003">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (DL/TCP)(30 sec)(multi-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<iperf_tcp_rate_target>30</iperf_tcp_rate_target>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="370004">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (UL/TCP)(30 sec)(multi-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30</iperf_args>
|
||||||
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<iperf_tcp_rate_target>15</iperf_tcp_rate_target>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="360001">
|
<testCase id="360001">
|
||||||
|
|||||||
@@ -49,6 +49,8 @@
|
|||||||
170001
|
170001
|
||||||
170000
|
170000
|
||||||
170002
|
170002
|
||||||
|
170003
|
||||||
|
170004
|
||||||
110011
|
110011
|
||||||
110002
|
110002
|
||||||
100001
|
100001
|
||||||
@@ -160,32 +162,47 @@
|
|||||||
<testCase id="170000">
|
<testCase id="170000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/50Mbps/UDP)(30 sec)</desc>
|
<desc>iperf (DL/50Mbps/UDP)(30 sec)</desc>
|
||||||
<iperf_args>-u -b 50M -t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 50M -t 30 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="170001">
|
<testCase id="170001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/25Mbps/UDP)(30 sec)</desc>
|
<desc>iperf (UL/25Mbps/UDP)(30 sec)</desc>
|
||||||
<iperf_args>-u -b 25M -t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 25M -t 30</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="170002">
|
<testCase id="170002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (BIDIR TCP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (BIDIR TCP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 60 --bidir</iperf_args>
|
<iperf_args>-t 60 --bidir</iperf_args>
|
||||||
<direction>BIDIR</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="170003">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (DL/TCP)(30 sec)(multi-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<iperf_tcp_rate_target>45</iperf_tcp_rate_target>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="170004">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (UL/TCP)(30 sec)(multi-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30</iperf_args>
|
||||||
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<iperf_tcp_rate_target>25</iperf_tcp_rate_target>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="160001">
|
<testCase id="160001">
|
||||||
|
|||||||
@@ -91,8 +91,8 @@
|
|||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/20Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/20Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 20M -t 30 -i 1 -R</iperf_args>
|
<iperf_args>-u -b 20M -t 30 -i 1 -R</iperf_args>
|
||||||
<direction>IPERF3</direction>
|
|
||||||
<id>oai_ue_caracal</id>
|
<id>oai_ue_caracal</id>
|
||||||
|
<svr_id>oc-cn5g</svr_id>
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -101,8 +101,8 @@
|
|||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/5Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/5Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 5M -t 30 -i 1 </iperf_args>
|
<iperf_args>-u -b 5M -t 30 -i 1 </iperf_args>
|
||||||
<direction>IPERF3</direction>
|
|
||||||
<id>oai_ue_caracal</id>
|
<id>oai_ue_caracal</id>
|
||||||
|
<svr_id>oc-cn5g</svr_id>
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -27,16 +27,34 @@
|
|||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
111111
|
111111
|
||||||
222222
|
222222
|
||||||
|
333333
|
||||||
|
444444
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="111111">
|
<testCase id="111111">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy gNB</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/5g_sa_n310_gnb</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="222222">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy nr UE</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/5g_sa_n310_nrue</yaml_path>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="333333">
|
||||||
<class>Clean_Test_Server_Images</class>
|
<class>Clean_Test_Server_Images</class>
|
||||||
<desc>Clean Test Images on Test Server</desc>
|
<desc>Clean Test Images on Test Server</desc>
|
||||||
<test_svr_id>0</test_svr_id>
|
<test_svr_id>0</test_svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="222222">
|
<testCase id="444444">
|
||||||
<class>Clean_Test_Server_Images</class>
|
<class>Clean_Test_Server_Images</class>
|
||||||
<desc>Clean Test Images on Test Server</desc>
|
<desc>Clean Test Images on Test Server</desc>
|
||||||
<test_svr_id>1</test_svr_id>
|
<test_svr_id>1</test_svr_id>
|
||||||
|
|||||||
@@ -36,6 +36,8 @@
|
|||||||
270000
|
270000
|
||||||
270001
|
270001
|
||||||
270002
|
270002
|
||||||
|
270003
|
||||||
|
270004
|
||||||
260001
|
260001
|
||||||
200002
|
200002
|
||||||
260002
|
260002
|
||||||
@@ -130,32 +132,47 @@
|
|||||||
<testCase id="270000">
|
<testCase id="270000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/80Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/80Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 80M -t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 80M -t 30 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="270001">
|
<testCase id="270001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/6Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/6Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 6M -t 30 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 6M -t 30</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="270002">
|
<testCase id="270002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 10 --bidir</iperf_args>
|
<iperf_args>-t 10 --bidir</iperf_args>
|
||||||
<direction>BIDIR</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="270003">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (DL/TCP)(30 sec)(multi-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -R</iperf_args>
|
||||||
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<iperf_tcp_rate_target>35</iperf_tcp_rate_target>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="270004">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (UL/TCP)(30 sec)(multi-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30</iperf_args>
|
||||||
|
<id>idefix</id>
|
||||||
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<iperf_tcp_rate_target>5</iperf_tcp_rate_target>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="260001">
|
<testCase id="260001">
|
||||||
|
|||||||
@@ -159,31 +159,25 @@
|
|||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 125M -t 60</iperf_args>
|
<iperf_args>-u -b 125M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>15</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>15</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>85</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>85</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/1Mbps/UDP)(20 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/1Mbps/UDP)(20 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
<iperf_args>-u -b 3M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070002">
|
<testCase id="070002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 10 --bidir</iperf_args>
|
<iperf_args>-t 10 --bidir</iperf_args>
|
||||||
<direction>BIDIR</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -158,23 +158,19 @@
|
|||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 125M -t 60</iperf_args>
|
<iperf_args>-u -b 125M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 8M -t 60</iperf_args>
|
<iperf_args>-u -b 8M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="080000">
|
<testCase id="080000">
|
||||||
|
|||||||
@@ -124,21 +124,17 @@
|
|||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/20Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/20Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 20M -t 60</iperf_args>
|
<iperf_args>-u -b 20M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
<iperf_args>-u -b 3M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -121,21 +121,17 @@
|
|||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/20Mbps/UDP)(600 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/20Mbps/UDP)(600 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 20M -t 600</iperf_args>
|
<iperf_args>-u -b 20M -t 600 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/3Mbps/UDP)(600 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/3Mbps/UDP)(600 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 3M -t 600</iperf_args>
|
<iperf_args>-u -b 3M -t 600</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -94,21 +94,17 @@
|
|||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 60M -t 60</iperf_args>
|
<iperf_args>-u -b 60M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>oai_ue_obelix</id>
|
<id>oai_ue_obelix</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
<iperf_args>-u -b 3M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>oai_ue_obelix</id>
|
<id>oai_ue_obelix</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -111,10 +111,8 @@
|
|||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<id>oai_ue_obelix</id>
|
<id>oai_ue_obelix</id>
|
||||||
<iperf_args>-u -b 60M -t 60</iperf_args>
|
<iperf_args>-u -b 60M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
@@ -122,9 +120,7 @@
|
|||||||
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<id>oai_ue_obelix</id>
|
<id>oai_ue_obelix</id>
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
<iperf_args>-u -b 3M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -96,10 +96,8 @@
|
|||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<id>oai_ue_obelix</id>
|
<id>oai_ue_obelix</id>
|
||||||
<iperf_args>-u -b 60M -t 60</iperf_args>
|
<iperf_args>-u -b 60M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
@@ -107,9 +105,7 @@
|
|||||||
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<id>oai_ue_obelix</id>
|
<id>oai_ue_obelix</id>
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
<iperf_args>-u -b 3M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -131,32 +131,26 @@
|
|||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 60M -t 60</iperf_args>
|
<iperf_args>-u -b 60M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 7M -t 60</iperf_args>
|
<iperf_args>-u -b 7M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070002">
|
<testCase id="070002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 10 --bidir</iperf_args>
|
<iperf_args>-t 10 --bidir</iperf_args>
|
||||||
<direction>BIDIR</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -120,32 +120,26 @@
|
|||||||
<testCase id="072000">
|
<testCase id="072000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/180Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/180Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 180M -t 60</iperf_args>
|
<iperf_args>-u -b 180M -t 60 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="072001">
|
<testCase id="072001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
<iperf_args>-u -b 3M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="072002">
|
<testCase id="072002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 10 --bidir</iperf_args>
|
<iperf_args>-t 10 --bidir</iperf_args>
|
||||||
<direction>BIDIR</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -128,62 +128,50 @@
|
|||||||
<testCase id="071000">
|
<testCase id="071000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/10Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/10Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 10M -t 30</iperf_args>
|
<iperf_args>-u -b 10M -t 30 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase id="071001">
|
<testCase id="071001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/20Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/20Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 20M -t 30</iperf_args>
|
<iperf_args>-u -b 20M -t 30 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase id="071002">
|
<testCase id="071002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/40Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/40Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 40M -t 30</iperf_args>
|
<iperf_args>-u -b 40M -t 30 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase id="071003">
|
<testCase id="071003">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/60Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/60Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 60M -t 30</iperf_args>
|
<iperf_args>-u -b 60M -t 30 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase id="071004">
|
<testCase id="071004">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/90Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/90Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 90M -t 30</iperf_args>
|
<iperf_args>-u -b 90M -t 30 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase id="071005">
|
<testCase id="071005">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/130Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/130Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 130M -t 30</iperf_args>
|
<iperf_args>-u -b 130M -t 30 -R</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ upf:
|
|||||||
support_features:
|
support_features:
|
||||||
enable_bpf_datapath: no # If "on": BPF is used as datapath else simpleswitch is used, DEFAULT= off
|
enable_bpf_datapath: no # If "on": BPF is used as datapath else simpleswitch is used, DEFAULT= off
|
||||||
enable_snat: yes # If "on": Source natting is done for UE, DEFAULT= off
|
enable_snat: yes # If "on": Source natting is done for UE, DEFAULT= off
|
||||||
remote_n6_gw: localhost # Dummy host since simple-switch does not use N6 GW
|
remote_n6_gw: 127.0.0.1 # Dummy host since simple-switch does not use N6 GW
|
||||||
upf_info:
|
upf_info:
|
||||||
sNssaiUpfInfoList:
|
sNssaiUpfInfoList:
|
||||||
- sNssai: *embb_slice1
|
- sNssai: *embb_slice1
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ upf:
|
|||||||
support_features:
|
support_features:
|
||||||
enable_bpf_datapath: no # If "on": BPF is used as datapath else simpleswitch is used, DEFAULT= off
|
enable_bpf_datapath: no # If "on": BPF is used as datapath else simpleswitch is used, DEFAULT= off
|
||||||
enable_snat: yes # If "on": Source natting is done for UE, DEFAULT= off
|
enable_snat: yes # If "on": Source natting is done for UE, DEFAULT= off
|
||||||
remote_n6_gw: localhost # Dummy host since simple-switch does not use N6 GW
|
remote_n6_gw: 127.0.0.1 # Dummy host since simple-switch does not use N6 GW
|
||||||
upf_info:
|
upf_info:
|
||||||
sNssaiUpfInfoList:
|
sNssaiUpfInfoList:
|
||||||
- sNssai: *embb_slice1
|
- sNssai: *embb_slice1
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ services:
|
|||||||
--continuous-tx -E
|
--continuous-tx -E
|
||||||
--telnetsrv --telnetsrv.shrmod ci
|
--telnetsrv --telnetsrv.shrmod ci
|
||||||
--gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 1
|
--gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 1
|
||||||
--RUs.[0].att_rx 18 --RUs.[0].att_tx 18
|
--RUs.[0].att_rx 14 --RUs.[0].att_tx 14
|
||||||
--log_config.global_log_options level,nocolor,time,line_num,function
|
--log_config.global_log_options level,nocolor,time,line_num,function
|
||||||
volumes:
|
volumes:
|
||||||
- ../../conf_files/gnb-du.sa.band78.106prb.usrpb200.conf:/opt/oai-gnb/etc/gnb.conf
|
- ../../conf_files/gnb-du.sa.band78.106prb.usrpb200.conf:/opt/oai-gnb/etc/gnb.conf
|
||||||
|
|||||||
+22
-29
@@ -85,11 +85,9 @@ static const int tables_5_3_2[5][12] = {
|
|||||||
{32, 66, 132, 264, -1, -1, -1, -1, -1, -1, -1, -1} // 120FR2
|
{32, 66, 132, 264, -1, -1, -1, -1, -1, -1, -1, -1} // 120FR2
|
||||||
};
|
};
|
||||||
|
|
||||||
int get_supported_band_index(int scs, int band, int n_rbs)
|
int get_supported_band_index(int scs, frequency_range_t freq_range, int n_rbs)
|
||||||
{
|
{
|
||||||
int scs_index = scs;
|
int scs_index = scs + freq_range;
|
||||||
if (band > 256)
|
|
||||||
scs_index++;
|
|
||||||
for (int i = 0; i < 12; i++) {
|
for (int i = 0; i < 12; i++) {
|
||||||
if(n_rbs == tables_5_3_2[scs_index][i])
|
if(n_rbs == tables_5_3_2[scs_index][i])
|
||||||
return i;
|
return i;
|
||||||
@@ -224,7 +222,7 @@ bool compare_relative_ul_channel_bw(int nr_band, int scs, int nb_ul, frame_type_
|
|||||||
// 38.101-1 section 6.2.2
|
// 38.101-1 section 6.2.2
|
||||||
// Relative channel bandwidth <= 4% for TDD bands and <= 3% for FDD bands
|
// Relative channel bandwidth <= 4% for TDD bands and <= 3% for FDD bands
|
||||||
int index = get_nr_table_idx(nr_band, scs);
|
int index = get_nr_table_idx(nr_band, scs);
|
||||||
int bw_index = get_supported_band_index(scs, nr_band, nb_ul);
|
int bw_index = get_supported_band_index(scs, nr_band > 256 ? FR2 : FR1, nb_ul);
|
||||||
int band_size_khz = get_supported_bw_mhz(nr_band > 256 ? FR2 : FR1, bw_index) * 1000;
|
int band_size_khz = get_supported_bw_mhz(nr_band > 256 ? FR2 : FR1, bw_index) * 1000;
|
||||||
float limit = frame_type == TDD ? 0.04 : 0.03;
|
float limit = frame_type == TDD ? 0.04 : 0.03;
|
||||||
float rel_bw = (float) (2 * band_size_khz) / (float) (nr_bandtable[index].ul_max + nr_bandtable[index].ul_min);
|
float rel_bw = (float) (2 * band_size_khz) / (float) (nr_bandtable[index].ul_max + nr_bandtable[index].ul_min);
|
||||||
@@ -538,29 +536,36 @@ int32_t get_delta_duplex(int nr_bandP, uint8_t scs_index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns the corresponding row index of the NR table
|
// Returns the corresponding row index of the NR table
|
||||||
int get_nr_table_idx(int nr_bandP, uint8_t scs_index) {
|
int get_nr_table_idx(int nr_bandP, uint8_t scs_index)
|
||||||
|
{
|
||||||
int scs_khz = 15 << scs_index;
|
int scs_khz = 15 << scs_index;
|
||||||
int supplementary_bands[] = {29,75,76,80,81,82,83,84,86,89,95};
|
int supplementary_bands[] = {29, 75, 76, 80, 81, 82, 83, 84, 86, 89, 95};
|
||||||
for(int j = 0; j < sizeofArray(supplementary_bands); j++){
|
for(int j = 0; j < sizeofArray(supplementary_bands); j++) {
|
||||||
if (nr_bandP == supplementary_bands[j])
|
AssertFatal(nr_bandP != supplementary_bands[j],
|
||||||
AssertFatal(0 == 1, "Band %d is a supplementary band (%d). This is not supported yet.\n", nr_bandP, supplementary_bands[j]);
|
"Band %d is a supplementary band (%d). This is not supported yet.\n",
|
||||||
|
nr_bandP,
|
||||||
|
supplementary_bands[j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < sizeofArray(nr_bandtable); i++) {
|
for (i = 0; i < sizeofArray(nr_bandtable); i++) {
|
||||||
if ( nr_bandtable[i].band == nr_bandP && nr_bandtable[i].deltaf_raster == scs_khz )
|
if (nr_bandtable[i].band == nr_bandP && nr_bandtable[i].deltaf_raster == scs_khz)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == sizeofArray(nr_bandtable)) {
|
if (i == sizeofArray(nr_bandtable)) {
|
||||||
LOG_I(PHY, "not found same deltaf_raster == scs_khz, use only band and last deltaf_raster \n");
|
LOG_D(PHY, "Not found same deltaf_raster == scs_khz, use only band and last deltaf_raster \n");
|
||||||
for(i=sizeofArray(nr_bandtable)-1; i >=0; i--)
|
for(i = sizeofArray(nr_bandtable) - 1; i >= 0; i--)
|
||||||
if ( nr_bandtable[i].band == nr_bandP )
|
if (nr_bandtable[i].band == nr_bandP)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
AssertFatal(i >= 0 && i < sizeofArray(nr_bandtable), "band is not existing: %d\n",nr_bandP);
|
AssertFatal(i >= 0 && i < sizeofArray(nr_bandtable), "band is not existing: %d\n", nr_bandP);
|
||||||
LOG_D(PHY, "NR band table index %d (Band %d, dl_min %lu, ul_min %lu)\n", i, nr_bandtable[i].band, nr_bandtable[i].dl_min,nr_bandtable[i].ul_min);
|
LOG_D(PHY,
|
||||||
|
"NR band table index %d (Band %d, dl_min %lu, ul_min %lu)\n",
|
||||||
|
i,
|
||||||
|
nr_bandtable[i].band,
|
||||||
|
nr_bandtable[i].dl_min,
|
||||||
|
nr_bandtable[i].ul_min);
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
@@ -829,18 +834,6 @@ void get_samplerate_and_bw(int mu,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_K1_K2(int N1, int N2, int *K1, int *K2)
|
|
||||||
{
|
|
||||||
// num of allowed k1 and k2 according to 5.2.2.2.1-3 and -4 in 38.214
|
|
||||||
if(N2 == N1 || N1 == 2)
|
|
||||||
*K1 = 2;
|
|
||||||
else if (N2 == 1)
|
|
||||||
*K1 = 5;
|
|
||||||
else
|
|
||||||
*K1 = 3;
|
|
||||||
*K2 = N2 > 1 ? 2 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// from start symbol index and nb or symbols to symbol occupation bitmap in a slot
|
// from start symbol index and nb or symbols to symbol occupation bitmap in a slot
|
||||||
uint16_t SL_to_bitmap(int startSymbolIndex, int nrOfSymbols) {
|
uint16_t SL_to_bitmap(int startSymbolIndex, int nrOfSymbols) {
|
||||||
return ((1<<nrOfSymbols)-1)<<startSymbolIndex;
|
return ((1<<nrOfSymbols)-1)<<startSymbolIndex;
|
||||||
|
|||||||
@@ -194,11 +194,10 @@ void SLIV2SL(int SLIV,int *S,int *L);
|
|||||||
int get_dmrs_port(int nl, uint16_t dmrs_ports);
|
int get_dmrs_port(int nl, uint16_t dmrs_ports);
|
||||||
uint16_t SL_to_bitmap(int startSymbolIndex, int nrOfSymbols);
|
uint16_t SL_to_bitmap(int startSymbolIndex, int nrOfSymbols);
|
||||||
int get_nb_periods_per_frame(uint8_t tdd_period);
|
int get_nb_periods_per_frame(uint8_t tdd_period);
|
||||||
int get_supported_band_index(int scs, int band, int n_rbs);
|
|
||||||
long rrc_get_max_nr_csrs(const int max_rbs, long b_SRS);
|
long rrc_get_max_nr_csrs(const int max_rbs, long b_SRS);
|
||||||
void get_K1_K2(int N1, int N2, int *K1, int *K2);
|
|
||||||
bool compare_relative_ul_channel_bw(int nr_band, int scs, int nb_ul, frame_type_t frame_type);
|
bool compare_relative_ul_channel_bw(int nr_band, int scs, int nb_ul, frame_type_t frame_type);
|
||||||
int get_supported_bw_mhz(frequency_range_t frequency_range, int bw_index);
|
int get_supported_bw_mhz(frequency_range_t frequency_range, int bw_index);
|
||||||
|
int get_supported_band_index(int scs, frequency_range_t freq_range, int n_rbs);
|
||||||
void get_samplerate_and_bw(int mu,
|
void get_samplerate_and_bw(int mu,
|
||||||
int n_rb,
|
int n_rb,
|
||||||
int8_t threequarter_fs,
|
int8_t threequarter_fs,
|
||||||
|
|||||||
+1
-1
@@ -60,7 +60,7 @@ Furthermore, the gNB and UE support
|
|||||||
- Single and multiple DMRS symbols
|
- Single and multiple DMRS symbols
|
||||||
- PTRS support
|
- PTRS support
|
||||||
- Support for 1, 2 and 4 TX antennas
|
- Support for 1, 2 and 4 TX antennas
|
||||||
- Support for up to 2 layers (currently limited to DMRS configuration type 2)
|
- Support for up to 2 layers
|
||||||
- Support for 256 QAM
|
- Support for 256 QAM
|
||||||
* NR-CSIRS Generation of sequence at PHY
|
* NR-CSIRS Generation of sequence at PHY
|
||||||
* NR-PUSCH (including Segmentation, LDPC encoding, rate matching, scrambling, modulation, RB mapping, etc).
|
* NR-PUSCH (including Segmentation, LDPC encoding, rate matching, scrambling, modulation, RB mapping, etc).
|
||||||
|
|||||||
@@ -35,4 +35,8 @@ COPY . .
|
|||||||
RUN /bin/sh oaienv && \
|
RUN /bin/sh oaienv && \
|
||||||
cd cmake_targets && \
|
cd cmake_targets && \
|
||||||
mkdir -p log && \
|
mkdir -p log && \
|
||||||
./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib "telnetsrv enbscope uescope nrscope" -w USRP -t Ethernet --noavx512 -c
|
CXXFLAGS="-Werror -fstack-protector-strong" CFLAGS="-Werror -fstack-protector-strong" ./build_oai -c --ninja \
|
||||||
|
--eNB --gNB --RU --UE --nrUE \
|
||||||
|
--build-lib "telnetsrv enbscope uescope nrscope" \
|
||||||
|
-w USRP -t Ethernet \
|
||||||
|
--noavx512
|
||||||
|
|||||||
@@ -42,6 +42,6 @@ RUN /bin/sh oaienv && \
|
|||||||
-w USRP -t Ethernet \
|
-w USRP -t Ethernet \
|
||||||
--build-e2 --cmake-opt -DXAPP_MULTILANGUAGE=OFF \
|
--build-e2 --cmake-opt -DXAPP_MULTILANGUAGE=OFF \
|
||||||
--noavx512 \
|
--noavx512 \
|
||||||
--cmake-opt -DCMAKE_C_FLAGS=-Werror --cmake-opt -DCMAKE_CXX_FLAGS=-Werror $BUILD_OPTION && \
|
--cmake-opt -DCMAKE_C_FLAGS="-Werror -fstack-protector-strong" --cmake-opt -DCMAKE_CXX_FLAGS="-Werror -fstack-protector-strong" $BUILD_OPTION && \
|
||||||
# Mainly to see if the sanitize option was perfectly executed
|
# Mainly to see if the sanitize option was perfectly executed
|
||||||
ldd ran_build/build/nr-softmodem
|
ldd ran_build/build/nr-softmodem
|
||||||
|
|||||||
@@ -49,9 +49,9 @@ RUN apt-get update && \
|
|||||||
openssl \
|
openssl \
|
||||||
net-tools \
|
net-tools \
|
||||||
iperf \
|
iperf \
|
||||||
|
iperf3 \
|
||||||
iputils-ping \
|
iputils-ping \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
iperf \
|
|
||||||
gdb \
|
gdb \
|
||||||
python \
|
python \
|
||||||
python3 \
|
python3 \
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ RUN dnf update -y && \
|
|||||||
libXpm \
|
libXpm \
|
||||||
libX11 \
|
libX11 \
|
||||||
atlas \
|
atlas \
|
||||||
|
gdb \
|
||||||
lksctp-tools \
|
lksctp-tools \
|
||||||
tzdata \
|
tzdata \
|
||||||
net-tools \
|
net-tools \
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ RUN dnf update -y && \
|
|||||||
libXpm \
|
libXpm \
|
||||||
libX11 \
|
libX11 \
|
||||||
atlas \
|
atlas \
|
||||||
|
gdb \
|
||||||
lksctp-tools \
|
lksctp-tools \
|
||||||
tzdata \
|
tzdata \
|
||||||
net-tools \
|
net-tools \
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ RUN apt-get update && \
|
|||||||
libblas3 \
|
libblas3 \
|
||||||
libatlas3-base \
|
libatlas3-base \
|
||||||
libconfig9 \
|
libconfig9 \
|
||||||
|
gdb \
|
||||||
openssl \
|
openssl \
|
||||||
net-tools \
|
net-tools \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ RUN apt-get update && \
|
|||||||
openssl \
|
openssl \
|
||||||
net-tools \
|
net-tools \
|
||||||
iperf \
|
iperf \
|
||||||
|
iperf3 \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
iputils-ping \
|
iputils-ping \
|
||||||
gdb \
|
gdb \
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ RUN apt-get update && \
|
|||||||
libusb-1.0-0 \
|
libusb-1.0-0 \
|
||||||
iputils-ping \
|
iputils-ping \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
|
iperf3 \
|
||||||
iperf && \
|
iperf && \
|
||||||
# if the --sanitize option was used to build, additional packages are required
|
# if the --sanitize option was used to build, additional packages are required
|
||||||
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ RUN apt-get update && \
|
|||||||
libusb-1.0-0 \
|
libusb-1.0-0 \
|
||||||
iputils-ping \
|
iputils-ping \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
|
iperf3 \
|
||||||
iperf && \
|
iperf && \
|
||||||
# if the --sanitize option was used to build, additional packages are required
|
# if the --sanitize option was used to build, additional packages are required
|
||||||
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
||||||
|
|||||||
@@ -10,9 +10,10 @@ die() {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# for mounting into docker, need absolute path -> realpath
|
||||||
IMAGE=$1
|
IMAGE=$1
|
||||||
COREDUMP=$2
|
COREDUMP=$(realpath $2)
|
||||||
SOURCES=$3
|
SOURCES=$(realpath $3)
|
||||||
|
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
@@ -32,6 +33,9 @@ docker image inspect $IMAGE > /dev/null || exit 1
|
|||||||
if [ $(grep "oai-gnb:" <<< $IMAGE) ] || [ $(grep "oai-gnb-aerial:" <<< $IMAGE) ]; then
|
if [ $(grep "oai-gnb:" <<< $IMAGE) ] || [ $(grep "oai-gnb-aerial:" <<< $IMAGE) ]; then
|
||||||
EXEC=bin/nr-softmodem
|
EXEC=bin/nr-softmodem
|
||||||
TYPEPATH=oai-gnb
|
TYPEPATH=oai-gnb
|
||||||
|
elif [ $(grep "oai-gnb-aw2s:" <<< $IMAGE) ]; then
|
||||||
|
EXEC=bin/nr-softmodem
|
||||||
|
TYPEPATH=oai-gnb-aw2s
|
||||||
elif [ $(grep "oai-nr-ue:" <<< $IMAGE) ]; then
|
elif [ $(grep "oai-nr-ue:" <<< $IMAGE) ]; then
|
||||||
EXEC=bin/nr-uesoftmodem
|
EXEC=bin/nr-uesoftmodem
|
||||||
TYPEPATH=oai-nr-ue
|
TYPEPATH=oai-nr-ue
|
||||||
|
|||||||
@@ -254,9 +254,10 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB)
|
|||||||
gNB->nr_srs_info = (nr_srs_info_t **)malloc16_clear(gNB->max_nb_srs * sizeof(nr_srs_info_t*));
|
gNB->nr_srs_info = (nr_srs_info_t **)malloc16_clear(gNB->max_nb_srs * sizeof(nr_srs_info_t*));
|
||||||
for (int id = 0; id < gNB->max_nb_srs; id++) {
|
for (int id = 0; id < gNB->max_nb_srs; id++) {
|
||||||
gNB->nr_srs_info[id] = (nr_srs_info_t *)malloc16_clear(sizeof(nr_srs_info_t));
|
gNB->nr_srs_info[id] = (nr_srs_info_t *)malloc16_clear(sizeof(nr_srs_info_t));
|
||||||
gNB->nr_srs_info[id]->srs_generated_signal = (int32_t**)malloc16_clear(MAX_NUM_NR_SRS_AP*sizeof(int32_t*));
|
gNB->nr_srs_info[id]->srs_generated_signal = malloc16_clear(MAX_NUM_NR_SRS_AP * sizeof(c16_t *));
|
||||||
for(int ap=0; ap<MAX_NUM_NR_SRS_AP; ap++) {
|
for(int ap=0; ap<MAX_NUM_NR_SRS_AP; ap++) {
|
||||||
gNB->nr_srs_info[id]->srs_generated_signal[ap] = (int32_t*)malloc16_clear(fp->ofdm_symbol_size*MAX_NUM_NR_SRS_SYMBOLS*sizeof(int32_t));
|
gNB->nr_srs_info[id]->srs_generated_signal[ap] =
|
||||||
|
malloc16_clear(fp->ofdm_symbol_size * MAX_NUM_NR_SRS_SYMBOLS * sizeof(c16_t));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -513,7 +514,7 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,
|
|||||||
}
|
}
|
||||||
|
|
||||||
fp->threequarter_fs = 0;
|
fp->threequarter_fs = 0;
|
||||||
int bw_index = get_supported_band_index(mu, fp->nr_band, N_RB_DL);
|
int bw_index = get_supported_band_index(mu, fp->nr_band > 256 ? FR2 : FR1, N_RB_DL);
|
||||||
gNB_config->carrier_config.dl_bandwidth.value = get_supported_bw_mhz(fp->nr_band > 256 ? FR2 : FR1, bw_index);
|
gNB_config->carrier_config.dl_bandwidth.value = get_supported_bw_mhz(fp->nr_band > 256 ? FR2 : FR1, bw_index);
|
||||||
|
|
||||||
nr_init_frame_parms(gNB_config, fp);
|
nr_init_frame_parms(gNB_config, fp);
|
||||||
|
|||||||
@@ -318,24 +318,19 @@ void nr_layer_mapping(int nbCodes,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_ue_layer_mapping(int16_t *mod_symbs,
|
void nr_ue_layer_mapping(const c16_t *mod_symbs, const int n_layers, const int n_symbs, int sz, c16_t tx_layers[][sz])
|
||||||
uint8_t n_layers,
|
{
|
||||||
uint32_t n_symbs,
|
|
||||||
int16_t **tx_layers) {
|
|
||||||
|
|
||||||
for (int i=0; i<n_symbs/n_layers; i++) {
|
for (int i=0; i<n_symbs/n_layers; i++) {
|
||||||
for (int l=0; l<n_layers; l++) {
|
for (int l=0; l<n_layers; l++) {
|
||||||
tx_layers[l][i<<1] = (mod_symbs[(n_layers*i+l)<<1]*AMP)>>15;
|
tx_layers[l][i] = c16mulRealShift(mod_symbs[n_layers * i + l], AMP, 15);
|
||||||
tx_layers[l][(i<<1)+1] = (mod_symbs[((n_layers*i+l)<<1)+1]*AMP)>>15;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nr_dft(c16_t *z, c16_t *d, uint32_t Msc_PUSCH)
|
||||||
void nr_dft(int32_t *z, int32_t *d, uint32_t Msc_PUSCH)
|
|
||||||
{
|
{
|
||||||
simde__m128i dft_in128[1][3240], dft_out128[1][3240];
|
simde__m128i dft_in128[3240], dft_out128[3240];
|
||||||
uint32_t *dft_in0 = (uint32_t*)dft_in128[0], *dft_out0 = (uint32_t*)dft_out128[0];
|
c16_t *dft_in0 = (c16_t *)dft_in128, *dft_out0 = (c16_t *)dft_out128;
|
||||||
|
|
||||||
uint32_t i, ip;
|
uint32_t i, ip;
|
||||||
|
|
||||||
@@ -659,36 +654,32 @@ void init_timeshift_rotation(NR_DL_FRAME_PARMS *fp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int nr_layer_precoder(int16_t **datatx_F_precoding, const char *prec_matrix, uint8_t n_layers, int32_t re_offset)
|
c16_t nr_layer_precoder(int sz, c16_t datatx_F_precoding[][sz], const char *prec_matrix, uint8_t n_layers, int32_t re_offset)
|
||||||
{
|
{
|
||||||
int32_t precodatatx_F = 0;
|
c16_t precodatatx_F = {0};
|
||||||
|
|
||||||
for (int al = 0; al<n_layers; al++) {
|
for (int al = 0; al<n_layers; al++) {
|
||||||
int16_t antenna_re = datatx_F_precoding[al][re_offset<<1];
|
c16_t antenna = datatx_F_precoding[al][re_offset];
|
||||||
int16_t antenna_im = datatx_F_precoding[al][(re_offset<<1) +1];
|
|
||||||
|
|
||||||
switch (prec_matrix[al]) {
|
switch (prec_matrix[al]) {
|
||||||
case '0': //multiply by zero
|
case '0': //multiply by zero
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '1': //multiply by 1
|
case '1': //multiply by 1
|
||||||
((int16_t *) &precodatatx_F)[0] += antenna_re;
|
precodatatx_F = c16add(precodatatx_F, antenna);
|
||||||
((int16_t *) &precodatatx_F)[1] += antenna_im;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'n': // multiply by -1
|
case 'n': // multiply by -1
|
||||||
((int16_t *) &precodatatx_F)[0] -= antenna_re;
|
precodatatx_F = c16sub(precodatatx_F, antenna);
|
||||||
((int16_t *) &precodatatx_F)[1] -= antenna_im;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'j': //
|
case 'j': //
|
||||||
((int16_t *) &precodatatx_F)[0] -= antenna_im;
|
precodatatx_F.r -= antenna.i;
|
||||||
((int16_t *) &precodatatx_F)[1] += antenna_re;
|
precodatatx_F.i += antenna.r;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'o': // -j
|
case 'o': // -j
|
||||||
((int16_t *) &precodatatx_F)[0] += antenna_im;
|
precodatatx_F.r += antenna.i;
|
||||||
((int16_t *) &precodatatx_F)[1] -= antenna_re;
|
precodatatx_F.i -= antenna.r;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,13 +68,7 @@ void nr_layer_mapping(int nbCodes,
|
|||||||
@param[in] n_symbs, number of modulated symbols
|
@param[in] n_symbs, number of modulated symbols
|
||||||
@param[out] tx_layers, modulated symbols for each layer
|
@param[out] tx_layers, modulated symbols for each layer
|
||||||
*/
|
*/
|
||||||
|
void nr_ue_layer_mapping(const c16_t *mod_symbs, const int n_layers, const int n_symbs, int sz, c16_t tx_layers[][sz]);
|
||||||
void nr_ue_layer_mapping(int16_t *mod_symbs,
|
|
||||||
uint8_t n_layers,
|
|
||||||
uint32_t n_symbs,
|
|
||||||
int16_t **tx_layers);
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief This function implements the OFDM front end processor on reception (FEP)
|
\brief This function implements the OFDM front end processor on reception (FEP)
|
||||||
\param frame_parms Pointer to frame parameters
|
\param frame_parms Pointer to frame parameters
|
||||||
@@ -98,7 +92,7 @@ int nr_slot_fep_ul(NR_DL_FRAME_PARMS *frame_parms,
|
|||||||
\param d Pointer to input in time domain
|
\param d Pointer to input in time domain
|
||||||
\param Msc_PUSCH number of allocated data subcarriers
|
\param Msc_PUSCH number of allocated data subcarriers
|
||||||
*/
|
*/
|
||||||
void nr_dft(int32_t *z,int32_t *d, uint32_t Msc_PUSCH);
|
void nr_dft(c16_t *z, c16_t *d, uint32_t Msc_PUSCH);
|
||||||
|
|
||||||
int nr_beam_precoding(c16_t **txdataF,
|
int nr_beam_precoding(c16_t **txdataF,
|
||||||
c16_t **txdataF_BF,
|
c16_t **txdataF_BF,
|
||||||
@@ -137,7 +131,7 @@ void apply_nr_rotation_RX(NR_DL_FRAME_PARMS *frame_parms,
|
|||||||
@param[in] prec_matrix, Pointer to precoding matrix
|
@param[in] prec_matrix, Pointer to precoding matrix
|
||||||
@param[in] n_layers, number of DLSCH layers
|
@param[in] n_layers, number of DLSCH layers
|
||||||
*/
|
*/
|
||||||
int nr_layer_precoder(int16_t **datatx_F_precoding, const char *prec_matrix, uint8_t n_layers, int32_t re_offset);
|
c16_t nr_layer_precoder(int sz, c16_t datatx_F_precoding[][sz], const char *prec_matrix, uint8_t n_layers, int32_t re_offset);
|
||||||
|
|
||||||
c16_t nr_layer_precoder_cm(int n_layers,
|
c16_t nr_layer_precoder_cm(int n_layers,
|
||||||
int n_symbols,
|
int n_symbols,
|
||||||
|
|||||||
@@ -66,14 +66,15 @@ __attribute__((always_inline)) inline c16_t c32x16cumulVectVectWithSteps(c16_t *
|
|||||||
|
|
||||||
int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
||||||
unsigned char Ns,
|
unsigned char Ns,
|
||||||
|
int nl,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
int ul_id,
|
int ul_id,
|
||||||
unsigned short bwp_start_subcarrier,
|
unsigned short bwp_start_subcarrier,
|
||||||
nfapi_nr_pusch_pdu_t *pusch_pdu,
|
nfapi_nr_pusch_pdu_t *pusch_pdu,
|
||||||
int *max_ch,
|
int *max_ch,
|
||||||
uint32_t *nvar) {
|
uint32_t *nvar)
|
||||||
|
{
|
||||||
c16_t pilot[3280] __attribute__((aligned(32)));
|
c16_t pilot[3280] __attribute__((aligned(32)));
|
||||||
const int chest_freq = gNB->chest_freq;
|
const int chest_freq = gNB->chest_freq;
|
||||||
|
|
||||||
@@ -81,20 +82,17 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
FILE *debug_ch_est;
|
FILE *debug_ch_est;
|
||||||
debug_ch_est = fopen("debug_ch_est.txt","w");
|
debug_ch_est = fopen("debug_ch_est.txt","w");
|
||||||
#endif
|
#endif
|
||||||
//uint16_t Nid_cell = (eNB_offset == 0) ? gNB->frame_parms.Nid_cell : gNB->measurements.adj_cell_id[eNB_offset-1];
|
|
||||||
NR_gNB_PUSCH *pusch_vars = &gNB->pusch_vars[ul_id];
|
NR_gNB_PUSCH *pusch_vars = &gNB->pusch_vars[ul_id];
|
||||||
c16_t **ul_ch_estimates = (c16_t **)pusch_vars->ul_ch_estimates;
|
c16_t **ul_ch_estimates = (c16_t **)pusch_vars->ul_ch_estimates;
|
||||||
const int symbolSize = gNB->frame_parms.ofdm_symbol_size;
|
const int symbolSize = gNB->frame_parms.ofdm_symbol_size;
|
||||||
const int soffset = (Ns&3)*gNB->frame_parms.symbols_per_slot*symbolSize;
|
const int soffset = (Ns & 3) * gNB->frame_parms.symbols_per_slot*symbolSize;
|
||||||
const int nushift = (p >> 1) & 1;
|
const int nushift = (p >> 1) & 1;
|
||||||
int ch_offset = symbolSize*symbol;
|
int ch_offset = symbolSize*symbol;
|
||||||
const int symbol_offset = symbolSize*symbol;
|
const int symbol_offset = symbolSize*symbol;
|
||||||
|
|
||||||
const int k0 = bwp_start_subcarrier;
|
const int k0 = bwp_start_subcarrier;
|
||||||
const int nb_rb_pusch = pusch_pdu->rb_size;
|
const int nb_rb_pusch = pusch_pdu->rb_size;
|
||||||
|
|
||||||
LOG_D(PHY, "In %s: ch_offset %d, soffset %d, symbol_offset %d, OFDM size %d, Ns = %d, k0 = %d, symbol %d\n",
|
LOG_D(PHY, "ch_offset %d, soffset %d, symbol_offset %d, OFDM size %d, Ns = %d, k0 = %d, symbol %d\n",
|
||||||
__FUNCTION__,
|
|
||||||
ch_offset, soffset,
|
ch_offset, soffset,
|
||||||
symbol_offset,
|
symbol_offset,
|
||||||
symbolSize,
|
symbolSize,
|
||||||
@@ -114,7 +112,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
nr_pusch_dmrs_rx(gNB,
|
nr_pusch_dmrs_rx(gNB,
|
||||||
Ns,
|
Ns,
|
||||||
gNB->nr_gold_pusch_dmrs[pusch_pdu->scid][Ns][symbol],
|
gNB->nr_gold_pusch_dmrs[pusch_pdu->scid][Ns][symbol],
|
||||||
(int32_t *)pilot,
|
pilot,
|
||||||
(1000 + p),
|
(1000 + p),
|
||||||
0,
|
0,
|
||||||
nb_rb_pusch,
|
nb_rb_pusch,
|
||||||
@@ -122,14 +120,14 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
pusch_pdu->dmrs_config_type);
|
pusch_pdu->dmrs_config_type);
|
||||||
} else { // if transform precoding or SC-FDMA is enabled in Uplink
|
} else { // if transform precoding or SC-FDMA is enabled in Uplink
|
||||||
// NR_SC_FDMA supports type1 DMRS so only 6 DMRS REs per RB possible
|
// NR_SC_FDMA supports type1 DMRS so only 6 DMRS REs per RB possible
|
||||||
const uint16_t index = get_index_for_dmrs_lowpapr_seq(nb_rb_pusch * (NR_NB_SC_PER_RB/2));
|
const int index = get_index_for_dmrs_lowpapr_seq(nb_rb_pusch * (NR_NB_SC_PER_RB / 2));
|
||||||
const uint8_t u = pusch_pdu->dfts_ofdm.low_papr_group_number;
|
const uint8_t u = pusch_pdu->dfts_ofdm.low_papr_group_number;
|
||||||
const uint8_t v = pusch_pdu->dfts_ofdm.low_papr_sequence_number;
|
const uint8_t v = pusch_pdu->dfts_ofdm.low_papr_sequence_number;
|
||||||
int16_t *dmrs_seq = gNB_dmrs_lowpaprtype1_sequence[u][v][index];
|
c16_t *dmrs_seq = gNB_dmrs_lowpaprtype1_sequence[u][v][index];
|
||||||
LOG_D(PHY,"Transform Precoding params. u: %d, v: %d, index for dmrsseq: %d\n", u, v, index);
|
LOG_D(PHY,"Transform Precoding params. u: %d, v: %d, index for dmrsseq: %d\n", u, v, index);
|
||||||
AssertFatal(index >= 0, "Num RBs not configured according to 3GPP 38.211 section 6.3.1.4. For PUSCH with transform precoding, num RBs cannot be multiple of any other primenumber other than 2,3,5\n");
|
AssertFatal(index >= 0, "Num RBs not configured according to 3GPP 38.211 section 6.3.1.4. For PUSCH with transform precoding, num RBs cannot be multiple of any other primenumber other than 2,3,5\n");
|
||||||
AssertFatal(dmrs_seq != NULL, "DMRS low PAPR seq not found, check if DMRS sequences are generated");
|
AssertFatal(dmrs_seq != NULL, "DMRS low PAPR seq not found, check if DMRS sequences are generated");
|
||||||
nr_pusch_lowpaprtype1_dmrs_rx(gNB, Ns, dmrs_seq, (int32_t *)pilot, 1000, 0, nb_rb_pusch, 0, pusch_pdu->dmrs_config_type);
|
nr_pusch_lowpaprtype1_dmrs_rx(gNB, Ns, dmrs_seq, pilot, 1000, 0, nb_rb_pusch, 0, pusch_pdu->dmrs_config_type);
|
||||||
#ifdef DEBUG_PUSCH
|
#ifdef DEBUG_PUSCH
|
||||||
printf ("NR_UL_CHANNEL_EST: index %d, u %d,v %d\n", index, u, v);
|
printf ("NR_UL_CHANNEL_EST: index %d, u %d,v %d\n", index, u, v);
|
||||||
LOG_M("gNb_DMRS_SEQ.m","gNb_DMRS_SEQ", dmrs_seq,6*nb_rb_pusch,1,1);
|
LOG_M("gNb_DMRS_SEQ.m","gNb_DMRS_SEQ", dmrs_seq,6*nb_rb_pusch,1,1);
|
||||||
@@ -154,7 +152,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
for (int aarx=0; aarx<gNB->frame_parms.nb_antennas_rx; aarx++) {
|
for (int aarx=0; aarx<gNB->frame_parms.nb_antennas_rx; aarx++) {
|
||||||
c16_t *rxdataF = (c16_t *)&gNB->common_vars.rxdataF[aarx][symbol_offset];
|
c16_t *rxdataF = (c16_t *)&gNB->common_vars.rxdataF[aarx][symbol_offset];
|
||||||
c16_t *ul_ch = &ul_ch_estimates[p*gNB->frame_parms.nb_antennas_rx+aarx][ch_offset];
|
c16_t *ul_ch = &ul_ch_estimates[nl * gNB->frame_parms.nb_antennas_rx + aarx][ch_offset];
|
||||||
|
|
||||||
memset(ul_ch,0,sizeof(*ul_ch)*symbolSize);
|
memset(ul_ch,0,sizeof(*ul_ch)*symbolSize);
|
||||||
#ifdef DEBUG_PUSCH
|
#ifdef DEBUG_PUSCH
|
||||||
@@ -235,7 +233,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
// Revert delay
|
// Revert delay
|
||||||
pilot_cnt = 0;
|
pilot_cnt = 0;
|
||||||
ul_ch = &ul_ch_estimates[p * gNB->frame_parms.nb_antennas_rx + aarx][ch_offset];
|
ul_ch = &ul_ch_estimates[nl * gNB->frame_parms.nb_antennas_rx + aarx][ch_offset];
|
||||||
int inv_delay_idx = get_delay_idx(-delay->est_delay, MAX_DELAY_COMP);
|
int inv_delay_idx = get_delay_idx(-delay->est_delay, MAX_DELAY_COMP);
|
||||||
c16_t *ul_inv_delay_table = gNB->frame_parms.delay_table[inv_delay_idx];
|
c16_t *ul_inv_delay_table = gNB->frame_parms.delay_table[inv_delay_idx];
|
||||||
for (int n = 0; n < 3 * nb_rb_pusch; n++) {
|
for (int n = 0; n < 3 * nb_rb_pusch; n++) {
|
||||||
@@ -450,7 +448,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_PUSCH
|
#ifdef DEBUG_PUSCH
|
||||||
ul_ch = &ul_ch_estimates[p * gNB->frame_parms.nb_antennas_rx + aarx][ch_offset];
|
ul_ch = &ul_ch_estimates[nl * gNB->frame_parms.nb_antennas_rx + aarx][ch_offset];
|
||||||
for (int idxP = 0; idxP < ceil((float)nb_rb_pusch * 12 / 8); idxP++) {
|
for (int idxP = 0; idxP < ceil((float)nb_rb_pusch * 12 / 8); idxP++) {
|
||||||
for (int idxI = 0; idxI < 8; idxI++) {
|
for (int idxI = 0; idxI < 8; idxI++) {
|
||||||
printf("%d\t%d\t", ul_ch[idxP * 8 + idxI].r, ul_ch[idxP * 8 + idxI].i);
|
printf("%d\t%d\t", ul_ch[idxP * 8 + idxI].r, ul_ch[idxP * 8 + idxI].i);
|
||||||
@@ -611,19 +609,21 @@ uint32_t calc_power(const int16_t *x, const uint32_t size) {
|
|||||||
return sum_x2/size - (sum_x/size)*(sum_x/size);
|
return sum_x2/size - (sum_x/size)*(sum_x/size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
int nr_srs_channel_estimation(
|
||||||
const int frame,
|
const PHY_VARS_gNB *gNB,
|
||||||
const int slot,
|
const int frame,
|
||||||
const nfapi_nr_srs_pdu_t *srs_pdu,
|
const int slot,
|
||||||
const nr_srs_info_t *nr_srs_info,
|
const nfapi_nr_srs_pdu_t *srs_pdu,
|
||||||
const int32_t **srs_generated_signal,
|
const nr_srs_info_t *nr_srs_info,
|
||||||
int32_t srs_received_signal[][gNB->frame_parms.ofdm_symbol_size*(1<<srs_pdu->num_symbols)],
|
const c16_t **srs_generated_signal,
|
||||||
int32_t srs_estimated_channel_freq[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size*(1<<srs_pdu->num_symbols)],
|
int32_t srs_received_signal[][gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)],
|
||||||
int32_t srs_estimated_channel_time[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
int32_t srs_estimated_channel_freq[][1 << srs_pdu->num_ant_ports]
|
||||||
int32_t srs_estimated_channel_time_shifted[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)],
|
||||||
int8_t *snr_per_rb,
|
int32_t srs_estimated_channel_time[][1 << srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
||||||
int8_t *snr) {
|
int32_t srs_estimated_channel_time_shifted[][1 << srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
||||||
|
int8_t *snr_per_rb,
|
||||||
|
int8_t *snr)
|
||||||
|
{
|
||||||
#ifdef SRS_DEBUG
|
#ifdef SRS_DEBUG
|
||||||
LOG_I(NR_PHY,"Calling %s function\n", __FUNCTION__);
|
LOG_I(NR_PHY,"Calling %s function\n", __FUNCTION__);
|
||||||
#endif
|
#endif
|
||||||
@@ -694,9 +694,8 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
|||||||
uint16_t subcarrier_cdm = subcarrier;
|
uint16_t subcarrier_cdm = subcarrier;
|
||||||
|
|
||||||
for (int cdm_idx = 0; cdm_idx < fd_cdm; cdm_idx++) {
|
for (int cdm_idx = 0; cdm_idx < fd_cdm; cdm_idx++) {
|
||||||
|
int16_t generated_real = srs_generated_signal[p_index][subcarrier_cdm].r;
|
||||||
int16_t generated_real = ((c16_t*)srs_generated_signal[p_index])[subcarrier_cdm].r;
|
int16_t generated_imag = srs_generated_signal[p_index][subcarrier_cdm].i;
|
||||||
int16_t generated_imag = ((c16_t*)srs_generated_signal[p_index])[subcarrier_cdm].i;
|
|
||||||
|
|
||||||
int16_t received_real = ((c16_t*)srs_received_signal[ant])[subcarrier_cdm].r;
|
int16_t received_real = ((c16_t*)srs_received_signal[ant])[subcarrier_cdm].r;
|
||||||
int16_t received_imag = ((c16_t*)srs_received_signal[ant])[subcarrier_cdm].i;
|
int16_t received_imag = ((c16_t*)srs_received_signal[ant])[subcarrier_cdm].i;
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
|
|
||||||
int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
||||||
unsigned char Ns,
|
unsigned char Ns,
|
||||||
|
int nl,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
int ul_id,
|
int ul_id,
|
||||||
@@ -72,18 +73,20 @@ void nr_pusch_ptrs_processing(PHY_VARS_gNB *gNB,
|
|||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
uint32_t nb_re_pusch);
|
uint32_t nb_re_pusch);
|
||||||
|
|
||||||
int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
int nr_srs_channel_estimation(
|
||||||
const int frame,
|
const PHY_VARS_gNB *gNB,
|
||||||
const int slot,
|
const int frame,
|
||||||
const nfapi_nr_srs_pdu_t *srs_pdu,
|
const int slot,
|
||||||
const nr_srs_info_t *nr_srs_info,
|
const nfapi_nr_srs_pdu_t *srs_pdu,
|
||||||
const int32_t **srs_generated_signal,
|
const nr_srs_info_t *nr_srs_info,
|
||||||
int32_t srs_received_signal[][gNB->frame_parms.ofdm_symbol_size*(1<<srs_pdu->num_symbols)],
|
const c16_t **srs_generated_signal,
|
||||||
int32_t srs_estimated_channel_freq[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size*(1<<srs_pdu->num_symbols)],
|
int32_t srs_received_signal[][gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)],
|
||||||
int32_t srs_estimated_channel_time[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
int32_t srs_estimated_channel_freq[][1 << srs_pdu->num_ant_ports]
|
||||||
int32_t srs_estimated_channel_time_shifted[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
[gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)],
|
||||||
int8_t *snr_per_rb,
|
int32_t srs_estimated_channel_time[][1 << srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
||||||
int8_t *snr);
|
int32_t srs_estimated_channel_time_shifted[][1 << srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
||||||
|
int8_t *snr_per_rb,
|
||||||
|
int8_t *snr);
|
||||||
|
|
||||||
void nr_freq_equalization(NR_DL_FRAME_PARMS *frame_parms,
|
void nr_freq_equalization(NR_DL_FRAME_PARMS *frame_parms,
|
||||||
int *rxdataF_comp,
|
int *rxdataF_comp,
|
||||||
|
|||||||
@@ -51,10 +51,10 @@ static const int wt2[12][2] =
|
|||||||
{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, -1}, {1, -1}, {1, -1}, {1, -1}, {1, -1}, {1, -1}};
|
{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, -1}, {1, -1}, {1, -1}, {1, -1}, {1, -1}, {1, -1}};
|
||||||
|
|
||||||
// complex conjugate of mod table
|
// complex conjugate of mod table
|
||||||
static const short nr_rx_mod_table[14] =
|
static const c16_t nr_rx_mod_table[7] =
|
||||||
{0, 0, 23170, -23170, -23170, 23170, 23170, -23170, 23170, 23170, -23170, -23170, -23170, 23170};
|
{{0, 0}, {23170, -23170}, {-23170, 23170}, {23170, -23170}, {23170, 23170}, {-23170, -23170}, {-23170, 23170}};
|
||||||
static const short nr_rx_nmod_table[14] =
|
static const c16_t nr_rx_nmod_table[7] =
|
||||||
{0, 0, -23170, 23170, 23170, -23170, -23170, 23170, -23170, -23170, 23170, 23170, 23170, -23170};
|
{{0, 0}, {-23170, 23170}, {23170, -23170}, {-23170, 23170}, {-23170, -23170}, {23170, 23170}, {23170, -23170}};
|
||||||
|
|
||||||
int nr_pusch_dmrs_delta(uint8_t dmrs_config_type, unsigned short p) {
|
int nr_pusch_dmrs_delta(uint8_t dmrs_config_type, unsigned short p) {
|
||||||
if (dmrs_config_type == pusch_dmrs_type1) {
|
if (dmrs_config_type == pusch_dmrs_type1) {
|
||||||
@@ -67,7 +67,7 @@ int nr_pusch_dmrs_delta(uint8_t dmrs_config_type, unsigned short p) {
|
|||||||
int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB,
|
int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB,
|
||||||
unsigned int Ns,
|
unsigned int Ns,
|
||||||
unsigned int *nr_gold_pusch,
|
unsigned int *nr_gold_pusch,
|
||||||
int32_t *output,
|
c16_t *output,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned char lp,
|
unsigned char lp,
|
||||||
unsigned short nb_pusch_rb,
|
unsigned short nb_pusch_rb,
|
||||||
@@ -92,16 +92,21 @@ int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB,
|
|||||||
for (int i=dmrs_offset; i<dmrs_offset+(nb_pusch_rb*nb_dmrs); i++) {
|
for (int i=dmrs_offset; i<dmrs_offset+(nb_pusch_rb*nb_dmrs); i++) {
|
||||||
k = i-dmrs_offset;
|
k = i-dmrs_offset;
|
||||||
w = (wf[p-1000][i&1])*(wt[p-1000][lp]);
|
w = (wf[p-1000][i&1])*(wt[p-1000][lp]);
|
||||||
const short *mod_table = (w == 1) ? nr_rx_mod_table : nr_rx_nmod_table;
|
const c16_t *mod_table = (w == 1) ? nr_rx_mod_table : nr_rx_nmod_table;
|
||||||
|
|
||||||
idx = ((((nr_gold_pusch[(i<<1)>>5])>>((i<<1)&0x1f))&1)<<1) ^ (((nr_gold_pusch[((i<<1)+1)>>5])>>(((i<<1)+1)&0x1f))&1);
|
idx = ((((nr_gold_pusch[(i<<1)>>5])>>((i<<1)&0x1f))&1)<<1) ^ (((nr_gold_pusch[((i<<1)+1)>>5])>>(((i<<1)+1)&0x1f))&1);
|
||||||
((int16_t*)output)[k<<1] = mod_table[(NR_MOD_TABLE_QPSK_OFFSET + idx)<<1];
|
output[k] = mod_table[NR_MOD_TABLE_QPSK_OFFSET + idx];
|
||||||
((int16_t*)output)[(k<<1)+1] = mod_table[((NR_MOD_TABLE_QPSK_OFFSET + idx)<<1) + 1];
|
|
||||||
#ifdef DEBUG_PUSCH
|
#ifdef DEBUG_PUSCH
|
||||||
printf("nr_pusch_dmrs_rx dmrs config type %d port %d nb_pusch_rb %d\n", dmrs_type, p, nb_pusch_rb);
|
printf("nr_pusch_dmrs_rx dmrs config type %d port %d nb_pusch_rb %d\n", dmrs_type, p, nb_pusch_rb);
|
||||||
printf("wf[%d] = %d wt[%d]= %d\n", i&1, wf[p-1000][i&1], lp, wt[p-1000][lp]);
|
printf("wf[%d] = %d wt[%d]= %d\n", i&1, wf[p-1000][i&1], lp, wt[p-1000][lp]);
|
||||||
printf("i %d idx %d pusch gold %u b0-b1 %d-%d mod_dmrs %d %d\n", i, idx, nr_gold_pusch[(i<<1)>>5], (((nr_gold_pusch[(i<<1)>>5])>>((i<<1)&0x1f))&1),
|
printf("i %d idx %d pusch gold %u b0-b1 %d-%d mod_dmrs %d %d\n",
|
||||||
(((nr_gold_pusch[((i<<1)+1)>>5])>>(((i<<1)+1)&0x1f))&1), ((int16_t*)output)[k<<1], ((int16_t*)output)[(k<<1)+1]);
|
i,
|
||||||
|
idx,
|
||||||
|
nr_gold_pusch[(i << 1) >> 5],
|
||||||
|
(((nr_gold_pusch[(i << 1) >> 5]) >> ((i << 1) & 0x1f)) & 1),
|
||||||
|
(((nr_gold_pusch[((i << 1) + 1) >> 5]) >> (((i << 1) + 1) & 0x1f)) & 1),
|
||||||
|
output[k].r,
|
||||||
|
output[k].i);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -115,11 +120,10 @@ int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
||||||
unsigned int Ns,
|
unsigned int Ns,
|
||||||
unsigned int *nr_gold_pdsch,
|
unsigned int *nr_gold_pdsch,
|
||||||
int32_t *output,
|
c16_t *output,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned char lp,
|
unsigned char lp,
|
||||||
unsigned short nb_pdsch_rb,
|
unsigned short nb_pdsch_rb,
|
||||||
@@ -139,11 +143,10 @@ int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
|||||||
if (ue->frame_parms.Ncp == NORMAL) {
|
if (ue->frame_parms.Ncp == NORMAL) {
|
||||||
for (int i = 0; i < nb_pdsch_rb * ((config_type == NFAPI_NR_DMRS_TYPE1) ? 6 : 4); i++) {
|
for (int i = 0; i < nb_pdsch_rb * ((config_type == NFAPI_NR_DMRS_TYPE1) ? 6 : 4); i++) {
|
||||||
w = (wf[p - 1000][i & 1]) * (wt[p - 1000][lp]);
|
w = (wf[p - 1000][i & 1]) * (wt[p - 1000][lp]);
|
||||||
const short *mod_table = (w == 1) ? nr_rx_mod_table : nr_rx_nmod_table;
|
const c16_t *mod_table = (w == 1) ? nr_rx_mod_table : nr_rx_nmod_table;
|
||||||
|
|
||||||
idx = ((((nr_gold_pdsch[(i << 1) >> 5]) >> ((i << 1) & 0x1f)) & 1) << 1) ^ (((nr_gold_pdsch[((i << 1) + 1) >> 5]) >> (((i << 1) + 1) & 0x1f)) & 1);
|
idx = ((((nr_gold_pdsch[(i << 1) >> 5]) >> ((i << 1) & 0x1f)) & 1) << 1) ^ (((nr_gold_pdsch[((i << 1) + 1) >> 5]) >> (((i << 1) + 1) & 0x1f)) & 1);
|
||||||
((int16_t *)output)[i << 1] = mod_table[(NR_MOD_TABLE_QPSK_OFFSET + idx) << 1];
|
output[i] = mod_table[NR_MOD_TABLE_QPSK_OFFSET + idx];
|
||||||
((int16_t *)output)[(i << 1) + 1] = mod_table[((NR_MOD_TABLE_QPSK_OFFSET + idx) << 1) + 1];
|
|
||||||
#ifdef DEBUG_PDSCH
|
#ifdef DEBUG_PDSCH
|
||||||
printf("nr_pdsch_dmrs_rx dmrs config type %d port %d nb_pdsch_rb %d\n", config_type, p, nb_pdsch_rb);
|
printf("nr_pdsch_dmrs_rx dmrs config type %d port %d nb_pdsch_rb %d\n", config_type, p, nb_pdsch_rb);
|
||||||
printf("wf[%d] = %d wt[%d]= %d\n", i & 1, wf[p - 1000][i & 1], lp, wt[p - 1000][lp]);
|
printf("wf[%d] = %d wt[%d]= %d\n", i & 1, wf[p - 1000][i & 1], lp, wt[p - 1000][lp]);
|
||||||
@@ -153,8 +156,8 @@ int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
|||||||
nr_gold_pdsch[(i << 1) >> 5],
|
nr_gold_pdsch[(i << 1) >> 5],
|
||||||
(((nr_gold_pdsch[(i << 1) >> 5]) >> ((i << 1) & 0x1f)) & 1),
|
(((nr_gold_pdsch[(i << 1) >> 5]) >> ((i << 1) & 0x1f)) & 1),
|
||||||
(((nr_gold_pdsch[((i << 1) + 1) >> 5]) >> (((i << 1) + 1) & 0x1f)) & 1),
|
(((nr_gold_pdsch[((i << 1) + 1) >> 5]) >> (((i << 1) + 1) & 0x1f)) & 1),
|
||||||
((int16_t *)output)[i << 1],
|
output[i].r,
|
||||||
((int16_t *)output)[(i << 1) + 1]);
|
output[i].i);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -167,11 +170,10 @@ int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int nr_pdcch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
int nr_pdcch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
||||||
unsigned int Ns,
|
unsigned int Ns,
|
||||||
unsigned int *nr_gold_pdcch,
|
unsigned int *nr_gold_pdcch,
|
||||||
int32_t *output,
|
c16_t *output,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned short nb_rb_coreset)
|
unsigned short nb_rb_coreset)
|
||||||
{
|
{
|
||||||
@@ -182,12 +184,17 @@ int nr_pdcch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
|||||||
if (p==2000) {
|
if (p==2000) {
|
||||||
for (int i=0; i<((nb_rb_coreset*6)>>1); i++) {
|
for (int i=0; i<((nb_rb_coreset*6)>>1); i++) {
|
||||||
idx = ((((nr_gold_pdcch[(i<<1)>>5])>>((i<<1)&0x1f))&1)<<1) ^ (((nr_gold_pdcch[((i<<1)+1)>>5])>>(((i<<1)+1)&0x1f))&1);
|
idx = ((((nr_gold_pdcch[(i<<1)>>5])>>((i<<1)&0x1f))&1)<<1) ^ (((nr_gold_pdcch[((i<<1)+1)>>5])>>(((i<<1)+1)&0x1f))&1);
|
||||||
((int16_t*)output)[i<<1] = nr_rx_mod_table[(NR_MOD_TABLE_QPSK_OFFSET + idx)<<1];
|
output[i] = nr_rx_mod_table[NR_MOD_TABLE_QPSK_OFFSET + idx];
|
||||||
((int16_t*)output)[(i<<1)+1] = nr_rx_mod_table[((NR_MOD_TABLE_QPSK_OFFSET + idx)<<1) + 1];
|
|
||||||
#ifdef DEBUG_PDCCH
|
#ifdef DEBUG_PDCCH
|
||||||
if (i<8)
|
if (i<8)
|
||||||
printf("i %d idx %d pdcch gold %u b0-b1 %d-%d mod_dmrs %d %d addr %p\n", i, idx, nr_gold_pdcch[(i<<1)>>5], (((nr_gold_pdcch[(i<<1)>>5])>>((i<<1)&0x1f))&1),
|
printf("i %d idx %d pdcch gold %u b0-b1 %d-%d mod_dmrs %d %d\n",
|
||||||
(((nr_gold_pdcch[((i<<1)+1)>>5])>>(((i<<1)+1)&0x1f))&1), ((int16_t*)output)[i<<1], ((int16_t*)output)[(i<<1)+1],&output[0]);
|
i,
|
||||||
|
idx,
|
||||||
|
nr_gold_pdcch[(i << 1) >> 5],
|
||||||
|
(((nr_gold_pdcch[(i << 1) >> 5]) >> ((i << 1) & 0x1f)) & 1),
|
||||||
|
(((nr_gold_pdcch[((i << 1) + 1) >> 5]) >> (((i << 1) + 1) & 0x1f)) & 1),
|
||||||
|
output[i].r,
|
||||||
|
output[i].i);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -195,8 +202,7 @@ int nr_pdcch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nr_pbch_dmrs_rx(const int symbol, const unsigned int *nr_gold_pbch, c16_t *output)
|
||||||
int nr_pbch_dmrs_rx(int symbol, unsigned int *nr_gold_pbch, int32_t *output)
|
|
||||||
{
|
{
|
||||||
int m,m0,m1;
|
int m,m0,m1;
|
||||||
uint8_t idx=0;
|
uint8_t idx=0;
|
||||||
@@ -217,18 +223,15 @@ int nr_pbch_dmrs_rx(int symbol, unsigned int *nr_gold_pbch, int32_t *output)
|
|||||||
/// QPSK modulation
|
/// QPSK modulation
|
||||||
for (m=m0; m<m1; m++) {
|
for (m=m0; m<m1; m++) {
|
||||||
idx = ((((nr_gold_pbch[(m<<1)>>5])>>((m<<1)&0x1f))&1)<<1) ^ (((nr_gold_pbch[((m<<1)+1)>>5])>>(((m<<1)+1)&0x1f))&1);
|
idx = ((((nr_gold_pbch[(m<<1)>>5])>>((m<<1)&0x1f))&1)<<1) ^ (((nr_gold_pbch[((m<<1)+1)>>5])>>(((m<<1)+1)&0x1f))&1);
|
||||||
((int16_t*)output)[(m-m0)<<1] = nr_rx_mod_table[(NR_MOD_TABLE_QPSK_OFFSET + idx)<<1];
|
output[m - m0] = nr_rx_mod_table[NR_MOD_TABLE_QPSK_OFFSET + idx];
|
||||||
((int16_t*)output)[((m-m0)<<1)+1] = nr_rx_mod_table[((NR_MOD_TABLE_QPSK_OFFSET + idx)<<1) + 1];
|
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
#ifdef DEBUG_PBCH
|
||||||
if (m<16)
|
if (m<16)
|
||||||
{printf("nr_gold_pbch[(m<<1)>>5] %x\n",nr_gold_pbch[(m<<1)>>5]);
|
{printf("nr_gold_pbch[(m<<1)>>5] %x\n",nr_gold_pbch[(m<<1)>>5]);
|
||||||
printf("m %d output %d %d addr %p\n", m, ((int16_t*)output)[m<<1], ((int16_t*)output)[(m<<1)+1],&output[0]);
|
printf("m %d output %d %d\n", m, output[m].r, output[m].i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -237,7 +240,7 @@ int nr_pbch_dmrs_rx(int symbol, unsigned int *nr_gold_pbch, int32_t *output)
|
|||||||
\param length is number of RE in a OFDM symbol
|
\param length is number of RE in a OFDM symbol
|
||||||
\param *output pointer to all ptrs RE in a OFDM symbol
|
\param *output pointer to all ptrs RE in a OFDM symbol
|
||||||
*/
|
*/
|
||||||
void nr_gen_ref_conj_symbols(uint32_t *in, uint32_t length, int16_t *output, uint16_t offset, int mod_order)
|
void nr_gen_ref_conj_symbols(uint32_t *in, uint32_t length, c16_t *output, uint16_t offset, int mod_order)
|
||||||
{
|
{
|
||||||
uint8_t idx, b_idx;
|
uint8_t idx, b_idx;
|
||||||
for (int i=0; i<length/mod_order; i++)
|
for (int i=0; i<length/mod_order; i++)
|
||||||
@@ -250,15 +253,14 @@ void nr_gen_ref_conj_symbols(uint32_t *in, uint32_t length, int16_t *output, uin
|
|||||||
in++;
|
in++;
|
||||||
idx ^= (((*in)>>b_idx)&1)<<(mod_order-j-1);
|
idx ^= (((*in)>>b_idx)&1)<<(mod_order-j-1);
|
||||||
}
|
}
|
||||||
output[i<<1] = nr_rx_mod_table[(offset+idx)<<1];
|
output[i] = nr_rx_mod_table[offset + idx];
|
||||||
output[(i<<1)+1] = nr_rx_mod_table[((offset+idx)<<1)+1];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int nr_pusch_lowpaprtype1_dmrs_rx(PHY_VARS_gNB *gNB,
|
int nr_pusch_lowpaprtype1_dmrs_rx(PHY_VARS_gNB *gNB,
|
||||||
unsigned int Ns,
|
unsigned int Ns,
|
||||||
int16_t *dmrs_seq,
|
c16_t *dmrs_seq,
|
||||||
int32_t *output,
|
c16_t *output,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned char lp,
|
unsigned char lp,
|
||||||
unsigned short nb_pusch_rb,
|
unsigned short nb_pusch_rb,
|
||||||
@@ -278,19 +280,21 @@ int nr_pusch_lowpaprtype1_dmrs_rx(PHY_VARS_gNB *gNB,
|
|||||||
nb_dmrs = NR_NB_SC_PER_RB/2; // for DMRS TYPE 1 - 6 DMRS REs present per RB
|
nb_dmrs = NR_NB_SC_PER_RB/2; // for DMRS TYPE 1 - 6 DMRS REs present per RB
|
||||||
for (int i=dmrs_offset; i<dmrs_offset+(nb_pusch_rb*nb_dmrs); i++) {
|
for (int i=dmrs_offset; i<dmrs_offset+(nb_pusch_rb*nb_dmrs); i++) {
|
||||||
k = i-dmrs_offset;
|
k = i-dmrs_offset;
|
||||||
w = (wf1[p-1000][i&1])*(wt1[p-1000][lp]);
|
w = (wf1[p - 1000][i & 1]) * (wt1[p - 1000][lp]);
|
||||||
|
|
||||||
((int16_t*)output)[2*k] = w*dmrs_seq[2*i];
|
|
||||||
((int16_t*)output)[(2*k)+1] = -(w*dmrs_seq[(2*i)+1]);// conjugate
|
|
||||||
|
|
||||||
|
output[k].r = w * dmrs_seq[i].r;
|
||||||
|
output[k].i = -w * dmrs_seq[i].i; // conjugate
|
||||||
|
|
||||||
#ifdef DEBUG_PUSCH
|
#ifdef DEBUG_PUSCH
|
||||||
printf("NR_DMRS_RX: nr_pusch_dmrs_rx dmrs config type %d port %d nb_pusch_rb %d nb_dmrs %d\n", dmrs_type, p, nb_pusch_rb, nb_dmrs);
|
printf("NR_DMRS_RX: nr_pusch_dmrs_rx dmrs config type %d port %d nb_pusch_rb %d nb_dmrs %d\n",
|
||||||
printf("NR_DMRS_RX: wf[%d] = %d wt[%d]= %d\n", i&1, wf1[p-1000][i&1], lp, wt1[p-1000][lp]);
|
dmrs_type,
|
||||||
printf("NR_DMRS_RX: i %d dmrs_offset %d k %d pusch dmrsseq[i<<1] %d, dmrsseq[(i<<1)+1] %d pilots[k<<1] %d pilots[(k<<1)+1] %d\n", i, dmrs_offset, k,
|
p,
|
||||||
dmrs_seq[i<<1], dmrs_seq[(i<<1)+1], ((int16_t*)output)[k<<1], ((int16_t*)output)[(k<<1)+1]);
|
nb_pusch_rb,
|
||||||
#endif
|
nb_dmrs);
|
||||||
|
printf("NR_DMRS_RX: wf[%d] = %d wt[%d]= %d\n", i & 1, wf1[p - 1000][i & 1], lp, wt1[p - 1000][lp]);
|
||||||
|
printf("NR_DMRS_RX: i %d dmrs_offset %d k %d pusch dmrsseq[i<<1] %d, dmrsseq[(i<<1)+1] %d pilots[k<<1] %d pilots[(k<<1)+1] %d\n", i, dmrs_offset, k,
|
||||||
|
dmrs_seq[i].r, dmrs_seq[i].i, output[k].r, output[(k].i);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG_E(PHY,"extended cp not supported for PUSCH DMRS yet\n");
|
LOG_E(PHY,"extended cp not supported for PUSCH DMRS yet\n");
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ int nr_pusch_dmrs_delta(uint8_t dmrs_config_type, unsigned short p);
|
|||||||
int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB,
|
int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB,
|
||||||
unsigned int Ns,
|
unsigned int Ns,
|
||||||
unsigned int *nr_gold_pusch,
|
unsigned int *nr_gold_pusch,
|
||||||
int32_t *output,
|
c16_t *output,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned char lp,
|
unsigned char lp,
|
||||||
unsigned short nb_pusch_rb,
|
unsigned short nb_pusch_rb,
|
||||||
@@ -68,18 +68,14 @@ extern simde__m64 byte2m64_re[256];
|
|||||||
extern simde__m64 byte2m64_im[256];
|
extern simde__m64 byte2m64_im[256];
|
||||||
extern simde__m128i byte2m128i[256];
|
extern simde__m128i byte2m128i[256];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int nr_pusch_lowpaprtype1_dmrs_rx(PHY_VARS_gNB *gNB,
|
int nr_pusch_lowpaprtype1_dmrs_rx(PHY_VARS_gNB *gNB,
|
||||||
unsigned int Ns,
|
unsigned int Ns,
|
||||||
int16_t *dmrs_seq,
|
c16_t *dmrs_seq,
|
||||||
int32_t *output,
|
c16_t *output,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned char lp,
|
unsigned char lp,
|
||||||
unsigned short nb_pusch_rb,
|
unsigned short nb_pusch_rb,
|
||||||
uint32_t re_offset,
|
uint32_t re_offset,
|
||||||
uint8_t dmrs_type);
|
uint8_t dmrs_type);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -27,13 +27,10 @@
|
|||||||
#include "PHY/defs_nr_UE.h"
|
#include "PHY/defs_nr_UE.h"
|
||||||
#include "PHY/LTE_REFSIG/lte_refsig.h"
|
#include "PHY/LTE_REFSIG/lte_refsig.h"
|
||||||
|
|
||||||
|
|
||||||
/*!\brief This function generates the NR Gold sequence (38-211, Sec 5.2.1) for the PBCH DMRS.
|
/*!\brief This function generates the NR Gold sequence (38-211, Sec 5.2.1) for the PBCH DMRS.
|
||||||
@param PHY_VARS_NR_UE* ue structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
|
@param PHY_VARS_NR_UE* ue structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
|
||||||
*/
|
*/
|
||||||
int nr_pbch_dmrs_rx(int dmrss,
|
void nr_pbch_dmrs_rx(const int dmrss, const unsigned int *nr_gold_pbch, c16_t *output);
|
||||||
unsigned int *nr_gold_pbch,
|
|
||||||
int32_t *output);
|
|
||||||
|
|
||||||
/*!\brief This function generates the NR Gold sequence (38-211, Sec 5.2.1) for the PDCCH DMRS.
|
/*!\brief This function generates the NR Gold sequence (38-211, Sec 5.2.1) for the PDCCH DMRS.
|
||||||
@param PHY_VARS_NR_UE* ue structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
|
@param PHY_VARS_NR_UE* ue structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
|
||||||
@@ -41,14 +38,14 @@ int nr_pbch_dmrs_rx(int dmrss,
|
|||||||
int nr_pdcch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
int nr_pdcch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
||||||
unsigned int Ns,
|
unsigned int Ns,
|
||||||
unsigned int *nr_gold_pdcch,
|
unsigned int *nr_gold_pdcch,
|
||||||
int32_t *output,
|
c16_t *output,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned short nb_rb_corset);
|
unsigned short nb_rb_corset);
|
||||||
|
|
||||||
int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
|
||||||
unsigned int Ns,
|
unsigned int Ns,
|
||||||
unsigned int *nr_gold_pdsch,
|
unsigned int *nr_gold_pdsch,
|
||||||
int32_t *output,
|
c16_t *output,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned char lp,
|
unsigned char lp,
|
||||||
unsigned short nb_pdsch_rb,
|
unsigned short nb_pdsch_rb,
|
||||||
|
|||||||
@@ -52,53 +52,44 @@
|
|||||||
*
|
*
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
static int16_t *base_sequence_less_than_36(unsigned int M_ZC, unsigned int u, unsigned int scaling)
|
static c16_t *base_sequence_less_than_36(unsigned int M_ZC, unsigned int u, unsigned int scaling)
|
||||||
{
|
{
|
||||||
char *phi_table;
|
const char *phi_table;
|
||||||
int16_t *rv_overbar;
|
|
||||||
double x;
|
|
||||||
unsigned int n;
|
|
||||||
|
|
||||||
switch(M_ZC) {
|
switch(M_ZC) {
|
||||||
case 6:
|
case 6:
|
||||||
phi_table = (char *)phi_M_ZC_6;
|
phi_table = phi_M_ZC_6;
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
phi_table = (char *)phi_M_ZC_12;
|
phi_table = phi_M_ZC_12;
|
||||||
break;
|
break;
|
||||||
case 18:
|
case 18:
|
||||||
phi_table = (char *)phi_M_ZC_18;
|
phi_table = phi_M_ZC_18;
|
||||||
break;
|
break;
|
||||||
case 24:
|
case 24:
|
||||||
phi_table = (char *)phi_M_ZC_24;
|
phi_table = phi_M_ZC_24;
|
||||||
break;
|
break;
|
||||||
case 30:
|
case 30:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("function base_sequence_less_than 36_: unsupported base sequence size : %u \n", M_ZC);
|
AssertFatal(false, "function base_sequence_less_than 36_: unsupported base sequence size : %u \n", M_ZC);
|
||||||
assert(0);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
rv_overbar = malloc16(IQ_SIZE*M_ZC);
|
c16_t *rv_overbar = malloc16(IQ_SIZE * M_ZC);
|
||||||
|
AssertFatal(rv_overbar, "Fatal memory allocation problem \n");
|
||||||
if (rv_overbar == NULL) {
|
|
||||||
msg("Fatal memory allocation problem \n");
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (M_ZC == 30) {
|
if (M_ZC == 30) {
|
||||||
for (n=0; n<M_ZC; n++) {
|
for (unsigned int n = 0; n < M_ZC; n++) {
|
||||||
x = -(M_PI * (u + 1) * (n + 1) * (n + 2))/(double)31;
|
const double x = -(M_PI * (u + 1) * (n + 1) * (n + 2)) / (double)31;
|
||||||
rv_overbar[2*n] =(int16_t)(floor(scaling*cos(x)));
|
rv_overbar[n].r = (int16_t)(floor(scaling * cos(x)));
|
||||||
rv_overbar[2*n+1] =(int16_t)(floor(scaling*sin(x)));
|
rv_overbar[n].i = (int16_t)(floor(scaling * sin(x)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (n=0; n<M_ZC; n++) {
|
for (unsigned int n = 0; n < M_ZC; n++) {
|
||||||
x = (double)phi_table[n + u*M_ZC] * (M_PI/4);
|
const double x = (double)phi_table[n + u * M_ZC] * (M_PI / 4);
|
||||||
rv_overbar[2*n] = (int16_t)(floor(scaling*cos(x)));
|
rv_overbar[n].r = (int16_t)(floor(scaling * cos(x)));
|
||||||
rv_overbar[2*n+1] = (int16_t)(floor(scaling*sin(x)));
|
rv_overbar[n].i = (int16_t)(floor(scaling * sin(x)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rv_overbar;
|
return rv_overbar;
|
||||||
@@ -117,9 +108,9 @@ static int16_t *base_sequence_less_than_36(unsigned int M_ZC, unsigned int u, un
|
|||||||
*
|
*
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
int16_t get_index_for_dmrs_lowpapr_seq(int16_t num_dmrs_res) {
|
int get_index_for_dmrs_lowpapr_seq(int num_dmrs_res)
|
||||||
|
{
|
||||||
int16_t index = num_dmrs_res/6 - 1;
|
int index = num_dmrs_res / 6 - 1;
|
||||||
|
|
||||||
if (index >= MAX_INDEX_DMRS_UL_ALLOCATED_REs)
|
if (index >= MAX_INDEX_DMRS_UL_ALLOCATED_REs)
|
||||||
index = MAX_INDEX_DMRS_UL_ALLOCATED_REs-1;
|
index = MAX_INDEX_DMRS_UL_ALLOCATED_REs-1;
|
||||||
@@ -149,79 +140,63 @@ int16_t get_index_for_dmrs_lowpapr_seq(int16_t num_dmrs_res) {
|
|||||||
*
|
*
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
static int16_t *base_sequence_36_or_larger(unsigned int Msc_RS,
|
static c16_t *base_sequence_36_or_larger(unsigned int Msc_RS,
|
||||||
unsigned int u,
|
unsigned int u,
|
||||||
unsigned int v,
|
unsigned int v,
|
||||||
unsigned int scaling,
|
unsigned int scaling,
|
||||||
unsigned int if_dmrs_seq)
|
unsigned int if_dmrs_seq)
|
||||||
{
|
{
|
||||||
int16_t *rv_overbar;
|
const unsigned int M_ZC = if_dmrs_seq ? dmrs_ul_allocated_res[Msc_RS] : ul_allocated_re[Msc_RS];
|
||||||
unsigned int N_ZC, M_ZC;
|
|
||||||
double q_overbar, x;
|
|
||||||
unsigned int q,m,n;
|
|
||||||
|
|
||||||
|
|
||||||
if (if_dmrs_seq)
|
c16_t *rv_overbar = malloc16(IQ_SIZE * M_ZC);
|
||||||
M_ZC = dmrs_ul_allocated_res[Msc_RS];
|
AssertFatal(rv_overbar, "Fatal memory allocation problem \n");
|
||||||
else
|
|
||||||
M_ZC = ul_allocated_re[Msc_RS];
|
|
||||||
|
|
||||||
|
|
||||||
rv_overbar = malloc16(IQ_SIZE*M_ZC);
|
/* The length N_ZC is given by the largest prime number such that N_ZC < M_ZC */
|
||||||
if (rv_overbar == NULL) {
|
const unsigned int N_ZC = if_dmrs_seq ? dmrs_ref_ul_primes[Msc_RS] : ref_ul_primes[Msc_RS];
|
||||||
msg("Fatal memory allocation problem \n");
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (if_dmrs_seq)
|
const double q_overbar = N_ZC * (u + 1) / (double)31;
|
||||||
N_ZC = dmrs_ref_ul_primes[Msc_RS];
|
|
||||||
else
|
|
||||||
N_ZC = ref_ul_primes[Msc_RS]; /* The length N_ZC is given by the largest prime number such that N_ZC < M_ZC */
|
|
||||||
|
|
||||||
|
|
||||||
q_overbar = N_ZC * (u+1)/(double)31;
|
|
||||||
|
|
||||||
/* q = (q_overbar + 1/2) + v.(-1)^(2q_overbar) */
|
/* q = (q_overbar + 1/2) + v.(-1)^(2q_overbar) */
|
||||||
|
double q;
|
||||||
if ((((int)floor(2*q_overbar))&1) == 0)
|
if ((((int)floor(2*q_overbar))&1) == 0)
|
||||||
q = (int)(floor(q_overbar+.5)) - v;
|
q = floor(q_overbar + .5) - v;
|
||||||
else
|
else
|
||||||
q = (int)(floor(q_overbar+.5)) + v;
|
q = floor(q_overbar + .5) + v;
|
||||||
|
|
||||||
for (n = 0; n < M_ZC; n++) {
|
for (int n = 0; n < M_ZC; n++) {
|
||||||
m=n%N_ZC;
|
const int m = n % N_ZC;
|
||||||
x = (double)q * m * (m+1)/N_ZC;
|
const double x = q * m * (m + 1) / N_ZC;
|
||||||
rv_overbar[2*n] = (int16_t)(floor(scaling*cos(M_PI*x))); /* cos(-x) = cos(x) */
|
rv_overbar[n].r = (int16_t)(floor(scaling * cos(M_PI * x))); /* cos(-x) = cos(x) */
|
||||||
rv_overbar[2*n+1] = -(int16_t)(floor(scaling*sin(M_PI*x))); /* sin(-x) = -sin(x) */
|
rv_overbar[n].i = -(int16_t)(floor(scaling * sin(M_PI * x))); /* sin(-x) = -sin(x) */
|
||||||
}
|
}
|
||||||
return rv_overbar;
|
return rv_overbar;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t *rv_ul_ref_sig[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][SRS_SB_CONF];
|
c16_t *rv_ul_ref_sig[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][SRS_SB_CONF];
|
||||||
int16_t *gNB_dmrs_lowpaprtype1_sequence[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][MAX_INDEX_DMRS_UL_ALLOCATED_REs];
|
c16_t *gNB_dmrs_lowpaprtype1_sequence[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][MAX_INDEX_DMRS_UL_ALLOCATED_REs];
|
||||||
void generate_lowpapr_typ1_refsig_sequences(unsigned int scaling)
|
void generate_lowpapr_typ1_refsig_sequences(unsigned int scaling)
|
||||||
{
|
{
|
||||||
/* prevent multiple calls, relevant when both UE & gNB initialize this */
|
/* prevent multiple calls, relevant when both UE & gNB initialize this */
|
||||||
static bool already_called = false;
|
static bool already_called = false;
|
||||||
if (already_called) return;
|
if (already_called)
|
||||||
|
return;
|
||||||
already_called = true;
|
already_called = true;
|
||||||
|
|
||||||
unsigned int u,Msc_RS;
|
|
||||||
unsigned int v = 0; // sequence hopping and group hopping are not supported yet
|
unsigned int v = 0; // sequence hopping and group hopping are not supported yet
|
||||||
|
|
||||||
for (Msc_RS=0; Msc_RS <= INDEX_SB_LESS_32; Msc_RS++) {
|
for (unsigned int Msc_RS = 0; Msc_RS <= INDEX_SB_LESS_32; Msc_RS++) {
|
||||||
for (u=0; u < U_GROUP_NUMBER; u++) {
|
for (unsigned int u = 0; u < U_GROUP_NUMBER; u++) {
|
||||||
gNB_dmrs_lowpaprtype1_sequence[u][v][Msc_RS] = base_sequence_less_than_36(ul_allocated_re[Msc_RS], u, scaling);
|
gNB_dmrs_lowpaprtype1_sequence[u][v][Msc_RS] = base_sequence_less_than_36(ul_allocated_re[Msc_RS], u, scaling);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Msc_RS=INDEX_SB_LESS_32+1; Msc_RS < MAX_INDEX_DMRS_UL_ALLOCATED_REs; Msc_RS++) {
|
for (unsigned int Msc_RS = INDEX_SB_LESS_32 + 1; Msc_RS < MAX_INDEX_DMRS_UL_ALLOCATED_REs; Msc_RS++) {
|
||||||
for (u=0; u < U_GROUP_NUMBER; u++) {
|
for (unsigned int u = 0; u < U_GROUP_NUMBER; u++) {
|
||||||
gNB_dmrs_lowpaprtype1_sequence[u][v][Msc_RS] = base_sequence_36_or_larger(Msc_RS, u, v, scaling, 1);
|
gNB_dmrs_lowpaprtype1_sequence[u][v][Msc_RS] = base_sequence_36_or_larger(Msc_RS, u, v, scaling, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t *dmrs_lowpaprtype1_ul_ref_sig[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][MAX_INDEX_DMRS_UL_ALLOCATED_REs];
|
c16_t *dmrs_lowpaprtype1_ul_ref_sig[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][MAX_INDEX_DMRS_UL_ALLOCATED_REs];
|
||||||
void generate_ul_reference_signal_sequences(unsigned int scaling)
|
void generate_ul_reference_signal_sequences(unsigned int scaling)
|
||||||
{
|
{
|
||||||
/* prevent multiple calls, relevant when both UE & gNB initialize this */
|
/* prevent multiple calls, relevant when both UE & gNB initialize this */
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ static const uint16_t ref_ul_primes[SRS_SB_CONF] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Low-PAPR base sequence; see TS 38.211 clause 5.2.2 */
|
/* Low-PAPR base sequence; see TS 38.211 clause 5.2.2 */
|
||||||
extern int16_t *rv_ul_ref_sig[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][SRS_SB_CONF];
|
extern c16_t *rv_ul_ref_sig[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][SRS_SB_CONF];
|
||||||
|
|
||||||
/* 38.211 table Table 5.2.2.2-1: Definition of phi(n) for M_ZC = 6 */
|
/* 38.211 table Table 5.2.2.2-1: Definition of phi(n) for M_ZC = 6 */
|
||||||
static const char phi_M_ZC_6[6 * U_GROUP_NUMBER] = {
|
static const char phi_M_ZC_6[6 * U_GROUP_NUMBER] = {
|
||||||
@@ -524,9 +524,9 @@ static const uint16_t dmrs_ref_ul_primes[MAX_INDEX_DMRS_UL_ALLOCATED_REs] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// PUSCH DMRS for transform precoding
|
/// PUSCH DMRS for transform precoding
|
||||||
extern int16_t *gNB_dmrs_lowpaprtype1_sequence[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][MAX_INDEX_DMRS_UL_ALLOCATED_REs];
|
extern c16_t *gNB_dmrs_lowpaprtype1_sequence[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][MAX_INDEX_DMRS_UL_ALLOCATED_REs];
|
||||||
extern int16_t *dmrs_lowpaprtype1_ul_ref_sig[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][MAX_INDEX_DMRS_UL_ALLOCATED_REs];
|
extern c16_t *dmrs_lowpaprtype1_ul_ref_sig[U_GROUP_NUMBER][V_BASE_SEQUENCE_NUMBER][MAX_INDEX_DMRS_UL_ALLOCATED_REs];
|
||||||
int16_t get_index_for_dmrs_lowpapr_seq(int16_t num_dmrs_res);
|
int get_index_for_dmrs_lowpapr_seq(int num_dmrs_res);
|
||||||
void generate_lowpapr_typ1_refsig_sequences(unsigned int scaling);
|
void generate_lowpapr_typ1_refsig_sequences(unsigned int scaling);
|
||||||
void free_gnb_lowpapr_sequences(void);
|
void free_gnb_lowpapr_sequences(void);
|
||||||
|
|
||||||
|
|||||||
@@ -1450,16 +1450,13 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
|
|||||||
uint8_t slot,
|
uint8_t slot,
|
||||||
unsigned char harq_pid)
|
unsigned char harq_pid)
|
||||||
{
|
{
|
||||||
uint8_t aarx;
|
|
||||||
uint32_t bwp_start_subcarrier;
|
|
||||||
|
|
||||||
NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms;
|
NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms;
|
||||||
nfapi_nr_pusch_pdu_t *rel15_ul = &gNB->ulsch[ulsch_id].harq_process->ulsch_pdu;
|
nfapi_nr_pusch_pdu_t *rel15_ul = &gNB->ulsch[ulsch_id].harq_process->ulsch_pdu;
|
||||||
|
|
||||||
NR_gNB_PUSCH *pusch_vars = &gNB->pusch_vars[ulsch_id];
|
NR_gNB_PUSCH *pusch_vars = &gNB->pusch_vars[ulsch_id];
|
||||||
pusch_vars->dmrs_symbol = INVALID_VALUE;
|
pusch_vars->dmrs_symbol = INVALID_VALUE;
|
||||||
gNB->nbSymb = 0;
|
gNB->nbSymb = 0;
|
||||||
bwp_start_subcarrier = ((rel15_ul->rb_start + rel15_ul->bwp_start)*NR_NB_SC_PER_RB + frame_parms->first_carrier_offset) % frame_parms->ofdm_symbol_size;
|
uint32_t bwp_start_subcarrier = ((rel15_ul->rb_start + rel15_ul->bwp_start) * NR_NB_SC_PER_RB + frame_parms->first_carrier_offset) % frame_parms->ofdm_symbol_size;
|
||||||
LOG_D(PHY,"pusch %d.%d : bwp_start_subcarrier %d, rb_start %d, first_carrier_offset %d\n", frame,slot,bwp_start_subcarrier, rel15_ul->rb_start, frame_parms->first_carrier_offset);
|
LOG_D(PHY,"pusch %d.%d : bwp_start_subcarrier %d, rb_start %d, first_carrier_offset %d\n", frame,slot,bwp_start_subcarrier, rel15_ul->rb_start, frame_parms->first_carrier_offset);
|
||||||
LOG_D(PHY,"pusch %d.%d : ul_dmrs_symb_pos %x\n",frame,slot,rel15_ul->ul_dmrs_symb_pos);
|
LOG_D(PHY,"pusch %d.%d : ul_dmrs_symb_pos %x\n",frame,slot,rel15_ul->ul_dmrs_symb_pos);
|
||||||
|
|
||||||
@@ -1477,11 +1474,12 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
|
|||||||
if (pusch_vars->dmrs_symbol == INVALID_VALUE)
|
if (pusch_vars->dmrs_symbol == INVALID_VALUE)
|
||||||
pusch_vars->dmrs_symbol = symbol;
|
pusch_vars->dmrs_symbol = symbol;
|
||||||
|
|
||||||
for (int nl=0; nl<rel15_ul->nrOfLayers; nl++) {
|
for (int nl = 0; nl < rel15_ul->nrOfLayers; nl++) {
|
||||||
uint32_t nvar_tmp = 0;
|
uint32_t nvar_tmp = 0;
|
||||||
nr_pusch_channel_estimation(gNB,
|
nr_pusch_channel_estimation(gNB,
|
||||||
slot,
|
slot,
|
||||||
get_dmrs_port(nl,rel15_ul->dmrs_ports),
|
nl,
|
||||||
|
get_dmrs_port(nl, rel15_ul->dmrs_ports),
|
||||||
symbol,
|
symbol,
|
||||||
ulsch_id,
|
ulsch_id,
|
||||||
bwp_start_subcarrier,
|
bwp_start_subcarrier,
|
||||||
@@ -1502,10 +1500,8 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
|
|||||||
frame_parms->nb_antennas_rx,
|
frame_parms->nb_antennas_rx,
|
||||||
frame_parms->N_RB_UL,
|
frame_parms->N_RB_UL,
|
||||||
false);
|
false);
|
||||||
for (aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++)
|
for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) {
|
||||||
{
|
if (symbol == rel15_ul->start_symbol_index) {
|
||||||
if (symbol == rel15_ul->start_symbol_index)
|
|
||||||
{
|
|
||||||
pusch_vars->ulsch_power[aarx] = 0;
|
pusch_vars->ulsch_power[aarx] = 0;
|
||||||
pusch_vars->ulsch_noise_power[aarx] = 0;
|
pusch_vars->ulsch_noise_power[aarx] = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1015,7 +1015,8 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
|||||||
int frame,
|
int frame,
|
||||||
int slot,
|
int slot,
|
||||||
nfapi_nr_uci_pucch_pdu_format_2_3_4_t* uci_pdu,
|
nfapi_nr_uci_pucch_pdu_format_2_3_4_t* uci_pdu,
|
||||||
nfapi_nr_pucch_pdu_t* pucch_pdu) {
|
nfapi_nr_pucch_pdu_t* pucch_pdu)
|
||||||
|
{
|
||||||
|
|
||||||
c16_t **rxdataF = gNB->common_vars.rxdataF;
|
c16_t **rxdataF = gNB->common_vars.rxdataF;
|
||||||
NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms;
|
NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms;
|
||||||
@@ -1607,14 +1608,15 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
// estimate CQI for MAC (from antenna port 0 only)
|
// estimate CQI for MAC (from antenna port 0 only)
|
||||||
// TODO this computation is wrong -> to be ignored at MAC for now
|
// TODO this computation is wrong -> to be ignored at MAC for now
|
||||||
int SNRtimes10 =
|
int cqi = 0xff;
|
||||||
|
/*int SNRtimes10 =
|
||||||
dB_fixed_times10(signal_energy_nodc((int32_t *)&rxdataF[0][soffset + (l2 * frame_parms->ofdm_symbol_size) + re_offset[0]],
|
dB_fixed_times10(signal_energy_nodc((int32_t *)&rxdataF[0][soffset + (l2 * frame_parms->ofdm_symbol_size) + re_offset[0]],
|
||||||
12 * pucch_pdu->prb_size))
|
12 * pucch_pdu->prb_size))
|
||||||
- (10 * gNB->measurements.n0_power_tot_dB);
|
- (10 * gNB->measurements.n0_power_tot_dB);
|
||||||
int cqi,bit_left;
|
int cqi,bit_left;
|
||||||
if (SNRtimes10 < -640) cqi=0;
|
if (SNRtimes10 < -640) cqi=0;
|
||||||
else if (SNRtimes10 > 635) cqi=255;
|
else if (SNRtimes10 > 635) cqi=255;
|
||||||
else cqi=(640+SNRtimes10)/5;
|
else cqi=(640+SNRtimes10)/5;*/
|
||||||
|
|
||||||
uci_pdu->harq.harq_bit_len = pucch_pdu->bit_len_harq;
|
uci_pdu->harq.harq_bit_len = pucch_pdu->bit_len_harq;
|
||||||
uci_pdu->pduBitmap=0;
|
uci_pdu->pduBitmap=0;
|
||||||
@@ -1638,8 +1640,8 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
|||||||
LOG_D(PHY, "[DLSCH/PDSCH/PUCCH2] %d.%d HARQ payload (%d) = %d\n", frame, slot, i, uci_pdu->harq.harq_payload[i]);
|
LOG_D(PHY, "[DLSCH/PDSCH/PUCCH2] %d.%d HARQ payload (%d) = %d\n", frame, slot, i, uci_pdu->harq.harq_payload[i]);
|
||||||
decodedPayload[0]>>=8;
|
decodedPayload[0]>>=8;
|
||||||
}
|
}
|
||||||
bit_left = pucch_pdu->bit_len_harq-((harq_bytes-1)<<3);
|
int bit_left = pucch_pdu->bit_len_harq - ((harq_bytes - 1) << 3);
|
||||||
uci_pdu->harq.harq_payload[i] = decodedPayload[0] & ((1<<bit_left)-1);
|
uci_pdu->harq.harq_payload[i] = decodedPayload[0] & ((1 << bit_left) - 1);
|
||||||
LOG_D(PHY, "[DLSCH/PDSCH/PUCCH2] %d.%d HARQ payload (%d) = %d\n", frame, slot, i, uci_pdu->harq.harq_payload[i]);
|
LOG_D(PHY, "[DLSCH/PDSCH/PUCCH2] %d.%d HARQ payload (%d) = %d\n", frame, slot, i, uci_pdu->harq.harq_payload[i]);
|
||||||
decodedPayload[0] >>= pucch_pdu->bit_len_harq;
|
decodedPayload[0] >>= pucch_pdu->bit_len_harq;
|
||||||
}
|
}
|
||||||
@@ -1664,8 +1666,8 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
|||||||
uci_pdu->csi_part1.csi_part1_payload[i] = decodedPayload[0] & 255;
|
uci_pdu->csi_part1.csi_part1_payload[i] = decodedPayload[0] & 255;
|
||||||
decodedPayload[0]>>=8;
|
decodedPayload[0]>>=8;
|
||||||
}
|
}
|
||||||
bit_left = pucch_pdu->bit_len_csi_part1-((csi_part1_bytes-1)<<3);
|
int bit_left = pucch_pdu->bit_len_csi_part1-((csi_part1_bytes-1)<<3);
|
||||||
uci_pdu->csi_part1.csi_part1_payload[i] = decodedPayload[0] & ((1<<bit_left)-1);
|
uci_pdu->csi_part1.csi_part1_payload[i] = decodedPayload[0] & ((1 << bit_left) - 1);
|
||||||
decodedPayload[0] = pucch_pdu->bit_len_csi_part1 < 64 ? decodedPayload[0] >> bit_left : 0;
|
decodedPayload[0] = pucch_pdu->bit_len_csi_part1 < 64 ? decodedPayload[0] >> bit_left : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,15 +20,16 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef __FILT16A_H__
|
#ifndef __FILT16A_H__
|
||||||
#define __FILT16A_H__
|
#define __FILT16A_H__
|
||||||
static const short filt16a_l0[16] = {16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
static const c16_t filt16a_l0[8] = {{16384, 12288}, {8192, 4096}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_mm0[16] = {0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0, 0, 0};
|
static const short filt16a_mm0[16] = {0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
static const short filt16a_r0[16] = {0, 0, 0, 0, 0, 4096, 8192, 12288, 16384, 20480, 24576, 28672, 0, 0, 0, 0};
|
static const c16_t filt16a_r0[8] = {{0, 0}, {0, 0}, {0, 4096}, {8192, 12288}, {16384, 20480}, {24576, 28672}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_m0[16] = {0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, -4096, -8192, -12288, 0, 0, 0, 0};
|
static const c16_t filt16a_m0[8] =
|
||||||
|
{{0, 4096}, {8192, 12288}, {16384, 12288}, {8192, 4096}, {0, -4096}, {-8192, -12288}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_l1[16] = {20480, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
static const c16_t filt16a_l1[8] = {{20480, 16384}, {12288, 8192}, {4096, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_mm1[16] = {0, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0, 0};
|
static const short filt16a_mm1[16] = {0, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
@@ -36,11 +37,12 @@ static const short filt16a_ml1[16] = {-4096, 0, 4096, 8192, 12288, 16384, 12288,
|
|||||||
|
|
||||||
static const short filt16a_mr1[16] = {0, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, -4096, -8192, 0, 0, 0, 0};
|
static const short filt16a_mr1[16] = {0, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, -4096, -8192, 0, 0, 0, 0};
|
||||||
|
|
||||||
static const short filt16a_r1[16] = {0, 0, 0, 0, 0, 0, 4096, 8192, 12288, 16384, 20480, 24576, 0, 0, 0, 0};
|
static const c16_t filt16a_r1[8] = {{0, 0}, {0, 0}, {0, 0}, {4096, 8192}, {12288, 16384}, {20480, 24576}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_m1[16] = {-4096, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, -4096, -8192, 0, 0, 0, 0};
|
static const c16_t filt16a_m1[8] =
|
||||||
|
{{-4096, 0}, {4096, 8192}, {12288, 16384}, {12288, 8192}, {4096, 0}, {-4096, -8192}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_l2[16] = {24576, 20480, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
static const c16_t filt16a_l2[8] = {{24576, 20480}, {16384, 12288}, {8192, 4096}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_mm2[16] = {0, 0, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0};
|
static const short filt16a_mm2[16] = {0, 0, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
@@ -48,19 +50,21 @@ static const short filt16a_ml2[16] = {-8192, -4096, 0, 4096, 8192, 12288, 16384,
|
|||||||
|
|
||||||
static const short filt16a_mr2[16] = {0, 0, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, -4096, 0, 0, 0, 0};
|
static const short filt16a_mr2[16] = {0, 0, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, -4096, 0, 0, 0, 0};
|
||||||
|
|
||||||
static const short filt16a_r2[16] = {0, 0, 0, 0, 0, 0, 0, 4096, 8192, 12288, 16384, 20480, 0, 0, 0, 0};
|
static const c16_t filt16a_r2[8] = {{0, 0}, {0, 0}, {0, 0}, {0, 4096}, {8192, 12288}, {16384, 20480}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_m2[16] = {-8192, -4096, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, -4096, 0, 0, 0, 0};
|
static const c16_t filt16a_m2[8] =
|
||||||
|
{{-8192, -4096}, {0, 4096}, {8192, 12288}, {16384, 12288}, {8192, 4096}, {0, -4096}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_l3[16] = {28672, 24576, 20480, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
static const c16_t filt16a_l3[8] = {{28672, 24576}, {20480, 16384}, {12288, 8192}, {4096, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_mm3[16] = {0, 0, 0, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0};
|
static const short filt16a_mm3[16] = {0, 0, 0, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
static const short filt16a_ml3[16] = {-12288, -8192, -4096, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0};
|
static const short filt16a_ml3[16] = {-12288, -8192, -4096, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
static const short filt16a_r3[16] = {0, 0, 0, 0, 0, 0, 0, 0, 4096, 8192, 12288, 16384, 0, 0, 0, 0};
|
static const c16_t filt16a_r3[8] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {4096, 8192}, {12288, 16384}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_m3[16] = {-12288, -8192, -4096, 0, 4096, 8192, 12288, 16384, 12288, 8192, 4096, 0, 0, 0, 0, 0};
|
static const c16_t filt16a_m3[8] =
|
||||||
|
{{-12288, -8192}, {-4096, 0}, {4096, 8192}, {12288, 16384}, {12288, 8192}, {4096, 0}, {0, 0}, {0, 0}};
|
||||||
|
|
||||||
static const short filt16a_l0_dc[16] = {16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
static const short filt16a_l0_dc[16] = {16384, 12288, 8192, 4096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
|
|||||||
@@ -37,9 +37,10 @@
|
|||||||
|
|
||||||
extern openair0_config_t openair0_cfg[];
|
extern openair0_config_t openair0_cfg[];
|
||||||
|
|
||||||
//#define DEBUG_PDSCH
|
// #define DEBUG_PDSCH
|
||||||
//#define DEBUG_PDCCH
|
// #define DEBUG_PDCCH
|
||||||
//#define DEBUG_PBCH
|
// #define DEBUG_PBCH(a...) printf(a)
|
||||||
|
#define DEBUG_PBCH(a...)
|
||||||
//#define DEBUG_PRS_CHEST // To enable PRS Matlab dumps
|
//#define DEBUG_PRS_CHEST // To enable PRS Matlab dumps
|
||||||
//#define DEBUG_PRS_PRINTS // To enable PRS channel estimation debug logs
|
//#define DEBUG_PRS_PRINTS // To enable PRS channel estimation debug logs
|
||||||
|
|
||||||
@@ -295,39 +296,39 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
|
|||||||
// Choose the interpolation filters
|
// Choose the interpolation filters
|
||||||
switch (k_prime) {
|
switch (k_prime) {
|
||||||
case 0:
|
case 0:
|
||||||
fl = filt16a_l0;
|
fl = (short int *)filt16a_l0;
|
||||||
fml = filt16a_mm0;
|
fml = filt16a_mm0;
|
||||||
fmm = filt16a_mm0;
|
fmm = filt16a_mm0;
|
||||||
fmr = filt16a_m0;
|
fmr = (short int *)filt16a_m0;
|
||||||
fm = filt16a_m0;
|
fm = (short int *)filt16a_m0;
|
||||||
fr = filt16a_r0;
|
fr = (short int *)filt16a_r0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
fl = filt16a_l1;
|
fl = (short int *)filt16a_l1;
|
||||||
fml = filt16a_ml1;
|
fml = filt16a_ml1;
|
||||||
fmm = filt16a_mm1;
|
fmm = filt16a_mm1;
|
||||||
fmr = filt16a_mr1;
|
fmr = filt16a_mr1;
|
||||||
fm = filt16a_m1;
|
fm = (short int *)filt16a_m1;
|
||||||
fr = filt16a_r1;
|
fr = (short int *)filt16a_r1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
fl = filt16a_l2;
|
fl = (short int *)filt16a_l2;
|
||||||
fml = filt16a_ml2;
|
fml = filt16a_ml2;
|
||||||
fmm = filt16a_mm2;
|
fmm = filt16a_mm2;
|
||||||
fmr = filt16a_mr2;
|
fmr = filt16a_mr2;
|
||||||
fm = filt16a_m2;
|
fm = (short int *)filt16a_m2;
|
||||||
fr = filt16a_r2;
|
fr = (short int *)filt16a_r2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
fl = filt16a_l3;
|
fl = (short int *)filt16a_l3;
|
||||||
fml = filt16a_ml3;
|
fml = filt16a_ml3;
|
||||||
fmm = filt16a_mm3;
|
fmm = filt16a_mm3;
|
||||||
fmr = filt16a_mm3;
|
fmr = filt16a_mm3;
|
||||||
fm = filt16a_m3;
|
fm = (short int *)filt16a_m3;
|
||||||
fr = filt16a_r3;
|
fr = (short int *)filt16a_r3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -630,156 +631,89 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
|
c32_t nr_pbch_dmrs_correlation(const PHY_VARS_NR_UE *ue,
|
||||||
const UE_nr_rxtx_proc_t *proc,
|
const UE_nr_rxtx_proc_t *proc,
|
||||||
unsigned char symbol,
|
const int symbol,
|
||||||
int dmrss,
|
const int dmrss,
|
||||||
NR_UE_SSB *current_ssb,
|
const uint32_t nr_gold_pbch[NR_PBCH_DMRS_LENGTH_DWORD],
|
||||||
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP])
|
const c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP])
|
||||||
{
|
{
|
||||||
int pilot[200] __attribute__((aligned(16)));
|
AssertFatal(dmrss >= 0 && dmrss < 3, "symbol %d is illegal for PBCH DM-RS \n", dmrss);
|
||||||
unsigned int pilot_cnt;
|
|
||||||
int16_t ch[2],*pil,*rxF;
|
|
||||||
int symbol_offset;
|
|
||||||
|
|
||||||
uint8_t ssb_index=current_ssb->i_ssb;
|
|
||||||
uint8_t n_hf=current_ssb->n_hf;
|
|
||||||
|
|
||||||
unsigned int ssb_offset = ue->frame_parms.first_carrier_offset + ue->frame_parms.ssb_start_subcarrier;
|
unsigned int ssb_offset = ue->frame_parms.first_carrier_offset + ue->frame_parms.ssb_start_subcarrier;
|
||||||
if (ssb_offset>= ue->frame_parms.ofdm_symbol_size) ssb_offset-=ue->frame_parms.ofdm_symbol_size;
|
if (ssb_offset>= ue->frame_parms.ofdm_symbol_size) ssb_offset-=ue->frame_parms.ofdm_symbol_size;
|
||||||
|
|
||||||
AssertFatal(dmrss >= 0 && dmrss < 3,
|
int symbol_offset = ue->frame_parms.ofdm_symbol_size * symbol;
|
||||||
"symbol %d is illegal for PBCH DM-RS \n",
|
|
||||||
dmrss);
|
|
||||||
|
|
||||||
symbol_offset = ue->frame_parms.ofdm_symbol_size*symbol;
|
|
||||||
|
|
||||||
unsigned int k = ue->frame_parms.Nid_cell % 4;
|
unsigned int k = ue->frame_parms.Nid_cell % 4;
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
DEBUG_PBCH("PBCH DMRS Correlation : gNB_id %d , OFDM size %d, Ncp=%d, k=%d symbol %d\n",
|
||||||
printf("PBCH DMRS Correlation : gNB_id %d , OFDM size %d, Ncp=%d, Ns=%d, k=%d symbol %d\n", proc->gNB_id, ue->frame_parms.ofdm_symbol_size, ue->frame_parms.Ncp, Ns, k, symbol);
|
proc->gNB_id,
|
||||||
#endif
|
ue->frame_parms.ofdm_symbol_size,
|
||||||
|
ue->frame_parms.Ncp,
|
||||||
|
k,
|
||||||
|
symbol);
|
||||||
|
|
||||||
// generate pilot
|
// generate pilot
|
||||||
// Note: pilot returned by the following function is already the complex conjugate of the transmitted DMRS
|
// Note: pilot returned by the following function is already the complex conjugate of the transmitted DMRS
|
||||||
nr_pbch_dmrs_rx(dmrss, ue->nr_gold_pbch[n_hf][ssb_index], &pilot[0]);
|
c16_t pilot[200] __attribute__((aligned(16)));
|
||||||
|
nr_pbch_dmrs_rx(dmrss, nr_gold_pbch, pilot);
|
||||||
|
c32_t computed_val = {0};
|
||||||
for (int aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
for (int aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
||||||
|
|
||||||
int re_offset = ssb_offset;
|
int re_offset = ssb_offset;
|
||||||
pil = (int16_t *)&pilot[0];
|
c16_t *pil = pilot;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
const c16_t *rxF = &rxdataF[aarx][symbol_offset + k];
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
DEBUG_PBCH("pbch ch est pilot RB_DL %d\n", ue->frame_parms.N_RB_DL);
|
||||||
printf("pbch ch est pilot addr %p RB_DL %d\n",&pilot[0], ue->frame_parms.N_RB_DL);
|
DEBUG_PBCH("k %d, first_carrier %d\n", k, ue->frame_parms.first_carrier_offset);
|
||||||
printf("k %d, first_carrier %d\n",k,ue->frame_parms.first_carrier_offset);
|
|
||||||
printf("rxF addr %p\n", rxF);
|
|
||||||
#endif
|
|
||||||
//if ((ue->frame_parms.N_RB_DL&1)==0) {
|
|
||||||
|
|
||||||
// Treat first 2 pilots specially (left edge)
|
// Treat first 2 pilots specially (left edge)
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
computed_val = c32x16maddShift(*pil, rxF[re_offset], computed_val, 15);
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
|
||||||
|
|
||||||
current_ssb->c_re += ch[0];
|
DEBUG_PBCH("ch 0 %d\n", pil->r * rxF[re_offset].r - pil->i * rxF[re_offset].i);
|
||||||
current_ssb->c_im += ch[1];
|
DEBUG_PBCH("pilot 0 : rxF - > (%d,%d) pil -> (%d,%d) \n", rxF[re_offset].r, rxF[re_offset].i, pil->r, pil->i);
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
pil++;
|
||||||
printf("ch 0 %d\n",((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1]));
|
|
||||||
printf("pilot 0 : rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],&rxF[0],ch[0],ch[1],pil[0],pil[1]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
computed_val = c32x16maddShift(*pil, rxF[re_offset], computed_val, 15);
|
||||||
|
|
||||||
|
DEBUG_PBCH("pilot 1 : rxF - > (%d,%d) pil -> (%d,%d) \n", rxF[re_offset].r, rxF[re_offset].i, pil->r, pil->i);
|
||||||
|
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
pil++;
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
|
||||||
|
|
||||||
current_ssb->c_re += ch[0];
|
|
||||||
current_ssb->c_im += ch[1];
|
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
|
||||||
printf("pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
computed_val = c32x16maddShift(*pil, rxF[re_offset], computed_val, 15);
|
||||||
|
|
||||||
current_ssb->c_re += ch[0];
|
DEBUG_PBCH("pilot 2 : rxF - > (%d,%d), pil -> (%d,%d) \n", rxF[re_offset].r, rxF[re_offset].i, pil->r, pil->i);
|
||||||
current_ssb->c_im += ch[1];
|
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
pil++;
|
||||||
printf("pilot 2 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
re_offset = (re_offset + 4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
#endif
|
|
||||||
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
|
||||||
|
|
||||||
for (pilot_cnt=3; pilot_cnt<(3*20); pilot_cnt += 3) {
|
|
||||||
|
|
||||||
// if (pilot_cnt == 30)
|
|
||||||
// rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k)];
|
|
||||||
|
|
||||||
|
for (int pilot_cnt = 3; pilot_cnt < (3 * 20); pilot_cnt += 3) {
|
||||||
// in 2nd symbol, skip middle REs (48 with DMRS, 144 for SSS, and another 48 with DMRS)
|
// in 2nd symbol, skip middle REs (48 with DMRS, 144 for SSS, and another 48 with DMRS)
|
||||||
if (dmrss == 1 && pilot_cnt == 12) {
|
if (dmrss == 1 && pilot_cnt == 12) {
|
||||||
pilot_cnt=48;
|
pilot_cnt=48;
|
||||||
re_offset = (re_offset+144) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset + 144) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
|
||||||
}
|
}
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
computed_val = c32x16maddShift(*pil, rxF[re_offset], computed_val, 15);
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
|
||||||
|
|
||||||
current_ssb->c_re += ch[0];
|
|
||||||
current_ssb->c_im += ch[1];
|
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
DEBUG_PBCH("pilot %u : rxF= (%d,%d) pil= (%d,%d) \n", pilot_cnt, rxF[re_offset].r, rxF[re_offset].i, pil->r, pil->i);
|
||||||
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pil += 2;
|
pil++;
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
computed_val = c32x16maddShift(*pil, rxF[re_offset], computed_val, 15);
|
||||||
|
|
||||||
|
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
|
||||||
|
|
||||||
current_ssb->c_re += ch[0];
|
DEBUG_PBCH("pilot %u : rxF= (%d,%d) pil= (%d,%d) \n", pilot_cnt + 1, rxF[re_offset].r, rxF[re_offset].i, pil->r, pil->i);
|
||||||
current_ssb->c_im += ch[1];
|
pil++;
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
|
||||||
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+1,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
|
||||||
#endif
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
computed_val = c32x16maddShift(*pil, rxF[re_offset], computed_val, 15);
|
||||||
|
|
||||||
|
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
|
||||||
|
|
||||||
current_ssb->c_re += ch[0];
|
|
||||||
current_ssb->c_im += ch[1];
|
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
|
||||||
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+2,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
|
||||||
|
|
||||||
|
DEBUG_PBCH("pilot %u : rxF= (%d,%d) pil= (%d,%d) \n", pilot_cnt + 2, rxF[re_offset].r, rxF[re_offset].i, pil->r, pil->i);
|
||||||
|
pil++;
|
||||||
|
re_offset = (re_offset + 4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return(0);
|
return computed_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||||
@@ -794,33 +728,31 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP])
|
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP])
|
||||||
{
|
{
|
||||||
int Ns = proc->nr_slot_rx;
|
int Ns = proc->nr_slot_rx;
|
||||||
int pilot[200] __attribute__((aligned(16)));
|
c16_t pilot[200] __attribute__((aligned(16)));
|
||||||
unsigned short k;
|
|
||||||
unsigned int pilot_cnt;
|
|
||||||
int16_t *pil, *rxF, *dl_ch;
|
|
||||||
const int16_t *fl, *fm, *fr;
|
|
||||||
int ch_offset,symbol_offset;
|
|
||||||
//int slot_pbch;
|
//int slot_pbch;
|
||||||
|
|
||||||
uint8_t nushift;
|
const int nushift = ue->frame_parms.Nid_cell % 4;
|
||||||
nushift = ue->frame_parms.Nid_cell % 4;
|
|
||||||
unsigned int ssb_offset = ue->frame_parms.first_carrier_offset + ue->frame_parms.ssb_start_subcarrier;
|
unsigned int ssb_offset = ue->frame_parms.first_carrier_offset + ue->frame_parms.ssb_start_subcarrier;
|
||||||
if (ssb_offset>= ue->frame_parms.ofdm_symbol_size) ssb_offset-=ue->frame_parms.ofdm_symbol_size;
|
if (ssb_offset>= ue->frame_parms.ofdm_symbol_size) ssb_offset-=ue->frame_parms.ofdm_symbol_size;
|
||||||
|
|
||||||
ch_offset = ue->frame_parms.ofdm_symbol_size*symbol;
|
const int ch_offset = ue->frame_parms.ofdm_symbol_size * symbol;
|
||||||
|
|
||||||
AssertFatal(dmrss >= 0 && dmrss < 3,
|
AssertFatal(dmrss >= 0 && dmrss < 3,
|
||||||
"symbol %d is illegal for PBCH DM-RS \n",
|
"symbol %d is illegal for PBCH DM-RS \n",
|
||||||
dmrss);
|
dmrss);
|
||||||
|
|
||||||
symbol_offset = ue->frame_parms.ofdm_symbol_size*symbol;
|
const int symbol_offset = ue->frame_parms.ofdm_symbol_size * symbol;
|
||||||
|
|
||||||
|
const int k = nushift;
|
||||||
k = nushift;
|
const c16_t *fl, *fm, *fr;
|
||||||
|
DEBUG_PBCH("PBCH Channel Estimation : gNB_id %d ch_offset %d, OFDM size %d, Ncp=%d, Ns=%d, k=%d symbol %d\n",
|
||||||
#ifdef DEBUG_PBCH
|
proc->gNB_id,
|
||||||
printf("PBCH Channel Estimation : gNB_id %d ch_offset %d, OFDM size %d, Ncp=%d, Ns=%d, k=%d symbol %d\n", proc->gNB_id, ch_offset, ue->frame_parms.ofdm_symbol_size, ue->frame_parms.Ncp, Ns, k, symbol);
|
ch_offset,
|
||||||
#endif
|
ue->frame_parms.ofdm_symbol_size,
|
||||||
|
ue->frame_parms.Ncp,
|
||||||
|
Ns,
|
||||||
|
k,
|
||||||
|
symbol);
|
||||||
|
|
||||||
switch (k) {
|
switch (k) {
|
||||||
case 0:
|
case 0:
|
||||||
@@ -903,136 +835,91 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
// generate pilot
|
// generate pilot
|
||||||
// Note: pilot returned by the following function is already the complex conjugate of the transmitted DMRS
|
// Note: pilot returned by the following function is already the complex conjugate of the transmitted DMRS
|
||||||
nr_pbch_dmrs_rx(dmrss, ue->nr_gold_pbch[n_hf][ssb_index], &pilot[0]);
|
nr_pbch_dmrs_rx(dmrss, ue->nr_gold_pbch[n_hf][ssb_index], pilot);
|
||||||
|
|
||||||
for (int aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
for (int aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
||||||
|
|
||||||
int re_offset = ssb_offset;
|
int re_offset = ssb_offset;
|
||||||
pil = (int16_t *)&pilot[0];
|
c16_t *pil = pilot;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
c16_t *rxF = &rxdataF[aarx][symbol_offset + k];
|
||||||
dl_ch = (int16_t *)&dl_ch_estimates[aarx][ch_offset];
|
c16_t *dl_ch = &dl_ch_estimates[aarx][ch_offset];
|
||||||
|
|
||||||
memset(dl_ch,0,sizeof(struct complex16)*(ue->frame_parms.ofdm_symbol_size));
|
memset(dl_ch, 0, sizeof(c16_t) * ue->frame_parms.ofdm_symbol_size);
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
DEBUG_PBCH("pbch ch est pilot RB_DL %d\n", ue->frame_parms.N_RB_DL);
|
||||||
printf("pbch ch est pilot addr %p RB_DL %d\n",&pilot[0], ue->frame_parms.N_RB_DL);
|
DEBUG_PBCH("k %d, first_carrier %d\n", k, ue->frame_parms.first_carrier_offset);
|
||||||
printf("k %d, first_carrier %d\n",k,ue->frame_parms.first_carrier_offset);
|
|
||||||
printf("rxF addr %p\n", rxF);
|
|
||||||
printf("dl_ch addr %p\n",dl_ch);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Treat first 2 pilots specially (left edge)
|
// Treat first 2 pilots specially (left edge)
|
||||||
int16_t ch[2];
|
c16_t ch;
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch = c16mulShift(*pil, rxF[re_offset], 15);
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
DEBUG_PBCH("pilot 0: rxF= (%d,%d), ch= (%d,%d), pil=(%d,%d)\n", rxF[re_offset].r, rxF[re_offset].i, ch.r, ch.i, pil->r, pil->i);
|
||||||
|
multaddRealVectorComplexScalar(fl, ch, dl_ch, 16);
|
||||||
|
pil++;
|
||||||
|
re_offset = (re_offset + 4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
ch = c16mulShift(*pil, rxF[re_offset], 15);
|
||||||
printf("ch 0 %d\n",((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1]));
|
|
||||||
printf("pilot 0 : rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],&rxF[0],ch[0],ch[1],pil[0],pil[1]);
|
|
||||||
#endif
|
|
||||||
multadd_real_vector_complex_scalar(fl,
|
|
||||||
ch,
|
|
||||||
dl_ch,
|
|
||||||
16);
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
|
||||||
|
|
||||||
//for (int i= 0; i<8; i++)
|
DEBUG_PBCH("pilot 1: rxF= (%d,%d), ch= (%d,%d), pil=(%d,%d)\n", rxF[re_offset].r, rxF[re_offset].i, ch.r, ch.i, pil->r, pil->i);
|
||||||
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
|
multaddRealVectorComplexScalar(fm, ch, dl_ch, 16);
|
||||||
|
pil++;
|
||||||
|
re_offset = (re_offset + 4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
|
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch = c16mulShift(*pil, rxF[re_offset], 15);
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
|
||||||
|
|
||||||
|
DEBUG_PBCH("pilot 2: rxF= (%d,%d), ch= (%d,%d), pil=(%d,%d)\n", rxF[re_offset].r, rxF[re_offset].i, ch.r, ch.i, pil->r, pil->i);
|
||||||
#ifdef DEBUG_PBCH
|
multaddRealVectorComplexScalar(fr, ch, dl_ch, 16);
|
||||||
printf("pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
pil++;
|
||||||
#endif
|
re_offset = (re_offset + 4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
multadd_real_vector_complex_scalar(fm,
|
|
||||||
ch,
|
|
||||||
dl_ch,
|
|
||||||
16);
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
|
||||||
|
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
|
||||||
printf("pilot 2 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
multadd_real_vector_complex_scalar(fr,
|
|
||||||
ch,
|
|
||||||
dl_ch,
|
|
||||||
16);
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
|
||||||
dl_ch += 24;
|
dl_ch += 24;
|
||||||
|
|
||||||
for (pilot_cnt=3; pilot_cnt<(3*20); pilot_cnt += 3) {
|
for (int pilot_cnt = 3; pilot_cnt < (3 * 20); pilot_cnt += 3) {
|
||||||
|
|
||||||
// if (pilot_cnt == 30)
|
// if (pilot_cnt == 30)
|
||||||
// rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k)];
|
// rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k)];
|
||||||
|
|
||||||
// in 2nd symbol, skip middle REs (48 with DMRS, 144 for SSS, and another 48 with DMRS)
|
// in 2nd symbol, skip middle REs (48 with DMRS, 144 for SSS, and another 48 with DMRS)
|
||||||
if (dmrss == 1 && pilot_cnt == 12) {
|
if (dmrss == 1 && pilot_cnt == 12) {
|
||||||
pilot_cnt=48;
|
pilot_cnt=48;
|
||||||
re_offset = (re_offset+144) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset + 144) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
|
||||||
dl_ch += 288;
|
dl_ch += 288;
|
||||||
}
|
}
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
ch = c16mulShift(*pil, rxF[re_offset], 15);
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
DEBUG_PBCH("pilot %u: rxF= (%d,%d), ch= (%d,%d), pil=(%d,%d)\n",
|
||||||
|
pilot_cnt,
|
||||||
|
rxF[re_offset].r,
|
||||||
|
rxF[re_offset].i,
|
||||||
|
ch.r,
|
||||||
|
ch.i,
|
||||||
|
pil->r,
|
||||||
|
pil->i);
|
||||||
|
multaddRealVectorComplexScalar(fl, ch, dl_ch, 16);
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
pil++;
|
||||||
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
|
||||||
#endif
|
|
||||||
multadd_real_vector_complex_scalar(fl,
|
|
||||||
ch,
|
|
||||||
dl_ch,
|
|
||||||
16);
|
|
||||||
|
|
||||||
//for (int i= 0; i<8; i++)
|
|
||||||
// printf("pilot_cnt %d dl_ch %d %d\n", pilot_cnt, dl_ch+i, *(dl_ch+i));
|
|
||||||
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
ch = c16mulShift(*pil, rxF[re_offset], 15);
|
||||||
|
DEBUG_PBCH("pilot %u: rxF= (%d,%d), ch= (%d,%d), pil=(%d,%d)\n",
|
||||||
|
pilot_cnt + 1,
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
rxF[re_offset].r,
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
rxF[re_offset].i,
|
||||||
|
ch.r,
|
||||||
#ifdef DEBUG_PBCH
|
ch.i,
|
||||||
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+1,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
pil->r,
|
||||||
#endif
|
pil->i);
|
||||||
multadd_real_vector_complex_scalar(fm,
|
multaddRealVectorComplexScalar(fm, ch, dl_ch, 16);
|
||||||
ch,
|
pil++;
|
||||||
dl_ch,
|
|
||||||
16);
|
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
ch = c16mulShift(*pil, rxF[re_offset], 15);
|
||||||
|
DEBUG_PBCH("pilot %u: rxF= (%d,%d), ch= (%d,%d), pil=(%d,%d)\n",
|
||||||
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
|
pilot_cnt + 2,
|
||||||
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
|
rxF[re_offset].r,
|
||||||
|
rxF[re_offset].i,
|
||||||
#ifdef DEBUG_PBCH
|
ch.r,
|
||||||
printf("pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+2,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
|
ch.i,
|
||||||
#endif
|
pil->r,
|
||||||
|
pil->i);
|
||||||
multadd_real_vector_complex_scalar(fr,
|
multaddRealVectorComplexScalar(fr, ch, dl_ch, 16);
|
||||||
ch,
|
pil++;
|
||||||
dl_ch,
|
re_offset = (re_offset + 4) % ue->frame_parms.ofdm_symbol_size;
|
||||||
16);
|
dl_ch += 12;
|
||||||
pil += 2;
|
|
||||||
re_offset = (re_offset+4) % ue->frame_parms.ofdm_symbol_size;
|
|
||||||
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)];
|
|
||||||
dl_ch += 24;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( dmrss == 2) // update time statistics for last PBCH symbol
|
if( dmrss == 2) // update time statistics for last PBCH symbol
|
||||||
@@ -1117,7 +1004,7 @@ void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
// generate pilot
|
// generate pilot
|
||||||
int pilot[(nb_rb_coreset + dmrs_ref) * 3] __attribute__((aligned(16)));
|
int pilot[(nb_rb_coreset + dmrs_ref) * 3] __attribute__((aligned(16)));
|
||||||
// Note: pilot returned by the following function is already the complex conjugate of the transmitted DMRS
|
// Note: pilot returned by the following function is already the complex conjugate of the transmitted DMRS
|
||||||
nr_pdcch_dmrs_rx(ue, Ns, ue->nr_gold_pdcch[gNB_id][Ns][symbol], &pilot[0], 2000, (nb_rb_coreset + dmrs_ref));
|
nr_pdcch_dmrs_rx(ue, Ns, ue->nr_gold_pdcch[gNB_id][Ns][symbol], (c16_t *)pilot, 2000, (nb_rb_coreset + dmrs_ref));
|
||||||
|
|
||||||
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
||||||
|
|
||||||
@@ -1613,6 +1500,7 @@ void NFAPI_NR_DMRS_TYPE2_average_prb(NR_DL_FRAME_PARMS *frame_parms,
|
|||||||
}
|
}
|
||||||
int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||||
const UE_nr_rxtx_proc_t *proc,
|
const UE_nr_rxtx_proc_t *proc,
|
||||||
|
int nl,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
unsigned char nscid,
|
unsigned char nscid,
|
||||||
@@ -1655,21 +1543,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
c16_t pilot[3280] __attribute__((aligned(16)));
|
c16_t pilot[3280] __attribute__((aligned(16)));
|
||||||
// Note: pilot returned by the following function is already the complex conjugate of the transmitted DMRS
|
// Note: pilot returned by the following function is already the complex conjugate of the transmitted DMRS
|
||||||
nr_pdsch_dmrs_rx(ue,
|
nr_pdsch_dmrs_rx(ue, Ns, ue->nr_gold_pdsch[gNB_id][Ns][symbol][nscid], pilot, 1000 + p, 0, nb_rb_pdsch + rb_offset, config_type);
|
||||||
Ns,
|
|
||||||
ue->nr_gold_pdsch[gNB_id][Ns][symbol][nscid],
|
|
||||||
(int32_t *)pilot,
|
|
||||||
1000 + p,
|
|
||||||
0,
|
|
||||||
nb_rb_pdsch + rb_offset,
|
|
||||||
config_type);
|
|
||||||
|
|
||||||
uint8_t nushift = 0;
|
|
||||||
if (config_type == NFAPI_NR_DMRS_TYPE1) {
|
|
||||||
nushift = (p >> 1) & 1;
|
|
||||||
} else { // NFAPI_NR_DMRS_TYPE2
|
|
||||||
nushift = delta;
|
|
||||||
}
|
|
||||||
|
|
||||||
delay_t delay = {0};
|
delay_t delay = {0};
|
||||||
|
|
||||||
@@ -1681,8 +1555,8 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
printf("============================================\n");
|
printf("============================================\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
c16_t *rxF = &rxdataF[aarx][symbol_offset + nushift];
|
c16_t *rxF = &rxdataF[aarx][symbol_offset + delta];
|
||||||
c16_t *dl_ch = (c16_t *)&dl_ch_estimates[p * ue->frame_parms.nb_antennas_rx + aarx][ch_offset];
|
c16_t *dl_ch = (c16_t *)&dl_ch_estimates[nl * ue->frame_parms.nb_antennas_rx + aarx][ch_offset];
|
||||||
memset(dl_ch, 0, sizeof(*dl_ch) * ue->frame_parms.ofdm_symbol_size);
|
memset(dl_ch, 0, sizeof(*dl_ch) * ue->frame_parms.ofdm_symbol_size);
|
||||||
|
|
||||||
if (config_type == NFAPI_NR_DMRS_TYPE1 && ue->chest_freq == 0) {
|
if (config_type == NFAPI_NR_DMRS_TYPE1 && ue->chest_freq == 0) {
|
||||||
@@ -1724,7 +1598,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_PDSCH
|
#ifdef DEBUG_PDSCH
|
||||||
dl_ch = (c16_t *)&dl_ch_estimates[p * ue->frame_parms.nb_antennas_rx + aarx][ch_offset];
|
dl_ch = (c16_t *)&dl_ch_estimates[nl * ue->frame_parms.nb_antennas_rx + aarx][ch_offset];
|
||||||
for (uint16_t idxP = 0; idxP < ceil((float)nb_rb_pdsch * 12 / 8); idxP++) {
|
for (uint16_t idxP = 0; idxP < ceil((float)nb_rb_pdsch * 12 / 8); idxP++) {
|
||||||
for (uint8_t idxI = 0; idxI < 8; idxI++) {
|
for (uint8_t idxI = 0; idxI < 8; idxI++) {
|
||||||
printf("%4d\t%4d\t", dl_ch[idxP * 8 + idxI].r, dl_ch[idxP * 8 + idxI].i);
|
printf("%4d\t%4d\t", dl_ch[idxP * 8 + idxI].r, dl_ch[idxP * 8 + idxI].i);
|
||||||
|
|||||||
@@ -57,12 +57,12 @@ void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
c16_t pdcch_dl_ch_estimates[][pdcch_est_size],
|
c16_t pdcch_dl_ch_estimates[][pdcch_est_size],
|
||||||
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]);
|
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]);
|
||||||
|
|
||||||
int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
|
c32_t nr_pbch_dmrs_correlation(const PHY_VARS_NR_UE *ue,
|
||||||
const UE_nr_rxtx_proc_t *proc,
|
const UE_nr_rxtx_proc_t *proc,
|
||||||
unsigned char symbol,
|
const int symbol,
|
||||||
int dmrss,
|
const int dmrss,
|
||||||
NR_UE_SSB *current_ssb,
|
const uint32_t nr_gold_pbch[NR_PBCH_DMRS_LENGTH_DWORD],
|
||||||
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]);
|
const c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP]);
|
||||||
|
|
||||||
int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||||
int estimateSz,
|
int estimateSz,
|
||||||
@@ -77,6 +77,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
||||||
const UE_nr_rxtx_proc_t *proc,
|
const UE_nr_rxtx_proc_t *proc,
|
||||||
|
int nl,
|
||||||
unsigned short p,
|
unsigned short p,
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
unsigned char nscid,
|
unsigned char nscid,
|
||||||
|
|||||||
@@ -92,15 +92,15 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue,
|
|||||||
int,
|
int,
|
||||||
ue->measurements.rx_spatial_power,
|
ue->measurements.rx_spatial_power,
|
||||||
NUMBER_OF_CONNECTED_gNB_MAX,
|
NUMBER_OF_CONNECTED_gNB_MAX,
|
||||||
frame_parms->nb_antenna_ports_gNB,
|
cmax(frame_parms->nb_antenna_ports_gNB, 1),
|
||||||
frame_parms->nb_antennas_rx,
|
cmax(frame_parms->nb_antennas_rx, 1),
|
||||||
false);
|
false);
|
||||||
allocCast3D(rx_spatial_power_dB,
|
allocCast3D(rx_spatial_power_dB,
|
||||||
unsigned short,
|
unsigned short,
|
||||||
ue->measurements.rx_spatial_power_dB,
|
ue->measurements.rx_spatial_power_dB,
|
||||||
NUMBER_OF_CONNECTED_gNB_MAX,
|
NUMBER_OF_CONNECTED_gNB_MAX,
|
||||||
frame_parms->nb_antenna_ports_gNB,
|
cmax(frame_parms->nb_antenna_ports_gNB, 1),
|
||||||
frame_parms->nb_antennas_rx,
|
cmax(frame_parms->nb_antennas_rx, 1),
|
||||||
false);
|
false);
|
||||||
|
|
||||||
// signal measurements
|
// signal measurements
|
||||||
|
|||||||
@@ -181,24 +181,24 @@ static void nr_dlsch_channel_level_median(uint32_t rx_size_symbol,
|
|||||||
@param phy_measurements Pointer to UE PHY measurements
|
@param phy_measurements Pointer to UE PHY measurements
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
|
static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
|
||||||
int nbRx,
|
int nbRx,
|
||||||
c16_t rxdataF_ext[][rx_size_symbol],
|
c16_t rxdataF_ext[][rx_size_symbol],
|
||||||
int32_t dl_ch_estimates_ext[][rx_size_symbol],
|
int32_t dl_ch_estimates_ext[][rx_size_symbol],
|
||||||
int32_t dl_ch_mag[][nbRx][rx_size_symbol],
|
int32_t dl_ch_mag[][nbRx][rx_size_symbol],
|
||||||
int32_t dl_ch_magb[][nbRx][rx_size_symbol],
|
int32_t dl_ch_magb[][nbRx][rx_size_symbol],
|
||||||
int32_t dl_ch_magr[][nbRx][rx_size_symbol],
|
int32_t dl_ch_magr[][nbRx][rx_size_symbol],
|
||||||
int32_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
int32_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
||||||
int ***rho,
|
int ***rho,
|
||||||
NR_DL_FRAME_PARMS *frame_parms,
|
NR_DL_FRAME_PARMS *frame_parms,
|
||||||
uint8_t n_layers,
|
uint8_t n_layers,
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
int length,
|
int length,
|
||||||
uint8_t first_symbol_flag,
|
bool first_symbol_flag,
|
||||||
unsigned char mod_order,
|
unsigned char mod_order,
|
||||||
unsigned short nb_rb,
|
unsigned short nb_rb,
|
||||||
unsigned char output_shift,
|
unsigned char output_shift,
|
||||||
PHY_NR_MEASUREMENTS *measurements);
|
PHY_NR_MEASUREMENTS *measurements);
|
||||||
|
|
||||||
/** \brief This function computes the average channel level over all allocated RBs and antennas (TX/RX) in order to compute output shift for compensated signal
|
/** \brief This function computes the average channel level over all allocated RBs and antennas (TX/RX) in order to compute output shift for compensated signal
|
||||||
@param dl_ch_estimates_ext Channel estimates in allocated RBs
|
@param dl_ch_estimates_ext Channel estimates in allocated RBs
|
||||||
@@ -242,7 +242,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
const UE_nr_rxtx_proc_t *proc,
|
const UE_nr_rxtx_proc_t *proc,
|
||||||
NR_UE_DLSCH_t dlsch[2],
|
NR_UE_DLSCH_t dlsch[2],
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
unsigned char first_symbol_flag,
|
bool first_symbol_flag,
|
||||||
unsigned char harq_pid,
|
unsigned char harq_pid,
|
||||||
uint32_t pdsch_est_size,
|
uint32_t pdsch_est_size,
|
||||||
int32_t dl_ch_estimates[][pdsch_est_size],
|
int32_t dl_ch_estimates[][pdsch_est_size],
|
||||||
@@ -434,7 +434,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
if (meas_enabled)
|
if (meas_enabled)
|
||||||
start_meas(&meas);
|
start_meas(&meas);
|
||||||
if (first_symbol_flag == 1) {
|
if (first_symbol_flag) {
|
||||||
int32_t avg[MAX_ANT][MAX_ANT];
|
int32_t avg[MAX_ANT][MAX_ANT];
|
||||||
nr_dlsch_channel_level(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, avg, symbol, nb_re_pdsch, nb_rb_pdsch);
|
nr_dlsch_channel_level(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, avg, symbol, nb_re_pdsch, nb_rb_pdsch);
|
||||||
int avgs = 0;
|
int avgs = 0;
|
||||||
@@ -734,24 +734,24 @@ void nr_dlsch_deinterleaving(uint8_t symbol,
|
|||||||
// Pre-processing for LLR computation
|
// Pre-processing for LLR computation
|
||||||
//==============================================================================================
|
//==============================================================================================
|
||||||
|
|
||||||
void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
|
static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
|
||||||
int nbRx,
|
int nbRx,
|
||||||
c16_t rxdataF_ext[][rx_size_symbol],
|
c16_t rxdataF_ext[][rx_size_symbol],
|
||||||
int32_t dl_ch_estimates_ext[][rx_size_symbol],
|
int32_t dl_ch_estimates_ext[][rx_size_symbol],
|
||||||
int32_t dl_ch_mag[][nbRx][rx_size_symbol],
|
int32_t dl_ch_mag[][nbRx][rx_size_symbol],
|
||||||
int32_t dl_ch_magb[][nbRx][rx_size_symbol],
|
int32_t dl_ch_magb[][nbRx][rx_size_symbol],
|
||||||
int32_t dl_ch_magr[][nbRx][rx_size_symbol],
|
int32_t dl_ch_magr[][nbRx][rx_size_symbol],
|
||||||
int32_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
int32_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
||||||
int ***rho,
|
int ***rho,
|
||||||
NR_DL_FRAME_PARMS *frame_parms,
|
NR_DL_FRAME_PARMS *frame_parms,
|
||||||
uint8_t n_layers,
|
uint8_t n_layers,
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
int length,
|
int length,
|
||||||
uint8_t first_symbol_flag,
|
bool first_symbol_flag,
|
||||||
unsigned char mod_order,
|
unsigned char mod_order,
|
||||||
unsigned short nb_rb,
|
unsigned short nb_rb,
|
||||||
unsigned char output_shift,
|
unsigned char output_shift,
|
||||||
PHY_NR_MEASUREMENTS *measurements)
|
PHY_NR_MEASUREMENTS *measurements)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
@@ -1034,7 +1034,7 @@ void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
|
|||||||
dl_ch128_2+=3;
|
dl_ch128_2+=3;
|
||||||
rho128+=3;
|
rho128+=3;
|
||||||
}
|
}
|
||||||
if (first_symbol_flag==1) {
|
if (first_symbol_flag) {
|
||||||
//rho_nm = H_arx_n.conj(H_arx_m)
|
//rho_nm = H_arx_n.conj(H_arx_m)
|
||||||
//rho_rx_corr[arx][nm] = |H_arx_n|^2.|H_arx_m|^2 &rho[aarx][l*n_layers+atx][symbol*nb_rb*12]
|
//rho_rx_corr[arx][nm] = |H_arx_n|^2.|H_arx_m|^2 &rho[aarx][l*n_layers+atx][symbol*nb_rb*12]
|
||||||
measurements->rx_correlation[0][aarx][l * n_layers + atx] = signal_energy(&rho[aarx][l * n_layers + atx][symbol * nb_rb * 12],length);
|
measurements->rx_correlation[0][aarx][l * n_layers + atx] = signal_energy(&rho[aarx][l * n_layers + atx][symbol * nb_rb * 12],length);
|
||||||
|
|||||||
@@ -44,8 +44,8 @@
|
|||||||
#include "PHY/NR_REFSIG/pss_nr.h"
|
#include "PHY/NR_REFSIG/pss_nr.h"
|
||||||
#include "PHY/NR_REFSIG/sss_nr.h"
|
#include "PHY/NR_REFSIG/sss_nr.h"
|
||||||
#include "PHY/NR_REFSIG/refsig_defs_ue.h"
|
#include "PHY/NR_REFSIG/refsig_defs_ue.h"
|
||||||
|
#include "PHY/TOOLS/tools_defs.h"
|
||||||
|
|
||||||
extern openair0_config_t openair0_cfg[];
|
|
||||||
//static nfapi_nr_config_request_t config_t;
|
//static nfapi_nr_config_request_t config_t;
|
||||||
//static nfapi_nr_config_request_t* config =&config_t;
|
//static nfapi_nr_config_request_t* config =&config_t;
|
||||||
int cnt=0;
|
int cnt=0;
|
||||||
@@ -53,51 +53,16 @@ int cnt=0;
|
|||||||
// #define DEBUG_INITIAL_SYNCH
|
// #define DEBUG_INITIAL_SYNCH
|
||||||
#define DUMP_PBCH_CH_ESTIMATES 0
|
#define DUMP_PBCH_CH_ESTIMATES 0
|
||||||
|
|
||||||
// create a new node of SSB structure
|
// structure used for multiple SSB detection
|
||||||
NR_UE_SSB* create_ssb_node(uint8_t i, uint8_t h) {
|
typedef struct NR_UE_SSB {
|
||||||
|
uint i_ssb; // i_ssb between 0 and 7 (it corresponds to ssb_index only for Lmax=4,8)
|
||||||
|
uint n_hf; // n_hf = 0,1 for Lmax =4 or n_hf = 0 for Lmax =8,64
|
||||||
|
double metric; // metric to order SSB hypothesis
|
||||||
|
} NR_UE_SSB;
|
||||||
|
|
||||||
NR_UE_SSB *new_node = (NR_UE_SSB*)malloc(sizeof(NR_UE_SSB));
|
static int ssb_sort(const void *a, const void *b)
|
||||||
new_node->i_ssb = i;
|
{
|
||||||
new_node->n_hf = h;
|
return ((NR_UE_SSB *)b)->metric - ((NR_UE_SSB *)a)->metric;
|
||||||
new_node->c_re = 0;
|
|
||||||
new_node->c_im = 0;
|
|
||||||
new_node->metric = 0;
|
|
||||||
new_node->next_ssb = NULL;
|
|
||||||
|
|
||||||
return new_node;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// insertion of the structure in the ordered list (highest metric first)
|
|
||||||
NR_UE_SSB* insert_into_list(NR_UE_SSB *head, NR_UE_SSB *node) {
|
|
||||||
|
|
||||||
if (node->metric > head->metric) {
|
|
||||||
node->next_ssb = head;
|
|
||||||
head = node;
|
|
||||||
return head;
|
|
||||||
}
|
|
||||||
|
|
||||||
NR_UE_SSB *current = head;
|
|
||||||
while (current->next_ssb !=NULL) {
|
|
||||||
NR_UE_SSB *temp=current->next_ssb;
|
|
||||||
if(node->metric > temp->metric) {
|
|
||||||
node->next_ssb = temp;
|
|
||||||
current->next_ssb = node;
|
|
||||||
return head;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
current = temp;
|
|
||||||
}
|
|
||||||
current->next_ssb = node;
|
|
||||||
|
|
||||||
return head;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void free_list(NR_UE_SSB *node) {
|
|
||||||
if (node->next_ssb != NULL)
|
|
||||||
free_list(node->next_ssb);
|
|
||||||
free(node);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool nr_pbch_detection(const UE_nr_rxtx_proc_t *proc,
|
static bool nr_pbch_detection(const UE_nr_rxtx_proc_t *proc,
|
||||||
@@ -107,76 +72,66 @@ static bool nr_pbch_detection(const UE_nr_rxtx_proc_t *proc,
|
|||||||
{
|
{
|
||||||
NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
||||||
|
|
||||||
NR_UE_SSB *best_ssb = NULL;
|
const int N_L = (frame_parms->Lmax == 4) ? 4 : 8;
|
||||||
NR_UE_SSB *current_ssb;
|
const int N_hf = (frame_parms->Lmax == 4) ? 2 : 1;
|
||||||
|
NR_UE_SSB best_ssb[N_L * N_hf];
|
||||||
uint8_t N_L = (frame_parms->Lmax == 4)? 4:8;
|
NR_UE_SSB *current_ssb = best_ssb;
|
||||||
uint8_t N_hf = (frame_parms->Lmax == 4)? 2:1;
|
// loops over possible pbch dmrs cases to retrieve best estimated i_ssb (and n_hf for Lmax=4) for multiple ssb detection
|
||||||
|
start_meas(&ue->dlsch_channel_estimation_stats);
|
||||||
// loops over possible pbch dmrs cases to retrive best estimated i_ssb (and n_hf for Lmax=4) for multiple ssb detection
|
|
||||||
for (int hf = 0; hf < N_hf; hf++) {
|
for (int hf = 0; hf < N_hf; hf++) {
|
||||||
for (int l = 0; l < N_L ; l++) {
|
for (int l = 0; l < N_L; l++) {
|
||||||
|
|
||||||
// initialization of structure
|
|
||||||
current_ssb = create_ssb_node(l,hf);
|
|
||||||
|
|
||||||
start_meas(&ue->dlsch_channel_estimation_stats);
|
|
||||||
// computing correlation between received DMRS symbols and transmitted sequence for current i_ssb and n_hf
|
// computing correlation between received DMRS symbols and transmitted sequence for current i_ssb and n_hf
|
||||||
for(int i=pbch_initial_symbol; i<pbch_initial_symbol+3;i++)
|
cd_t cumul = {0};
|
||||||
nr_pbch_dmrs_correlation(ue, proc, i, i - pbch_initial_symbol, current_ssb, rxdataF);
|
for (int i = pbch_initial_symbol; i < pbch_initial_symbol + 3; i++) {
|
||||||
stop_meas(&ue->dlsch_channel_estimation_stats);
|
c32_t meas = nr_pbch_dmrs_correlation(ue, proc, i, i - pbch_initial_symbol, ue->nr_gold_pbch[hf][l], rxdataF);
|
||||||
|
csum(cumul, cumul, meas);
|
||||||
current_ssb->metric = current_ssb->c_re*current_ssb->c_re + current_ssb->c_im*current_ssb->c_im;
|
}
|
||||||
|
*current_ssb = (NR_UE_SSB){.i_ssb = l, .n_hf = hf, .metric = squaredMod(cumul)};
|
||||||
// generate a list of SSB structures
|
current_ssb++;
|
||||||
if (best_ssb == NULL)
|
|
||||||
best_ssb = current_ssb;
|
|
||||||
else
|
|
||||||
best_ssb = insert_into_list(best_ssb,current_ssb);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
qsort(best_ssb, N_L * N_hf, sizeof(NR_UE_SSB), ssb_sort);
|
||||||
|
stop_meas(&ue->dlsch_channel_estimation_stats);
|
||||||
|
|
||||||
NR_UE_SSB *temp_ptr = best_ssb;
|
const int nb_ant = frame_parms->nb_antennas_rx;
|
||||||
bool ret = false;
|
for (NR_UE_SSB *ssb = best_ssb; ssb < best_ssb + N_L * N_hf; ssb++) {
|
||||||
while (!ret && temp_ptr != NULL) {
|
|
||||||
|
|
||||||
start_meas(&ue->dlsch_channel_estimation_stats);
|
start_meas(&ue->dlsch_channel_estimation_stats);
|
||||||
// computing channel estimation for selected best ssb
|
// computing channel estimation for selected best ssb
|
||||||
const int estimateSz = frame_parms->symbols_per_slot * frame_parms->ofdm_symbol_size;
|
const int estimateSz = frame_parms->symbols_per_slot * frame_parms->ofdm_symbol_size;
|
||||||
__attribute__ ((aligned(32))) struct complex16 dl_ch_estimates[frame_parms->nb_antennas_rx][estimateSz];
|
__attribute__((aligned(32))) c16_t dl_ch_estimates[nb_ant][estimateSz];
|
||||||
__attribute__ ((aligned(32))) struct complex16 dl_ch_estimates_time[frame_parms->nb_antennas_rx][frame_parms->ofdm_symbol_size];
|
__attribute__((aligned(32))) c16_t dl_ch_estimates_time[nb_ant][frame_parms->ofdm_symbol_size];
|
||||||
|
|
||||||
for(int i=pbch_initial_symbol; i<pbch_initial_symbol+3;i++)
|
for(int i=pbch_initial_symbol; i<pbch_initial_symbol+3;i++)
|
||||||
nr_pbch_channel_estimation(ue,estimateSz, dl_ch_estimates, dl_ch_estimates_time,
|
nr_pbch_channel_estimation(ue,
|
||||||
proc,i,i-pbch_initial_symbol,temp_ptr->i_ssb,temp_ptr->n_hf,rxdataF);
|
estimateSz,
|
||||||
|
dl_ch_estimates,
|
||||||
|
dl_ch_estimates_time,
|
||||||
|
proc,
|
||||||
|
i,
|
||||||
|
i - pbch_initial_symbol,
|
||||||
|
ssb->i_ssb,
|
||||||
|
ssb->n_hf,
|
||||||
|
rxdataF);
|
||||||
|
|
||||||
stop_meas(&ue->dlsch_channel_estimation_stats);
|
stop_meas(&ue->dlsch_channel_estimation_stats);
|
||||||
fapiPbch_t result = {0};
|
fapiPbch_t result = {0};
|
||||||
|
if (0 == nr_rx_pbch(ue, proc, estimateSz, dl_ch_estimates, frame_parms, ssb->i_ssb, &result, rxdataF)) {
|
||||||
int pbch_res = nr_rx_pbch(ue, proc, estimateSz, dl_ch_estimates, frame_parms, temp_ptr->i_ssb, &result, rxdataF);
|
if (DUMP_PBCH_CH_ESTIMATES) {
|
||||||
ret = pbch_res == 0;
|
write_output("pbch_ch_estimates.m", "pbch_ch_estimates", dl_ch_estimates, nb_ant * estimateSz, 1, 1);
|
||||||
|
write_output("pbch_ch_estimates_time.m",
|
||||||
if (DUMP_PBCH_CH_ESTIMATES && ret) {
|
"pbch_ch_estimates_time",
|
||||||
write_output("pbch_ch_estimates.m", "pbch_ch_estimates", dl_ch_estimates, frame_parms->nb_antennas_rx*estimateSz, 1, 1);
|
dl_ch_estimates_time,
|
||||||
write_output("pbch_ch_estimates_time.m",
|
nb_ant * frame_parms->ofdm_symbol_size,
|
||||||
"pbch_ch_estimates_time",
|
1,
|
||||||
dl_ch_estimates_time,
|
1);
|
||||||
frame_parms->nb_antennas_rx * frame_parms->ofdm_symbol_size,
|
}
|
||||||
1,
|
LOG_I(PHY, "[UE%d] Initial sync: pbch decoded sucessfully, ssb index %d\n", ue->Mod_id, frame_parms->ssb_index);
|
||||||
1);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
temp_ptr=temp_ptr->next_ssb;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free_list(best_ssb);
|
LOG_W(PHY, "[UE%d] Initial sync: pbch not decoded, ssb index %d\n", ue->Mod_id, frame_parms->ssb_index);
|
||||||
|
return false;
|
||||||
if (ret) {
|
|
||||||
frame_parms->nb_antenna_ports_gNB = 1; // pbch_tx_ant;
|
|
||||||
LOG_I(PHY, "[UE%d] Initial sync: pbch decoded sucessfully, ssb index %d\n", ue->Mod_id, frame_parms->ssb_index);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nr_initial_sync_t nr_initial_sync(UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, int n_frames, int sa)
|
nr_initial_sync_t nr_initial_sync(UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, int n_frames, int sa)
|
||||||
@@ -394,11 +349,7 @@ nr_initial_sync_t nr_initial_sync(UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, i
|
|||||||
// send sync status to higher layers later when timing offset converge to target timing
|
// send sync status to higher layers later when timing offset converge to target timing
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_I(PHY,
|
LOG_I(PHY, "[UE %d] Measured Carrier Frequency offset %d Hz\n", ue->Mod_id, ue->common_vars.freq_offset);
|
||||||
"[UE %d] Measured Carrier Frequency %.0f Hz (offset %d Hz)\n",
|
|
||||||
ue->Mod_id,
|
|
||||||
openair0_cfg[0].rx_freq[0] + ue->common_vars.freq_offset,
|
|
||||||
ue->common_vars.freq_offset);
|
|
||||||
} else {
|
} else {
|
||||||
#ifdef DEBUG_INITIAL_SYNC
|
#ifdef DEBUG_INITIAL_SYNC
|
||||||
LOG_I(PHY,"[UE%d] Initial sync : PBCH not ok\n",ue->Mod_id);
|
LOG_I(PHY,"[UE%d] Initial sync : PBCH not ok\n",ue->Mod_id);
|
||||||
|
|||||||
@@ -397,7 +397,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
const UE_nr_rxtx_proc_t *proc,
|
const UE_nr_rxtx_proc_t *proc,
|
||||||
NR_UE_DLSCH_t dlsch[2],
|
NR_UE_DLSCH_t dlsch[2],
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
unsigned char first_symbol_flag,
|
bool first_symbol_flag,
|
||||||
unsigned char harq_pid,
|
unsigned char harq_pid,
|
||||||
uint32_t pdsch_est_size,
|
uint32_t pdsch_est_size,
|
||||||
int32_t dl_ch_estimates[][pdsch_est_size],
|
int32_t dl_ch_estimates[][pdsch_est_size],
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
///////////
|
///////////
|
||||||
|
|
||||||
int max_num_re = Nl*number_of_symbols*nb_rb*NR_NB_SC_PER_RB;
|
int max_num_re = Nl*number_of_symbols*nb_rb*NR_NB_SC_PER_RB;
|
||||||
int32_t d_mod[max_num_re] __attribute__ ((aligned(16)));
|
c16_t d_mod[max_num_re] __attribute__((aligned(16)));
|
||||||
|
|
||||||
nr_modulation(scrambled_output, // assume one codeword for the moment
|
nr_modulation(scrambled_output, // assume one codeword for the moment
|
||||||
available_bits,
|
available_bits,
|
||||||
@@ -245,7 +245,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
|
|
||||||
uint32_t ***pusch_dmrs = UE->nr_gold_pusch_dmrs[slot];
|
uint32_t ***pusch_dmrs = UE->nr_gold_pusch_dmrs[slot];
|
||||||
uint16_t n_dmrs = (pusch_pdu->bwp_start + start_rb + nb_rb)*((dmrs_type == pusch_dmrs_type1) ? 6:4);
|
uint16_t n_dmrs = (pusch_pdu->bwp_start + start_rb + nb_rb)*((dmrs_type == pusch_dmrs_type1) ? 6:4);
|
||||||
int16_t mod_dmrs[n_dmrs<<1] __attribute((aligned(16)));
|
c16_t mod_dmrs[n_dmrs] __attribute((aligned(16)));
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
@@ -253,15 +253,11 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
|
|
||||||
/////////////////////////ULSCH layer mapping/////////////////////////
|
/////////////////////////ULSCH layer mapping/////////////////////////
|
||||||
///////////
|
///////////
|
||||||
|
const int sz = available_bits / mod_order;
|
||||||
|
c16_t tx_layers[Nl][sz];
|
||||||
|
memset(tx_layers, 0, sizeof(tx_layers));
|
||||||
|
|
||||||
int16_t **tx_layers = (int16_t **)malloc16_clear(Nl*sizeof(int16_t *));
|
nr_ue_layer_mapping(d_mod, Nl, available_bits / mod_order, sz, tx_layers);
|
||||||
for (int nl=0; nl<Nl; nl++)
|
|
||||||
tx_layers[nl] = (int16_t *)malloc16_clear((available_bits<<1)/mod_order*sizeof(int16_t));
|
|
||||||
|
|
||||||
nr_ue_layer_mapping((int16_t *)d_mod,
|
|
||||||
Nl,
|
|
||||||
available_bits/mod_order,
|
|
||||||
tx_layers);
|
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
@@ -272,13 +268,11 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
|
|
||||||
l_prime[0] = 0; // single symbol ap 0
|
l_prime[0] = 0; // single symbol ap 0
|
||||||
|
|
||||||
uint16_t index;
|
|
||||||
uint8_t u = 0, v = 0;
|
uint8_t u = 0, v = 0;
|
||||||
int16_t *dmrs_seq = NULL;
|
c16_t *dmrs_seq = NULL;
|
||||||
|
|
||||||
/// Transform-coded "y"-sequences (for definition see 38-211 V15.3.0 2018-09, subsection 6.3.1.4)
|
/// Transform-coded "y"-sequences (for definition see 38-211 V15.3.0 2018-09, subsection 6.3.1.4)
|
||||||
int32_t y[max_num_re] __attribute__ ((aligned(16)));
|
c16_t y[max_num_re] __attribute__((aligned(16)));
|
||||||
memset(y, 0, max_num_re*sizeof(int32_t));
|
memset(y, 0, sizeof(y));
|
||||||
|
|
||||||
if (pusch_pdu->transform_precoding == transformPrecoder_enabled) {
|
if (pusch_pdu->transform_precoding == transformPrecoder_enabled) {
|
||||||
|
|
||||||
@@ -287,7 +281,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
uint16_t num_dmrs_res_per_symbol = nb_rb*(NR_NB_SC_PER_RB/2);
|
uint16_t num_dmrs_res_per_symbol = nb_rb*(NR_NB_SC_PER_RB/2);
|
||||||
|
|
||||||
// Calculate index to dmrs seq array based on number of DMRS Subcarriers on this symbol
|
// Calculate index to dmrs seq array based on number of DMRS Subcarriers on this symbol
|
||||||
index = get_index_for_dmrs_lowpapr_seq(num_dmrs_res_per_symbol);
|
int index = get_index_for_dmrs_lowpapr_seq(num_dmrs_res_per_symbol);
|
||||||
u = pusch_pdu->dfts_ofdm.low_papr_group_number;
|
u = pusch_pdu->dfts_ofdm.low_papr_group_number;
|
||||||
v = pusch_pdu->dfts_ofdm.low_papr_sequence_number;
|
v = pusch_pdu->dfts_ofdm.low_papr_sequence_number;
|
||||||
dmrs_seq = dmrs_lowpaprtype1_ul_ref_sig[u][v][index];
|
dmrs_seq = dmrs_lowpaprtype1_ul_ref_sig[u][v][index];
|
||||||
@@ -303,7 +297,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
/* In the symbol with DMRS no data would be transmitted CDM groups is 2*/
|
/* In the symbol with DMRS no data would be transmitted CDM groups is 2*/
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
nr_dft(&y[y_offset], &((int32_t*)tx_layers[0])[y_offset], nb_re_pusch);
|
nr_dft(&y[y_offset], &tx_layers[0][y_offset], nb_re_pusch);
|
||||||
|
|
||||||
y_offset = y_offset + nb_re_pusch;
|
y_offset = y_offset + nb_re_pusch;
|
||||||
|
|
||||||
@@ -321,7 +315,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
printf("NR_ULSCH_UE: available_bits: %u, mod_order: %d", available_bits,mod_order);
|
printf("NR_ULSCH_UE: available_bits: %u, mod_order: %d", available_bits,mod_order);
|
||||||
|
|
||||||
for (int ll = 0; ll < (available_bits/mod_order); ll++) {
|
for (int ll = 0; ll < (available_bits/mod_order); ll++) {
|
||||||
debug_symbols[ll] = ulsch_ue->y[ll];
|
debug_symbols[ll] = ulsch_ue->y[ll];
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("NR_ULSCH_UE: numSym: %d, num_dmrs_sym: %d", number_of_symbols,number_dmrs_symbols);
|
printf("NR_ULSCH_UE: numSym: %d, num_dmrs_sym: %d", number_of_symbols,number_dmrs_symbols);
|
||||||
@@ -345,10 +339,9 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
/////////////////////////ULSCH RE mapping/////////////////////////
|
/////////////////////////ULSCH RE mapping/////////////////////////
|
||||||
///////////
|
///////////
|
||||||
|
|
||||||
int encoded_length = frame_parms->N_RB_UL*14*NR_NB_SC_PER_RB*mod_order*Nl;
|
const int encoded_length = frame_parms->N_RB_UL * 14 * NR_NB_SC_PER_RB * mod_order * Nl;
|
||||||
int16_t **tx_precoding = (int16_t **)malloc16_clear(Nl*sizeof(int16_t *));
|
c16_t tx_precoding[Nl][encoded_length];
|
||||||
for (int nl=0; nl<Nl; nl++)
|
memset(tx_precoding, 0, sizeof(tx_precoding));
|
||||||
tx_precoding[nl] = (int16_t *)malloc16_clear((encoded_length<<1)*sizeof(int16_t));
|
|
||||||
|
|
||||||
for (int nl=0; nl < Nl; nl++) {
|
for (int nl=0; nl < Nl; nl++) {
|
||||||
uint8_t k_prime = 0;
|
uint8_t k_prime = 0;
|
||||||
@@ -372,7 +365,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
uint8_t is_ptrs_sym = 0;
|
uint8_t is_ptrs_sym = 0;
|
||||||
uint16_t dmrs_idx = 0, ptrs_idx = 0;
|
uint16_t dmrs_idx = 0, ptrs_idx = 0;
|
||||||
|
|
||||||
int16_t mod_ptrs[nb_rb] __attribute((aligned(16))); // assume maximum number of PTRS per pusch allocation
|
c16_t mod_ptrs[nb_rb] __attribute((aligned(16))); // assume maximum number of PTRS per pusch allocation
|
||||||
|
|
||||||
if ((ul_dmrs_symb_pos >> l) & 0x01) {
|
if ((ul_dmrs_symb_pos >> l) & 0x01) {
|
||||||
is_dmrs_sym = 1;
|
is_dmrs_sym = 1;
|
||||||
@@ -387,7 +380,10 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
// TODO: performance improvement, we can skip the modulation of DMRS symbols outside the bandwidth part
|
// TODO: performance improvement, we can skip the modulation of DMRS symbols outside the bandwidth part
|
||||||
// Perform this on gold sequence, not required when SC FDMA operation is done,
|
// Perform this on gold sequence, not required when SC FDMA operation is done,
|
||||||
LOG_D(PHY,"DMRS in symbol %d\n",l);
|
LOG_D(PHY,"DMRS in symbol %d\n",l);
|
||||||
nr_modulation(pusch_dmrs[l][pusch_pdu->scid], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
|
nr_modulation(pusch_dmrs[l][pusch_pdu->scid],
|
||||||
|
n_dmrs * 2,
|
||||||
|
DMRS_MOD_ORDER,
|
||||||
|
(int16_t *)mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
|
||||||
} else {
|
} else {
|
||||||
dmrs_idx = 0;
|
dmrs_idx = 0;
|
||||||
}
|
}
|
||||||
@@ -397,7 +393,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
|
|
||||||
if(is_ptrs_symbol(l, ulsch_ue->ptrs_symbols)) {
|
if(is_ptrs_symbol(l, ulsch_ue->ptrs_symbols)) {
|
||||||
is_ptrs_sym = 1;
|
is_ptrs_sym = 1;
|
||||||
nr_modulation(pusch_dmrs[l][pusch_pdu->scid], nb_rb, DMRS_MOD_ORDER, mod_ptrs);
|
nr_modulation(pusch_dmrs[l][pusch_pdu->scid], nb_rb, DMRS_MOD_ORDER, (int16_t *)mod_ptrs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,166 +418,149 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
|
|
||||||
if (is_dmrs == 1) {
|
if (is_dmrs == 1) {
|
||||||
// if transform precoding is enabled
|
// if transform precoding is enabled
|
||||||
if (pusch_pdu->transform_precoding == transformPrecoder_enabled) {
|
const int tmp = Wt[l_prime[0]] * Wf[k_prime] * AMP;
|
||||||
((int16_t*)tx_precoding[nl])[(sample_offsetF)<<1] = (Wt[l_prime[0]]*Wf[k_prime]*AMP*dmrs_seq[2*dmrs_idx]) >> 15;
|
if (pusch_pdu->transform_precoding == transformPrecoder_enabled)
|
||||||
((int16_t*)tx_precoding[nl])[((sample_offsetF)<<1) + 1] = (Wt[l_prime[0]]*Wf[k_prime]*AMP*dmrs_seq[(2*dmrs_idx) + 1]) >> 15;
|
tx_precoding[nl][sample_offsetF] = c16mulRealShift(dmrs_seq[dmrs_idx], tmp, 15);
|
||||||
} else {
|
else
|
||||||
((int16_t*)tx_precoding[nl])[(sample_offsetF)<<1] = (Wt[l_prime[0]]*Wf[k_prime]*AMP*mod_dmrs[dmrs_idx<<1]) >> 15;
|
tx_precoding[nl][sample_offsetF] = c16mulRealShift(mod_dmrs[dmrs_idx], tmp, 15);
|
||||||
((int16_t*)tx_precoding[nl])[((sample_offsetF)<<1) + 1] = (Wt[l_prime[0]]*Wf[k_prime]*AMP*mod_dmrs[(dmrs_idx<<1) + 1]) >> 15;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_PUSCH_MAPPING
|
#ifdef DEBUG_PUSCH_MAPPING
|
||||||
printf("DMRS: Layer: %d\t, dmrs_idx %d\t l %d \t k %d \t k_prime %d \t n %d \t dmrs: %d %d\n",
|
printf("DMRS: Layer: %d\t, dmrs_idx %d\t l %d \t k %d \t k_prime %d \t n %d \t dmrs: %d %d\n",
|
||||||
nl, dmrs_idx, l, k, k_prime, n, ((int16_t*)tx_precoding[nl])[(sample_offsetF)<<1],
|
nl,
|
||||||
((int16_t*)tx_precoding[nl])[((sample_offsetF)<<1) + 1]);
|
dmrs_idx,
|
||||||
|
l,
|
||||||
|
k,
|
||||||
|
k_prime,
|
||||||
|
n,
|
||||||
|
tx_precoding[nl][sample_offsetF].r,
|
||||||
|
tx_precoding[nl][sample_offsetF].i);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
dmrs_idx++;
|
dmrs_idx++;
|
||||||
k_prime++;
|
k_prime++;
|
||||||
k_prime&=1;
|
k_prime &= 1;
|
||||||
n+=(k_prime)?0:1;
|
n += (k_prime) ? 0 : 1;
|
||||||
|
|
||||||
} else if (is_ptrs == 1) {
|
} else if (is_ptrs == 1) {
|
||||||
uint16_t beta_ptrs = 1; // temp value until power control is implemented
|
uint16_t beta_ptrs = 1; // temp value until power control is implemented
|
||||||
((int16_t*)tx_precoding[nl])[(sample_offsetF)<<1] = (beta_ptrs*AMP*mod_ptrs[ptrs_idx<<1]) >> 15;
|
tx_precoding[nl][sample_offsetF] = c16mulRealShift(mod_ptrs[ptrs_idx], beta_ptrs * AMP, 15);
|
||||||
((int16_t*)tx_precoding[nl])[((sample_offsetF)<<1) + 1] = (beta_ptrs*AMP*mod_ptrs[(ptrs_idx<<1) + 1]) >> 15;
|
|
||||||
ptrs_idx++;
|
ptrs_idx++;
|
||||||
} else if (!is_dmrs_sym || allowed_xlsch_re_in_dmrs_symbol(k, start_sc, frame_parms->ofdm_symbol_size, cdm_grps_no_data, dmrs_type)) {
|
} else if (!is_dmrs_sym
|
||||||
if (pusch_pdu->transform_precoding == transformPrecoder_disabled) {
|
|| allowed_xlsch_re_in_dmrs_symbol(k, start_sc, frame_parms->ofdm_symbol_size, cdm_grps_no_data, dmrs_type)) {
|
||||||
((int16_t*)tx_precoding[nl])[(sample_offsetF)<<1] = ((int16_t *)tx_layers[nl])[m<<1];
|
if (pusch_pdu->transform_precoding == transformPrecoder_disabled)
|
||||||
((int16_t*)tx_precoding[nl])[((sample_offsetF)<<1) + 1] = ((int16_t *)tx_layers[nl])[(m<<1) + 1];
|
tx_precoding[nl][sample_offsetF] = tx_layers[nl][m];
|
||||||
}
|
else
|
||||||
else {
|
tx_precoding[nl][sample_offsetF] = y[m];
|
||||||
((int16_t*)tx_precoding[nl])[(sample_offsetF)<<1] = ((int16_t *) y)[m<<1];
|
|
||||||
((int16_t*)tx_precoding[nl])[((sample_offsetF)<<1) + 1] = ((int16_t *) y)[(m<<1) + 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_PUSCH_MAPPING
|
#ifdef DEBUG_PUSCH_MAPPING
|
||||||
printf("DATA: layer %d\t m %d\t l %d \t k %d \t tx_precoding: %d %d\n",
|
printf("DATA: layer %d\t m %d\t l %d \t k %d \t tx_precoding: %d %d\n",
|
||||||
nl, m, l, k, ((int16_t*)tx_precoding[nl])[(sample_offsetF)<<1],
|
nl,
|
||||||
((int16_t*)tx_precoding[nl])[((sample_offsetF)<<1) + 1]);
|
m,
|
||||||
|
l,
|
||||||
|
k,
|
||||||
|
tx_precoding[nl][sample_offsetF].r,
|
||||||
|
tx_precoding[nl][sample_offsetF].i);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m++;
|
m++;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
((int16_t*)tx_precoding[nl])[(sample_offsetF)<<1] = 0;
|
tx_precoding[nl][sample_offsetF] = (c16_t){0};
|
||||||
((int16_t*)tx_precoding[nl])[((sample_offsetF)<<1) + 1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (++k >= frame_parms->ofdm_symbol_size)
|
if (++k >= frame_parms->ofdm_symbol_size)
|
||||||
k -= frame_parms->ofdm_symbol_size;
|
k -= frame_parms->ofdm_symbol_size;
|
||||||
} //for (i=0; i< nb_rb*NR_NB_SC_PER_RB; i++)
|
} // for (i=0; i< nb_rb*NR_NB_SC_PER_RB; i++)
|
||||||
}//for (l=start_symbol; l<start_symbol+number_of_symbols; l++)
|
} // for (l=start_symbol; l<start_symbol+number_of_symbols; l++)
|
||||||
}//for (nl=0; nl < Nl; nl++)
|
} // for (nl=0; nl < Nl; nl++)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////ULSCH precoding/////////////////////////
|
/////////////////////////ULSCH precoding/////////////////////////
|
||||||
///////////
|
///////////
|
||||||
///Layer Precoding and Antenna port mapping
|
/// Layer Precoding and Antenna port mapping
|
||||||
// tx_layers 0-3 are mapped on antenna ports
|
// tx_layers 0-3 are mapped on antenna ports
|
||||||
// The precoding info is supported by nfapi such as num_prgs, prg_size, prgs_list and pm_idx
|
// The precoding info is supported by nfapi such as num_prgs, prg_size, prgs_list and pm_idx
|
||||||
// The same precoding matrix is applied on prg_size RBs, Thus
|
// The same precoding matrix is applied on prg_size RBs, Thus
|
||||||
// pmi = prgs_list[rbidx/prg_size].pm_idx, rbidx =0,...,rbSize-1
|
// pmi = prgs_list[rbidx/prg_size].pm_idx, rbidx =0,...,rbSize-1
|
||||||
// The Precoding matrix:
|
// The Precoding matrix:
|
||||||
for (int ap=0; ap<frame_parms->nb_antennas_tx; ap++) {
|
for (int ap = 0; ap < frame_parms->nb_antennas_tx; ap++) {
|
||||||
for (int l=start_symbol; l<start_symbol+number_of_symbols; l++) {
|
for (int l = start_symbol; l < start_symbol + number_of_symbols; l++) {
|
||||||
uint16_t k = start_sc;
|
uint16_t k = start_sc;
|
||||||
|
|
||||||
for (int rb=0; rb<nb_rb; rb++) {
|
for (int rb = 0; rb < nb_rb; rb++) {
|
||||||
//get pmi info
|
// get pmi info
|
||||||
uint8_t pmi=pusch_pdu->Tpmi;
|
uint8_t pmi = pusch_pdu->Tpmi;
|
||||||
|
|
||||||
if (pmi == 0) {//unitary Precoding
|
if (pmi == 0) { // unitary Precoding
|
||||||
if (k + NR_NB_SC_PER_RB <= frame_parms->ofdm_symbol_size) { // RB does not cross DC
|
if (k + NR_NB_SC_PER_RB <= frame_parms->ofdm_symbol_size) { // RB does not cross DC
|
||||||
if (ap<pusch_pdu->nrOfLayers)
|
if (ap < pusch_pdu->nrOfLayers)
|
||||||
memcpy(&txdataF[ap][l*frame_parms->ofdm_symbol_size + k],
|
memcpy(&txdataF[ap][l * frame_parms->ofdm_symbol_size + k],
|
||||||
&tx_precoding[ap][2*(l*frame_parms->ofdm_symbol_size + k)],
|
&tx_precoding[ap][l * frame_parms->ofdm_symbol_size + k],
|
||||||
NR_NB_SC_PER_RB*sizeof(int32_t));
|
NR_NB_SC_PER_RB * sizeof(c16_t));
|
||||||
else
|
else
|
||||||
memset(&txdataF[ap][l*frame_parms->ofdm_symbol_size + k],
|
memset(&txdataF[ap][l * frame_parms->ofdm_symbol_size + k], 0, NR_NB_SC_PER_RB * sizeof(int32_t));
|
||||||
0,
|
|
||||||
NR_NB_SC_PER_RB*sizeof(int32_t));
|
|
||||||
} else { // RB does cross DC
|
} else { // RB does cross DC
|
||||||
int neg_length = frame_parms->ofdm_symbol_size - k;
|
int neg_length = frame_parms->ofdm_symbol_size - k;
|
||||||
int pos_length = NR_NB_SC_PER_RB - neg_length;
|
int pos_length = NR_NB_SC_PER_RB - neg_length;
|
||||||
if (ap<pusch_pdu->nrOfLayers) {
|
if (ap < pusch_pdu->nrOfLayers) {
|
||||||
memcpy(&txdataF[ap][l*frame_parms->ofdm_symbol_size + k],
|
memcpy(&txdataF[ap][l * frame_parms->ofdm_symbol_size + k],
|
||||||
&tx_precoding[ap][2*(l*frame_parms->ofdm_symbol_size + k)],
|
&tx_precoding[ap][l * frame_parms->ofdm_symbol_size + k],
|
||||||
neg_length*sizeof(int32_t));
|
neg_length * sizeof(c16_t));
|
||||||
memcpy(&txdataF[ap][l*frame_parms->ofdm_symbol_size],
|
memcpy(&txdataF[ap][l * frame_parms->ofdm_symbol_size],
|
||||||
&tx_precoding[ap][2*(l*frame_parms->ofdm_symbol_size)],
|
&tx_precoding[ap][l * frame_parms->ofdm_symbol_size],
|
||||||
pos_length*sizeof(int32_t));
|
pos_length * sizeof(int32_t));
|
||||||
} else {
|
} else {
|
||||||
memset(&txdataF[ap][l*frame_parms->ofdm_symbol_size + k],
|
memset(&txdataF[ap][l * frame_parms->ofdm_symbol_size + k], 0, neg_length * sizeof(int32_t));
|
||||||
0,
|
memset(&txdataF[ap][l * frame_parms->ofdm_symbol_size], 0, pos_length * sizeof(int32_t));
|
||||||
neg_length*sizeof(int32_t));
|
|
||||||
memset(&txdataF[ap][l*frame_parms->ofdm_symbol_size],
|
|
||||||
0,
|
|
||||||
pos_length*sizeof(int32_t));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
k += NR_NB_SC_PER_RB;
|
k += NR_NB_SC_PER_RB;
|
||||||
if (k >= frame_parms->ofdm_symbol_size) {
|
if (k >= frame_parms->ofdm_symbol_size) {
|
||||||
k -= frame_parms->ofdm_symbol_size;
|
k -= frame_parms->ofdm_symbol_size;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
// get the precoding matrix weights:
|
||||||
//get the precoding matrix weights:
|
|
||||||
const char *W_prec;
|
const char *W_prec;
|
||||||
switch (frame_parms->nb_antennas_tx) {
|
switch (frame_parms->nb_antennas_tx) {
|
||||||
case 1://1 antenna port
|
case 1: // 1 antenna port
|
||||||
W_prec = nr_W_1l_2p[pmi][ap];
|
W_prec = nr_W_1l_2p[pmi][ap];
|
||||||
break;
|
break;
|
||||||
case 2://2 antenna ports
|
case 2: // 2 antenna ports
|
||||||
if (pusch_pdu->nrOfLayers == 1)//1 layer
|
if (pusch_pdu->nrOfLayers == 1) // 1 layer
|
||||||
W_prec = nr_W_1l_2p[pmi][ap];
|
W_prec = nr_W_1l_2p[pmi][ap];
|
||||||
else//2 layers
|
else // 2 layers
|
||||||
W_prec = nr_W_2l_2p[pmi][ap];
|
W_prec = nr_W_2l_2p[pmi][ap];
|
||||||
break;
|
break;
|
||||||
case 4://4 antenna ports
|
case 4: // 4 antenna ports
|
||||||
if (pusch_pdu->nrOfLayers == 1)//1 layer
|
if (pusch_pdu->nrOfLayers == 1) // 1 layer
|
||||||
W_prec = nr_W_1l_4p[pmi][ap];
|
W_prec = nr_W_1l_4p[pmi][ap];
|
||||||
else if (pusch_pdu->nrOfLayers == 2)//2 layers
|
else if (pusch_pdu->nrOfLayers == 2) // 2 layers
|
||||||
W_prec = nr_W_2l_4p[pmi][ap];
|
W_prec = nr_W_2l_4p[pmi][ap];
|
||||||
else if (pusch_pdu->nrOfLayers == 3)//3 layers
|
else if (pusch_pdu->nrOfLayers == 3) // 3 layers
|
||||||
W_prec = nr_W_3l_4p[pmi][ap];
|
W_prec = nr_W_3l_4p[pmi][ap];
|
||||||
else//4 layers
|
else // 4 layers
|
||||||
W_prec = nr_W_4l_4p[pmi][ap];
|
W_prec = nr_W_4l_4p[pmi][ap];
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_D(PHY,"Precoding 1,2, or 4 antenna ports are currently supported\n");
|
LOG_D(PHY, "Precoding 1,2, or 4 antenna ports are currently supported\n");
|
||||||
W_prec = nr_W_1l_2p[pmi][ap];
|
W_prec = nr_W_1l_2p[pmi][ap];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<NR_NB_SC_PER_RB; i++) {
|
for (int i = 0; i < NR_NB_SC_PER_RB; i++) {
|
||||||
int32_t re_offset = l*frame_parms->ofdm_symbol_size + k;
|
int32_t re_offset = l * frame_parms->ofdm_symbol_size + k;
|
||||||
int32_t precodatatx_F = nr_layer_precoder(tx_precoding, W_prec, pusch_pdu->nrOfLayers, re_offset);
|
txdataF[ap][re_offset] = nr_layer_precoder(encoded_length, tx_precoding, W_prec, pusch_pdu->nrOfLayers, re_offset);
|
||||||
((int16_t*)txdataF[ap])[(re_offset<<1)] = ((int16_t *) &precodatatx_F)[0];
|
|
||||||
((int16_t*)txdataF[ap])[(re_offset<<1) + 1] = ((int16_t *) &precodatatx_F)[1];
|
|
||||||
|
|
||||||
if (++k >= frame_parms->ofdm_symbol_size) {
|
if (++k >= frame_parms->ofdm_symbol_size) {
|
||||||
k -= frame_parms->ofdm_symbol_size;
|
k -= frame_parms->ofdm_symbol_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //RB loop
|
} // RB loop
|
||||||
} // symbol loop
|
} // symbol loop
|
||||||
}// port loop
|
} // port loop
|
||||||
|
|
||||||
NR_UL_UE_HARQ_t *harq_process_ulsch=NULL;
|
NR_UL_UE_HARQ_t *harq_process_ulsch = NULL;
|
||||||
harq_process_ulsch = &UE->ul_harq_processes[harq_pid];
|
harq_process_ulsch = &UE->ul_harq_processes[harq_pid];
|
||||||
harq_process_ulsch->status = SCH_IDLE;
|
harq_process_ulsch->status = SCH_IDLE;
|
||||||
|
|
||||||
for (int nl = 0; nl < Nl; nl++) {
|
|
||||||
free_and_zero(tx_layers[nl]);
|
|
||||||
free_and_zero(tx_precoding[nl]);
|
|
||||||
}
|
|
||||||
free_and_zero(tx_layers);
|
|
||||||
free_and_zero(tx_precoding);
|
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,100 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
*
|
|
||||||
* FILENAME : pbch_nr.c
|
|
||||||
*
|
|
||||||
* MODULE : broacast channel
|
|
||||||
*
|
|
||||||
* DESCRIPTION : generation of pbch
|
|
||||||
* 3GPP TS 38.211 7.3.3 Physical broadcast channel
|
|
||||||
*
|
|
||||||
************************************************************************/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#include "PHY/defs.h"
|
|
||||||
|
|
||||||
#define DEFINE_VARIABLES_PBCH_NR_H
|
|
||||||
#include "PHY/NR_REFSIG/pbch_nr.h"
|
|
||||||
#undef DEFINE_VARIABLES_PBCH_NR_H
|
|
||||||
|
|
||||||
/*******************************************************************
|
|
||||||
*
|
|
||||||
* NAME : pseudo_random_gold_sequence
|
|
||||||
*
|
|
||||||
* PARAMETERS :
|
|
||||||
*
|
|
||||||
* RETURN : generate pseudo-random sequence which is a length-31 Gold sequence
|
|
||||||
*
|
|
||||||
* DESCRIPTION : 3GPP TS 38.211 5.2.1 Pseudo-random sequence generation
|
|
||||||
* Sequence generation
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
|
|
||||||
#define NC (1600)
|
|
||||||
#define GOLD_LENGTH (31)
|
|
||||||
|
|
||||||
uint32_t *pseudo_random_gold_sequence(length M_PN, uint32_t cinit)
|
|
||||||
{
|
|
||||||
int size = M_PN * sizeof(uint32_t);
|
|
||||||
int size_x = sizeof(int)*M_PN + size;
|
|
||||||
int *x1 = malloc(size_x);
|
|
||||||
int *x2 = malloc(size_x);
|
|
||||||
|
|
||||||
if ((x1 == NULL) || (x2 == NULL)) {
|
|
||||||
msg("Fatal memory allocation problem \n");
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
bzero(x1, size_x);
|
|
||||||
bzero(x2, size_x);
|
|
||||||
}
|
|
||||||
|
|
||||||
x1[0] = 1;
|
|
||||||
|
|
||||||
for (n = 0; n < 31; n++) {
|
|
||||||
x2[n] = (cinit >> n) & 0x1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int n = 0; n < (NC+M_PN); n++) {
|
|
||||||
x1(n+31) = (x1(n+3) + x1(n))%2;
|
|
||||||
x2(n+31) = (x2(n+3) + x2(n+2) + x2(n+1) + x2(n))%2;
|
|
||||||
}
|
|
||||||
|
|
||||||
int *c = calloc(size);
|
|
||||||
if (c != NULL) {
|
|
||||||
bzero(c, size);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
msg("Fatal memory allocation problem \n");
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int n = 0; n < M_PN; n++) {
|
|
||||||
c(i) = (x1(n+NC) + x2(n+NC))%2;
|
|
||||||
}
|
|
||||||
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
@@ -672,7 +672,15 @@ static int pss_search_time_nr(c16_t **rxdata, PHY_VARS_NR_UE *ue, int fo_flag, i
|
|||||||
|
|
||||||
*nid2 = pss_source;
|
*nid2 = pss_source;
|
||||||
|
|
||||||
LOG_I(PHY,"[UE] nr_synchro_time: Sync source = %d, Peak found at pos %d, val = %llu (%d dB) avg %d dB, ffo %lf\n", pss_source, peak_position, (unsigned long long)peak_value, dB_fixed64(peak_value),dB_fixed64(avg[pss_source]),ffo_est);
|
LOG_I(PHY,
|
||||||
|
"[UE] nr_synchro_time: Sync source (nid2) = %d, Peak found at pos %d, val = %ld (%d dB power over signal avg %d dB), ffo "
|
||||||
|
"%lf\n",
|
||||||
|
pss_source,
|
||||||
|
peak_position,
|
||||||
|
peak_value,
|
||||||
|
dB_fixed64(peak_value),
|
||||||
|
dB_fixed64(avg[pss_source]),
|
||||||
|
ffo_est);
|
||||||
|
|
||||||
if (peak_value < 5*avg[pss_source])
|
if (peak_value < 5*avg[pss_source])
|
||||||
return(-1);
|
return(-1);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user