[0-9\-]+) *bytes', mySSH.getBefore())
+ allImagesSize = {}
if result is not None:
imageSize = float(result.group('size')) / 1000000
logging.debug('\u001B[1m proxy size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
- self.allImagesSize['proxy'] = str(round(imageSize,1)) + ' Mbytes'
+ allImagesSize['proxy'] = str(round(imageSize,1)) + ' Mbytes'
else:
logging.debug('proxy size is unknown')
- self.allImagesSize['proxy'] = 'unknown'
+ allImagesSize['proxy'] = 'unknown'
# Cleaning any created tmp volume
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
@@ -557,7 +546,7 @@ class Containerize():
logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m')
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
- HTML.CreateHtmlNextTabHeaderTestRow(self.collectInfo, self.allImagesSize)
+ HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
def Copy_Image_to_Test_Server(self, HTML):
imageTag = 'develop'
@@ -652,7 +641,7 @@ class Containerize():
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
- self._createWorkspace(mySSH, lPassWord, lSourcePath)
+ CreateWorkspace(mySSH, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
mySSH.command('cp docker-compose.yml ci-docker-compose.yml', '\$', 5)
diff --git a/ci-scripts/cls_oai_html.py b/ci-scripts/cls_oai_html.py
index 13a1ab8691..536f2ff49e 100644
--- a/ci-scripts/cls_oai_html.py
+++ b/ci-scripts/cls_oai_html.py
@@ -453,13 +453,11 @@ class HTMLManagement():
self.htmlFile.write(' | ' + str(parameters['warnings']) + ' | \n')
elif (parameters['warnings'] == 0):
self.htmlFile.write(' ' + str(parameters['warnings']) + ' | \n')
- elif ((parameters['warnings'] > 0) and (parameters['warnings'] <= 20)):
- self.htmlFile.write(' ' + str(parameters['warnings']) + ' | \n')
else:
- self.htmlFile.write(' ' + str(parameters['warnings']) + ' | \n')
+ self.htmlFile.write(' ' + str(parameters['warnings']) + ' | \n')
if (parameters['errors'] == 0) and (parameters['warnings'] == 0):
self.htmlFile.write(' OK | \n')
- elif (parameters['errors'] == 0) and ((parameters['warnings'] > 0) and (parameters['warnings'] <= 20)):
+ elif (parameters['errors'] == 0):
self.htmlFile.write(' OK | \n')
else:
self.htmlFile.write(' NOT OK | \n')
diff --git a/ci-scripts/cls_physim1.py b/ci-scripts/cls_physim1.py
index 0464681b1d..4b7c01c64d 100644
--- a/ci-scripts/cls_physim1.py
+++ b/ci-scripts/cls_physim1.py
@@ -92,7 +92,7 @@ class PhySim:
full_ran_repo_name = self.ranRepository.replace('git/', 'git')
else:
full_ran_repo_name = self.ranRepository + '.git'
- mySSH.command('echo ' + lPassWord + ' | sudo rm -Rf ' + lSourcePath, '\$', 30)
+ mySSH.command('rm -Rf ' + lSourcePath, '\$', 30)
mySSH.command('mkdir -p ' + lSourcePath, '\$', 5)
mySSH.command('cd ' + lSourcePath, '\$', 5)
mySSH.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + full_ran_repo_name + ' .; else stdbuf -o0 git fetch --prune; fi', '\$', 600)
@@ -100,7 +100,7 @@ class PhySim:
mySSH.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
mySSH.command('git config user.name "OAI Jenkins"', '\$', 5)
- mySSH.command('echo ' + lPassWord + ' | sudo -S git clean -x -d -ff', '\$', 30)
+ mySSH.command('git clean -x -d -ff', '\$', 30)
mySSH.command('mkdir -p cmake_targets/log', '\$', 5)
# if the commit ID is provided use it to point to it
if self.ranCommitID != '':
@@ -115,30 +115,6 @@ class PhySim:
mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
else:
imageTag = "develop"
- # Check if image is exist on the Red Hat server, before pushing it to OC cluster
- mySSH.command('sudo podman image inspect --format="Size = {{.Size}} bytes" oai-physim:' + imageTag, '\$', 60)
- if mySSH.getBefore().count('no such image') != 0:
- logging.error('\u001B[1m No such image oai-physim\u001B[0m')
- mySSH.close()
- HTML.CreateHtmlTestRow('N/A', 'KO', CONST.PHYSIM_IMAGE_ABSENT)
- RAN.prematureExit = True
- return
- else:
- result = re.search('Size *= *(?P[0-9\-]+) *bytes', mySSH.getBefore())
- if result is not None:
- imageSize = float(result.group('size'))
- imageSize = imageSize / 1000
- if imageSize < 1000:
- logging.debug('\u001B[1m oai-physim size is ' + ('%.0f' % imageSize) + ' kbytes\u001B[0m')
- else:
- imageSize = imageSize / 1000
- if imageSize < 1000:
- logging.debug('\u001B[1m oai-physim size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
- else:
- imageSize = imageSize / 1000
- logging.debug('\u001B[1m oai-physim is ' + ('%.3f' % imageSize) + ' Gbytes\u001B[0m')
- else:
- logging.debug('oai-physim size is unknown')
# logging to OC Cluster and then switch to corresponding project
mySSH.command(f'oc login -u {ocUserName} -p {ocPassword} --server https://api.oai.cs.eurecom.fr:6443', '\$', 30)
@@ -161,46 +137,7 @@ class PhySim:
else:
logging.debug(f'\u001B[1m Now using project {ocProjectName}\u001B[0m')
- # Tag the image and push to the OC cluster
- mySSH.command('oc whoami -t | sudo podman login -u ' + ocUserName + ' --password-stdin https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/ --tls-verify=false', '\$', 30)
- if mySSH.getBefore().count('Login Succeeded!') == 0:
- logging.error('\u001B[1m Podman Login to OC Cluster Registry Failed\u001B[0m')
- mySSH.command('oc logout', '\$', 30)
- mySSH.close()
- HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
- RAN.prematureExit = True
- return
- else:
- logging.debug('\u001B[1m Podman Login to OC Cluster Registry Successfully\u001B[0m')
- time.sleep(2)
- mySSH.command('oc create -f openshift/oai-physim-image-stream.yml || true', '\$', 30)
- if mySSH.getBefore().count('(AlreadyExists):') == 0 and mySSH.getBefore().count('created') == 0:
- logging.error(f'\u001B[1m Image Stream "oai-physim" Creation Failed on OC Cluster {ocProjectName}\u001B[0m')
- mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
- mySSH.command('oc logout', '\$', 30)
- mySSH.close()
- HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL)
- RAN.prematureExit = True
- return
- else:
- logging.debug(f'\u001B[1m Image Stream "oai-physim" created on OC project {ocProjectName}\u001B[0m')
- time.sleep(2)
- mySSH.command(f'sudo podman tag oai-physim:{imageTag} default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30)
- time.sleep(2)
- mySSH.command(f'sudo podman push default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag} --tls-verify=false', '\$', 180)
- if mySSH.getBefore().count('Storing signatures') == 0:
- logging.error('\u001B[1m Image "oai-physim" push to OC Cluster Registry Failed\u001B[0m')
- mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
- mySSH.command('oc logout', '\$', 30)
- mySSH.close()
- HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL)
- RAN.prematureExit = True
- return
- else:
- logging.debug('\u001B[1m Image "oai-physim" push to OC Cluster Registry Successfully\u001B[0m')
-
# Using helm charts deployment
- time.sleep(5)
mySSH.command(f'grep -rl OAICICD_PROJECT ./charts/ | xargs sed -i -e "s#OAICICD_PROJECT#{ocProjectName}#"', '\$', 30)
mySSH.command(f'sed -i -e "s#TAG#{imageTag}#g" ./charts/physims/values.yaml', '\$', 6)
mySSH.command('helm install physim ./charts/physims/ 2>&1 | tee -a cmake_targets/log/physim_helm_summary.txt', '\$', 30)
@@ -213,9 +150,6 @@ class PhySim:
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True)
if re.search('No resources found', mySSH.getBefore()):
isFinished1 = True
- mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30)
- mySSH.command('oc delete is oai-physim', '\$', 30)
- mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
mySSH.command('oc logout', '\$', 30)
mySSH.close()
self.AnalyzeLogFile_phySim(HTML)
@@ -244,9 +178,6 @@ class PhySim:
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True)
if re.search('No resources found', mySSH.getBefore()):
isFinished1 = True
- mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6)
- mySSH.command('oc delete is oai-physim', '\$', 6)
- mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
mySSH.command('oc logout', '\$', 30)
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PHYSIM_DEPLOY_FAIL)
HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult)
@@ -304,10 +235,6 @@ class PhySim:
isFinished1 = True
if isFinished1 == True:
logging.debug('\u001B[1m UnDeployed PhySim Successfully on OC Cluster\u001B[0m')
- mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6)
- mySSH.command('oc delete is oai-physim', '\$', 6)
- logging.debug('\u001B[1m Deleted the Image and ImageStream\u001B[0m')
- mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
mySSH.command('oc logout', '\$', 6)
mySSH.close()
self.AnalyzeLogFile_phySim(HTML)
diff --git a/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf
index e92585b5fe..016f1e9b1f 100644
--- a/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf
@@ -11,22 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 40960;
- plmn_list = ({
- mcc = 208;
- mnc = 95;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 95; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf
index 7b6e045ffc..50dba38a51 100644
--- a/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf
@@ -11,22 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/ci-scripts/conf_files/gNB_SA_CU.conf b/ci-scripts/conf_files/gNB_SA_CU.conf
index f6d3e8575a..27b079d026 100644
--- a/ci-scripts/conf_files/gNB_SA_CU.conf
+++ b/ci-scripts/conf_files/gNB_SA_CU.conf
@@ -15,22 +15,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/ci-scripts/conf_files/gNB_SA_DU.conf b/ci-scripts/conf_files/gNB_SA_DU.conf
index 0c1555e92a..5a96090b36 100644
--- a/ci-scripts/conf_files/gNB_SA_DU.conf
+++ b/ci-scripts/conf_files/gNB_SA_DU.conf
@@ -14,22 +14,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf b/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf
index 59358b9f7c..f0dbbcaf06 100644
--- a/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf
+++ b/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf
@@ -15,21 +15,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L
diff --git a/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf b/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf
index 822e42cf1f..ff5e804f19 100644
--- a/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf
+++ b/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf
@@ -16,21 +16,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L
diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf
index 6971c5d818..5f2e43fbf1 100644
--- a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf
+++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf
@@ -15,25 +15,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 97;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
- });
+ plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0x010203 }) });
nr_cellid = 12345678L
diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf
index 0dd264a6c5..ffe5234a21 100644
--- a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf
@@ -15,21 +15,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 97;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
- });
+ plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L
diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.ddsuu.2x2.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.ddsuu.2x2.usrpn310.conf
index 1d7f9c499e..2ca4471c61 100644
--- a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.ddsuu.2x2.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.ddsuu.2x2.usrpn310.conf
@@ -15,21 +15,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 97;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
- });
+ plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0x010203 }) });
nr_cellid = 12345678L
diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
index c3f382c79a..3b2226eb6b 100644
--- a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
@@ -15,21 +15,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 97;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
- });
+ plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L
diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf
index 1086badc0b..256dfd5dc8 100644
--- a/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf
@@ -15,21 +15,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 97;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
- });
+ plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0x010203 }) });
nr_cellid = 12345678L
diff --git a/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf
index ee31a01f1a..787701fc9c 100644
--- a/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf
+++ b/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf
@@ -11,22 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 95;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- },
- {
- sst = 2;
- sd = 2; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 95; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.usrpb210.conf b/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.usrpb210.conf
index 2a6053ab46..3ec265f12c 100644
--- a/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.usrpb210.conf
@@ -11,18 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 222;
- mnc = 01;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- #sd = 0x1; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 222; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 12345678L;
diff --git a/ci-scripts/conf_files/gnb.sa.band78.fr1.24PRB.usrpb210.conf b/ci-scripts/conf_files/gnb.sa.band78.fr1.24PRB.usrpb210.conf
index ad1471339a..1defbf91ed 100644
--- a/ci-scripts/conf_files/gnb.sa.band78.fr1.24PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/gnb.sa.band78.fr1.24PRB.usrpb210.conf
@@ -11,22 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/ci-scripts/conf_files/nr-ue-sim.conf b/ci-scripts/conf_files/nr-ue-sim.conf
index 05ac825db4..884430bf39 100644
--- a/ci-scripts/conf_files/nr-ue-sim.conf
+++ b/ci-scripts/conf_files/nr-ue-sim.conf
@@ -4,5 +4,4 @@ uicc0 = {
opc= "@OPC@";
dnn= "@DNN@";
nssai_sst=@NSSAI_SST@;
- nssai_sd=@NSSAI_SD@;
}
diff --git a/ci-scripts/constants.py b/ci-scripts/constants.py
index a7ce01615e..17a4ea33fa 100644
--- a/ci-scripts/constants.py
+++ b/ci-scripts/constants.py
@@ -79,3 +79,7 @@ X2_HO_REQ_STATE__TARGET_RECEIVES_REQ = 1
X2_HO_REQ_STATE__TARGET_RRC_RECFG_COMPLETE = 2
X2_HO_REQ_STATE__TARGET_SENDS_SWITCH_REQ = 3
X2_HO_REQ_STATE__SOURCE_RECEIVES_REQ_ACK = 10
+
+# placeholder for a "don't care" password to gradually transition to
+# passwordless CI
+CI_NO_PASSWORD = "CIPASSWORDDONTCARE"
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 9349a3decc..b5d0ef2d97 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -45,6 +45,7 @@ import cls_containerize #class Containerize for all container-based oper
import cls_static_code_analysis #class for static code analysis
import cls_ci_ueinfra #class defining the multi Ue infrastrucure
import cls_physim1 #class PhySim for physical simulators deploy and run
+import cls_cluster # class for building/deploying on cluster
import sshconnection
import epc
@@ -102,20 +103,17 @@ def AssignParams(params_dict):
def GetParametersFromXML(action):
- if action == 'Build_eNB' or action == 'Build_Image' or action == 'Build_Proxy':
+ if action == 'Build_eNB' or action == 'Build_Image' or action == 'Build_Proxy' or action == "Build_Cluster_Image":
RAN.Build_eNB_args=test.findtext('Build_eNB_args')
CONTAINERS.imageKind=test.findtext('kind')
forced_workspace_cleanup = test.findtext('forced_workspace_cleanup')
- if (forced_workspace_cleanup is None):
- RAN.Build_eNB_forced_workspace_cleanup=False
- CONTAINERS.forcedWorkspaceCleanup=False
- else:
- if re.match('true', forced_workspace_cleanup, re.IGNORECASE):
- RAN.Build_eNB_forced_workspace_cleanup=True
- CONTAINERS.forcedWorkspaceCleanup=True
- else:
- RAN.Build_eNB_forced_workspace_cleanup=True
- CONTAINERS.forcedWorkspaceCleanup=False
+ RAN.Build_eNB_forced_workspace_cleanup=False
+ CONTAINERS.forcedWorkspaceCleanup=False
+ CLUSTER.forcedWorkspaceCleanup = False
+ if forced_workspace_cleanup is not None and re.match('true', forced_workspace_cleanup, re.IGNORECASE):
+ RAN.Build_eNB_forced_workspace_cleanup = True
+ CONTAINERS.forcedWorkspaceCleanup = True
+ CLUSTER.forcedWorkspaceCleanup = True
eNB_instance=test.findtext('eNB_instance')
if (eNB_instance is None):
RAN.eNB_instance=0
@@ -534,6 +532,7 @@ HTML = cls_oai_html.HTMLManagement()
CONTAINERS = cls_containerize.Containerize()
SCA = cls_static_code_analysis.StaticCodeAnalysis()
PHYSIM = cls_physim1.PhySim()
+CLUSTER = cls_cluster.Cluster()
ldpc=cls_physim.PhySim() #create an instance for LDPC test using GPU or CPU build
@@ -543,7 +542,7 @@ ldpc=cls_physim.PhySim() #create an instance for LDPC test using GPU or CPU b
#-----------------------------------------------------------
import args_parse
-py_param_file_present, py_params, mode = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM)
+py_param_file_present, py_params, mode = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER)
@@ -931,6 +930,9 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
HTML=ldpc.Run_NRulsimTest(HTML,CONST,id)
if ldpc.exitStatus==1:
RAN.prematureExit = True
+ elif action == 'Build_Cluster_Image':
+ if not CLUSTER.BuildClusterImage(HTML):
+ RAN.prematureExit = True
elif action == 'Build_Image':
CONTAINERS.BuildImage(HTML)
elif action == 'Build_Proxy':
diff --git a/ci-scripts/xml_class_list.yml b/ci-scripts/xml_class_list.yml
index f9894d501f..6497fd3020 100755
--- a/ci-scripts/xml_class_list.yml
+++ b/ci-scripts/xml_class_list.yml
@@ -1,4 +1,5 @@
- Build_Proxy
+ - Build_Cluster_Image
- Build_PhySim
- Run_LDPCTest
- Run_NRulsimTest
diff --git a/ci-scripts/xml_files/benetel_nsa_quectel.xml b/ci-scripts/xml_files/benetel_nsa_quectel.xml
index 8c284b6673..5da8322f22 100644
--- a/ci-scripts/xml_files/benetel_nsa_quectel.xml
+++ b/ci-scripts/xml_files/benetel_nsa_quectel.xml
@@ -24,7 +24,7 @@
TEST-NSA-FR1-TM1
NSA Ping DL UL with QUECTEL
tasks
- 3
+ 1
030000
040000
diff --git a/ci-scripts/xml_files/benetel_nsa_quectel_longrun.xml b/ci-scripts/xml_files/benetel_nsa_quectel_longrun.xml
index 2e4494c819..3173e6315a 100644
--- a/ci-scripts/xml_files/benetel_nsa_quectel_longrun.xml
+++ b/ci-scripts/xml_files/benetel_nsa_quectel_longrun.xml
@@ -24,7 +24,7 @@
TEST-NSA-FR1-TM1
NSA Ping DL UL with QUECTEL
tasks
- 3
+ 1
030000
040000
diff --git a/ci-scripts/xml_files/cluster_image_build.xml b/ci-scripts/xml_files/cluster_image_build.xml
new file mode 100644
index 0000000000..057d49da86
--- /dev/null
+++ b/ci-scripts/xml_files/cluster_image_build.xml
@@ -0,0 +1,35 @@
+
+
+
+ build-tab
+ Build Images on Cluster
+ wrench
+ 000001
+
+
+
+ Build_Cluster_Image
+ Build Images on OpenShift Cluster
+
+
+
diff --git a/ci-scripts/xml_files/container_4g_l2sim_tdd.xml b/ci-scripts/xml_files/container_4g_l2sim_tdd.xml
index 5298d01ef3..3ac32e1989 100644
--- a/ci-scripts/xml_files/container_4g_l2sim_tdd.xml
+++ b/ci-scripts/xml_files/container_4g_l2sim_tdd.xml
@@ -24,7 +24,7 @@
l2sim-4glte-tdd
Testing 4G LTE L2 sim - FDD eNB
wrench
- 2
+ 1
100001
000000
diff --git a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml
index aa70db1fed..7a29e50f39 100644
--- a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml
+++ b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml
@@ -24,7 +24,7 @@
rfsim-4glte-tdd05mhz
Monolithic eNB - TDD 05MHz
wrench
- 2
+ 1
100011
000011
diff --git a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml
index 9564b24b35..578d5f221f 100644
--- a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml
@@ -24,7 +24,7 @@
rfsim-5gnr-fdd
Monolithic FDD gNB with SDAP
wrench
- 4
+ 1
100011
000010
diff --git a/ci-scripts/xml_files/container_5g_l2sim_tdd.xml b/ci-scripts/xml_files/container_5g_l2sim_tdd.xml
index be6b789b6b..cc3c1ae391 100644
--- a/ci-scripts/xml_files/container_5g_l2sim_tdd.xml
+++ b/ci-scripts/xml_files/container_5g_l2sim_tdd.xml
@@ -24,7 +24,7 @@
l2sim-5gnr-tdd
Testing 5G NR L2 sim - TDD gNB
wrench
- 2
+ 1
100001
000000
diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml
index 653e1e6513..5ad400ecc1 100644
--- a/ci-scripts/xml_files/container_5g_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_rfsim.xml
@@ -24,7 +24,7 @@
rfsim-5gnr-tdd
Monolithic TDD gNB
wrench
- 4
+ 1
100001
000000
diff --git a/ci-scripts/xml_files/enb_ocp_usrp210_band7_test_05mhz_tm1.xml b/ci-scripts/xml_files/enb_ocp_usrp210_band7_test_05mhz_tm1.xml
index d330d826bf..eebe62b3b5 100644
--- a/ci-scripts/xml_files/enb_ocp_usrp210_band7_test_05mhz_tm1.xml
+++ b/ci-scripts/xml_files/enb_ocp_usrp210_band7_test_05mhz_tm1.xml
@@ -24,7 +24,7 @@
test-05-tm1
Test-05MHz-TM1
tasks
- 4
+ 1
030201
040101
diff --git a/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1.xml b/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1.xml
index 48ce2f298f..723956fe60 100644
--- a/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1.xml
+++ b/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1.xml
@@ -24,7 +24,7 @@
test-05-tm1-nos1-tunnel
Test-05MHz-TM1-noS1-tunnel
tasks
- 4
+ 1
030201 090109
030101 000001 090101 000002 040501 040502 000001 040601 040602 040641 040642 000001 090109 030201
diff --git a/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_fembms_no_s1.xml b/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_fembms_no_s1.xml
index fb66ce0c66..cf090379df 100644
--- a/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_fembms_no_s1.xml
+++ b/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_fembms_no_s1.xml
@@ -24,7 +24,7 @@
test-05-tm1-fembms-nos1-tunnel
Test-05MHz-FEMBMS-TM1-noS1-tunnel
tasks
- 2
+ 1
030201 090109
030104 000001 090104 000002 040605 000001 090109 030201
diff --git a/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_mbms_no_s1.xml b/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_mbms_no_s1.xml
index 234f6639ce..c778b43eb5 100644
--- a/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_mbms_no_s1.xml
+++ b/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_mbms_no_s1.xml
@@ -24,7 +24,7 @@
test-05-tm1-mbms-nos1-tunnel
Test-05MHz-MBMS-TM1-noS1-tunnel
tasks
- 2
+ 1
030201 090109
030103 000001 090103 000002 040605 000001 090109 030201
diff --git a/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_s1.xml b/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_s1.xml
index 791d32eec0..07e3a4135a 100644
--- a/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_s1.xml
+++ b/ci-scripts/xml_files/enb_ue_usrp210_band7_test_05mhz_tm1_s1.xml
@@ -24,7 +24,7 @@
test-05-tm1-tunnel
Test-05MHz-TM1-tunnel
tasks
- 2
+ 1
030201 090109
030102 000001 090102 000002 040503 000001 040603 040604 040643 040644 000001 090109 030201
diff --git a/ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml b/ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
index 2e7da714b0..9295306f23 100644
--- a/ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
+++ b/ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
@@ -25,7 +25,7 @@
test-05-tm2
Test-05MHz-TM2
tasks
- 2
+ 1
True
040608
diff --git a/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml b/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
index ef9fee0dca..1b32b873ca 100644
--- a/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
+++ b/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
@@ -24,7 +24,7 @@
test-20-tm1
Test-20MHz-TM1
tasks
- 4
+ 1
True
040623
diff --git a/ci-scripts/xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xml b/ci-scripts/xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xml
index aedd980c34..90d54a2c82 100644
--- a/ci-scripts/xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xml
+++ b/ci-scripts/xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xml
@@ -24,7 +24,7 @@
test-05-tm1-rrc-no-flex
Test-05MHz-TM1-RRC-Inactivity
tasks
- 2
+ 1
030201
040101
diff --git a/ci-scripts/xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_w_flexran.xml b/ci-scripts/xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_w_flexran.xml
index b488637483..1667e94f71 100644
--- a/ci-scripts/xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_w_flexran.xml
+++ b/ci-scripts/xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_w_flexran.xml
@@ -24,7 +24,7 @@
test-05-tm1-rrc-w-flex
Test-05MHz-TM1-RRC-Inactivity-FlexRan
tasks
- 2
+ 1
030201
040101
diff --git a/ci-scripts/xml_files/enb_usrp210_band7_test_10mhz_tm1_cdrx.xml b/ci-scripts/xml_files/enb_usrp210_band7_test_10mhz_tm1_cdrx.xml
index 82e0a32f6a..28140305db 100644
--- a/ci-scripts/xml_files/enb_usrp210_band7_test_10mhz_tm1_cdrx.xml
+++ b/ci-scripts/xml_files/enb_usrp210_band7_test_10mhz_tm1_cdrx.xml
@@ -24,7 +24,7 @@
test-10-cdrx-tm1
Test-10MHz-CDRX-TM1
tasks
- 4
+ 1
030201
040101
diff --git a/ci-scripts/xml_files/gnb_nr_ue_usrp_run.xml b/ci-scripts/xml_files/gnb_nr_ue_usrp_run.xml
index d025b95ce5..dd2b15a4f2 100644
--- a/ci-scripts/xml_files/gnb_nr_ue_usrp_run.xml
+++ b/ci-scripts/xml_files/gnb_nr_ue_usrp_run.xml
@@ -24,7 +24,7 @@
run-oai-gnb-nr-ue
Run-gNB-and-NR-UE
tasks
- 2
+ 1
090101 000001 090102 000002 090108 090109
diff --git a/ci-scripts/xml_files/gnb_nr_ue_usrp_run_multi_thread.xml b/ci-scripts/xml_files/gnb_nr_ue_usrp_run_multi_thread.xml
index ffd41e9e86..7c9d689e44 100644
--- a/ci-scripts/xml_files/gnb_nr_ue_usrp_run_multi_thread.xml
+++ b/ci-scripts/xml_files/gnb_nr_ue_usrp_run_multi_thread.xml
@@ -24,7 +24,7 @@
run-oai-gnb-nr-ue-tx-write-thread
Run-gNB-and-NR-UE-TX-Write-Thread
tasks
- 2
+ 1
090103 000001 090104 000002 090108 090109
diff --git a/ci-scripts/xml_files/gnb_usrp_build.xml b/ci-scripts/xml_files/gnb_usrp_build.xml
index 81c7d4e24e..f8ec797646 100644
--- a/ci-scripts/xml_files/gnb_usrp_build.xml
+++ b/ci-scripts/xml_files/gnb_usrp_build.xml
@@ -24,7 +24,7 @@
gnb-build-tab
Build-gNB
wrench
- 4
+ 1
010101
diff --git a/ci-scripts/xml_files/if4p5_usrp210_band40_test_10mhz.xml b/ci-scripts/xml_files/if4p5_usrp210_band40_test_10mhz.xml
index f755a7ec96..b7c2622283 100644
--- a/ci-scripts/xml_files/if4p5_usrp210_band40_test_10mhz.xml
+++ b/ci-scripts/xml_files/if4p5_usrp210_band40_test_10mhz.xml
@@ -24,7 +24,7 @@
test-10
Test-10MHz
tasks
- 2
+ 1
True
040612
diff --git a/ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml b/ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml
index 4e84c47faf..287f75c59f 100644
--- a/ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml
+++ b/ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml
@@ -24,7 +24,7 @@
test-20
Test-20MHz
tasks
- 2
+ 1
030201
040101
diff --git a/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1.xml b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1.xml
index c2fb2e8e2e..cd9ed8809e 100644
--- a/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1.xml
+++ b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1.xml
@@ -24,7 +24,7 @@
test-05-tm1-oai-ue
Test-05MHz-TM1-OAI-UE
tasks
- 4
+ 1
030201 090109
030102 000001 090102 000002 040503 000002 040603 040604 040643 040644 000002 090109 000001 030201
diff --git a/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1_nos1.xml b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1_nos1.xml
index d5bdc5a42d..16cc4b9a41 100644
--- a/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1_nos1.xml
+++ b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1_nos1.xml
@@ -24,7 +24,7 @@
test-05-tm1-nos1-tunnel
Test-05MHz-TM1-noS1-tunnel
tasks
- 4
+ 1
030201 090109
030101 000001 090101 000002 040501 040502 000001 040601 040602 040641 040642 000001 090109 030201
diff --git a/ci-scripts/xml_files/inria/enb_usrp210_band7_x2_ho_test_05Mhz_tm1.xml b/ci-scripts/xml_files/inria/enb_usrp210_band7_x2_ho_test_05Mhz_tm1.xml
index b4b20c1239..36c4e2c1a8 100644
--- a/ci-scripts/xml_files/inria/enb_usrp210_band7_x2_ho_test_05Mhz_tm1.xml
+++ b/ci-scripts/xml_files/inria/enb_usrp210_band7_x2_ho_test_05Mhz_tm1.xml
@@ -24,7 +24,7 @@
test-x2-ho-05-tm1
Test-X2-Handover-05MHz-TM1
tasks
- 2
+ 1
040101 030201 030202
050102
diff --git a/ci-scripts/xml_files/multi_rru_band38_test_10mhz_tm1.xml b/ci-scripts/xml_files/multi_rru_band38_test_10mhz_tm1.xml
index 3875a3df03..fdde60bd4c 100644
--- a/ci-scripts/xml_files/multi_rru_band38_test_10mhz_tm1.xml
+++ b/ci-scripts/xml_files/multi_rru_band38_test_10mhz_tm1.xml
@@ -24,7 +24,7 @@
test-multi-rru-10
Test-Multi-RRU-10MHz
tasks
- 2
+ 1
030211 030212 030213
030111 030112 030113
diff --git a/ci-scripts/xml_files/nr_ue_usrp_build.xml b/ci-scripts/xml_files/nr_ue_usrp_build.xml
index bc04efdb4b..dd3a10f2f5 100644
--- a/ci-scripts/xml_files/nr_ue_usrp_build.xml
+++ b/ci-scripts/xml_files/nr_ue_usrp_build.xml
@@ -24,7 +24,7 @@
nr-ue-build-tab
Build-NR-UE
wrench
- 2
+ 1
010102
diff --git a/ci-scripts/xml_files/ue_band20_test_10mhz_orange.xml b/ci-scripts/xml_files/ue_band20_test_10mhz_orange.xml
index 49ccfbca14..eba64191f0 100644
--- a/ci-scripts/xml_files/ue_band20_test_10mhz_orange.xml
+++ b/ci-scripts/xml_files/ue_band20_test_10mhz_orange.xml
@@ -24,7 +24,7 @@
test-10mhz-orange
Test-10Mhz-Orange
tasks
- 4
+ 1
090109
090110 000001 090109
diff --git a/ci-scripts/xml_files/ue_band20_test_10mhz_sfr.xml b/ci-scripts/xml_files/ue_band20_test_10mhz_sfr.xml
index fdc70a9bdd..359fca1a11 100644
--- a/ci-scripts/xml_files/ue_band20_test_10mhz_sfr.xml
+++ b/ci-scripts/xml_files/ue_band20_test_10mhz_sfr.xml
@@ -24,7 +24,7 @@
test-10mHz-sfr
Test-10MHz-SFR
tasks
- 4
+ 1
090109
090111 000001 090109
diff --git a/ci-scripts/xml_files/x2ho_enb_usrp210_band13_test_05mhz_tm1.xml b/ci-scripts/xml_files/x2ho_enb_usrp210_band13_test_05mhz_tm1.xml
index 14872c9f8f..e7a2c42cd6 100644
--- a/ci-scripts/xml_files/x2ho_enb_usrp210_band13_test_05mhz_tm1.xml
+++ b/ci-scripts/xml_files/x2ho_enb_usrp210_band13_test_05mhz_tm1.xml
@@ -25,7 +25,7 @@
test-x2-ho-05-tm1
Test-X2-HO-FDD-05MHz-TM1
tasks
- 2
+ 1
True
030201 030202
diff --git a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
index d52b228ec6..952732f22d 100644
--- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
@@ -2,7 +2,7 @@ version: '3.8'
services:
oai-nrf:
container_name: "rfsim5g-oai-nrf"
- image: oai-nrf:latest
+ image: oai-nrf:august-dev
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80
@@ -42,7 +42,7 @@ services:
ipv4_address: 192.168.71.131
oai-amf:
container_name: "rfsim5g-oai-amf"
- image: oai-amf:latest
+ image: oai-amf:august-dev
environment:
- TZ=Europe/paris
- INSTANCE=0
@@ -63,9 +63,9 @@ services:
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
- SST_0=1
- - SD_0=1
+ - SD_0=0xffffff
- SST_1=1
- - SD_1=12
+ - SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0
- SMF_INSTANCE_ID_0=1
@@ -110,7 +110,7 @@ services:
ipv4_address: 192.168.71.132
oai-smf:
container_name: "rfsim5g-oai-smf"
- image: oai-smf:latest
+ image: oai-smf:august-dev
environment:
- TZ=Europe/Paris
- INSTANCE=0
@@ -140,6 +140,12 @@ services:
- DISCOVER_UPF=yes
- USE_FQDN_DNS=yes
- DNN_NI0=oai
+ - TYPE0=IPv4
+ - DNN_RANGE0=12.1.1.2 - 12.1.1.127
+ - NSSAI_SST0=1
+ - NSSAI_SD0=0xFFFFFF
+ - SESSION_AMBR_UL0=200Mbps
+ - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4
depends_on:
- oai-nrf
@@ -156,7 +162,7 @@ services:
ipv4_address: 192.168.71.133
oai-spgwu:
container_name: "rfsim5g-oai-spgwu"
- image: oai-spgwu-tiny:latest
+ image: oai-spgwu-tiny:august-dev
environment:
- TZ=Europe/Paris
- PID_DIRECTORY=/var/run
@@ -183,7 +189,7 @@ services:
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf
- NSSAI_SST_0=1
- - NSSAI_SD_0=1
+ - NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on:
- oai-nrf
@@ -237,8 +243,6 @@ services:
MNC: '99'
MNC_LENGTH: 2
NSSAI_SST: 1
- NSSAI_SD0: 1
- NSSAI_SD1: 112233
AMF_IP_ADDRESS: 192.168.71.132
GNB_NGA_IF_NAME: eth0
GNB_NGA_IP_ADDRESS: 192.168.71.140
@@ -273,8 +277,6 @@ services:
MNC: '99'
MNC_LENGTH: 2
NSSAI_SST: 1
- NSSAI_SD0: 1
- NSSAI_SD1: 112233
AMF_IP_ADDRESS: 192.168.71.132
GNB_NGA_IF_NAME: eth0
GNB_NGA_IP_ADDRESS: 192.168.71.142
@@ -307,7 +309,6 @@ services:
OPC: 'C42449363BBAD02B66D16BC975D77CC1'
DNN: oai
NSSAI_SST: 1
- NSSAI_SD: 1
USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 -C 3619200000 --nokrnmod --log_config.global_log_options level,nocolor,time
depends_on:
- oai-du
diff --git a/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml
index 7758c39592..b9db6fe7d5 100644
--- a/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml
@@ -2,7 +2,7 @@ version: '3.8'
services:
oai-nrf:
container_name: "rfsim5g-oai-nrf"
- image: oai-nrf:latest
+ image: oai-nrf:august-dev
environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80
@@ -42,7 +42,7 @@ services:
ipv4_address: 192.168.71.131
oai-amf:
container_name: "rfsim5g-oai-amf"
- image: oai-amf:latest
+ image: oai-amf:august-dev
environment:
- TZ=Europe/paris
- INSTANCE=0
@@ -63,9 +63,9 @@ services:
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
- SST_0=1
- - SD_0=1
+ - SD_0=0xffffff
- SST_1=1
- - SD_1=12
+ - SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0
- SMF_INSTANCE_ID_0=1
@@ -110,7 +110,7 @@ services:
ipv4_address: 192.168.71.132
oai-smf:
container_name: "rfsim5g-oai-smf"
- image: oai-smf:latest
+ image: oai-smf:august-dev
environment:
- TZ=Europe/Paris
- INSTANCE=0
@@ -140,6 +140,12 @@ services:
- DISCOVER_UPF=yes
- USE_FQDN_DNS=yes
- DNN_NI0=oai
+ - TYPE0=IPv4
+ - DNN_RANGE0=12.1.1.2 - 12.1.1.127
+ - NSSAI_SST0=1
+ - NSSAI_SD0=0xFFFFFF
+ - SESSION_AMBR_UL0=200Mbps
+ - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4
depends_on:
- oai-nrf
@@ -156,7 +162,7 @@ services:
ipv4_address: 192.168.71.133
oai-spgwu:
container_name: "rfsim5g-oai-spgwu"
- image: oai-spgwu-tiny:latest
+ image: oai-spgwu-tiny:august-dev
environment:
- TZ=Europe/Paris
- PID_DIRECTORY=/var/run
@@ -183,7 +189,7 @@ services:
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf
- NSSAI_SST_0=1
- - NSSAI_SD_0=1
+ - NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on:
- oai-nrf
@@ -237,8 +243,6 @@ services:
MNC: '99'
MNC_LENGTH: 2
NSSAI_SST: 1
- NSSAI_SD0: 1
- NSSAI_SD1: 112233
AMF_IP_ADDRESS: 192.168.71.132
GNB_NGA_IF_NAME: eth0
GNB_NGA_IP_ADDRESS: 192.168.71.140
@@ -266,7 +270,6 @@ services:
OPC: 'C42449363BBAD02B66D16BC975D77CC1'
DNN: oai
NSSAI_SST: 1
- NSSAI_SD: 1
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --band 66 -C 2169080000 --CO -400000000 -s 396 --nokrnmod --log_config.global_log_options level,nocolor,time
depends_on:
- oai-gnb
diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml b/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml
index 7edcad25a4..9ece49da74 100644
--- a/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml
@@ -63,9 +63,9 @@ services:
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
- SST_0=1
- - SD_0=1
+ - SD_0=0xffffff
- SST_1=1
- - SD_1=12
+ - SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0
- SMF_INSTANCE_ID_0=1
@@ -140,6 +140,12 @@ services:
- DISCOVER_UPF=yes
- USE_FQDN_DNS=yes
- DNN_NI0=oai
+ - TYPE0=IPv4
+ - DNN_RANGE0=12.1.1.2 - 12.1.1.127
+ - NSSAI_SST0=1
+ - NSSAI_SD0=0xFFFFFF
+ - SESSION_AMBR_UL0=200Mbps
+ - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4
depends_on:
- oai-nrf
@@ -183,7 +189,7 @@ services:
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf
- NSSAI_SST_0=1
- - NSSAI_SD_0=1
+ - NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on:
- oai-nrf
@@ -237,8 +243,6 @@ services:
MNC: '99'
MNC_LENGTH: 2
NSSAI_SST: 1
- NSSAI_SD0: 1
- NSSAI_SD1: 112233
AMF_IP_ADDRESS: 192.168.71.132
GNB_NGA_IF_NAME: eno1
GNB_NGA_IP_ADDRESS: 172.21.16.128
@@ -287,7 +291,7 @@ services:
OPC: 'C42449363BBAD02B66D16BC975D77CC1'
DNN: oai
NSSAI_SST: 1
- NSSAI_SD: 1
+ NSSAI_SD: 0xffffff
NR_UE_NFAPI_IF_NAME: eno1
GNB_IP_ADDRESS: 127.0.0.1
NR_UE_IP_ADDRESS: 127.0.0.1
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/README.md b/ci-scripts/yaml_files/5g_rfsimulator/README.md
index aa18571776..36169dca8b 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/README.md
+++ b/ci-scripts/yaml_files/5g_rfsimulator/README.md
@@ -274,7 +274,6 @@ Create entry for Second UE in docker-compose.yaml file as follows:
OPC: 'C42449363BBAD02B66D16BC975D77CC1'
DNN: oai
NSSAI_SST: 1
- NSSAI_SD: 1
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 -C 3619200000 --nokrnmod --log_config.global_log_options level,nocolor,time
depends_on:
- oai-gnb
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
index 88188da53e..183d184977 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
@@ -63,9 +63,9 @@ services:
- PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001
- SST_0=1
- - SD_0=1
+ - SD_0=0xffffff
- SST_1=1
- - SD_1=12
+ - SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0
- SMF_INSTANCE_ID_0=1
@@ -140,6 +140,12 @@ services:
- DISCOVER_UPF=yes
- USE_FQDN_DNS=yes
- DNN_NI0=oai
+ - TYPE0=IPv4
+ - DNN_RANGE0=12.1.1.2 - 12.1.1.127
+ - NSSAI_SST0=1
+ - NSSAI_SD0=0xFFFFFF
+ - SESSION_AMBR_UL0=200Mbps
+ - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4
depends_on:
- oai-nrf
@@ -183,7 +189,7 @@ services:
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf
- NSSAI_SST_0=1
- - NSSAI_SD_0=1
+ - NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on:
- oai-nrf
@@ -237,8 +243,6 @@ services:
MNC: '99'
MNC_LENGTH: 2
NSSAI_SST: 1
- NSSAI_SD0: 1
- NSSAI_SD1: 112233
AMF_IP_ADDRESS: 192.168.71.132
GNB_NGA_IF_NAME: eth0
GNB_NGA_IP_ADDRESS: 192.168.71.140
@@ -266,7 +270,6 @@ services:
OPC: 'C42449363BBAD02B66D16BC975D77CC1'
DNN: oai
NSSAI_SST: 1
- NSSAI_SD: 1
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 -C 3619200000 --nokrnmod --log_config.global_log_options level,nocolor,time
depends_on:
- oai-gnb
@@ -290,7 +293,6 @@ services:
OPC: 'C42449363BBAD02B66D16BC975D77CC1'
DNN: oai
NSSAI_SST: 1
- NSSAI_SD: 1
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 -C 3619200000 --nokrnmod --log_config.global_log_options level,nocolor,time
depends_on:
- oai-gnb
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 8bee39d6ba..a1abc8f624 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -1267,6 +1267,7 @@ add_library(UTIL
${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/backtrace.c
${OPENAIR_DIR}/common/utils/time_meas.c
+ ${OPENAIR_DIR}/common/utils/time_stat.c
)
set(SECU_OSA_SRC
diff --git a/common/config/config_userapi.c b/common/config/config_userapi.c
index 9725c15845..78a6a1b2c9 100644
--- a/common/config/config_userapi.c
+++ b/common/config/config_userapi.c
@@ -113,7 +113,7 @@ void config_check_valptr(paramdef_t *cfgoptions, int elt_sz, int nb_elt) {
sz=managed_ptr_sz(*cfgoptions->strptr);
else
sz=managed_ptr_sz(cfgoptions->voidptr);
- if ( sz != -1) {
+ if ( sz == -1) {
CONFIG_PRINTF_ERROR("[CONFIG] %s NOT SUPPORTED not NULL pointer with array types", cfgoptions->optname);
return ;
}
diff --git a/common/utils/T/tracer/packet-mac-lte.h b/common/utils/T/tracer/packet-mac-lte.h
index 60181987a9..715bbb68d9 100644
--- a/common/utils/T/tracer/packet-mac-lte.h
+++ b/common/utils/T/tracer/packet-mac-lte.h
@@ -17,8 +17,6 @@
#ifndef __COMMON_UTILS_T_TRACER_PACKET_MAC_LTE__H__
#define __COMMON_UTILS_T_TRACER_PACKET_MAC_LTE__H__
-//#include "ws_symbol_export.h"
-
/* radioType */
#define FDD_RADIO 1
#define TDD_RADIO 2
diff --git a/common/utils/nr/nr_common.c b/common/utils/nr/nr_common.c
index 7b6a4cc432..b1d20bb444 100644
--- a/common/utils/nr/nr_common.c
+++ b/common/utils/nr/nr_common.c
@@ -738,3 +738,4 @@ void SLIV2SL(int SLIV,int *S,int *L) {
*S=13-SLIVmod14;
}
}
+
diff --git a/common/utils/nr/nr_common.h b/common/utils/nr/nr_common.h
index 946e06dd62..893dcba701 100644
--- a/common/utils/nr/nr_common.h
+++ b/common/utils/nr/nr_common.h
@@ -56,10 +56,9 @@ typedef enum frequency_range_e {
} frequency_range_t;
extern const nr_bandentry_t nr_bandtable[];
+
static inline int get_num_dmrs(uint16_t dmrs_mask ) {
-
int num_dmrs=0;
-
for (int i=0;i<16;i++) num_dmrs+=((dmrs_mask>>i)&1);
return(num_dmrs);
}
diff --git a/common/utils/ocp_itti/intertask_interface.cpp b/common/utils/ocp_itti/intertask_interface.cpp
index 82f7eb5774..fe43dde319 100644
--- a/common/utils/ocp_itti/intertask_interface.cpp
+++ b/common/utils/ocp_itti/intertask_interface.cpp
@@ -171,6 +171,8 @@ extern "C" {
AssertFatal(epoll_ctl(t->epoll_fd, EPOLL_CTL_ADD, fd, &event) == 0,
"epoll_ctl (EPOLL_CTL_ADD) failed for task %s, fd %d: %s!\n",
itti_get_task_name(task_id), fd, strerror(errno));
+ eventfd_t sem_counter = 1;
+ AssertFatal ( sizeof(sem_counter) == write(t->sem_fd, &sem_counter, sizeof(sem_counter)), "");
}
void itti_unsubscribe_event_fd(task_id_t task_id, int fd) {
@@ -274,16 +276,12 @@ extern "C" {
struct epoll_event events[t->nb_fd_epoll];
// Weird condition to deal with crap legacy itti interface
- if ( t->nb_fd_epoll == 1 ) {
- while (t->message_queue.empty()) {
- itti_get_events_locked(task_id, events, t->nb_fd_epoll);
- pthread_mutex_lock(&t->queue_cond_lock);
- }
- } else {
- if (t->message_queue.empty()) {
+ if (t->message_queue.empty()) {
+ do {
itti_get_events_locked(task_id, events, t->nb_fd_epoll);
pthread_mutex_lock(&t->queue_cond_lock);
}
+ while (t->message_queue.empty() && t->nb_fd_epoll == 1);
}
// Legacy design: we return even if we have no message
diff --git a/common/utils/time_stat.c b/common/utils/time_stat.c
new file mode 100644
index 0000000000..dd648e1639
--- /dev/null
+++ b/common/utils/time_stat.c
@@ -0,0 +1,136 @@
+/*
+ * 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
+ */
+
+#include "time_stat.h"
+
+#include
+#include
+#include
+
+#include "common/utils/LOG/log.h"
+
+time_average_t *time_average_new(int duration, int initial_size)
+{
+ time_average_t *ret;
+
+ /* let's only accept power of two initial_size */
+ if (initial_size & (initial_size - 1)) {
+ LOG_E(UTIL, "time_average_new: illegal initial_size %d, use power of two\n", initial_size);
+ exit(1);
+ }
+
+ ret = calloc(1, sizeof(time_average_t));
+ if (ret == NULL) {
+ LOG_E(UTIL, "out of memory\n");
+ exit(1);
+ }
+
+ ret->duration = duration;
+ ret->r.head = initial_size - 1;
+ ret->r.maxsize = initial_size;
+ ret->r.buffer = calloc(initial_size, sizeof(time_value_t));
+ if (ret->r.buffer == NULL) {
+ LOG_E(UTIL, "out of memory\n");
+ exit(1);
+ }
+
+ return ret;
+}
+
+void time_average_free(time_average_t *t)
+{
+ free(t->r.buffer);
+ free(t);
+}
+
+void time_average_reset(time_average_t *t)
+{
+ t->r.head = t->r.maxsize - 1;
+ t->r.tail = 0;
+ t->r.size = 0;
+ t->accumulated_value = 0;
+}
+
+static void remove_old(time_average_t *t, uint64_t time)
+{
+ /* remove old events */
+ while (t->r.size && t->r.buffer[t->r.tail].time < time - t->duration) {
+ t->accumulated_value -= t->r.buffer[t->r.tail].value;
+ t->r.size--;
+ t->r.tail++;
+ t->r.tail %= t->r.maxsize;
+ }
+}
+
+void time_average_add(time_average_t *t, uint64_t time, uint64_t value)
+{
+ remove_old(t, time);
+
+ if (t->r.size == t->r.maxsize) {
+ t->r.maxsize *= 2;
+ t->r.buffer = realloc(t->r.buffer, t->r.maxsize * sizeof(time_value_t));
+ if (t->r.buffer == NULL) {
+ LOG_E(UTIL, "out of memory\n");
+ exit(1);
+ }
+ if (t->r.head < t->r.tail) {
+ memcpy(&t->r.buffer[t->r.size], &t->r.buffer[0], (t->r.head + 1) * sizeof(time_value_t));
+ t->r.head += t->r.size;
+ }
+ }
+
+ t->r.head++;
+ t->r.head %= t->r.maxsize;
+ t->r.buffer[t->r.head].time = time;
+ t->r.buffer[t->r.head].value = value;
+
+ t->r.size++;
+
+ t->accumulated_value += value;
+}
+
+double time_average_get_average(time_average_t *t, uint64_t time)
+{
+ remove_old(t, time);
+
+ if (t->r.size == 0)
+ return 0;
+
+ return (double)t->accumulated_value / t->r.size;
+}
+
+uint64_t time_average_now(void)
+{
+ struct timespec t;
+ uint64_t ret;
+
+ if (clock_gettime(CLOCK_REALTIME, &t)) {
+ LOG_E(UTIL, "clock_gettime failed\n");
+ exit(1);
+ }
+
+ ret = (uint64_t)t.tv_sec * (uint64_t)1000000 + t.tv_nsec / 1000;
+ /* round up if necessary */
+ if (t.tv_nsec % 1000 >= 500)
+ ret++;
+
+ return ret;
+}
diff --git a/common/utils/time_stat.h b/common/utils/time_stat.h
new file mode 100644
index 0000000000..d7508f5df0
--- /dev/null
+++ b/common/utils/time_stat.h
@@ -0,0 +1,64 @@
+/*
+ * 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
+ */
+
+#ifndef _COMMON_UTIL_TIME_STAT_H_
+#define _COMMON_UTIL_TIME_STAT_H_
+
+#include
+
+typedef struct {
+ uint64_t time; /* unit: microsecond */
+ uint64_t value; /* unit: microsecond */
+} time_value_t;
+
+typedef struct {
+ int head;
+ int tail;
+ time_value_t *buffer;
+ int maxsize;
+ int size;
+} time_ring_t;
+
+typedef struct {
+ int duration; /* unit: microsecond */
+ time_ring_t r;
+ uint64_t accumulated_value;
+} time_average_t;
+
+/* 'duration' is in unit microsecond */
+time_average_t *time_average_new(int duration, int initial_size);
+void time_average_free(time_average_t *t);
+void time_average_reset(time_average_t *t);
+
+/* add a value tagged with time 'time' unit microsecond (it also modifies 't',
+ * removing all data with time < 'time' - t->duration)
+ */
+void time_average_add(time_average_t *t, uint64_t time, uint64_t value);
+
+/* get the average for time 'time' (it also modifies 't', removing all
+ * data with time < 'time' - t->duration)
+ */
+double time_average_get_average(time_average_t *t, uint64_t time);
+
+/* unit microsecond */
+uint64_t time_average_now(void);
+
+#endif /* _COMMON_UTIL_TIME_STAT_H_ */
diff --git a/doc/TESTBenches.md b/doc/TESTBenches.md
index c9a9870953..dd14817863 100644
--- a/doc/TESTBenches.md
+++ b/doc/TESTBenches.md
@@ -105,8 +105,9 @@ Webhook
- [RAN-RF-Sim-Test-5G](https://jenkins-oai.eurecom.fr/job/RAN-RF-Sim-Test-5G/)
- obelix (gNB, 2x UE, OAI 5GC)
- uses RFsimulator, TDD 40MHz, FDD 40MHz, F1 split
-- [RAN-RHEL8-Image-Builder](https://jenkins-oai.eurecom.fr/job/RAN-RHEL8-Image-Builder/)
- - asterix: RHEL 8 image build using podman
+- [RAN-RHEL8-Cluster-Image-Builder](https://jenkins-oai.eurecom.fr/job/RAN-RHEL8-Cluster-Image-Builder/)
+ - asterix (`Asterix-OC-oaicicd-session` resource): RHEL 8 image build using
+ the OpenShift in Eurecom
- [RAN-Ubuntu18-Image-Builder](https://jenkins-oai.eurecom.fr/job/RAN-Ubuntu18-Image-Builder/)
- obelix: Ubuntu 18 image build using docker
diff --git a/doc/TESTING_5GSA_setup.md b/doc/TESTING_5GSA_setup.md
index 5251d82eb7..1e27e1616d 100644
--- a/doc/TESTING_5GSA_setup.md
+++ b/doc/TESTING_5GSA_setup.md
@@ -68,21 +68,7 @@ In the following, we highlight the fields of the file that have to be configured
```bash
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
```
Then, the source and destination IP interfaces for the communication with
the Core Network also need to be set as shown below.
diff --git a/doc/tutorial_resources/docker-compose-basic-nrf.yaml b/doc/tutorial_resources/docker-compose-basic-nrf.yaml
index cd1e957ad8..1c78bf37f9 100644
--- a/doc/tutorial_resources/docker-compose-basic-nrf.yaml
+++ b/doc/tutorial_resources/docker-compose-basic-nrf.yaml
@@ -314,7 +314,7 @@ services:
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf
- NSSAI_SST_0=1
- - NSSAI_SD_0=0x1
+ - NSSAI_SD_0=0xffffff
- DNN_0=oai
depends_on:
- oai-nrf
diff --git a/docker/Dockerfile.base.rhel8.2 b/docker/Dockerfile.base.rhel8.2
index 3050f09849..5f897bd0e2 100644
--- a/docker/Dockerfile.base.rhel8.2
+++ b/docker/Dockerfile.base.rhel8.2
@@ -32,8 +32,12 @@ ENV TZ=Europe/Paris
ENV BUILD_UHD_FROM_SOURCE=True
ENV UHD_VERSION=3.15.0.0
-COPY tmp/ca/redhat-uep.pem /etc/rhsm/ca
-COPY tmp/entitlement/*.pem /etc/pki/entitlement
+# Copy the entitlements
+COPY ./etc-pki-entitlement /etc/pki/entitlement
+
+# Copy the subscription manager configurations
+COPY ./rhsm-conf /etc/rhsm
+COPY ./rhsm-ca /etc/rhsm/ca
#install developers pkg/repo
RUN rm -f /etc/rhsm-host && \
diff --git a/docker/Dockerfile.build.rhel8.2 b/docker/Dockerfile.build.rhel8.2
index 2664096a9b..6fc2598276 100644
--- a/docker/Dockerfile.build.rhel8.2
+++ b/docker/Dockerfile.build.rhel8.2
@@ -35,4 +35,4 @@ COPY . .
RUN /bin/sh oaienv && \
cd cmake_targets && \
mkdir -p log && \
- ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci --noavx512
+ ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci --noavx512 -c
diff --git a/docker/Dockerfile.build.ubuntu18 b/docker/Dockerfile.build.ubuntu18
index 7809d56216..8c1ea3556d 100644
--- a/docker/Dockerfile.build.ubuntu18
+++ b/docker/Dockerfile.build.ubuntu18
@@ -35,4 +35,4 @@ COPY . .
RUN /bin/sh oaienv && \
cd cmake_targets && \
mkdir -p log && \
- ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci --noavx512
+ ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci --noavx512 -c
diff --git a/docker/Dockerfile.eNB.rhel7.oc4-4 b/docker/Dockerfile.eNB.rhel7.oc4-4
deleted file mode 100644
index 85c2a17ead..0000000000
--- a/docker/Dockerfile.eNB.rhel7.oc4-4
+++ /dev/null
@@ -1,83 +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
-# */
-#---------------------------------------------------------------------
-#
-# Dockerfile for the Open-Air-Interface BUILD service
-# Valid for RHEL7 in the OpenShift context (v4.4)
-#
-#---------------------------------------------------------------------
-
-FROM image-registry.openshift-image-registry.svc:5000/oai/oai-ran:latest AS enb-build
-
-
-WORKDIR /oai-enb
-COPY . .
-
-#run build_oai to build the target image
-RUN /bin/sh oaienv && \
- cd cmake_targets && \
- mkdir -p log && \
- ./build_oai --eNB
-
-
-#start from scratch for target executable
-FROM registry.access.redhat.com/ubi7/ubi:latest as oai-enb
-
-# Entitlements and RHSM configurations are Open-Shift Secret and ConfigMaps
-# It is pre-requisite
-RUN rm -Rf /etc/rhsm/ca /etc/pki/entitlement
-# Copy the entitlements
-COPY ./etc-pki-entitlement /etc/pki/entitlement
-# Copy the subscription manager configurations
-COPY ./rhsm-conf /etc/rhsm
-COPY ./rhsm-ca /etc/rhsm/ca
-
-
-#install developers pkg/repo
-RUN rm /etc/rhsm-host && \
- # Initialize /etc/yum.repos.d/redhat.repo
- # See https://access.redhat.com/solutions/1443553
- yum repolist --disablerepo=* && \
- yum-config-manager --enable rhel-7-server-optional-rpms rhel-server-rhscl-7-rpms && \
- yum update -y && \
- yum install -y \
- lksctp-tools \
- protobuf-c \
- nettle \
- libyaml && \
- echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf
-
-
-WORKDIR /opt/oai-enb/bin
-COPY --from=enb-build /oai-enb/targets/bin/lte-softmodem.Rel15 .
-
-RUN ldd lte-softmodem.Rel15
-
-#EXPOSE 2152/udp # S1U, GTP/UDP
-#EXPOSE 22100/tcp # ?
-#EXPOSE 36412/udp # S1C, SCTP/UDP
-#EXPOSE 36422/udp # X2C, SCTP/UDP
-#EXPOSE 50000/udp # IF5 / ORI (control)
-#EXPOSE 50001/udp # IF5 / ECPRI (data)
-
-#CMD ["/opt/oai-enb/bin/lte-softmodem", "-O", "/opt/oai-enb/etc/enb.conf"]
-#ENTRYPOINT ["/opt/oai-enb/bin/entrypoint.sh"]
-
diff --git a/docker/Dockerfile.eNB.rhel8.2.oc4-4 b/docker/Dockerfile.eNB.rhel8.2.oc4-4
deleted file mode 100644
index 03f6ec8e45..0000000000
--- a/docker/Dockerfile.eNB.rhel8.2.oc4-4
+++ /dev/null
@@ -1,124 +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
-# */
-#---------------------------------------------------------------------
-#
-# Dockerfile for the Open-Air-Interface BUILD service
-# Valid for RHEL8 in the OpenShift context (v4.4)
-#
-#---------------------------------------------------------------------
-
-FROM image-registry.openshift-image-registry.svc:5000/oai/oai-ran:rhel8-latest AS enb-build
-
-
-WORKDIR /oai-ran
-
-#run build_oai to build the target image
-RUN /bin/sh oaienv && \
- cd cmake_targets && \
- rm -Rf log && \
- mkdir -p log && \
- ./build_oai --eNB --ninja -w USRP
-
-# debug
-#RUN ldconfig -v && ldd /oai-ran/targets/bin/lte-softmodem.Rel15
-#RUN ls -ls /oai-ran/targets/bin
-#RUN ls -ls /oai-ran/cmake_targets/ran_build/build/*.so
-
-#start from scratch for target executable
-FROM registry.access.redhat.com/ubi8/ubi:latest as oai-enb
-
-RUN yum update -y && \
- yum install -y --enablerepo="ubi-8-codeready-builder" \
- lksctp-tools \
- nettle \
- atlas \
- net-tools \
- iproute \
- iputils \
- libyaml && \
- echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
- echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf
-
-WORKDIR /opt/oai-enb/bin
-COPY --from=enb-build /oai-ran/targets/bin/lte-softmodem.Rel15 .
-
-WORKDIR /usr/local/lib/
-COPY --from=enb-build /oai-ran/targets/bin/liboai_eth_transpro.so.Rel15 .
-COPY --from=enb-build /oai-ran/targets/bin/librfsimulator.so.Rel15 .
-COPY --from=enb-build /oai-ran/targets/bin/liboai_usrpdevif.so.Rel15 .
-COPY --from=enb-build /oai-ran/targets/bin/libcoding.so .
-COPY --from=enb-build /oai-ran/targets/bin/libparams_libconfig.so .
-COPY --from=enb-build /oai-ran/cmake_targets/ran_build/build/libdfts.so .
-COPY --from=enb-build /oai-ran/cmake_targets/ran_build/build/liboai_iqplayer.so .
-RUN /bin/bash -c "ln -s /usr/local/lib/liboai_eth_transpro.so.Rel15 /usr/local/lib/liboai_transpro.so"
-RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so.Rel15 /usr/local/lib/liboai_device.so"
-RUN /bin/bash -c "ln -s /usr/local/lib/librfsimulator.so.Rel15 /usr/local/lib/librfsimulator.so"
-
-COPY --from=enb-build /usr/local/lib/libprotobuf-c.so.1 .
-
-COPY --from=enb-build /lib64/libconfig.so.9 /lib64
-COPY --from=enb-build /lib64/libblas.so.3 /lib64
-COPY --from=enb-build /lib64/liblapack.so.3 /lib64
-COPY --from=enb-build /lib64/liblapacke.so.3 /lib64
-COPY --from=enb-build /lib64/libboost_chrono.so.1.66.0 /lib64
-COPY --from=enb-build /lib64/libboost_date_time.so.1.66.0 /lib64
-COPY --from=enb-build /lib64/libboost_filesystem.so.1.66.0 /lib64
-COPY --from=enb-build /lib64/libboost_program_options.so.1.66.0 /lib64
-COPY --from=enb-build /lib64/libboost_serialization.so.1.66.0 /lib64
-COPY --from=enb-build /lib64/libboost_thread.so.1.66.0 /lib64
-COPY --from=enb-build /lib64/libboost_system.so.1.66.0 /lib64
-COPY --from=enb-build /lib64/libboost_unit_test_framework.so.1.66.0 /lib64
-COPY --from=enb-build /lib64/libboost_atomic.so.1.66.0 /lib64
-COPY --from=enb-build /lib64/libboost_timer.so.1.66.0 /lib64
-COPY --from=enb-build /usr/local/lib64/libuhd.so.4.0.0 /usr/local/lib64
-
-RUN ldconfig
-
-#debug
-RUN ldd /usr/local/lib/liboai_eth_transpro.so.Rel15
-RUN ldd /usr/local/lib/librfsimulator.so.Rel15
-RUN ldd /usr/local/lib/liboai_usrpdevif.so.Rel15
-RUN ldd /usr/local/lib/libcoding.so
-RUN ldd /usr/local/lib/libparams_libconfig.so
-RUN ldd /usr/local/lib/libdfts.so
-RUN ldd /usr/local/lib/liboai_iqplayer.so
-RUN ldd /opt/oai-enb/bin/lte-softmodem.Rel15
-
-# Copy the relevant configuration files for eNB
-WORKDIR /opt/oai-enb/etc
-COPY --from=enb-build /oai-ran/ci-scripts/conf_files/enb.* .
-COPY --from=enb-build /oai-ran/ci-scripts/conf_files/rcc.* .
-COPY --from=enb-build /oai-ran/ci-scripts/conf_files/cu.* .
-COPY --from=enb-build /oai-ran/ci-scripts/conf_files/du.* .
-COPY --from=enb-build /oai-ran/ci-scripts/conf_files/rru.* .
-
-WORKDIR /opt/oai-enb
-
-#EXPOSE 2152/udp # S1U, GTP/UDP
-#EXPOSE 22100/tcp # ?
-#EXPOSE 36412/udp # S1C, SCTP/UDP
-#EXPOSE 36422/udp # X2C, SCTP/UDP
-#EXPOSE 50000/udp # IF5 / ORI (control)
-#EXPOSE 50001/udp # IF5 / ECPRI (data)
-
-#CMD ["/opt/oai-enb/bin/lte-softmodem", "-O", "/opt/oai-enb/etc/enb.conf"]
-#ENTRYPOINT ["/opt/oai-enb/bin/entrypoint.sh"]
-CMD ["sleep", "infinity"]
diff --git a/docker/Dockerfile.gNB.rhel7.oc4-4 b/docker/Dockerfile.gNB.rhel7.oc4-4
deleted file mode 100644
index 5165dd9715..0000000000
--- a/docker/Dockerfile.gNB.rhel7.oc4-4
+++ /dev/null
@@ -1,89 +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
-# */
-#---------------------------------------------------------------------
-#
-# Dockerfile for the Open-Air-Interface BUILD service
-# Valid for RHEL7 in the OpenShift context (v4.4)
-#
-#---------------------------------------------------------------------
-
-FROM image-registry.openshift-image-registry.svc:5000/oai/oai-ran:latest AS gnb-build
-
-
-WORKDIR /oai-gnb
-COPY . .
-
-#run build_oai to build the target image
-RUN /bin/sh oaienv && \
- cd cmake_targets && \
- mkdir -p log && \
- ./build_oai --gNB
-
-
-#start from scratch for target executable
-FROM registry.access.redhat.com/ubi7/ubi:latest as oai-gnb
-
-# Entitlements and RHSM configurations are Open-Shift Secret and ConfigMaps
-# It is pre-requisite
-RUN rm -Rf /etc/rhsm/ca /etc/pki/entitlement
-# Copy the entitlements
-COPY ./etc-pki-entitlement /etc/pki/entitlement
-# Copy the subscription manager configurations
-COPY ./rhsm-conf /etc/rhsm
-COPY ./rhsm-ca /etc/rhsm/ca
-
-
-#install developers pkg/repo
-RUN rm /etc/rhsm-host && \
- # Initialize /etc/yum.repos.d/redhat.repo
- # See https://access.redhat.com/solutions/1443553
- yum repolist --disablerepo=* && \
- yum-config-manager --enable rhel-7-server-optional-rpms rhel-server-rhscl-7-rpms && \
- yum update -y && \
- yum install -y \
- libXpm \
- libX11 \
- atlas \
- blas \
- lapack \
- lksctp-tools \
- protobuf-c \
- nettle \
- libyaml && \
- echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf
-
-WORKDIR /opt/oai-gnb/bin
-COPY --from=gnb-build /oai-gnb/targets/bin/nr-softmodem.Rel15 .
-WORKDIR /lib64
-COPY --from=gnb-build /lib64/libforms.so.2 .
-
-RUN ldd /opt/oai-gnb/bin/nr-softmodem.Rel15
-
-#EXPOSE 2152/udp # S1U, GTP/UDP
-#EXPOSE 22100/tcp # ?
-#EXPOSE 36412/udp # S1C, SCTP/UDP
-#EXPOSE 36422/udp # X2C, SCTP/UDP
-#EXPOSE 50000/udp # IF5 / ORI (control)
-#EXPOSE 50001/udp # IF5 / ECPRI (data)
-
-#CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]
-#ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"]
-
diff --git a/docker/Dockerfile.gNB.rhel8.2.oc4-4 b/docker/Dockerfile.gNB.rhel8.2.oc4-4
deleted file mode 100644
index 6c88d3ad8e..0000000000
--- a/docker/Dockerfile.gNB.rhel8.2.oc4-4
+++ /dev/null
@@ -1,128 +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
-# */
-#---------------------------------------------------------------------
-#
-# Dockerfile for the Open-Air-Interface BUILD service
-# Valid for RHEL8 in the OpenShift context (v4.4)
-#
-#---------------------------------------------------------------------
-
-FROM image-registry.openshift-image-registry.svc:5000/oai/oai-ran:rhel8-latest AS gnb-build
-
-
-WORKDIR /oai-ran
-
-#run build_oai to build the target image
-RUN /bin/sh oaienv && \
- cd cmake_targets && \
- rm -Rf log && \
- mkdir -p log && \
- ./build_oai --gNB --ninja -w USRP
-
-#debug
-#RUN ldconfig -v
-#RUN ldd /oai-ran/targets/bin/nr-softmodem.Rel15
-#RUN ls -lst /oai-ran/targets/bin
-#RUN ls -lst /oai-ran/cmake_targets/ran_build/build/*.so
-
-#start from scratch for target executable
-FROM registry.access.redhat.com/ubi8/ubi:latest as oai-gnb
-
-RUN yum repolist --disablerepo=* && \
- yum update -y && \
- yum install -y --enablerepo="ubi-8-codeready-builder" \
- libXpm \
- libX11 \
- atlas \
- lksctp-tools \
- nettle \
- net-tools \
- iputils \
- libyaml && \
- echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
- echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf
-
-WORKDIR /opt/oai-gnb/bin
-COPY --from=gnb-build /oai-ran/targets/bin/nr-softmodem.Rel15 .
-
-WORKDIR /usr/local/lib/
-COPY --from=gnb-build /oai-ran/targets/bin/liboai_eth_transpro.so.Rel15 .
-COPY --from=gnb-build /oai-ran/targets/bin/librfsimulator.so.Rel15 .
-COPY --from=gnb-build /oai-ran/targets/bin/liboai_usrpdevif.so.Rel15 .
-COPY --from=gnb-build /oai-ran/targets/bin/libcoding.so .
-COPY --from=gnb-build /oai-ran/targets/bin/libparams_libconfig.so .
-COPY --from=gnb-build /oai-ran/cmake_targets/ran_build/build/libdfts.so .
-COPY --from=gnb-build /oai-ran/cmake_targets/ran_build/build/libldpc.so .
-COPY --from=gnb-build /oai-ran/cmake_targets/ran_build/build/libldpc_optim.so .
-COPY --from=gnb-build /oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so .
-COPY --from=gnb-build /oai-ran/cmake_targets/ran_build/build/libldpc_orig.so .
-
-RUN /bin/bash -c "ln -s /usr/local/lib/liboai_eth_transpro.so.Rel15 /usr/local/lib/liboai_transpro.so"
-RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so.Rel15 /usr/local/lib/liboai_device.so"
-RUN /bin/bash -c "ln -s /usr/local/lib/librfsimulator.so.Rel15 /usr/local/lib/librfsimulator.so"
-COPY --from=gnb-build /usr/local/lib/libprotobuf-c.so.1 .
-
-COPY --from=gnb-build /lib64/libconfig.so.9 /lib64
-COPY --from=gnb-build /lib64/libforms.so.2 /lib64
-COPY --from=gnb-build /lib64/libblas.so.3 /lib64
-COPY --from=gnb-build /lib64/liblapack.so.3 /lib64
-COPY --from=gnb-build /lib64/liblapacke.so.3 /lib64
-COPY --from=gnb-build /lib64/libboost_chrono.so.1.66.0 /lib64
-COPY --from=gnb-build /lib64/libboost_date_time.so.1.66.0 /lib64
-COPY --from=gnb-build /lib64/libboost_filesystem.so.1.66.0 /lib64
-COPY --from=gnb-build /lib64/libboost_program_options.so.1.66.0 /lib64
-COPY --from=gnb-build /lib64/libboost_serialization.so.1.66.0 /lib64
-COPY --from=gnb-build /lib64/libboost_thread.so.1.66.0 /lib64
-COPY --from=gnb-build /lib64/libboost_system.so.1.66.0 /lib64
-COPY --from=gnb-build /lib64/libboost_unit_test_framework.so.1.66.0 /lib64
-COPY --from=gnb-build /lib64/libboost_atomic.so.1.66.0 /lib64
-COPY --from=gnb-build /lib64/libboost_timer.so.1.66.0 /lib64
-COPY --from=gnb-build /usr/local/lib64/libuhd.so.4.0.0 /usr/local/lib64
-
-RUN ldconfig
-#debug
-RUN ldd /opt/oai-gnb/bin/nr-softmodem.Rel15
-RUN ldd /usr/local/lib/liboai_eth_transpro.so.Rel15
-RUN ldd /usr/local/lib/librfsimulator.so.Rel15
-RUN ldd /usr/local/lib/liboai_usrpdevif.so.Rel15
-RUN ldd /usr/local/lib/libcoding.so
-RUN ldd /usr/local/lib/libparams_libconfig.so
-RUN ldd /usr/local/lib/libdfts.so
-RUN ldd /usr/local/lib/libldpc.so
-RUN ldd /usr/local/lib/libldpc_optim.so
-RUN ldd /usr/local/lib/libldpc_optim8seg.so
-RUN ldd /usr/local/lib/libldpc_orig.so
-
-# Copy the relevant configuration files for gNB
-WORKDIR /opt/oai-gnb/etc
-COPY --from=gnb-build /oai-ran/ci-scripts/conf_files/gnb.* .
-
-WORKDIR /opt/oai-gnb
-#EXPOSE 2152/udp # S1U, GTP/UDP
-#EXPOSE 22100/tcp # ?
-#EXPOSE 36412/udp # S1C, SCTP/UDP
-#EXPOSE 36422/udp # X2C, SCTP/UDP
-#EXPOSE 50000/udp # IF5 / ORI (control)
-#EXPOSE 50001/udp # IF5 / ECPRI (data)
-
-#CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]
-#ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"]
-CMD ["sleep", "infinity"]
diff --git a/docker/Dockerfile.lteUE.rhel8.2.oc4-4 b/docker/Dockerfile.lteUE.rhel8.2.oc4-4
deleted file mode 100644
index cc492882f5..0000000000
--- a/docker/Dockerfile.lteUE.rhel8.2.oc4-4
+++ /dev/null
@@ -1,122 +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
-# */
-#---------------------------------------------------------------------
-#
-# Dockerfile for the Open-Air-Interface BUILD service
-# Valid for RHEL8 in the OpenShift context (v4.4)
-#
-#---------------------------------------------------------------------
-
-FROM image-registry.openshift-image-registry.svc:5000/oai/oai-ran:rhel8-latest AS lte-ue-build
-
-
-WORKDIR /oai-ran
-
-#run build_oai to build the target image
-RUN /bin/sh oaienv && \
- cd cmake_targets && \
- rm -Rf log && \
- mkdir -p log && \
- ./build_oai --UE --ninja -w USRP
-
-# debug
-#RUN ldconfig -v && ldd /oai-ran/targets/bin/lte-uesoftmodem.Rel15
-#RUN ls -lst /oai-ran/targets/bin
-#RUN ls -lst /oai-ran/cmake_targets/ran_build/build/*.so
-
-#start from scratch for target executable
-FROM registry.access.redhat.com/ubi8/ubi:latest as oai-lte-ue
-
-RUN yum update -y && \
- yum install -y --enablerepo="ubi-8-codeready-builder" \
- lksctp-tools \
- nettle \
- atlas \
- iproute \
- net-tools \
- iputils \
- libyaml && \
- echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
- echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf
-
-WORKDIR /opt/oai-lte-ue/bin
-COPY --from=lte-ue-build /oai-ran/targets/bin/lte-uesoftmodem.Rel15 .
-COPY --from=lte-ue-build /oai-ran/targets/bin/conf2uedata .
-COPY --from=lte-ue-build /oai-ran/targets/bin/nvram .
-COPY --from=lte-ue-build /oai-ran/targets/bin/usim .
-COPY --from=lte-ue-build /oai-ran/targets/bin/.ue_emm.nvram0 .
-COPY --from=lte-ue-build /oai-ran/targets/bin/.ue.nvram0 .
-COPY --from=lte-ue-build /oai-ran/targets/bin/.usim.nvram0 .
-
-WORKDIR /usr/local/lib/
-COPY --from=lte-ue-build /oai-ran/targets/bin/liboai_eth_transpro.so.Rel15 .
-COPY --from=lte-ue-build /oai-ran/targets/bin/librfsimulator.so.Rel15 .
-COPY --from=lte-ue-build /oai-ran/targets/bin/liboai_usrpdevif.so.Rel15 .
-COPY --from=lte-ue-build /oai-ran/targets/bin/libcoding.so .
-COPY --from=lte-ue-build /oai-ran/targets/bin/libparams_libconfig.so .
-COPY --from=lte-ue-build /oai-ran/cmake_targets/ran_build/build/libSIMU.so .
-COPY --from=lte-ue-build /oai-ran/cmake_targets/ran_build/build/libdfts.so .
-RUN /bin/bash -c "ln -s /usr/local/lib/liboai_eth_transpro.so.Rel15 /usr/local/lib/liboai_transpro.so"
-RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so.Rel15 /usr/local/lib/liboai_device.so"
-RUN /bin/bash -c "ln -s /usr/local/lib/librfsimulator.so.Rel15 /usr/local/lib/librfsimulator.so"
-
-COPY --from=lte-ue-build /usr/local/lib/libprotobuf-c.so.1 .
-
-COPY --from=lte-ue-build /lib64/libconfig.so.9 /lib64
-COPY --from=lte-ue-build /lib64/libblas.so.3 /lib64
-COPY --from=lte-ue-build /lib64/liblapack.so.3 /lib64
-COPY --from=lte-ue-build /lib64/liblapacke.so.3 /lib64
-COPY --from=lte-ue-build /lib64/libboost_chrono.so.1.66.0 /lib64
-COPY --from=lte-ue-build /lib64/libboost_date_time.so.1.66.0 /lib64
-COPY --from=lte-ue-build /lib64/libboost_filesystem.so.1.66.0 /lib64
-COPY --from=lte-ue-build /lib64/libboost_program_options.so.1.66.0 /lib64
-COPY --from=lte-ue-build /lib64/libboost_serialization.so.1.66.0 /lib64
-COPY --from=lte-ue-build /lib64/libboost_thread.so.1.66.0 /lib64
-COPY --from=lte-ue-build /lib64/libboost_system.so.1.66.0 /lib64
-COPY --from=lte-ue-build /lib64/libboost_unit_test_framework.so.1.66.0 /lib64
-COPY --from=lte-ue-build /lib64/libboost_atomic.so.1.66.0 /lib64
-COPY --from=lte-ue-build /lib64/libboost_timer.so.1.66.0 /lib64
-COPY --from=lte-ue-build /usr/local/lib64/libuhd.so.4.0.0 /usr/local/lib64
-
-RUN ldconfig
-
-#debug
-RUN ldd /opt/oai-lte-ue/bin/lte-uesoftmodem.Rel15
-RUN ldd /opt/oai-lte-ue/bin/conf2uedata
-RUN ldd /opt/oai-lte-ue/bin/nvram
-RUN ldd /opt/oai-lte-ue/bin/usim
-RUN ldd /usr/local/lib/liboai_eth_transpro.so.Rel15
-RUN ldd /usr/local/lib/librfsimulator.so.Rel15
-RUN ldd /usr/local/lib/liboai_usrpdevif.so.Rel15
-RUN ldd /usr/local/lib/libcoding.so
-RUN ldd /usr/local/lib/libparams_libconfig.so
-RUN ldd /usr/local/lib/libSIMU.so
-RUN ldd /usr/local/lib/libdfts.so
-
-# Copy the relevant configuration files for eNB
-WORKDIR /opt/oai-lte-ue/etc
-COPY --from=lte-ue-build /oai-ran/ci-scripts/conf_files/ue.* .
-COPY --from=lte-ue-build /oai-ran/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf ./ue_usim.conf
-
-WORKDIR /opt/oai-lte-ue
-#CMD ["/opt/oai-lte-ue/bin/lte-uesoftmodem", "-O", "/opt/oai-lte-ue/etc/enb.conf"]
-#ENTRYPOINT ["/opt/oai-lte-ue/bin/entrypoint.sh"]
-CMD ["sleep", "infinity"]
diff --git a/docker/Dockerfile.nrUE.rhel8.2.oc4-4 b/docker/Dockerfile.nrUE.rhel8.2.oc4-4
deleted file mode 100644
index 2d018c96af..0000000000
--- a/docker/Dockerfile.nrUE.rhel8.2.oc4-4
+++ /dev/null
@@ -1,119 +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
-# */
-#---------------------------------------------------------------------
-#
-# Dockerfile for the Open-Air-Interface BUILD service
-# Valid for RHEL8 in the OpenShift context (v4.4)
-#
-#---------------------------------------------------------------------
-
-FROM image-registry.openshift-image-registry.svc:5000/oai/oai-ran:rhel8-latest AS nr-ue-build
-
-
-WORKDIR /oai-ran
-
-#run build_oai to build the target image
-RUN /bin/sh oaienv && \
- cd cmake_targets && \
- rm -Rf log && \
- mkdir -p log && \
- ./build_oai --nrUE --ninja -w USRP
-
-# debug
-#RUN ldconfig -v
-#RUN ldd /oai-ran/targets/bin/nr-uesoftmodem.Rel15
-#RUN ls -lst /oai-ran/targets/bin
-#RUN ls -lst /oai-ran/cmake_targets/ran_build/build/*.so
-
-#start from scratch for target executable
-FROM registry.access.redhat.com/ubi8/ubi:latest as oai-nr-ue
-
-RUN yum update -y && \
- yum install -y --enablerepo="ubi-8-codeready-builder" \
- lksctp-tools \
- nettle \
- net-tools \
- iputils \
- atlas \
- libXpm \
- libX11 \
- libyaml && \
- echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
- echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf
-
-WORKDIR /opt/oai-nr-ue/bin
-COPY --from=nr-ue-build /oai-ran/targets/bin/nr-uesoftmodem.Rel15 .
-
-WORKDIR /usr/local/lib/
-COPY --from=nr-ue-build /oai-ran/targets/bin/liboai_eth_transpro.so.Rel15 .
-COPY --from=nr-ue-build /oai-ran/targets/bin/librfsimulator.so.Rel15 .
-COPY --from=nr-ue-build /oai-ran/targets/bin/liboai_usrpdevif.so.Rel15 .
-COPY --from=nr-ue-build /oai-ran/targets/bin/libcoding.so .
-COPY --from=nr-ue-build /oai-ran/targets/bin/libparams_libconfig.so .
-COPY --from=nr-ue-build /oai-ran/cmake_targets/ran_build/build/libdfts.so .
-COPY --from=nr-ue-build /oai-ran/cmake_targets/ran_build/build/libldpc.so .
-COPY --from=nr-ue-build /oai-ran/cmake_targets/ran_build/build/libldpc_optim.so .
-COPY --from=nr-ue-build /oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so .
-COPY --from=nr-ue-build /oai-ran/cmake_targets/ran_build/build/libldpc_orig.so .
-RUN /bin/bash -c "ln -s /usr/local/lib/liboai_eth_transpro.so.Rel15 /usr/local/lib/liboai_transpro.so"
-RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so.Rel15 /usr/local/lib/liboai_device.so"
-RUN /bin/bash -c "ln -s /usr/local/lib/librfsimulator.so.Rel15 /usr/local/lib/librfsimulator.so"
-
-COPY --from=nr-ue-build /usr/local/lib/libprotobuf-c.so.1 .
-
-COPY --from=nr-ue-build /lib64/libconfig.so.9 /lib64
-COPY --from=nr-ue-build /lib64/libblas.so.3 /lib64
-COPY --from=nr-ue-build /lib64/liblapack.so.3 /lib64
-COPY --from=nr-ue-build /lib64/liblapacke.so.3 /lib64
-COPY --from=nr-ue-build /lib64/libforms.so.2 /lib64
-COPY --from=nr-ue-build /lib64/libboost_chrono.so.1.66.0 /lib64
-COPY --from=nr-ue-build /lib64/libboost_date_time.so.1.66.0 /lib64
-COPY --from=nr-ue-build /lib64/libboost_filesystem.so.1.66.0 /lib64
-COPY --from=nr-ue-build /lib64/libboost_program_options.so.1.66.0 /lib64
-COPY --from=nr-ue-build /lib64/libboost_serialization.so.1.66.0 /lib64
-COPY --from=nr-ue-build /lib64/libboost_thread.so.1.66.0 /lib64
-COPY --from=nr-ue-build /lib64/libboost_system.so.1.66.0 /lib64
-COPY --from=nr-ue-build /lib64/libboost_unit_test_framework.so.1.66.0 /lib64
-COPY --from=nr-ue-build /lib64/libboost_atomic.so.1.66.0 /lib64
-COPY --from=nr-ue-build /lib64/libboost_timer.so.1.66.0 /lib64
-COPY --from=nr-ue-build /usr/local/lib64/libuhd.so.4.0.0 /usr/local/lib64
-
-RUN ldconfig
-RUN ldd /opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15
-RUN ldd /usr/local/lib/liboai_eth_transpro.so.Rel15
-RUN ldd /usr/local/lib/librfsimulator.so.Rel15
-RUN ldd /usr/local/lib/liboai_usrpdevif.so.Rel15
-RUN ldd /usr/local/lib/libcoding.so
-RUN ldd /usr/local/lib/libparams_libconfig.so
-RUN ldd /usr/local/lib/libdfts.so
-RUN ldd /usr/local/lib/libldpc.so
-RUN ldd /usr/local/lib/libldpc_optim.so
-RUN ldd /usr/local/lib/libldpc_optim8seg.so
-RUN ldd /usr/local/lib/libldpc_orig.so
-
-# Copy the relevant configuration files for eNB
-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", "-O", "/opt/oai-nr-ue/etc/enb.conf"]
-#ENTRYPOINT ["/opt/oai-nr-ue/bin/entrypoint.sh"]
-CMD ["sleep", "infinity"]
diff --git a/docker/Dockerfile.phySim.rhel8.2 b/docker/Dockerfile.phySim.rhel8.2
index b4eb9a1eeb..507b56f18d 100644
--- a/docker/Dockerfile.phySim.rhel8.2
+++ b/docker/Dockerfile.phySim.rhel8.2
@@ -38,7 +38,7 @@ RUN yum install -y libasan
RUN /bin/sh oaienv && \
cd cmake_targets && \
mkdir -p log && \
- ./build_oai --phy_simulators --ninja --verbose-ci --sanitize-address --noavx512
+ ./build_oai --phy_simulators --ninja --verbose-ci --sanitize-address --noavx512 -c
#start from scratch for target executable
FROM registry.access.redhat.com/ubi8/ubi:latest as oai-physim
diff --git a/docker/Dockerfile.ran.rhel7.oc4-4 b/docker/Dockerfile.ran.rhel7.oc4-4
deleted file mode 100644
index 2f0423801a..0000000000
--- a/docker/Dockerfile.ran.rhel7.oc4-4
+++ /dev/null
@@ -1,74 +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
-# */
-#---------------------------------------------------------------------
-#
-# Dockerfile for the Open-Air-Interface BUILD service
-# Valid for RHEL7 in the OpenShift context (v4.4)
-#
-#---------------------------------------------------------------------
-
-
-FROM registry.access.redhat.com/ubi7/ubi:latest AS ran-base
-
-# Entitlements and RHSM configurations are Open-Shift Secret and ConfigMaps
-# It is pre-requisite
-RUN rm -Rf /etc/rhsm/ca /etc/pki/entitlement
-# Copy the entitlements
-COPY ./etc-pki-entitlement /etc/pki/entitlement
-# Copy the subscription manager configurations
-COPY ./rhsm-conf /etc/rhsm
-COPY ./rhsm-ca /etc/rhsm/ca
-
-
-#install developers pkg/repo
-RUN rm /etc/rhsm-host && \
- # Initialize /etc/yum.repos.d/redhat.repo
- # See https://access.redhat.com/solutions/1443553
- yum repolist --disablerepo=* && \
- yum-config-manager --enable rhel-7-server-optional-rpms rhel-server-rhscl-7-rpms && \
- yum update -y && \
- yum install -y \
- #gcc needed for build_oai
- gcc gcc-c++ \
- diffutils \
- file \
- psmisc \
- git \
- #unzip is needed for protobuf
- unzip && \
- echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf
-
-# In some network environments, GIT proxy is required
-RUN /bin/bash -c "if [[ -v NEEDED_GIT_PROXY ]]; then git config --global http.proxy $NEEDED_GIT_PROXY; fi"
-
-#create the WORKDIR
-WORKDIR /oai-ran
-COPY . .
-
-#run build_oai -I to get the builder image
-RUN /bin/sh oaienv && \
- cd cmake_targets && \
- mkdir -p log && \
- ./build_oai -I
-
-#as the image is public, we need to remove the subscription manager configurations
-#RUN rm -Rf /etc/rhsm /etc/pki/entitlement
-
diff --git a/docker/Dockerfile.ran.rhel8.2.oc4-4 b/docker/Dockerfile.ran.rhel8.2.oc4-4
deleted file mode 100644
index 93af2b0e37..0000000000
--- a/docker/Dockerfile.ran.rhel8.2.oc4-4
+++ /dev/null
@@ -1,74 +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
-# */
-#---------------------------------------------------------------------
-#
-# Dockerfile for the Open-Air-Interface BUILD service
-# Valid for RHEL8 in the OpenShift context (v4.4)
-#
-#---------------------------------------------------------------------
-
-
-FROM registry.access.redhat.com/ubi8/ubi:latest AS ran-base
-
-# Entitlements and RHSM configurations are Open-Shift Secret and ConfigMaps
-# It is pre-requisite
-RUN rm -Rf /etc/rhsm/ca /etc/pki/entitlement
-# Copy the entitlements
-COPY ./etc-pki-entitlement /etc/pki/entitlement
-# Copy the subscription manager configurations
-COPY ./rhsm-conf /etc/rhsm
-COPY ./rhsm-ca /etc/rhsm/ca
-
-#install developers pkg/repo
-RUN rm /etc/rhsm-host && \
- # Initialize /etc/yum.repos.d/redhat.repo
- # See https://access.redhat.com/solutions/1443553
- yum repolist --disablerepo=* && \
- subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms && \
- yum update -y && \
- yum install -y \
- #gcc needed for build_oai
- gcc gcc-c++ \
- diffutils \
- file \
- psmisc \
- git \
- #unzip is needed for protobuf
- unzip && \
- echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
- echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf
-
-# In some network environments, GIT proxy is required
-RUN /bin/bash -c "if [[ -v NEEDED_GIT_PROXY ]]; then git config --global http.proxy $NEEDED_GIT_PROXY; fi"
-
-#create the WORKDIR
-WORKDIR /oai-ran
-COPY . .
-
-#run build_oai -I to get the builder image
-RUN /bin/sh oaienv && \
- cd cmake_targets && \
- mkdir -p log && \
- ./build_oai -I -w USRP
-
-#as the image is public, we need to remove the subscription certificates
-RUN rm -Rf /etc/pki/entitlement/*.pem
-
diff --git a/docker/README.md b/docker/README.md
index 85f553c721..7844b46bce 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -78,9 +78,7 @@ The currently-supported OS are:
The currently-supported cluster version is:
-- `rhel8.2.oc4-4`
-
-We have also `rhel7.oc4-4` support but it will be discontinued soon.
+- `rhel8.2.oc4-9`
For more details in build within a Openshift Cluster, see [OpenShift README](../openshift/README.md) for more details.
diff --git a/docker/scripts/enb_parameters.yaml b/docker/scripts/enb_parameters.yaml
index 69baaebb3d..b3cd02e941 100644
--- a/docker/scripts/enb_parameters.yaml
+++ b/docker/scripts/enb_parameters.yaml
@@ -32,11 +32,12 @@
env: "@ENB_NAME@"
- key: eNB_name
env: "@ENB_NAME@"
- - key: plmn_list
- env:
- mcc: "@MCC@"
- mnc: "@MNC@"
- mnc_length: "@MNC_LENGTH@"
+ - key: mcc
+ env: "@MCC@"
+ - key: mnc
+ env: "@MNC@"
+ - key: mnc_length
+ env: "@MNC_LENGTH@"
- key: tracking_area_code
env: "@TAC@"
- key: local_s_if_name
@@ -75,11 +76,12 @@
env: "@ENB_NAME@"
- key: eNB_name
env: "@ENB_NAME@"
- - key: plmn_list
- env:
- mcc: "@MCC@"
- mnc: "@MNC@"
- mnc_length: "@MNC_LENGTH@"
+ - key: mcc
+ env: "@MCC@"
+ - key: mnc
+ env: "@MNC@"
+ - key: mnc_length
+ env: "@MNC_LENGTH@"
- key: tracking_area_code
env: "@TAC@"
- key: local_n_if_name
@@ -136,11 +138,12 @@
env: "@ENB_NAME@"
- key: eNB_name
env: "@ENB_NAME@"
- - key: plmn_list
- env:
- mcc: "@MCC@"
- mnc: "@MNC@"
- mnc_length: "@MNC_LENGTH@"
+ - key: mcc
+ env: "@MCC@"
+ - key: mnc
+ env: "@MNC@"
+ - key: mnc_length
+ env: "@MNC_LENGTH@"
- key: tracking_area_code
env: "@TAC@"
- key: eutra_band
@@ -187,11 +190,12 @@
env: "@ENB_NAME@"
- key: eNB_name
env: "@ENB_NAME@"
- - key: plmn_list
- env:
- mcc: "@MCC@"
- mnc: "@MNC@"
- mnc_length: "@MNC_LENGTH@"
+ - key: mcc
+ env: "@MCC@"
+ - key: mnc
+ env: "@MNC@"
+ - key: mnc_length
+ env: "@MNC_LENGTH@"
- key: tracking_area_code
env: "@TAC@"
- key: eutra_band
@@ -226,11 +230,12 @@
env: "@ENB_NAME@"
- key: eNB_name
env: "@ENB_NAME@"
- - key: plmn_list
- env:
- mcc: "@MCC@"
- mnc: "@MNC@"
- mnc_length: "@MNC_LENGTH@"
+ - key: mcc
+ env: "@MCC@"
+ - key: mnc
+ env: "@MNC@"
+ - key: mnc_length
+ env: "@MNC_LENGTH@"
- key: tracking_area_code
env: "@TAC@"
- key: local_s_if_name
@@ -271,11 +276,12 @@
env: "@ENB_NAME@"
- key: eNB_name
env: "@ENB_NAME@"
- - key: plmn_list
- env:
- mcc: "@MCC@"
- mnc: "@MNC@"
- mnc_length: "@MNC_LENGTH@"
+ - key: mcc
+ env: "@MCC@"
+ - key: mnc
+ env: "@MNC@"
+ - key: mnc_length
+ env: "@MNC_LENGTH@"
- key: tracking_area_code
env: "@TAC@"
- key: eutra_band
@@ -316,11 +322,12 @@
env: "@ENB_NAME@"
- key: eNB_name
env: "@ENB_NAME@"
- - key: plmn_list
- env:
- mcc: "@MCC@"
- mnc: "@MNC@"
- mnc_length: "@MNC_LENGTH@"
+ - key: mcc
+ env: "@MCC@"
+ - key: mnc
+ env: "@MNC@"
+ - key: mnc_length
+ env: "@MNC_LENGTH@"
- key: tracking_area_code
env: "@TAC@"
- key: eutra_band
@@ -361,11 +368,12 @@
env: "@ENB_NAME@"
- key: eNB_name
env: "@ENB_NAME@"
- - key: plmn_list
- env:
- mcc: "@MCC@"
- mnc: "@MNC@"
- mnc_length: "@MNC_LENGTH@"
+ - key: mcc
+ env: "@MCC@"
+ - key: mnc
+ env: "@MNC@"
+ - key: mnc_length
+ env: "@MNC_LENGTH@"
- key: tracking_area_code
env: "@TAC@"
- key: eutra_band
diff --git a/docker/scripts/generateTemplate.py b/docker/scripts/generateTemplate.py
index 723bf86070..b79d25f8f3 100644
--- a/docker/scripts/generateTemplate.py
+++ b/docker/scripts/generateTemplate.py
@@ -82,47 +82,32 @@ def main():
with open(f'{inputfile}', mode='r') as inputfile, \
open(outputfile1, mode='w') as outputfile:
for line in inputfile:
- count = 0
if re.search(r'EHPLMN_LIST', line):
outputfile.write(line)
continue
- if re.search(r'sd = 0x1;', line):
- templine = re.sub(r'sd = 0x1;', 'sd = 0x@NSSAI_SD0@;', line)
- outputfile.write(templine)
- continue
- if re.search(r'sd = 0x010203;', line):
- templine = re.sub(r'sd = 0x010203;', 'sd = 0x@NSSAI_SD0@;', line)
- outputfile.write(templine)
- continue
- if re.search(r'sd = 0x112233;', line):
- templine = re.sub(r'sd = 0x112233;', 'sd = 0x@NSSAI_SD1@;', line)
- outputfile.write(templine)
- continue
+ templine = line
for key in config["config"]:
- if line.find(key["key"]) >= 0:
- count += 1
- if re.search(r'preference', line):
- templine = line
- elif re.search(r'mnc_length', line) and key["key"] == "mnc":
+ if templine.find(key["key"]) >= 0:
+ if re.search(r'preference', templine): # false positive
+ continue
+ if re.search(r'sdr_addrs', templine): # false positive
continue
- elif re.search(r'plmn_list', line):
- templine = re.sub(r'[0-9]+', '""', line)
- templine = re.sub(r'\"\"', key["env"]["mcc"], templine, 1)
- templine = re.sub(r'\"\"', key["env"]["mnc"], templine, 1)
- templine = re.sub(r'\"\"', key["env"]["mnc_length"], templine, 1)
elif re.search('downlink_frequency', line):
templine = re.sub(r'[0-9]+', key["env"], line)
elif re.search('uplink_frequency_offset', line):
templine = re.sub(r'[0-9]+', key["env"], line)
-
- elif re.search(r'"(.*?)"', line):
- templine = re.sub(r'(?<=")[^"]*(?=")', key["env"], line)
- elif re.search(r'[0-9]', line):
- templine = re.sub(r'\d+', key["env"], line)
- outputfile.write(templine)
-
- if count == 0:
- outputfile.write(line)
-
+ # next: matches key = ( "SOMETHING" ) or key = [ "SOMETHING" ]
+ elif re.search(key["key"] + "\s*=\s*[\(\[]\s*\"[0-9.a-zA-Z:_-]+\"\s*[\)\]]", templine):
+ templine = re.sub("(" + key["key"] + "\s*=\s*[\(\[]\s*\")[0-9.a-zA-Z:_-]+(\"[\)\]])",
+ r'\1' + key["env"] + r"\2", templine)
+ # next: matches key = "SOMETHING" or key = [SOMETHING],
+ elif re.search(key["key"] + "\s*=\s*[\"\[][0-9.a-zA-Z:_/-]+[\"\]]", templine):
+ templine = re.sub("(" + key["key"] + "\s*=\s*[\"\[])[0-9.a-zA-Z:_/-]+([\"\]])",
+ r'\1' + key["env"] + r"\2", templine)
+ # next: matches key = NUMBER
+ elif re.search(key["key"] + "\s*=\s*[x0-9]+", templine): # x for "0x" hex start
+ templine = re.sub("(" + key["key"] + "\s*=\s*(?:0x)?)[x0-9]+", r"\1" + key["env"], templine)
+ outputfile.write(templine)
+
if __name__ == "__main__":
main()
diff --git a/docker/scripts/gnb_parameters.yaml b/docker/scripts/gnb_parameters.yaml
index 420559ff3f..a7539daa69 100644
--- a/docker/scripts/gnb_parameters.yaml
+++ b/docker/scripts/gnb_parameters.yaml
@@ -32,11 +32,16 @@
env: "@GNB_NAME@"
- key: gNB_name
env: "@GNB_NAME@"
- - key: plmn_list
- env:
- mcc: "@MCC@"
- mnc: "@MNC@"
- mnc_length: "@MNC_LENGTH@"
+ - key: mcc
+ env: "@MCC@"
+ - key: mnc
+ env: "@MNC@"
+ - key: mnc_length
+ env: "@MNC_LENGTH@"
+ - key: sst
+ env: "@NSSAI_SST@"
+ - key: sd
+ env: "@NSSAI_SD@"
- key: tracking_area_code
env: "@TAC@"
- key: enable_x2
@@ -81,6 +86,8 @@
env: "@TAC@"
- key: sst
env: "@NSSAI_SST@"
+ - key: sd
+ env: "@NSSAI_SD@"
- key: ipv4
env: "@AMF_IP_ADDRESS@"
- key: GNB_INTERFACE_NAME_FOR_NG_AMF
@@ -141,6 +148,8 @@
env: "@TAC@"
- key: sst
env: "@NSSAI_SST@"
+ - key: sd
+ env: "@NSSAI_SD@"
- key: ipv4
env: "@AMF_IP_ADDRESS@"
- key: GNB_INTERFACE_NAME_FOR_NG_AMF
@@ -171,6 +180,8 @@
env: "@TAC@"
- key: sst
env: "@NSSAI_SST@"
+ - key: sd
+ env: "@NSSAI_SD@"
- key: ipv4
env: "@AMF_IP_ADDRESS@"
- key: GNB_INTERFACE_NAME_FOR_NG_AMF
@@ -209,6 +220,8 @@
env: "@TAC@"
- key: sst
env: "@NSSAI_SST@"
+ - key: sd
+ env: "@NSSAI_SD@"
- key: ipv4
env: "@AMF_IP_ADDRESS@"
- key: GNB_INTERFACE_NAME_FOR_NG_AMF
@@ -249,6 +262,8 @@
env: "@TAC@"
- key: sst
env: "@NSSAI_SST@"
+ - key: sd
+ env: "@NSSAI_SD@"
- key: ipv4
env: "@AMF_IP_ADDRESS@"
- key: GNB_INTERFACE_NAME_FOR_NG_AMF
diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c
index 8575a6cc1a..2686f35b16 100644
--- a/executables/nr-uesoftmodem.c
+++ b/executables/nr-uesoftmodem.c
@@ -509,8 +509,6 @@ int main( int argc, char **argv ) {
*mac->scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0]);
}
- init_symbol_rotation(&UE[CC_id]->frame_parms);
- init_timeshift_rotation(&UE[CC_id]->frame_parms);
init_nr_ue_vars(UE[CC_id], 0, abstraction_flag);
}
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
index 75a7ac67b1..205e107bf9 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
@@ -777,6 +777,7 @@ typedef struct {
} nfapi_nr_dl_tti_pdcch_pdu_rel15_t;
typedef struct {
+ uint8_t ldpcBaseGraph;
uint32_t tbSizeLbrmBytes;
}nfapi_v3_pdsch_maintenance_parameters_t;
@@ -1193,6 +1194,7 @@ typedef struct
#define PUSCH_PDU_BITMAP_DFTS_OFDM 0x8
typedef struct {
+ uint8_t ldpcBaseGraph;
uint32_t tbSizeLbrmBytes;
}nfapi_v3_pusch_maintenance_parameters_t;
diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index 02d75ca4d8..bff234bfbb 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -948,7 +948,11 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,
gNB_config->carrier_config.dl_bandwidth.value = config_bandwidth(mu, N_RB_DL, fp->nr_band);
nr_init_frame_parms(gNB_config, fp);
+
fp->ofdm_offset_divisor = UINT_MAX;
+ init_symbol_rotation(fp);
+ init_timeshift_rotation(fp);
+
gNB->configured = 1;
LOG_I(PHY,"gNB configured\n");
}
diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c
index 06a959b7f7..d19be8a234 100644
--- a/openair1/PHY/INIT/nr_init_ue.c
+++ b/openair1/PHY/INIT/nr_init_ue.c
@@ -553,6 +553,8 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
init_nr_prach_tables(839);
init_symbol_rotation(fp);
+ init_timeshift_rotation(fp);
+
return 0;
}
diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
index 1d6ff4603f..4133875139 100644
--- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
@@ -283,7 +283,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
pil = pilot + idxDC / 2 - 1;
ul_ch += idxDC - 2 ;
ul_ch = memset(ul_ch, 0, sizeof(*ul_ch)*5);
- re_offset = (re_offset+idxDC-1) % symbolSize;
+ re_offset = (re_offset + idxDC - 2) % symbolSize;
const c16_t ch=c16mulShift(*pil,
rxdataF[soffset+nushift+re_offset],
15);
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c
index dc1ed47e0f..c8b5af6ea5 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dci.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c
@@ -198,10 +198,10 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
int8_t cce_idx = reg_list_order[cce_count];
- for (int reg_in_cce_idx = 0; reg_in_cce_idx < NR_NB_REG_PER_CCE; reg_in_cce_idx+=pdcch_pdu_rel15->DurationSymbols) {
+ for (int reg_in_cce_idx = symbol_idx; reg_in_cce_idx < NR_NB_REG_PER_CCE; reg_in_cce_idx+=pdcch_pdu_rel15->DurationSymbols) {
k = cset_start_sc + cce_list[d][cce_idx].reg_list[reg_in_cce_idx].start_sc_idx;
- LOG_D(PHY,"CCE %d REG %d k %d\n",cce_idx,reg_in_cce_idx+symbol_idx,k);
+ LOG_D(PHY,"CCE %d REG %d k %d\n",cce_idx,reg_in_cce_idx,k);
if (k >= frame_parms->ofdm_symbol_size)
k -= frame_parms->ofdm_symbol_size;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
index e9d3010ce7..3d166fd87d 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
@@ -80,15 +80,15 @@ void nr_fill_cce_list(nr_cce_t cce_list[MAX_DCI_CORESET][NR_MAX_PDCCH_AGG_LEVEL]
LOG_D(PHY, "cce_idx %d\n", cce->cce_idx);
uint8_t j = cce->cce_idx;
- for (int k=6*j/bsize; k<(6*j/bsize+6/bsize); k++) { // loop over REG bundles
-
+ for (uint8_t bundle_idx=0; bundle_idxreg_list[reg_idx];
+ reg = &cce->reg_list[bundle_idx*bsize+reg_idx];
reg->reg_idx = bsize*f + reg_idx;
reg->start_sc_idx = (reg->reg_idx/dur) * NR_NB_SC_PER_RB;
- reg->symb_idx = reg_idx%dur;
+ reg->symb_idx = reg->reg_idx%dur;
LOG_D(PHY, "reg %d symbol %d start subcarrier %d\n", reg->reg_idx, reg->symb_idx, reg->start_sc_idx);
}
}
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
index af00abddc5..be2afed94d 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
@@ -375,14 +375,7 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
memcpy(harq->b, a, (A / 8) + 3); // using 3 bytes to mimic the case of 24 bit crc
}
- // target_code_rate is in 0.1 units
- float Coderate = (float) rel15->targetCodeRate[0] / 10240.0f;
- LOG_D(PHY,"DLSCH Coderate %f\n",Coderate);
-
- if ((A <=292) || ((A<=3824) && (Coderate <= 0.6667)) || Coderate <= 0.25)
- impp.BG = 2;
- else
- impp.BG = 1;
+ impp.BG = rel15->maintenance_parms_v3.ldpcBaseGraph;
start_meas(dlsch_segmentation_stats);
impp.Kb = nr_segmentation(harq->b, harq->c, harq->B, &impp.n_segments, &impp.K, impp.Zc, &impp.F, impp.BG);
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
index aa007790a1..e9038f25d8 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
@@ -380,7 +380,6 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
uint32_t r;
uint32_t r_offset;
uint32_t offset;
- int kc;
int E;
int8_t llrProcBuf[22*384];
int ret = 0;
@@ -462,8 +461,9 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
LOG_D(PHY,"ULSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_rb %d, Qm %d, Coderate %f RV %d round %d\n",
harq_pid, A, G, mcs, n_layers, nb_rb, Qm, Coderate, pusch_pdu->pusch_data.rv_index, harq_process->round);
- if ((A <=292) || ((A<=3824) && (Coderate <= 0.6667)) || Coderate <= 0.25){
- p_decParams->BG = 2;
+ p_decParams->BG = pusch_pdu->maintenance_parms_v3.ldpcBaseGraph;
+ int kc;
+ if (p_decParams->BG == 2){
kc = 52;
if (Coderate < 0.3333) {
p_decParams->R = 15;
@@ -475,7 +475,6 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
p_decParams->R = 23;
}
} else {
- p_decParams->BG = 1;
kc = 68;
if (Coderate < 0.6667) {
p_decParams->R = 13;
diff --git a/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c b/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
index 43944b2fa8..ae8b733301 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
@@ -261,19 +261,20 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
return 0;
}
-uint32_t calc_power_csirs(const uint16_t *x, const fapi_nr_dl_config_csirs_pdu_rel15_t *csirs_config_pdu) {
+uint32_t calc_power_csirs(const uint16_t *x, const fapi_nr_dl_config_csirs_pdu_rel15_t *csirs_config_pdu)
+{
uint64_t sum_x = 0;
uint64_t sum_x2 = 0;
uint16_t size = 0;
- for (int rb = csirs_config_pdu->start_rb; rb < (csirs_config_pdu->start_rb+csirs_config_pdu->nr_of_rbs); rb++) {
- if (csirs_config_pdu->freq_density <= 1 && csirs_config_pdu->freq_density != (rb % 2)) {
+ for (int rb = 0; rb < csirs_config_pdu->nr_of_rbs; rb++) {
+ if (csirs_config_pdu->freq_density <= 1 && csirs_config_pdu->freq_density != ((rb + csirs_config_pdu->start_rb) % 2)) {
continue;
}
- sum_x = sum_x + x[rb-csirs_config_pdu->start_rb];
- sum_x2 = sum_x2 + x[rb]*x[rb-csirs_config_pdu->start_rb];
+ sum_x = sum_x + x[rb];
+ sum_x2 = sum_x2 + x[rb] * x[rb];
size++;
}
- return sum_x2/size - (sum_x/size)*(sum_x/size);
+ return sum_x2 / size - (sum_x / size) * (sum_x / size);
}
int nr_csi_rs_channel_estimation(const PHY_VARS_NR_UE *ue,
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
index 64a70ba974..0087a307ef 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
@@ -236,7 +236,6 @@ void nr_processDLSegment(void* arg) {
int length_dec;
int no_iteration_ldpc;
int Kr;
- int Kr_bytes;
int K_bits_F;
uint8_t crc_type;
int i;
@@ -259,8 +258,7 @@ void nr_processDLSegment(void* arg) {
__m128i *pv = (__m128i*)&z;
__m128i *pl = (__m128i*)&l;
- Kr = harq_process->K; // [hna] overwrites this line "Kr = p_decParams->Z*kb"
- Kr_bytes = Kr>>3;
+ Kr = harq_process->K;
K_bits_F = Kr-harq_process->F;
t_nrLDPC_time_stats procTime = {0};
@@ -270,8 +268,7 @@ void nr_processDLSegment(void* arg) {
start_meas(&rdata->ts_deinterleave);
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_IN);
- int16_t w[E];
- memset(w, 0, sizeof(w));
+ int16_t w[E];
nr_deinterleaving_ldpc(E,
Qm,
w, // [hna] w is e
@@ -298,7 +295,7 @@ void nr_processDLSegment(void* arg) {
w,
harq_process->C,
harq_process->rvidx,
- (harq_process->first_rx==1)?1:0,
+ harq_process->first_rx,
E,
harq_process->F,
Kr-harq_process->F-2*(p_decoderParms->Z))==-1) {
@@ -310,8 +307,6 @@ void nr_processDLSegment(void* arg) {
}
stop_meas(&rdata->ts_rate_unmatch);
- r_offset += E;
-
if (LOG_DEBUGFLAG(DEBUG_DLSCH_DECOD)) {
LOG_D(PHY,"decoder input(segment %u) :",r);
@@ -321,8 +316,6 @@ void nr_processDLSegment(void* arg) {
LOG_D(PHY,"\n");
}
- memset(harq_process->c[r],0,Kr_bytes);
-
if (harq_process->C == 1) {
if (A > NR_MAX_PDSCH_TBS)
crc_type = CRC24_A;
@@ -360,21 +353,23 @@ void nr_processDLSegment(void* arg) {
&procTime);
//VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_OUT);
+ LOG_D(PHY,"no_iteration_ldpc = %d\n", no_iteration_ldpc);
// Fixme: correct type is unsigned, but nrLDPC_decoder and all called behind use signed int
if (check_crc((uint8_t *)llrProcBuf,length_dec,harq_process->F,crc_type)) {
LOG_D(PHY,"Segment %u CRC OK\n",r);
-
- if (r==0) {
- for (int i=0; i<10; i++) LOG_D(PHY,"byte %d : %x\n",i,((uint8_t *)llrProcBuf)[i]);
- }
-
- //Temporary hack
- no_iteration_ldpc = dlsch->max_ldpc_iterations;
- rdata->decodeIterations = no_iteration_ldpc;
+ if (no_iteration_ldpc > dlsch->max_ldpc_iterations)
+ no_iteration_ldpc = dlsch->max_ldpc_iterations;
} else {
LOG_D(PHY,"CRC NOT OK\n");
+ no_iteration_ldpc = dlsch->max_ldpc_iterations + 1;
}
+ if (r==0) {
+ for (int i=0; i<10; i++) LOG_D(PHY,"byte %d : %x\n",i,((uint8_t *)llrProcBuf)[i]);
+ }
+
+ rdata->decodeIterations = no_iteration_ldpc;
+
nb_total_decod++;
if (no_iteration_ldpc > dlsch->max_ldpc_iterations) {
@@ -524,7 +519,7 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
}
if (LOG_DEBUGFLAG(DEBUG_DLSCH_DECOD) && (!frame%100))
- LOG_I(PHY,"K %d C %d Z %d nl %d \n", harq_process->K, harq_process->C, p_decParams->Z, harq_process->Nl);
+ LOG_I(PHY,"K %d C %d Z %d nl %d \n", harq_process->K, harq_process->C, harq_process->Z, harq_process->Nl);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_SEGMENTATION, VCD_FUNCTION_OUT);
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
index 064d4db1af..aa2d617112 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
@@ -207,7 +207,6 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
{
int32_t sync_pos, sync_pos_frame; // k_ssb, N_ssb_crb, sync_pos2,
- int32_t accumulated_freq_offset = 0;
int32_t metric_tdd_ncp=0;
uint8_t phase_tdd_ncp;
double im, re;
@@ -258,8 +257,6 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
LOG_I(PHY,"sync_pos %d ssb_offset %d \n",sync_pos,ue->ssb_offset);
#endif
- accumulated_freq_offset += ue->common_vars.freq_offset;
-
// digital compensation of FFO for SSB symbols
if (ue->UE_fo_compensation){
double s_time = 1/(1.0e3*fp->samples_per_subframe); // sampling time
@@ -310,8 +307,6 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
int freq_offset_sss = 0;
ret = rx_sss_nr(ue, proc, &metric_tdd_ncp, &phase_tdd_ncp, &freq_offset_sss);
- accumulated_freq_offset += freq_offset_sss;
-
// digital compensation of FFO for SSB symbols
if (ue->UE_fo_compensation){
double s_time = 1/(1.0e3*fp->samples_per_subframe); // sampling time
@@ -334,6 +329,8 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
((short *)ue->common_vars.rxdata[ar])[2*n+1] = (short)(round(re*sin(n*off_angle) + im*cos(n*off_angle)));
}
}
+
+ ue->common_vars.freq_offset += freq_offset_sss;
}
if (ret==0) { //we got sss channel
@@ -603,8 +600,6 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
}
if (dec == false) // sib1 not decoded
ret = -1;
-
- ue->common_vars.freq_offset = accumulated_freq_offset;
}
// exit_fun("debug exit");
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_NR_INITIAL_UE_SYNC, VCD_FUNCTION_OUT);
diff --git a/openair1/PHY/TOOLS/nr_phy_scope.c b/openair1/PHY/TOOLS/nr_phy_scope.c
index d4b28361d2..73f9324570 100644
--- a/openair1/PHY/TOOLS/nr_phy_scope.c
+++ b/openair1/PHY/TOOLS/nr_phy_scope.c
@@ -323,7 +323,7 @@ static void timeSignal (OAIgraph_t *graph, PHY_VARS_gNB *phy_vars_gnb, RU_t *phy
*/
static void timeResponse (OAIgraph_t *graph, scopeData_t *p, int nb_UEs) {
- const int len=2*p->gNB->frame_parms.ofdm_symbol_size;
+ const int len=p->gNB->frame_parms.ofdm_symbol_size;
float *values, *time;
oai_xygraph_getbuff(graph, &time, &values, len, 0);
const int ant=0; // display antenna 0 for each UE
@@ -363,8 +363,10 @@ static void frequencyResponse (OAIgraph_t *graph, PHY_VARS_gNB *phy_vars_gnb, RU
*/
static void puschLLR (OAIgraph_t *graph, scopeData_t *p, int nb_UEs) {
- //int Qm = 2;
- int coded_bits_per_codeword =3*8*6144+12; // (8*((3*8*6144)+12)); // frame_parms->N_RB_UL*12*Qm*frame_parms->symbols_per_tti;
+ NR_DL_FRAME_PARMS *frame_parms=&p->gNB->frame_parms;
+ int num_re = frame_parms->N_RB_UL*12*frame_parms->symbols_per_slot;
+ int Qm = 2;
+ int coded_bits_per_codeword = num_re*Qm;
for (int ue=0; uegNB->pusch_vars &&
diff --git a/openair1/SIMULATION/NR_PHY/dlschsim.c b/openair1/SIMULATION/NR_PHY/dlschsim.c
index 498efa28d9..f429409d5a 100644
--- a/openair1/SIMULATION/NR_PHY/dlschsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlschsim.c
@@ -84,45 +84,45 @@ nrUE_params_t *get_nrUE_params(void) {
int main(int argc, char **argv)
{
- char c;
- int i; //,j,l,aa;
- double SNR, SNR_lin, snr0 = -2.0, snr1 = 2.0;
- double snr_step = 0.1;
- uint8_t snr1set = 0;
- int **txdata;
- double **s_re, **s_im, **r_re, **r_im;
- // int sync_pos, sync_pos_slot;
- // FILE *rx_frame_file;
- FILE *output_fd = NULL;
- //uint8_t write_output_file = 0;
- // int subframe_offset;
- // char fname[40], vname[40];
- int trial, n_trials = 1, n_errors = 0, n_false_positive = 0;
- uint8_t n_tx = 1, n_rx = 1;
- //uint8_t transmission_mode = 1;
- uint16_t Nid_cell = 0;
- channel_desc_t *gNB2UE;
- uint8_t extended_prefix_flag = 0;
- //int8_t interf1 = -21, interf2 = -21;
- FILE *input_fd = NULL, *pbch_file_fd = NULL;
- //char input_val_str[50],input_val_str2[50];
- //uint16_t NB_RB=25;
- SCM_t channel_model = AWGN; //Rayleigh1_anticorr;
- uint16_t N_RB_DL = 106, mu = 1;
- //unsigned char frame_type = 0;
- unsigned char pbch_phase = 0;
- int frame = 0, slot = 0;
- int frame_length_complex_samples;
- //int frame_length_complex_samples_no_prefix;
- NR_DL_FRAME_PARMS *frame_parms;
- uint8_t Kmimo = 0;
- uint32_t Nsoft = 0;
- double sigma;
- unsigned char qbits = 8;
- int ret;
- //int run_initial_sync=0;
- int loglvl = OAILOG_WARNING;
- uint8_t dlsch_threads = 0;
+ char c;
+ int i; //,j,l,aa;
+ double SNR, SNR_lin, snr0 = -2.0, snr1 = 2.0;
+ double snr_step = 0.1;
+ uint8_t snr1set = 0;
+ int **txdata;
+ double **s_re, **s_im, **r_re, **r_im;
+ // int sync_pos, sync_pos_slot;
+ // FILE *rx_frame_file;
+ FILE *output_fd = NULL;
+ //uint8_t write_output_file = 0;
+ // int subframe_offset;
+ // char fname[40], vname[40];
+ int trial, n_trials = 1, n_errors = 0, n_false_positive = 0;
+ uint8_t n_tx = 1, n_rx = 1;
+ //uint8_t transmission_mode = 1;
+ uint16_t Nid_cell = 0;
+ channel_desc_t *gNB2UE;
+ uint8_t extended_prefix_flag = 0;
+ //int8_t interf1 = -21, interf2 = -21;
+ FILE *input_fd = NULL, *pbch_file_fd = NULL;
+ //char input_val_str[50],input_val_str2[50];
+ //uint16_t NB_RB=25;
+ SCM_t channel_model = AWGN; //Rayleigh1_anticorr;
+ uint16_t N_RB_DL = 106, mu = 1;
+ //unsigned char frame_type = 0;
+ unsigned char pbch_phase = 0;
+ int frame = 0, slot = 0;
+ int frame_length_complex_samples;
+ //int frame_length_complex_samples_no_prefix;
+ NR_DL_FRAME_PARMS *frame_parms;
+ uint8_t Kmimo = 0;
+ uint32_t Nsoft = 0;
+ double sigma;
+ unsigned char qbits = 8;
+ int ret;
+ //int run_initial_sync=0;
+ int loglvl = OAILOG_WARNING;
+ uint8_t dlsch_threads = 0;
float target_error_rate = 0.01;
uint64_t SSB_positions=0x01;
uint16_t nb_symb_sch = 12;
@@ -468,6 +468,7 @@ int main(int argc, char **argv)
rel15->mcsIndex[0] = Imcs;
rel15->numDmrsCdmGrpsNoData = 1;
rel15->maintenance_parms_v3.tbSizeLbrmBytes = Tbslbrm;
+ rel15->maintenance_parms_v3.ldpcBaseGraph = get_BG(TBS, rate);
double modulated_input[16 * 68 * 384]; // [hna] 16 segments, 68*Zc
short channel_output_fixed[16 * 68 * 384];
//unsigned char *estimated_output;
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index 7e141fae57..4836a570f3 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -327,6 +327,7 @@ void nr_dlsim_preprocessor(module_id_t module_id,
sched_pdsch->rbStart = g_rbStart;
sched_pdsch->rbSize = g_rbSize;
sched_pdsch->mcs = g_mcsIndex;
+ sched_pdsch->nrOfLayers = g_nrOfLayers;
/* the following might override the table that is mandated by RRC
* configuration */
current_BWP->mcsTableIdx = g_mcsTableIdx;
@@ -1429,6 +1430,7 @@ int main(int argc, char **argv)
if (UE->frame_parms.nb_antennas_rx>1)
LOG_M("rxsig1.m","rxs1", UE->common_vars.rxdata[1], frame_length_complex_samples, 1, 1);
LOG_M("rxF0.m","rxF0", UE->common_vars.common_vars_rx_data_per_thread[UE_proc.thread_id].rxdataF[0], frame_parms->samples_per_slot_wCP, 1, 1);
+ LOG_M("rxF_ext.m","rxFe",&UE->pdsch_vars[0][0]->rxdataF_ext[0][0],g_rbSize*12*14,1,1);
LOG_M("chestF0.m","chF0",&UE->pdsch_vars[0][0]->dl_ch_estimates_ext[0][0],g_rbSize*12*14,1,1);
write_output("rxF_comp.m","rxFc",&UE->pdsch_vars[0][0]->rxdataF_comp0[0][0],N_RB_DL*12*14,1,1);
LOG_M("rxF_llr.m","rxFllr",UE->pdsch_vars[UE_proc.thread_id][0]->llr[0],available_bits,1,0);
diff --git a/openair1/SIMULATION/NR_PHY/ulschsim.c b/openair1/SIMULATION/NR_PHY/ulschsim.c
index da0cc7bc80..6ef8bff116 100644
--- a/openair1/SIMULATION/NR_PHY/ulschsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulschsim.c
@@ -472,6 +472,7 @@ int main(int argc, char **argv)
rel15_ul->nrOfLayers = Nl;
rel15_ul->target_code_rate = code_rate;
rel15_ul->pusch_data.tb_size = TBS>>3;
+ rel15_ul->maintenance_parms_v3.ldpcBaseGraph = get_BG(TBS, code_rate);
///////////////////////////////////////////////////
double modulated_input[16 * 68 * 384]; // [hna] 16 segments, 68*Zc
diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c
index 087b3be6a8..43ac3fc145 100644
--- a/openair1/SIMULATION/NR_PHY/ulsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulsim.c
@@ -1135,7 +1135,7 @@ int main(int argc, char **argv)
pusch_pdu->bwp_size = abwp_size;
}
- pusch_pdu->pusch_data.tb_size = TBS/8;
+ pusch_pdu->pusch_data.tb_size = TBS>>3;
pusch_pdu->pdu_bit_map = pdu_bit_map;
pusch_pdu->rnti = n_rnti;
pusch_pdu->mcs_index = Imcs;
@@ -1168,6 +1168,7 @@ int main(int argc, char **argv)
pusch_pdu->pusch_ptrs.ptrs_freq_density = ptrs_freq_density;
pusch_pdu->pusch_ptrs.ptrs_ports_list = (nfapi_nr_ptrs_ports_t *) malloc(2*sizeof(nfapi_nr_ptrs_ports_t));
pusch_pdu->pusch_ptrs.ptrs_ports_list[0].ptrs_re_offset = 0;
+ pusch_pdu->maintenance_parms_v3.ldpcBaseGraph = get_BG(TBS, code_rate);
// if transform precoding is enabled
if (transform_precoding == transformPrecoder_enabled) {
diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c
index ff6f39e94f..5b73995d28 100644
--- a/openair2/GNB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -1561,9 +1561,10 @@ int RCconfig_NR_NG(MessageDef *msg_p, uint32_t i) {
NGAP_REGISTER_GNB_REQ (msg_p).num_nssai[l] = SNSSAIParamList.numelt;
for (int s = 0; s < SNSSAIParamList.numelt; ++s) {
- NGAP_REGISTER_GNB_REQ (msg_p).s_nssai[l][s].sST = *SNSSAIParamList.paramarray[s][GNB_SLICE_SERIVE_TYPE_IDX].uptr;
+ NGAP_REGISTER_GNB_REQ (msg_p).s_nssai[l][s].sST = *SNSSAIParamList.paramarray[s][GNB_SLICE_SERVICE_TYPE_IDX].uptr;
NGAP_REGISTER_GNB_REQ (msg_p).s_nssai[l][s].sD_flag = 0;
- if(*SNSSAIParamList.paramarray[s][GNB_SLICE_DIFFERENTIATOR_IDX].uptr != 0) {
+ if(SNSSAIParamList.paramarray[s][GNB_SLICE_DIFFERENTIATOR_IDX].uptr != 0 // SD is optional
+ && *SNSSAIParamList.paramarray[s][GNB_SLICE_DIFFERENTIATOR_IDX].uptr != 0xffffff) { // 0xffffff is "no SD", see 23.003 Sec 28.4.2
NGAP_REGISTER_GNB_REQ (msg_p).s_nssai[l][s].sD_flag = 1;
NGAP_REGISTER_GNB_REQ (msg_p).s_nssai[l][s].sD[0] = (*SNSSAIParamList.paramarray[s][GNB_SLICE_DIFFERENTIATOR_IDX].uptr & 0xFF0000) >> 16;
NGAP_REGISTER_GNB_REQ (msg_p).s_nssai[l][s].sD[1] = (*SNSSAIParamList.paramarray[s][GNB_SLICE_DIFFERENTIATOR_IDX].uptr & 0x00FF00) >> 8;
diff --git a/openair2/GNB_APP/gnb_paramdef.h b/openair2/GNB_APP/gnb_paramdef.h
index ef28dea80f..0b94bc4bb5 100644
--- a/openair2/GNB_APP/gnb_paramdef.h
+++ b/openair2/GNB_APP/gnb_paramdef.h
@@ -245,23 +245,24 @@ typedef enum {
#define GNB_CONFIG_STRING_SNSSAI_LIST "snssaiList"
-#define GNB_CONFIG_STRING_SLICE_SERIVE_TYPE "sst"
+#define GNB_CONFIG_STRING_SLICE_SERVICE_TYPE "sst"
#define GNB_CONFIG_STRING_SLICE_DIFFERENTIATOR "sd"
-#define GNB_SLICE_SERIVE_TYPE_IDX 0
+#define GNB_SLICE_SERVICE_TYPE_IDX 0
#define GNB_SLICE_DIFFERENTIATOR_IDX 1
#define GNBSNSSAIPARAMS_DESC { \
-/* optname helpstr paramflags XXXptr def val type numelt */ \
- {GNB_CONFIG_STRING_SLICE_SERIVE_TYPE, "slice serive type", 0, uptr:NULL, defuintval:1, TYPE_UINT, 0}, \
- {GNB_CONFIG_STRING_SLICE_DIFFERENTIATOR, "slice differentiator", 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
+/* optname helpstr paramflags XXXptr def val type numelt */ \
+ {GNB_CONFIG_STRING_SLICE_SERVICE_TYPE, "slice service type", 0, uptr:NULL, defuintval:1, TYPE_UINT, 0}, \
+ {GNB_CONFIG_STRING_SLICE_DIFFERENTIATOR, "slice differentiator", 0, uptr:NULL, defuintval:0xffffff, TYPE_UINT, 0}, \
}
-#define SLICE_SERIVE_TYPE_OKRANGES {1,2,3,4}
+#define SLICE_SERVICE_TYPE_OKRANGE {0, 255}
+#define SLICE_DIFFERENTIATOR_TYPE_OKRANGE {0, 0xffffff}
#define SNSSAIPARAMS_CHECK { \
- { .s1 = { config_check_intval, SLICE_SERIVE_TYPE_OKRANGES, 4 } }, \
- { .s5 = { NULL } }, \
+ { .s2 = { config_check_intrange, SLICE_SERVICE_TYPE_OKRANGE } }, \
+ { .s2 = { config_check_intrange, SLICE_DIFFERENTIATOR_TYPE_OKRANGE } }, \
}
/* AMF configuration parameters section name */
diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
index 379823fc6a..9f1e0099a6 100644
--- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
@@ -3498,6 +3498,15 @@ void csi_period_offset(NR_CSI_ReportConfig_t *csirep,
}
}
+uint8_t get_BG(uint32_t A, uint16_t R) {
+
+ float code_rate = (float) R / 10240.0f;
+ if ((A <=292) || ((A<=3824) && (code_rate <= 0.6667)) || code_rate <= 0.25)
+ return 2;
+ else
+ return 1;
+}
+
uint32_t get_Y(NR_SearchSpace_t *ss, int slot, rnti_t rnti) {
if(ss->searchSpaceType->present == NR_SearchSpace__searchSpaceType_PR_common)
@@ -3571,7 +3580,7 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD
// type0-pdcch coreset
switch( ((int)scs_ssb << 3) | (int)scs_pdcch ){
- case (NR_SubcarrierSpacing_kHz15 << 5) | NR_SubcarrierSpacing_kHz15:
+ case (NR_SubcarrierSpacing_kHz15 << 3) | NR_SubcarrierSpacing_kHz15:
AssertFatal(index_4msb < 15, "38.213 Table 13-1 4 MSB out of range\n");
type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern = 1;
type0_PDCCH_CSS_config->num_rbs = table_38213_13_1_c2[index_4msb];
diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
index 294c306fd0..d45c01b4b0 100644
--- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
@@ -40,6 +40,8 @@
uint32_t get_Y(NR_SearchSpace_t *ss, int slot, rnti_t rnti);
+uint8_t get_BG(uint32_t A, uint16_t R);
+
uint64_t from_nrarfcn(int nr_bandP, uint8_t scs_index, uint32_t dl_nrarfcn);
uint32_t to_nrarfcn(int nr_bandP, uint64_t dl_CarrierFreq, uint8_t scs_index, uint32_t bw);
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
index 780c47057e..a368ba4e32 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
@@ -133,6 +133,9 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
gNB->tdd_beam_association[i] = -1;
}
+ gNB->frame = frame;
+ gNB->slot = slot;
+
start_meas(&RC.nrmac[module_idP]->eNB_scheduler);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ULSCH_SCHEDULER,VCD_FUNCTION_IN);
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
index 5d4b3e7cd3..2d8dd574e3 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
@@ -458,18 +458,18 @@ void nr_schedule_msg2(uint16_t rach_frame, uint16_t rach_slot,
// slot and frame limit to transmit msg2 according to response window
uint8_t slot_limit = (rach_slot + slot_window)%nr_slots_per_frame[mu];
- uint16_t frame_limit = (slot_limit>(rach_slot))? rach_frame : (rach_frame +1);
+ uint16_t frame_limit = rach_frame + (rach_slot + slot_window)/nr_slots_per_frame[mu];
// computing start of next period
-
- int FR = *scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0] >= 257 ? nr_FR2 : nr_FR1;
-
uint8_t start_next_period = rach_slot-(rach_slot%tdd_period_slot)+tdd_period_slot;
int eff_slot = start_next_period + last_dl_slot_period; // initializing scheduling of slot to next mixed (or last dl) slot
+
// we can't schedule msg2 before sl_ahead since prach
while ((eff_slot-rach_slot)<=sl_ahead) {
eff_slot += tdd_period_slot;
}
+
+ int FR = *scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0] >= 257 ? nr_FR2 : nr_FR1;
if (FR==nr_FR2) {
int num_tdd_period = (eff_slot%nr_slots_per_frame[mu])/tdd_period_slot;
while((tdd_beam_association[num_tdd_period]!=-1)&&(tdd_beam_association[num_tdd_period]!=beam_index)) {
@@ -480,8 +480,9 @@ void nr_schedule_msg2(uint16_t rach_frame, uint16_t rach_slot,
tdd_beam_association[num_tdd_period] = beam_index;
}
- *msg2_frame=(rach_frame + eff_slot/nr_slots_per_frame[mu])%1024;
- *msg2_slot=eff_slot%nr_slots_per_frame[mu];
+ *msg2_frame = rach_frame + eff_slot / nr_slots_per_frame[mu];
+ *msg2_slot = eff_slot % nr_slots_per_frame[mu];
+
// go to previous slot if the current scheduled slot is beyond the response window
// and if the slot is not among the PDCCH monitored ones (38.213 10.1)
while (*msg2_frame > frame_limit
@@ -490,10 +491,7 @@ void nr_schedule_msg2(uint16_t rach_frame, uint16_t rach_slot,
if((frame_type == FDD) || ((*msg2_slot%tdd_period_slot) > 0)) {
if (*msg2_slot==0) {
- if(*msg2_frame != 0)
- (*msg2_frame)--;
- else
- *msg2_frame = 1023;
+ (*msg2_frame)--;
*msg2_slot = nr_slots_per_frame[mu] - 1;
}
else
@@ -502,6 +500,9 @@ void nr_schedule_msg2(uint16_t rach_frame, uint16_t rach_slot,
else
AssertFatal(1==0,"No available DL slot to schedule msg2 has been found");
}
+
+ // calculate frame number considering wrap-around
+ *msg2_frame = *msg2_frame % 1024;
}
@@ -1057,6 +1058,8 @@ void fill_msg3_pusch_pdu(nfapi_nr_pusch_pdu_t *pusch_pdu,
pusch_pdu->mcs_index = mcsindex;
pusch_pdu->pusch_data.tb_size = TBS;
+ pusch_pdu->maintenance_parms_v3.ldpcBaseGraph = get_BG(TBS<<3,R);
+
}
}
@@ -1322,6 +1325,7 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
pdsch_pdu_rel15->maintenance_parms_v3.tbSizeLbrmBytes = nr_compute_tbslbrm(mcsTableIdx,
bw_tbslbrm,
1);
+ pdsch_pdu_rel15->maintenance_parms_v3.ldpcBaseGraph = get_BG(TBS<<3,R);
// Fill PDCCH DL DCI PDU
nfapi_nr_dl_dci_pdu_t *dci_pdu = &pdcch_pdu_rel15->dci_pdu[pdcch_pdu_rel15->numDlDci];
@@ -1674,7 +1678,8 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
pdsch_pdu_rel15->NrOfCodewords = 1;
int R = nr_get_code_rate_dl(mcsIndex,mcsTableIdx);
pdsch_pdu_rel15->targetCodeRate[0] = R;
- pdsch_pdu_rel15->qamModOrder[0] = 2;
+ int Qm = nr_get_Qm_dl(mcsIndex, mcsTableIdx);
+ pdsch_pdu_rel15->qamModOrder[0] = Qm;
pdsch_pdu_rel15->mcsIndex[0] = mcsIndex;
pdsch_pdu_rel15->mcsTable[0] = mcsTableIdx;
pdsch_pdu_rel15->rvIndex[0] = nr_rv_round_map[harq->round%4];
@@ -1703,6 +1708,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
pdsch_pdu_rel15->maintenance_parms_v3.tbSizeLbrmBytes = nr_compute_tbslbrm(mcsTableIdx,
bw_tbslbrm,
1);
+ pdsch_pdu_rel15->maintenance_parms_v3.ldpcBaseGraph = get_BG(harq->tb_size<<3,R);
pdsch_pdu_rel15->precodingAndBeamforming.num_prgs=1;
pdsch_pdu_rel15->precodingAndBeamforming.prg_size=275;
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
index 90d0af946a..3895ffe42c 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
@@ -433,10 +433,10 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
pdsch_pdu_rel15->CyclicPrefix = 0;
pdsch_pdu_rel15->NrOfCodewords = 1;
- pdsch_pdu_rel15->targetCodeRate[0] = nr_get_code_rate_dl(gNB_mac->sched_ctrlCommon->sched_pdsch.mcs, 0);
- pdsch_pdu_rel15->qamModOrder[0] = 2;
+ pdsch_pdu_rel15->targetCodeRate[0] = nr_get_code_rate_dl(gNB_mac->sched_ctrlCommon->sched_pdsch.mcs, mcsTableIdx);
+ pdsch_pdu_rel15->qamModOrder[0] = nr_get_Qm_dl(gNB_mac->sched_ctrlCommon->sched_pdsch.mcs, mcsTableIdx);
pdsch_pdu_rel15->mcsIndex[0] = gNB_mac->sched_ctrlCommon->sched_pdsch.mcs;
- pdsch_pdu_rel15->mcsTable[0] = 0;
+ pdsch_pdu_rel15->mcsTable[0] = mcsTableIdx;
pdsch_pdu_rel15->rvIndex[0] = 0;
pdsch_pdu_rel15->dataScramblingId = *scc->physCellId;
pdsch_pdu_rel15->nrOfLayers = 1;
@@ -451,10 +451,7 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
pdsch_pdu_rel15->rbStart = gNB_mac->sched_ctrlCommon->sched_pdsch.rbStart;
pdsch_pdu_rel15->rbSize = gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize;
pdsch_pdu_rel15->VRBtoPRBMapping = 0;
- pdsch_pdu_rel15->qamModOrder[0] = nr_get_Qm_dl(gNB_mac->sched_ctrlCommon->sched_pdsch.mcs,
- mcsTableIdx);
pdsch_pdu_rel15->TBSize[0] = TBS;
- pdsch_pdu_rel15->mcsTable[0] = mcsTableIdx;
pdsch_pdu_rel15->StartSymbolIndex = StartSymbolIndex;
pdsch_pdu_rel15->NrOfSymbols = NrOfSymbols;
pdsch_pdu_rel15->dlDmrsSymbPos = dlDmrsSymbPos;
@@ -465,6 +462,7 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
pdsch_pdu_rel15->maintenance_parms_v3.tbSizeLbrmBytes = nr_compute_tbslbrm(0,
pdsch_pdu_rel15->BWPSize,
1);
+ pdsch_pdu_rel15->maintenance_parms_v3.ldpcBaseGraph = get_BG(TBS<<3,pdsch_pdu_rel15->targetCodeRate[0]);
/* Fill PDCCH DL DCI PDU */
nfapi_nr_dl_dci_pdu_t *dci_pdu = &pdcch_pdu_rel15->dci_pdu[pdcch_pdu_rel15->numDlDci];
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
index ac0111acc4..597477c3d3 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
@@ -896,6 +896,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
NR_sched_pdsch_t *sched_pdsch = &sched_ctrl->sched_pdsch;
UE->mac_stats.dl.current_bytes = 0;
+ UE->mac_stats.dl.current_rbs = 0;
NR_CellGroupConfig_t *cg = UE->CellGroup;
/* update TA and set ta_apply every 10 frames.
@@ -1070,6 +1071,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
pdsch_pdu->maintenance_parms_v3.tbSizeLbrmBytes = nr_compute_tbslbrm(current_BWP->mcsTableIdx,
bw_tbslbrm,
nl_tbslbrm);
+ pdsch_pdu->maintenance_parms_v3.ldpcBaseGraph = get_BG(TBS<<3,R);
NR_PDSCH_Config_t *pdsch_Config = current_BWP->pdsch_Config;
@@ -1195,6 +1197,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
current_harq_pid);
T(T_GNB_MAC_RETRANSMISSION_DL_PDU_WITH_DATA, T_INT(module_id), T_INT(CC_id), T_INT(rnti),
T_INT(frame), T_INT(slot), T_INT(current_harq_pid), T_INT(harq->round), T_BUFFER(harq->transportBlock, TBS));
+ UE->mac_stats.dl.total_rbs_retx += sched_pdsch->rbSize;
} else { /* initial transmission */
LOG_D(NR_MAC, "[%s] Initial HARQ transmission in %d.%d\n", __FUNCTION__, frame, slot);
uint8_t *buf = (uint8_t *) harq->transportBlock;
@@ -1210,6 +1213,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
int dlsch_total_bytes = 0;
/* next, get RLC data */
start_meas(&gNB_mac->rlc_data_req);
+ int sdus = 0;
if (sched_ctrl->num_total_bytes > 0) {
/* loop over all activated logical channels */
@@ -1261,6 +1265,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
buf += len+sizeof(NR_MAC_SUBHEADER_LONG);
dlsch_total_bytes += len;
lcid_bytes += len;
+ sdus += 1;
}
UE->mac_stats.dl.lc_bytes[lcid] += lcid_bytes;
@@ -1288,6 +1293,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
}
for (; buf < bufEnd; buf++)
*buf = lrand48() & 0xff;
+ sdus +=1;
}
}
@@ -1305,6 +1311,10 @@ void nr_schedule_ue_spec(module_id_t module_id,
UE->mac_stats.dl.total_bytes += TBS;
UE->mac_stats.dl.current_bytes = TBS;
+ UE->mac_stats.dl.total_rbs += sched_pdsch->rbSize;
+ UE->mac_stats.dl.num_mac_sdu += sdus;
+ UE->mac_stats.dl.current_rbs = sched_pdsch->rbSize;
+
/* save retransmission information */
harq->sched_pdsch = *sched_pdsch;
/* save which time allocation has been used, to be used on
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
index 348422749a..e991c2450a 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
@@ -214,6 +214,7 @@ uint8_t get_mcs_from_cqi(int mcs_table, int cqi_table, int cqi_idx)
return 9;
}
+
void set_dl_dmrs_ports(NR_pdsch_semi_static_t *ps) {
//TODO first basic implementation of dmrs port selection
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index 4130bbfd40..74b4291ef6 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -53,6 +53,32 @@ const int get_ul_tda(const gNB_MAC_INST *nrmac, const NR_ServingCellConfigCommon
return 0; // if FDD or not mixed slot in TDD, for now use default TDA (TODO handle CSI-RS slots)
}
+int compute_bw_factor(int mu, int rb) {
+ // 38.213 7.1.1
+ return (10 * log10(rb << mu));
+}
+
+int compute_delta_tf(int tbs_bits,
+ int rb,
+ int n_layers,
+ int n_symbols,
+ int n_dmrs,
+ long *deltaMCS) {
+
+ // 38.213 7.1.1
+ // if the PUSCH transmission is over more than one layer delta_tf = 0
+ if(deltaMCS == NULL || n_layers>1)
+ return 0;
+ else
+ AssertFatal(1==0,"Compute DeltaTF not yet fully supported\n");
+
+ const int n_re = (NR_NB_SC_PER_RB * n_symbols - n_dmrs) * rb;
+ const int BPRE = tbs_bits/n_re; //TODO change for PUSCH with CSI
+ const float f = pow(2, (float) BPRE * 1.25);
+ const float beta = 1.0f; //TODO change for PUSCH with CSI
+ return(10 * log10((f - 1) * beta));
+}
+
// For both UL-SCH except:
// - UL-SCH: fixed-size MAC CE(known by LCID)
// - UL-SCH: padding
@@ -77,317 +103,324 @@ const int get_ul_tda(const gNB_MAC_INST *nrmac, const NR_ServingCellConfigCommon
// F: length of L is 0:8 or 1:16 bits wide
// R: Reserved bit, set to zero.
-int nr_process_mac_pdu( instance_t module_idP,
- NR_UE_info_t* UE,
- uint8_t CC_id,
- frame_t frameP,
- sub_frame_t slot,
- uint8_t *pduP,
- int pdu_len)
+int nr_process_mac_pdu(instance_t module_idP,
+ NR_UE_info_t* UE,
+ uint8_t CC_id,
+ frame_t frameP,
+ sub_frame_t slot,
+ uint8_t *pduP,
+ int pdu_len,
+ const int8_t harq_pid)
{
+ uint8_t done = 0;
- uint8_t done = 0;
+ int sdus = 0;
+ NR_UE_UL_BWP_t *ul_bwp = &UE->current_UL_BWP;
+ NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl;
- NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl;
+ if (pduP[0] != UL_SCH_LCID_PADDING)
+ trace_NRpdu(DIRECTION_UPLINK, pduP, pdu_len, WS_C_RNTI, UE->rnti, frameP, 0, 0, 0);
- if ( pduP[0] != UL_SCH_LCID_PADDING )
- trace_NRpdu(DIRECTION_UPLINK, pduP, pdu_len, WS_C_RNTI, UE->rnti, frameP, 0, 0, 0);
+#ifdef ENABLE_MAC_PAYLOAD_DEBUG
+ LOG_I(NR_MAC, "In %s: dumping MAC PDU in %d.%d:\n", __func__, frameP, slot);
+ log_dump(NR_MAC, pduP, pdu_len, LOG_DUMP_CHAR, "\n");
+#endif
- #ifdef ENABLE_MAC_PAYLOAD_DEBUG
- LOG_I(NR_MAC, "In %s: dumping MAC PDU in %d.%d:\n", __func__, frameP, slot);
- log_dump(NR_MAC, pduP, pdu_len, LOG_DUMP_CHAR, "\n");
- #endif
+ while (!done && pdu_len > 0){
+ uint16_t mac_len=0;
+ uint16_t mac_subheader_len=sizeof(NR_MAC_SUBHEADER_FIXED);
+ uint8_t rx_lcid = ((NR_MAC_SUBHEADER_FIXED *)pduP)->LCID;
- while (!done && pdu_len > 0){
- uint16_t mac_len=0;
- uint16_t mac_subheader_len=sizeof(NR_MAC_SUBHEADER_FIXED);
- uint8_t rx_lcid = ((NR_MAC_SUBHEADER_FIXED *)pduP)->LCID;
+ LOG_D(NR_MAC, "In %s: received UL-SCH sub-PDU with LCID 0x%x in %d.%d (remaining PDU length %d)\n", __func__, rx_lcid, frameP, slot, pdu_len);
- LOG_D(NR_MAC, "In %s: received UL-SCH sub-PDU with LCID 0x%x in %d.%d (remaining PDU length %d)\n", __func__, rx_lcid, frameP, slot, pdu_len);
+ unsigned char *ce_ptr;
+ int n_Lcg = 0;
- unsigned char *ce_ptr;
- int n_Lcg = 0;
-
- switch(rx_lcid){
- // MAC CE
-
- /*#ifdef DEBUG_HEADER_PARSING
- LOG_D(NR_MAC, "[UE] LCID %d, PDU length %d\n", ((NR_MAC_SUBHEADER_FIXED *)pduP)->LCID, pdu_len);
- #endif*/
- case UL_SCH_LCID_RECOMMENDED_BITRATE_QUERY:
- // 38.321 Ch6.1.3.20
- mac_len = 2;
- break;
- case UL_SCH_LCID_CONFIGURED_GRANT_CONFIRMATION:
- // 38.321 Ch6.1.3.7
- break;
-
- case UL_SCH_LCID_S_BSR:
- case UL_SCH_LCID_S_TRUNCATED_BSR:
- //38.321 section 6.1.3.1
- //fixed length
- mac_len =1;
- /* Extract short BSR value */
- ce_ptr = &pduP[mac_subheader_len];
- NR_BSR_SHORT *bsr_s = (NR_BSR_SHORT *) ce_ptr;
- sched_ctrl->estimated_ul_buffer = 0;
- sched_ctrl->estimated_ul_buffer = NR_SHORT_BSR_TABLE[bsr_s->Buffer_size];
- LOG_D(NR_MAC,
- "SHORT BSR at %4d.%2d, LCG ID %d, BS Index %d, BS value < %d, est buf %d\n",
- frameP,
- slot,
- bsr_s->LcgID,
- bsr_s->Buffer_size,
- NR_SHORT_BSR_TABLE[bsr_s->Buffer_size],
- sched_ctrl->estimated_ul_buffer);
- break;
-
- case UL_SCH_LCID_L_BSR:
- case UL_SCH_LCID_L_TRUNCATED_BSR:
- //38.321 section 6.1.3.1
- //variable length
- /* Several checks have been added to this function to
- ensure that the casting of the pduP is possible. There seems
- to be a partial PDU at the end of this buffer, so here
- we gracefully ignore that by returning 0. See:
- https://gitlab.eurecom.fr/oai/openairinterface5g/-/issues/534 */
- if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len))
- return 0;
- /* Extract long BSR value */
- ce_ptr = &pduP[mac_subheader_len];
- NR_BSR_LONG *bsr_l = (NR_BSR_LONG *) ce_ptr;
- sched_ctrl->estimated_ul_buffer = 0;
-
- n_Lcg = bsr_l->LcgID7 + bsr_l->LcgID6 + bsr_l->LcgID5 + bsr_l->LcgID4 +
- bsr_l->LcgID3 + bsr_l->LcgID2 + bsr_l->LcgID1 + bsr_l->LcgID0;
-
- LOG_D(NR_MAC, "LONG BSR, LCG ID(7-0) %d/%d/%d/%d/%d/%d/%d/%d\n",
- bsr_l->LcgID7, bsr_l->LcgID6, bsr_l->LcgID5, bsr_l->LcgID4,
- bsr_l->LcgID3, bsr_l->LcgID2, bsr_l->LcgID1, bsr_l->LcgID0);
-
- for (int n = 0; n < n_Lcg; n++){
- LOG_D(NR_MAC, "LONG BSR, %d/%d (n/n_Lcg), BS Index %d, BS value < %d",
- n, n_Lcg, pduP[mac_subheader_len + 1 + n],
- NR_LONG_BSR_TABLE[pduP[mac_subheader_len + 1 + n]]);
- sched_ctrl->estimated_ul_buffer +=
- NR_LONG_BSR_TABLE[pduP[mac_subheader_len + 1 + n]];
- LOG_D(NR_MAC,
- "LONG BSR at %4d.%2d, %d/%d (n/n_Lcg), BS Index %d, BS value < %d, total %d\n",
- frameP,
- slot,
- n,
- n_Lcg,
- pduP[mac_subheader_len + 1 + n],
- NR_LONG_BSR_TABLE[pduP[mac_subheader_len + 1 + n]],
- sched_ctrl->estimated_ul_buffer);
- }
-
- break;
-
- case UL_SCH_LCID_C_RNTI:
-
- for (int i = 0; i < NR_NB_RA_PROC_MAX; i++) {
- NR_RA_t *ra = &RC.nrmac[module_idP]->common_channels[CC_id].ra[i];
- if (ra->state >= WAIT_Msg3 && ra->rnti == UE->rnti) {
- ra->crnti = ((pduP[1]&0xFF)<<8)|(pduP[2]&0xFF);
- ra->msg3_dcch_dtch = true;
- LOG_I(NR_MAC, "Received UL_SCH_LCID_C_RNTI with C-RNTI 0x%04x\n", ra->crnti);
- break;
- }
- }
-
- //38.321 section 6.1.3.2
- //fixed length
- mac_len = 2;
- /* Extract CRNTI value */
- break;
-
- case UL_SCH_LCID_SINGLE_ENTRY_PHR:
- //38.321 section 6.1.3.8
- //fixed length
- mac_len = 2;
- /* Extract SINGLE ENTRY PHR elements for PHR calculation */
- ce_ptr = &pduP[mac_subheader_len];
- NR_SINGLE_ENTRY_PHR_MAC_CE *phr = (NR_SINGLE_ENTRY_PHR_MAC_CE *) ce_ptr;
- /* Save the phr info */
- const int PH = phr->PH;
- const int PCMAX = phr->PCMAX;
- /* 38.133 Table10.1.17.1-1 */
- if (PH < 55)
- sched_ctrl->ph = PH - 32;
- else
- sched_ctrl->ph = PH - 32 + (PH - 54);
- /* 38.133 Table10.1.18.1-1 */
- sched_ctrl->pcmax = PCMAX - 29;
- LOG_D(NR_MAC, "SINGLE ENTRY PHR R1 %d PH %d (%d dB) R2 %d PCMAX %d (%d dBm)\n",
- phr->R1, PH, sched_ctrl->ph, phr->R2, PCMAX, sched_ctrl->pcmax);
- break;
-
- case UL_SCH_LCID_MULTI_ENTRY_PHR_1_OCT:
- //38.321 section 6.1.3.9
- // varialbe length
- if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len))
- return 0;
- /* Extract MULTI ENTRY PHR elements from single octet bitmap for PHR calculation */
- break;
-
- case UL_SCH_LCID_MULTI_ENTRY_PHR_4_OCT:
- //38.321 section 6.1.3.9
- // varialbe length
- if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len))
- return 0;
- /* Extract MULTI ENTRY PHR elements from four octets bitmap for PHR calculation */
- break;
-
- case UL_SCH_LCID_PADDING:
- done = 1;
- // end of MAC PDU, can ignore the rest.
- break;
-
- case UL_SCH_LCID_SRB1:
- case UL_SCH_LCID_SRB2:
- if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len))
- return 0;
-
- rnti_t crnti = UE->rnti;
- NR_UE_info_t* UE_idx = UE;
- for (int i = 0; i < NR_NB_RA_PROC_MAX; i++) {
- NR_RA_t *ra = &RC.nrmac[module_idP]->common_channels[CC_id].ra[i];
- if (ra->state >= WAIT_Msg3 && ra->rnti == UE->rnti) {
- uint8_t *next_subpduP = pduP + mac_subheader_len + mac_len;
- if ((pduP[mac_subheader_len+mac_len] & 0x3F) == UL_SCH_LCID_C_RNTI) {
- crnti = ((next_subpduP[1]&0xFF)<<8)|(next_subpduP[2]&0xFF);
- LOG_W(NR_MAC, " UL_SCH_LCID_SRB for rnti %04x\n", crnti);
- UE_idx = find_nr_UE(&RC.nrmac[module_idP]->UE_info, crnti);
- break;
- }
- }
- }
-
- if (UE_idx->CellGroup) {
- LOG_D(NR_MAC, "Frame %d : ULSCH -> UL-DCCH %d (gNB %ld, %d bytes), rnti: 0x%04x \n", frameP, rx_lcid, module_idP, mac_len, crnti);
- mac_rlc_data_ind(module_idP,
- crnti,
- module_idP,
- frameP,
- ENB_FLAG_YES,
- MBMS_FLAG_NO,
- rx_lcid,
- (char *) (pduP + mac_subheader_len),
- mac_len,
- 1,
- NULL);
- } else {
- AssertFatal(1==0,"[UE %04x] Frame/Slot %d.%d : Received LCID %d which is not configured, dropping packet\n",UE->rnti,frameP,slot,rx_lcid);
- }
- break;
- case UL_SCH_LCID_SRB3:
- // todo
- break;
-
- case UL_SCH_LCID_CCCH:
- case UL_SCH_LCID_CCCH1:
- // fixed length
- mac_subheader_len = 1;
-
- if ( rx_lcid == UL_SCH_LCID_CCCH1 ) {
- // RRCResumeRequest1 message includes the full I-RNTI and has a size of 8 bytes
- mac_len = 8;
-
- // Check if it is a valid CCCH1 message, we get all 00's messages very often
- int i = 0;
- for(i=0; i<(mac_subheader_len+mac_len); i++) {
- if(pduP[i] != 0) {
- break;
- }
- }
- if (i == (mac_subheader_len+mac_len)) {
- LOG_D(NR_MAC, "%s() Invalid CCCH1 message!, pdu_len: %d\n", __func__, pdu_len);
- done = 1;
- break;
- }
- } else {
- // fixed length of 6 bytes
- mac_len = 6;
- }
-
- send_initial_ul_rrc_message(module_idP,
- CC_id,
- UE,
- CCCH,
- pduP + mac_subheader_len,
- mac_len);
- break;
-
- case UL_SCH_LCID_DTCH ... (UL_SCH_LCID_DTCH + 28):
- // check if LCID is valid at current time.
- if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len)) {
- return 0;
- }
-
-
- LOG_D(NR_MAC, "[UE %04x] %d.%d : ULSCH -> UL-%s %d (gNB %ld, %d bytes)\n",
- UE->rnti,
- frameP,
- slot,
- rx_lcid<4?"DCCH":"DTCH",
- rx_lcid,
- module_idP,
- mac_len);
- UE->mac_stats.ul.lc_bytes[rx_lcid] += mac_len;
-
- mac_rlc_data_ind(module_idP,
- UE->rnti,
- module_idP,
- frameP,
- ENB_FLAG_YES,
- MBMS_FLAG_NO,
- rx_lcid,
- (char *)(pduP + mac_subheader_len),
- mac_len,
- 1,
- NULL);
-
- /* Updated estimated buffer when receiving data */
- if (sched_ctrl->estimated_ul_buffer >= mac_len) {
- sched_ctrl->estimated_ul_buffer -= mac_len;
- } else {
- sched_ctrl->estimated_ul_buffer = 0;
- }
-
- break;
-
- default:
- LOG_E(NR_MAC, "Received unknown MAC header (LCID = 0x%02x)\n", rx_lcid);
- return -1;
- break;
- }
-
- #ifdef ENABLE_MAC_PAYLOAD_DEBUG
- if (rx_lcid < 45 || rx_lcid == 52 || rx_lcid == 63) {
- LOG_I(NR_MAC, "In %s: dumping UL MAC SDU sub-header with length %d (LCID = 0x%02x):\n", __func__, mac_subheader_len, rx_lcid);
- log_dump(NR_MAC, pduP, mac_subheader_len, LOG_DUMP_CHAR, "\n");
- LOG_I(NR_MAC, "In %s: dumping UL MAC SDU with length %d (LCID = 0x%02x):\n", __func__, mac_len, rx_lcid);
- log_dump(NR_MAC, pduP + mac_subheader_len, mac_len, LOG_DUMP_CHAR, "\n");
- } else {
- LOG_I(NR_MAC, "In %s: dumping UL MAC CE with length %d (LCID = 0x%02x):\n", __func__, mac_len, rx_lcid);
- log_dump(NR_MAC, pduP + mac_subheader_len + mac_len, mac_len, LOG_DUMP_CHAR, "\n");
- }
- #endif
-
- pduP += ( mac_subheader_len + mac_len );
- pdu_len -= ( mac_subheader_len + mac_len );
-
- if (pdu_len < 0) {
- LOG_E(NR_MAC, "In %s: residual UL MAC PDU in %d.%d with length < 0!, pdu_len %d \n", __func__, frameP, slot, pdu_len);
- LOG_E(NR_MAC, "MAC PDU ");
- for (int i = 0; i < 20; i++) // Only printf 1st - 20nd bytes
- printf("%02x ", pduP[i]);
- printf("\n");
+ switch(rx_lcid){
+ // MAC CE
+ /*#ifdef DEBUG_HEADER_PARSING
+ LOG_D(NR_MAC, "[UE] LCID %d, PDU length %d\n", ((NR_MAC_SUBHEADER_FIXED *)pduP)->LCID, pdu_len);
+ #endif*/
+ case UL_SCH_LCID_RECOMMENDED_BITRATE_QUERY:
+ // 38.321 Ch6.1.3.20
+ mac_len = 2;
+ break;
+ case UL_SCH_LCID_CONFIGURED_GRANT_CONFIRMATION:
+ // 38.321 Ch6.1.3.7
+ break;
+ case UL_SCH_LCID_S_BSR:
+ case UL_SCH_LCID_S_TRUNCATED_BSR:
+ //38.321 section 6.1.3.1
+ //fixed length
+ mac_len =1;
+ /* Extract short BSR value */
+ ce_ptr = &pduP[mac_subheader_len];
+ NR_BSR_SHORT *bsr_s = (NR_BSR_SHORT *) ce_ptr;
+ sched_ctrl->estimated_ul_buffer = 0;
+ sched_ctrl->estimated_ul_buffer = NR_SHORT_BSR_TABLE[bsr_s->Buffer_size];
+ LOG_D(NR_MAC,
+ "SHORT BSR at %4d.%2d, LCG ID %d, BS Index %d, BS value < %d, est buf %d\n",
+ frameP,
+ slot,
+ bsr_s->LcgID,
+ bsr_s->Buffer_size,
+ NR_SHORT_BSR_TABLE[bsr_s->Buffer_size],
+ sched_ctrl->estimated_ul_buffer);
+ break;
+ case UL_SCH_LCID_L_BSR:
+ case UL_SCH_LCID_L_TRUNCATED_BSR:
+ //38.321 section 6.1.3.1
+ //variable length
+ /* Several checks have been added to this function to
+ ensure that the casting of the pduP is possible. There seems
+ to be a partial PDU at the end of this buffer, so here
+ we gracefully ignore that by returning 0. See:
+ https://gitlab.eurecom.fr/oai/openairinterface5g/-/issues/534 */
+ if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len))
return 0;
+ /* Extract long BSR value */
+ ce_ptr = &pduP[mac_subheader_len];
+ NR_BSR_LONG *bsr_l = (NR_BSR_LONG *) ce_ptr;
+ sched_ctrl->estimated_ul_buffer = 0;
+
+ n_Lcg = bsr_l->LcgID7 + bsr_l->LcgID6 + bsr_l->LcgID5 + bsr_l->LcgID4 +
+ bsr_l->LcgID3 + bsr_l->LcgID2 + bsr_l->LcgID1 + bsr_l->LcgID0;
+
+ LOG_D(NR_MAC, "LONG BSR, LCG ID(7-0) %d/%d/%d/%d/%d/%d/%d/%d\n",
+ bsr_l->LcgID7, bsr_l->LcgID6, bsr_l->LcgID5, bsr_l->LcgID4,
+ bsr_l->LcgID3, bsr_l->LcgID2, bsr_l->LcgID1, bsr_l->LcgID0);
+
+ for (int n = 0; n < n_Lcg; n++){
+ LOG_D(NR_MAC, "LONG BSR, %d/%d (n/n_Lcg), BS Index %d, BS value < %d",
+ n, n_Lcg, pduP[mac_subheader_len + 1 + n],
+ NR_LONG_BSR_TABLE[pduP[mac_subheader_len + 1 + n]]);
+ sched_ctrl->estimated_ul_buffer += NR_LONG_BSR_TABLE[pduP[mac_subheader_len + 1 + n]];
+ LOG_D(NR_MAC,
+ "LONG BSR at %4d.%2d, %d/%d (n/n_Lcg), BS Index %d, BS value < %d, total %d\n",
+ frameP,
+ slot,
+ n,
+ n_Lcg,
+ pduP[mac_subheader_len + 1 + n],
+ NR_LONG_BSR_TABLE[pduP[mac_subheader_len + 1 + n]],
+ sched_ctrl->estimated_ul_buffer);
}
- }
+
+ break;
+
+ case UL_SCH_LCID_C_RNTI:
+
+ for (int i = 0; i < NR_NB_RA_PROC_MAX; i++) {
+ NR_RA_t *ra = &RC.nrmac[module_idP]->common_channels[CC_id].ra[i];
+ if (ra->state >= WAIT_Msg3 && ra->rnti == UE->rnti) {
+ ra->crnti = ((pduP[1]&0xFF)<<8)|(pduP[2]&0xFF);
+ ra->msg3_dcch_dtch = true;
+ LOG_I(NR_MAC, "Received UL_SCH_LCID_C_RNTI with C-RNTI 0x%04x\n", ra->crnti);
+ break;
+ }
+ }
+
+ //38.321 section 6.1.3.2
+ //fixed length
+ mac_len = 2;
+ /* Extract CRNTI value */
+ break;
+
+ case UL_SCH_LCID_SINGLE_ENTRY_PHR:
+ AssertFatal(harq_pid>-1,"Invalid HARQ PID %d\n",harq_pid);
+ NR_sched_pusch_t *sched_pusch = &sched_ctrl->ul_harq_processes[harq_pid].sched_pusch;;
+ //38.321 section 6.1.3.8
+ //fixed length
+ mac_len = 2;
+ /* Extract SINGLE ENTRY PHR elements for PHR calculation */
+ ce_ptr = &pduP[mac_subheader_len];
+ NR_SINGLE_ENTRY_PHR_MAC_CE *phr = (NR_SINGLE_ENTRY_PHR_MAC_CE *) ce_ptr;
+ /* Save the phr info */
+ int PH;
+ const int PCMAX = phr->PCMAX;
+ /* 38.133 Table10.1.17.1-1 */
+ if (phr->PH < 55)
+ PH = phr->PH - 32;
+ else
+ PH = phr->PH - 32 + (phr->PH - 54);
+ // in sched_ctrl we set normalized PH wrt MCS and PRBs
+ long *deltaMCS = ul_bwp->pusch_Config ? ul_bwp->pusch_Config->pusch_PowerControl->deltaMCS : NULL;
+ sched_ctrl->ph = PH +
+ compute_bw_factor(sched_pusch->mu, sched_pusch->rbSize) +
+ compute_delta_tf(sched_pusch->tb_size<<3,
+ sched_pusch->rbSize,
+ 0, //n_layers
+ 0, //n_symbols
+ 0, //n_dmrs
+ deltaMCS);
+ /* 38.133 Table10.1.18.1-1 */
+ sched_ctrl->pcmax = PCMAX - 29;
+ LOG_D(NR_MAC, "SINGLE ENTRY PHR R1 %d PH %d (%d dB) R2 %d PCMAX %d (%d dBm)\n",
+ phr->R1, PH, sched_ctrl->ph, phr->R2, PCMAX, sched_ctrl->pcmax);
+ break;
+
+ case UL_SCH_LCID_MULTI_ENTRY_PHR_1_OCT:
+ //38.321 section 6.1.3.9
+ // varialbe length
+ if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len))
+ return 0;
+ /* Extract MULTI ENTRY PHR elements from single octet bitmap for PHR calculation */
+ break;
+
+ case UL_SCH_LCID_MULTI_ENTRY_PHR_4_OCT:
+ //38.321 section 6.1.3.9
+ // varialbe length
+ if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len))
+ return 0;
+ /* Extract MULTI ENTRY PHR elements from four octets bitmap for PHR calculation */
+ break;
+
+ case UL_SCH_LCID_PADDING:
+ done = 1;
+ // end of MAC PDU, can ignore the rest.
+ break;
+
+ case UL_SCH_LCID_SRB1:
+ case UL_SCH_LCID_SRB2:
+ if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len))
+ return 0;
+
+ rnti_t crnti = UE->rnti;
+ NR_UE_info_t* UE_idx = UE;
+ for (int i = 0; i < NR_NB_RA_PROC_MAX; i++) {
+ NR_RA_t *ra = &RC.nrmac[module_idP]->common_channels[CC_id].ra[i];
+ if (ra->state >= WAIT_Msg3 && ra->rnti == UE->rnti) {
+ uint8_t *next_subpduP = pduP + mac_subheader_len + mac_len;
+ if ((pduP[mac_subheader_len+mac_len] & 0x3F) == UL_SCH_LCID_C_RNTI) {
+ crnti = ((next_subpduP[1]&0xFF)<<8)|(next_subpduP[2]&0xFF);
+ LOG_W(NR_MAC, " UL_SCH_LCID_SRB for rnti %04x\n", crnti);
+ UE_idx = find_nr_UE(&RC.nrmac[module_idP]->UE_info, crnti);
+ break;
+ }
+ }
+ }
+
+ if (UE_idx->CellGroup) {
+ LOG_D(NR_MAC, "Frame %d : ULSCH -> UL-DCCH %d (gNB %ld, %d bytes), rnti: 0x%04x \n", frameP, rx_lcid, module_idP, mac_len, crnti);
+ mac_rlc_data_ind(module_idP,
+ crnti,
+ module_idP,
+ frameP,
+ ENB_FLAG_YES,
+ MBMS_FLAG_NO,
+ rx_lcid,
+ (char *) (pduP + mac_subheader_len),
+ mac_len,
+ 1,
+ NULL);
+ } else {
+ AssertFatal(1==0,"[UE %04x] Frame/Slot %d.%d : Received LCID %d which is not configured, dropping packet\n",UE->rnti,frameP,slot,rx_lcid);
+ }
+ break;
+
+ case UL_SCH_LCID_CCCH:
+ case UL_SCH_LCID_CCCH1:
+ // fixed length
+ mac_subheader_len = 1;
+
+ if ( rx_lcid == UL_SCH_LCID_CCCH1 ) {
+ // RRCResumeRequest1 message includes the full I-RNTI and has a size of 8 bytes
+ mac_len = 8;
+
+ // Check if it is a valid CCCH1 message, we get all 00's messages very often
+ int i = 0;
+ for(i=0; i<(mac_subheader_len+mac_len); i++) {
+ if(pduP[i] != 0) {
+ break;
+ }
+ }
+ if (i == (mac_subheader_len+mac_len)) {
+ LOG_D(NR_MAC, "%s() Invalid CCCH1 message!, pdu_len: %d\n", __func__, pdu_len);
+ done = 1;
+ break;
+ }
+ } else {
+ // fixed length of 6 bytes
+ mac_len = 6;
+ }
+
+ send_initial_ul_rrc_message(module_idP,
+ CC_id,
+ UE,
+ CCCH,
+ pduP + mac_subheader_len,
+ mac_len);
+ break;
+
+ case UL_SCH_LCID_DTCH ... (UL_SCH_LCID_DTCH + 28):
+ // check if LCID is valid at current time.
+ if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len))
+ return 0;
+
+ LOG_D(NR_MAC, "[UE %04x] %d.%d : ULSCH -> UL-%s %d (gNB %ld, %d bytes)\n",
+ UE->rnti,
+ frameP,
+ slot,
+ rx_lcid<4?"DCCH":"DTCH",
+ rx_lcid,
+ module_idP,
+ mac_len);
+ UE->mac_stats.ul.lc_bytes[rx_lcid] += mac_len;
+
+ mac_rlc_data_ind(module_idP,
+ UE->rnti,
+ module_idP,
+ frameP,
+ ENB_FLAG_YES,
+ MBMS_FLAG_NO,
+ rx_lcid,
+ (char *)(pduP + mac_subheader_len),
+ mac_len,
+ 1,
+ NULL);
+
+ sdus += 1;
+ /* Updated estimated buffer when receiving data */
+ if (sched_ctrl->estimated_ul_buffer >= mac_len)
+ sched_ctrl->estimated_ul_buffer -= mac_len;
+ else
+ sched_ctrl->estimated_ul_buffer = 0;
+ break;
+
+ default:
+ LOG_E(NR_MAC, "Received unknown MAC header (LCID = 0x%02x)\n", rx_lcid);
+ return -1;
+ break;
+ }
+
+#ifdef ENABLE_MAC_PAYLOAD_DEBUG
+ if (rx_lcid < 45 || rx_lcid == 52 || rx_lcid == 63) {
+ LOG_I(NR_MAC, "In %s: dumping UL MAC SDU sub-header with length %d (LCID = 0x%02x):\n", __func__, mac_subheader_len, rx_lcid);
+ log_dump(NR_MAC, pduP, mac_subheader_len, LOG_DUMP_CHAR, "\n");
+ LOG_I(NR_MAC, "In %s: dumping UL MAC SDU with length %d (LCID = 0x%02x):\n", __func__, mac_len, rx_lcid);
+ log_dump(NR_MAC, pduP + mac_subheader_len, mac_len, LOG_DUMP_CHAR, "\n");
+ } else {
+ LOG_I(NR_MAC, "In %s: dumping UL MAC CE with length %d (LCID = 0x%02x):\n", __func__, mac_len, rx_lcid);
+ log_dump(NR_MAC, pduP + mac_subheader_len + mac_len, mac_len, LOG_DUMP_CHAR, "\n");
+ }
+#endif
+
+ pduP += ( mac_subheader_len + mac_len );
+ pdu_len -= ( mac_subheader_len + mac_len );
+
+ if (pdu_len < 0) {
+ LOG_E(NR_MAC, "In %s: residual UL MAC PDU in %d.%d with length < 0!, pdu_len %d \n", __func__, frameP, slot, pdu_len);
+ LOG_E(NR_MAC, "MAC PDU ");
+ for (int i = 0; i < 20; i++) // Only printf 1st - 20nd bytes
+ printf("%02x ", pduP[i]);
+ printf("\n");
+ return 0;
+ }
+ }
+
+ UE->mac_stats.ul.num_mac_sdu += sdus;
+
return 0;
}
@@ -541,9 +574,9 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
LOG_I(NR_MAC, "Printing received UL MAC payload at gNB side: %d \n");
for (int i = 0; i < sdu_lenP ; i++) {
- //harq_process_ul_ue->a[i] = (unsigned char) rand();
- //printf("a[%d]=0x%02x\n",i,harq_process_ul_ue->a[i]);
- printf("%02x ",(unsigned char)sduP[i]);
+ //harq_process_ul_ue->a[i] = (unsigned char) rand();
+ //printf("a[%d]=0x%02x\n",i,harq_process_ul_ue->a[i]);
+ printf("%02x ",(unsigned char)sduP[i]);
}
printf("\n");
@@ -558,7 +591,7 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
if (UE_scheduling_control->sched_ul_bytes < 0)
UE_scheduling_control->sched_ul_bytes = 0;
- nr_process_mac_pdu(gnb_mod_idP, UE, CC_idP, frameP, slotP, sduP, sdu_lenP);
+ nr_process_mac_pdu(gnb_mod_idP, UE, CC_idP, frameP, slotP, sduP, sdu_lenP, harq_pid);
}
else {
NR_UE_ul_harq_t *cur_harq = &UE_scheduling_control->ul_harq_processes[harq_pid];
@@ -657,14 +690,14 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
current_rnti,
ra->rnti);
- NR_UE_sched_ctrl_t *UE_scheduling_control = &UE->UE_sched_ctrl;
+ NR_UE_sched_ctrl_t *UE_scheduling_control = &UE->UE_sched_ctrl;
- UE_scheduling_control->tpc0 = nr_get_tpc(target_snrx10,ul_cqi,30);
- if (timing_advance != 0xffff)
- UE_scheduling_control->ta_update = timing_advance;
- UE_scheduling_control->raw_rssi = rssi;
- UE_scheduling_control->pusch_snrx10 = ul_cqi * 5 - 640;
- LOG_D(NR_MAC, "[UE %04x] PUSCH TPC %d and TA %d\n",UE->rnti,UE_scheduling_control->tpc0,UE_scheduling_control->ta_update);
+ UE_scheduling_control->tpc0 = nr_get_tpc(target_snrx10,ul_cqi,30);
+ if (timing_advance != 0xffff)
+ UE_scheduling_control->ta_update = timing_advance;
+ UE_scheduling_control->raw_rssi = rssi;
+ UE_scheduling_control->pusch_snrx10 = ul_cqi * 5 - 640;
+ LOG_D(NR_MAC, "[UE %04x] PUSCH TPC %d and TA %d\n",UE->rnti,UE_scheduling_control->tpc0,UE_scheduling_control->ta_update);
if(ra->cfra) {
LOG_A(NR_MAC, "(rnti 0x%04x) CFRA procedure succeeded!\n", ra->rnti);
@@ -685,8 +718,9 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
// Store the first 48 bits belonging to the uplink CCCH SDU within Msg3 to fill in Msg4
// First byte corresponds to R/LCID MAC sub-header
memcpy(ra->cont_res_id, &sduP[1], sizeof(uint8_t) * 6);
-
- if (nr_process_mac_pdu(gnb_mod_idP, UE, CC_idP, frameP, slotP, sduP, sdu_lenP) == 0) {
+ // harq_pid set a non valid value because it is not used in this call
+ // the function is only called to decode the contention resolution sub-header
+ if (nr_process_mac_pdu(gnb_mod_idP, UE, CC_idP, frameP, slotP, sduP, sdu_lenP, -1) == 0) {
ra->state = Msg4;
ra->Msg4_frame = (frameP + 2) % 1024;
ra->Msg4_slot = 1;
@@ -858,6 +892,65 @@ static bool nr_UE_is_to_be_scheduled(const NR_ServingCellConfigCommon_t *scc,
return has_data || sched_ctrl->SR || high_inactivity;
}
+void update_ul_ue_R_Qm(int mcs, int mcs_table, const NR_PUSCH_Config_t *pusch_Config, uint16_t *R, uint8_t *Qm)
+{
+ *R = nr_get_code_rate_ul(mcs, mcs_table);
+ *Qm = nr_get_Qm_ul(mcs, mcs_table);
+
+ if (pusch_Config && pusch_Config->tp_pi2BPSK && ((mcs_table == 3 && mcs < 2) || (mcs_table == 4 && mcs < 6))) {
+ *R >>= 1;
+ *Qm <<= 1;
+ }
+}
+
+
+void nr_ue_max_mcs_min_rb(int mu, int ph_limit, NR_pusch_semi_static_t *ps, NR_UE_UL_BWP_t *ul_bwp, uint16_t minRb, uint32_t tbs, uint16_t *Rb, uint8_t *mcs)
+{
+ AssertFatal(*Rb >= minRb, "illegal Rb %d < minRb %d\n", *Rb, minRb);
+ AssertFatal(*mcs >= 0 && *mcs <= 28, "illegal MCS %d\n", *mcs);
+
+ const int tbs_bits = tbs << 3;
+ uint16_t R;
+ uint8_t Qm;
+ update_ul_ue_R_Qm(*mcs, ul_bwp->mcs_table, ul_bwp->pusch_Config, &R, &Qm);
+
+ long *deltaMCS = ul_bwp->pusch_Config ? ul_bwp->pusch_Config->pusch_PowerControl->deltaMCS : NULL;
+ int tx_power = compute_bw_factor(mu, *Rb) +
+ compute_delta_tf(tbs_bits,
+ *Rb,
+ ps->nrOfLayers,
+ ps->nrOfSymbols,
+ ps->N_PRB_DMRS*ps->num_dmrs_symb,
+ deltaMCS);
+
+ while (ph_limit < tx_power && *Rb >= minRb) {
+ (*Rb)--;
+ tx_power = compute_bw_factor(mu, *Rb) +
+ compute_delta_tf(tbs_bits,
+ *Rb,
+ ps->nrOfLayers,
+ ps->nrOfSymbols,
+ ps->N_PRB_DMRS*ps->num_dmrs_symb,
+ deltaMCS);
+ }
+
+ while (ph_limit < tx_power && *mcs > 6) {
+ (*mcs)--;
+ update_ul_ue_R_Qm(*mcs, ul_bwp->mcs_table, ul_bwp->pusch_Config, &R, &Qm);
+ tx_power = compute_bw_factor(mu, *Rb) +
+ compute_delta_tf(tbs_bits,
+ *Rb,
+ ps->nrOfLayers,
+ ps->nrOfSymbols,
+ ps->N_PRB_DMRS*ps->num_dmrs_symb,
+ deltaMCS);
+ }
+
+ if (ph_limit < tx_power)
+ LOG_W(NR_MAC, "Normalized power %d based on current resources (RBs %d, MCS %d) exceed reported PHR %d (normalized value)\n",
+ tx_power, *Rb, *mcs, ph_limit);
+}
+
static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
frame_t frame,
sub_frame_t slot,
@@ -1000,18 +1093,6 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
return true;
}
-void update_ul_ue_R_Qm(NR_sched_pusch_t *sched_pusch, const NR_PUSCH_Config_t *pusch_Config, const int mcs_table) {
-
- const int mcs = sched_pusch->mcs;
- sched_pusch->R = nr_get_code_rate_ul(mcs, mcs_table);
- sched_pusch->Qm = nr_get_Qm_ul(mcs, mcs_table);
-
- if (pusch_Config && pusch_Config->tp_pi2BPSK && ((mcs_table == 3 && mcs < 2) || (mcs_table == 4 && mcs < 6))) {
- sched_pusch->R >>= 1;
- sched_pusch->Qm <<= 1;
- }
-}
-
uint32_t ul_pf_tbs[3][29]; // pre-computed, approximate TBS values for PF coefficient
typedef struct UEsched_s {
float coef;
@@ -1182,7 +1263,7 @@ void pf_ul(module_id_t module_id,
NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch;
sched_pusch->mcs = min(nrmac->min_grant_mcs, sched_pusch->mcs);
- update_ul_ue_R_Qm(sched_pusch, current_BWP->pusch_Config, current_BWP->mcs_table);
+ update_ul_ue_R_Qm(sched_pusch->mcs, current_BWP->mcs_table, current_BWP->pusch_Config, &sched_pusch->R, &sched_pusch->Qm);
sched_pusch->rbStart = rbStart;
sched_pusch->rbSize = min_rb;
sched_pusch->tb_size = nr_compute_tbs(sched_pusch->Qm,
@@ -1268,7 +1349,7 @@ void pf_ul(module_id_t module_id,
nrOfLayers,
ps);
}
- update_ul_ue_R_Qm(sched_pusch, current_BWP->pusch_Config, current_BWP->mcs_table);
+ update_ul_ue_R_Qm(sched_pusch->mcs, current_BWP->mcs_table, current_BWP->pusch_Config, &sched_pusch->R, &sched_pusch->Qm);
int rbStart = 0;
const uint16_t slbitmap = SL_to_bitmap(ps->startSymbolIndex, ps->nrOfSymbols);
@@ -1287,8 +1368,17 @@ void pf_ul(module_id_t module_id,
else
LOG_D(NR_MAC,"allocating UL data for RNTI %04x (rbStsart %d, min_rb %d, bwpSize %d)\n", iterator->UE->rnti,rbStart,min_rb,bwpSize);
- /* Calculate the current scheduling bytes and the necessary RBs */
+ /* Calculate the current scheduling bytes */
const int B = cmax(sched_ctrl->estimated_ul_buffer - sched_ctrl->sched_ul_bytes, 0);
+ /* adjust rbSize and MCS according to PHR and BPRE */
+ sched_pusch->mu = scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.subcarrierSpacing;
+ if(sched_ctrl->pcmax!=0 ||
+ sched_ctrl->ph!=0) // verify if the PHR related parameter have been initialized
+ nr_ue_max_mcs_min_rb(sched_pusch->mu, sched_ctrl->ph, ps, current_BWP, min_rbSize, B, &max_rbSize, &sched_pusch->mcs);
+
+ if (sched_pusch->mcs < sched_ctrl->ul_bler_stats.mcs)
+ sched_ctrl->ul_bler_stats.mcs = sched_pusch->mcs; /* force estimated MCS down */
+
uint16_t rbSize = 0;
uint32_t TBS = 0;
@@ -1302,6 +1392,7 @@ void pf_ul(module_id_t module_id,
max_rbSize,
&TBS,
&rbSize);
+
sched_pusch->rbSize = rbSize;
sched_pusch->tb_size = TBS;
LOG_D(NR_MAC,"rbSize %d (max_rbSize %d), TBS %d, est buf %d, sched_ul %d, B %d, CCE %d, num_dmrs_symb %d, N_PRB_DMRS %d\n",
@@ -1492,6 +1583,7 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
NR_UE_UL_BWP_t *current_BWP = &UE->current_UL_BWP;
UE->mac_stats.ul.current_bytes = 0;
+ UE->mac_stats.ul.current_rbs = 0;
/* dynamic PUSCH values (RB alloc, MCS, hence R, Qm, TBS) that change in
* every TTI are pre-populated by the preprocessor and used below */
@@ -1546,6 +1638,8 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
* retransmissions */
cur_harq->sched_pusch.time_domain_allocation = ps->time_domain_allocation;
sched_ctrl->sched_ul_bytes += sched_pusch->tb_size;
+ UE->mac_stats.ul.total_rbs += sched_pusch->rbSize;
+
} else {
LOG_D(NR_MAC,
"%d.%2d UL retransmission RNTI %04x sched %d.%2d HARQ PID %d round %d NDI %d\n",
@@ -1557,8 +1651,10 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
harq_id,
cur_harq->round,
cur_harq->ndi);
+ UE->mac_stats.ul.total_rbs_retx += sched_pusch->rbSize;
}
UE->mac_stats.ul.current_bytes = sched_pusch->tb_size;
+ UE->mac_stats.ul.current_rbs = sched_pusch->rbSize;
sched_ctrl->last_ul_frame = sched_pusch->frame;
sched_ctrl->last_ul_slot = sched_pusch->slot;
@@ -1682,6 +1778,7 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
pusch_pdu->pusch_data.tb_size = sched_pusch->tb_size;
pusch_pdu->pusch_data.num_cb = 0; //CBG not supported
+ pusch_pdu->maintenance_parms_v3.ldpcBaseGraph = get_BG(sched_pusch->tb_size<<3,sched_pusch->R);
if(current_BWP->pusch_servingcellconfig &&
current_BWP->pusch_servingcellconfig->rateMatching) {
// TBS_LBRM according to section 5.4.2.1 of 38.212
diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
index 674d80a4d4..6a3f778af9 100644
--- a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+++ b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h
@@ -469,7 +469,6 @@ uint16_t set_pm_index(NR_UE_sched_ctrl_t *sched_ctrl,
int codebook_mode);
uint8_t get_mcs_from_cqi(int mcs_table, int cqi_table, int cqi_idx);
-
uint8_t set_dl_nrOfLayers(NR_UE_sched_ctrl_t *sched_ctrl);
const int get_dl_tda(const gNB_MAC_INST *nrmac, const NR_ServingCellConfigCommon_t *scc, int slot);
diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
index 8f75e57700..346f1f8516 100644
--- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
@@ -394,6 +394,7 @@ typedef struct NR_pusch_semi_static_t {
typedef struct NR_sched_pusch {
int frame;
int slot;
+ int mu;
/// RB allocation within active uBWP
uint16_t rbSize;
@@ -668,6 +669,10 @@ typedef struct NR_mac_dir_stats {
uint64_t errors;
uint64_t total_bytes;
uint32_t current_bytes;
+ uint32_t total_rbs;
+ uint32_t total_rbs_retx;
+ uint32_t num_mac_sdu;
+ uint32_t current_rbs;
} NR_mac_dir_stats_t;
typedef struct NR_mac_stats {
@@ -851,6 +856,10 @@ typedef struct gNB_MAC_INST_s {
uint8_t min_grant_mcs;
nr_mac_rrc_ul_if_t mac_rrc;
+
+ int16_t frame;
+ int16_t slot;
+
} gNB_MAC_INST;
#endif /*__LAYER2_NR_MAC_GNB_H__ */
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
index 480b651593..2c853d8eb6 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
@@ -59,6 +59,9 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
We need to investigate why this hack is neccessary. */
buffer[0] |= 128;
}
+ entity->stats.rxpdu_pkts++;
+ entity->stats.rxpdu_bytes += size;
+
if (entity->sn_size == 12) {
rcvd_sn = ((buffer[0] & 0xf) << 8) |
@@ -70,6 +73,7 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
buffer[2];
header_size = 3;
}
+ entity->stats.rxpdu_sn = rcvd_sn;
/* SRBs always have MAC-I, even if integrity is not active */
if (entity->has_integrity || entity->type == NR_PDCP_SRB) {
@@ -80,6 +84,11 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
if (size < header_size + integrity_size + 1) {
LOG_E(PDCP, "bad PDU received (size = %d)\n", size);
+
+ entity->stats.rxpdu_dd_pkts++;
+ entity->stats.rxpdu_dd_bytes += size;
+
+
return;
}
@@ -109,12 +118,20 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
if (memcmp(integrity, buffer + size - integrity_size, 4) != 0) {
LOG_E(PDCP, "discard NR PDU, integrity failed\n");
// return;
+ entity->stats.rxpdu_dd_pkts++;
+ entity->stats.rxpdu_dd_bytes += size;
+
+
}
}
if (rcvd_count < entity->rx_deliv
|| nr_pdcp_sdu_in_list(entity->rx_list, rcvd_count)) {
LOG_W(PDCP, "discard NR PDU rcvd_count=%d, entity->rx_deliv %d,sdu_in_list %d\n", rcvd_count,entity->rx_deliv,nr_pdcp_sdu_in_list(entity->rx_list,rcvd_count));
+ entity->stats.rxpdu_dd_pkts++;
+ entity->stats.rxpdu_dd_bytes += size;
+
+
return;
}
@@ -139,6 +156,10 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
cur->buffer, cur->size);
entity->rx_list = cur->next;
entity->rx_size -= cur->size;
+ entity->stats.txsdu_pkts++;
+ entity->stats.txsdu_bytes += cur->size;
+
+
nr_pdcp_free_sdu(cur);
count++;
}
@@ -165,6 +186,9 @@ static void nr_pdcp_entity_recv_sdu(nr_pdcp_entity_t *entity,
int integrity_size;
char buf[size + 3 + 4];
int dc_bit;
+ entity->stats.rxsdu_pkts++;
+ entity->stats.rxsdu_bytes += size;
+
count = entity->tx_next;
sn = entity->tx_next & entity->sn_max;
@@ -215,6 +239,11 @@ static void nr_pdcp_entity_recv_sdu(nr_pdcp_entity_t *entity,
entity->deliver_pdu(entity->deliver_pdu_data, entity, buf,
header_size + size + integrity_size, sdu_id);
+ entity->stats.txpdu_pkts++;
+ entity->stats.txpdu_bytes += header_size + size + integrity_size;
+ entity->stats.txpdu_sn = sn;
+
+
}
/* may be called several times, take care to clean previous settings */
@@ -346,6 +375,13 @@ void nr_pdcp_entity_delete(nr_pdcp_entity_t *entity)
free(entity);
}
+static void nr_pdcp_entity_get_stats(nr_pdcp_entity_t *entity,
+ nr_pdcp_statistics_t *out)
+{
+ *out = entity->stats;
+}
+
+
nr_pdcp_entity_t *new_nr_pdcp_entity(
nr_pdcp_entity_type_t type,
int is_gnb, int rb_id, int pdusession_id,int has_sdap,
@@ -381,6 +417,7 @@ nr_pdcp_entity_t *new_nr_pdcp_entity(
ret->delete_entity = nr_pdcp_entity_delete;
+ ret->get_stats = nr_pdcp_entity_get_stats;
ret->deliver_sdu = deliver_sdu;
ret->deliver_sdu_data = deliver_sdu_data;
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
index 49e9c4142b..19445887f4 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
@@ -32,6 +32,39 @@ typedef enum {
NR_PDCP_SRB
} nr_pdcp_entity_type_t;
+typedef struct {
+ //nr_pdcp_entity_type_t mode;
+ /* PDU stats */
+ /* TX */
+ uint32_t txpdu_pkts; /* aggregated number of tx packets */
+ uint32_t txpdu_bytes; /* aggregated bytes of tx packets */
+ uint32_t txpdu_sn; /* current sequence number of last tx packet (or TX_NEXT) */
+ /* RX */
+ uint32_t rxpdu_pkts; /* aggregated number of rx packets */
+ uint32_t rxpdu_bytes; /* aggregated bytes of rx packets */
+ uint32_t rxpdu_sn; /* current sequence number of last rx packet (or RX_NEXT) */
+ /* TODO? */
+ uint32_t rxpdu_oo_pkts; /* aggregated number of out-of-order rx pkts (or RX_REORD) */
+ /* TODO? */
+ uint32_t rxpdu_oo_bytes; /* aggregated amount of out-of-order rx bytes */
+ uint32_t rxpdu_dd_pkts; /* aggregated number of duplicated discarded packets (or dropped packets because of other reasons such as integrity failure) (or RX_DELIV) */
+ uint32_t rxpdu_dd_bytes; /* aggregated amount of discarded packets' bytes */
+ /* TODO? */
+ uint32_t rxpdu_ro_count; /* this state variable indicates the COUNT value following the COUNT value associated with the PDCP Data PDU which triggered t-Reordering. (RX_REORD) */
+
+ /* SDU stats */
+ /* TX */
+ uint32_t txsdu_pkts; /* number of SDUs delivered */
+ uint32_t txsdu_bytes; /* number of bytes of SDUs delivered */
+
+ /* RX */
+ uint32_t rxsdu_pkts; /* number of SDUs received */
+ uint32_t rxsdu_bytes; /* number of bytes of SDUs received */
+
+ uint8_t mode; /* 0: PDCP AM, 1: PDCP UM, 2: PDCP TM */
+} nr_pdcp_statistics_t;
+
+
typedef struct nr_pdcp_entity_t {
nr_pdcp_entity_type_t type;
@@ -40,6 +73,7 @@ typedef struct nr_pdcp_entity_t {
void (*recv_sdu)(struct nr_pdcp_entity_t *entity, char *buffer, int size,
int sdu_id);
void (*delete_entity)(struct nr_pdcp_entity_t *entity);
+ void (*get_stats)(struct nr_pdcp_entity_t *entity, nr_pdcp_statistics_t *out);
/* set_security: pass -1 to integrity_algorithm / ciphering_algorithm
* to keep the current algorithm
@@ -114,6 +148,7 @@ typedef struct nr_pdcp_entity_t {
nr_pdcp_sdu_t *rx_list;
int rx_size;
int rx_maxsize;
+ nr_pdcp_statistics_t stats;
} nr_pdcp_entity_t;
nr_pdcp_entity_t *new_nr_pdcp_entity(
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
index 47c630e0c9..ece0b0274d 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
@@ -1441,6 +1441,44 @@ void nr_pdcp_tick(int frame, int subframe)
/*
* For the SDAP API
*/
-nr_pdcp_ue_manager_t *nr_pdcp_sdap_get_ue_manager(){
- return nr_pdcp_ue_manager;
+nr_pdcp_ue_manager_t *nr_pdcp_sdap_get_ue_manager() {
+ return nr_pdcp_ue_manager;
+}
+
+/* returns false in case of error, true if everything ok */
+const bool nr_pdcp_get_statistics(
+ int rnti,
+ int srb_flag,
+ int rb_id,
+ nr_pdcp_statistics_t *out)
+{
+ nr_pdcp_ue_t *ue;
+ nr_pdcp_entity_t *rb;
+ bool ret;
+
+ nr_pdcp_manager_lock(nr_pdcp_ue_manager);
+ ue = nr_pdcp_manager_get_ue(nr_pdcp_ue_manager, rnti);
+
+ if (srb_flag == 1) {
+ if (rb_id < 1 || rb_id > 2)
+ rb = NULL;
+ else
+ rb = ue->srb[rb_id - 1];
+ } else {
+ if (rb_id < 1 || rb_id > 5)
+ rb = NULL;
+ else
+ rb = ue->drb[rb_id - 1];
+ }
+
+ if (rb != NULL) {
+ rb->get_stats(rb, out);
+ ret = true;
+ } else {
+ ret = false;
+ }
+
+ nr_pdcp_manager_unlock(nr_pdcp_ue_manager);
+
+ return ret;
}
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_entity.c b/openair2/LAYER2/nr_rlc/nr_rlc_entity.c
index 1883bbdd6c..a27cf4f048 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_entity.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_entity.c
@@ -29,6 +29,21 @@
#include "LOG/log.h"
+#include "common/utils/time_stat.h"
+
+static void nr_rlc_entity_get_stats(
+ nr_rlc_entity_t *entity,
+ nr_rlc_statistics_t *out)
+{
+// printf("Stats from the RLC entity asked\n");
+ *out = entity->stats;
+ if (entity->avg_time_is_on)
+ out->txsdu_avg_time_to_tx = time_average_get_average(entity->txsdu_avg_time_to_tx,
+ time_average_now());
+ else
+ out->txsdu_avg_time_to_tx = 0;
+}
+
nr_rlc_entity_t *new_nr_rlc_entity_am(
int rx_maxsize,
int tx_maxsize,
@@ -86,6 +101,7 @@ nr_rlc_entity_t *new_nr_rlc_entity_am(
ret->common.reestablishment = nr_rlc_entity_am_reestablishment;
ret->common.delete = nr_rlc_entity_am_delete;
ret->common.available_tx_space = nr_rlc_entity_am_available_tx_space;
+ ret->common.get_stats = nr_rlc_entity_get_stats;
ret->common.deliver_sdu = deliver_sdu;
ret->common.deliver_sdu_data = deliver_sdu_data;
@@ -94,6 +110,13 @@ nr_rlc_entity_t *new_nr_rlc_entity_am(
ret->common.max_retx_reached = max_retx_reached;
ret->common.max_retx_reached_data = max_retx_reached_data;
+ ret->common.stats.mode = NR_RLC_AM;
+
+ /* let's take average over the last 100 milliseconds
+ * initial_size of 1024 is arbitrary
+ */
+ ret->common.txsdu_avg_time_to_tx = time_average_new(100 * 1000, 1024);
+
return (nr_rlc_entity_t *)ret;
}
@@ -137,10 +160,18 @@ nr_rlc_entity_t *new_nr_rlc_entity_um(
ret->common.reestablishment = nr_rlc_entity_um_reestablishment;
ret->common.delete = nr_rlc_entity_um_delete;
ret->common.available_tx_space = nr_rlc_entity_um_available_tx_space;
+ ret->common.get_stats = nr_rlc_entity_get_stats;
ret->common.deliver_sdu = deliver_sdu;
ret->common.deliver_sdu_data = deliver_sdu_data;
+ ret->common.stats.mode = NR_RLC_UM;
+
+ /* let's take average over the last 100 milliseconds
+ * initial_size of 1024 is arbitrary
+ */
+ ret->common.txsdu_avg_time_to_tx = time_average_new(100 * 1000, 1024);
+
return (nr_rlc_entity_t *)ret;
}
@@ -169,9 +200,17 @@ nr_rlc_entity_t *new_nr_rlc_entity_tm(
ret->common.reestablishment = nr_rlc_entity_tm_reestablishment;
ret->common.delete = nr_rlc_entity_tm_delete;
ret->common.available_tx_space = nr_rlc_entity_tm_available_tx_space;
+ ret->common.get_stats = nr_rlc_entity_get_stats;
ret->common.deliver_sdu = deliver_sdu;
ret->common.deliver_sdu_data = deliver_sdu_data;
+ ret->common.stats.mode = NR_RLC_TM;
+
+ /* let's take average over the last 100 milliseconds
+ * initial_size of 1024 is arbitrary
+ */
+ ret->common.txsdu_avg_time_to_tx = time_average_new(100 * 1000, 1024);
+
return (nr_rlc_entity_t *)ret;
}
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_entity.h b/openair2/LAYER2/nr_rlc/nr_rlc_entity.h
index 5cd3bee650..cd26094cf7 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_entity.h
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_entity.h
@@ -24,8 +24,79 @@
#include
+#include "common/utils/time_stat.h"
+
#define NR_SDU_MAX 16000 /* max NR PDCP SDU size is 9000, let's take more */
+typedef enum {
+ NR_RLC_AM,
+ NR_RLC_UM,
+ NR_RLC_TM,
+} nr_rlc_mode_t;
+
+typedef struct {
+ nr_rlc_mode_t mode; /* AM, UM, or TM */
+
+ /* PDU stats */
+ /* TX */
+ uint32_t txpdu_pkts; /* aggregated number of transmitted RLC PDUs */
+ uint32_t txpdu_bytes; /* aggregated amount of transmitted bytes in RLC PDUs */
+ /* TODO? */
+ uint32_t txpdu_wt_ms; /* aggregated head-of-line tx packet waiting time to be transmitted (i.e. send to the MAC layer) */
+ uint32_t txpdu_dd_pkts; /* aggregated number of dropped or discarded tx packets by RLC */
+ uint32_t txpdu_dd_bytes; /* aggregated amount of bytes dropped or discarded tx packets by RLC */
+ uint32_t txpdu_retx_pkts; /* aggregated number of tx pdus/pkts to be re-transmitted (only applicable to RLC AM) */
+ uint32_t txpdu_retx_bytes; /* aggregated amount of bytes to be re-transmitted (only applicable to RLC AM) */
+ uint32_t txpdu_segmented; /* aggregated number of segmentations */
+ uint32_t txpdu_status_pkts; /* aggregated number of tx status pdus/pkts (only applicable to RLC AM) */
+ uint32_t txpdu_status_bytes; /* aggregated amount of tx status bytes (only applicable to RLC AM) */
+ /* TODO? */
+ uint32_t txbuf_occ_bytes; /* current tx buffer occupancy in terms of amount of bytes (average: NOT IMPLEMENTED) */
+ /* TODO? */
+ uint32_t txbuf_occ_pkts; /* current tx buffer occupancy in terms of number of packets (average: NOT IMPLEMENTED) */
+ /* txbuf_wd_ms: the time window for which the txbuf occupancy value is obtained - NOT IMPLEMENTED */
+
+ /* RX */
+ uint32_t rxpdu_pkts; /* aggregated number of received RLC PDUs */
+ uint32_t rxpdu_bytes; /* amount of bytes received by the RLC */
+ uint32_t rxpdu_dup_pkts; /* aggregated number of duplicate packets */
+ uint32_t rxpdu_dup_bytes; /* aggregated amount of duplicated bytes */
+ uint32_t rxpdu_dd_pkts; /* aggregated number of rx packets dropped or discarded by RLC */
+ uint32_t rxpdu_dd_bytes; /* aggregated amount of rx bytes dropped or discarded by RLC */
+ uint32_t rxpdu_ow_pkts; /* aggregated number of out of window received RLC pdu */
+ uint32_t rxpdu_ow_bytes; /* aggregated number of out of window bytes received RLC pdu */
+ uint32_t rxpdu_status_pkts; /* aggregated number of rx status pdus/pkts (only applicable to RLC AM) */
+ uint32_t rxpdu_status_bytes; /* aggregated amount of rx status bytes (only applicable to RLC AM) */
+ /* rxpdu_rotout_ms: flag indicating rx reordering timeout in ms - NOT IMPLEMENTED */
+ /* rxpdu_potout_ms: flag indicating the poll retransmit time out in ms - NOT IMPLEMENTED */
+ /* rxpdu_sptout_ms: flag indicating status prohibit timeout in ms - NOT IMPLEMENTED */
+ /* TODO? */
+ uint32_t rxbuf_occ_bytes; /* current rx buffer occupancy in terms of amount of bytes (average: NOT IMPLEMENTED) */
+ /* TODO? */
+ uint32_t rxbuf_occ_pkts; /* current rx buffer occupancy in terms of number of packets (average: NOT IMPLEMENTED) */
+
+ /* SDU stats */
+ /* TX */
+ uint32_t txsdu_pkts; /* number of SDUs delivered */
+ uint32_t txsdu_bytes; /* number of bytes of SDUs delivered */
+
+ /* RX */
+ uint32_t rxsdu_pkts; /* number of SDUs received */
+ uint32_t rxsdu_bytes; /* number of bytes of SDUs received */
+ uint32_t rxsdu_dd_pkts; /* number of dropped or discarded SDUs */
+ uint32_t rxsdu_dd_bytes; /* number of bytes of SDUs dropped or discarded */
+
+ /* Average time for an SDU to be passed to MAC.
+ * Actually measures the time it takes for any part of an SDU to be
+ * passed to MAC for the first time, that is: the first TX of (part of) the
+ * SDU.
+ * Since the MAC schedules in advance, it does not measure the time of
+ * transmission over the air, just the time to reach the MAC layer.
+ */
+ double txsdu_avg_time_to_tx;
+
+} nr_rlc_statistics_t;
+
typedef struct {
int status_size;
int tx_size;
@@ -52,6 +123,8 @@ typedef struct nr_rlc_entity_t {
int (*available_tx_space)(struct nr_rlc_entity_t *entity);
+ void (*get_stats)(struct nr_rlc_entity_t *entity, nr_rlc_statistics_t *out);
+
/* callbacks provided to the RLC module */
void (*deliver_sdu)(void *deliver_sdu_data, struct nr_rlc_entity_t *entity,
char *buf, int size);
@@ -67,6 +140,10 @@ typedef struct nr_rlc_entity_t {
void *max_retx_reached_data;
/* buffer status computation */
nr_rlc_entity_buffer_status_t bstatus;
+
+ nr_rlc_statistics_t stats;
+ time_average_t *txsdu_avg_time_to_tx;
+ int avg_time_is_on;
} nr_rlc_entity_t;
nr_rlc_entity_t *new_nr_rlc_entity_am(
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c b/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
index 91e2bed11a..3789bfad46 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
@@ -27,6 +27,7 @@
#include "nr_rlc_pdu.h"
#include "LOG/log.h"
+#include "common/utils/time_stat.h"
/* for a given SDU/SDU segment, computes the corresponding PDU header size */
static int compute_pdu_header_size(nr_rlc_entity_am_t *entity,
@@ -221,6 +222,9 @@ static void reassemble_and_deliver(nr_rlc_entity_am_t *entity, int sn)
entity->common.deliver_sdu(entity->common.deliver_sdu_data,
(nr_rlc_entity_t *)entity,
sdu, so);
+
+ entity->common.stats.txsdu_pkts++;
+ entity->common.stats.txsdu_bytes += so;
}
static void reception_actions(nr_rlc_entity_am_t *entity, nr_rlc_pdu_t *pdu)
@@ -473,19 +477,18 @@ process_wait_list_head:
* if fully acked
*/
if (sn_compare_tx(entity, cur_wait_list->sdu->sn, ack_sn) < 0) {
- nr_rlc_sdu_segment_t *cur = cur_wait_list;
- int upper_layer_id = cur->sdu->upper_layer_id;
- int sdu_size = cur->sdu->size;
- cur_wait_list = cur_wait_list->next;
- prev_wait_list->next = cur_wait_list;
+ int upper_layer_id = cur_wait_list->sdu->upper_layer_id;
+ int sdu_size = cur_wait_list->sdu->size;
+ prev_wait_list->next = cur_wait_list->next;
if (cur_wait_list == entity->wait_end)
end_wait_list = prev_wait_list;
- if (nr_rlc_free_sdu_segment(cur)) {
+ if (nr_rlc_free_sdu_segment(cur_wait_list)) {
entity->tx_size -= sdu_size;
entity->common.sdu_successful_delivery(
entity->common.sdu_successful_delivery_data,
(nr_rlc_entity_t *)entity, upper_layer_id);
}
+ cur_wait_list = prev_wait_list->next;
goto process_next_pdu;
}
@@ -594,19 +597,18 @@ nacks_done:
/* current segment is acked, free it, indicate successful delivery
* if fully acked
*/
- nr_rlc_sdu_segment_t *cur = cur_wait_list;
- int upper_layer_id = cur->sdu->upper_layer_id;
- int sdu_size = cur->sdu->size;
+ int upper_layer_id = cur_wait_list->sdu->upper_layer_id;
+ int sdu_size = cur_wait_list->sdu->size;
prev_wait_list->next = cur_wait_list->next;
if (cur_wait_list == entity->wait_end)
end_wait_list = prev_wait_list;
- cur_wait_list = cur_wait_list->next;
- if (nr_rlc_free_sdu_segment(cur)) {
+ if (nr_rlc_free_sdu_segment(cur_wait_list)) {
entity->tx_size -= sdu_size;
entity->common.sdu_successful_delivery(
entity->common.sdu_successful_delivery_data,
(nr_rlc_entity_t *)entity, upper_layer_id);
}
+ cur_wait_list = prev_wait_list->next;
}
/* deal with retransmit list */
while (cur_retransmit_list != NULL
@@ -684,6 +686,9 @@ void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity,
int is_first;
int is_last;
+ entity->common.stats.rxpdu_pkts++;
+ entity->common.stats.rxpdu_bytes += size;
+
nr_rlc_pdu_decoder_init(&decoder, buffer, size);
dc = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder);
@@ -733,6 +738,10 @@ void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity,
LOG_D(RLC, "%s:%d:%s: warning: discard PDU, sn out of window (sn %d rx_next %d)\n",
__FILE__, __LINE__, __FUNCTION__,
sn, entity->rx_next);
+
+ entity->common.stats.rxpdu_ow_pkts++;
+ entity->common.stats.rxpdu_ow_bytes += size;
+
goto discard;
}
@@ -740,6 +749,10 @@ void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity,
if (segment_already_received(entity, sn, so, data_size)) {
LOG_D(RLC, "%s:%d:%s: warning: discard PDU, already received\n",
__FILE__, __LINE__, __FUNCTION__);
+
+ entity->common.stats.rxpdu_dup_pkts++;
+ entity->common.stats.rxpdu_dup_bytes += size;
+
goto discard;
}
@@ -779,6 +792,9 @@ discard:
if (p)
entity->status_triggered = 1;
+ entity->common.stats.rxpdu_dd_pkts++;
+ entity->common.stats.rxpdu_dd_bytes += size;
+
#undef R
}
@@ -1309,6 +1325,11 @@ static int generate_status(nr_rlc_entity_am_t *entity, char *buffer, int size)
/* start t_status_prohibit */
entity->t_status_prohibit_start = entity->t_current;
+ entity->common.stats.txpdu_pkts++;
+ entity->common.stats.txpdu_bytes += encoder.byte;
+ entity->common.stats.txpdu_status_pkts++;
+ entity->common.stats.txpdu_status_bytes += encoder.byte;
+
return encoder.byte;
}
@@ -1473,6 +1494,8 @@ static int generate_retx_pdu(nr_rlc_entity_am_t *entity, char *buffer,
/* update buffer status */
entity->common.bstatus.retx_size += compute_pdu_header_size(entity, next_sdu)
+ next_sdu->size;
+
+ entity->common.stats.txpdu_segmented++;
}
/* put SDU/SDU segment in the wait list */
@@ -1496,7 +1519,14 @@ static int generate_retx_pdu(nr_rlc_entity_am_t *entity, char *buffer,
entity->force_poll = 0;
}
- return serialize_sdu(entity, sdu, buffer, size, p);
+ int ret_size = serialize_sdu(entity, sdu, buffer, size, p);
+ entity->common.stats.txpdu_pkts++;
+ entity->common.stats.txpdu_bytes += ret_size;
+ entity->common.stats.txpdu_retx_pkts++;
+ entity->common.stats.txpdu_retx_bytes += ret_size;
+
+ return ret_size;
+// return serialize_sdu(entity, sdu, buffer, size, p);
}
static int generate_tx_pdu(nr_rlc_entity_am_t *entity, char *buffer, int size)
@@ -1544,6 +1574,8 @@ static int generate_tx_pdu(nr_rlc_entity_am_t *entity, char *buffer, int size)
entity->tx_list = next_sdu;
if (entity->tx_end == NULL)
entity->tx_end = entity->tx_list;
+
+ entity->common.stats.txpdu_segmented++;
/* update buffer status */
entity->common.bstatus.tx_size += compute_pdu_header_size(entity, next_sdu)
+ next_sdu->size;
@@ -1582,8 +1614,21 @@ static int generate_tx_pdu(nr_rlc_entity_am_t *entity, char *buffer, int size)
p = 1;
entity->force_poll = 0;
}
+ int ret_size = serialize_sdu(entity, sdu, buffer, size, p);
- return serialize_sdu(entity, sdu, buffer, size, p);
+ entity->common.stats.txpdu_pkts++;
+ entity->common.stats.txpdu_bytes += ret_size;
+
+ if (sdu->sdu->time_of_arrival) {
+ uint64_t time_now = time_average_now();
+ uint64_t waited_time = time_now - sdu->sdu->time_of_arrival;
+ /* set time_of_arrival to 0 so as to update stats only once */
+ sdu->sdu->time_of_arrival = 0;
+ time_average_add(entity->common.txsdu_avg_time_to_tx, time_now, waited_time);
+ }
+
+ return ret_size;
+// return serialize_sdu(entity, sdu, buffer, size, p);
}
nr_rlc_entity_buffer_status_t nr_rlc_entity_am_buffer_status(
@@ -1635,6 +1680,9 @@ void nr_rlc_entity_am_recv_sdu(nr_rlc_entity_t *_entity,
nr_rlc_entity_am_t *entity = (nr_rlc_entity_am_t *)_entity;
nr_rlc_sdu_segment_t *sdu;
+ entity->common.stats.rxsdu_pkts++;
+ entity->common.stats.rxsdu_bytes += size;
+
if (size > NR_SDU_MAX) {
LOG_E(RLC, "%s:%d:%s: fatal: SDU size too big (%d bytes)\n",
__FILE__, __LINE__, __FUNCTION__, size);
@@ -1667,6 +1715,9 @@ void nr_rlc_entity_am_recv_sdu(nr_rlc_entity_t *_entity,
/* update buffer status */
entity->common.bstatus.tx_size += compute_pdu_header_size(entity, sdu)
+ sdu->size;
+
+ if (entity->common.avg_time_is_on)
+ sdu->sdu->time_of_arrival = time_average_now();
}
/*************************************************************************/
@@ -1908,6 +1959,7 @@ void nr_rlc_entity_am_delete(nr_rlc_entity_t *_entity)
{
nr_rlc_entity_am_t *entity = (nr_rlc_entity_am_t *)_entity;
clear_entity(entity);
+ time_average_free(entity->common.txsdu_avg_time_to_tx);
free(entity);
}
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.c b/openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.c
index f85edbba0f..cfadf43d99 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_entity_tm.c
@@ -25,6 +25,7 @@
#include
#include "nr_rlc_pdu.h"
+#include "common/utils/time_stat.h"
#include "LOG/log.h"
@@ -36,9 +37,16 @@ void nr_rlc_entity_tm_recv_pdu(nr_rlc_entity_t *_entity,
char *buffer, int size)
{
nr_rlc_entity_tm_t *entity = (nr_rlc_entity_tm_t *)_entity;
+
+ entity->common.stats.rxpdu_pkts++;
+ entity->common.stats.rxpdu_bytes += size;
+
entity->common.deliver_sdu(entity->common.deliver_sdu_data,
(nr_rlc_entity_t *)entity,
buffer, size);
+
+ entity->common.stats.txsdu_pkts++;
+ entity->common.stats.txsdu_bytes += size;
}
/*************************************************************************/
@@ -68,6 +76,16 @@ static int generate_tx_pdu(nr_rlc_entity_tm_t *entity, char *buffer, int size)
memcpy(buffer, sdu->sdu->data, sdu->size);
entity->tx_size -= sdu->size;
+ entity->common.stats.txpdu_pkts++;
+ entity->common.stats.txpdu_bytes += size;
+
+ if (sdu->sdu->time_of_arrival) {
+ uint64_t time_now = time_average_now();
+ uint64_t waited_time = time_now - sdu->sdu->time_of_arrival;
+ /* set time_of_arrival to 0 so as to update stats only once */
+ sdu->sdu->time_of_arrival = 0;
+ time_average_add(entity->common.txsdu_avg_time_to_tx, time_now, waited_time);
+ }
/* update buffer status */
entity->common.bstatus.tx_size -= sdu->size;
@@ -109,6 +127,9 @@ void nr_rlc_entity_tm_recv_sdu(nr_rlc_entity_t *_entity,
nr_rlc_entity_tm_t *entity = (nr_rlc_entity_tm_t *)_entity;
nr_rlc_sdu_segment_t *sdu;
+ entity->common.stats.rxsdu_pkts++;
+ entity->common.stats.rxsdu_bytes += size;
+
if (size > NR_SDU_MAX) {
LOG_E(RLC, "%s:%d:%s: fatal: SDU size too big (%d bytes)\n",
__FILE__, __LINE__, __FUNCTION__, size);
@@ -118,6 +139,10 @@ void nr_rlc_entity_tm_recv_sdu(nr_rlc_entity_t *_entity,
if (entity->tx_size + size > entity->tx_maxsize) {
LOG_D(RLC, "%s:%d:%s: warning: SDU rejected, SDU buffer full\n",
__FILE__, __LINE__, __FUNCTION__);
+
+ entity->common.stats.rxsdu_dd_pkts++;
+ entity->common.stats.rxsdu_dd_bytes += size;
+
return;
}
@@ -129,6 +154,9 @@ void nr_rlc_entity_tm_recv_sdu(nr_rlc_entity_t *_entity,
/* update buffer status */
entity->common.bstatus.tx_size += sdu->size;
+
+ if (entity->common.avg_time_is_on)
+ sdu->sdu->time_of_arrival = time_average_now();
}
/*************************************************************************/
@@ -172,6 +200,7 @@ void nr_rlc_entity_tm_delete(nr_rlc_entity_t *_entity)
{
nr_rlc_entity_tm_t *entity = (nr_rlc_entity_tm_t *)_entity;
clear_entity(entity);
+ time_average_free(entity->common.txsdu_avg_time_to_tx);
free(entity);
}
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c b/openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c
index 5f2fd592a0..43a2189c51 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c
@@ -27,6 +27,7 @@
#include "nr_rlc_pdu.h"
#include "LOG/log.h"
+#include "common/utils/time_stat.h"
/* for a given SDU/SDU segment, computes the corresponding PDU header size */
static int compute_pdu_header_size(nr_rlc_entity_um_t *entity,
@@ -179,6 +180,9 @@ static void reassemble_and_deliver(nr_rlc_entity_um_t *entity, int sn)
entity->common.deliver_sdu(entity->common.deliver_sdu_data,
(nr_rlc_entity_t *)entity,
sdu, so);
+
+ entity->common.stats.txsdu_pkts++;
+ entity->common.stats.txsdu_bytes += so;
}
static void reception_actions(nr_rlc_entity_um_t *entity, nr_rlc_pdu_t *pdu)
@@ -208,6 +212,15 @@ static void reception_actions(nr_rlc_entity_um_t *entity, nr_rlc_pdu_t *pdu)
nr_rlc_pdu_t *p = entity->rx_list;
entity->rx_size -= p->size;
entity->rx_list = p->next;
+
+ entity->common.stats.rxpdu_dd_pkts++;
+ /* we don't count PDU header bytes here, so be it */
+ entity->common.stats.rxpdu_dd_bytes += p->size;
+
+ entity->common.stats.rxpdu_ow_pkts++;
+ /* we don't count PDU header bytes here, so be it */
+ entity->common.stats.rxpdu_ow_bytes += p->size;
+
nr_rlc_free_pdu(p);
}
@@ -272,6 +285,9 @@ void nr_rlc_entity_um_recv_pdu(nr_rlc_entity_t *_entity,
int is_first;
int is_last;
+ entity->common.stats.rxpdu_pkts++;
+ entity->common.stats.rxpdu_bytes += size;
+
nr_rlc_pdu_decoder_init(&decoder, buffer, size);
si = nr_rlc_pdu_decoder_get_bits(&decoder, 2); R(decoder);
@@ -290,6 +306,10 @@ void nr_rlc_entity_um_recv_pdu(nr_rlc_entity_t *_entity,
entity->common.deliver_sdu(entity->common.deliver_sdu_data,
(nr_rlc_entity_t *)entity,
buffer + 1, size - 1);
+
+ entity->common.stats.txsdu_pkts++;
+ entity->common.stats.txsdu_bytes += size - 1;
+
return;
}
@@ -350,6 +370,9 @@ err:
goto discard;
discard:
+ entity->common.stats.rxpdu_dd_pkts++;
+ entity->common.stats.rxpdu_dd_bytes += size;
+
return;
#undef R
@@ -434,6 +457,8 @@ static nr_rlc_sdu_segment_t *resegment(nr_rlc_sdu_segment_t *sdu,
next->so = sdu->so + sdu->size;
next->is_first = 0;
+ entity->common.stats.txpdu_segmented++;
+
return next;
}
@@ -478,6 +503,8 @@ static int generate_tx_pdu(nr_rlc_entity_um_t *entity, char *buffer, int size)
entity->tx_list = next_sdu;
if (entity->tx_end == NULL)
entity->tx_end = entity->tx_list;
+
+ entity->common.stats.txpdu_segmented++;
/* update buffer status */
entity->common.bstatus.tx_size += compute_pdu_header_size(entity, next_sdu)
+ next_sdu->size;
@@ -490,6 +517,18 @@ static int generate_tx_pdu(nr_rlc_entity_um_t *entity, char *buffer, int size)
ret = serialize_sdu(entity, sdu, buffer, size);
entity->tx_size -= sdu->size;
+
+ entity->common.stats.txpdu_pkts++;
+ entity->common.stats.txpdu_bytes += size;
+
+ if (sdu->sdu->time_of_arrival) {
+ uint64_t time_now = time_average_now();
+ uint64_t waited_time = time_now - sdu->sdu->time_of_arrival;
+ /* set time_of_arrival to 0 so as to update stats only once */
+ sdu->sdu->time_of_arrival = 0;
+ time_average_add(entity->common.txsdu_avg_time_to_tx, time_now, waited_time);
+ }
+
nr_rlc_free_sdu_segment(sdu);
return ret;
@@ -527,6 +566,9 @@ void nr_rlc_entity_um_recv_sdu(nr_rlc_entity_t *_entity,
nr_rlc_entity_um_t *entity = (nr_rlc_entity_um_t *)_entity;
nr_rlc_sdu_segment_t *sdu;
+ entity->common.stats.rxsdu_pkts++;
+ entity->common.stats.rxsdu_bytes += size;
+
if (size > NR_SDU_MAX) {
LOG_E(RLC, "%s:%d:%s: fatal: SDU size too big (%d bytes)\n",
__FILE__, __LINE__, __FUNCTION__, size);
@@ -536,6 +578,10 @@ void nr_rlc_entity_um_recv_sdu(nr_rlc_entity_t *_entity,
if (entity->tx_size + size > entity->tx_maxsize) {
LOG_W(RLC, "%s:%d:%s: warning: SDU rejected, SDU buffer full\n",
__FILE__, __LINE__, __FUNCTION__);
+
+ entity->common.stats.rxsdu_dd_pkts++;
+ entity->common.stats.rxsdu_dd_bytes += size;
+
return;
}
@@ -548,6 +594,9 @@ void nr_rlc_entity_um_recv_sdu(nr_rlc_entity_t *_entity,
/* update buffer status */
entity->common.bstatus.tx_size += compute_pdu_header_size(entity, sdu)
+ sdu->size;
+
+ if (entity->common.avg_time_is_on)
+ sdu->sdu->time_of_arrival = time_average_now();
}
/*************************************************************************/
@@ -584,6 +633,11 @@ static void check_t_reassembly(nr_rlc_entity_um_t *entity)
nr_rlc_pdu_t *p = cur;
cur = cur->next;
entity->rx_list = cur;
+
+ entity->common.stats.rxpdu_dd_pkts++;
+ /* we don't count PDU header bytes here, so be it */
+ entity->common.stats.rxpdu_dd_bytes += p->size;
+
nr_rlc_free_pdu(p);
}
@@ -693,6 +747,7 @@ void nr_rlc_entity_um_delete(nr_rlc_entity_t *_entity)
{
nr_rlc_entity_um_t *entity = (nr_rlc_entity_um_t *)_entity;
clear_entity(entity);
+ time_average_free(entity->common.txsdu_avg_time_to_tx);
free(entity);
}
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
index 4bd4ea75fd..30d1d13baa 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
@@ -1110,3 +1110,66 @@ void rlc_tick(int a, int b)
__FILE__, __LINE__, __FUNCTION__);
exit(1);
}
+
+void nr_rlc_activate_avg_time_to_tx(
+ const rnti_t rnti,
+ const logical_chan_id_t channel_id,
+ const bool is_on)
+{
+ nr_rlc_ue_t *ue;
+ nr_rlc_entity_t *rb;
+
+ nr_rlc_manager_lock(nr_rlc_ue_manager);
+ ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti);
+
+ switch (channel_id) {
+ case 1 ... 3: rb = ue->srb[channel_id - 1]; break;
+ case 4 ... 8: rb = ue->drb[channel_id - 4]; break;
+ default: rb = NULL; break;
+ }
+
+ if (rb != NULL) {
+ rb->avg_time_is_on = is_on;
+ time_average_reset(rb->txsdu_avg_time_to_tx);
+ } else {
+ LOG_E(RLC, "[%s] Radio Bearer (channel ID %d) is NULL for UE with rnti %x\n", __FUNCTION__, channel_id, rnti);
+ }
+
+ nr_rlc_manager_unlock(nr_rlc_ue_manager);
+}
+
+/* returns false in case of error, true if everything ok */
+const bool nr_rlc_get_statistics(
+ int rnti,
+ int srb_flag,
+ int rb_id,
+ nr_rlc_statistics_t *out)
+{
+ nr_rlc_ue_t *ue;
+ nr_rlc_entity_t *rb;
+ bool ret;
+
+ nr_rlc_manager_lock(nr_rlc_ue_manager);
+ ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rnti);
+
+ rb = NULL;
+
+ if (srb_flag) {
+ if (rb_id >= 1 && rb_id <= 2)
+ rb = ue->srb[rb_id - 1];
+ } else {
+ if (rb_id >= 1 && rb_id <= 5)
+ rb = ue->drb[rb_id - 1];
+ }
+
+ if (rb != NULL) {
+ rb->get_stats(rb, out);
+ ret = true;
+ } else {
+ ret = false;
+ }
+
+ nr_rlc_manager_unlock(nr_rlc_ue_manager);
+
+ return ret;
+}
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
index 92fbba9bec..83396f71e8 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
@@ -51,3 +51,8 @@ void nr_rlc_bearer_init_ul_spec(struct NR_LogicalChannelConfig *mac_LogicalChann
int nr_rlc_get_available_tx_space(
const rnti_t rntiP,
const logical_chan_id_t channel_idP);
+
+void nr_rlc_activate_avg_time_to_tx(
+ const rnti_t rnti,
+ const logical_chan_id_t channel_id,
+ const bool is_on);
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_sdu.h b/openair2/LAYER2/nr_rlc/nr_rlc_sdu.h
index 20cc90f185..333b8742c3 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_sdu.h
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_sdu.h
@@ -22,6 +22,8 @@
#ifndef _NR_RLC_SDU_H_
#define _NR_RLC_SDU_H_
+#include
+
typedef struct nr_rlc_sdu_t {
int sn;
int upper_layer_id;
@@ -34,6 +36,12 @@ typedef struct nr_rlc_sdu_t {
* when it equals ref_count we can free the SDU
* completely
*/
+
+ /* for statistics, will be set to 0 after SDU (or first part of it) has
+ * been serialized for MAC for the first time so that only the first
+ * transmission is used for statistics
+ */
+ uint64_t time_of_arrival; /* unit microsecond */
} nr_rlc_sdu_t;
typedef struct nr_rlc_sdu_segment_t {
diff --git a/openair2/LAYER2/nr_rlc/tests/Makefile b/openair2/LAYER2/nr_rlc/tests/Makefile
index 746d61483b..c23726444d 100644
--- a/openair2/LAYER2/nr_rlc/tests/Makefile
+++ b/openair2/LAYER2/nr_rlc/tests/Makefile
@@ -1,8 +1,8 @@
CC=gcc
-CFLAGS=-Wall -g --coverage -I.
+CFLAGS=-Wall -g --coverage -I. -I../../../..
LIB=nr_rlc_entity.o nr_rlc_entity_am.o nr_rlc_entity_um.o nr_rlc_entity_tm.o \
- nr_rlc_pdu.o nr_rlc_sdu.o
+ nr_rlc_pdu.o nr_rlc_sdu.o time_stat.o
tests:
@./run_tests.sh
diff --git a/openair2/LAYER2/nr_rlc/tests/time_stat.c b/openair2/LAYER2/nr_rlc/tests/time_stat.c
new file mode 100644
index 0000000000..dfc8a0d014
--- /dev/null
+++ b/openair2/LAYER2/nr_rlc/tests/time_stat.c
@@ -0,0 +1,25 @@
+#include "../../../../common/utils/time_stat.h"
+
+time_average_t *time_average_new(int duration, int initial_size)
+{
+ return (void *)0;
+}
+
+void time_average_free(time_average_t *t)
+{
+}
+
+void time_average_add(time_average_t *t, uint64_t time, uint64_t value)
+{
+}
+
+double time_average_get_average(time_average_t *t, uint64_t time)
+{
+ return 0;
+}
+
+uint64_t time_average_now(void)
+{
+ return 0;
+}
+
diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c
index 04b0bb2d3c..47b6e38402 100755
--- a/openair2/RRC/NR/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c
@@ -1664,12 +1664,7 @@ void fill_initial_cellGroupConfig(int uid,
tag->tag_Id = 0;
tag->timeAlignmentTimer = NR_TimeAlignmentTimer_infinity;
ASN_SEQUENCE_ADD(&mac_CellGroupConfig->tag_Config->tag_ToAddModList->list,tag);
- mac_CellGroupConfig->phr_Config = calloc(1, sizeof(*mac_CellGroupConfig->phr_Config));
- mac_CellGroupConfig->phr_Config->present = NR_SetupRelease_PHR_Config_PR_setup;
- mac_CellGroupConfig->phr_Config->choice.setup = calloc(1, sizeof(*mac_CellGroupConfig->phr_Config->choice.setup));
- mac_CellGroupConfig->phr_Config->choice.setup->phr_PeriodicTimer = NR_PHR_Config__phr_PeriodicTimer_sf10;
- mac_CellGroupConfig->phr_Config->choice.setup->phr_ProhibitTimer = NR_PHR_Config__phr_ProhibitTimer_sf10;
- mac_CellGroupConfig->phr_Config->choice.setup->phr_Tx_PowerFactorChange = NR_PHR_Config__phr_Tx_PowerFactorChange_dB1;
+ set_phr_config(mac_CellGroupConfig);
mac_CellGroupConfig->schedulingRequestConfig = calloc(1, sizeof(*mac_CellGroupConfig->schedulingRequestConfig));
mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList = CALLOC(1,sizeof(*mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList));
diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c
index 9a1d137a8c..deb2c4965e 100644
--- a/openair2/RRC/NR/nr_rrc_config.c
+++ b/openair2/RRC/NR/nr_rrc_config.c
@@ -1147,4 +1147,13 @@ void config_uplinkBWP(NR_BWP_Uplink_t *ubwp,
ubwp->bwp_Dedicated->beamFailureRecoveryConfig = NULL;
}
+void set_phr_config(NR_MAC_CellGroupConfig_t *mac_CellGroupConfig)
+{
+ mac_CellGroupConfig->phr_Config = calloc(1, sizeof(*mac_CellGroupConfig->phr_Config));
+ mac_CellGroupConfig->phr_Config->present = NR_SetupRelease_PHR_Config_PR_setup;
+ mac_CellGroupConfig->phr_Config->choice.setup = calloc(1, sizeof(*mac_CellGroupConfig->phr_Config->choice.setup));
+ mac_CellGroupConfig->phr_Config->choice.setup->phr_PeriodicTimer = NR_PHR_Config__phr_PeriodicTimer_sf10;
+ mac_CellGroupConfig->phr_Config->choice.setup->phr_ProhibitTimer = NR_PHR_Config__phr_ProhibitTimer_sf10;
+ mac_CellGroupConfig->phr_Config->choice.setup->phr_Tx_PowerFactorChange = NR_PHR_Config__phr_Tx_PowerFactorChange_dB1;
+}
diff --git a/openair2/RRC/NR/nr_rrc_config.h b/openair2/RRC/NR/nr_rrc_config.h
index 49922aed6b..f8bdc4be53 100644
--- a/openair2/RRC/NR/nr_rrc_config.h
+++ b/openair2/RRC/NR/nr_rrc_config.h
@@ -119,6 +119,7 @@ typedef struct physicalcellgroup_s{
long RNTI_Value[MAX_NUM_CCs];
}physicalcellgroup_t;
+void set_phr_config(NR_MAC_CellGroupConfig_t *mac_CellGroupConfig);
uint64_t get_ssb_bitmap(const NR_ServingCellConfigCommon_t *scc);
void rrc_coreset_config(NR_ControlResourceSet_t *coreset,
int bwp_id,
diff --git a/openair2/RRC/NR/rrc_gNB_reconfig.c b/openair2/RRC/NR/rrc_gNB_reconfig.c
index 0f1da63510..1dca25b618 100644
--- a/openair2/RRC/NR/rrc_gNB_reconfig.c
+++ b/openair2/RRC/NR/rrc_gNB_reconfig.c
@@ -133,16 +133,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
tag->tag_Id = 0;
tag->timeAlignmentTimer = NR_TimeAlignmentTimer_infinity;
ASN_SEQUENCE_ADD(&mac_CellGroupConfig->tag_Config->tag_ToAddModList->list,tag);
- mac_CellGroupConfig->phr_Config = calloc(1,sizeof(*mac_CellGroupConfig->phr_Config));
- mac_CellGroupConfig->phr_Config->present = NR_SetupRelease_PHR_Config_PR_setup;
- mac_CellGroupConfig->phr_Config->choice.setup = calloc(1,sizeof(*mac_CellGroupConfig->phr_Config->choice.setup));
- mac_CellGroupConfig->phr_Config->choice.setup->phr_PeriodicTimer = NR_PHR_Config__phr_PeriodicTimer_sf20;
- mac_CellGroupConfig->phr_Config->choice.setup->phr_ProhibitTimer = NR_PHR_Config__phr_ProhibitTimer_sf0;
- mac_CellGroupConfig->phr_Config->choice.setup->phr_Tx_PowerFactorChange = NR_PHR_Config__phr_Tx_PowerFactorChange_dB3;
- mac_CellGroupConfig->phr_Config->choice.setup->multiplePHR=false;
- mac_CellGroupConfig->phr_Config->choice.setup->dummy=false;
- mac_CellGroupConfig->phr_Config->choice.setup->phr_Type2OtherCell = false;
- mac_CellGroupConfig->phr_Config->choice.setup->phr_ModeOtherCG = NR_PHR_Config__phr_ModeOtherCG_real;
+ set_phr_config(mac_CellGroupConfig);
mac_CellGroupConfig->skipUplinkTxDynamic=false;
mac_CellGroupConfig->ext1 = NULL;
secondaryCellGroup->physicalCellGroupConfig = calloc(1,sizeof(*secondaryCellGroup->physicalCellGroupConfig));
diff --git a/openair2/UTIL/OPT/ws_compiler_tests.h b/openair2/UTIL/OPT/ws_compiler_tests.h
deleted file mode 100644
index 46a4ab6099..0000000000
--- a/openair2/UTIL/OPT/ws_compiler_tests.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/* ws_compiler_tests.h
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs
- * Copyright 1998 Gerald Combs
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#ifndef __WS_COMPILER_TESTS_H__
-#define __WS_COMPILER_TESTS_H__
-
-/*
- * This was introduced by Clang:
- *
- * http://clang.llvm.org/docs/LanguageExtensions.html#has-attribute
- *
- * in some version (which version?); it has been picked up by GCC 5.0.
- */
-#ifndef __has_attribute
- /*
- * It's a macro, so you can check whether it's defined to check
- * whether it's supported.
- *
- * If it's not, define it to always return 0, so that we move on to
- * the fallback checks.
- */
- #define __has_attribute(x) 0
-#endif
-
-/*
- * Note that the C90 spec's "6.8.1 Conditional inclusion" and the
- * C99 spec's and C11 spec's "6.10.1 Conditional inclusion" say:
- *
- * Prior to evaluation, macro invocations in the list of preprocessing
- * tokens that will become the controlling constant expression are
- * replaced (except for those macro names modified by the defined unary
- * operator), just as in normal text. If the token "defined" is
- * generated as a result of this replacement process or use of the
- * "defined" unary operator does not match one of the two specified
- * forms prior to macro replacement, the behavior is undefined.
- *
- * so you shouldn't use defined() in a #define that's used in #if or
- * #elif. Some versions of Clang, for example, will warn about this.
- *
- * Instead, we check whether the pre-defined macros for particular
- * compilers are defined and, if not, define the "is this version XXX
- * or a later version of this compiler" macros as 0.
- */
-
-/*
- * Check whether this is GCC major.minor or a later release, or some
- * compiler that claims to be "just like GCC" of that version or a
- * later release.
- */
-
-#if !defined(__GNUC__)
- #define WS_IS_AT_LEAST_GNUC_VERSION(major, minor) 0
-#else
- #define WS_IS_AT_LEAST_GNUC_VERSION(major, minor) \
- (__GNUC__ > (major) || \
- (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
-#endif
-
-/*
- * Check whether this is Clang major.minor or a later release.
- */
-
-#if !defined(__clang__)
- #define WS_IS_AT_LEAST_CLANG_VERSION(major, minor) 0
-#else
- #define WS_IS_AT_LEAST_CLANG_VERSION(major, minor) \
- (__clang_major__ > (major) || \
- (__clang_major__ == (major) && __clang_minor__ >= (minor)))
-#endif
-
-/*
- * Check whether this is Sun C/SunPro C/Oracle Studio major.minor
- * or a later release.
- *
- * The version number in __SUNPRO_C is encoded in hex BCD, with the
- * uppermost hex digit being the major version number, the next
- * one or two hex digits being the minor version number, and
- * the last digit being the patch version.
- *
- * It represents the *compiler* version, not the product version;
- * see
- *
- * https://sourceforge.net/p/predef/wiki/Compilers/
- *
- * for a partial mapping, which we assume continues for later
- * 12.x product releases.
- */
-
-#if !defined(__SUNPRO_C)
- #define WS_IS_AT_LEAST_SUNC_VERSION(major, minor) 0
-#else
- #define WS_SUNPRO_VERSION_TO_BCD(major, minor) \
- (((minor) >= 10) ? \
- (((major) << 12) | (((minor)/10) << 8) | (((minor)%10) << 4)) : \
- (((major) << 8) | ((minor) << 4)))
- #define WS_IS_AT_LEAST_SUNC_VERSION(major, minor) \
- (__SUNPRO_C >= WS_SUNPRO_VERSION_TO_BCD((major), (minor)))
-#endif
-
-/*
- * Check whether this is IBM XL C major.minor or a later release.
- *
- * The version number in __xlC__ has the major version in the
- * upper 8 bits and the minor version in the lower 8 bits.
- */
-
-#if !defined(__xlC__)
- #define WS_IS_AT_LEAST_XL_C_VERSION(major, minor) 0
-#else
- #define WS_IS_AT_LEAST_XL_C_VERSION(major, minor) \
- (__xlC__ >= (((major) << 8) | (minor)))
-#endif
-
-/*
- * Check whether this is HP aC++/HP C major.minor or a later release.
- *
- * The version number in __HP_aCC is encoded in zero-padded decimal BCD,
- * with the "A." stripped off, the uppermost two decimal digits being
- * the major version number, the next two decimal digits being the minor
- * version number, and the last two decimal digits being the patch version.
- * (Strip off the A., remove the . between the major and minor version
- * number, and add two digits of patch.)
- */
-
-#if !defined(__HP_aCC)
- #define WS_IS_AT_LEAST_HP_C_VERSION(major, minor) 0
-#else
- #define WS_IS_AT_LEAST_HP_C_VERSION(major, minor) \
- (__HP_aCC >= ((major)*10000 + (minor)*100))
-#endif
-
-#endif /* __WS_COMPILER_TESTS_H__ */
diff --git a/openair2/UTIL/OPT/ws_symbol_export.h b/openair2/UTIL/OPT/ws_symbol_export.h
deleted file mode 100644
index 4c7a2f710a..0000000000
--- a/openair2/UTIL/OPT/ws_symbol_export.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Cross platform defines for exporting symbols from shared libraries
- *
- * Wireshark - Network traffic analyzer
- * By Balint Reczey
- * Copyright 2013 Balint Reczey
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#include "ws_compiler_tests.h"
-
-/** Reset symbol export behavior.
- * If you {un}define WS_BUILD_DLL on the fly you'll have to define this
- * as well.
- */
-#ifdef RESET_SYMBOL_EXPORT
-
-#ifdef SYMBOL_EXPORT_H
-#undef SYMBOL_EXPORT_H
-#endif
-
-#ifdef WS_DLL_PUBLIC
-#undef WS_DLL_PUBLIC
-#endif
-
-#ifdef WS_DLL_PUBLIC_DEF
-#undef WS_DLL_PUBLIC_DEF
-#endif
-
-#ifdef WS_DLL_LOCAL
-#undef WS_DLL_LOCAL
-#endif
-
-#endif /* RESET_SYMBOL_EXPORT */
-
-#ifndef SYMBOL_EXPORT_H
-#define SYMBOL_EXPORT_H
-
-/*
- * NOTE: G_HAVE_GNUC_VISIBILITY is defined only if all of
- *
- * __attribute__ ((visibility ("hidden")))
- *
- * __attribute__ ((visibility ("internal")))
- *
- * __attribute__ ((visibility ("protected")))
- *
- * __attribute__ ((visibility ("default")))
- *
- * are supported, and at least some versions of GCC from Apple support
- * "default" and "hidden" but not "internal" or "protected", so it
- * shouldn't be used to determine whether "hidden" or "default" is
- * supported.
- *
- * This also means that we shouldn't use G_GNUC_INTERNAL instead of
- * WS_DLL_LOCAL, as GLib uses G_HAVE_GNUC_VISIBILITY to determine
- * whether to use __attribute__ ((visibility ("hidden"))) for
- * G_GNUC_INTERNAL, and that will not use it even with compilers
- * that support it.
- */
-
-/* Originally copied from GCC Wiki at http://gcc.gnu.org/wiki/Visibility */
-#if defined _WIN32 || defined __CYGWIN__
- /* Compiling for Windows, so we use the Windows DLL declarations. */
- #ifdef WS_BUILD_DLL
- /*
- * Building a DLL; for all definitions, we want dllexport, and
- * (presumably so source from DLL and source from a program using the
- * DLL can both include a header that declares APIs and exported data
- * for the DLL), for declarations, either dllexport or dllimport will
- * work (they mean the same thing for a declaration when building a DLL).
- */
- #ifdef __GNUC__
- /* GCC */
- #define WS_DLL_PUBLIC_DEF __attribute__ ((dllexport))
- #else /* ! __GNUC__ */
- /*
- * Presumably MSVC.
- * Note: actually gcc seems to also support this syntax.
- */
- #define WS_DLL_PUBLIC_DEF __declspec(dllexport)
- #endif /* __GNUC__ */
- #else /* WS_BUILD_DLL */
- /*
- * Building a program; we should only see declarations, not definitions,
- * with WS_DLL_PUBLIC, and they all represent APIs or data imported
- * from a DLL, so use dllimport.
- *
- * For functions, export shouldn't be necessary; for data, it might
- * be necessary, e.g. if what's declared is an array whose size is
- * not given in the declaration.
- */
- #ifdef __GNUC__
- /* GCC */
- #define WS_DLL_PUBLIC_DEF __attribute__ ((dllimport))
- #elif ! (defined ENABLE_STATIC) /* ! __GNUC__ */
- /*
- * Presumably MSVC, and we're not building all-static.
- * Note: actually gcc seems to also support this syntax.
- */
- #define WS_DLL_PUBLIC_DEF __declspec(dllimport)
- #else /* ! __GNUC__ && ENABLE_STATIC */
- /*
- * Presumably MSVC, and we're building all-static, so we're
- * not building any DLLs.
- */
- #define WS_DLL_PUBLIC_DEF
- #endif /* __GNUC__ */
- #endif /* WS_BUILD_DLL */
-
- /*
- * Symbols in a DLL are *not* exported unless they're specifically
- * flagged as exported, so, for a non-static but non-exported
- * symbol, we don't have to do anything.
- */
- #define WS_DLL_LOCAL
-#else /* defined _WIN32 || defined __CYGWIN__ */
- /*
- * Compiling for UN*X, where the dllimport and dllexport stuff
- * is neither necessary nor supported; just specify the
- * visibility if we have a compiler that supports doing so.
- */
- #if WS_IS_AT_LEAST_GNUC_VERSION(3,4) \
- || WS_IS_AT_LEAST_XL_C_VERSION(12,0)
- /*
- * GCC 3.4 or later, or some compiler asserting compatibility with
- * GCC 3.4 or later, or XL C 13.0 or later, so we have
- * __attribute__((visibility()).
- */
-
- /*
- * Symbols exported from libraries.
- */
- #define WS_DLL_PUBLIC_DEF __attribute__ ((visibility ("default")))
-
- /*
- * Non-static symbols *not* exported from libraries.
- */
- #define WS_DLL_LOCAL __attribute__ ((visibility ("hidden")))
- #elif WS_IS_AT_LEAST_SUNC_VERSION(5,5)
- /*
- * Sun C 5.5 or later, so we have __global and __hidden.
- * (Sun C 5.9 and later also have __attribute__((visibility()),
- * but there's no reason to prefer it with Sun C.)
- */
-
- /*
- * Symbols exported from libraries.
- */
- #define WS_DLL_PUBLIC_DEF __global
-
- /*
- * Non-static symbols *not* exported from libraries.
- */
- #define WS_DLL_LOCAL __hidden
- #else
- /*
- * We have neither a way to make stuff not explicitly marked as
- * visible invisible outside a library nor a way to make stuff
- * explicitly marked as local invisible outside the library.
- */
-
- /*
- * Symbols exported from libraries.
- */
- #define WS_DLL_PUBLIC_DEF
-
- /*
- * Non-static symbols *not* exported from libraries.
- */
- #define WS_DLL_LOCAL
- #endif
-#endif
-
-/*
- * You *must* use this for exported data *declarations*; if you use
- * WS_DLL_PUBLIC_DEF, some compilers, such as MSVC++, will complain
- * about array definitions with no size.
- *
- * You must *not* use this for exported data *definitions*, as that
- * will, for some compilers, cause warnings about items being initialized
- * and declared extern.
- *
- * Either can be used for exported *function* declarations and definitions.
- */
-#define WS_DLL_PUBLIC WS_DLL_PUBLIC_DEF extern
-
-#endif /* SYMBOL_EXPORT_H */
-
-/*
- * Editor modelines - http://www.wireshark.org/tools/modelines.html
- *
- * Local Variables:
- * c-basic-offset: 2
- * tab-width: 8
- * indent-tabs-mode: nil
- * End:
- *
- * vi: set shiftwidth=2 tabstop=8 expandtab:
- * :indentSize=2:tabSize=8:noTabs=true:
- */
diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.c b/openair3/NAS/NR_UE/nr_nas_msg_sim.c
index 43c3b56aa4..2b2d9b08a5 100644
--- a/openair3/NAS/NR_UE/nr_nas_msg_sim.c
+++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.c
@@ -733,16 +733,20 @@ static void generatePduSessionEstablishRequest(int Mod_id, uicc_t * uicc, as_nas
mm_msg->uplink_nas_transport.pdusessionid = 10;
mm_msg->uplink_nas_transport.requesttype = 1;
size += 3;
- mm_msg->uplink_nas_transport.snssai.length = 4;
+ const bool has_nssai_sd = uicc->nssai_sd != 0xffffff; // 0xffffff means "no SD", TS 23.003
+ const size_t nssai_len = has_nssai_sd ? 4 : 1;
+ mm_msg->uplink_nas_transport.snssai.length = nssai_len;
//Fixme: it seems there are a lot of memory errors in this: this value was on the stack,
// but pushed in a itti message to another thread
// this kind of error seems in many places in 5G NAS
- mm_msg->uplink_nas_transport.snssai.value=calloc(1,4);
+ mm_msg->uplink_nas_transport.snssai.value = calloc(1, nssai_len);
mm_msg->uplink_nas_transport.snssai.value[0] = uicc->nssai_sst;
- mm_msg->uplink_nas_transport.snssai.value[1] = (uicc->nssai_sd>>16)&0xFF;
- mm_msg->uplink_nas_transport.snssai.value[2] = (uicc->nssai_sd>>8)&0xFF;
- mm_msg->uplink_nas_transport.snssai.value[3] = (uicc->nssai_sd)&0xFF;
- size += (1+1+4);
+ if (has_nssai_sd) {
+ mm_msg->uplink_nas_transport.snssai.value[1] = (uicc->nssai_sd >> 16) & 0xFF;
+ mm_msg->uplink_nas_transport.snssai.value[2] = (uicc->nssai_sd >> 8) & 0xFF;
+ mm_msg->uplink_nas_transport.snssai.value[3] = (uicc->nssai_sd) & 0xFF;
+ }
+ size += 1 + 1 + nssai_len;
int dnnSize=strlen(uicc->dnnStr);
mm_msg->uplink_nas_transport.dnn.value=calloc(1,dnnSize+1);
mm_msg->uplink_nas_transport.dnn.length = dnnSize + 1;
diff --git a/openair3/UICC/usim_interface.c b/openair3/UICC/usim_interface.c
index 9d6e7c6ccb..78a3f1ee0a 100644
--- a/openair3/UICC/usim_interface.c
+++ b/openair3/UICC/usim_interface.c
@@ -44,7 +44,7 @@ extern uint16_t NB_UE_INST;
{"sqn", "USIM sqn\n", 0, strptr:&uicc->sqnStr, defstrval:"000000", TYPE_STRING, 0 }, \
{"dnn", "UE dnn (apn)\n", 0, strptr:&uicc->dnnStr, defstrval:"oai", TYPE_STRING, 0 }, \
{"nssai_sst", "UE nssai\n", 0, iptr:&uicc->nssai_sst, defintval:1, TYPE_INT, 0 }, \
- {"nssai_sd", "UE nssai\n", 0, iptr:&uicc->nssai_sd, defintval:1, TYPE_INT, 0 }, \
+ {"nssai_sd", "UE nssai\n", 0, iptr:&uicc->nssai_sd, defintval:0xffffff, TYPE_INT, 0 }, \
};
static uicc_t** uiccArray=NULL;
@@ -73,7 +73,10 @@ uicc_t *init_uicc(char *sectionName) {
// key, OPc, sqn, amf don't need to be read from the true USIM
int ret = config_get( uicc_params,sizeof(uicc_params)/sizeof(paramdef_t),sectionName);
AssertFatal(ret >= 0, "configuration couldn't be performed for uicc name: %s", sectionName);
- LOG_I(SIM, "UICC simulation: IMSI=%s, Ki=%s, OPc=%s\n", uicc->imsiStr, uicc->keyStr, uicc->opcStr);
+ LOG_I(SIM,
+ "UICC simulation: IMSI=%s, Ki=%s, OPc=%s, DNN=%s, SST=0x%02x, SD=0x%06x\n",
+ uicc->imsiStr, uicc->keyStr, uicc->opcStr,
+ uicc->dnnStr, uicc->nssai_sst, uicc->nssai_sd);
to_hex(uicc->keyStr,uicc->key, sizeof(uicc->key) );
to_hex(uicc->opcStr,uicc->opc, sizeof(uicc->opc) );
to_hex(uicc->sqnStr,uicc->sqn, sizeof(uicc->sqn) );
diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp
index 2c0bd46a5d..af2a0ee9e8 100644
--- a/openair3/ocp-gtpu/gtp_itf.cpp
+++ b/openair3/ocp-gtpu/gtp_itf.cpp
@@ -163,11 +163,46 @@ static teid_t gtpv1uNewTeid(void) {
}
instance_t legacyInstanceMapping=0;
-#define compatInst(a) ((a)==0 || (a)==INSTANCE_DEFAULT?legacyInstanceMapping:a)
+#define compatInst(a) ((a)==0 || (a)==INSTANCE_DEFAULT ? legacyInstanceMapping:a)
-#define GTPV1U_HEADER_SIZE (8)
+#define getInstRetVoid(insT) \
+ auto instChk=globGtp.instances.find(compatInst(insT)); \
+ if (instChk == globGtp.instances.end()) { \
+ LOG_E(GTPU,"try to get a gtp-u not existing output\n"); \
+ pthread_mutex_unlock(&globGtp.gtp_lock); \
+ return; \
+ } \
+ gtpEndPoint * inst=&instChk->second;
- #define HDR_MAX 256 // 256 is supposed to be larger than any gtp header
+#define getInstRetInt(insT) \
+ auto instChk=globGtp.instances.find(compatInst(insT)); \
+ if (instChk == globGtp.instances.end()) { \
+ LOG_E(GTPU,"try to get a gtp-u not existing output\n"); \
+ pthread_mutex_unlock(&globGtp.gtp_lock); \
+ return GTPNOK; \
+ } \
+ gtpEndPoint * inst=&instChk->second;
+
+
+#define getRntiRetVoid(insT, RnTi) \
+ auto ptrRnti=insT->ue2te_mapping.find(RnTi); \
+ \
+ if ( ptrRnti==insT->ue2te_mapping.end() ) { \
+ LOG_E(GTPU, "[%ld] gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", instance, rnti); \
+ pthread_mutex_unlock(&globGtp.gtp_lock); \
+ return; \
+ }
+
+#define getRntiRetInt(insT, RnTi) \
+ auto ptrRnti=insT->ue2te_mapping.find(RnTi); \
+ \
+ if ( ptrRnti==insT->ue2te_mapping.end() ) { \
+ LOG_E(GTPU, "[%ld] gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", instance, rnti); \
+ pthread_mutex_unlock(&globGtp.gtp_lock); \
+ return GTPNOK; \
+ }
+
+#define HDR_MAX 256 // 256 is supposed to be larger than any gtp header
static int gtpv1uCreateAndSendMsg(int h,
uint32_t peerIp,
uint16_t peerPort,
@@ -196,13 +231,11 @@ static int gtpv1uCreateAndSendMsg(int h,
msgHdr->PT=1;
msgHdr->version=1;
msgHdr->msgType=msgType;
- msgHdr->msgLength = htons(msgLen + extensionHeader_length);
msgHdr->teid=htonl(teid);
curPtr+=sizeof(Gtpv1uMsgHeaderT);
if (seqNumFlag || (extHdrType != NO_MORE_EXT_HDRS) || npduNumFlag) {
- msgHdr->msgLength += htons(4);
*(uint16_t *)curPtr = seqNumFlag ? seqNum : 0x0000;
curPtr+=sizeof(uint16_t);
*(uint8_t *)curPtr = npduNumFlag ? npduNum : 0x00;
@@ -229,9 +262,10 @@ static int gtpv1uCreateAndSendMsg(int h,
curPtr+=msgLen;
}
- AssertFatal(curPtr-(buffer+msgLen) < HDR_MAX, "");
+ msgHdr->msgLength = htons(curPtr-(buffer+sizeof(Gtpv1uMsgHeaderT)));
+ AssertFatal(curPtr-(buffer+msgLen) < HDR_MAX, "fixed max size of all headers too short");
// Fix me: add IPv6 support, using flag ipVersion
- static struct sockaddr_in to= {0};
+ struct sockaddr_in to= {0};
to.sin_family = AF_INET;
to.sin_port = htons(peerPort);
to.sin_addr.s_addr = peerIp ;
@@ -253,14 +287,8 @@ static void gtpv1uSend(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req, b
rnti_t rnti=req->rnti;
int rab_id=req->rab_id;
pthread_mutex_lock(&globGtp.gtp_lock);
- auto inst=&globGtp.instances[compatInst(instance)];
- auto ptrRnti=inst->ue2te_mapping.find(rnti);
-
- if ( ptrRnti==inst->ue2te_mapping.end() ) {
- LOG_E(GTPU, "[%ld] gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", instance, rnti);
- pthread_mutex_unlock(&globGtp.gtp_lock);
- return;
- }
+ getInstRetVoid(compatInst(instance));
+ getRntiRetVoid(inst, rnti);
map::iterator ptr2=ptrRnti->second.bearers.find(rab_id);
@@ -292,14 +320,8 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
rnti_t rnti=req->rnti;
int rab_id=req->pdusession_id;
pthread_mutex_lock(&globGtp.gtp_lock);
- auto inst=&globGtp.instances[compatInst(instance)];
- auto ptrRnti=inst->ue2te_mapping.find(rnti);
-
- if ( ptrRnti==inst->ue2te_mapping.end() ) {
- LOG_E(GTPU, "[%ld] GTP-U gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", instance, rnti);
- pthread_mutex_unlock(&globGtp.gtp_lock);
- return;
- }
+ getInstRetVoid(compatInst(instance));
+ getRntiRetVoid(inst, rnti);
map::iterator ptr2=ptrRnti->second.bearers.find(rab_id);
@@ -385,14 +407,8 @@ static void gtpv1uSendDlDeliveryStatus(instance_t instance, gtpv1u_DU_buffer_rep
rnti_t rnti=req->rnti;
int rab_id=req->pdusession_id;
pthread_mutex_lock(&globGtp.gtp_lock);
- auto inst=&globGtp.instances[compatInst(instance)];
- auto ptrRnti=inst->ue2te_mapping.find(rnti);
-
- if ( ptrRnti==inst->ue2te_mapping.end() ) {
- LOG_E(GTPU, "[%ld] GTP-U gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", instance, rnti);
- pthread_mutex_unlock(&globGtp.gtp_lock);
- return;
- }
+ getInstRetVoid(compatInst(instance));
+ getRntiRetVoid(inst, rnti);
map::iterator ptr2=ptrRnti->second.bearers.find(rab_id);
@@ -419,14 +435,8 @@ static void gtpv1uEndTunnel(instance_t instance, gtpv1u_enb_tunnel_data_req_t *r
rnti_t rnti=req->rnti;
int rab_id=req->rab_id;
pthread_mutex_lock(&globGtp.gtp_lock);
- auto inst=&globGtp.instances[compatInst(instance)];
- auto ptrRnti=inst->ue2te_mapping.find(rnti);
-
- if ( ptrRnti==inst->ue2te_mapping.end() ) {
- LOG_E(GTPU, "[%ld] gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping\n", instance, rnti);
- pthread_mutex_unlock(&globGtp.gtp_lock);
- return;
- }
+ getInstRetVoid(compatInst(instance));
+ getRntiRetVoid(inst, rnti);
map::iterator ptr2=ptrRnti->second.bearers.find(rab_id);
@@ -571,14 +581,8 @@ instance_t gtpv1Init(openAddr_t context) {
void GtpuUpdateTunnelOutgoingTeid(instance_t instance, rnti_t rnti, ebi_t bearer_id, teid_t newOutgoingTeid) {
pthread_mutex_lock(&globGtp.gtp_lock);
- auto inst=&globGtp.instances[compatInst(instance)];
- auto ptrRnti=inst->ue2te_mapping.find(rnti);
-
- if ( ptrRnti == inst->ue2te_mapping.end() ) {
- LOG_E(GTPU,"[%ld] Update tunnel for a not existing rnti %x\n", instance, rnti);
- pthread_mutex_unlock(&globGtp.gtp_lock);
- return;
- }
+ getInstRetVoid(compatInst(instance));
+ getRntiRetVoid(inst, rnti);
map::iterator ptr2=ptrRnti->second.bearers.find(bearer_id);
@@ -605,8 +609,7 @@ teid_t newGtpuCreateTunnel(instance_t instance,
gtpCallback callBack,
gtpCallbackSDAP callBackSDAP) {
pthread_mutex_lock(&globGtp.gtp_lock);
- instance=compatInst(instance);
- auto inst=&globGtp.instances[instance];
+ getInstRetInt(compatInst(instance));
auto it=inst->ue2te_mapping.find(rnti);
if ( it != inst->ue2te_mapping.end() && it->second.bearers.find(outgoing_bearer_id) != it->second.bearers.end()) {
@@ -682,8 +685,14 @@ int gtpv1u_create_s1u_tunnel(instance_t instance,
create_tunnel_req->rnti,
create_tunnel_req->num_tunnels,
create_tunnel_req->sgw_S1u_teid[0]);
- tcp_udp_port_t dstport=globGtp.instances[compatInst(instance)].get_dstport();
-
+ pthread_mutex_lock(&globGtp.gtp_lock);
+ getInstRetInt(compatInst(instance));
+
+ tcp_udp_port_t dstport=inst->get_dstport();
+ uint8_t addr[inst->foundAddrLen];
+ memcpy(addr, inst->foundAddr, inst->foundAddrLen);
+ pthread_mutex_unlock(&globGtp.gtp_lock);
+
for (int i = 0; i < create_tunnel_req->num_tunnels; i++) {
AssertFatal(create_tunnel_req->eps_bearer_id[i] > 4,
"From legacy code not clear, seems impossible (bearer=%d)\n",
@@ -704,9 +713,8 @@ int gtpv1u_create_s1u_tunnel(instance_t instance,
create_tunnel_resp->num_tunnels=create_tunnel_req->num_tunnels;
create_tunnel_resp->enb_S1u_teid[i]=teid;
create_tunnel_resp->eps_bearer_id[i] = create_tunnel_req->eps_bearer_id[i];
- memcpy(create_tunnel_resp->enb_addr.buffer,globGtp.instances[compatInst(instance)].foundAddr,
- globGtp.instances[compatInst(instance)].foundAddrLen);
- create_tunnel_resp->enb_addr.length= globGtp.instances[compatInst(instance)].foundAddrLen;
+ memcpy(create_tunnel_resp->enb_addr.buffer,addr,sizeof(addr));
+ create_tunnel_resp->enb_addr.length= sizeof(addr);
}
return !GTPNOK;
@@ -725,10 +733,11 @@ int gtpv1u_update_s1u_tunnel(
create_tunnel_req->sgw_S1u_teid[0],
create_tunnel_req->eps_bearer_id[0]);
pthread_mutex_lock(&globGtp.gtp_lock);
- auto inst=&globGtp.instances[compatInst(instance)];
+ getInstRetInt(compatInst(instance));
if ( inst->ue2te_mapping.find(create_tunnel_req->rnti) == inst->ue2te_mapping.end() ) {
- LOG_E(GTPU,"[%ld] Update not already existing tunnel (new rnti %x, old rnti %x)\n", instance, create_tunnel_req->rnti, prior_rnti);
+ LOG_E(GTPU,"[%ld] Update not already existing tunnel (new rnti %x, old rnti %x)\n",
+ instance, create_tunnel_req->rnti, prior_rnti);
}
auto it=inst->ue2te_mapping.find(prior_rnti);
@@ -755,7 +764,13 @@ int gtpv1u_create_ngu_tunnel( const instance_t instance,
create_tunnel_req->rnti,
create_tunnel_req->num_tunnels,
create_tunnel_req->outgoing_teid[0]);
- tcp_udp_port_t dstport = globGtp.instances[compatInst(instance)].get_dstport();
+ pthread_mutex_lock(&globGtp.gtp_lock);
+ getInstRetInt(compatInst(instance));
+
+ tcp_udp_port_t dstport = inst->get_dstport();
+ uint8_t addr[inst->foundAddrLen];
+ memcpy(addr, inst->foundAddr, inst->foundAddrLen);
+ pthread_mutex_unlock(&globGtp.gtp_lock);
for (int i = 0; i < create_tunnel_req->num_tunnels; i++) {
teid_t teid = newGtpuCreateTunnel(instance,
create_tunnel_req->rnti,
@@ -771,9 +786,8 @@ int gtpv1u_create_ngu_tunnel( const instance_t instance,
create_tunnel_resp->rnti=create_tunnel_req->rnti;
create_tunnel_resp->num_tunnels=create_tunnel_req->num_tunnels;
create_tunnel_resp->gnb_NGu_teid[i]=teid;
- memcpy(create_tunnel_resp->gnb_addr.buffer,globGtp.instances[compatInst(instance)].foundAddr,
- globGtp.instances[compatInst(instance)].foundAddrLen);
- create_tunnel_resp->gnb_addr.length= globGtp.instances[compatInst(instance)].foundAddrLen;
+ memcpy(create_tunnel_resp->gnb_addr.buffer,addr,sizeof(addr));
+ create_tunnel_resp->gnb_addr.length= sizeof(addr);
}
return !GTPNOK;
@@ -799,25 +813,19 @@ int newGtpuDeleteAllTunnels(instance_t instance, rnti_t rnti) {
LOG_D(GTPU, "[%ld] Start delete tunnels for RNTI %x\n",
instance, rnti);
pthread_mutex_lock(&globGtp.gtp_lock);
- auto inst=&globGtp.instances[compatInst(instance)];
- auto it=inst->ue2te_mapping.find(rnti);
-
- if ( it == inst->ue2te_mapping.end() ) {
- LOG_W(GTPU,"[%ld] Delete GTP tunnels for rnti: %x, but no tunnel exits\n", instance, rnti);
- pthread_mutex_unlock(&globGtp.gtp_lock);
- return -1;
- }
+ getInstRetInt(compatInst(instance));
+ getRntiRetInt(inst, rnti);
int nb=0;
- for (auto j=it->second.bearers.begin();
- j!=it->second.bearers.end();
+ for (auto j=ptrRnti->second.bearers.begin();
+ j!=ptrRnti->second.bearers.end();
++j) {
inst->te2ue_mapping.erase(j->second.teid_incoming);
nb++;
}
- inst->ue2te_mapping.erase(it);
+ inst->ue2te_mapping.erase(ptrRnti);
pthread_mutex_unlock(&globGtp.gtp_lock);
LOG_I(GTPU, "[%ld] Deleted all tunnels for RNTI %x (%d tunnels deleted)\n", instance, rnti, nb);
return !GTPNOK;
@@ -834,21 +842,14 @@ int newGtpuDeleteTunnels(instance_t instance, rnti_t rnti, int nbTunnels, pduses
LOG_D(GTPU, "[%ld] Start delete tunnels for RNTI %x\n",
instance, rnti);
pthread_mutex_lock(&globGtp.gtp_lock);
- auto inst=&globGtp.instances[compatInst(instance)];
- auto ptrRNTI=inst->ue2te_mapping.find(rnti);
-
- if ( ptrRNTI == inst->ue2te_mapping.end() ) {
- LOG_W(GTPU,"[%ld] Delete GTP tunnels for rnti: %x, but no tunnel exits\n", instance, rnti);
- pthread_mutex_unlock(&globGtp.gtp_lock);
- return -1;
- }
-
+ getInstRetInt(compatInst(instance));
+ getRntiRetInt(inst, rnti);
int nb=0;
for (int i=0; isecond.bearers.find(pdusession_id[i]);
+ auto ptr2=ptrRnti->second.bearers.find(pdusession_id[i]);
- if ( ptr2 == ptrRNTI->second.bearers.end() ) {
+ if ( ptr2 == ptrRnti->second.bearers.end() ) {
LOG_E(GTPU,"[%ld] GTP-U instance: delete of not existing tunnel RNTI:RAB: %x/%x\n", instance, rnti,pdusession_id[i]);
} else {
inst->te2ue_mapping.erase(ptr2->second.teid_incoming);
@@ -856,9 +857,9 @@ int newGtpuDeleteTunnels(instance_t instance, rnti_t rnti, int nbTunnels, pduses
}
}
- if (ptrRNTI->second.bearers.size() == 0 )
+ if (ptrRnti->second.bearers.size() == 0 )
// no tunnels on this rnti, erase the ue entry
- inst->ue2te_mapping.erase(ptrRNTI);
+ inst->ue2te_mapping.erase(ptrRnti);
pthread_mutex_unlock(&globGtp.gtp_lock);
LOG_I(GTPU, "[%ld] Deleted all tunnels for RNTI %x (%d tunnels deleted)\n", instance, rnti, nb);
@@ -936,7 +937,8 @@ static int Gtpv1uHandleEndMarker(int h,
pthread_mutex_lock(&globGtp.gtp_lock);
// the socket Linux file handler is the instance id
- auto inst=&globGtp.instances[h];
+ getInstRetInt(h);
+
auto tunnel=inst->te2ue_mapping.find(ntohl(msgHdr->teid));
if ( tunnel == inst->te2ue_mapping.end() ) {
@@ -996,7 +998,8 @@ static int Gtpv1uHandleGpdu(int h,
pthread_mutex_lock(&globGtp.gtp_lock);
// the socket Linux file handler is the instance id
- auto inst=&globGtp.instances[h];
+ getInstRetInt(h);
+
auto tunnel=inst->te2ue_mapping.find(ntohl(msgHdr->teid));
if ( tunnel == inst->te2ue_mapping.end() ) {
@@ -1007,7 +1010,7 @@ static int Gtpv1uHandleGpdu(int h,
/* see TS 29.281 5.1 */
//Minimum length of GTP-U header if non of the optional fields are present
- int offset = sizeof(Gtpv1uMsgHeaderT);
+ unsigned int offset = sizeof(Gtpv1uMsgHeaderT);
uint8_t qfi = -1;
bool rqi = false;
@@ -1025,12 +1028,20 @@ static int Gtpv1uHandleGpdu(int h,
extension_header_length = msgBuf[offset];
switch (next_extension_header_type) {
case PDU_SESSION_CONTAINER: {
+ if (offset + sizeof(PDUSessionContainerT) > msgBufLen ) {
+ LOG_E(GTPU, "gtp-u received header is malformed, ignore gtp packet\n");
+ return GTPNOK;
+ }
PDUSessionContainerT *pdusession_cntr = (PDUSessionContainerT *)(msgBuf + offset + 1);
qfi = pdusession_cntr->QFI;
rqi = pdusession_cntr->Reflective_QoS_activation;
break;
}
case NR_RAN_CONTAINER: {
+ if (offset + 1 > msgBufLen ) {
+ LOG_E(GTPU, "gtp-u received header is malformed, ignore gtp packet\n");
+ return GTPNOK;
+ }
uint8_t PDU_type = (msgBuf[offset+1]>>4) & 0x0f;
if (PDU_type == 0){ //DL USER Data Format
int additional_offset = 6; //Additional offset capturing the first non-mandatory octet (TS 38.425, Figure 5.5.2.1-1)
@@ -1057,10 +1068,14 @@ static int Gtpv1uHandleGpdu(int h,
}
default:
LOG_W(GTPU, "unhandled extension 0x%2.2x, skipping\n", next_extension_header_type);
- break;
+ break;
}
offset += extension_header_length * EXT_HDR_LNTH_OCTET_UNITS;
+ if (offset > msgBufLen ) {
+ LOG_E(GTPU, "gtp-u received header is malformed, ignore gtp packet\n");
+ return GTPNOK;
+ }
next_extension_header_type = msgBuf[offset - 1];
}
}
@@ -1081,40 +1096,21 @@ static int Gtpv1uHandleGpdu(int h,
const rb_id_t rb_id=tunnel->second.incoming_rb_id;
const mui_t mui=RLC_MUI_UNDEFINED;
const confirm_t confirm=RLC_SDU_CONFIRM_NO;
- const sdu_size_t sdu_buffer_size=msgBufLen-offset;
+ const sdu_size_t sdu_buffer_size = msgBufLen - offset;
unsigned char *const sdu_buffer=msgBuf+offset;
const pdcp_transmission_mode_t mode=PDCP_TRANSMISSION_MODE_DATA;
const uint32_t sourceL2Id=0;
const uint32_t destinationL2Id=0;
pthread_mutex_unlock(&globGtp.gtp_lock);
- if (qfi != -1 && tunnel->second.callBackSDAP) {
- if ( !tunnel->second.callBackSDAP(&ctxt,
- srb_flag,
- rb_id,
- mui,
- confirm,
- sdu_buffer_size,
- sdu_buffer,
- mode,
- &sourceL2Id,
- &destinationL2Id,
- qfi,
- rqi,
- tunnel->second.pdusession_id) )
- LOG_E(GTPU,"[%d] down layer refused incoming packet\n", h);
- } else {
- if ( !tunnel->second.callBack(&ctxt,
- srb_flag,
- rb_id,
- mui,
- confirm,
- sdu_buffer_size,
- sdu_buffer,
- mode,
- &sourceL2Id,
- &destinationL2Id) )
- LOG_E(GTPU,"[%d] down layer refused incoming packet\n", h);
+ if (sdu_buffer_size > 0) {
+ if (qfi != -1 && tunnel->second.callBackSDAP) {
+ if (!tunnel->second.callBackSDAP(&ctxt, srb_flag, rb_id, mui, confirm, sdu_buffer_size, sdu_buffer, mode, &sourceL2Id, &destinationL2Id, qfi, rqi, tunnel->second.pdusession_id))
+ LOG_E(GTPU, "[%d] down layer refused incoming packet\n", h);
+ } else {
+ if (!tunnel->second.callBack(&ctxt, srb_flag, rb_id, mui, confirm, sdu_buffer_size, sdu_buffer, mode, &sourceL2Id, &destinationL2Id))
+ LOG_E(GTPU, "[%d] down layer refused incoming packet\n", h);
+ }
}
if(NR_PDCP_PDU_SN > 0 && NR_PDCP_PDU_SN %5 ==0){
@@ -1139,7 +1135,10 @@ static int Gtpv1uHandleGpdu(int h,
extensionHeader->buffer[offset] = (NR_PDCP_PDU_SN >> 16) & 0xff;
extensionHeader->buffer[offset+1] = (NR_PDCP_PDU_SN >> 8) & 0xff;
extensionHeader->buffer[offset+2] = NR_PDCP_PDU_SN & 0xff;
- LOG_D(GTPU, "Octets reporting NR_PDCP_PDU_SN, extensionHeader->buffer[offset]: %u, extensionHeader->buffer[offset+1]:%u, extensionHeader->buffer[offset+2]:%u \n", extensionHeader->buffer[offset], extensionHeader->buffer[offset+1],extensionHeader->buffer[offset+2]);
+ LOG_D(GTPU, "Octets reporting NR_PDCP_PDU_SN, extensionHeader-> %u:%u:%u \n",
+ extensionHeader->buffer[offset],
+ extensionHeader->buffer[offset+1],
+ extensionHeader->buffer[offset+2]);
extensionHeader->buffer[offset+3] = 0x00; //Padding octet
extensionHeader->buffer[offset+4] = 0x00; //No more extension headers
/*Total size of DDD_status PDU = size of mandatory part +
@@ -1148,7 +1147,10 @@ static int Gtpv1uHandleGpdu(int h,
* according to TS 38.425: Fig. 5.5.2.2-1 and section 5.5.3.24*/
extensionHeader->length = 1+sizeof(DlDataDeliveryStatus_flagsT)+3+1+1;
gtpv1uCreateAndSendMsg(
- h, peerIp, peerPort, GTP_GPDU, inst->te2ue_mapping[ntohl(msgHdr->teid)].outgoing_teid, NULL, 0, false, false, 0, 0, NR_RAN_CONTAINER, extensionHeader->buffer, extensionHeader->length);
+ h, peerIp, peerPort, GTP_GPDU,
+ inst->te2ue_mapping[ntohl(msgHdr->teid)].outgoing_teid,
+ NULL, 0, false, false, 0, 0, NR_RAN_CONTAINER,
+ extensionHeader->buffer, extensionHeader->length);
}
LOG_D(GTPU,"[%d] Received a %d bytes packet for: teid:%x\n", h,
@@ -1158,7 +1160,7 @@ static int Gtpv1uHandleGpdu(int h,
}
void gtpv1uReceiver(int h) {
- uint8_t udpData[65536];
+ uint8_t udpData[65536];
int udpDataLen;
socklen_t from_len;
struct sockaddr_in addr;
@@ -1172,10 +1174,17 @@ void gtpv1uReceiver(int h) {
LOG_W(GTPU, "[%d] Recvfrom returned 0\n", h);
return;
} else {
- uint8_t msgType = *((uint8_t *)(udpData + 1));
- LOG_D(GTPU, "[%d] Received GTP data, msg type: %x\n", h, msgType);
-
- switch(msgType) {
+ if ( udpDataLen < (int)sizeof(Gtpv1uMsgHeaderT) ) {
+ LOG_W(GTPU, "[%d] received malformed gtp packet \n", h);
+ return;
+ }
+ Gtpv1uMsgHeaderT* msg=(Gtpv1uMsgHeaderT*) udpData;
+ if ( (int)(ntohs(msg->msgLength) + sizeof(Gtpv1uMsgHeaderT)) != udpDataLen ) {
+ LOG_W(GTPU, "[%d] received malformed gtp packet length\n", h);
+ return;
+ }
+ LOG_D(GTPU, "[%d] Received GTP data, msg type: %x\n", h, msg->msgType);
+ switch(msg->msgType) {
case GTP_ECHO_RSP:
break;
@@ -1200,7 +1209,7 @@ void gtpv1uReceiver(int h) {
break;
default:
- LOG_E(GTPU, "[%d] Received a GTP packet of unknown type: %d\n", h, msgType);
+ LOG_E(GTPU, "[%d] Received a GTP packet of unknown type: %d\n", h, msg->msgType);
break;
}
}
diff --git a/openshift/README.md b/openshift/README.md
index b7409ab945..9f0923bd60 100644
--- a/openshift/README.md
+++ b/openshift/README.md
@@ -12,21 +12,32 @@
------
+[[_TOC_]]
-**CAUTION: this is experimental. Still a lot to be done.**
+# 1. Introduction
------
+## General
-# 1. Build pre-requisites #
+What follows is a tutorial on how to build images on an OpenShift cluster in a three-step process
+(base image, build artifact image, target image). Note that all image
+streams/build configs assume the OC project/namespace `oaicicd-ran`.
-To build our RAN images, we SHALL use the `codeready-builder-for-rhel-8-x86_64-rpms` repository with all the proper development libraries.
+If you want to regenerate images from modified sources, you have to rebuild
+the ran-build image. If you reinstalled dependencies, you have to restart from
+ran-base.
+You first need to login. Do:
+```bash
+oc login -u -p --server
+```
+
+## RHEL8 Entitlements
+
+To build the RAN images, we use the `codeready-builder-for-rhel-8-x86_64-rpms` repository with all the proper development libraries.
This repository is not directly accessible from the UBI RHEL8 image (`registry.access.redhat.com/ubi8/ubi:latest`).
+Therefore, we need to copy certificates and subscription manager configuration files from a registered RHEL8 machine.
-So we need to copy from a register RHEL8 machine certificates and subsccription manager configuration files.
-
-SO on a `RHEL8` physical machine (or a virtual machine) connected to the OpenShift Cluster, recover the entitlement and the RH subscription manager configs:
+on a `RHEL8` physical machine (or a virtual machine) connected to the OpenShift Cluster, recover the entitlement and the RH subscription manager configs:
```bash
oc create configmap rhsm-conf --from-file /etc/rhsm/rhsm.conf
@@ -35,9 +46,10 @@ oc create configmap rhsm-ca --from-file /etc/rhsm/ca/redhat-uep.pem
oc create secret generic etc-pki-entitlement --from-file /etc/pki/entitlement/{NUMBER_ON_YOUR_COMPUTER}.pem --from-file /etc/pki/entitlement/{NUMBER_ON_YOUR_COMPUTER}-key.pem
```
-These configmaps and secret will be shared by all the build configs in your OC project. No need to do it each time.
-
-**CAUTION: these files expire every month or so. If you have done a build on your OC project and try again a few weeks later, you may need to re-copy them**.
+These configmaps and secret will be shared by all the build configs in your OC
+project. No need to do it each time. However, these files expire every month
+or so. If you have done a build on your OC project and try again a few weeks
+later, you may need to re-copy them. (The CI recopies them every time.)
```bash
oc delete secret etc-pki-entitlement
@@ -45,63 +57,78 @@ oc delete cm rhsm-conf
oc delete cm rhsm-ca
```
-**LAST POINT: your OC project SHALL be `oai`.**
+# 2. Build of `base` shared image
-# 2. Build the Builder shared image #
-
-In our Eurecom/OSA environment we need to pass a GIT proxy.
-
-2 things are impacted by this situation:
-
-* In `openshift/oai-ran-rh8-build-config.yml` file
- * `httpProxy: http://proxy.eurecom.fr:8080`
- * `httpsProxy: https://proxy.eurecom.fr:8080`
-* Add a environment variable to the build config
+Create an image stream and build config that specify image properties and build parameters, then start the build:
```bash
-oc apply -f openshift/oai-ran-rh8-image-stream.yml
-oc apply -f openshift/oai-ran-rh8-build-config.yml
-oc set env bc/oai-ran-rhel8-build-config NEEDED_GIT_PROXY=http://proxy.eurecom.fr:8080
-oc start-build oai-ran-rhel8-build-config --follow
+oc create -f openshift/ran-base-is.yaml
+oc create -f openshift/ran-base-bc.yaml
+oc start-build ran-base --from-file= --follow
```
-In case you do NOT require a GIT proxy: **you SHALL remove the 2 lines in `openshift/oai-ran-rh8-build-config.yml` file.**
+The `--from-file=` uploads the repository (from which the
+build is done) as a binary blob. It is therefore possible to make merges or
+other (local) modifications and build an image.
-And no need to add a `NEEDED_GIT_PROXY` variable to the build config.
+# 3. Build of `build` shared image
+
+The same as for the `base` image.
```bash
-oc apply -f openshift/oai-ran-rh8-image-stream.yml
-oc apply -f openshift/modified-oai-ran-rh8-build-config.yml
-oc start-build oai-ran-rhel8-build-config --follow
+oc create -f openshift/ran-build-is.yaml
+oc create -f openshift/ran-build-bc.yaml
+oc start-build ran-build --from-file= --follow
```
-After a while it should be successful.
+# 4. Build of a target image
-# 3. Build an OAI target image #
-
-For the example the eNB:
+The same as for the `base` image:
```bash
-oc apply -f openshift/oai-enb-rh8-image-stream.yml
-oc apply -f openshift/oai-enb-rh8-build-config.yml
-oc start-build oai-enb-rh8-build-config --follow
+oc create -f openshift/oai-gnb-is.yaml
+oc create -f openshift/oai-gnb-bc.yaml
+oc start-build oai-gnb --from-file= --follow
```
-**CAUTION: if you are pushing modifications to the branch you are using, it won't be taken into account besides the Dockerfile.**
+# 5. Retrieval of Build Container Images and Build Artifacts
-**Because the source files are copied during the shared image creation.**
+Build artifacts, such as build logs, can be retrieved by checking the logs of
+the individual build steps. For example, for the `ran-build` step, you can do:
+```bash
+oc logs ran-build-1-build
+```
+where `ran-build-1-build` is the name of the `ran-build` build (type `oc get
+pods` to get a list of all pods).
-**Only way to regenerate images w/ modified source code is to re-start from step #2.**
+It is also possible to retrieve the build logs from a running pod. Currently,
+this is only used for the `ran-base` step (the others using a python script to
+scrape it from stdout):
+```bash
+oc create -f openshift/ran-base-log-retrieval.yaml
+oc rsync ran-base-log-retrieval:/oai-ran/cmake_targets/log cmake_targets/log/ran-base
+oc delete -f openshift/ran-base-log-retrieval.yaml
+```
-# 4. Deployment using HELM charts #
+The images are uploaded into the OpenShift image registry. To download, login
+using podman, then pull an image:
+```bash
+oc whoami -t | sudo podman login -u --password-stdin --tls-verify=false
+sudo podman pull /oaicicd-ran/: --tls-verify=false
+sudo podman logout
+```
+The `` could be `oai-gnb`, and the `` `ci-temp`.
-**CAUTION: even more experimental.**
+# 6. Deployment using HELM Charts
-Helm charts are located in another repository:
+Helm charts are located under `charts`. Assuming that the image is in the image
+registry, the physims could be deployed as shown in the following steps:
```bash
-git clone https://github.com/OPENAIRINTERFACE/openair-k8s.git
-cd openair-k8s
-git checkout helm-deployment-S6a-S1C-S1U-in-network-18-with-enb
-helm install mme /path-to-your-cloned/openair-k8s/charts/oai-mme/
+grep -rl OAICICD_PROJECT ./charts/ | xargs sed -i -e "s#OAICICD_PROJECT#oaicicd-ran#" # select the correct project
+sed -i -e "s#TAG#ci-temp#g" ./charts/physims/values.yaml # select the correct tag
+helm install physim ./charts/physims/ # deploy
+oc get pods # get the list of deployed containers
+oc logs # inspect the logs of a pod
+helm uninstall physim # undeploy
```
diff --git a/openshift/oai-enb-bc.yaml b/openshift/oai-enb-bc.yaml
new file mode 100644
index 0000000000..f9973224cc
--- /dev/null
+++ b/openshift/oai-enb-bc.yaml
@@ -0,0 +1,37 @@
+#/*
+# * 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
+# */
+#---------------------------------------------------------------------
+#
+kind: BuildConfig
+apiVersion: build.openshift.io/v1
+metadata:
+ name: "oai-enb"
+spec:
+ runPolicy: "Serial"
+ source:
+ type: "Binary"
+ strategy:
+ dockerStrategy:
+ dockerfilePath: "docker/Dockerfile.eNB.rhel8.2"
+ output:
+ to:
+ kind: "ImageStreamTag"
+ name: "oai-enb:latest"
diff --git a/openshift/oai-enb-build-config.yml b/openshift/oai-enb-build-config.yml
deleted file mode 100644
index 3f6875c50d..0000000000
--- a/openshift/oai-enb-build-config.yml
+++ /dev/null
@@ -1,55 +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
-# */
-#---------------------------------------------------------------------
-#
-kind: BuildConfig
-apiVersion: build.openshift.io/v1
-metadata:
- name: "oai-enb-build-config"
-spec:
- runPolicy: "Serial"
- source:
- #still needed for the target image
- git:
- uri: "https://gitlab.eurecom.fr/oai/openairinterface5g.git"
- ref: "develop"
- httpProxy: http://proxy.eurecom.fr:8080
- httpsProxy: https://proxy.eurecom.fr:8080
- secrets:
- - secret:
- name: etc-pki-entitlement
- destinationDir: etc-pki-entitlement
- configMaps:
- - configMap:
- name: rhsm-conf
- destinationDir: rhsm-conf
- - configMap:
- name: rhsm-ca
- destinationDir: rhsm-ca
-
- strategy:
- #using both builder image and target image docker
- dockerStrategy:
- dockerfilePath: "docker/Dockerfile.eNB.rhel7.oc4-4"
- output:
- to:
- kind: "ImageStreamTag"
- name: "oai-enb:latest"
diff --git a/openshift/oai-enb-image-stream.yml b/openshift/oai-enb-is.yaml
similarity index 91%
rename from openshift/oai-enb-image-stream.yml
rename to openshift/oai-enb-is.yaml
index 94ee13e50f..d7467ec37c 100644
--- a/openshift/oai-enb-image-stream.yml
+++ b/openshift/oai-enb-is.yaml
@@ -19,12 +19,12 @@
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
-#
-apiVersion: v1
+
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-enb
- namespace: oai
-status:
- tag: latest
-
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
diff --git a/openshift/oai-enb-rh8-build-config.yml b/openshift/oai-enb-rh8-build-config.yml
deleted file mode 100644
index e715fc5733..0000000000
--- a/openshift/oai-enb-rh8-build-config.yml
+++ /dev/null
@@ -1,48 +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
-# */
-#---------------------------------------------------------------------
-#
-kind: BuildConfig
-apiVersion: build.openshift.io/v1
-metadata:
- name: "oai-enb-rh8-build-config"
-spec:
- runPolicy: "Serial"
- source:
- #still needed for the target image
- git:
- uri: "https://gitlab.eurecom.fr/oai/openairinterface5g.git"
- ref: "develop"
- httpProxy: http://proxy.eurecom.fr:8080
- httpsProxy: https://proxy.eurecom.fr:8080
- strategy:
- #using both builder image and target image docker
- dockerStrategy:
- dockerfilePath: "docker/Dockerfile.eNB.rhel8.2.oc4-4"
- nodeSelector:
- kubernetes.io/hostname: dedale.5glab.nsa.eurecom.fr
- resources:
- requests:
- ephemeral-storage: "8Gi"
- output:
- to:
- kind: "ImageStreamTag"
- name: "oai-enb:rhel8-latest"
diff --git a/openshift/oai-enb-rh8-image-stream.yml b/openshift/oai-gnb-bc.yaml
similarity index 77%
rename from openshift/oai-enb-rh8-image-stream.yml
rename to openshift/oai-gnb-bc.yaml
index 9d1cfebd54..78b9248f19 100644
--- a/openshift/oai-enb-rh8-image-stream.yml
+++ b/openshift/oai-gnb-bc.yaml
@@ -20,11 +20,18 @@
# */
#---------------------------------------------------------------------
#
-apiVersion: v1
-kind: ImageStream
+kind: BuildConfig
+apiVersion: build.openshift.io/v1
metadata:
- name: oai-enb
- namespace: oai
-status:
- tag: rhel8-latest
-
+ name: "oai-gnb"
+spec:
+ runPolicy: "Serial"
+ source:
+ type: "Binary"
+ strategy:
+ dockerStrategy:
+ dockerfilePath: "docker/Dockerfile.gNB.rhel8.2"
+ output:
+ to:
+ kind: "ImageStreamTag"
+ name: "oai-gnb:latest"
diff --git a/openshift/oai-gnb-build-config.yml b/openshift/oai-gnb-build-config.yml
deleted file mode 100644
index b0c99959d1..0000000000
--- a/openshift/oai-gnb-build-config.yml
+++ /dev/null
@@ -1,55 +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
-# */
-#---------------------------------------------------------------------
-#
-kind: BuildConfig
-apiVersion: build.openshift.io/v1
-metadata:
- name: "oai-gnb-build-config"
-spec:
- runPolicy: "Serial"
- source:
- #still needed for the target image
- git:
- uri: "https://gitlab.eurecom.fr/oai/openairinterface5g.git"
- ref: "develop"
- httpProxy: http://proxy.eurecom.fr:8080
- httpsProxy: https://proxy.eurecom.fr:8080
- secrets:
- - secret:
- name: etc-pki-entitlement
- destinationDir: etc-pki-entitlement
- configMaps:
- - configMap:
- name: rhsm-conf
- destinationDir: rhsm-conf
- - configMap:
- name: rhsm-ca
- destinationDir: rhsm-ca
-
- strategy:
- #using both builder image and target image docker
- dockerStrategy:
- dockerfilePath: "docker/Dockerfile.gNB.rhel7.oc4-4"
- output:
- to:
- kind: "ImageStreamTag"
- name: "oai-gnb:latest"
diff --git a/openshift/oai-gnb-image-stream.yml b/openshift/oai-gnb-is.yaml
similarity index 92%
rename from openshift/oai-gnb-image-stream.yml
rename to openshift/oai-gnb-is.yaml
index 22a6c157d2..553f9f58e9 100644
--- a/openshift/oai-gnb-image-stream.yml
+++ b/openshift/oai-gnb-is.yaml
@@ -20,11 +20,11 @@
# */
#---------------------------------------------------------------------
#
-apiVersion: v1
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-gnb
- namespace: oai
-status:
- tag: latest
-
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
diff --git a/openshift/oai-gnb-rh8-build-config.yml b/openshift/oai-gnb-rh8-build-config.yml
deleted file mode 100644
index aa3553c1e4..0000000000
--- a/openshift/oai-gnb-rh8-build-config.yml
+++ /dev/null
@@ -1,48 +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
-# */
-#---------------------------------------------------------------------
-#
-kind: BuildConfig
-apiVersion: build.openshift.io/v1
-metadata:
- name: "oai-gnb-rh8-build-config"
-spec:
- runPolicy: "Serial"
- source:
- #still needed for the target image
- git:
- uri: "https://gitlab.eurecom.fr/oai/openairinterface5g.git"
- ref: "develop"
- httpProxy: http://proxy.eurecom.fr:8080
- httpsProxy: https://proxy.eurecom.fr:8080
- strategy:
- #using both builder image and target image docker
- dockerStrategy:
- dockerfilePath: "docker/Dockerfile.gNB.rhel8.2.oc4-4"
- nodeSelector:
- kubernetes.io/hostname: dedale.5glab.nsa.eurecom.fr
- resources:
- requests:
- ephemeral-storage: "15Gi"
- output:
- to:
- kind: "ImageStreamTag"
- name: "oai-gnb:rhel8-latest"
diff --git a/openshift/oai-lte-ue-bc.yaml b/openshift/oai-lte-ue-bc.yaml
new file mode 100644
index 0000000000..a0dd92e670
--- /dev/null
+++ b/openshift/oai-lte-ue-bc.yaml
@@ -0,0 +1,37 @@
+#/*
+# * 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
+# */
+#---------------------------------------------------------------------
+#
+kind: BuildConfig
+apiVersion: build.openshift.io/v1
+metadata:
+ name: "oai-lte-ue"
+spec:
+ runPolicy: "Serial"
+ source:
+ type: "Binary"
+ strategy:
+ dockerStrategy:
+ dockerfilePath: "docker/Dockerfile.lteUE.rhel8.2"
+ output:
+ to:
+ kind: "ImageStreamTag"
+ name: "oai-lte-ue:latest"
diff --git a/openshift/oai-lte-ue-rh8-image-stream.yml b/openshift/oai-lte-ue-is.yaml
similarity index 91%
rename from openshift/oai-lte-ue-rh8-image-stream.yml
rename to openshift/oai-lte-ue-is.yaml
index 09aeb2a766..93429faf70 100644
--- a/openshift/oai-lte-ue-rh8-image-stream.yml
+++ b/openshift/oai-lte-ue-is.yaml
@@ -19,12 +19,12 @@
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
-#
-apiVersion: v1
+
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-lte-ue
- namespace: oai
-status:
- tag: rhel8-latest
-
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
diff --git a/openshift/oai-lte-ue-rh8-build-config.yml b/openshift/oai-lte-ue-rh8-build-config.yml
deleted file mode 100644
index f077e4cb26..0000000000
--- a/openshift/oai-lte-ue-rh8-build-config.yml
+++ /dev/null
@@ -1,48 +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
-# */
-#---------------------------------------------------------------------
-#
-kind: BuildConfig
-apiVersion: build.openshift.io/v1
-metadata:
- name: "oai-lte-ue-rh8-build-config"
-spec:
- runPolicy: "Serial"
- source:
- #still needed for the target image
- git:
- uri: "https://gitlab.eurecom.fr/oai/openairinterface5g.git"
- ref: "develop"
- httpProxy: http://proxy.eurecom.fr:8080
- httpsProxy: https://proxy.eurecom.fr:8080
- strategy:
- #using both builder image and target image docker
- dockerStrategy:
- dockerfilePath: "docker/Dockerfile.lteUE.rhel8.2.oc4-4"
- nodeSelector:
- kubernetes.io/hostname: dedale.5glab.nsa.eurecom.fr
- resources:
- requests:
- ephemeral-storage: "8Gi"
- output:
- to:
- kind: "ImageStreamTag"
- name: "oai-lte-ue:rhel8-latest"
diff --git a/openshift/oai-nr-ue-bc.yaml b/openshift/oai-nr-ue-bc.yaml
new file mode 100644
index 0000000000..da9a5e424c
--- /dev/null
+++ b/openshift/oai-nr-ue-bc.yaml
@@ -0,0 +1,37 @@
+#/*
+# * 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
+# */
+#---------------------------------------------------------------------
+#
+kind: BuildConfig
+apiVersion: build.openshift.io/v1
+metadata:
+ name: "oai-nr-ue"
+spec:
+ runPolicy: "Serial"
+ source:
+ type: "Binary"
+ strategy:
+ dockerStrategy:
+ dockerfilePath: "docker/Dockerfile.nrUE.rhel8.2"
+ output:
+ to:
+ kind: "ImageStreamTag"
+ name: "oai-nr-ue:latest"
diff --git a/openshift/oai-nr-ue-rh8-image-stream.yml b/openshift/oai-nr-ue-is.yaml
similarity index 91%
rename from openshift/oai-nr-ue-rh8-image-stream.yml
rename to openshift/oai-nr-ue-is.yaml
index e61cc0dfde..111be0d51d 100644
--- a/openshift/oai-nr-ue-rh8-image-stream.yml
+++ b/openshift/oai-nr-ue-is.yaml
@@ -19,12 +19,12 @@
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
-#
-apiVersion: v1
+
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-nr-ue
- namespace: oai
-status:
- tag: rhel8-latest
-
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
diff --git a/openshift/oai-nr-ue-rh8-build-config.yml b/openshift/oai-nr-ue-rh8-build-config.yml
deleted file mode 100644
index b3367f6ab6..0000000000
--- a/openshift/oai-nr-ue-rh8-build-config.yml
+++ /dev/null
@@ -1,48 +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
-# */
-#---------------------------------------------------------------------
-#
-kind: BuildConfig
-apiVersion: build.openshift.io/v1
-metadata:
- name: "oai-nr-ue-rh8-build-config"
-spec:
- runPolicy: "Serial"
- source:
- #still needed for the target image
- git:
- uri: "https://gitlab.eurecom.fr/oai/openairinterface5g.git"
- ref: "develop"
- httpProxy: http://proxy.eurecom.fr:8080
- httpsProxy: https://proxy.eurecom.fr:8080
- strategy:
- #using both builder image and target image docker
- dockerStrategy:
- dockerfilePath: "docker/Dockerfile.nrUE.rhel8.2.oc4-4"
- nodeSelector:
- kubernetes.io/hostname: dedale.5glab.nsa.eurecom.fr
- resources:
- requests:
- ephemeral-storage: "8Gi"
- output:
- to:
- kind: "ImageStreamTag"
- name: "oai-nr-ue:rhel8-latest"
diff --git a/openshift/oai-physim-bc.yaml b/openshift/oai-physim-bc.yaml
new file mode 100644
index 0000000000..e013a20fd3
--- /dev/null
+++ b/openshift/oai-physim-bc.yaml
@@ -0,0 +1,37 @@
+#/*
+# * 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
+# */
+#---------------------------------------------------------------------
+
+kind: BuildConfig
+apiVersion: build.openshift.io/v1
+metadata:
+ name: "oai-physim"
+spec:
+ runPolicy: "Serial"
+ source:
+ type: "Binary"
+ strategy:
+ dockerStrategy:
+ dockerfilePath: "docker/Dockerfile.phySim.rhel8.2"
+ output:
+ to:
+ kind: "ImageStreamTag"
+ name: "oai-physim:latest"
diff --git a/openshift/oai-physim-image-stream.yml b/openshift/oai-physim-is.yaml
similarity index 98%
rename from openshift/oai-physim-image-stream.yml
rename to openshift/oai-physim-is.yaml
index 9ef338f139..df0545eb61 100644
--- a/openshift/oai-physim-image-stream.yml
+++ b/openshift/oai-physim-is.yaml
@@ -24,6 +24,7 @@ apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-physim
+ namespace: oaicicd-ran
spec:
lookupPolicy:
local: true
diff --git a/openshift/oai-ran-rh8-build-config.yml b/openshift/oai-ran-rh8-build-config.yml
deleted file mode 100644
index 3d27b7cb5c..0000000000
--- a/openshift/oai-ran-rh8-build-config.yml
+++ /dev/null
@@ -1,57 +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
-# */
-#---------------------------------------------------------------------
-#
-kind: BuildConfig
-apiVersion: build.openshift.io/v1
-metadata:
- name: "oai-ran-rhel8-build-config"
-spec:
- runPolicy: "Serial"
- source:
- git:
- uri: "https://gitlab.eurecom.fr/oai/openairinterface5g.git"
- ref: "develop"
- httpProxy: http://proxy.eurecom.fr:8080
- httpsProxy: https://proxy.eurecom.fr:8080
- secrets:
- - secret:
- name: etc-pki-entitlement
- destinationDir: etc-pki-entitlement
- configMaps:
- - configMap:
- name: rhsm-conf
- destinationDir: rhsm-conf
- - configMap:
- name: rhsm-ca
- destinationDir: rhsm-ca
- strategy:
- dockerStrategy:
- dockerfilePath: "docker/Dockerfile.ran.rhel8.2.oc4-4"
- nodeSelector:
- kubernetes.io/hostname: dedale.5glab.nsa.eurecom.fr
- resources:
- requests:
- ephemeral-storage: "5Gi"
- output:
- to:
- kind: "ImageStreamTag"
- name: "oai-ran:rhel8-latest"
diff --git a/openshift/oai-ran-rh8-image-stream.yml b/openshift/oai-ran-rh8-image-stream.yml
deleted file mode 100644
index f6f4f8614f..0000000000
--- a/openshift/oai-ran-rh8-image-stream.yml
+++ /dev/null
@@ -1,30 +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
-# */
-#---------------------------------------------------------------------
-#
-apiVersion: v1
-kind: ImageStream
-metadata:
- name: oai-ran
- namespace: oai
-status:
- tag: rhel8-latest
-
diff --git a/openshift/oai-ran-build-config.yml b/openshift/ran-base-bc.yaml
similarity index 82%
rename from openshift/oai-ran-build-config.yml
rename to openshift/ran-base-bc.yaml
index 39d7a40f6d..85247813aa 100644
--- a/openshift/oai-ran-build-config.yml
+++ b/openshift/ran-base-bc.yaml
@@ -23,15 +23,11 @@
kind: BuildConfig
apiVersion: build.openshift.io/v1
metadata:
- name: "oai-ran-build-config"
+ name: "ran-base"
spec:
runPolicy: "Serial"
source:
- git:
- uri: "https://gitlab.eurecom.fr/oai/openairinterface5g.git"
- ref: "develop"
- httpProxy: http://proxy.eurecom.fr:8080
- httpsProxy: https://proxy.eurecom.fr:8080
+ type: "Binary"
secrets:
- secret:
name: etc-pki-entitlement
@@ -45,8 +41,8 @@ spec:
destinationDir: rhsm-ca
strategy:
dockerStrategy:
- dockerfilePath: "docker/Dockerfile.ran.rhel7.oc4-4"
+ dockerfilePath: "docker/Dockerfile.base.rhel8.2"
output:
to:
kind: "ImageStreamTag"
- name: "oai-ran:latest"
+ name: "ran-base:latest"
diff --git a/openshift/oai-ran-image-stream.yml b/openshift/ran-base-is.yaml
similarity index 88%
rename from openshift/oai-ran-image-stream.yml
rename to openshift/ran-base-is.yaml
index e1ef9d0b31..e551166627 100644
--- a/openshift/oai-ran-image-stream.yml
+++ b/openshift/ran-base-is.yaml
@@ -18,13 +18,12 @@
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
-#---------------------------------------------------------------------
-#
-apiVersion: v1
+
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
- name: oai-ran
- namespace: oai
-status:
- tag: latest
-
+ name: ran-base
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
diff --git a/openshift/ran-base-log-retrieval.yaml b/openshift/ran-base-log-retrieval.yaml
new file mode 100644
index 0000000000..7fc1d78cc6
--- /dev/null
+++ b/openshift/ran-base-log-retrieval.yaml
@@ -0,0 +1,13 @@
+# Creating a pod to retrieve ran-base logs
+apiVersion: v1
+kind: Pod
+metadata:
+ name: ran-base-log-retrieval
+ namespace: oaicicd-ran
+spec:
+ containers:
+ - name: logcontainer
+ image: ran-base:latest
+ command: ["/bin/sh", "-c"]
+ args:
+ ["sleep inf"]
diff --git a/openshift/ran-build-bc.yaml b/openshift/ran-build-bc.yaml
new file mode 100644
index 0000000000..84b0f9e589
--- /dev/null
+++ b/openshift/ran-build-bc.yaml
@@ -0,0 +1,37 @@
+#/*
+# * 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
+# */
+#---------------------------------------------------------------------
+#
+kind: BuildConfig
+apiVersion: build.openshift.io/v1
+metadata:
+ name: "ran-build"
+spec:
+ runPolicy: "Serial"
+ source:
+ type: "Binary"
+ strategy:
+ dockerStrategy:
+ dockerfilePath: "docker/Dockerfile.build.rhel8.2"
+ output:
+ to:
+ kind: "ImageStreamTag"
+ name: "ran-build:latest"
diff --git a/openshift/oai-gnb-rh8-image-stream.yml b/openshift/ran-build-is.yaml
similarity index 90%
rename from openshift/oai-gnb-rh8-image-stream.yml
rename to openshift/ran-build-is.yaml
index 2e04e94f5b..0538b16478 100644
--- a/openshift/oai-gnb-rh8-image-stream.yml
+++ b/openshift/ran-build-is.yaml
@@ -20,11 +20,11 @@
# */
#---------------------------------------------------------------------
#
-apiVersion: v1
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
- name: oai-gnb
- namespace: oai
-status:
- tag: rhel8-latest
-
+ name: ran-build
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpx300.conf
index 11b1943b36..8dd080e1c8 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpx300.conf
@@ -17,10 +17,12 @@ gNBs =
plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});
- tr_s_preference = "local_mac"
+ tr_s_preference = "local_mac";
////////// Physical parameters:
+ min_rxtxtime = 6;
+
servingCellConfigCommon = (
{
#spCellConfigCommon
@@ -100,11 +102,11 @@ gNBs =
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
- msg1_SubcarrierSpacing = 1,
+ msg1_SubcarrierSpacing = 1;
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
- restrictedSetConfig = 0,
+ restrictedSetConfig = 0;
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
@@ -132,20 +134,6 @@ gNBs =
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
-
- #tdd-UL-DL-ConfigurationCommon
-# subcarrierSpacing
-# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
- referenceSubcarrierSpacing = 1;
- # pattern1
- # dl_UL_TransmissionPeriodicity
- # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
- dl_UL_TransmissionPeriodicity = 6;
- nrofDownlinkSlots = 7;
- nrofDownlinkSymbols = 6;
- nrofUplinkSlots = 2;
- nrofUplinkSymbols = 4;
-
ssPBCH_BlockPower = -25;
}
@@ -199,7 +187,7 @@ L1s = (
RUs = (
{
- local_rf = "yes"
+ local_rf = "yes";
nb_tx = 1;
nb_rx = 1;
att_tx = 0;
@@ -217,7 +205,7 @@ RUs = (
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sdr_addrs = "type=x300";
- clock_src = "external";
+ clock_src = "internal";
# if_freq = 3700000000L;
# if_offset = 1000000;
}
@@ -228,7 +216,7 @@ THREAD_STRUCT = (
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
- worker_config = "WORKER_ENABLE";
+ worker_config = "WORKER_DISABLE";
}
);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.24PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.24PRB.usrpx300.conf
new file mode 100644
index 0000000000..c74476902b
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.24PRB.usrpx300.conf
@@ -0,0 +1,251 @@
+Active_gNBs = ( "gNB-Eurecom-5GNRBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+gNBs =
+(
+ {
+ ////////// Identification parameters:
+ gNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_GNB";
+
+ gNB_name = "gNB-Eurecom-5GNRBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = 1;
+
+ plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});
+
+ tr_s_preference = "local_mac";
+
+ ////////// Physical parameters:
+
+ min_rxtxtime = 6;
+
+ servingCellConfigCommon = (
+ {
+ #spCellConfigCommon
+
+ physCellId = 0;
+
+# downlinkConfigCommon
+ #frequencyInfoDL
+ # this is 2150 MHz + 12 PRBs@30kHz SCS (same as initial BWP)
+ absoluteFrequencySSB = 430864;
+ dl_frequencyBand = 66;
+ # this is 2150 MHz
+ dl_absoluteFrequencyPointA = 430000;
+ #scs-SpecificCarrierList
+ dl_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ dl_subcarrierSpacing = 1;
+ dl_carrierBandwidth = 24;
+ #initialDownlinkBWP
+ #genericParameters
+ # this is RBstart=0,L=24 (275*(L-1))+RBstart
+ initialDLBWPlocationAndBandwidth = 6325;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialDLBWPsubcarrierSpacing = 1;
+ #pdcch-ConfigCommon
+ initialDLBWPcontrolResourceSetZero = 0;
+ initialDLBWPsearchSpaceZero = 0;
+
+ #uplinkConfigCommon
+ #frequencyInfoUL
+ ul_frequencyBand = 66;
+ ul_absoluteFrequencyPointA = 350000;
+ #scs-SpecificCarrierList
+ ul_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ ul_subcarrierSpacing = 1;
+ ul_carrierBandwidth = 24;
+ pMax = 20;
+ #initialUplinkBWP
+ #genericParameters
+ initialULBWPlocationAndBandwidth = 6325;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialULBWPsubcarrierSpacing = 1;
+ #rach-ConfigCommon
+ #rach-ConfigGeneric
+ prach_ConfigurationIndex = 98;
+#prach_msg1_FDM
+#0 = one, 1=two, 2=four, 3=eight
+ prach_msg1_FDM = 0;
+ prach_msg1_FrequencyStart = 0;
+ zeroCorrelationZoneConfig = 13;
+ preambleReceivedTargetPower = -118;
+#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
+ preambleTransMax = 6;
+#powerRampingStep
+# 0=dB0,1=dB2,2=dB4,3=dB6
+ powerRampingStep = 1;
+#ra_ReponseWindow
+#1,2,4,8,10,20,40,80
+ ra_ResponseWindow = 4;
+#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
+#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
+#oneHalf (0..15) 4,8,12,16,...60,64
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
+#ra_ContentionResolutionTimer
+#(0..7) 8,16,24,32,40,48,56,64
+ ra_ContentionResolutionTimer = 7;
+ rsrp_ThresholdSSB = 19;
+#prach-RootSequenceIndex_PR
+#1 = 839, 2 = 139
+ prach_RootSequenceIndex_PR = 2;
+ prach_RootSequenceIndex = 1;
+ # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
+ #
+ msg1_SubcarrierSpacing = 1;
+
+# restrictedSetConfig
+# 0=unrestricted, 1=restricted type A, 2=restricted type B
+ restrictedSetConfig = 0;
+
+ msg3_DeltaPreamble = 1;
+ p0_NominalWithGrant =-90;
+
+# pucch-ConfigCommon setup :
+# pucchGroupHopping
+# 0 = neither, 1= group hopping, 2=sequence hopping
+ pucchGroupHopping = 0;
+ hoppingId = 40;
+ p0_nominal = -90;
+# ssb_PositionsInBurs_BitmapPR
+# 1=short, 2=medium, 3=long
+ ssb_PositionsInBurst_PR = 2;
+ ssb_PositionsInBurst_Bitmap = 1;
+
+# ssb_periodicityServingCell
+# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
+ ssb_periodicityServingCell = 2;
+
+# dmrs_TypeA_position
+# 0 = pos2, 1 = pos3
+ dmrs_TypeA_Position = 0;
+
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ subcarrierSpacing = 1;
+
+ ssPBCH_BlockPower = -25;
+ }
+
+ );
+
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "192.168.12.26";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+
+ GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
+ GNB_INTERFACE_NAME_FOR_S1U = "eth0";
+ GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
+ GNB_PORT_FOR_S1U = 2152; # Spec 2152
+ };
+ }
+);
+
+MACRLCs = (
+ {
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ }
+);
+
+L1s = (
+{
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ thread_pool_size = 8;
+ ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
+);
+
+RUs = (
+ {
+ local_rf = "yes";
+ nb_tx = 1;
+ nb_rx = 1;
+ att_tx = 0;
+ att_rx = 0;
+ bands = [7];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 114;
+ eNB_instances = [0];
+ ## beamforming 1x2 matrix: 1 layer x 2 antennas
+ bf_weights = [0x00007fff, 0x0000];
+ ## beamforming 1x4 matrix: 1 layer x 4 antennas
+ #bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
+ ## beamforming 2x2 matrix:
+ #bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
+ ## beamforming 4x4 matrix:
+ #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
+ sdr_addrs = "type=x300";
+ clock_src = "internal";
+ # if_freq = 3700000000L;
+ # if_offset = 1000000;
+ }
+);
+
+THREAD_STRUCT = (
+ {
+ #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+ parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
+ #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+ worker_config = "WORKER_DISABLE";
+ }
+);
+
+security = {
+ # preferred ciphering algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nea0, nea1, nea2, nea3
+ ciphering_algorithms = ( "nea0" );
+
+ # preferred integrity algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nia0, nia1, nia2, nia3
+ integrity_algorithms = ( "nia2", "nia0" );
+
+ # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
+ # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
+ drb_ciphering = "yes";
+ drb_integrity = "no";
+};
+
+ 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";
+ };
+
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.25PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.25PRB.usrpn300.conf
index d28ac755da..f852550bbe 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.25PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.25PRB.usrpn300.conf
@@ -132,20 +132,6 @@ gNBs =
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 0;
-
- #tdd-UL-DL-ConfigurationCommon
-# subcarrierSpacing
-# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
- referenceSubcarrierSpacing = 0;
- # pattern1
- # dl_UL_TransmissionPeriodicity
- # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
- dl_UL_TransmissionPeriodicity = 6;
- nrofDownlinkSlots = 7;
- nrofDownlinkSymbols = 6;
- nrofUplinkSlots = 2;
- nrofUplinkSymbols = 4;
-
ssPBCH_BlockPower = -25;
}
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.25PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.25PRB.usrpx300.conf
new file mode 100644
index 0000000000..ac1dba7e42
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.25PRB.usrpx300.conf
@@ -0,0 +1,249 @@
+Active_gNBs = ( "gNB-Eurecom-5GNRBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+gNBs =
+(
+ {
+ ////////// Identification parameters:
+ gNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_GNB";
+
+ gNB_name = "gNB-Eurecom-5GNRBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = 1;
+
+ plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});
+
+ tr_s_preference = "local_mac";
+
+ ////////// Physical parameters:
+
+ min_rxtxtime = 6;
+
+ servingCellConfigCommon = (
+ {
+ #spCellConfigCommon
+
+ physCellId = 0;
+
+# downlinkConfigCommon
+ #frequencyInfoDL
+ # this is 2150 MHz + 12 PRBs@15kHz SCS (same as initial BWP), points to Subcarrier 0 of RB#10 of SSB block
+ absoluteFrequencySSB = 430432;
+ dl_frequencyBand = 66;
+ # this is 2150 MHz
+ dl_absoluteFrequencyPointA = 430000;
+ #scs-SpecificCarrierList
+ dl_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ dl_subcarrierSpacing = 0;
+ dl_carrierBandwidth = 25;
+ #initialDownlinkBWP
+ #genericParameters
+ # this is RBstart=0,L=25 (275*(L-1))+RBstart
+ initialDLBWPlocationAndBandwidth = 6600;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialDLBWPsubcarrierSpacing = 0;
+ #pdcch-ConfigCommon
+ initialDLBWPcontrolResourceSetZero = 0;
+ initialDLBWPsearchSpaceZero = 0;
+
+ #uplinkConfigCommon
+ #frequencyInfoUL
+ ul_frequencyBand = 66;
+ ul_absoluteFrequencyPointA = 350000;
+ #scs-SpecificCarrierList
+ ul_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ ul_subcarrierSpacing = 0;
+ ul_carrierBandwidth = 25;
+ pMax = 20;
+ #initialUplinkBWP
+ #genericParameters
+ initialULBWPlocationAndBandwidth = 6600;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialULBWPsubcarrierSpacing = 0;
+ #rach-ConfigCommon
+ #rach-ConfigGeneric
+ prach_ConfigurationIndex = 98;
+#prach_msg1_FDM
+#0 = one, 1=two, 2=four, 3=eight
+ prach_msg1_FDM = 0;
+ prach_msg1_FrequencyStart = 0;
+ zeroCorrelationZoneConfig = 13;
+ preambleReceivedTargetPower = -118;
+#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
+ preambleTransMax = 6;
+#powerRampingStep
+# 0=dB0,1=dB2,2=dB4,3=dB6
+ powerRampingStep = 1;
+#ra_ReponseWindow
+#1,2,4,8,10,20,40,80
+ ra_ResponseWindow = 4;
+#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
+#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
+#oneHalf (0..15) 4,8,12,16,...60,64
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
+#ra_ContentionResolutionTimer
+#(0..7) 8,16,24,32,40,48,56,64
+ ra_ContentionResolutionTimer = 7;
+ rsrp_ThresholdSSB = 19;
+#prach-RootSequenceIndex_PR
+#1 = 839, 2 = 139
+ prach_RootSequenceIndex_PR = 2;
+ prach_RootSequenceIndex = 1;
+ # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
+ msg1_SubcarrierSpacing = 0;
+# restrictedSetConfig
+# 0=unrestricted, 1=restricted type A, 2=restricted type B
+ restrictedSetConfig = 0;
+
+ msg3_DeltaPreamble = 1;
+ p0_NominalWithGrant =-90;
+
+# pucch-ConfigCommon setup :
+# pucchGroupHopping
+# 0 = neither, 1= group hopping, 2=sequence hopping
+ pucchGroupHopping = 0;
+ hoppingId = 40;
+ p0_nominal = -90;
+# ssb_PositionsInBurs_BitmapPR
+# 1=short, 2=medium, 3=long
+ ssb_PositionsInBurst_PR = 2;
+ ssb_PositionsInBurst_Bitmap = 0x1;
+
+# ssb_periodicityServingCell
+# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
+ ssb_periodicityServingCell = 2;
+
+# dmrs_TypeA_position
+# 0 = pos2, 1 = pos3
+ dmrs_TypeA_Position = 0;
+
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ subcarrierSpacing = 0;
+
+ ssPBCH_BlockPower = -25;
+ }
+
+ );
+
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "192.168.12.26";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+
+ GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
+ GNB_INTERFACE_NAME_FOR_S1U = "eth0";
+ GNB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
+ GNB_PORT_FOR_S1U = 2152; # Spec 2152
+ };
+ }
+);
+
+MACRLCs = (
+ {
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ }
+);
+
+L1s = (
+ {
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ thread_pool_size = 8;
+ ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+ }
+);
+
+RUs = (
+ {
+ local_rf = "yes";
+ nb_tx = 1;
+ nb_rx = 1;
+ att_tx = 0;
+ att_rx = 0;
+ bands = [7];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 114;
+ eNB_instances = [0];
+ ## beamforming 1x2 matrix: 1 layer x 2 antennas
+ bf_weights = [0x00007fff, 0x0000];
+ ## beamforming 1x4 matrix: 1 layer x 4 antennas
+ #bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
+ ## beamforming 2x2 matrix:
+ #bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
+ ## beamforming 4x4 matrix:
+ #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
+ sdr_addrs = "type=x300";
+ clock_src = "internal";
+ # if_freq = 3700000000L;
+ # if_offset = 1000000;
+ }
+);
+
+THREAD_STRUCT = (
+ {
+ #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+ parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
+ #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+ worker_config = "WORKER_DISABLE";
+ }
+);
+
+security = {
+ # preferred ciphering algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nea0, nea1, nea2, nea3
+ ciphering_algorithms = ( "nea0" );
+
+ # preferred integrity algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nia0, nia1, nia2, nia3
+ integrity_algorithms = ( "nia2", "nia0" );
+
+ # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
+ # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
+ drb_ciphering = "yes";
+ drb_integrity = "no";
+};
+
+ 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";
+ };
+
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
index a64a4c6022..f0f546208e 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
@@ -15,23 +15,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
-
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
index a371380e6e..be42f67d44 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
@@ -14,23 +14,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
-
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp-itti.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp-itti.conf
index cb90889b52..66051ef9bc 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp-itti.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp-itti.conf
@@ -15,23 +15,8 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 100;
- plmn_list = ({
- mcc = 208;
- mnc = 93;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x010203; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
-
+ plmn_list = ({ mcc = 208; mnc = 93; mnc_length = 2; snssaiList = ({ sst = 1 }) });
+
tr_s_preference = "local_mac"
////////// Physical parameters:
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
index 42aa555771..ca9f853b69 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
@@ -11,18 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
@@ -339,7 +328,3 @@ log_config :
ngap_log_level ="debug";
f1ap_log_level ="debug";
};
-<<<<<<< HEAD
-=======
-
->>>>>>> origin/develop
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpn300.conf
index 6abf2c19cc..30742d88f4 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpn300.conf
@@ -11,22 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpx300.conf
new file mode 100644
index 0000000000..560febad88
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpx300.conf
@@ -0,0 +1,299 @@
+Active_gNBs = ( "5G-GOA-gNB");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+gNBs =
+(
+ {
+ ////////// Identification parameters:
+ gNB_ID = 0xe00;
+ gNB_name = "5G-GOA-gNB";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = 1;
+ plmn_list = ({
+ mcc = 208;
+ mnc = 99;
+ mnc_length = 2;
+ snssaiList = (
+ {
+ sst = 1;
+ sd = 0x1; // 0 false, else true
+ },
+ {
+ sst = 1;
+ sd = 0x112233; // 0 false, else true
+ }
+ );
+
+ });
+
+ nr_cellid = 12345678L;
+
+ ////////// Physical parameters:
+
+ min_rxtxtime = 6;
+
+ pdcch_ConfigSIB1 = (
+ {
+ controlResourceSetZero = 12;
+ searchSpaceZero = 0;
+ }
+ );
+
+ servingCellConfigCommon = (
+ {
+ #spCellConfigCommon
+
+ physCellId = 0;
+
+# downlinkConfigCommon
+ #frequencyInfoDL
+ # this is 2150 MHz + 61 PRBs@30kHz SCS
+ absoluteFrequencySSB = 434392;
+ dl_frequencyBand = 66;
+ # this is 2150 MHz
+ dl_absoluteFrequencyPointA = 430000;
+ #scs-SpecificCarrierList
+ dl_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ dl_subcarrierSpacing = 1;
+ dl_carrierBandwidth = 106;
+ #initialDownlinkBWP
+ #genericParameters
+ # this is RBstart=0,L=106 (275*(L-1))+RBstart
+ initialDLBWPlocationAndBandwidth = 28875; # 13475 6366 12925 12956 28875 12952
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialDLBWPsubcarrierSpacing = 1;
+ #pdcch-ConfigCommon
+ initialDLBWPcontrolResourceSetZero = 12;
+ initialDLBWPsearchSpaceZero = 0;
+
+ #uplinkConfigCommon
+ #frequencyInfoUL
+ ul_frequencyBand = 66;
+ # this is 1750 MHz
+ ul_absoluteFrequencyPointA = 350000;
+ #scs-SpecificCarrierList
+ ul_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ ul_subcarrierSpacing = 1;
+ ul_carrierBandwidth = 106;
+ pMax = 20;
+ #initialUplinkBWP
+ #genericParameters
+ initialULBWPlocationAndBandwidth = 28875;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialULBWPsubcarrierSpacing = 1;
+ #rach-ConfigCommon
+ #rach-ConfigGeneric
+ prach_ConfigurationIndex = 98;
+#prach_msg1_FDM
+#0 = one, 1=two, 2=four, 3=eight
+ prach_msg1_FDM = 0;
+ prach_msg1_FrequencyStart = 0;
+ zeroCorrelationZoneConfig = 13;
+ preambleReceivedTargetPower = -118;
+#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
+ preambleTransMax = 6;
+#powerRampingStep
+# 0=dB0,1=dB2,2=dB4,3=dB6
+ powerRampingStep = 1;
+#ra_ReponseWindow
+#1,2,4,8,10,20,40,80
+ ra_ResponseWindow = 4;
+#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
+#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
+#oneHalf (0..15) 4,8,12,16,...60,64
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
+#ra_ContentionResolutionTimer
+#(0..7) 8,16,24,32,40,48,56,64
+ ra_ContentionResolutionTimer = 7;
+ rsrp_ThresholdSSB = 19;
+#prach-RootSequenceIndex_PR
+#1 = 839, 2 = 139
+ prach_RootSequenceIndex_PR = 2;
+ prach_RootSequenceIndex = 1;
+ # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
+ #
+ msg1_SubcarrierSpacing = 1;
+# restrictedSetConfig
+# 0=unrestricted, 1=restricted type A, 2=restricted type B
+ restrictedSetConfig = 0;
+
+ msg3_DeltaPreamble = 1;
+ p0_NominalWithGrant =-90;
+
+# pucch-ConfigCommon setup :
+# pucchGroupHopping
+# 0 = neither, 1= group hopping, 2=sequence hopping
+ pucchGroupHopping = 0;
+ hoppingId = 40;
+ p0_nominal = -90;
+# ssb_PositionsInBurs_BitmapPR
+# 1=short, 2=medium, 3=long
+ ssb_PositionsInBurst_PR = 2;
+ ssb_PositionsInBurst_Bitmap = 1;
+
+# ssb_periodicityServingCell
+# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
+ ssb_periodicityServingCell = 2;
+
+# dmrs_TypeA_position
+# 0 = pos2, 1 = pos3
+ dmrs_TypeA_Position = 0;
+
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ subcarrierSpacing = 1;
+
+
+ #tdd-UL-DL-ConfigurationCommon
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ referenceSubcarrierSpacing = 1;
+ # pattern1
+ # dl_UL_TransmissionPeriodicity
+ # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
+ dl_UL_TransmissionPeriodicity = 6;
+ nrofDownlinkSlots = 7;
+ nrofDownlinkSymbols = 6;
+ nrofUplinkSlots = 2;
+ nrofUplinkSymbols = 4;
+
+ ssPBCH_BlockPower = -25;
+ }
+
+ );
+
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// AMF parameters:
+ amf_ip_address = ( { ipv4 = "192.168.71.132";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ GNB_INTERFACE_NAME_FOR_NG_AMF = "eno1";
+ GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.129/26";
+ GNB_INTERFACE_NAME_FOR_NGU = "eno1";
+ GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.129/26";
+ GNB_PORT_FOR_S1U = 2152; # Spec 2152
+ };
+
+ }
+);
+
+MACRLCs = (
+{
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ pusch_TargetSNRx10 = 150;
+ pucch_TargetSNRx10 = 200;
+ ulsch_max_frame_inactivity = 0;
+}
+);
+
+L1s = (
+{
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ prach_dtx_threshold = 120;
+ pucch0_dtx_threshold = 150;
+ ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
+);
+
+RUs = (
+ {
+ local_rf = "yes";
+ nb_tx = 1;
+ nb_rx = 1;
+ att_tx = 0;
+ att_rx = 0;
+ bands = [7];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 114;
+ sf_extension = 0;
+ eNB_instances = [0];
+ ##beamforming 1x2 matrix: 1 layer x 2 antennas
+ bf_weights = [0x00007fff, 0x0000];
+ ##beamforming 1x4 matrix: 1 layer x 4 antennas
+ #bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
+ ## beamforming 2x2 matrix:
+ # bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
+ ## beamforming 4x4 matrix:
+ #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
+ sdr_addrs = "type=x300";
+ clock_src = "internal";
+ # if_freq = 3700000000L;
+ # if_offset = 1000000;
+ }
+);
+
+THREAD_STRUCT = (
+{
+ #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+ parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
+ #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+ worker_config = "WORKER_DISABLE";
+}
+);
+
+rfsimulator :
+{
+ serveraddr = "server";
+ serverport = "4043";
+ options = (); #("saviq"); or/and "chanmod"
+ modelname = "AWGN";
+ IQfile = "/tmp/rfsimulator.iqs";
+};
+
+security = {
+ # preferred ciphering algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nea0, nea1, nea2, nea3
+ ciphering_algorithms = ( "nea0" );
+
+ # preferred integrity algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nia0, nia1, nia2, nia3
+ integrity_algorithms = ( "nia2", "nia0" );
+
+ # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
+ # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
+ drb_ciphering = "yes";
+ drb_integrity = "no";
+};
+
+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";
+ ngap_log_level ="debug";
+ f1ap_log_level ="debug";
+};
+
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.24PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.24PRB.usrpx300.conf
new file mode 100644
index 0000000000..3e7f50f506
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.24PRB.usrpx300.conf
@@ -0,0 +1,300 @@
+Active_gNBs = ( "5G-GOA-gNB");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+gNBs =
+(
+ {
+ ////////// Identification parameters:
+ gNB_ID = 0xe00;
+ gNB_name = "5G-GOA-gNB";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = 1;
+ plmn_list = ({
+ mcc = 208;
+ mnc = 99;
+ mnc_length = 2;
+ snssaiList = (
+ {
+ sst = 1;
+ sd = 0x1; // 0 false, else true
+ },
+ {
+ sst = 1;
+ sd = 0x112233; // 0 false, else true
+ }
+ );
+
+ });
+
+ nr_cellid = 12345678L;
+
+ ////////// Physical parameters:
+
+ sib1_tda = 5;
+ min_rxtxtime = 6;
+
+ pdcch_ConfigSIB1 = (
+ {
+ controlResourceSetZero = 4;
+ searchSpaceZero = 0;
+ }
+ );
+
+ servingCellConfigCommon = (
+ {
+ #spCellConfigCommon
+
+ physCellId = 0;
+
+# downlinkConfigCommon
+ #frequencyInfoDL
+ # this is 2150 MHz + 14 PRBs@30kHz SCS (same as initial BWP), points to Subcarrier 0 of RB#10 of SSB block
+ absoluteFrequencySSB = 431008;
+ dl_frequencyBand = 66;
+ # this is 2150 MHz
+ dl_absoluteFrequencyPointA = 430000;
+ #scs-SpecificCarrierList
+ dl_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ dl_subcarrierSpacing = 1;
+ dl_carrierBandwidth = 24;
+ #initialDownlinkBWP
+ #genericParameters
+ # this is RBstart=0,L=24 (275*(L-1))+RBstart
+ initialDLBWPlocationAndBandwidth = 6325;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialDLBWPsubcarrierSpacing = 1;
+ #pdcch-ConfigCommon
+ initialDLBWPcontrolResourceSetZero = 4;
+ initialDLBWPsearchSpaceZero = 0;
+
+ #uplinkConfigCommon
+ #frequencyInfoUL
+ ul_frequencyBand = 66;
+ # this is 1750 MHz
+ ul_absoluteFrequencyPointA = 350000;
+ #scs-SpecificCarrierList
+ ul_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ ul_subcarrierSpacing = 1;
+ ul_carrierBandwidth = 24;
+ pMax = 20;
+ #initialUplinkBWP
+ #genericParameters
+ initialULBWPlocationAndBandwidth = 6325;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialULBWPsubcarrierSpacing = 1;
+ #rach-ConfigCommon
+ #rach-ConfigGeneric
+ prach_ConfigurationIndex = 98;
+#prach_msg1_FDM
+#0 = one, 1=two, 2=four, 3=eight
+ prach_msg1_FDM = 0;
+ prach_msg1_FrequencyStart = 0;
+ zeroCorrelationZoneConfig = 13;
+ preambleReceivedTargetPower = -118;
+#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
+ preambleTransMax = 6;
+#powerRampingStep
+# 0=dB0,1=dB2,2=dB4,3=dB6
+ powerRampingStep = 1;
+#ra_ReponseWindow
+#1,2,4,8,10,20,40,80
+ ra_ResponseWindow = 4;
+#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
+#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
+#oneHalf (0..15) 4,8,12,16,...60,64
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
+#ra_ContentionResolutionTimer
+#(0..7) 8,16,24,32,40,48,56,64
+ ra_ContentionResolutionTimer = 7;
+ rsrp_ThresholdSSB = 19;
+#prach-RootSequenceIndex_PR
+#1 = 839, 2 = 139
+ prach_RootSequenceIndex_PR = 2;
+ prach_RootSequenceIndex = 1;
+ # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
+ #
+ msg1_SubcarrierSpacing = 1;
+# restrictedSetConfig
+# 0=unrestricted, 1=restricted type A, 2=restricted type B
+ restrictedSetConfig = 0;
+
+ msg3_DeltaPreamble = 1;
+ p0_NominalWithGrant =-90;
+
+# pucch-ConfigCommon setup :
+# pucchGroupHopping
+# 0 = neither, 1= group hopping, 2=sequence hopping
+ pucchGroupHopping = 0;
+ hoppingId = 40;
+ p0_nominal = -90;
+# ssb_PositionsInBurs_BitmapPR
+# 1=short, 2=medium, 3=long
+ ssb_PositionsInBurst_PR = 2;
+ ssb_PositionsInBurst_Bitmap = 1;
+
+# ssb_periodicityServingCell
+# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
+ ssb_periodicityServingCell = 2;
+
+# dmrs_TypeA_position
+# 0 = pos2, 1 = pos3
+ dmrs_TypeA_Position = 0;
+
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ subcarrierSpacing = 1;
+
+
+ #tdd-UL-DL-ConfigurationCommon
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ referenceSubcarrierSpacing = 1;
+ # pattern1
+ # dl_UL_TransmissionPeriodicity
+ # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
+ dl_UL_TransmissionPeriodicity = 6;
+ nrofDownlinkSlots = 7;
+ nrofDownlinkSymbols = 6;
+ nrofUplinkSlots = 2;
+ nrofUplinkSymbols = 4;
+
+ ssPBCH_BlockPower = -25;
+ }
+
+ );
+
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// AMF parameters:
+ amf_ip_address = ( { ipv4 = "192.168.71.132";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ GNB_INTERFACE_NAME_FOR_NG_AMF = "eno1";
+ GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.129/26";
+ GNB_INTERFACE_NAME_FOR_NGU = "eno1";
+ GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.129/26";
+ GNB_PORT_FOR_S1U = 2152; # Spec 2152
+ };
+
+ }
+);
+
+MACRLCs = (
+{
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ pusch_TargetSNRx10 = 150;
+ pucch_TargetSNRx10 = 200;
+ ulsch_max_frame_inactivity = 0;
+}
+);
+
+L1s = (
+{
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ prach_dtx_threshold = 120;
+ pucch0_dtx_threshold = 150;
+ ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
+);
+
+RUs = (
+ {
+ local_rf = "yes";
+ nb_tx = 1;
+ nb_rx = 1;
+ att_tx = 0;
+ att_rx = 0;
+ bands = [7];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 114;
+ sf_extension = 0;
+ eNB_instances = [0];
+ ##beamforming 1x2 matrix: 1 layer x 2 antennas
+ bf_weights = [0x00007fff, 0x0000];
+ ##beamforming 1x4 matrix: 1 layer x 4 antennas
+ #bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
+ ## beamforming 2x2 matrix:
+ # bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
+ ## beamforming 4x4 matrix:
+ #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
+ sdr_addrs = "type=x300";
+ clock_src = "internal";
+ # if_freq = 3700000000L;
+ # if_offset = 1000000;
+ }
+);
+
+THREAD_STRUCT = (
+ {
+ #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+ parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
+ #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+ worker_config = "WORKER_DISABLE";
+ }
+);
+
+rfsimulator :
+{
+ serveraddr = "server";
+ serverport = "4043";
+ options = (); #("saviq"); or/and "chanmod"
+ modelname = "AWGN";
+ IQfile = "/tmp/rfsimulator.iqs";
+};
+
+security = {
+ # preferred ciphering algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nea0, nea1, nea2, nea3
+ ciphering_algorithms = ( "nea0" );
+
+ # preferred integrity algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nia0, nia1, nia2, nia3
+ integrity_algorithms = ( "nia2", "nia0" );
+
+ # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
+ # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
+ drb_ciphering = "yes";
+ drb_integrity = "no";
+};
+
+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";
+ ngap_log_level ="debug";
+ f1ap_log_level ="debug";
+};
+
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf
new file mode 100644
index 0000000000..dbeb20c23f
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf
@@ -0,0 +1,300 @@
+Active_gNBs = ( "5G-GOA-gNB");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+gNBs =
+(
+ {
+ ////////// Identification parameters:
+ gNB_ID = 0xe00;
+ gNB_name = "5G-GOA-gNB";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = 1;
+ plmn_list = ({
+ mcc = 208;
+ mnc = 99;
+ mnc_length = 2;
+ snssaiList = (
+ {
+ sst = 1;
+ sd = 0x1; // 0 false, else true
+ },
+ {
+ sst = 1;
+ sd = 0x112233; // 0 false, else true
+ }
+ );
+
+ });
+
+ nr_cellid = 12345678L;
+
+ ////////// Physical parameters:
+
+ sib1_tda = 5;
+ min_rxtxtime = 6;
+
+ pdcch_ConfigSIB1 = (
+ {
+ controlResourceSetZero = 2;
+ searchSpaceZero = 0;
+ }
+ );
+
+ servingCellConfigCommon = (
+ {
+ #spCellConfigCommon
+
+ physCellId = 0;
+
+# downlinkConfigCommon
+ #frequencyInfoDL
+ # this is 2150 MHz + 14 PRBs@15kHz SCS (same as initial BWP), points to Subcarrier 0 of RB#10 of SSB block
+ absoluteFrequencySSB = 430504;
+ dl_frequencyBand = 66;
+ # this is 2150 MHz
+ dl_absoluteFrequencyPointA = 430000;
+ #scs-SpecificCarrierList
+ dl_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ dl_subcarrierSpacing = 0;
+ dl_carrierBandwidth = 25;
+ #initialDownlinkBWP
+ #genericParameters
+ # this is RBstart=0,L=25 (275*(L-1))+RBstart
+ initialDLBWPlocationAndBandwidth = 6600;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialDLBWPsubcarrierSpacing = 0;
+ #pdcch-ConfigCommon
+ initialDLBWPcontrolResourceSetZero = 2;
+ initialDLBWPsearchSpaceZero = 0;
+
+ #uplinkConfigCommon
+ #frequencyInfoUL
+ ul_frequencyBand = 66;
+ # this is 1750 MHz
+ ul_absoluteFrequencyPointA = 350000;
+ #scs-SpecificCarrierList
+ ul_offstToCarrier = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ ul_subcarrierSpacing = 0;
+ ul_carrierBandwidth = 25;
+ pMax = 20;
+ #initialUplinkBWP
+ #genericParameters
+ initialULBWPlocationAndBandwidth = 6600;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialULBWPsubcarrierSpacing = 0;
+ #rach-ConfigCommon
+ #rach-ConfigGeneric
+ prach_ConfigurationIndex = 98;
+#prach_msg1_FDM
+#0 = one, 1=two, 2=four, 3=eight
+ prach_msg1_FDM = 0;
+ prach_msg1_FrequencyStart = 0;
+ zeroCorrelationZoneConfig = 13;
+ preambleReceivedTargetPower = -118;
+#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
+ preambleTransMax = 6;
+#powerRampingStep
+# 0=dB0,1=dB2,2=dB4,3=dB6
+ powerRampingStep = 1;
+#ra_ReponseWindow
+#1,2,4,8,10,20,40,80
+ ra_ResponseWindow = 4;
+#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
+#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
+#oneHalf (0..15) 4,8,12,16,...60,64
+ ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
+#ra_ContentionResolutionTimer
+#(0..7) 8,16,24,32,40,48,56,64
+ ra_ContentionResolutionTimer = 7;
+ rsrp_ThresholdSSB = 19;
+#prach-RootSequenceIndex_PR
+#1 = 839, 2 = 139
+ prach_RootSequenceIndex_PR = 2;
+ prach_RootSequenceIndex = 1;
+ # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
+ #
+ msg1_SubcarrierSpacing = 0;
+# restrictedSetConfig
+# 0=unrestricted, 1=restricted type A, 2=restricted type B
+ restrictedSetConfig = 0;
+
+ msg3_DeltaPreamble = 1;
+ p0_NominalWithGrant =-90;
+
+# pucch-ConfigCommon setup :
+# pucchGroupHopping
+# 0 = neither, 1= group hopping, 2=sequence hopping
+ pucchGroupHopping = 0;
+ hoppingId = 40;
+ p0_nominal = -90;
+# ssb_PositionsInBurs_BitmapPR
+# 1=short, 2=medium, 3=long
+ ssb_PositionsInBurst_PR = 2;
+ ssb_PositionsInBurst_Bitmap = 1;
+
+# ssb_periodicityServingCell
+# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
+ ssb_periodicityServingCell = 2;
+
+# dmrs_TypeA_position
+# 0 = pos2, 1 = pos3
+ dmrs_TypeA_Position = 0;
+
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ subcarrierSpacing = 0;
+
+
+ #tdd-UL-DL-ConfigurationCommon
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ referenceSubcarrierSpacing = 0;
+ # pattern1
+ # dl_UL_TransmissionPeriodicity
+ # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
+ dl_UL_TransmissionPeriodicity = 6;
+ nrofDownlinkSlots = 7;
+ nrofDownlinkSymbols = 6;
+ nrofUplinkSlots = 2;
+ nrofUplinkSymbols = 4;
+
+ ssPBCH_BlockPower = -25;
+ }
+
+ );
+
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// AMF parameters:
+ amf_ip_address = ( { ipv4 = "192.168.71.132";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ GNB_INTERFACE_NAME_FOR_NG_AMF = "eno1";
+ GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.129/26";
+ GNB_INTERFACE_NAME_FOR_NGU = "eno1";
+ GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.129/26";
+ GNB_PORT_FOR_S1U = 2152; # Spec 2152
+ };
+
+ }
+);
+
+MACRLCs = (
+{
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ pusch_TargetSNRx10 = 150;
+ pucch_TargetSNRx10 = 200;
+ ulsch_max_frame_inactivity = 0;
+}
+);
+
+L1s = (
+{
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ prach_dtx_threshold = 120;
+ pucch0_dtx_threshold = 150;
+ ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
+);
+
+RUs = (
+ {
+ local_rf = "yes";
+ nb_tx = 1;
+ nb_rx = 1;
+ att_tx = 0;
+ att_rx = 0;
+ bands = [7];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 114;
+ sf_extension = 0;
+ eNB_instances = [0];
+ ##beamforming 1x2 matrix: 1 layer x 2 antennas
+ bf_weights = [0x00007fff, 0x0000];
+ ##beamforming 1x4 matrix: 1 layer x 4 antennas
+ #bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
+ ## beamforming 2x2 matrix:
+ # bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
+ ## beamforming 4x4 matrix:
+ #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
+ sdr_addrs = "type=x300";
+ clock_src = "internal";
+ # if_freq = 3700000000L;
+ # if_offset = 1000000;
+ }
+);
+
+THREAD_STRUCT = (
+ {
+ #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+ parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
+ #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+ worker_config = "WORKER_DISABLE";
+ }
+);
+
+rfsimulator :
+{
+ serveraddr = "server";
+ serverport = "4043";
+ options = (); #("saviq"); or/and "chanmod"
+ modelname = "AWGN";
+ IQfile = "/tmp/rfsimulator.iqs";
+};
+
+security = {
+ # preferred ciphering algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nea0, nea1, nea2, nea3
+ ciphering_algorithms = ( "nea0" );
+
+ # preferred integrity algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nia0, nia1, nia2, nia3
+ integrity_algorithms = ( "nia2", "nia0" );
+
+ # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
+ # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
+ drb_ciphering = "yes";
+ drb_integrity = "no";
+};
+
+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";
+ ngap_log_level ="debug";
+ f1ap_log_level ="debug";
+};
+
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf
index 730198653e..98d901c35e 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf
@@ -10,17 +10,7 @@ gNBs = (
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = (
- {
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = ({
- sst = 1;
- sd = 0x1; // 0 false, else true
- });
- }
- );
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }); });
nr_cellid = 12345678L;
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf
index 30be597255..f5f187a736 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf
@@ -11,18 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.4layer.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.4layer.conf
index 8ff83b5d02..2da02b0353 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.4layer.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.4layer.conf
@@ -11,22 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
index 16bd6d9055..b31569af11 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
@@ -11,18 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.sabox.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.sabox.conf
index 5fcad18f6d..9e4906af0f 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.sabox.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.sabox.conf
@@ -13,18 +13,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 450;
- mnc = 05;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0xd143a5; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 450; mnc = 05; mnc_length = 2; snssaiList = ({ sst = 1 }) });
tr_s_preference = "local_mac"
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf
index ef732126bd..67797a0378 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf
@@ -11,17 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- }
- );
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.217PRB.2x2.usrpn300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.217PRB.2x2.usrpn300.conf
index 1f1f64ce3f..513c167a69 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.217PRB.2x2.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.217PRB.2x2.usrpn300.conf
@@ -11,17 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- }
- );
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.24PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.24PRB.usrpb210.conf
index ad1471339a..1defbf91ed 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.24PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.24PRB.usrpb210.conf
@@ -11,22 +11,7 @@ gNBs =
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
- plmn_list = ({
- mcc = 208;
- mnc = 99;
- mnc_length = 2;
- snssaiList = (
- {
- sst = 1;
- sd = 0x1; // 0 false, else true
- },
- {
- sst = 1;
- sd = 0x112233; // 0 false, else true
- }
- );
-
- });
+ plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
nr_cellid = 12345678L;
diff --git a/targets/SCRIPTS/asn1_generate_rrc_messaging_c_code.bash b/targets/SCRIPTS/asn1_generate_rrc_messaging_c_code.bash
deleted file mode 100755
index e0832dd8a7..0000000000
--- a/targets/SCRIPTS/asn1_generate_rrc_messaging_c_code.bash
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-
-# generate .c and .h files
-which asn1c > /dev/null
-if [ $? -eq 0 ] ; then echo "asn1c is installed" ; else echo "Please install asn1c (version 0.9.22 or greater)" ; fi
-cd $OPENAIR2_DIR/RRC/LITE/MESSAGES && asn1c -gen-PER -fcompound-names -fnative-types -fskeletons-copy $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions.asn
-
-
-# generate ASN constants
-
-rm -f $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_constants.h
-cat $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions.asn | grep INTEGER\ \:\: | sed 's/INTEGER ::=//g' | sed 's/--/\/\//g' | sed 's/^/#define /' | sed 's/\-1/_minus_1/g' | sed 's/\-/_/g' > $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_constants.tmp
-rm -f /tmp/EUTRA-RRC-Definitions.tmp
-cat $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions.asn | grep --invert-match SEQUENCE | grep INTEGER\ \( | uniq | grep \:\:\= | sed 's/INTEGER\ //g' | sed 's/[()]//g' | tr "." " " | sed 's/\:\:\=//g' | tr '\t' " " > /tmp/EUTRA-RRC-Definitions.tmp
-cat /tmp/EUTRA-RRC-Definitions.tmp | sed 's/^ *//g' | sed 's/ \{1,\}/ /g' | cut --complement -d ' ' -f3 | sed 's/^/#define min_val_/' | sed 's/\ -/\ +/g' | sed 's/-/_/g' | sed 's/\ +/\ -/g' >> $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_constants.tmp
-cat /tmp/EUTRA-RRC-Definitions.tmp | sed 's/^ *//g' | sed 's/ \{1,\}/ /g' | cut --complement -d ' ' -f2 | sed 's/^/#define max_val_/' | sed 's/\ -/\ +/g' | sed 's/-/_/g' | sed 's/\ +/\ -/g' >> $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_constants.tmp;
-echo "#ifndef __ASN1_CONSTANTS_H__" > $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_constants.h
-echo "#define __ASN1_CONSTANTS_H__" >> $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_constants.h
-cat $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_constants.tmp >> $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_constants.h
-echo "#endif " >> $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_constants.h
-rm -f $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1_constants.tmp;
diff --git a/targets/SCRIPTS/install_asn1.sh b/targets/SCRIPTS/install_asn1.sh
deleted file mode 100644
index 7da7d50b47..0000000000
--- a/targets/SCRIPTS/install_asn1.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-which asn1c > /dev/null
-if [ $? -eq 0 ] ; then echo "asn1c is installed" ; else echo "Please install asn1c (version 0.9.22 or greater)" ; fi
-cd $OPENAIR2_DIR/RRC/LITE/MESSAGES && asn1c -gen-PER -fcompound-names -fnative-types -fskeletons-copy $OPENAIR2_DIR/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions.asn
-
-
diff --git a/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash b/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash
deleted file mode 100755
index 9c4947d479..0000000000
--- a/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-#/*
-# * 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
-# */
-################################################################################
-# Tested on ubuntu 12.04 with updates 07 november 2013
-
-$1 rm -Rf /usr/local/src/asn1c-r1516
-$1 svn co https://github.com/vlm/asn1c/trunk /usr/local/src/asn1c-r1516 -r 1516 > /tmp/install_log.txt
-cd /usr/local/src/asn1c-r1516
-$1 patch -p0 < $OPENAIR3_DIR/S1AP/MESSAGES/ASN1/asn1cpatch.p0 > /tmp/install_log.txt
-$1 ./configure > /tmp/install_log.txt
-$1 make > /tmp/install_log.txt
-$1 make install > /tmp/install_log.txt
diff --git a/targets/SCRIPTS/svn-merge-meld.py b/targets/SCRIPTS/svn-merge-meld.py
deleted file mode 100755
index a05d697f2e..0000000000
--- a/targets/SCRIPTS/svn-merge-meld.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-# svn merge-tool python wrapper for meld
-# to use: edit ~/.subversion/config and uncomment the line merge-tool-cmd =
-# and set the path to your command
-
-# Note that when a conflict occurs, you will be prompted what to do with it. You need to type a single 'l' and for svn to run this script. When you've finished your merge, you need to type an 'r' to resolve the conflict and copy the merged version to the working copy.
-
-import os, sys
-import subprocess
-import shutil
-
-try:
- # path to meld
- meld = "/usr/bin/meld"
-
- print "Set the file paths for mine, theirs, and merged\n"
- print "When you've finished your merge, you need to type an 'r' to resolve the conflict and copy the merged version to the working copy\n"
-
- # the base or "left" revision version of the file you're merging with
- base = sys.argv[1]
-
- # this is "later" or "right"revision version of the file you're merging with
- theirs = sys.argv[2]
-
- # this is my version, recommandations: sync your copy to the latest version
- mine = sys.argv[3]
-
- #this starts out as a copy of 'mine' (your working copy), and this is where you want the final results of the merge to end up.
- merged = sys.argv[4]
-
- print "Calling meld: the order of the files is (merged, theirs, and mine)"
- # all 4 versions: worke right-to-left, reslut being stored in the left file
- # cmd = [meld, mine, base, theirs, merged]
- # only 3 versions
- cmd = [meld, merged, theirs, mine]
-
- # Call meld, making sure it exits correctly
- subprocess.check_call(cmd)
-except:
- print "Oh, an error!\n"
- sys.exit(-1)