Commit d8d3106b authored by Robert Schmidt's avatar Robert Schmidt

Merge remote-tracking branch...

Merge remote-tracking branch 'origin/episys-throughput-updates-and-downlink-siso-cm' into integration_2022_wk14
parents baa76323 8eb22e72
......@@ -238,6 +238,26 @@ pipeline {
}
}
}
stage ("5G L2 Simulators") {
when { expression {doMandatoryTests} }
steps {
script {
triggerSlaveJob ('RAN-L2-Sim-Test-5G', 'Test-L2-Sim-Container-5G')
}
}
post {
always {
script {
finalizeSlaveJob('RAN-L2-Sim-Test-5G')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
}
}
}
}
stage ("NSA B200 Sanity Check") {
when { expression {doMandatoryTests} }
steps {
......
......@@ -93,6 +93,7 @@ class Containerize():
self.allImagesSize = {}
self.collectInfo = {}
self.deployedContainers = []
self.tsharkStarted = False
self.pingContName = ''
self.pingOptions = ''
......@@ -682,12 +683,28 @@ class Containerize():
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps -a'
count = 0
healthy = 0
newContainers = []
while (count < 10):
count += 1
containerStatus = []
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
healthy = 0
for state in deployStatus.split('\n'):
res = re.search('Name|----------', state)
if res is not None:
continue
if len(state) == 0:
continue
res = re.search('^(?P<container_name>[a-zA-Z0-9\-\_]+) ', state)
if res is not None:
cName = res.group('container_name')
found = False
for alreadyDeployed in self.deployedContainers:
if cName == alreadyDeployed:
found = True
if not found:
newContainers.append(cName)
self.deployedContainers.append(cName)
if re.search('Up \(healthy\)', state) is not None:
healthy += 1
if re.search('rfsim4g-db-init.*Exit 0', state) is not None:
......@@ -698,16 +715,33 @@ class Containerize():
else:
time.sleep(10)
imagesInfo = ''
for newCont in newContainers:
cmd = 'docker inspect -f "{{.Config.Image}}" ' + newCont
imageName = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
imageName = str(imageName).strip()
cmd = 'docker image inspect --format "{{.RepoTags}}\t{{.Size}}\t{{.Created}}" ' + imageName
imagesInfo += subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n'
for imageInfo in imagesInfo.split('\n'):
html_cell += imageInfo[:-11] + '\n'
html_cell += '\n'
for cState in containerStatus:
html_cell += cState + '\n'
html_cell += '</pre>'
html_queue.put(html_cell)
if count == 100 and healthy == self.nb_healthy[0]:
if self.tsharkStarted == False:
logging.debug('Starting tshark on public network')
self.CaptureOnDockerNetworks()
HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTestRowQueue('n/a', 'OK', 1, html_queue)
for cState in containerStatus:
logging.debug(cState)
logging.info('\u001B[1m Deploying OAI Object(s) PASS\u001B[0m')
else:
HTML.CreateHtmlTestRow('Could not deploy in time', 'KO', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlTestRowQueue('Could not deploy in time', 'KO', 1, html_queue)
for cState in containerStatus:
logging.debug(cState)
logging.error('\u001B[1m Deploying OAI Object(s) FAILED\u001B[0m')
......@@ -726,10 +760,12 @@ class Containerize():
cmd = 'sudo nohup tshark -f "(host 192.168.61.11 and icmp) or (not host 192.168.61.11 and not host 192.168.61.30 and not arp and not port 53 and not port 2152)"'
elif re.search('5g.*rfsimulator', self.yamlPath[0]) is not None:
cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not arp and not port 53 and not port 2152 and not port 2153)"'
elif re.search('5g_l2sim', self.yamlPath[0]) is not None:
cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not arp and not port 53 and not port 2152 and not port 2153)"'
else:
return
for name in networkNames.split('\n'):
if re.search('rfsim', name) is not None:
if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None:
cmd += ' -i ' + name
cmd += ' -w /tmp/capture_'
ymlPath = self.yamlPath[0].split('/')
......@@ -781,7 +817,7 @@ class Containerize():
# Analyzing log file(s)!
listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
for container in listOfPossibleRanContainers:
filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
filename = self.yamlPath[0] + '/*-oai-' + container + '.log'
cmd = 'ls ' + filename
containerStatus = True
try:
......@@ -803,7 +839,7 @@ class Containerize():
listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
for container in listOfPossibleUeContainers:
filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
filename = self.yamlPath[0] + '/*-oai-' + container + '.log'
cmd = 'ls ' + filename
containerStatus = True
try:
......@@ -851,6 +887,7 @@ class Containerize():
logging.error('\u001B[1m Undeploying OAI Object(s) FAILED\u001B[0m')
return
self.deployedContainers = []
# Cleaning any created tmp volume
cmd = 'docker volume prune --force || true'
logging.debug(cmd)
......@@ -863,6 +900,40 @@ class Containerize():
HTML.CreateHtmlTestRow('n/a', 'KO', CONST.ALL_PROCESSES_OK)
logging.info('\u001B[1m Undeploying OAI Object(s) FAIL\u001B[0m')
def StatsFromGenObject(self, HTML):
self.exitStatus = 0
ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1]
# if the containers are running, recover the logs!
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
logging.debug(cmd)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
cmd = 'docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" '
anyLogs = False
for state in deployStatus.split('\n'):
res = re.search('Name|----------', state)
if res is not None:
continue
if len(state) == 0:
continue
res = re.search('^(?P<container_name>[a-zA-Z0-9\-\_]+) ', state)
if res is not None:
anyLogs = True
cmd += res.group('container_name') + ' '
message = ''
if anyLogs:
logging.debug(cmd)
stats = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
for statLine in stats.split('\n'):
logging.debug(statLine)
message += statLine + '\n'
html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n' + message + '</pre>'
html_queue.put(html_cell)
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', 1, html_queue)
def PingFromContainer(self, HTML, RAN, UE):
self.exitStatus = 0
ymlPath = self.yamlPath[0].split('/')
......
......@@ -3156,10 +3156,12 @@ class OaiCiTest():
nrFoundDCI = 0
nrCRCOK = 0
mbms_messages = 0
nbPduSessAccept = 0
nbPduDiscard = 0
HTML.htmlUEFailureMsg=''
global_status = CONST.ALL_PROCESSES_OK
for line in ue_log_file.readlines():
result = re.search('nr_synchro_time', str(line))
result = re.search('nr_synchro_time|Starting NR UE soft modem', str(line))
if result is not None:
nrUEFlag = True
if nrUEFlag:
......@@ -3172,6 +3174,15 @@ class OaiCiTest():
result = re.search('CRC OK', str(line))
if result is not None:
nrCRCOK += 1
result = re.search('Received PDU Session Establishment Accept', str(line))
if result is not None:
nbPduSessAccept += 1
result = re.search('warning: discard PDU, sn out of window', str(line))
if result is not None:
nbPduDiscard += 1
result = re.search('--nfapi 5 --node-number 2 --sa', str(line))
if result is not None:
frequency_found = True
result = re.search('Exiting OAI softmodem', str(line))
if result is not None:
exitSignalReceived = True
......@@ -3302,21 +3313,29 @@ class OaiCiTest():
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
if nrUEFlag:
if nrDecodeMib > 0:
statMsg = 'UE showed ' + str(nrDecodeMib) + ' MIB decode message(s)'
statMsg = 'UE showed ' + str(nrDecodeMib) + ' "MIB decode" message(s)'
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
if nrFoundDCI > 0:
statMsg = 'UE showed ' + str(nrFoundDCI) + ' DCI found message(s)'
statMsg = 'UE showed ' + str(nrFoundDCI) + ' "DCI found" message(s)'
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
if nrCRCOK > 0:
statMsg = 'UE showed ' + str(nrCRCOK) + ' PDSCH decoding message(s)'
statMsg = 'UE showed ' + str(nrCRCOK) + ' "PDSCH decoding" message(s)'
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
if not frequency_found:
statMsg = 'NR-UE could NOT synch!'
logging.error('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
if nbPduSessAccept > 0:
statMsg = 'UE showed ' + str(nbPduSessAccept) + ' "Received PDU Session Establishment Accept" message(s)'
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
if nbPduDiscard > 0:
statMsg = 'UE showed ' + str(nbPduDiscard) + ' "warning: discard PDU, sn out of window" message(s)'
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
if uciStatMsgCount > 0:
statMsg = 'UE showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
......
......@@ -73,15 +73,6 @@ gNBs =
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#pdsch-ConfigCommon
#pdschTimeDomainAllocationList (up to 16 entries)
initialDLBWPk0_0 = 0; #for DL slot
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
initialDLBWPk0_1 = 0; #for mixed slot
initialDLBWPmappingType_1 = 0;
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
#uplinkConfigCommon
#frequencyInfoUL
......
log_config = {
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
};
uicc0 = {
imsi = "208950000000031";
key = "0c0a34601d4f07677303652c0462535b";
opc= "63bfa50ee6523365ff14c1f45f88737d";
dnn= "oai";
nssai_sst=222;
nssai_sd=123;
}
L1s = (
{
num_cc = 1;
tr_n_preference = "nfapi";
local_n_if_name = "ens3";
remote_n_address = "127.0.0.1"; //Proxy IP
local_n_address = "127.0.0.1";
local_n_portc = 50600;
remote_n_portc = 50601;
local_n_portd = 50610;
remote_n_portd = 50611;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 90
att_rx = 0;
bands = [7,38,42,43];
max_pdschReferenceSignalPower = -27;
max_rxgain = 125;
}
);
log_config = {
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
};
uicc0 = {
imsi = "208950000000032";
key = "0c0a34601d4f07677303652c0462535b";
opc= "63bfa50ee6523365ff14c1f45f88737d";
dnn= "oai";
nssai_sst=222;
nssai_sd=123;
}
L1s = (
{
num_cc = 1;
tr_n_preference = "nfapi";
local_n_if_name = "ens3";
remote_n_address = "127.0.0.1"; //Proxy IP
local_n_address = "127.0.0.1";
local_n_portc = 50600;
remote_n_portc = 50601;
local_n_portd = 50610;
remote_n_portd = 50611;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 90
att_rx = 0;
bands = [7,38,42,43];
max_pdschReferenceSignalPower = -27;
max_rxgain = 125;
}
);
log_config = {
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
};
uicc0 = {
imsi = "208950000000033";
key = "0c0a34601d4f07677303652c0462535b";
opc= "63bfa50ee6523365ff14c1f45f88737d";
dnn= "oai";
nssai_sst=222;
nssai_sd=123;
}
L1s = (
{
num_cc = 1;
tr_n_preference = "nfapi";
local_n_if_name = "ens3";
remote_n_address = "127.0.0.1"; //Proxy IP
local_n_address = "127.0.0.1";
local_n_portc = 50600;
remote_n_portc = 50601;
local_n_portd = 50610;
remote_n_portd = 50611;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 90
att_rx = 0;
bands = [7,38,42,43];
max_pdschReferenceSignalPower = -27;
max_rxgain = 125;
}
);
log_config = {
global_log_level ="info";
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
};
uicc0 = {
imsi = "208950000000034";
key = "0c0a34601d4f07677303652c0462535b";
opc= "63bfa50ee6523365ff14c1f45f88737d";
dnn= "oai";
nssai_sst=222;
nssai_sd=123;
}
L1s = (
{
num_cc = 1;
tr_n_preference = "nfapi";
local_n_if_name = "ens3";
remote_n_address = "127.0.0.1"; //Proxy IP
local_n_address = "127.0.0.1";
local_n_portc = 50600;
remote_n_portc = 50601;
local_n_portd = 50610;
remote_n_portd = 50611;
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 90
att_rx = 0;
bands = [7,38,42,43];
max_pdschReferenceSignalPower = -27;
max_rxgain = 125;
}
);
......@@ -24,7 +24,15 @@ gNBs =
ssb_SubcarrierOffset = 31; //0;
pdsch_AntennaPorts = 1;
pusch_AntennaPorts = 1;
min_rxtxtime = 6;
sib1_tda = 0;
pdcch_ConfigSIB1 = (
{
controlResourceSetZero = 12;
searchSpaceZero = 0;
}
);
servingCellConfigCommon = (
{
#spCellConfigCommon
......@@ -54,15 +62,6 @@ gNBs =
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 0;
initialDLBWPsearchSpaceZero = 0;
#pdsch-ConfigCommon
#pdschTimeDomainAllocationList (up to 16 entries)
initialDLBWPk0_0 = 0; #for DL slot
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
initialDLBWPk0_1 = 0; #for mixed slot
initialDLBWPmappingType_1 = 0;
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
#uplinkConfigCommon
#frequencyInfoUL
......
......@@ -74,15 +74,6 @@ gNBs =
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#pdsch-ConfigCommon
#pdschTimeDomainAllocationList (up to 16 entries)
initialDLBWPk0_0 = 0; #for DL slot
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
initialDLBWPk0_1 = 0; #for mixed slot
initialDLBWPmappingType_1 = 0;
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
#uplinkConfigCommon
#frequencyInfoUL
......
......@@ -23,6 +23,7 @@ gNBs =
ssb_SubcarrierOffset = 0;
pdsch_AntennaPorts = 1;
min_rxtxtime = 6;
servingCellConfigCommon = (
{
......@@ -53,29 +54,6 @@ gNBs =
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#pdsch-ConfigCommon
#pdschTimeDomainAllocationList (up to 16 entries)
initialDLBWPk0_0 = 0;
#initialULBWPmappingType
#0=typeA,1=typeB
initialDLBWPmappingType_0 = 0;
#this is SS=1,L=13
initialDLBWPstartSymbolAndLength_0 = 40;
initialDLBWPk0_1 = 0;
initialDLBWPmappingType_1 = 0;
#this is SS=2,L=12
initialDLBWPstartSymbolAndLength_1 = 53;
initialDLBWPk0_2 = 0;
initialDLBWPmappingType_2 = 0;
#this is SS=1,L=12
initialDLBWPstartSymbolAndLength_2 = 54;
initialDLBWPk0_3 = 0;
initialDLBWPmappingType_3 = 0;
#this is SS=1,L=5
initialDLBWPstartSymbolAndLength_3 = 57;
#uplinkConfigCommon
#frequencyInfoUL
......
......@@ -391,7 +391,7 @@ def GetParametersFromXML(action):
if (string_field is not None):
CONTAINERS.yamlPath[CONTAINERS.eNB_instance] = string_field
elif action == 'DeployGenObject' or action == 'UndeployGenObject':
elif action == 'DeployGenObject' or action == 'UndeployGenObject' or action == 'StatsFromGenObject':
string_field=test.findtext('yaml_path')
if (string_field is not None):
CONTAINERS.yamlPath[0] = string_field
......@@ -931,6 +931,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
CONTAINERS.IperfFromContainer(HTML, RAN)
if CONTAINERS.exitStatus==1:
RAN.prematureExit = True
elif action == 'StatsFromGenObject':
CONTAINERS.StatsFromGenObject(HTML)
else:
sys.exit('Invalid class (action) from xml')
if RAN.prematureExit:
......
......@@ -677,13 +677,13 @@ class RANManagement():
# if T tracer was run with option 0 (no logs), analyze logs
# from textlog, otherwise do normal analysis (e.g., option 2)
result = re.search('T_stdout 0', str(self.Initialize_eNB_args))
enbLogFile = self.eNBLogFiles[int(self.eNB_instance)]
raw_record_file = enbLogFile.replace('.log', '_record.raw')
replay_log_file = enbLogFile.replace('.log', '_replay.log')
if (result is not None):
logging.debug('\u001B[1m Replaying RAW record file\u001B[0m')
mySSH.open(lIpAddr, lUserName, lPassWord)
mySSH.command('cd ' + lSourcePath + '/common/utils/T/tracer/', '\$', 5)
enbLogFile = self.eNBLogFiles[int(self.eNB_instance)]
raw_record_file = enbLogFile.replace('.log', '_record.raw')
replay_log_file = enbLogFile.replace('.log', '_replay.log')
extracted_txt_file = enbLogFile.replace('.log', '_extracted_messages.txt')
extracted_log_file = enbLogFile.replace('.log', '_extracted_messages.log')
mySSH.command('./extract_config -i ' + lSourcePath + '/cmake_targets/' + raw_record_file + ' > ' + lSourcePath + '/cmake_targets/' + extracted_txt_file, '\$', 5)
......@@ -706,8 +706,6 @@ class RANManagement():
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*stats.log', '.')
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*.pickle', '.')
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*.png', '.')
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/'+raw_record_file, '.')
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/'+replay_log_file, '.')
#
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + fileToAnalyze, '.')
if (copyin_res == -1):
......@@ -723,9 +721,7 @@ class RANManagement():
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrL1_stats.log', self.eNBSourceCodePath + '/cmake_targets/')
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrMAC_stats.log', self.eNBSourceCodePath + '/cmake_targets/')
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.pickle', self.eNBSourceCodePath + '/cmake_targets/')
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.png', self.eNBSourceCodePath + '/cmake_targets/')#RH 21/02/2002 this does not work, there are more than 1 png file
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword,'./'+raw_record_file, self.eNBSourceCodePath + '/cmake_targets/')
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword,'./'+replay_log_file, self.eNBSourceCodePath + '/cmake_targets/')
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.png', self.eNBSourceCodePath + '/cmake_targets/')
#
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + fileToAnalyze, self.eNBSourceCodePath + '/cmake_targets/')
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + fileToAnalyze)
......@@ -826,6 +822,8 @@ class RANManagement():
RealTimeProcessingIssue = False
DLRetxIssue = False
ULRetxIssue = False
nrRrcRcfgComplete = 0
harqFeedbackPast = 0
line_cnt=0 #log file line counter
for line in enb_log_file.readlines():
......@@ -1002,6 +1000,13 @@ class RANManagement():
#remove 1- all useless char before relevant info (ulsch or dlsch) 2- trailing char
dlsch_ulsch_stats[k]=re.sub(r'^.*\]\s+', r'' , line.rstrip())
result = re.search('Received NR_RRCReconfigurationComplete from UE', str(line))
if result is not None:
nrRrcRcfgComplete += 1
result = re.search('HARQ feedback is in the past', str(line))
if result is not None:
harqFeedbackPast += 1
#count "problem receiving samples" msg
result = re.search('\[PHY\]\s+problem receiving samples', str(line))
......@@ -1089,6 +1094,14 @@ class RANManagement():
statMsg = nodeB_prefix + 'NB ran with TX Write thread enabled'
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
htmleNBFailureMsg += statMsg + '\n'
if nrRrcRcfgComplete > 0:
statMsg = nodeB_prefix + 'NB showed ' + str(nrRrcRcfgComplete) + ' "Received NR_RRCReconfigurationComplete from UE" message(s)'
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
htmleNBFailureMsg += statMsg + '\n'
if harqFeedbackPast > 0:
statMsg = nodeB_prefix + 'NB showed ' + str(harqFeedbackPast) + ' "HARQ feedback is in the past" message(s)'
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
htmleNBFailureMsg += statMsg + '\n'
#FR1 NSA test : add new markers to make sure gNB is used
if NSA_RAPROC_PUSCH_check:
statMsg = '[RAPROC] PUSCH with TC_RNTI message check for ' + nodeB_prefix + 'NB : PASS '
......
......@@ -46,3 +46,4 @@
- UndeployGenObject
- PingFromContainer
- IperfFromContainer
- StatsFromGenObject
<!--
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>l2sim-5gnr-tdd</htmlTabRef>
<htmlTabName>Testing 5G NR L2 sim - TDD gNB</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>2</repeatCount>
<TestCaseRequestedList>
100001
000000
000001
000002
000003
000011
200000
020001
020002
200001
100001
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000000">
<class>DeployGenObject</class>
<desc>Deploy MySql Database</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
<services>mysql</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000001">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
<services>oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services>
<nb_healthy>6</nb_healthy>
</testCase>
<testCase id="000002">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G gNB L2 sim SA</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
<services>oai-gnb</services>
<nb_healthy>7</nb_healthy>
</testCase>
<testCase id="000003">
<class>DeployGenObject</class>
<desc>Deploy OAI 5G NR-UE L2 sim SA and Proxy</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
<services>proxy oai-nr-ue0</services>
<nb_healthy>9</nb_healthy>
</testCase>
<testCase id="000011">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
</testCase>
<testCase id="020001">
<class>PingFromContainer</class>
<desc>Ping ext-dn from NR-UE</desc>
<container_name>l2sim-oai-nr-ue0</container_name>
<options>-I oaitun_ue1 -c 20 192.168.72.135</options>
<loss_threshold>5</loss_threshold>
</testCase>
<testCase id="020002">
<class>PingFromContainer</class>
<desc>Ping NR-UE from ext-dn</desc>
<container_name>l2sim-oai-ext-dn</container_name>
<options>-c 20 12.1.1.2</options>
<loss_threshold>5</loss_threshold>
</testCase>
<testCase id="100001">
<class>UndeployGenObject</class>
<desc>Undeploy all OAI 5G stack</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
</testCase>
<testCase id="200000">
<class>StatsFromGenObject</class>
<desc>Statistics before Traffic Test</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
</testCase>
<testCase id="200001">
<class>StatsFromGenObject</class>
<desc>Statistics after Traffic Test</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
</testCase>
</testCaseList>
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>l2sim-5gnr-down</htmlTabRef>
<htmlTabName>CleanUp 5G L2 sim - TDD gNB</htmlTabName>
<htmlTabIcon>trash</htmlTabIcon>
<TestCaseRequestedList>
100002
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="100002">
<class>UndeployGenObject</class>
<desc>Undeploy all OAI 5G stack</desc>
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
</testCase>
</testCaseList>
This diff is collapsed.
This diff is collapsed.
......@@ -46,6 +46,8 @@ This proxy allows to perform L2 nFAPI simulator for:
* 5G-NSA
* 5G-SA
Another tutorial for 5G SA mode with 1 User is available [here](../ci-scripts/yaml_files/5g_l2sim_tdd/README.md).
----
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
......
......@@ -29,7 +29,8 @@ FROM ran-base:latest AS nr-ue-base
FROM ran-build:latest AS nr-ue-build
RUN cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/nr_ue_parameters.yaml && \
cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
#start from scratch for target executable
FROM registry.access.redhat.com/ubi8/ubi:latest as oai-nr-ue
......@@ -62,7 +63,10 @@ COPY --from=nr-ue-build \
./
WORKDIR /opt/oai-nr-ue/etc
COPY --from=nr-ue-build /oai-ran/ci-scripts/conf_files/nr-ue-sim.conf .
COPY --from=nr-ue-build \
/oai-ran/ci-scripts/conf_files/nr-ue-sim.conf \
/oai-ran/docker/etc/nr-ue.nfapi.conf \
./
COPY --from=nr-ue-build \
/oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \
......@@ -118,5 +122,5 @@ WORKDIR /opt/oai-nr-ue/etc
COPY --from=nr-ue-build /oai-ran/ci-scripts/conf_files/ue.* .
WORKDIR /opt/oai-nr-ue
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue-sim.conf"]
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"]
ENTRYPOINT ["/opt/oai-nr-ue/bin/entrypoint.sh"]
......@@ -29,7 +29,8 @@ FROM ran-base:latest AS nr-ue-base
FROM ran-build:latest AS nr-ue-build
RUN cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/nr_ue_parameters.yaml && \
cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
#start from scratch for target executable
FROM ubuntu:bionic as oai-nr-ue
......@@ -67,7 +68,10 @@ COPY --from=nr-ue-build \
./
WORKDIR /opt/oai-nr-ue/etc
COPY --from=nr-ue-build /oai-ran/ci-scripts/conf_files/nr-ue-sim.conf .
COPY --from=nr-ue-build \
/oai-ran/ci-scripts/conf_files/nr-ue-sim.conf \
/oai-ran/docker/etc/nr-ue.nfapi.conf \
./
COPY --from=nr-ue-build \
/oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \
......@@ -106,5 +110,5 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
ldconfig
WORKDIR /opt/oai-nr-ue
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue-sim.conf"]
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"]
ENTRYPOINT ["/opt/oai-nr-ue/bin/entrypoint.sh"]
......@@ -23,6 +23,7 @@
#-----------------------------------------------------------
# Import
#-----------------------------------------------------------
import glob
import re
import yaml
import os
......@@ -33,7 +34,8 @@ def main():
#read yaml input parameters
f = open(f'{sys.argv[1]}',)
data = yaml.full_load(f)
dir = os.listdir(f'{data[0]["paths"]["source_dir"]}')
initial_path = f'{data[0]["paths"]["source_dir"]}'
dir = glob.glob(initial_path + '/**/*.conf', recursive=True)
#identify configs, read and replace corresponding values
for config in data[1]["configurations"]:
......@@ -42,7 +44,10 @@ def main():
print('================================================')
print('filePrefix = ' + filePrefix)
print('outputfilename = ' + outputfilename)
found = False
for inputfile in dir:
if found:
continue
if inputfile.find(filePrefix) >=0:
prefix_outputfile = {"cu.band7.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"du.band7.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
......@@ -58,10 +63,13 @@ def main():
"gnb.sa.band66.fr1.106PRB.usrpn300.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"gNB_SA_CU.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"gNB_SA_DU.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"proxy_nr-ue.nfapi.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"ue.nfapi": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"ue_sim_ci": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}'
}
print('inputfile = ' + inputfile)
found = True
if filePrefix in prefix_outputfile:
outputfile1 = prefix_outputfile[filePrefix]
......@@ -69,7 +77,7 @@ def main():
if not os.path.exists(directory):
os.makedirs(directory, exist_ok=True)
with open(f'{data[0]["paths"]["source_dir"]}{inputfile}', mode='r') as inputfile, \
with open(f'{inputfile}', mode='r') as inputfile, \
open(outputfile1, mode='w') as outputfile:
for line in inputfile:
count = 0
......
......@@ -11,8 +11,9 @@ THREAD_PARALLEL_CONFIG=${THREAD_PARALLEL_CONFIG:-PARALLEL_SINGLE_THREAD}
if [[ -v USE_NSA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.nsa.tdd.conf $PREFIX/etc/gnb.conf; fi
if [[ -v USE_SA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.tdd.conf $PREFIX/etc/gnb.conf; fi
if [[ -v USE_SA_FDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.fdd.conf $PREFIX/etc/gnb.conf; fi
if [[ -v USE_SA_CU ]]; then ln -s $PREFIX/etc/gnb.sa.cu.conf $PREFIX/etc/gnb.conf; fi
if [[ -v USE_SA_CU ]]; then cp $PREFIX/etc/gnb.sa.cu.conf $PREFIX/etc/gnb.conf; fi
if [[ -v USE_SA_TDD_CU ]]; then cp $PREFIX/etc/gnb.sa.du.tdd.conf $PREFIX/etc/gnb.conf; fi
if [[ -v USE_SA_NFAPI_VNF ]]; then cp $PREFIX/etc/gnb.sa.nfapi.vnf.conf $PREFIX/etc/gnb.conf; fi
# Sometimes, the templates are not enough. We mount a conf file on $PREFIX/etc. It can be a template itself.
if [[ -v USE_VOLUMED_CONF ]]; then cp $PREFIX/etc/mounted.conf $PREFIX/etc/gnb.conf; fi
......
......@@ -202,3 +202,39 @@
- key: remote_n_portd
env: "@F1_CU_D_PORT@"
- filePrefix: proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf
outputfilename: "gnb.sa.nfapi.vnf.conf"
config:
- key: Active_gNBs
env: "@GNB_NAME@"
- key: gNB_name
env: "@GNB_NAME@"
- key: mcc
env: "@MCC@"
- key: mnc
env: "@MNC@"
- key: mnc_length
env: "@MNC_LENGTH@"
- key: tracking_area_code
env: "@TAC@"
- key: sst
env: "@NSSAI_SST@"
- key: ipv4
env: "@AMF_IP_ADDRESS@"
- key: GNB_INTERFACE_NAME_FOR_NG_AMF
env: "@GNB_NGA_IF_NAME@"
- key: GNB_IPV4_ADDRESS_FOR_NG_AMF
env: "@GNB_NGA_IP_ADDRESS@"
- key: GNB_INTERFACE_NAME_FOR_NGU
env: "@GNB_NGU_IF_NAME@"
- key: GNB_IPV4_ADDRESS_FOR_NGU
env: "@GNB_NGU_IP_ADDRESS@"
- key: parallel_config
env: "@THREAD_PARALLEL_CONFIG@"
- key: local_s_if_name
env: "@LOCAL_S_IF_NAME@"
- key: remote_s_address
env: "@REMOTE_S_ADDRESS@"
- key: local_s_address
env: "@LOCAL_S_ADDRESS@"
......@@ -5,12 +5,22 @@ set -euo pipefail
PREFIX=/opt/oai-nr-ue
# Based another env var, pick one template to use
#if [[ -v USE_NFAPI ]]; then cp $PREFIX/etc/ue.nfapi.conf $PREFIX/etc/ue.conf; fi
if [[ -v USE_NFAPI ]]; then cp $PREFIX/etc/nr-ue.nfapi.conf $PREFIX/etc/nr-ue.conf; fi
# Sometimes, the templates are not enough. We mount a conf file on $PREFIX/etc. It can be a template itself.
if [[ -v USE_VOLUMED_CONF ]]; then cp $PREFIX/etc/mounted.conf $PREFIX/etc/nr-ue.conf; fi
# if none, pick the default
if [ ! -f $PREFIX/etc/nr-ue.conf ]; then cp $PREFIX/etc/nr-ue-sim.conf $PREFIX/etc/nr-ue.conf; fi
# Only this template will be manipulated and the USIM one!
CONFIG_FILES=`ls $PREFIX/etc/ue.conf $PREFIX/etc/nr-ue-sim.conf || true`
# Only this template will be manipulated
CONFIG_FILES=`ls $PREFIX/etc/nr-ue.conf || true`
for c in ${CONFIG_FILES}; do
# Sometimes templates have no pattern to be replaced.
if ! grep -oP '@[a-zA-Z0-9_]+@' ${c}; then
echo "Configuration is already set"
break
fi
# grep variable names (format: ${VAR}) from template to be rendered
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${c} | sort | uniq | xargs)
......
#/*
# * 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
# */
---
- paths:
source_dir: "ci-scripts/conf_files/"
dest_dir: docker/etc
- configurations:
- filePrefix: proxy_nr-ue.nfapi.conf
outputfilename: "nr-ue.nfapi.conf"
config:
- key: imsi
env: "@FULL_IMSI@"
- key: key
env: "@FULL_KEY@"
- key: opc
env: "@OPC@"
- key: dnn
env: "@DNN@"
- key: nssai_sst
env: "@NSSAI_SST@"
- key: nssai_sd
env: "@NSSAI_SD@"
- key: remote_n_address
env: "@GNB_IP_ADDRESS@"
- key: local_n_address
env: "@NR_UE_IP_ADDRESS@"
- key: local_n_if_name
env: "@NR_UE_NFAPI_IF_NAME@"
......@@ -19,7 +19,7 @@
* contact@openairinterface.org
*/
#define _GNU_SOURCE
#define _GNU_SOURCE // For pthread_setname_np
#include <pthread.h>
#include <openair1/PHY/impl_defs_top.h>
#include "executables/nr-uesoftmodem.h"
......@@ -239,84 +239,21 @@ static void L1_nsa_prach_procedures(frame_t frame, int slot, fapi_nr_ul_config_p
LOG_D(NR_MAC, "We have successfully filled the rach_ind queue with the recently filled rach ind\n");
}
static bool sfn_slot_matcher(void *wanted, void *candidate)
{
nfapi_p7_message_header_t *msg = candidate;
int sfn_sf = *(int*)wanted;
switch (msg->message_id)
{
case NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION:
{
nfapi_nr_rach_indication_t *ind = candidate;
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot;
}
case NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION:
{
nfapi_nr_rx_data_indication_t *ind = candidate;
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot;
}
case NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION:
{
nfapi_nr_crc_indication_t *ind = candidate;
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot;
}
case NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION:
{
nfapi_nr_uci_indication_t *ind = candidate;
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot;
}
case NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST:
{
nfapi_nr_dl_tti_request_t *ind = candidate;
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot;
}
case NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST:
{
nfapi_nr_tx_data_request_t *ind = candidate;
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot;
}
case NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST:
{
nfapi_nr_ul_dci_request_t *ind = candidate;
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot;
}
case NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST:
{
nfapi_nr_ul_tti_request_t *ind = candidate;
return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot;
}
default:
LOG_E(NR_MAC, "sfn_slot_match bad ID: %d\n", msg->message_id);
}
return false;
}
static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot)
{
nfapi_nr_rach_indication_t *rach_ind = unqueue_matching(&nr_rach_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot);
nfapi_nr_rx_data_indication_t *rx_ind = unqueue_matching(&nr_rx_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot);
nfapi_nr_crc_indication_t *crc_ind = unqueue_matching(&nr_crc_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot);
nfapi_nr_dl_tti_request_t *dl_tti_request = get_queue(&nr_dl_tti_req_queue);
nfapi_nr_ul_dci_request_t *ul_dci_request = get_queue(&nr_ul_dci_req_queue);
LOG_D(NR_MAC, "Try to get a ul_tti_req for sfn/slot %d %d from queue with %lu items\n",
NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_harq_sfn_slot),NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot), nr_ul_tti_req_queue.num_items);
nfapi_nr_ul_tti_request_t *ul_tti_request = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.active_harq_sfn_slot);
if (!ul_tti_request)
{
LOG_D(NR_MAC, "Try to get a ul_tti_req from seprate queue because dl_tti_req was late\n");
ul_tti_request = unqueue_matching(&nr_wait_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.active_harq_sfn_slot);
for (int i = 0; i < NR_MAX_HARQ_PROCESSES; i++) {
LOG_D(NR_MAC, "Try to get a ul_tti_req by matching CRC active SFN %d/SLOT %d from queue with %lu items\n",
NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot),
NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot), nr_ul_tti_req_queue.num_items);
nfapi_nr_ul_tti_request_t *ul_tti_request_crc = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot);
if (ul_tti_request_crc && ul_tti_request_crc->n_pdus > 0)
{
check_and_process_dci(NULL, NULL, NULL, ul_tti_request_crc);
}
}
if (rach_ind && rach_ind->number_of_pdus > 0)
......@@ -333,24 +270,6 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot)
free(rach_ind);
nr_Msg1_transmitted(0, 0, NFAPI_SFNSLOT2SFN(sfn_slot), 0);
}
if (crc_ind && crc_ind->number_crcs > 0)
{
NR_UL_IND_t UL_INFO = {
.crc_ind = *crc_ind,
};
send_nsa_standalone_msg(&UL_INFO, crc_ind->header.message_id);
free(crc_ind->crc_list);
free(crc_ind);
}
if (rx_ind && rx_ind->number_of_pdus > 0)
{
NR_UL_IND_t UL_INFO = {
.rx_ind = *rx_ind,
};
send_nsa_standalone_msg(&UL_INFO, rx_ind->header.message_id);
free(rx_ind->pdu_list);
free(rx_ind);
}
if (dl_tti_request)
{
int dl_tti_sfn_slot = NFAPI_SFNSLOT2HEX(dl_tti_request->SFN, dl_tti_request->Slot);
......@@ -380,10 +299,6 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot)
{
check_and_process_dci(NULL, NULL, ul_dci_request, NULL);
}
if (ul_tti_request && ul_tti_request->n_pdus > 0)
{
check_and_process_dci(NULL, NULL, NULL, ul_tti_request);
}
}
static void check_nr_prach(NR_UE_MAC_INST_t *mac, nr_uplink_indication_t *ul_info, NR_PRACH_RESOURCES_t *prach_resources)
......@@ -434,7 +349,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
reset_queue(&nr_tx_req_queue);
reset_queue(&nr_ul_dci_req_queue);
reset_queue(&nr_ul_tti_req_queue);
reset_queue(&nr_wait_ul_tti_req_queue);
NR_PRACH_RESOURCES_t prach_resources;
memset(&prach_resources, 0, sizeof(prach_resources));
......@@ -443,6 +357,13 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
int last_sfn_slot = -1;
uint16_t sfn_slot = 0;
module_id_t mod_id = 0;
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
for (int i = 0; i < NR_MAX_HARQ_PROCESSES; i++) {
mac->nr_ue_emul_l1.harq[i].active = false;
mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot = -1;
}
while (!oai_exit)
{
if (sem_wait(&sfn_slot_semaphore) != 0)
......@@ -459,9 +380,11 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
}
if (slot_ind) {
sfn_slot = *slot_ind;
free_and_zero(slot_ind);
}
else if (ch_info) {
sfn_slot = ch_info->sfn_slot;
free_and_zero(ch_info);
}
frame_t frame = NFAPI_SFNSLOT2SFN(sfn_slot);
......@@ -477,8 +400,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
LOG_D(NR_MAC, "The received sfn/slot [%d %d] from proxy\n",
frame, slot);
module_id_t mod_id = 0;
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
if (get_softmodem_params()->sa && mac->mib == NULL)
{
LOG_D(NR_MAC, "We haven't gotten MIB. Lets see if we received it\n");
......@@ -533,8 +454,10 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
mac->scc_SIB->tdd_UL_DL_ConfigurationCommon,
ul_info.slot_tx, mac->frame_type))
{
LOG_D(NR_MAC, "Slot %d. calling nr_ue_ul_ind() from %s\n", ul_info.slot_tx, __FUNCTION__);
nr_ue_ul_indication(&ul_info);
LOG_D(NR_MAC, "Slot %d. calling nr_ue_ul_ind() and nr_ue_pucch_scheduler() from %s\n", ul_info.slot_tx, __FUNCTION__);
nr_ue_scheduler(NULL, &ul_info);
nr_ue_prach_scheduler(mod_id, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id);
nr_ue_pucch_scheduler(mod_id, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id);
check_nr_prach(mac, &ul_info, &prach_resources);
}
if (!IS_SOFTMODEM_NOS1 && get_softmodem_params()->sa) {
......@@ -544,10 +467,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
pdcp_run(&ctxt);
}
process_queued_nr_nfapi_msgs(mac, sfn_slot);
free(slot_ind);
slot_ind = NULL;
free(ch_info);
ch_info = NULL;
}
return NULL;
}
......
......@@ -50,6 +50,7 @@
#include "LAYER2/MAC/mac_vars.h"
#include "RRC/LTE/rrc_vars.h"
#include "PHY_INTERFACE/phy_interface_vars.h"
#include "NR_IF_Module.h"
#include "openair1/SIMULATION/TOOLS/sim.h"
#ifdef SMBV
......@@ -156,6 +157,9 @@ uint32_t N_RB_DL = 106;
*/
uint8_t abstraction_flag=0;
nr_bler_struct nr_bler_data[NR_NUM_MCS];
static void init_bler_table(void);
/*---------------------BMC: timespec helpers -----------------------------*/
......@@ -250,7 +254,6 @@ void init_tpools(uint8_t nun_dlsch_threads) {
free(params);
init_dlsch_tpool( nun_dlsch_threads);
}
static void get_options(void) {
nrUE_params.ofdm_offset_divisor = 8;
......@@ -472,6 +475,7 @@ int main( int argc, char **argv ) {
PHY_vars_UE_g[0] = malloc(sizeof(PHY_VARS_NR_UE *)*MAX_NUM_CCs);
if (get_softmodem_params()->emulate_l1) {
RCconfig_nr_ue_L1();
init_bler_table();
}
if (get_softmodem_params()->do_ra)
......@@ -552,3 +556,56 @@ int main( int argc, char **argv ) {
return 0;
}
// Read in each MCS file and build BLER-SINR-TB table
static void init_bler_table(void) {
memset(nr_bler_data, 0, sizeof(nr_bler_data));
const char *awgn_results_dir = getenv("AWGN_RESULTS_DIR");
if (!awgn_results_dir) {
LOG_W(NR_MAC, "No $AWGN_RESULTS_DIR\n");
return;
}
for (unsigned int i = 0; i < NR_NUM_MCS; i++) {
char fName[1024];
snprintf(fName, sizeof(fName), "%s/mcs%d_awgn_5G.csv", awgn_results_dir, i);
FILE *pFile = fopen(fName, "r");
if (!pFile) {
LOG_E(NR_MAC, "%s: open %s: %s\n", __func__, fName, strerror(errno));
continue;
}
size_t bufSize = 1024;
char * line = NULL;
char * token;
char * temp = NULL;
int nlines = 0;
while (getline(&line, &bufSize, pFile) > 0) {
if (!strncmp(line, "SNR", 3)) {
continue;
}
if (nlines > NUM_SINR) {
LOG_E(NR_MAC, "BLER FILE ERROR - num lines greater than expected - file: %s\n", fName);
abort();
}
token = strtok_r(line, ";", &temp);
int ncols = 0;
while (token != NULL) {
if (ncols > NUM_BLER_COL) {
LOG_E(NR_MAC, "BLER FILE ERROR - num of cols greater than expected\n");
abort();
}
nr_bler_data[i].bler_table[nlines][ncols] = strtof(token, NULL);
ncols++;
token = strtok_r(NULL, ";", &temp);
}
nlines++;
}
nr_bler_data[i].length = nlines;
fclose(pFile);
}
}
This diff is collapsed.
......@@ -44,13 +44,21 @@ uint8_t pulls32(uint8_t **in, int32_t *out, uint8_t *end);
uint32_t pullarray8(uint8_t **in, uint8_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
uint32_t pullarray16(uint8_t **in, uint16_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
uint32_t pullarrays16(uint8_t **in, int16_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
uint32_t pullarray32(uint8_t **in, uint32_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
uint32_t pullarray32(uint8_t **values_to_pull,
uint32_t out[],
uint32_t max_num_values_to_pull,
uint32_t num_values_to_pull,
uint8_t *out_end);
uint32_t pullarrays32(uint8_t **in, int32_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
uint32_t pusharray8(uint8_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
uint32_t pusharray16(uint16_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
uint32_t pusharrays16(int16_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
uint32_t pusharray32(uint32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
uint32_t pusharray32(const uint32_t *values_to_push,
uint32_t max_num_values_to_push,
uint32_t num_values_to_push,
uint8_t **out,
uint8_t *out_end);
uint32_t pusharrays32(int32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
typedef uint8_t (*pack_array_elem_fn)(void* elem, uint8_t **ppWritePackedMsg, uint8_t *end);
......
This diff is collapsed.
This diff is collapsed.
......@@ -1473,7 +1473,7 @@ void vnf_handle_nr_slot_indication(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf
}
else
{
NFAPI_TRACE(NFAPI_TRACE_INFO, "%s: Handling NR SLOT Indication\n", __FUNCTION__);
NFAPI_TRACE(NFAPI_TRACE_DEBUG, "%s: Handling NR SLOT Indication\n", __FUNCTION__);
if(vnf_p7->_public.nr_slot_indication)
{
(vnf_p7->_public.nr_slot_indication)(&ind);
......@@ -2574,32 +2574,28 @@ int vnf_p7_read_dispatch_message(vnf_p7_t* vnf_p7)
// resize the buffer if we have a large segment
if(header.message_length > vnf_p7->rx_message_buffer_size)
{
NFAPI_TRACE(NFAPI_TRACE_NOTE, "reallocing rx buffer %d\n", header.message_length);
NFAPI_TRACE(NFAPI_TRACE_NOTE, "reallocing rx buffer %d\n", header.message_length);
vnf_p7->rx_message_buffer = realloc(vnf_p7->rx_message_buffer, header.message_length);
vnf_p7->rx_message_buffer_size = header.message_length;
}
// read the segment
recvfrom_result = recvfrom(vnf_p7->socket, vnf_p7->rx_message_buffer, header.message_length, MSG_WAITALL, (struct sockaddr*)&remote_addr, &remote_addr_size);
recvfrom_result = recvfrom(vnf_p7->socket, vnf_p7->rx_message_buffer, header.message_length, MSG_WAITALL | MSG_TRUNC, (struct sockaddr*)&remote_addr, &remote_addr_size);
NFAPI_TRACE(NFAPI_TRACE_INFO, "recvfrom_result = %d from %s():%d\n", recvfrom_result, __FUNCTION__, __LINE__);
// todo : how to handle incomplete readfroms, need some sort of buffer/select
if(recvfrom_result == 0)
{
NFAPI_TRACE(NFAPI_TRACE_ERROR, "recvfrom returned 0\n");
}
else if(recvfrom_result != -1 && recvfrom_result != header.message_length)
{
NFAPI_TRACE(NFAPI_TRACE_ERROR, "Received unexpected number of bytes %d %d\n", recvfrom_result, header.message_length);
recvfrom_result += recvfrom(vnf_p7->socket, &vnf_p7->rx_message_buffer[recvfrom_result], header.message_length - recvfrom_result, MSG_WAITALL, (struct sockaddr*)&remote_addr, &remote_addr_size);
}
if(recvfrom_result > 0)
if (recvfrom_result > 0)
{
if (recvfrom_result != header.message_length)
{
NFAPI_TRACE(NFAPI_TRACE_ERROR, "(%d) Received unexpected number of bytes. %d != %d",
__LINE__, recvfrom_result, header.message_length);
break;
}
NFAPI_TRACE(NFAPI_TRACE_INFO, "Calling vnf_nr_handle_p7_message from %d\n", __LINE__);
vnf_handle_p7_message(vnf_p7->rx_message_buffer, recvfrom_result, vnf_p7);
return 0;
}
else
{
......
export OPENAIR_HOME=$(pwd)
export OPENAIR_DIR=$(pwd)
export AWGN_RESULTS_DIR=$OPENAIR_DIR/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results
export OPENAIR1_DIR=$OPENAIR_HOME/openair1
export OPENAIR2_DIR=$OPENAIR_HOME/openair2
export OPENAIR3_DIR=$OPENAIR_HOME/openair3
......
This diff is collapsed.
SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err
16.000000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
16.100000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
16.200000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
16.300000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0
16.400000;27;15840;0.704000;4999;5002;0;0;0;0;0;0;0
16.500000;27;15840;0.704000;4981;5002;0;0;0;0;0;0;0
16.600000;27;15840;0.704000;4887;5002;0;0;0;0;0;0;0
16.700000;27;15840;0.704000;4688;5002;0;0;0;0;0;0;0
16.800000;27;15840;0.704000;4176;5002;0;0;0;0;0;0;0
16.900000;27;15840;0.704000;3340;5002;0;0;0;0;0;0;0
17.000000;27;15840;0.704000;2386;5002;0;0;0;0;0;0;0
17.100000;27;15840;0.704000;1510;5002;0;0;0;0;0;0;0
17.200000;27;15840;0.704000;1000;5552;0;0;0;0;0;0;0
17.300000;27;15840;0.704000;926;10000;0;0;0;0;0;0;0
17.400000;27;15840;0.704000;516;10000;0;0;0;0;0;0;0
17.500000;27;15840;0.704000;287;10000;0;0;0;0;0;0;0
17.600000;27;15840;0.704000;198;10000;0;0;0;0;0;0;0
17.700000;27;15840;0.704000;135;10000;0;0;0;0;0;0;0
17.800000;27;15840;0.704000;102;10000;0;0;0;0;0;0;0
17.900000;27;15840;0.704000;94;10000;0;0;0;0;0;0;0
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
-4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-3.9;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-3.8;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-3.7;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-3.6;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-3.5;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-3.4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-3.3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-3.2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-3.1;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-2.9;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-2.8;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-2.7;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-2.6;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-2.5;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-2.4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-2.3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-2.2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-2.1;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0
-1.9;0;1864;0.2344;1499;1500;0;0;0;0;0;0;0
-1.8;0;1864;0.2344;1499;1500;0;0;0;0;0;0;0
-1.7;0;1864;0.2344;1498;1500;0;0;0;0;0;0;0
-1.6;0;1864;0.2344;1498;1500;0;0;0;0;0;0;0
-1.5;0;1864;0.2344;1497;1500;0;0;0;0;0;0;0
-1.4;0;1864;0.2344;1445;1500;0;0;0;0;0;0;0
-1.3;0;1864;0.2344;1394;1500;0;0;0;0;0;0;0
-1.2;0;1864;0.2344;1346;1500;0;0;0;0;0;0;0
-1.1;0;1864;0.2344;1299;1500;0;0;0;0;0;0;0
-1;0;1864;0.2344;1253;1500;0;0;0;0;0;0;0
-0.9;0;1864;0.2344;980;1500;0;0;0;0;0;0;0
-0.8;0;1864;0.2344;767;1500;0;0;0;0;0;0;0
-0.7;0;1864;0.2344;600;1500;0;0;0;0;0;0;0
-0.6;0;1864;0.2344;469;1500;0;0;0;0;0;0;0
-0.5;0;1864;0.2344;367;1500;0;0;0;0;0;0;0
-0.4;0;1864;0.2344;215;1500;0;0;0;0;0;0;0
-0.3;0;1864;0.2344;126;1500;0;0;0;0;0;0;0
-0.2;0;1864;0.2344;74;1500;0;0;0;0;0;0;0
-0.1;0;1864;0.2344;43;1500;0;0;0;0;0;0;0
0;0;1864;0.2344;26;1500;0;0;0;0;0;0;0
0.1;0;1864;0.2344;12;1500;0;0;0;0;0;0;0
0.2;0;1864;0.2344;5;1500;0;0;0;0;0;0;0
0.3;0;1864;0.2344;2;1500;0;0;0;0;0;0;0
0.4;0;1864;0.2344;1;1500;0;0;0;0;0;0;0
0.5;0;1864;0.2344;1;1500;0;0;0;0;0;0;0
0.6;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
0.7;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
0.8;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
0.9;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
1;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
1.1;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
1.2;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
1.3;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
1.4;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
1.5;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
1.6;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
1.7;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
1.8;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
1.9;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
2;0;1864;0.2344;0;1500;0;0;0;0;0;0;0
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
3.1;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
3.2;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
3.3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
3.4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
3.5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
3.6;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
3.7;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
3.8;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
3.9;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
4.1;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
4.2;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
4.3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
4.4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
4.5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
4.6;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
4.7;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
4.8;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
4.9;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0
5.1;10;10504;1.3281;1454;1500;0;0;0;0;0;0;0
5.2;10;10504;1.3281;1410;1500;0;0;0;0;0;0;0
5.3;10;10504;1.3281;1367;1500;0;0;0;0;0;0;0
5.4;10;10504;1.3281;1325;1500;0;0;0;0;0;0;0
5.5;10;10504;1.3281;1285;1500;0;0;0;0;0;0;0
5.6;10;10504;1.3281;1026;1500;0;0;0;0;0;0;0
5.7;10;10504;1.3281;819;1500;0;0;0;0;0;0;0
5.8;10;10504;1.3281;654;1500;0;0;0;0;0;0;0
5.9;10;10504;1.3281;522;1500;0;0;0;0;0;0;0
6;10;10504;1.3281;417;1500;0;0;0;0;0;0;0
6.1;10;10504;1.3281;309;1500;0;0;0;0;0;0;0
6.2;10;10504;1.3281;229;1500;0;0;0;0;0;0;0
6.3;10;10504;1.3281;169;1500;0;0;0;0;0;0;0
6.4;10;10504;1.3281;125;1500;0;0;0;0;0;0;0
6.5;10;10504;1.3281;93;1500;0;0;0;0;0;0;0
6.6;10;10504;1.3281;64;1500;0;0;0;0;0;0;0
6.7;10;10504;1.3281;44;1500;0;0;0;0;0;0;0
6.8;10;10504;1.3281;31;1500;0;0;0;0;0;0;0
6.9;10;10504;1.3281;21;1500;0;0;0;0;0;0;0
7;10;10504;1.3281;15;1500;0;0;0;0;0;0;0
7.1;10;10504;1.3281;7;1500;0;0;0;0;0;0;0
7.2;10;10504;1.3281;3;1500;0;0;0;0;0;0;0
7.3;10;10504;1.3281;1;1500;0;0;0;0;0;0;0
7.4;10;10504;1.3281;1;1500;0;0;0;0;0;0;0
7.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
7.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
7.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
7.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
7.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
8.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
8.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
8.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
8.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
8.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
8.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
8.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
8.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
8.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
9.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
9.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
9.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
9.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
9.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
9.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
9.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
9.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
9.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
10;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
10.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
10.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
10.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
10.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
10.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
10.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
10.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
10.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
10.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
11;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
11.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
11.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
11.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
11.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
11.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
11.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
11.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
11.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
11.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
12;10;10504;1.3281;0;1500;0;0;0;0;0;0;0
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
3.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
3.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
3.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
3.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
3.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
3.6;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
3.7;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
3.8;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
3.9;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
4.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
4.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
4.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
4.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
4.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
4.6;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
4.7;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
4.8;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
4.9;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
5.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
5.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
5.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
5.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
5.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0
5.6;11;11784;1.4766;1494;1500;0;0;0;0;0;0;0
5.7;11;11784;1.4766;1489;1500;0;0;0;0;0;0;0
5.8;11;11784;1.4766;1483;1500;0;0;0;0;0;0;0
5.9;11;11784;1.4766;1477;1500;0;0;0;0;0;0;0
6;11;11784;1.4766;1472;1500;0;0;0;0;0;0;0
6.1;11;11784;1.4766;1367;1500;0;0;0;0;0;0;0
6.2;11;11784;1.4766;1269;1500;0;0;0;0;0;0;0
6.3;11;11784;1.4766;1179;1500;0;0;0;0;0;0;0
6.4;11;11784;1.4766;1095;1500;0;0;0;0;0;0;0
6.5;11;11784;1.4766;1016;1500;0;0;0;0;0;0;0
6.6;11;11784;1.4766;762;1500;0;0;0;0;0;0;0
6.7;11;11784;1.4766;571;1500;0;0;0;0;0;0;0
6.8;11;11784;1.4766;428;1500;0;0;0;0;0;0;0
6.9;11;11784;1.4766;320;1500;0;0;0;0;0;0;0
7;11;11784;1.4766;240;1500;0;0;0;0;0;0;0
7.1;11;11784;1.4766;169;1500;0;0;0;0;0;0;0
7.2;11;11784;1.4766;119;1500;0;0;0;0;0;0;0
7.3;11;11784;1.4766;83;1500;0;0;0;0;0;0;0
7.4;11;11784;1.4766;59;1500;0;0;0;0;0;0;0
7.5;11;11784;1.4766;41;1500;0;0;0;0;0;0;0
7.6;11;11784;1.4766;24;1500;0;0;0;0;0;0;0
7.7;11;11784;1.4766;14;1500;0;0;0;0;0;0;0
7.8;11;11784;1.4766;8;1500;0;0;0;0;0;0;0
7.9;11;11784;1.4766;5;1500;0;0;0;0;0;0;0
8;11;11784;1.4766;3;1500;0;0;0;0;0;0;0
8.1;11;11784;1.4766;1;1500;0;0;0;0;0;0;0
8.2;11;11784;1.4766;1;1500;0;0;0;0;0;0;0
8.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
8.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
8.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
8.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
8.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
8.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
8.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
9.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
9.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
9.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
9.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
9.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
9.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
9.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
9.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
9.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
10;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
10.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
10.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
10.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
10.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
10.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
10.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
10.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
10.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
10.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
11;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
11.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
11.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
11.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
11.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
11.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
11.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
11.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
11.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
11.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
12;11;11784;1.4766;0;1500;0;0;0;0;0;0;0
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
3.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
3.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
3.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
3.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
3.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
3.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
3.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
3.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
3.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
4.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
4.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
4.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
4.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
4.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
4.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
4.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
4.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
4.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
5.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
5.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
5.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
5.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
5.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
5.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
5.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
5.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
5.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
6.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
6.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
6.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
6.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
6.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0
6.6;12;13576;1.6953;1498;1500;0;0;0;0;0;0;0
6.7;12;13576;1.6953;1495;1500;0;0;0;0;0;0;0
6.8;12;13576;1.6953;1493;1500;0;0;0;0;0;0;0
6.9;12;13576;1.6953;1491;1500;0;0;0;0;0;0;0
7;12;13576;1.6953;1488;1500;0;0;0;0;0;0;0
7.1;12;13576;1.6953;1357;1500;0;0;0;0;0;0;0
7.2;12;13576;1.6953;1238;1500;0;0;0;0;0;0;0
7.3;12;13576;1.6953;1129;1500;0;0;0;0;0;0;0
7.4;12;13576;1.6953;1029;1500;0;0;0;0;0;0;0
7.5;12;13576;1.6953;939;1500;0;0;0;0;0;0;0
7.6;12;13576;1.6953;632;1500;0;0;0;0;0;0;0
7.7;12;13576;1.6953;425;1500;0;0;0;0;0;0;0
7.8;12;13576;1.6953;286;1500;0;0;0;0;0;0;0
7.9;12;13576;1.6953;193;1500;0;0;0;0;0;0;0
8;12;13576;1.6953;130;1500;0;0;0;0;0;0;0
8.1;12;13576;1.6953;91;1500;0;0;0;0;0;0;0
8.2;12;13576;1.6953;64;1500;0;0;0;0;0;0;0
8.3;12;13576;1.6953;45;1500;0;0;0;0;0;0;0
8.4;12;13576;1.6953;32;1500;0;0;0;0;0;0;0
8.5;12;13576;1.6953;23;1500;0;0;0;0;0;0;0
8.6;12;13576;1.6953;12;1500;0;0;0;0;0;0;0
8.7;12;13576;1.6953;6;1500;0;0;0;0;0;0;0
8.8;12;13576;1.6953;3;1500;0;0;0;0;0;0;0
8.9;12;13576;1.6953;2;1500;0;0;0;0;0;0;0
9;12;13576;1.6953;1;1500;0;0;0;0;0;0;0
9.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
9.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
9.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
9.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
9.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
9.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
9.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
9.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
9.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
10;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
10.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
10.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
10.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
10.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
10.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
10.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
10.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
10.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
10.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
11;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
11.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
11.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
11.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
11.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
11.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
11.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
11.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
11.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
11.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
12;12;13576;1.6953;0;1500;0;0;0;0;0;0;0
SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err
-4;1;2472;0.3066;1500;1500;0;0;0;0;0;0;0
-3.9;1;2472;0.3066;1497;1500;0;0;0;0;0;0;0
-3.8;1;2472;0.3066;1494;1500;0;0;0;0;0;0;0
-3.7;1;2472;0.3066;1490;1500;0;0;0;0;0;0;0
-3.6;1;2472;0.3066;1487;1500;0;0;0;0;0;0;0
-3.5;1;2472;0.3066;1484;1500;0;0;0;0;0;0;0
-3.4;1;2472;0.3066;1386;1500;0;0;0;0;0;0;0
-3.3;1;2472;0.3066;1295;1500;0;0;0;0;0;0;0
-3.2;1;2472;0.3066;1209;1500;0;0;0;0;0;0;0
-3.1;1;2472;0.3066;1130;1500;0;0;0;0;0;0;0
-3;1;2472;0.3066;1055;1500;0;0;0;0;0;0;0
-2.9;1;2472;0.3066;863;1500;0;0;0;0;0;0;0
-2.8;1;2472;0.3066;706;1500;0;0;0;0;0;0;0
-2.7;1;2472;0.3066;577;1500;0;0;0;0;0;0;0
-2.6;1;2472;0.3066;472;1500;0;0;0;0;0;0;0
-2.5;1;2472;0.3066;386;1500;0;0;0;0;0;0;0
-2.4;1;2472;0.3066;215;1500;0;0;0;0;0;0;0
-2.3;1;2472;0.3066;120;1500;0;0;0;0;0;0;0
-2.2;1;2472;0.3066;67;1500;0;0;0;0;0;0;0
-2.1;1;2472;0.3066;37;1500;0;0;0;0;0;0;0
-2;1;2472;0.3066;21;1500;0;0;0;0;0;0;0
-1.9;1;2472;0.3066;9;1500;0;0;0;0;0;0;0
-1.8;1;2472;0.3066;4;1500;0;0;0;0;0;0;0
-1.7;1;2472;0.3066;2;1500;0;0;0;0;0;0;0
-1.6;1;2472;0.3066;1;1500;0;0;0;0;0;0;0
-1.5;1;2472;0.3066;0;1500;0;0;0;0;0;0;0
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment