[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..56934fcd22 100644
--- a/ci-scripts/cls_physim1.py
+++ b/ci-scripts/cls_physim1.py
@@ -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 d3868da6cd..7f7b63b369 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -1241,6 +1241,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/nr/nr_common.c b/common/utils/nr/nr_common.c
index 0fb4824d42..465679d002 100644
--- a/common/utils/nr/nr_common.c
+++ b/common/utils/nr/nr_common.c
@@ -724,3 +724,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 30d6b5df51..d4b0156843 100644
--- a/executables/nr-uesoftmodem.c
+++ b/executables/nr-uesoftmodem.c
@@ -505,8 +505,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 a2433b53cf..55599b7cc3 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -917,7 +917,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 e396651133..64bbed571c 100644
--- a/openair1/PHY/INIT/nr_init_ue.c
+++ b/openair1/PHY/INIT/nr_init_ue.c
@@ -376,6 +376,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_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 88f74cd1c9..25df321b3a 100644
--- a/openair2/GNB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -1465,9 +1465,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 1298434679..9572d16d8f 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 c87aa68f75..46ffb0b210 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 7e3ba4bc7f..082e8dc599 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;
@@ -1681,6 +1777,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/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..481dc5e4fe 100644
--- a/openshift/README.md
+++ b/openshift/README.md
@@ -12,21 +12,30 @@
------
+# 1. Introduction
-**CAUTION: this is experimental. Still a lot to be done.**
+## General
------
+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`.
-# 1. Build pre-requisites #
+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.
-To build our RAN images, we SHALL use the `codeready-builder-for-rhel-8-x86_64-rpms` repository with all the proper development libraries.
+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 +44,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,55 +55,69 @@ 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`.
+
+# 6. Deployment using HELM Charts
**CAUTION: even more experimental.**
diff --git a/openshift/oai-gnb-rh8-image-stream.yml b/openshift/oai-enb-bc.yaml
similarity index 77%
rename from openshift/oai-gnb-rh8-image-stream.yml
rename to openshift/oai-enb-bc.yaml
index 2e04e94f5b..f9973224cc 100644
--- a/openshift/oai-gnb-rh8-image-stream.yml
+++ b/openshift/oai-enb-bc.yaml
@@ -20,11 +20,18 @@
# */
#---------------------------------------------------------------------
#
-apiVersion: v1
-kind: ImageStream
+kind: BuildConfig
+apiVersion: build.openshift.io/v1
metadata:
- name: oai-gnb
- namespace: oai
-status:
- tag: rhel8-latest
-
+ 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 92%
rename from openshift/oai-enb-image-stream.yml
rename to openshift/oai-enb-is.yaml
index 94ee13e50f..7e75af58d6 100644
--- a/openshift/oai-enb-image-stream.yml
+++ b/openshift/oai-enb-is.yaml
@@ -19,12 +19,14 @@
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
-#
-apiVersion: v1
+
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-enb
- namespace: oai
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
status:
tag: latest
-
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..996ad9fd1d 100644
--- a/openshift/oai-gnb-image-stream.yml
+++ b/openshift/oai-gnb-is.yaml
@@ -20,11 +20,14 @@
# */
#---------------------------------------------------------------------
#
-apiVersion: v1
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-gnb
- namespace: oai
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
status:
tag: latest
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 90%
rename from openshift/oai-lte-ue-rh8-image-stream.yml
rename to openshift/oai-lte-ue-is.yaml
index 09aeb2a766..678b8e6cbf 100644
--- a/openshift/oai-lte-ue-rh8-image-stream.yml
+++ b/openshift/oai-lte-ue-is.yaml
@@ -19,12 +19,14 @@
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
-#
-apiVersion: v1
+
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-lte-ue
- namespace: oai
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
status:
- tag: rhel8-latest
-
+ tag: latest
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 90%
rename from openshift/oai-nr-ue-rh8-image-stream.yml
rename to openshift/oai-nr-ue-is.yaml
index e61cc0dfde..0afd7b9448 100644
--- a/openshift/oai-nr-ue-rh8-image-stream.yml
+++ b/openshift/oai-nr-ue-is.yaml
@@ -19,12 +19,14 @@
# * contact@openairinterface.org
# */
#---------------------------------------------------------------------
-#
-apiVersion: v1
+
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-nr-ue
- namespace: oai
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
status:
- tag: rhel8-latest
-
+ tag: latest
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 96%
rename from openshift/oai-physim-image-stream.yml
rename to openshift/oai-physim-is.yaml
index 9ef338f139..f2c7853540 100644
--- a/openshift/oai-physim-image-stream.yml
+++ b/openshift/oai-physim-is.yaml
@@ -24,6 +24,9 @@ apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
name: oai-physim
+ namespace: oaicicd-ran
spec:
lookupPolicy:
local: true
+status:
+ tag: latest
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/ran-base-is.yaml b/openshift/ran-base-is.yaml
new file mode 100644
index 0000000000..edde0d700e
--- /dev/null
+++ b/openshift/ran-base-is.yaml
@@ -0,0 +1,31 @@
+#/*
+# * 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: image.openshift.io/v1
+kind: ImageStream
+metadata:
+ name: ran-base
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
+status:
+ tag: latest
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-ran-image-stream.yml b/openshift/ran-build-is.yaml
similarity index 90%
rename from openshift/oai-ran-image-stream.yml
rename to openshift/ran-build-is.yaml
index e1ef9d0b31..4f38d0ab47 100644
--- a/openshift/oai-ran-image-stream.yml
+++ b/openshift/ran-build-is.yaml
@@ -20,11 +20,14 @@
# */
#---------------------------------------------------------------------
#
-apiVersion: v1
+apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
- name: oai-ran
- namespace: oai
+ name: ran-build
+ namespace: oaicicd-ran
+spec:
+ lookupPolicy:
+ local: true
status:
tag: latest
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;