diff --git a/charts/physims/charts/dlsim/values.yaml b/charts/physims/charts/dlsim/values.yaml
index c0142b50ae..d78fbb7409 100644
--- a/charts/physims/charts/dlsim/values.yaml
+++ b/charts/physims/charts/dlsim/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/ldpctest/values.yaml b/charts/physims/charts/ldpctest/values.yaml
index 91eab91af5..e2e6467923 100644
--- a/charts/physims/charts/ldpctest/values.yaml
+++ b/charts/physims/charts/ldpctest/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/nr-dlschsim/values.yaml b/charts/physims/charts/nr-dlschsim/values.yaml
index e96541102c..8944e7e724 100644
--- a/charts/physims/charts/nr-dlschsim/values.yaml
+++ b/charts/physims/charts/nr-dlschsim/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/nr-dlsim/values.yaml b/charts/physims/charts/nr-dlsim/values.yaml
index c86fc96cff..573e8630de 100644
--- a/charts/physims/charts/nr-dlsim/values.yaml
+++ b/charts/physims/charts/nr-dlsim/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/nr-pbchsim/values.yaml b/charts/physims/charts/nr-pbchsim/values.yaml
index 62d89f9632..28c4678334 100644
--- a/charts/physims/charts/nr-pbchsim/values.yaml
+++ b/charts/physims/charts/nr-pbchsim/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/nr-prachsim/values.yaml b/charts/physims/charts/nr-prachsim/values.yaml
index 3ea9787f7a..9e3c68b54d 100644
--- a/charts/physims/charts/nr-prachsim/values.yaml
+++ b/charts/physims/charts/nr-prachsim/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/nr-pucchsim/values.yaml b/charts/physims/charts/nr-pucchsim/values.yaml
index cf50c0bd3c..449670f713 100644
--- a/charts/physims/charts/nr-pucchsim/values.yaml
+++ b/charts/physims/charts/nr-pucchsim/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/nr-ulschsim/values.yaml b/charts/physims/charts/nr-ulschsim/values.yaml
index 420b154596..a3afc090e8 100644
--- a/charts/physims/charts/nr-ulschsim/values.yaml
+++ b/charts/physims/charts/nr-ulschsim/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/nr-ulsim/values.yaml b/charts/physims/charts/nr-ulsim/values.yaml
index 7eb8e33fcb..2bf96498e8 100644
--- a/charts/physims/charts/nr-ulsim/values.yaml
+++ b/charts/physims/charts/nr-ulsim/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/polartest/values.yaml b/charts/physims/charts/polartest/values.yaml
index 496dc8afba..e0a532fdd8 100644
--- a/charts/physims/charts/polartest/values.yaml
+++ b/charts/physims/charts/polartest/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/smallblocktest/values.yaml b/charts/physims/charts/smallblocktest/values.yaml
index 9dd791265f..f2f113d9b6 100644
--- a/charts/physims/charts/smallblocktest/values.yaml
+++ b/charts/physims/charts/smallblocktest/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/charts/physims/charts/ulsim/values.yaml b/charts/physims/charts/ulsim/values.yaml
index f5110989d8..35dc14d596 100644
--- a/charts/physims/charts/ulsim/values.yaml
+++ b/charts/physims/charts/ulsim/values.yaml
@@ -33,7 +33,9 @@ podSecurityContext:
securityContext:
privileged: true
- # capabilities:
+ capabilities:
+ add:
+ - SYS_CAP_PTRACE
# drop:
# - ALL
# readOnlyRootFilesystem: true
diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py
index e606513935..fdc2bc1597 100644
--- a/ci-scripts/cls_containerize.py
+++ b/ci-scripts/cls_containerize.py
@@ -106,6 +106,9 @@ class Containerize():
self.registrySvrId = ''
self.testSvrId = ''
+ #checkers from xml
+ self.ran_checkers={}
+
#-----------------------------------------------------------
# Container management functions
#-----------------------------------------------------------
@@ -624,7 +627,7 @@ class Containerize():
else:
if containerToKill:
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + self.eNB_logFile[self.eNB_instance])
- logStatus = RAN.AnalyzeLogFile_eNB(self.eNB_logFile[self.eNB_instance], HTML)
+ logStatus = RAN.AnalyzeLogFile_eNB(self.eNB_logFile[self.eNB_instance], HTML, self.ran_checkers)
else:
logStatus = 0
if (logStatus < 0):
@@ -636,7 +639,7 @@ class Containerize():
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + self.eNB_logFile[self.eNB_instance], self.eNBSourceCodePath + '/cmake_targets/')
logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
- def DeployGenObject(self, HTML):
+ def DeployGenObject(self, HTML, RAN, UE):
self.exitStatus = 0
logging.info('\u001B[1m Checking Services to deploy\u001B[0m')
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose config --services'
@@ -679,12 +682,15 @@ class Containerize():
healthy = 0
while (count < 10):
count += 1
+ containerStatus = []
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
healthy = 0
for state in deployStatus.split('\n'):
- res = re.search('Up \(healthy\)', state)
- if res is not None:
+ if re.search('Up \(healthy\)', state) is not None:
healthy += 1
+ if re.search('rfsim4g-db-init.*Exit 0', state) is not None:
+ subprocess.check_output('docker rm -f rfsim4g-db-init || true', shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
+ containerStatus.append(state)
if healthy == self.nb_healthy[0]:
count = 100
else:
@@ -694,27 +700,41 @@ class Containerize():
if self.tsharkStarted == False:
logging.debug('Starting tshark on public network')
self.CaptureOnDockerNetworks()
- self.tsharkStarted = True
HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
+ for cState in containerStatus:
+ logging.debug(cState)
logging.info('\u001B[1m Deploying OAI Object(s) PASS\u001B[0m')
else:
- self.exitStatus = 1
HTML.CreateHtmlTestRow('Could not deploy in time', 'KO', CONST.ALL_PROCESSES_OK)
+ for cState in containerStatus:
+ logging.debug(cState)
logging.error('\u001B[1m Deploying OAI Object(s) FAILED\u001B[0m')
+ HTML.testCase_id = 'AUTO-UNDEPLOY'
+ UE.testCase_id = 'AUTO-UNDEPLOY'
+ HTML.desc = 'Automatic Undeployment'
+ UE.desc = 'Automatic Undeployment'
+ UE.ShowTestID()
+ self.UndeployGenObject(HTML, RAN, UE)
+ self.exitStatus = 1
def CaptureOnDockerNetworks(self):
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"'
networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
- cmd = 'sudo nohup tshark -f "not tcp and not arp and not port 53 and not host archive.ubuntu.com and not host security.ubuntu.com and not port 2152"'
+ if re.search('4g.*rfsimulator', self.yamlPath[0]) is not None:
+ cmd = 'sudo nohup tshark -f "(host 192.168.61.11 and icmp) or (not host 192.168.61.11 and not host 192.168.61.30 and not arp and not port 53 and not port 2152)"'
+ elif re.search('5g.*rfsimulator', self.yamlPath[0]) is not None:
+ cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not arp and not port 53 and not port 2152 and not port 2153)"'
+ else:
+ return
for name in networkNames.split('\n'):
- res = re.search('rfsim', name)
- if res is not None:
+ if re.search('rfsim', name) is not None:
cmd += ' -i ' + name
cmd += ' -w /tmp/capture_'
ymlPath = self.yamlPath[0].split('/')
cmd += ymlPath[1] + '.pcap > /tmp/tshark.log 2>&1 &'
logging.debug(cmd)
networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+ self.tsharkStarted = True
def UndeployGenObject(self, HTML, RAN, UE):
self.exitStatus = 0
@@ -745,7 +765,11 @@ class Containerize():
cName = res.group('container_name')
cmd = 'cd ' + self.yamlPath[0] + ' && docker logs ' + cName + ' > ' + cName + '.log 2>&1'
logging.debug(cmd)
- deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
+ subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
+ if re.search('magma-mme', cName) is not None:
+ cmd = 'cd ' + self.yamlPath[0] + ' && docker cp -L ' + cName + ':/var/log/mme.log ' + cName + '-full.log'
+ logging.debug(cmd)
+ subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
fullStatus = True
if anyLogs:
cmd = 'mkdir -p '+ logPath + ' && cp ' + self.yamlPath[0] + '/*.log ' + logPath
@@ -767,9 +791,10 @@ class Containerize():
continue
logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
- logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML)
+ logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
if (logStatus < 0):
fullStatus = False
+ self.exitStatus = 1
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
else:
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
diff --git a/ci-scripts/cls_log_mgt.py b/ci-scripts/cls_log_mgt.py
index cf7b91d3c0..905a105512 100644
--- a/ci-scripts/cls_log_mgt.py
+++ b/ci-scripts/cls_log_mgt.py
@@ -30,11 +30,15 @@
-
+import logging
import re
import subprocess
-import logging
-import math
+import sshconnection
+
+logging.basicConfig(
+ level=logging.DEBUG,
+ format="[%(asctime)s] %(name)s:%(levelname)s: %(message)s"
+)
class Log_Mgt:
@@ -49,40 +53,25 @@ class Log_Mgt:
#-----------------$
- def __CheckAvailSpace(self):
+ def __CheckUsedSpace(self):
HOST=self.Username+'@'+self.IPAddress
COMMAND="df "+ self.path
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
s=result[1].decode('utf-8').rstrip()#result[1] is the second line with the results we are looking for
- tmp=s.split()
- return tmp[3] #return avail space from the line
+ used=s.split()[4] #get 4th field ex: 70%
+ m = re.match('^(\d+)\%',used)
+ if m is not None:
+ return int(m.group(1))
- def __GetOldestFile(self):
- HOST=self.Username+'@'+self.IPAddress
- COMMAND="ls -rtl "+ self.path #-rtl will bring oldest file on top
- ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
- result = ssh.stdout.readlines()
- s=result[1].decode('utf-8').rstrip()
- tmp=s.split()
- return tmp[8]#return filename from the line
+ def __RemoveOldest(self):
+ mySSH = sshconnection.SSHConnection()
+ mySSH.open(self.IPAddress, self.Username, self.Password)
+ COMMAND='echo ' + self.Password + ' | sudo -S find ' + self.path + ' -type f -mtime +14 -delete'
+ mySSH.command(COMMAND,'\$',20)
+ mySSH.close()
- def __AvgSize(self):
- HOST=self.Username+'@'+self.IPAddress
- COMMAND="ls -rtl "+ self.path
- ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
- result = ssh.stdout.readlines()
- if len(result)>1: #at least 1 file present
- total_size=0
- for i in range(1,len(result)):
- s=result[i].decode('utf-8').rstrip()
- tmp=s.split()
- total_size+=int(tmp[4]) #get filesize
- return math.floor(total_size/(len(result)-1)) #compute average file/artifact size
- else:#empty,no files
- return 0
-
#-----------------$
#PUBLIC Methods$
@@ -90,17 +79,15 @@ class Log_Mgt:
def LogRotation(self):
- avail_space =int(self.__CheckAvailSpace())*1000 #avail space in target folder, initially displayed in Gb
- avg_size=self.__AvgSize() #average size of artifacts in the target folder
- logging.debug("Avail Space : " + str(avail_space) + " / Artifact Avg Size : " + str(avg_size))
- if avail_space < 50*avg_size: #reserved space is 50x artifact file ; oldest file will be deleted
- oldestfile=self.__GetOldestFile()
- HOST=self.Username+'@'+self.IPAddress
- COMMAND="echo " + self.Password + " | sudo -S rm "+ self.path + "/" + oldestfile
- logging.debug(COMMAND)
- ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
+ used_space = self.__CheckUsedSpace() #avail space in target folder
+ if used_space > 80 :
+ logging.debug('\u001B[1;37;41m Used Disk > 80%, on ' + self.Username+'@'+self.IPAddress + '\u001B[0m')
+ logging.debug('\u001B[1;37;41m Removing Artifacts older than 14 days \u001B[0m')
+ self.__RemoveOldest()
else:
- logging.debug("Still some space left for artifacts storage")
+ logging.debug('Used Disk < 80%, on ' + self.Username+'@'+self.IPAddress +', no cleaning required')
+
+
diff --git a/ci-scripts/cls_physim1.py b/ci-scripts/cls_physim1.py
index b7a730e91c..83fb74b7cb 100644
--- a/ci-scripts/cls_physim1.py
+++ b/ci-scripts/cls_physim1.py
@@ -246,7 +246,7 @@ class PhySim:
isFinished = False
# doing a deep copy!
tmpPodNames = podNames.copy()
- while(count < 32 and isFinished == False):
+ while(count < 50 and isFinished == False):
time.sleep(60)
for podName in tmpPodNames:
mySSH.command2(f'oc logs --tail=1 {podName} 2>&1', 6, silent=True)
diff --git a/ci-scripts/conf_files/benetel-4g.conf b/ci-scripts/conf_files/benetel-4g.conf
index 9423ebe56e..e2974a171d 100644
--- a/ci-scripts/conf_files/benetel-4g.conf
+++ b/ci-scripts/conf_files/benetel-4g.conf
@@ -269,17 +269,10 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/benetel-5g.conf b/ci-scripts/conf_files/benetel-5g.conf
index dc86567c1f..bfe61188b6 100644
--- a/ci-scripts/conf_files/benetel-5g.conf
+++ b/ci-scripts/conf_files/benetel-5g.conf
@@ -262,18 +262,11 @@ THREAD_STRUCT = (
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/cu.band7.tm1.100PRB.conf b/ci-scripts/conf_files/cu.band7.tm1.100PRB.conf
index e2c94b14ab..1102528cd3 100644
--- a/ci-scripts/conf_files/cu.band7.tm1.100PRB.conf
+++ b/ci-scripts/conf_files/cu.band7.tm1.100PRB.conf
@@ -201,15 +201,10 @@ eNBs = (
log_config = {
global_log_level = "info";
- global_log_verbosity = "medium";
pdcp_log_level = "info";
- pdcp_log_verbosity = "high";
rrc_log_level = "info";
- rrc_log_verbosity = "medium";
flexran_agent_log_level = "info";
- flexran_agent_log_verbosity = "medium";
gtp_log_level = "info";
- gtp_log_verbosity = "medium";
};
NETWORK_CONTROLLER : {
diff --git a/ci-scripts/conf_files/cu.band7.tm1.25PRB.conf b/ci-scripts/conf_files/cu.band7.tm1.25PRB.conf
index 5b994ed29b..ec7620a724 100644
--- a/ci-scripts/conf_files/cu.band7.tm1.25PRB.conf
+++ b/ci-scripts/conf_files/cu.band7.tm1.25PRB.conf
@@ -201,15 +201,10 @@ eNBs = (
log_config = {
global_log_level = "info";
- global_log_verbosity = "medium";
pdcp_log_level = "info";
- pdcp_log_verbosity = "high";
rrc_log_level = "info";
- rrc_log_verbosity = "medium";
flexran_agent_log_level = "info";
- flexran_agent_log_verbosity = "medium";
gtp_log_level = "info";
- gtp_log_verbosity = "medium";
};
NETWORK_CONTROLLER : {
diff --git a/ci-scripts/conf_files/cu.band7.tm1.50PRB.conf b/ci-scripts/conf_files/cu.band7.tm1.50PRB.conf
index 148c5a9903..7e64ad8039 100644
--- a/ci-scripts/conf_files/cu.band7.tm1.50PRB.conf
+++ b/ci-scripts/conf_files/cu.band7.tm1.50PRB.conf
@@ -201,15 +201,10 @@ eNBs = (
log_config = {
global_log_level = "info";
- global_log_verbosity = "medium";
pdcp_log_level = "info";
- pdcp_log_verbosity = "high";
rrc_log_level = "info";
- rrc_log_verbosity = "medium";
flexran_agent_log_level = "info";
- flexran_agent_log_verbosity = "medium";
gtp_log_level = "info";
- gtp_log_verbosity = "medium";
};
NETWORK_CONTROLLER : {
diff --git a/ci-scripts/conf_files/du.band7.tm1.100PRB.usrpb210.conf b/ci-scripts/conf_files/du.band7.tm1.100PRB.usrpb210.conf
index a3ecffb9be..217c694055 100644
--- a/ci-scripts/conf_files/du.band7.tm1.100PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/du.band7.tm1.100PRB.usrpb210.conf
@@ -96,17 +96,11 @@ RUs = (
log_config = {
global_log_level = "info";
- global_log_verbosity = "medium";
hw_log_level = "info";
- hw_log_verbosity = "medium";
phy_log_level = "info";
- phy_log_verbosity = "medium";
mac_log_level = "info";
- mac_log_verbosity = "high";
rlc_log_level = "info";
- rlc_log_verbosity = "medium";
flexran_agent_log_level = "info";
- flexran_agent_log_verbosity = "medium";
};
NETWORK_CONTROLLER : {
diff --git a/ci-scripts/conf_files/du.band7.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/du.band7.tm1.25PRB.usrpb210.conf
index 1920992d70..61d4cff51b 100644
--- a/ci-scripts/conf_files/du.band7.tm1.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/du.band7.tm1.25PRB.usrpb210.conf
@@ -96,17 +96,11 @@ RUs = (
log_config = {
global_log_level = "info";
- global_log_verbosity = "medium";
hw_log_level = "info";
- hw_log_verbosity = "medium";
phy_log_level = "info";
- phy_log_verbosity = "medium";
mac_log_level = "info";
- mac_log_verbosity = "high";
rlc_log_level = "info";
- rlc_log_verbosity = "medium";
flexran_agent_log_level = "info";
- flexran_agent_log_verbosity = "medium";
};
NETWORK_CONTROLLER : {
diff --git a/ci-scripts/conf_files/du.band7.tm1.50PRB.usrpb210.conf b/ci-scripts/conf_files/du.band7.tm1.50PRB.usrpb210.conf
index 5df8da05a3..4342e8f4b4 100644
--- a/ci-scripts/conf_files/du.band7.tm1.50PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/du.band7.tm1.50PRB.usrpb210.conf
@@ -96,17 +96,11 @@ RUs = (
log_config = {
global_log_level = "info";
- global_log_verbosity = "medium";
hw_log_level = "info";
- hw_log_verbosity = "medium";
phy_log_level = "info";
- phy_log_verbosity = "medium";
mac_log_level = "info";
- mac_log_verbosity = "high";
rlc_log_level = "info";
- rlc_log_verbosity = "medium";
flexran_agent_log_level = "info";
- flexran_agent_log_verbosity = "medium";
};
NETWORK_CONTROLLER : {
diff --git a/ci-scripts/conf_files/enb.band13.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band13.tm1.25PRB.usrpb210.conf
index e70ca78205..122654df26 100644
--- a/ci-scripts/conf_files/enb.band13.tm1.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band13.tm1.25PRB.usrpb210.conf
@@ -257,18 +257,11 @@ THREAD_STRUCT = (
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band13.tm1.50PRB.emtc.conf b/ci-scripts/conf_files/enb.band13.tm1.50PRB.emtc.conf
index 400d1a6c9d..ae572f9e05 100644
--- a/ci-scripts/conf_files/enb.band13.tm1.50PRB.emtc.conf
+++ b/ci-scripts/conf_files/enb.band13.tm1.50PRB.emtc.conf
@@ -385,19 +385,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
@@ -457,17 +450,10 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band17.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band17.tm1.25PRB.usrpb210.conf
index bd2999b5d5..5a4be9f187 100644
--- a/ci-scripts/conf_files/enb.band17.tm1.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band17.tm1.25PRB.usrpb210.conf
@@ -260,18 +260,11 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band17.tm1.mbms.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band17.tm1.mbms.25PRB.usrpb210.conf
index 19ef6d0797..7ac056b75e 100644
--- a/ci-scripts/conf_files/enb.band17.tm1.mbms.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band17.tm1.mbms.25PRB.usrpb210.conf
@@ -404,18 +404,11 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band38.lte_2x2.100PRB.usrpn310.conf b/ci-scripts/conf_files/enb.band38.lte_2x2.100PRB.usrpn310.conf
index d2e91fb872..24c35dedbf 100644
--- a/ci-scripts/conf_files/enb.band38.lte_2x2.100PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/enb.band38.lte_2x2.100PRB.usrpn310.conf
@@ -264,18 +264,11 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf b/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf
index f116c3708d..4a16a64105 100644
--- a/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf
@@ -264,18 +264,11 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf b/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf
index 6c8d5ba6f0..bccd37abe9 100644
--- a/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf
@@ -264,18 +264,11 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
index f34878c569..0633d233ef 100644
--- a/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
@@ -165,19 +165,12 @@ eNBs =
log_config :
{
global_log_level ="debug";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
diff --git a/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
index e2e482a7c7..4de8a3f759 100644
--- a/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
@@ -165,19 +165,12 @@ eNBs =
log_config :
{
global_log_level ="debug";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
diff --git a/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
index bfea139e92..df902faf8b 100644
--- a/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
@@ -165,19 +165,12 @@ eNBs =
log_config :
{
global_log_level ="debug";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
diff --git a/ci-scripts/conf_files/enb.band40.tm2.25PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm2.25PRB.FairScheduler.usrpb210.conf
index 4e0025770b..0da4b1181a 100644
--- a/ci-scripts/conf_files/enb.band40.tm2.25PRB.FairScheduler.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band40.tm2.25PRB.FairScheduler.usrpb210.conf
@@ -163,19 +163,12 @@ eNBs =
log_config :
{
global_log_level ="debug";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
diff --git a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
index 1627d21e1a..bd7e19ca60 100644
--- a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
@@ -256,18 +256,11 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.slave.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.slave.usrpb210.conf
index efa1fa64b8..fdd2304ba5 100644
--- a/ci-scripts/conf_files/enb.band7.tm1.25PRB.slave.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.slave.usrpb210.conf
@@ -265,18 +265,11 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
index 6fc8401236..5b05627700 100644
--- a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
@@ -263,18 +263,11 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
index 087ee37f01..44d22a8953 100644
--- a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
@@ -263,19 +263,12 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
@include "channelmod_rfsimu.conf"
diff --git a/ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf
index 64bcb4b35f..38cd90cd44 100644
--- a/ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf
@@ -264,18 +264,11 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="high";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="high";
pdcp_log_level ="info";
- pdcp_log_verbosity ="high";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.band7.tm2.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm2.25PRB.usrpb210.conf
index 72754165d0..c8223d0c42 100644
--- a/ci-scripts/conf_files/enb.band7.tm2.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm2.25PRB.usrpb210.conf
@@ -258,17 +258,10 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/enb.slave.band13.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.slave.band13.tm1.25PRB.usrpb210.conf
index da65aad775..609d76d720 100644
--- a/ci-scripts/conf_files/enb.slave.band13.tm1.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.slave.band13.tm1.25PRB.usrpb210.conf
@@ -262,18 +262,11 @@ THREAD_STRUCT = (
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
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 682fb376cf..a98179197f 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
@@ -306,20 +306,12 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
ngap_log_level ="debug";
- ngap_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/episci/episci_nr-ue.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue.nfapi.conf
index f5563ecc02..22ffb4cd3d 100644
--- a/ci-scripts/conf_files/episci/episci_nr-ue.nfapi.conf
+++ b/ci-scripts/conf_files/episci/episci_nr-ue.nfapi.conf
@@ -1,18 +1,11 @@
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="medium";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="full";
};
uicc0 = {
diff --git a/ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf
index f5563ecc02..22ffb4cd3d 100644
--- a/ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf
+++ b/ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf
@@ -1,18 +1,11 @@
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="medium";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="full";
};
uicc0 = {
diff --git a/ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf
index 5df3ccf6cc..3d1c008f23 100644
--- a/ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf
+++ b/ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf
@@ -1,18 +1,11 @@
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="medium";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="full";
};
uicc0 = {
diff --git a/ci-scripts/conf_files/episci/episci_nr-ue2.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue2.nfapi.conf
index b1ce5fee8d..73c3292809 100644
--- a/ci-scripts/conf_files/episci/episci_nr-ue2.nfapi.conf
+++ b/ci-scripts/conf_files/episci/episci_nr-ue2.nfapi.conf
@@ -1,18 +1,11 @@
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="medium";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="full";
};
uicc0 = {
diff --git a/ci-scripts/conf_files/episci/episci_nr-ue3.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue3.nfapi.conf
index aea5104f1c..1f8f7306c6 100644
--- a/ci-scripts/conf_files/episci/episci_nr-ue3.nfapi.conf
+++ b/ci-scripts/conf_files/episci/episci_nr-ue3.nfapi.conf
@@ -1,18 +1,11 @@
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="medium";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="full";
};
uicc0 = {
diff --git a/ci-scripts/conf_files/episci/episci_rcc.band7.tm1.nfapi.conf b/ci-scripts/conf_files/episci/episci_rcc.band7.tm1.nfapi.conf
index 4e596f81b5..81951e5219 100644
--- a/ci-scripts/conf_files/episci/episci_rcc.band7.tm1.nfapi.conf
+++ b/ci-scripts/conf_files/episci/episci_rcc.band7.tm1.nfapi.conf
@@ -231,17 +231,10 @@ THREAD_STRUCT = (
log_config =
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf b/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf
index b64b88ddea..9b3f205a0f 100644
--- a/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf
+++ b/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf
@@ -248,18 +248,11 @@ THREAD_STRUCT = (
log_config =
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/episci/episci_ue.nfapi.conf b/ci-scripts/conf_files/episci/episci_ue.nfapi.conf
index 0170a46655..8f7c8ee68a 100644
--- a/ci-scripts/conf_files/episci/episci_ue.nfapi.conf
+++ b/ci-scripts/conf_files/episci/episci_ue.nfapi.conf
@@ -1,18 +1,11 @@
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="medium";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="full";
};
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 c0d4c6d4c9..0597e96245 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
@@ -307,20 +307,12 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
ngap_log_level ="debug";
- ngap_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/episci/proxy_nr-ue.nfapi.conf b/ci-scripts/conf_files/episci/proxy_nr-ue.nfapi.conf
index 8411ed8fc6..b6c0e9b5a1 100644
--- a/ci-scripts/conf_files/episci/proxy_nr-ue.nfapi.conf
+++ b/ci-scripts/conf_files/episci/proxy_nr-ue.nfapi.conf
@@ -1,18 +1,11 @@
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="medium";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="full";
};
uicc0 = {
diff --git a/ci-scripts/conf_files/episci/proxy_rcc.band7.tm1.nfapi.conf b/ci-scripts/conf_files/episci/proxy_rcc.band7.tm1.nfapi.conf
index d4c72d6c14..50ece56b23 100644
--- a/ci-scripts/conf_files/episci/proxy_rcc.band7.tm1.nfapi.conf
+++ b/ci-scripts/conf_files/episci/proxy_rcc.band7.tm1.nfapi.conf
@@ -231,17 +231,10 @@ THREAD_STRUCT = (
log_config =
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf b/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf
index 0ef317d63e..3410104199 100644
--- a/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf
+++ b/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf
@@ -288,18 +288,11 @@ THREAD_STRUCT = (
log_config =
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/episci/proxy_ue.nfapi.conf b/ci-scripts/conf_files/episci/proxy_ue.nfapi.conf
index 3f227d573c..51c30fb42d 100644
--- a/ci-scripts/conf_files/episci/proxy_ue.nfapi.conf
+++ b/ci-scripts/conf_files/episci/proxy_ue.nfapi.conf
@@ -1,18 +1,11 @@
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="medium";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="full";
};
diff --git a/ci-scripts/conf_files/gNB_SA_CU.conf b/ci-scripts/conf_files/gNB_SA_CU.conf
index d3cfbfc973..1e84e479bc 100644
--- a/ci-scripts/conf_files/gNB_SA_CU.conf
+++ b/ci-scripts/conf_files/gNB_SA_CU.conf
@@ -254,22 +254,13 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="debug";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
f1ap_log_level ="debug";
- f1ap_log_verbosity ="medium";
ngap_log_level ="debug";
- ngap_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/gNB_SA_DU.conf b/ci-scripts/conf_files/gNB_SA_DU.conf
index 64f2dd5d0e..95fa75bc1d 100644
--- a/ci-scripts/conf_files/gNB_SA_DU.conf
+++ b/ci-scripts/conf_files/gNB_SA_DU.conf
@@ -273,22 +273,13 @@ serveraddr = "server";
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
f1ap_log_level ="debug";
- f1ap_log_verbosity ="medium";
ngap_log_level ="debug";
- ngap_log_verbosity ="medium";
};
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 e3bdde8469..082cc826f3 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
@@ -291,19 +291,11 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
f1ap_log_level ="debug";
- f1ap_log_verbosity ="medium";
};
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 3955b1542e..6af8a23407 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
@@ -287,19 +287,11 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
f1ap_log_level ="debug";
- f1ap_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
index dd9c210c0d..e8c6cab1b4 100644
--- a/ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
+++ b/ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
@@ -266,18 +266,11 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/gnb.band66.tm1.106PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.band66.tm1.106PRB.usrpn300.conf
index 13838a178a..7d3409d4d4 100644
--- a/ci-scripts/conf_files/gnb.band66.tm1.106PRB.usrpn300.conf
+++ b/ci-scripts/conf_files/gnb.band66.tm1.106PRB.usrpn300.conf
@@ -245,18 +245,11 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
index adb79ceb8d..e798e40d64 100644
--- a/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
@@ -266,18 +266,11 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
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 72ead42784..b92c7df92d 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
@@ -294,19 +294,11 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
f1ap_log_level ="debug";
- f1ap_log_verbosity ="medium";
};
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 32a40fe951..6c778a7c31 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
@@ -298,19 +298,11 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
f1ap_log_level ="debug";
- f1ap_log_verbosity ="medium";
};
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 3579d1e3c2..5c826ca862 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
@@ -293,19 +293,11 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
f1ap_log_level ="debug";
- f1ap_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
index 9cc8f554e8..d21cf90cd9 100644
--- a/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
+++ b/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
@@ -255,18 +255,11 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
index 249b7e4527..55cb7b36c4 100644
--- a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
@@ -263,19 +263,12 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
uicc: {
diff --git a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
index f232106d56..7c4bb9cc59 100644
--- a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
@@ -265,19 +265,12 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
uicc: {
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 21bdb4e9d2..7f5a9d4343 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
@@ -280,20 +280,12 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
ngap_log_level ="debug";
- ngap_log_verbosity ="medium";
};
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
new file mode 100644
index 0000000000..bd3076a014
--- /dev/null
+++ b/ci-scripts/conf_files/gnb.sa.band78.fr1.24PRB.usrpb210.conf
@@ -0,0 +1,301 @@
+Active_gNBs = ( "gNB-OAI");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+gNBs =
+(
+ {
+ ////////// Identification parameters:
+ gNB_ID = 0xe00;
+ gNB_name = "gNB-OAI";
+
+ // 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:
+
+ ssb_SubcarrierOffset = 0;
+ pdsch_AntennaPorts = 1;
+ pusch_AntennaPorts = 1;
+ sib1_tda = 15;
+ min_rxtxtime = 6;
+
+ pdcch_ConfigSIB1 = (
+ {
+ controlResourceSetZero = 2;
+ searchSpaceZero = 0;
+ }
+ );
+
+ servingCellConfigCommon = (
+ {
+ #spCellConfigCommon
+
+ physCellId = 0;
+
+# downlinkConfigCommon
+ #frequencyInfoDL
+ # this is 3600 MHz + 12 PRBs@30kHz SCS (same as initial BWP)
+ absoluteFrequencySSB = 640288;
+ dl_frequencyBand = 78;
+ # this is 3600 MHz
+ dl_absoluteFrequencyPointA = 640000;
+ #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=27,L=48 (275*(L-1))+RBstart
+ initialDLBWPlocationAndBandwidth = 6325;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+ initialDLBWPsubcarrierSpacing = 1;
+ #pdcch-ConfigCommon
+ initialDLBWPcontrolResourceSetZero = 2;
+ initialDLBWPsearchSpaceZero = 0;
+
+ #uplinkConfigCommon
+ #frequencyInfoUL
+ ul_frequencyBand = 78;
+ #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 = -96;
+#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 = 14;
+#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.70.132";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+
+ NETWORK_INTERFACES :
+ {
+ GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
+ GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
+ GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
+ GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
+ 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 = 1;
+}
+);
+
+L1s = (
+{
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ pusch_proc_threads = 8;
+ 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 = [78];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 114;
+ sf_extension = 0;
+ eNB_instances = [0];
+ #beamforming 1x4 matrix:
+ bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
+ clock_src = "internal";
+}
+);
+
+THREAD_STRUCT = (
+{
+ #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+ parallel_config = "PARALLEL_SINGLE_THREAD";
+ #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+ worker_config = "WORKER_ENABLE";
+}
+);
+
+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";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ ngap_log_level ="debug";
+ ngap_log_verbosity ="medium";
+};
+
diff --git a/ci-scripts/conf_files/lte-fdd-basic-sim.conf b/ci-scripts/conf_files/lte-fdd-basic-sim.conf
index a4d8e007dc..6c81d512a6 100644
--- a/ci-scripts/conf_files/lte-fdd-basic-sim.conf
+++ b/ci-scripts/conf_files/lte-fdd-basic-sim.conf
@@ -257,17 +257,10 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/lte-fdd-fembms-basic-sim.conf b/ci-scripts/conf_files/lte-fdd-fembms-basic-sim.conf
index 458ab7cf89..c2f6ab9d6c 100644
--- a/ci-scripts/conf_files/lte-fdd-fembms-basic-sim.conf
+++ b/ci-scripts/conf_files/lte-fdd-fembms-basic-sim.conf
@@ -406,19 +406,12 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
//rfsimulator :
diff --git a/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf b/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf
index e80ff2b9cb..9c74d2e328 100644
--- a/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf
+++ b/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf
@@ -406,19 +406,12 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
//rfsimulator :
diff --git a/ci-scripts/conf_files/lte-tdd-basic-sim.conf b/ci-scripts/conf_files/lte-tdd-basic-sim.conf
index f443a907f2..ddfdddda83 100644
--- a/ci-scripts/conf_files/lte-tdd-basic-sim.conf
+++ b/ci-scripts/conf_files/lte-tdd-basic-sim.conf
@@ -165,19 +165,12 @@ eNBs =
log_config :
{
global_log_level ="debug";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
diff --git a/ci-scripts/conf_files/nr-ue.nfapi.conf b/ci-scripts/conf_files/nr-ue.nfapi.conf
index b12e0c8d05..90798702cf 100644
--- a/ci-scripts/conf_files/nr-ue.nfapi.conf
+++ b/ci-scripts/conf_files/nr-ue.nfapi.conf
@@ -1,18 +1,11 @@
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="medium";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="full";
};
diff --git a/ci-scripts/conf_files/rcc.band38.tm1.50PRB.multi.rru.conf b/ci-scripts/conf_files/rcc.band38.tm1.50PRB.multi.rru.conf
index 502e3c548a..6651f380e4 100644
--- a/ci-scripts/conf_files/rcc.band38.tm1.50PRB.multi.rru.conf
+++ b/ci-scripts/conf_files/rcc.band38.tm1.50PRB.multi.rru.conf
@@ -227,17 +227,10 @@ THREAD_STRUCT = (
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/rcc.band40.tm1.100PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/rcc.band40.tm1.100PRB.FairScheduler.usrpb210.conf
index d01e4e1c4e..47bcc35cb3 100644
--- a/ci-scripts/conf_files/rcc.band40.tm1.100PRB.FairScheduler.usrpb210.conf
+++ b/ci-scripts/conf_files/rcc.band40.tm1.100PRB.FairScheduler.usrpb210.conf
@@ -168,19 +168,12 @@ eNBs =
log_config :
{
global_log_level ="debug";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
diff --git a/ci-scripts/conf_files/rcc.band40.tm1.25PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/rcc.band40.tm1.25PRB.FairScheduler.usrpb210.conf
index 7f6bff304d..660478ca11 100644
--- a/ci-scripts/conf_files/rcc.band40.tm1.25PRB.FairScheduler.usrpb210.conf
+++ b/ci-scripts/conf_files/rcc.band40.tm1.25PRB.FairScheduler.usrpb210.conf
@@ -168,19 +168,12 @@ eNBs =
log_config :
{
global_log_level ="debug";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
diff --git a/ci-scripts/conf_files/rcc.band40.tm1.50PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/rcc.band40.tm1.50PRB.FairScheduler.usrpb210.conf
index d4f2eb9ef2..6997c80234 100644
--- a/ci-scripts/conf_files/rcc.band40.tm1.50PRB.FairScheduler.usrpb210.conf
+++ b/ci-scripts/conf_files/rcc.band40.tm1.50PRB.FairScheduler.usrpb210.conf
@@ -168,19 +168,12 @@ eNBs =
log_config :
{
global_log_level ="debug";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
diff --git a/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.100PRB.usrpb210.conf b/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.100PRB.usrpb210.conf
index 683fff0bc8..798871edce 100644
--- a/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.100PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.100PRB.usrpb210.conf
@@ -263,17 +263,10 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.25PRB.usrpb210.conf b/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.25PRB.usrpb210.conf
index 574c8b2545..628188aea2 100644
--- a/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.25PRB.usrpb210.conf
@@ -263,17 +263,10 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.50PRB.usrpb210.conf b/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.50PRB.usrpb210.conf
index 49365a1f61..75d947c009 100644
--- a/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.50PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/rcc.band7.tm1.if4p5.lo.50PRB.usrpb210.conf
@@ -263,17 +263,10 @@ NETWORK_CONTROLLER :
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/rcc.band7.tm1.mbms-s1ap.if4p5.50PRB.lo.conf b/ci-scripts/conf_files/rcc.band7.tm1.mbms-s1ap.if4p5.50PRB.lo.conf
index 640b85930a..1bcd26b931 100644
--- a/ci-scripts/conf_files/rcc.band7.tm1.mbms-s1ap.if4p5.50PRB.lo.conf
+++ b/ci-scripts/conf_files/rcc.band7.tm1.mbms-s1ap.if4p5.50PRB.lo.conf
@@ -365,17 +365,10 @@ THREAD_STRUCT = (
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/rcc.band7.tm1.mbms.if4p5.50PRB.lo.conf b/ci-scripts/conf_files/rcc.band7.tm1.mbms.if4p5.50PRB.lo.conf
index 7fe682f29e..e398310a35 100644
--- a/ci-scripts/conf_files/rcc.band7.tm1.mbms.if4p5.50PRB.lo.conf
+++ b/ci-scripts/conf_files/rcc.band7.tm1.mbms.if4p5.50PRB.lo.conf
@@ -365,17 +365,10 @@ THREAD_STRUCT = (
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf b/ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf
index 281f7433af..6f7a5d2dfd 100644
--- a/ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf
+++ b/ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf
@@ -230,17 +230,10 @@ THREAD_STRUCT = (
log_config =
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/rru.band38.tm1.master.conf b/ci-scripts/conf_files/rru.band38.tm1.master.conf
index 101ce83892..e6bd0b75aa 100644
--- a/ci-scripts/conf_files/rru.band38.tm1.master.conf
+++ b/ci-scripts/conf_files/rru.band38.tm1.master.conf
@@ -30,18 +30,11 @@ THREAD_STRUCT = (
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/rru.band38.tm1.slave.conf b/ci-scripts/conf_files/rru.band38.tm1.slave.conf
index d5efe6bd61..2bc79028b4 100644
--- a/ci-scripts/conf_files/rru.band38.tm1.slave.conf
+++ b/ci-scripts/conf_files/rru.band38.tm1.slave.conf
@@ -30,18 +30,11 @@ THREAD_STRUCT = (
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/rru.fdd.band7.conf b/ci-scripts/conf_files/rru.fdd.band7.conf
index 057f518046..a3b297049d 100644
--- a/ci-scripts/conf_files/rru.fdd.band7.conf
+++ b/ci-scripts/conf_files/rru.fdd.band7.conf
@@ -31,17 +31,10 @@ THREAD_STRUCT =
log_config =
{
global_log_level ="error";
- global_log_verbosity ="medium";
hw_log_level ="error";
- hw_log_verbosity ="medium";
phy_log_level ="error";
- phy_log_verbosity ="medium";
mac_log_level ="error";
- mac_log_verbosity ="high";
rlc_log_level ="error";
- rlc_log_verbosity ="medium";
pdcp_log_level ="error";
- pdcp_log_verbosity ="medium";
rrc_log_level ="error";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/rru.tdd.band40.conf b/ci-scripts/conf_files/rru.tdd.band40.conf
index 5ce3a515f5..40af241cca 100644
--- a/ci-scripts/conf_files/rru.tdd.band40.conf
+++ b/ci-scripts/conf_files/rru.tdd.band40.conf
@@ -31,17 +31,10 @@ THREAD_STRUCT =
log_config =
{
global_log_level ="error";
- global_log_verbosity ="medium";
hw_log_level ="error";
- hw_log_verbosity ="medium";
phy_log_level ="error";
- phy_log_verbosity ="medium";
mac_log_level ="error";
- mac_log_verbosity ="high";
rlc_log_level ="error";
- rlc_log_verbosity ="medium";
pdcp_log_level ="error";
- pdcp_log_verbosity ="medium";
rrc_log_level ="error";
- rrc_log_verbosity ="medium";
};
diff --git a/ci-scripts/conf_files/ue.nfapi.conf b/ci-scripts/conf_files/ue.nfapi.conf
index 2b602cbcf2..09ad7529b1 100644
--- a/ci-scripts/conf_files/ue.nfapi.conf
+++ b/ci-scripts/conf_files/ue.nfapi.conf
@@ -1,18 +1,11 @@
log_config = {
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="medium";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="full";
};
diff --git a/ci-scripts/constants.py b/ci-scripts/constants.py
index 3c05675928..4f82811ac1 100644
--- a/ci-scripts/constants.py
+++ b/ci-scripts/constants.py
@@ -45,6 +45,7 @@ ENB_PROCESS_REALTIME_ISSUE = -13
ENB_PROCESS_NOLOGFILE_TO_ANALYZE = -14
ENB_PROCESS_SLAVE_RRU_NOT_SYNCED = -15
ENB_REAL_TIME_PROCESSING_ISSUE = -16
+ENB_RETX_ISSUE = -17
HSS_PROCESS_FAILED = -2
HSS_PROCESS_OK = +2
MME_PROCESS_FAILED = -3
diff --git a/ci-scripts/cppcheck_suppressions.list b/ci-scripts/cppcheck_suppressions.list
index f8438a4276..ff4cac20b3 100644
--- a/ci-scripts/cppcheck_suppressions.list
+++ b/ci-scripts/cppcheck_suppressions.list
@@ -50,10 +50,6 @@ memleak:openair1/PHY/CODING/TESTBENCH/ltetest.c
invalidPrintfArgType_sint:openair1/PHY/CODING/TESTBENCH/pdcch_test.c
//
//-----------------------------------------------------------------------------
-// oaisim deprecated, remove?
-doubleFree:openair3/TEST/oaisim_mme_list_benchmark.c
-//
-//-----------------------------------------------------------------------------
// is itti analyzer deprecated
nullPointer:common/utils/itti_analyzer/itti_analyzer.c
nullPointerRedundantCheck:common/utils/itti_analyzer/libbuffers/buffers.c
diff --git a/ci-scripts/datalog_rt_stats.2x2.yaml b/ci-scripts/datalog_rt_stats.2x2.yaml
index 9e2b66862d..a93ef6aa8c 100644
--- a/ci-scripts/datalog_rt_stats.2x2.yaml
+++ b/ci-scripts/datalog_rt_stats.2x2.yaml
@@ -4,16 +4,14 @@
Title : Processing Time (us)
ColNames :
- Metric
- - Average
- - Max
- - Average vs Reference Deviation (Reference Value ; Acceptability Threshold)
+ - Average; Max; Count
+ - Average vs Reference Deviation (Reference Value; Acceptability Threshold)
Ref :
feprx : 120.0
feptx_prec : 8.0
feptx_ofdm : 50.0
feptx_total : 75.0
- L1 Tx processing thread 0 : 300.0
- L1 Tx processing thread 1 : 300.0
+ L1 Tx processing : 300.0
DLSCH encoding : 230.0
L1 Rx processing : 175.0
PUSCH inner-receiver : 100.0
@@ -25,8 +23,7 @@ Threshold :
feptx_prec : 1.25
feptx_ofdm : 1.25
feptx_total : 1.25
- L1 Tx processing thread 0 : 1.25
- L1 Tx processing thread 1 : 1.25
+ L1 Tx processing : 1.25
DLSCH encoding : 1.25
L1 Rx processing : 1.25
PUSCH inner-receiver : 1.25
diff --git a/ci-scripts/datalog_rt_stats.default.yaml b/ci-scripts/datalog_rt_stats.default.yaml
index a2d4768752..02a90c86f4 100644
--- a/ci-scripts/datalog_rt_stats.default.yaml
+++ b/ci-scripts/datalog_rt_stats.default.yaml
@@ -4,16 +4,14 @@
Title : Processing Time (us)
ColNames :
- Metric
- - Average
- - Max
- - Average vs Reference Deviation (Reference Value ; Acceptability Threshold)
+ - Average; Max; Count
+ - Average vs Reference Deviation (Reference Value; Acceptability Threshold)
Ref :
feprx : 60.0
feptx_prec : 8.0
feptx_ofdm : 50.0
feptx_total : 75.0
- L1 Tx processing thread 0 : 300.0
- L1 Tx processing thread 1 : 300.0
+ L1 Tx processing : 300.0
DLSCH encoding : 230.0
L1 Rx processing : 175.0
PUSCH inner-receiver : 100.0
@@ -25,8 +23,7 @@ Threshold :
feptx_prec : 1.25
feptx_ofdm : 1.25
feptx_total : 1.25
- L1 Tx processing thread 0 : 1.25
- L1 Tx processing thread 1 : 1.25
+ L1 Tx processing : 1.25
DLSCH encoding : 1.25
L1 Rx processing : 1.25
PUSCH inner-receiver : 1.25
diff --git a/ci-scripts/html.py b/ci-scripts/html.py
index b172ffb711..13a1ab8691 100644
--- a/ci-scripts/html.py
+++ b/ci-scripts/html.py
@@ -478,21 +478,19 @@ class HTMLManagement():
self.htmlFile.write(' \n')
self.htmlFile.write('
\n')
self.htmlFile.write(' | '+ DataLog['ColNames'][0] +' | \n')
- self.htmlFile.write(' ' + DataLog['ColNames'][1] + ' | \n')
- self.htmlFile.write(' ' + DataLog['ColNames'][2] + ' | \n')
- self.htmlFile.write(' '+ DataLog['ColNames'][3] +' | \n')
+ self.htmlFile.write(' ' + DataLog['ColNames'][1] + ' | \n')
+ self.htmlFile.write(' '+ DataLog['ColNames'][2] +' | \n')
self.htmlFile.write('
\n')
for k in DataLog['Data']:
# TestRow
self.htmlFile.write(' \n')
self.htmlFile.write(' | ' + k + ' | \n')
- self.htmlFile.write(' ' + DataLog['Data'][k][0] + ' | \n')
- self.htmlFile.write(' ' + DataLog['Data'][k][1] + ' | \n')
- if float(DataLog['Data'][k][2])> DataLog['Threshold'][k]:
- self.htmlFile.write(' ' + DataLog['Data'][k][2] + ' (Ref = ' + str(DataLog['Ref'][k]) + ' ; Thres = ' +str(DataLog['Threshold'][k])+') ' + ' | \n')
+ self.htmlFile.write(' ' + DataLog['Data'][k][0] + '; ' + DataLog['Data'][k][1] + '; ' + DataLog['Data'][k][2] + ' | \n')
+ if float(DataLog['Data'][k][3])> DataLog['Threshold'][k]:
+ self.htmlFile.write(' ' + DataLog['Data'][k][3] + ' (Ref = ' + str(DataLog['Ref'][k]) + ' ; Thres = ' +str(DataLog['Threshold'][k])+') ' + ' | \n')
else:
- self.htmlFile.write(' ' + DataLog['Data'][k][2] + ' (Ref = ' + str(DataLog['Ref'][k]) + ' ; Thres = ' +str(DataLog['Threshold'][k])+') ' + ' | \n')
+ self.htmlFile.write(' ' + DataLog['Data'][k][3] + ' (Ref = ' + str(DataLog['Ref'][k]) + ' ; Thres = ' +str(DataLog['Threshold'][k])+') ' + ' | \n')
self.htmlFile.write('
\n')
self.htmlFile.close()
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 43772fb655..aa7d512b3d 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -401,6 +401,12 @@ def GetParametersFromXML(action):
string_field=test.findtext('nb_healthy')
if (string_field is not None):
CONTAINERS.nb_healthy[0] = int(string_field)
+ string_field=test.findtext('d_retx_th')
+ if (string_field is not None):
+ CONTAINERS.ran_checkers['d_retx_th']= string_field
+ string_field=test.findtext('u_retx_th')
+ if (string_field is not None):
+ CONTAINERS.ran_checkers['u_retx_th']= string_field
elif action == 'PingFromContainer':
string_field = test.findtext('container_name')
@@ -910,7 +916,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
elif action == 'Deploy_Run_PhySim':
PHYSIM.Deploy_PhySim(HTML, RAN)
elif action == 'DeployGenObject':
- CONTAINERS.DeployGenObject(HTML)
+ CONTAINERS.DeployGenObject(HTML, RAN, CiTestObj)
if CONTAINERS.exitStatus==1:
RAN.prematureExit = True
elif action == 'UndeployGenObject':
diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py
index ad360d2179..e5d0f10ee4 100644
--- a/ci-scripts/ran.py
+++ b/ci-scripts/ran.py
@@ -39,6 +39,7 @@ import time
from multiprocessing import Process, Lock, SimpleQueue
import yaml
+
#-----------------------------------------------------------
# OAI Testing modules
#-----------------------------------------------------------
@@ -758,7 +759,7 @@ class RANManagement():
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log.png log/*/*.log log/*/*.pcap', '\$', 15)
mySSH.close()
- def AnalyzeLogFile_eNB(self, eNBlogFile, HTML):
+ def AnalyzeLogFile_eNB(self, eNBlogFile, HTML, checkers={}):
if (not os.path.isfile('./' + eNBlogFile)):
return -1
enb_log_file = open('./' + eNBlogFile, 'r')
@@ -815,10 +816,12 @@ class RANManagement():
removing_ue = 0
#count"X2AP-PDU"
x2ap_pdu = 0
- #NSA specific log markers
- nsa_markers ={'SgNBReleaseRequestAcknowledge': [],'FAILURE': [], 'scgFailureInformationNR-r15': [], 'SgNBReleaseRequest': []}
+ #gnb specific log markers
+ gnb_markers ={'SgNBReleaseRequestAcknowledge': [],'FAILURE': [], 'scgFailureInformationNR-r15': [], 'SgNBReleaseRequest': [], 'Detected UL Failure on PUSCH':[]}
nodeB_prefix_found = False
RealTimeProcessingIssue = False
+ DLRetxIssue = False
+ ULRetxIssue = False
line_cnt=0 #log file line counter
for line in enb_log_file.readlines():
@@ -1008,11 +1011,11 @@ class RANManagement():
result = re.search('X2AP-PDU', str(line))
if result is not None:
x2ap_pdu += 1
- #nsa markers logging
- for k in nsa_markers:
+ #gnb markers logging
+ for k in gnb_markers:
result = re.search(k, line)
if result is not None:
- nsa_markers[k].append(line_cnt)
+ gnb_markers[k].append(line_cnt)
enb_log_file.close()
@@ -1096,46 +1099,94 @@ class RANManagement():
htmlMsg = statMsg+'\n'
logging.debug(statMsg)
htmleNBFailureMsg += htmlMsg
- #nsa markers
+ #gnb markers
statMsg = 'logfile line count = ' + str(line_cnt)
htmlMsg = statMsg+'\n'
logging.debug(statMsg)
htmleNBFailureMsg += htmlMsg
- if len(nsa_markers['SgNBReleaseRequestAcknowledge'])!=0:
- statMsg = 'SgNBReleaseRequestAcknowledge = ' + str(len(nsa_markers['SgNBReleaseRequestAcknowledge'])) + ' occurences , starting line ' + str(nsa_markers['SgNBReleaseRequestAcknowledge'][0])
+ if len(gnb_markers['SgNBReleaseRequestAcknowledge'])!=0:
+ statMsg = 'SgNBReleaseRequestAcknowledge = ' + str(len(gnb_markers['SgNBReleaseRequestAcknowledge'])) + ' occurences , starting line ' + str(gnb_markers['SgNBReleaseRequestAcknowledge'][0])
else:
- statMsg = 'SgNBReleaseRequestAcknowledge = ' + str(len(nsa_markers['SgNBReleaseRequestAcknowledge'])) + ' occurences'
+ statMsg = 'SgNBReleaseRequestAcknowledge = ' + str(len(gnb_markers['SgNBReleaseRequestAcknowledge'])) + ' occurences'
htmlMsg = statMsg+'\n'
logging.debug(statMsg)
htmleNBFailureMsg += htmlMsg
- statMsg = 'FAILURE = ' + str(len(nsa_markers['FAILURE'])) + ' occurences'
+ statMsg = 'FAILURE = ' + str(len(gnb_markers['FAILURE'])) + ' occurences'
+ htmlMsg = statMsg+'\n'
+ logging.debug(statMsg)
+ htmleNBFailureMsg += htmlMsg
+ statMsg = 'Detected UL Failure on PUSCH = ' + str(len(gnb_markers['Detected UL Failure on PUSCH'])) + ' occurences'
htmlMsg = statMsg+'\n'
logging.debug(statMsg)
htmleNBFailureMsg += htmlMsg
- #ulsch and dlsch statistics
+ #ulsch and dlsch statistics and checkers
+ #print statistics into html
if len(dlsch_ulsch_stats)!=0: #check if dictionary is not empty
+ #for each dictionary key, generate the msg for html as information
statMsg=''
- for key in dlsch_ulsch_stats: #for each dictionary key
+ for key in dlsch_ulsch_stats:
statMsg += dlsch_ulsch_stats[key] + '\n'
logging.debug(dlsch_ulsch_stats[key])
htmleNBFailureMsg += statMsg
+ #checker
+ if (len(dlsch_ulsch_stats)!=0) and (len(checkers)!=0):
+ if 'd_retx_th' in checkers:
+ checkers['d_retx_th'] = [float(x) for x in checkers['d_retx_th'].split(',')]
+ dlsch_checker_status = list(0 for i in checkers['d_retx_th'])#status 0 / -1
+ d_perc_retx = list(0 for i in checkers['d_retx_th'])#results in %
+
+ if 'u_retx_th' in checkers:
+ checkers['u_retx_th'] = [float(x) for x in checkers['u_retx_th'].split(',')]
+ ulsch_checker_status = list(0 for i in checkers['u_retx_th'])
+ u_perc_retx = list(0 for i in checkers['u_retx_th'])
+
+ #ul and dl retransmissions checkers
+ #NOTICE: DL and UL regex are different
+
+ if ('dlsch_rounds' in dlsch_ulsch_stats) and ('d_retx_th' in checkers):
+ tmp=re.match(r'^.*dlsch_rounds\s+(\d+)\/(\d+)\/(\d+)\/(\d+),\s+dlsch_errors\s+(\d+)',dlsch_ulsch_stats['dlsch_rounds'])
+ if tmp is not None :
+ #captures the different groups from the regex
+ retx_data=[float(x) for x in tmp.groups()]
+ for i in range(0,len(d_perc_retx)):
+ #case where numerator > denumerator with denum ==0 is disregarded, cannot hapen in principle, will lead to 0%
+ d_perc_retx[i] = 0 if (retx_data[i] == 0) else 100*retx_data[i+1]/retx_data[i]
+ #treating % > 100 , % > requirement
+ if (d_perc_retx[i] > 100) or (d_perc_retx[i] > checkers['d_retx_th'][i]): dlsch_checker_status[i] = -1
+ if -1 in dlsch_checker_status:
+ DLRetxIssue = True
+
+ if ('ulsch_rounds' in dlsch_ulsch_stats) and ('u_retx_th' in checkers):
+ tmp=re.match(r'^.*ulsch_rounds\s+(\d+)\/(\d+)\/(\d+)\/(\d+),\s+.*,\s+ulsch_errors\s+(\d+)',dlsch_ulsch_stats['ulsch_rounds'])
+ if tmp is not None :
+ retx_data=[float(x) for x in tmp.groups()]
+ for i in range(0,len(d_perc_retx)):
+ u_perc_retx[i] = 0 if (retx_data[i] == 0) else 100*retx_data[i+1]/retx_data[i]
+ if (u_perc_retx[i] > 100) or (u_perc_retx[i] > checkers['u_retx_th'][i]): ulsch_checker_status[i] = -1
+ if -1 in ulsch_checker_status:
+ ULRetxIssue = True
+
+
+
#real time statistics
datalog_rt_stats['Data']={}
if len(real_time_stats)!=0: #check if dictionary is not empty
for k in real_time_stats:
- tmp=re.match(r'^(?P.*):\s+(?P\d+\.\d+) us;\s+\d+;\s+(?P\d+\.\d+) us;',real_time_stats[k])
+ tmp=re.match(r'^(?P.*):\s+(?P\d+\.\d+) us;\s+(?P\d+);\s+(?P\d+\.\d+) us;',real_time_stats[k])
if tmp is not None:
metric=tmp.group('metric')
avg=float(tmp.group('avg'))
max=float(tmp.group('max'))
- datalog_rt_stats['Data'][metric]=["{:.0f}".format(avg),"{:.0f}".format(max),"{:.2f}".format(avg/datalog_rt_stats['Ref'][metric])]
+ count=int(tmp.group('count'))
+ datalog_rt_stats['Data'][metric]=["{:.0f}".format(avg),"{:.0f}".format(max),"{:d}".format(count),"{:.2f}".format(avg/datalog_rt_stats['Ref'][metric])]
#once all metrics are collected, store the data as a class attribute to build a dedicated HTML table afterward
self.datalog_rt_stats=datalog_rt_stats
#check if there is a fail => will render the test as failed
for k in datalog_rt_stats['Data']:
- if float(datalog_rt_stats['Data'][k][2])> datalog_rt_stats['Threshold'][k]: #condition for fail : avg/ref is greater than the fixed threshold
+ if float(datalog_rt_stats['Data'][k][3])> datalog_rt_stats['Threshold'][k]: #condition for fail : avg/ref is greater than the fixed threshold
+ logging.debug('\u001B[1;30;43m datalog_rt_stats metric ' + k + '=' + datalog_rt_stats['Data'][k][3] + ' > threshold ' + str(datalog_rt_stats['Threshold'][k]) + ' \u001B[0m')
RealTimeProcessingIssue = True
else:
statMsg = 'No real time stats found in the log file\n'
@@ -1158,18 +1209,34 @@ class RANManagement():
htmlMsg = statMsg+'\n'
logging.debug(statMsg)
htmleNBFailureMsg += htmlMsg
- if len(nsa_markers['SgNBReleaseRequest'])!=0:
- statMsg = 'SgNBReleaseRequest = ' + str(len(nsa_markers['SgNBReleaseRequest'])) + ' occurences , starting line ' + str(nsa_markers['SgNBReleaseRequest'][0])
+ if len(gnb_markers['SgNBReleaseRequest'])!=0:
+ statMsg = 'SgNBReleaseRequest = ' + str(len(gnb_markers['SgNBReleaseRequest'])) + ' occurences , starting line ' + str(gnb_markers['SgNBReleaseRequest'][0])
else:
- statMsg = 'SgNBReleaseRequest = ' + str(len(nsa_markers['SgNBReleaseRequest'])) + ' occurences'
+ statMsg = 'SgNBReleaseRequest = ' + str(len(gnb_markers['SgNBReleaseRequest'])) + ' occurences'
htmlMsg = statMsg+'\n'
logging.debug(statMsg)
htmleNBFailureMsg += htmlMsg
- statMsg = 'scgFailureInformationNR-r15 = ' + str(len(nsa_markers['scgFailureInformationNR-r15'])) + ' occurences'
+ statMsg = 'scgFailureInformationNR-r15 = ' + str(len(gnb_markers['scgFailureInformationNR-r15'])) + ' occurences'
htmlMsg = statMsg+'\n'
logging.debug(statMsg)
htmleNBFailureMsg += htmlMsg
+ if DLRetxIssue:
+ retx_checker_status_str = ''
+ for status in dlsch_checker_status : retx_checker_status_str+=str(status)+ ' '
+ logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with too many retransmissions / errors issue in DL ! \u001B[0m')
+ logging.debug('\u001B[1;37;41m Status : ' + retx_checker_status_str + ' \u001B[0m')
+ htmleNBFailureMsg += 'Fail due to retransmissions / errors issue in DL, status : ' + retx_checker_status_str + '\n'
+ global_status = CONST.ENB_RETX_ISSUE
+
+ if ULRetxIssue:
+ retx_checker_status_str = ''
+ for status in ulsch_checker_status : retx_checker_status_str+=str(status)+ ' '
+ logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with too many retransmissions / errors issue in UL ! \u001B[0m')
+ logging.debug('\u001B[1;37;41m Status : ' + retx_checker_status_str + ' \u001B[0m')
+ htmleNBFailureMsg += 'Fail due to retransmissions / errors issue in UL, status : ' + retx_checker_status_str + '\n'
+ global_status = CONST.ENB_RETX_ISSUE
+
if RealTimeProcessingIssue:
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with real time processing issue! \u001B[0m')
htmleNBFailureMsg += 'Fail due to real time processing issue\n'
diff --git a/ci-scripts/reportTestLocally.sh b/ci-scripts/reportTestLocally.sh
index 6ef6b2e254..d22bfe177a 100755
--- a/ci-scripts/reportTestLocally.sh
+++ b/ci-scripts/reportTestLocally.sh
@@ -756,7 +756,7 @@ function report_test {
EPC_CONFIGS=("noS1")
TRANS_MODES=("tdd")
FR_MODE=("SA")
- BW_CASES=(106)
+ BW_CASES=(106 24)
for CN_CONFIG in ${EPC_CONFIGS[@]}
do
for TMODE in ${TRANS_MODES[@]}
diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh
index 8be4a47bfa..b5abb5ff45 100755
--- a/ci-scripts/runTestOnVM.sh
+++ b/ci-scripts/runTestOnVM.sh
@@ -1401,8 +1401,11 @@ function start_rf_sim_nr_ue {
elif [ $LOC_RA_SA_TEST -eq 1 ] #RA test => use --do-ra option
then
echo "echo \"./nr-uesoftmodem --rfsim --do-ra --log_config.global_log_options level,nocolor,time --rrc_config_path /home/ubuntu/tmp/cmake_targets/ran_build/build/\" > ./my-nr-softmodem-run.sh " >> $1
- else #SA test => use --sa option
+ elif [ $LOC_RA_SA_TEST -eq 2 ] #SA test 106PRB => use --sa option
+ then
echo "echo \"./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa --log_config.global_log_options level,nocolor,time\" > ./my-nr-softmodem-run.sh " >> $1
+ else # -eq 3 SA test 24PRB
+ echo "echo \"./nr-uesoftmodem -r 24 -s 24 --numerology 1 --band 78 -C 3604320000 --rfsim --sa --log_config.global_log_options level,nocolor,time\" > ./my-nr-softmodem-run.sh " >> $1
fi
fi
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
@@ -2270,7 +2273,7 @@ function run_test_on_vm {
mkdir --parents $ARCHIVES_LOC
echo "############################################################"
- echo "SA TEST"
+ echo "SA TEST 106PRB"
echo "############################################################"
#SA test, attention : has a different config file from the rest of the test
CN_CONFIG="noS1"
@@ -2305,7 +2308,7 @@ function run_test_on_vm {
echo "${CN_CONFIG} : Starting the NR-UE"
echo "############################################################"
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_sa_test.log
- #last argument = 2 is to enable --sa for SA test
+ #last argument = 2 is to enable --sa for SA test for 106PRB
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 2
if [ $NR_UE_SYNC -eq 0 ]
then
@@ -2340,9 +2343,11 @@ function run_test_on_vm {
echo "SA test NOT OK"
echo "try_cnt = " $try_cnt
try_cnt=$((try_cnt+1))
+ SA_106PRB_STATUS = -1
else
echo "SA test OK"
try_cnt=$((try_cnt+10))
+ SA_106PRB_STATUS = 0
fi
done
########### end SA test
@@ -2350,6 +2355,92 @@ function run_test_on_vm {
sleep 30
+ echo "############################################################"
+ echo "SA TEST 24PRB"
+ echo "############################################################"
+ #SA test, attention : has a different config file from the rest of the test
+ CN_CONFIG="noS1"
+ CONF_FILE=gnb.sa.band78.fr1.24PRB.usrpb210.conf
+ S1_NOS1_CFG=0
+ PRB=24
+ FREQUENCY=3600
+
+ if [ ! -d $ARCHIVES_LOC ]
+ then
+ mkdir --parents $ARCHIVES_LOC
+ fi
+
+ local try_cnt=0
+
+ ######### start of SA TEST loop
+ while [ $try_cnt -lt 5 ] #5 because it hardly succeed within CI
+ do
+
+ SYNC_STATUS=0
+ SA_STATUS=0
+ rm -f $ARCHIVES_LOC/tdd_${PRB}prb_${CN_CONFIG}*sa_test.log
+
+ echo "############################################################"
+ echo "${CN_CONFIG} : Starting the gNB"
+ echo "############################################################"
+ CURRENT_GNB_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_gnb_sa_test.log
+ #last argument = 2 is to enable --sa for SA test
+ start_rf_sim_gnb $GNB_VM_CMDS "$GNB_VM_IP_ADDR" $CURRENT_GNB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG 2
+
+ echo "############################################################"
+ echo "${CN_CONFIG} : Starting the NR-UE"
+ echo "############################################################"
+ CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_sa_test.log
+ #last argument = 3 is to enable --sa for SA test for 24PRB
+ start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 3
+ if [ $NR_UE_SYNC -eq 0 ]
+ then
+ echo "Problem w/ gNB and NR-UE not syncing"
+ terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
+ terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
+ scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
+ SYNC_STATUS=-1
+ try_cnt=$((try_cnt+1))
+ continue
+ fi
+
+ echo "############################################################"
+ echo "${CN_CONFIG} : Terminate gNB/NR-UE simulators"
+ echo "############################################################"
+ sleep 20
+ terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
+ terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
+ scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
+
+ #check SA markers in gNB and NR UE log files
+ echo "############################################################"
+ echo "${CN_CONFIG} : Checking SA on gNB / NR-UE"
+ echo "############################################################"
+
+ # Proper check to be done when SA test is working!
+ check_sa_result $ARCHIVES_LOC/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/$CURRENT_NR_UE_LOG_FILE
+ if [ $SA_STATUS -ne 0 ]
+ then
+ echo "SA test NOT OK"
+ echo "try_cnt = " $try_cnt
+ try_cnt=$((try_cnt+1))
+ SA_24PRB_STATUS = -1
+ else
+ echo "SA test OK"
+ try_cnt=$((try_cnt+10))
+ SA_24PRB_STATUS = 0
+ fi
+ done
+ ########### end SA test
+
+ sleep 30
+
+
+
+
+
echo "############################################################"
echo "RA TEST FR2"
@@ -2661,7 +2752,8 @@ function run_test_on_vm {
echo "Checking run status"
echo "############################################################"
- if [ $SA_STATUS -ne 0 ]; then NR_STATUS=-1; fi
+ if [ $SA_106PRB_STATUS -ne 0 ]; then NR_STATUS=-1; fi
+ if [ $SA_24PRB_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $RA_FR2_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $RA_FR1_STATUS -ne 0 ]; then NR_STATUS=-1; fi
if [ $SYNC_STATUS -ne 0 ]; then NR_STATUS=-1; fi
diff --git a/ci-scripts/stats_monitor_conf.yaml b/ci-scripts/stats_monitor_conf.yaml
index 8760c067fc..9a2ececd18 100644
--- a/ci-scripts/stats_monitor_conf.yaml
+++ b/ci-scripts/stats_monitor_conf.yaml
@@ -20,8 +20,7 @@ gnb :
feptx_prec:
feptx_ofdm:
feptx_total:
- L1 Tx processing thread 0:
- L1 Tx processing thread 1:
+ L1 Tx processing:
DLSCH encoding:
L1 Rx processing:
PUSCH inner-receiver:
@@ -40,12 +39,11 @@ gnb :
rt.feptx_ofdm:
rt.feptx_total:
page3:
- rt.L1 Tx processing thread 0:
- rt.L1 Tx processing thread 1:
+ rt.L1 Tx processing:
rt.DLSCH encoding:
rt.L1 Rx processing:
page4:
rt.PUSCH inner-receiver:
rt.PUSCH decoding:
rt.DL & UL scheduling timing stats:
- rt.UL Indication:
\ No newline at end of file
+ rt.UL Indication:
diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml
index fd254f1856..a598b2bdc1 100644
--- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml
@@ -66,8 +66,8 @@
DeployGenObject
Deploy OAI 4G CoreNetwork
yaml_files/4g_rfsimulator_fdd_05MHz
- oai_hss oai_mme oai_spgwc oai_spgwu trf_gen
- 6
+ oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen
+ 7
@@ -75,15 +75,15 @@
Deploy OAI 4G eNB RF sim (FDD 05MHz)
yaml_files/4g_rfsimulator_fdd_05MHz
enb
- 7
+ 8
DeployGenObject
- Deploy OAI 4G NR-UE RF sim (FDD 05MHz)
+ Deploy OAI 4G LTE-UE RF sim (FDD 05MHz)
yaml_files/4g_rfsimulator_fdd_05MHz
oai_ue0
- 8
+ 9
diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml
index 2ff9461b93..07ea358ad5 100644
--- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml
@@ -60,7 +60,7 @@
DeployGenObject
- Deploy OAI 4G NR-UE RF sim (FDD 05MHz)
+ Deploy OAI 4G LTE-UE RF sim (FDD 05MHz)
yaml_files/4g_rfsimulator_fdd_05MHz_noS1
oai_ue0
2
diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml
index f00e277c36..29acfa3b09 100644
--- a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml
@@ -66,8 +66,8 @@
DeployGenObject
Deploy OAI 4G CoreNetwork
yaml_files/4g_rfsimulator_fdd_10MHz
- oai_hss oai_mme oai_spgwc oai_spgwu trf_gen
- 6
+ oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen
+ 7
@@ -75,15 +75,15 @@
Deploy OAI 4G eNB RF sim (FDD 10MHz)
yaml_files/4g_rfsimulator_fdd_10MHz
enb
- 7
+ 8
DeployGenObject
- Deploy OAI 4G NR-UE RF sim (FDD 10MHz)
+ Deploy OAI 4G LTE-UE RF sim (FDD 10MHz)
yaml_files/4g_rfsimulator_fdd_10MHz
oai_ue0
- 8
+ 9
diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml
index 52e1ac7de1..74f712ebda 100644
--- a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml
@@ -66,8 +66,8 @@
DeployGenObject
Deploy OAI 4G CoreNetwork
yaml_files/4g_rfsimulator_fdd_20MHz
- oai_hss oai_mme oai_spgwc oai_spgwu trf_gen
- 6
+ oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen
+ 7
@@ -75,15 +75,15 @@
Deploy OAI 4G eNB RF sim (FDD 20MHz)
yaml_files/4g_rfsimulator_fdd_20MHz
enb
- 7
+ 8
DeployGenObject
- Deploy OAI 4G NR-UE RF sim (FDD 20MHz)
+ Deploy OAI 4G LTE-UE RF sim (FDD 20MHz)
yaml_files/4g_rfsimulator_fdd_20MHz
oai_ue0
- 8
+ 9
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 cdaee430ef..aa70db1fed 100644
--- a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml
+++ b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml
@@ -81,7 +81,7 @@
DeployGenObject
- Deploy OAI 4G NR-UE RF sim (TDD 05MHz)
+ Deploy OAI 4G LTE-UE RF sim (TDD 05MHz)
yaml_files/4g_rfsimulator_tdd_05MHz
oai_ue0
8
diff --git a/ci-scripts/xml_files/container_5g_f1_rfsim.xml b/ci-scripts/xml_files/container_5g_f1_rfsim.xml
index fc24a3d67c..05b20afed3 100644
--- a/ci-scripts/xml_files/container_5g_f1_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_f1_rfsim.xml
@@ -116,6 +116,8 @@
UndeployGenObject
Undeploy all OAI 5G stack
yaml_files/5g_f1_rfsimulator
+ 5,0,0,0
+ 5,0,0,0
diff --git a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml
index 28269b2d03..61a2af9e54 100644
--- a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml
@@ -111,6 +111,8 @@
UndeployGenObject
Undeploy all OAI 5G stack
yaml_files/5g_fdd_rfsimulator
+ 5,0,0,0
+ 5,0,0,0
diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml
index 7485b1f8ba..bab7f9637a 100644
--- a/ci-scripts/xml_files/container_5g_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_rfsim.xml
@@ -109,6 +109,8 @@
UndeployGenObject
Undeploy all OAI 5G stack
yaml_files/5g_rfsimulator
+ 5,0,0,0
+ 5,0,0,0
diff --git a/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml b/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml
index 23cc6d25b8..f756083ea6 100644
--- a/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml
+++ b/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml
@@ -96,8 +96,8 @@
Iperf
- iperf (DL/140Mbps/UDP)(60 sec)(single-ue profile)
- -u -b 140M -t 60
+ iperf (DL/200Mbps/UDP)(60 sec)(single-ue profile)
+ -u -b 200M -t 60
DL
nrmodule2_quectel
50
diff --git a/ci-scripts/xml_files/fr1_sa_quectel_stages.xml b/ci-scripts/xml_files/fr1_sa_quectel_stages.xml
index 3e497ede13..0ab8bf6b08 100644
--- a/ci-scripts/xml_files/fr1_sa_quectel_stages.xml
+++ b/ci-scripts/xml_files/fr1_sa_quectel_stages.xml
@@ -42,6 +42,8 @@
000001
071004
000001
+ 071005
+ 000001
011002
081000
@@ -148,7 +150,16 @@
90
single-ue
-
+
+ Iperf
+ iperf (DL/130Mbps/UDP)(30 sec)(single-ue profile)
+ -u -b 130M -t 30
+ DL
+ nrmodule2_quectel
+ 50
+ 50
+ single-ue
+
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md
index b2a7f8e30c..400559d269 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md
@@ -48,8 +48,9 @@ Now pull images.
```bash
$ docker pull cassandra:2.1
+$ docker pull redis:6.0.5
$ docker pull rdefosseoai/oai-hss:latest
-$ docker pull rdefosseoai/oai-mme:latest
+$ docker pull rdefosseoai/magma-mme:latest
$ docker pull rdefosseoai/oai-spgwc:latest
$ docker pull rdefosseoai/oai-spgwu-tiny:latest
@@ -57,13 +58,15 @@ $ docker pull rdefosseoai/oai-enb:develop
$ docker pull rdefosseoai/oai-lte-ue:develop
```
+If the `redis` tag is not available, pick the newest available `6.0.x` tag at [Docker Hub Redis Tags](https://hub.docker.com/_/redis?tab=tags).
+
And **re-tag** them for tutorials' docker-compose file to work.
```bash
$ docker image tag rdefosseoai/oai-spgwc:latest oai-spgwc:latest
$ docker image tag rdefosseoai/oai-hss:latest oai-hss:latest
$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
-$ docker image tag rdefosseoai/oai-mme:latest oai-mme:latest
+$ docker image tag rdefosseoai/magma-mme:latest magma-mme:latest
$ docker image tag rdefosseoai/oai-enb:develop oai-enb:develop
$ docker image tag rdefosseoai/oai-lte-ue:develop oai-lte-ue:develop
@@ -81,14 +84,14 @@ How to build the Traffic-Generator image is explained [here](https://github.com/
**Just `docker-compose up -d` WILL NOT WORK!**
-All the following commands **SHALL** be run from the `ci-scripts/yaml_files/4g_rfsimulator` folder.
+All the following commands **SHALL** be run from the `ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz` folder.
## 2.1. Deploy and Configure Cassandra Database ##
It is very crutial that the Cassandra DB is fully configured before you do anything else!
```bash
-$ cd ci-scripts/yaml_files/4g_rfsimulator
+$ cd ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz
$ docker-compose up -d db_init
Creating network "rfsim4g-oai-private-net" with the default driver
Creating network "rfsim4g-oai-public-net" with the default driver
@@ -128,11 +131,12 @@ $ sudo tshark -i rfsim4g-public -f 'port 3868 or port 2123 or port 36412 or port
## 2.2. Deploy OAI CN4G containers ##
```bash
-$ docker-compose up -d oai_mme oai_spgwu trf_gen
+$ docker-compose up -d magma_mme oai_spgwu trf_gen
rfsim4g-cassandra is up-to-date
-Creating rfsim4g-trf-gen ... done
+Creating rfsim4g-trf-gen ... done
+Creating rfsim4g-redis ... done
Creating rfsim4g-oai-hss ... done
-Creating rfsim4g-oai-mme ... done
+Creating rfsim4g-magma-mme ... done
Creating rfsim4g-oai-spgwc ... done
Creating rfsim4g-oai-spgwu-tiny ... done
```
@@ -144,11 +148,12 @@ $ docker-compose ps -a
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------
rfsim4g-cassandra docker-entrypoint.sh cassa ... Up (healthy) 7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp
-rfsim4g-oai-hss /openair-hss/bin/entrypoin ... Up (healthy) 5868/tcp, 9042/tcp, 9080/tcp, 9081/tcp
-rfsim4g-oai-mme /openair-mme/bin/entrypoin ... Up (healthy) 2123/udp, 3870/tcp, 5870/tcp
-rfsim4g-oai-spgwc /openair-spgwc/bin/entrypo ... Up (healthy) 2123/udp, 8805/udp
-rfsim4g-oai-spgwu-tiny /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
-rfsim4g-trf-gen /bin/bash -c ip route add ... Up (healthy)
+rfsim4g-magma-mme /bin/bash -c /magma-mme/bi ... Up (healthy) 2123/udp, 3870/tcp, 5870/tcp
+rfsim4g-oai-hss /openair-hss/bin/entrypoin ... Up (healthy) 5868/tcp, 9042/tcp, 9080/tcp, 9081/tcp
+rfsim4g-oai-spgwc /openair-spgwc/bin/entrypo ... Up (healthy) 2123/udp, 8805/udp
+rfsim4g-oai-spgwu-tiny /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
+rfsim4g-redis /bin/bash -c redis-server ... Up (healthy) 6379/tcp
+rfsim4g-trf-gen /bin/bash -c ip route add ... Up (healthy)
```
## 2.3. Deploy OAI eNB in RF simulator mode ##
@@ -165,77 +170,55 @@ $ docker-compose ps -a
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------
rfsim4g-cassandra docker-entrypoint.sh cassa ... Up (healthy) 7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp
-rfsim4g-oai-enb /opt/oai-enb/bin/entrypoin ... Up (healthy) 2152/udp, 36412/udp, 36422/udp
-rfsim4g-oai-hss /openair-hss/bin/entrypoin ... Up (healthy) 5868/tcp, 9042/tcp, 9080/tcp, 9081/tcp
-rfsim4g-oai-mme /openair-mme/bin/entrypoin ... Up (healthy) 2123/udp, 3870/tcp, 5870/tcp
-rfsim4g-oai-spgwc /openair-spgwc/bin/entrypo ... Up (healthy) 2123/udp, 8805/udp
-rfsim4g-oai-spgwu-tiny /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
-rfsim4g-trf-gen /bin/bash -c ip route add ... Up (healthy)
+rfsim4g-magma-mme /bin/bash -c /magma-mme/bi ... Up (healthy) 2123/udp, 3870/tcp, 5870/tcp
+rfsim4g-oai-enb /opt/oai-enb/bin/entrypoin ... Up (healthy) 2152/udp, 36412/udp, 36422/udp
+rfsim4g-oai-hss /openair-hss/bin/entrypoin ... Up (healthy) 5868/tcp, 9042/tcp, 9080/tcp, 9081/tcp
+rfsim4g-oai-spgwc /openair-spgwc/bin/entrypo ... Up (healthy) 2123/udp, 8805/udp
+rfsim4g-oai-spgwu-tiny /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
+rfsim4g-redis /bin/bash -c redis-server ... Up (healthy) 6379/tcp
+rfsim4g-trf-gen /bin/bash -c ip route add ... Up (healthy)
```
-Check if the eNB connected to MME:
+Check if the eNB connected to MME: with MAGMA-MME, the logs are not pushed to `stdout` but to a file at `/var/log/mme.log`
```bash
-$ docker logs rfsim4g-oai-mme
+$ docker exec rfsim4g-magma-mme /bin/bash -c "cat /var/log/mme.log"
...
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0039 ======================================= STATISTICS ============================================
+000141 Fri Feb 11 09:49:29 2022 7EFFE7BE4700 DEBUG S6A tasks/s6a/s6a_peer.c :0095 Diameter identity of MME: mme.openairinterface.org with length: 24
+000142 Fri Feb 11 09:49:29 2022 7EFFE7BE4700 DEBUG S6A tasks/s6a/s6a_peer.c :0130 S6a peer connection attempt 1 / 8
+000143 Fri Feb 11 09:49:29 2022 7EFFE7BE4700 DEBUG S6A tasks/s6a/s6a_peer.c :0141 Peer hss.openairinterface.org is now connected...
+000144 Fri Feb 11 09:49:29 2022 7EFFEA3E9700 DEBUG MME-AP tasks/mme_app/mme_app_state_mana:0097 Inside get_state with read_from_db 0
+000146 Fri Feb 11 09:49:29 2022 7EFFEA3E9700 DEBUG MME-AP tasks/mme_app/mme_app_main.c :0083 MME APP ZMQ latency: 214.
+000145 Fri Feb 11 09:49:29 2022 7EFFE83E5700 DEBUG S1AP tasks/s1ap/s1ap_mme.c :0121 S1AP ZMQ latency: 146.
+000147 Fri Feb 11 09:50:23 2022 7EFFE83E5700 DEBUG S1AP tasks/s1ap/s1ap_mme.c :0121 S1AP ZMQ latency: 144.
+000148 Fri Feb 11 09:50:23 2022 7EFFE83E5700 DEBUG S1AP tasks/s1ap/s1ap_mme_handlers.c :3775 Create eNB context for assoc_id: 4121
+000149 Fri Feb 11 09:50:23 2022 7EFFE83E5700 DEBUG S1AP tasks/s1ap/s1ap_mme.c :0121 S1AP ZMQ latency: 48.
+000150 Fri Feb 11 09:50:23 2022 7EFFE83E5700 DEBUG S1AP tasks/s1ap/s1ap_mme_handlers.c :0536 New s1 setup request incoming from eNB-rf-sim macro eNB id: 00e01
+000151 Fri Feb 11 09:50:23 2022 7EFFE83E5700 DEBUG S1AP tasks/s1ap/s1ap_mme_handlers.c :0639 Adding eNB with enb_id :3585 to the list of served eNBs
+000152 Fri Feb 11 09:50:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0049 ======================================= STATISTICS ============================================
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0042 | Current Status| Added since last display| Removed since last display |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0048 Connected eNBs | 0 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0054 Attached UEs | 0 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0060 Connected UEs | 0 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0066 Default Bearers| 0 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0072 S1-U Bearers | 0 | 0 | 0 |
+000153 Fri Feb 11 09:50:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0050 | Current Status|
+000154 Fri Feb 11 09:50:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0053 Attached UEs | 0 |
+000155 Fri Feb 11 09:50:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0056 Connected UEs | 0 |
+000156 Fri Feb 11 09:50:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0059 Connected eNBs | 0 |
+000157 Fri Feb 11 09:50:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0062 Default Bearers| 0 |
+000158 Fri Feb 11 09:50:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0065 S1-U Bearers | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0075 ======================================= STATISTICS ============================================
+000159 Fri Feb 11 09:50:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0070 ======================================= STATISTICS ============================================
-DEBUG SCTP rc/sctp/sctp_primitives_server.c:0469 Client association changed: 0
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0101 ----------------------
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0102 SCTP Status:
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0103 assoc id .....: 675
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0104 state ........: 4
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0105 instrms ......: 2
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0106 outstrms .....: 2
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0108 fragmentation : 1452
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0109 pending data .: 0
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0110 unack data ...: 0
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0111 rwnd .........: 106496
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0112 peer info :
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0114 state ....: 2
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0116 cwnd .....: 4380
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0118 srtt .....: 0
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0120 rto ......: 3000
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0122 mtu ......: 1500
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0123 ----------------------
-DEBUG SCTP rc/sctp/sctp_primitives_server.c:0479 New connection
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0205 ----------------------
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0206 Local addresses:
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0217 - [192.168.61.3]
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0234 ----------------------
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0151 ----------------------
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0152 Peer addresses:
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0163 - [192.168.61.20]
-DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0178 ----------------------
-DEBUG SCTP rc/sctp/sctp_primitives_server.c:0554 SCTP RETURNING!!
-DEBUG SCTP rc/sctp/sctp_primitives_server.c:0547 [675][44] Msg of length 51 received from port 36412, on stream 0, PPID 18
-DEBUG SCTP rc/sctp/sctp_primitives_server.c:0554 SCTP RETURNING!!
-DEBUG S1AP mme/src/s1ap/s1ap_mme_handlers.c:2826 Create eNB context for assoc_id: 675
-DEBUG S1AP mme/src/s1ap/s1ap_mme_handlers.c:0361 S1-Setup-Request macroENB_ID.size 3 (should be 20)
-DEBUG S1AP mme/src/s1ap/s1ap_mme_handlers.c:0321 New s1 setup request incoming from macro eNB id: 00e01
-DEBUG S1AP mme/src/s1ap/s1ap_mme_handlers.c:0423 Adding eNB to the list of served eNBs
-DEBUG S1AP mme/src/s1ap/s1ap_mme_handlers.c:0438 Adding eNB id 3585 to the list of served eNBs
-DEBUG SCTP rc/sctp/sctp_primitives_server.c:0283 [44][675] Sending buffer 0x7f9394009f90 of 27 bytes on stream 0 with ppid 18
-DEBUG SCTP rc/sctp/sctp_primitives_server.c:0296 Successfully sent 27 bytes on stream 0
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0039 ======================================= STATISTICS ============================================
+000160 Fri Feb 11 09:50:28 2022 7EFFEA3E9700 DEBUG MME-AP tasks/mme_app/mme_app_state_mana:0097 Inside get_state with read_from_db 0
+000161 Fri Feb 11 09:51:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0049 ======================================= STATISTICS ============================================
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0042 | Current Status| Added since last display| Removed since last display |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0048 Connected eNBs | 1 | 1 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0054 Attached UEs | 0 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0060 Connected UEs | 0 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0066 Default Bearers| 0 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0072 S1-U Bearers | 0 | 0 | 0 |
+000162 Fri Feb 11 09:51:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0050 | Current Status|
+000163 Fri Feb 11 09:51:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0053 Attached UEs | 0 |
+000164 Fri Feb 11 09:51:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0056 Connected UEs | 0 |
+000165 Fri Feb 11 09:51:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0059 Connected eNBs | 1 |
+000166 Fri Feb 11 09:51:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0062 Default Bearers| 0 |
+000167 Fri Feb 11 09:51:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0065 S1-U Bearers | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0075 ======================================= STATISTICS ============================================
+000168 Fri Feb 11 09:51:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0070 ======================================= STATISTICS ============================================
+
+000169 Fri Feb 11 09:51:28 2022 7EFFEA3E9700 DEBUG MME-AP tasks/mme_app/mme_app_state_mana:0097 Inside get_state with read_from_db 0
...
```
@@ -253,14 +236,14 @@ $ docker-compose ps -a
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------
rfsim4g-cassandra docker-entrypoint.sh cassa ... Up (healthy) 7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp
-rfsim4g-oai-enb /opt/oai-enb/bin/entrypoin ... Up (healthy) 2152/udp, 36412/udp, 36422/udp
-rfsim4g-oai-hss /openair-hss/bin/entrypoin ... Up (healthy) 5868/tcp, 9042/tcp, 9080/tcp, 9081/tcp
-rfsim4g-oai-lte-ue0 /opt/oai-lte-ue/bin/entryp ... Up (healthy) 10000/tcp
-rfsim4g-oai-mme /openair-mme/bin/entrypoin ... Up (healthy) 2123/udp, 3870/tcp, 5870/tcp
-rfsim4g-oai-spgwc /openair-spgwc/bin/entrypo ... Up (healthy) 2123/udp, 8805/udp
-rfsim4g-oai-spgwu-tiny /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
-rfsim4g-trf-gen /bin/bash -c ip route add ... Up (healthy)
-Creating rfsim4g-oai-enb ... done
+rfsim4g-magma-mme /bin/bash -c /magma-mme/bi ... Up (healthy) 2123/udp, 3870/tcp, 5870/tcp
+rfsim4g-oai-enb /opt/oai-enb/bin/entrypoin ... Up (healthy) 2152/udp, 36412/udp, 36422/udp
+rfsim4g-oai-hss /openair-hss/bin/entrypoin ... Up (healthy) 5868/tcp, 9042/tcp, 9080/tcp, 9081/tcp
+rfsim4g-oai-lte-ue0 /opt/oai-lte-ue/bin/entryp ... Up (healthy) 10000/tcp
+rfsim4g-oai-spgwc /openair-spgwc/bin/entrypo ... Up (healthy) 2123/udp, 8805/udp
+rfsim4g-oai-spgwu-tiny /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
+rfsim4g-redis /bin/bash -c redis-server ... Up (healthy) 6379/tcp
+rfsim4g-trf-gen /bin/bash -c ip route add ... Up (healthy)
```
Making sure the OAI UE is connected:
@@ -268,40 +251,69 @@ Making sure the OAI UE is connected:
```bash
$ docker logs rfsim4g-oai-enb
...
-[RRC] RRCConnectionReconfiguration Encoded 1098 bits (138 bytes)
-[RRC] [eNB 0] Frame 0, Logical Channel DL-DCCH, Generate LTE_RRCConnectionReconfiguration (bytes 138, UE id 617b)
-[RRC] sent RRC_DCCH_DATA_REQ to TASK_PDCP_ENB
-[PDCP] [FRAME 00000][eNB][MOD 00][RNTI 617b][SRB 02] Action ADD LCID 2 (SRB id 2) configured with SN size 5 bits and RLC AM
-[PDCP] [FRAME 00000][eNB][MOD 00][RNTI 617b][DRB 01] Action ADD LCID 3 (DRB id 1) configured with SN size 12 bits and RLC AM
-[SCTP] Successfully sent 46 bytes on stream 1 for assoc_id 676
-[RRC] [FRAME 00000][eNB][MOD 00][RNTI 617b] UE State = RRC_RECONFIGURED (default DRB, xid 0)
-[PDCP] [FRAME 00000][eNB][MOD 00][RNTI 617b][SRB 02] Action MODIFY LCID 2 RB id 2 reconfigured with SN size 5 and RLC AM
-[PDCP] [FRAME 00000][eNB][MOD 00][RNTI 617b][DRB 01] Action MODIFY LCID 3 RB id 1 reconfigured with SN size 1 and RLC AM
-[RRC] [eNB 0] Frame 0 CC 0 : SRB2 is now active
-[RRC] [eNB 0] Frame 0 : Logical Channel UL-DCCH, Received LTE_RRCConnectionReconfigurationComplete from UE rnti 617b, reconfiguring DRB 1/LCID 3
-[RRC] [eNB 0] Frame 0 : Logical Channel UL-DCCH, Received LTE_RRCConnectionReconfigurationComplete, reconfiguring DRB 1/LCID 3
-[MAC] UE 0 RNTI 617b adding LC 3 idx 2 to scheduling control (total 3)
-[MAC] Added physicalConfigDedicated 0x7f98e0004950 for 0.0
-[S1AP] initial_ctxt_resp_p: e_rab ID 5, enb_addr 192.168.61.20, SIZE 4
-[SCTP] Successfully sent 40 bytes on stream 1 for assoc_id 676
-[SCTP] Successfully sent 61 bytes on stream 1 for assoc_id 676
+7320446.555734 [RRC] I [FRAME 00000][eNB][MOD 00][RNTI bd8c] Logical Channel DL-DCCH, Generate UECapabilityEnquiry (bytes 10)
+7320446.555739 [RRC] I sent RRC_DCCH_DATA_REQ to TASK_PDCP_ENB
+7320446.570284 [RRC] I [FRAME 00000][eNB][MOD 00][RNTI bd8c] received ueCapabilityInformation on UL-DCCH 1 from UE
+7320446.570293 [RRC] A got UE capabilities for UE bd8c
+7320446.570346 [RRC] W drx_Configuration parameter is NULL, cannot configure local UE parameters or CDRX is deactivated
+7320446.570370 [RRC] I [eNB 0] frame 0: requesting A2, A3, A4, and A5 event reporting
+7320446.570435 [RRC] I RRCConnectionReconfiguration Encoded 1146 bits (144 bytes)
+7320446.570440 [RRC] I [eNB 0] Frame 0, Logical Channel DL-DCCH, Generate LTE_RRCConnectionReconfiguration (bytes 144, UE id bd8c)
+7320446.570445 [RRC] I sent RRC_DCCH_DATA_REQ to TASK_PDCP_ENB
+7320446.570446 [SCTP] I Successfully sent 46 bytes on stream 1 for assoc_id 4120
+7320446.570449 [PDCP] I [FRAME 00000][eNB][MOD 00][RNTI bd8c][SRB 02] Action ADD LCID 2 (SRB id 2) configured with SN size 5 bits and RLC AM
+7320446.570455 [PDCP] I [FRAME 00000][eNB][MOD 00][RNTI bd8c][DRB 01] Action ADD LCID 3 (DRB id 1) configured with SN size 12 bits and RLC AM
+7320446.583036 [RRC] I [FRAME 00000][eNB][MOD 00][RNTI bd8c] UE State = RRC_RECONFIGURED (default DRB, xid 0)
+7320446.583056 [PDCP] I [FRAME 00000][eNB][MOD 00][RNTI bd8c][SRB 02] Action MODIFY LCID 2 RB id 2 reconfigured with SN size 5 and RLC AM
+7320446.583060 [PDCP] I [FRAME 00000][eNB][MOD 00][RNTI bd8c][DRB 01] Action MODIFY LCID 3 RB id 1 reconfigured with SN size 1 and RLC AM
+7320446.583065 [RRC] I [eNB 0] Frame 0 CC 0 : SRB2 is now active
+7320446.583067 [RRC] I [eNB 0] Frame 0 : Logical Channel UL-DCCH, Received LTE_RRCConnectionReconfigurationComplete from UE rnti bd8c, reconfiguring DRB 1/LCID 3
+7320446.583070 [RRC] I [eNB 0] Frame 0 : Logical Channel UL-DCCH, Received LTE_RRCConnectionReconfigurationComplete, reconfiguring DRB 1/LCID 3
+7320446.583074 [MAC] I UE 0 RNTI bd8c adding LC 3 idx 2 to scheduling control (total 3)
+7320446.583077 [MAC] I Added physicalConfigDedicated 0x7fd18c46be50 for 0.0
+7320446.583095 [S1AP] I initial_ctxt_resp_p: e_rab ID 5, enb_addr 192.168.61.20, SIZE 4
+7320446.583150 [SCTP] I Successfully sent 40 bytes on stream 1 for assoc_id 4120
+7320446.595495 [SCTP] I Successfully sent 61 bytes on stream 1 for assoc_id 4120
+7320446.774197 [SCTP] I Found data for descriptor 103
+7320446.774227 [SCTP] I [4120][103] Msg of length 53 received, on stream 1, PPID 18
+7320446.774295 [RRC] I [eNB 0] Received S1AP_DOWNLINK_NAS: ue_initial_id 0, eNB_ue_s1ap_id 4527568
+7320446.774316 [RRC] I sent RRC_DCCH_DATA_REQ to TASK_PDCP_ENB
...
```
-On the MME:
+On the MME: be patient, the statistics display update is slow!
```bash
-$ docker logs rfsim4g-oai-mme
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0039 ======================================= STATISTICS ============================================
+$ docker exec rfsim4g-magma-mme /bin/bash -c "cat /var/log/mme.log"
+000413 Fri Feb 11 09:52:52 2022 7EFFE8BE6700 INFO GTPv2- lib/gtpv2-c/nwgtpv2c-0.11/src/Nw:2376 Stopped active timer 0x2 for info 0x0x60700001a9b0!
+000414 Fri Feb 11 09:52:52 2022 7EFFEA3E9700 DEBUG MME-AP tasks/mme_app/mme_app_state_mana:0097 Inside get_state with read_from_db 0
+000415 Fri Feb 11 09:52:52 2022 7EFFEA3E9700 DEBUG MME-AP tasks/mme_app/mme_app_main.c :0083 MME APP ZMQ latency: 172.
+000416 Fri Feb 11 09:52:52 2022 7EFFEA3E9700 INFO MME-AP tasks/mme_app/mme_app_main.c :0137 Received S11 MODIFY BEARER RESPONSE from SPGW
+000417 Fri Feb 11 09:52:52 2022 7EFFEA3E9700 DEBUG MME-AP tasks/mme_app/mme_app_main.c :0150 S11 MODIFY BEARER RESPONSE local S11 teid = 1
+000418 Fri Feb 11 09:52:52 2022 7EFFEA3E9700 DEBUG MME-AP tasks/mme_app/mme_app_state_mana:0097 Inside get_state with read_from_db 0
+000419 Fri Feb 11 09:53:28 2022 7EFFEA3E9700 DEBUG MME-AP tasks/mme_app/mme_app_state_mana:0097 Inside get_state with read_from_db 0
+000420 Fri Feb 11 09:53:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0049 ======================================= STATISTICS ============================================
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0042 | Current Status| Added since last display| Removed since last display |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0048 Connected eNBs | 1 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0054 Attached UEs | 1 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0060 Connected UEs | 1 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0066 Default Bearers| 0 | 0 | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0072 S1-U Bearers | 0 | 0 | 0 |
+000421 Fri Feb 11 09:53:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0050 | Current Status|
+000422 Fri Feb 11 09:53:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0053 Attached UEs | 0 |
+000423 Fri Feb 11 09:53:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0056 Connected UEs | 0 |
+000424 Fri Feb 11 09:53:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0059 Connected eNBs | 1 |
+000425 Fri Feb 11 09:53:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0062 Default Bearers| 0 |
+000426 Fri Feb 11 09:53:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0065 S1-U Bearers | 0 |
-DEBUG MME-AP src/mme_app/mme_app_statistics.c:0075 ======================================= STATISTICS ============================================
+000427 Fri Feb 11 09:53:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0070 ======================================= STATISTICS ============================================
+
+000428 Fri Feb 11 09:54:28 2022 7EFFEA3E9700 DEBUG MME-AP tasks/mme_app/mme_app_state_mana:0097 Inside get_state with read_from_db 0
+000429 Fri Feb 11 09:54:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0049 ======================================= STATISTICS ============================================
+
+000430 Fri Feb 11 09:54:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0050 | Current Status|
+000431 Fri Feb 11 09:54:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0053 Attached UEs | 1 |
+000432 Fri Feb 11 09:54:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0056 Connected UEs | 1 |
+000433 Fri Feb 11 09:54:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0059 Connected eNBs | 1 |
+000434 Fri Feb 11 09:54:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0062 Default Bearers| 1 |
+000435 Fri Feb 11 09:54:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0065 S1-U Bearers | 1 |
+
+000436 Fri Feb 11 09:54:28 2022 7EFFEC3ED700 DEBUG SERVIC tasks/service303/service303_mme_:0070 ======================================= STATISTICS ============================================
```
On the LTE UE:
@@ -377,16 +389,18 @@ Stopping rfsim4g-oai-lte-ue0 ... done
Stopping rfsim4g-oai-enb ... done
Stopping rfsim4g-oai-spgwu-tiny ... done
Stopping rfsim4g-oai-spgwc ... done
-Stopping rfsim4g-oai-mme ... done
+Stopping rfsim4g-magma-mme ... done
Stopping rfsim4g-oai-hss ... done
+Stopping rfsim4g-redis ... done
Stopping rfsim4g-trf-gen ... done
Stopping rfsim4g-cassandra ... done
Removing rfsim4g-oai-lte-ue0 ... done
Removing rfsim4g-oai-enb ... done
Removing rfsim4g-oai-spgwu-tiny ... done
Removing rfsim4g-oai-spgwc ... done
-Removing rfsim4g-oai-mme ... done
+Removing rfsim4g-magma-mme ... done
Removing rfsim4g-oai-hss ... done
+Removing rfsim4g-redis ... done
Removing rfsim4g-trf-gen ... done
Removing rfsim4g-cassandra ... done
Removing network rfsim4g-oai-private-net
@@ -443,19 +457,23 @@ My 1st UE IMSI is an aggregation of `MCC`, `MNC`, `SHORT_IMSI`.
## 5.2. PLMN and TAI ##
-in MME config:
+in MME config, in the docker-compose there is not much besides REALM fields:
```yaml
+ TZ: Europe/Paris
REALM: openairinterface.org
-..
- MCC: '208'
- MNC: '96'
- MME_GID: 32768
- MME_CODE: 3
- TAC_0: 1
- TAC_1: 2
- TAC_2: 3
+ PREFIX: /openair-mme/etc
+ HSS_HOSTNAME: hss
+ HSS_FQDN: hss.openairinterface.org
+ HSS_REALM: openairinterface.org
MME_FQDN: mme.openairinterface.org
+ FEATURES: mme_oai
+```
+
+Everything is hard-coded in the `mme.conf` that is mounted as a volume: look for instances of
+
+```
+MCC="208" ; MNC="96"; TAC = "1";
```
in SPGW-C/-U configs:
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml
index e852643ab9..b15e794c10 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml
@@ -58,57 +58,45 @@ services:
timeout: 5s
retries: 5
- oai_mme:
- image: oai-mme:latest
- container_name: rfsim4g-oai-mme
+ redis:
+ image: redis:6.0.5
+ container_name: rfsim4g-redis
privileged: true
- depends_on: [oai_hss]
+ networks:
+ public_net:
+ ipv4_address: 192.168.61.6
+ volumes:
+ - ./redis_extern.conf:/usr/local/etc/redis/redis.conf
+ entrypoint: /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf"
+ healthcheck:
+ test: /bin/bash -c "redis-cli -h 192.168.61.6 -p 6380 ping"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ magma_mme:
+ image: magma-mme:latest
+ container_name: rfsim4g-magma-mme
+ hostname: mme
+ privileged: true
+ depends_on: [oai_hss, redis]
networks:
public_net:
ipv4_address: 192.168.61.3
environment:
+ TZ: Europe/Paris
REALM: openairinterface.org
PREFIX: /openair-mme/etc
- INSTANCE: 1
- PID_DIRECTORY: /var/run
- HSS_IP_ADDR: 192.168.61.2
HSS_HOSTNAME: hss
HSS_FQDN: hss.openairinterface.org
HSS_REALM: openairinterface.org
- MCC: '208'
- MNC: '96'
- MME_GID: 32768
- MME_CODE: 3
- TAC_0: 1
- TAC_1: 2
- TAC_2: 3
MME_FQDN: mme.openairinterface.org
- MME_S6A_IP_ADDR: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S1_MME: eth0
- MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S11: eth0
- MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S10: lo
- MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
- OUTPUT: CONSOLE
- SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
- PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
- PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
- MCC_SGW_0: '208'
- MNC3_SGW_0: '096'
- TAC_LB_SGW_0: '01'
- TAC_HB_SGW_0: '00'
- MCC_MME_0: '208'
- MNC3_MME_0: '096'
- TAC_LB_MME_0: '02'
- TAC_HB_MME_0: '00'
- MCC_MME_1: '208'
- MNC3_MME_1: '096'
- TAC_LB_MME_1: '03'
- TAC_HB_MME_1: '00'
- TAC_LB_SGW_TEST_0: '03'
- TAC_HB_SGW_TEST_0: '00'
- SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
+ FEATURES: mme_oai
+ volumes:
+ - ./mme_fd.sprint.conf:/magma-mme/etc/mme_fd.conf.tmplt
+ - ./mme.conf:/magma-mme/etc/mme.conf
+ - ./entrypoint.sh:/magma-mme/bin/entrypoint.sh
+ entrypoint: /bin/bash -c "/magma-mme/bin/entrypoint.sh"
healthcheck:
test: /bin/bash -c "pgrep oai_mme"
interval: 10s
@@ -118,7 +106,7 @@ services:
oai_spgwc:
image: oai-spgwc:latest
privileged: true
- depends_on: [oai_mme]
+ depends_on: [magma_mme]
container_name: rfsim4g-oai-spgwc
networks:
public_net:
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/entrypoint.sh b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/entrypoint.sh
new file mode 100755
index 0000000000..24960e215d
--- /dev/null
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/entrypoint.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+INSTANCE=1
+PREFIX='/magma-mme/etc'
+MY_REALM='openairinterface.org'
+
+declare -A MME_CONF
+
+pushd $PREFIX
+MME_CONF[@MME_S6A_IP_ADDR@]="192.168.61.3"
+MME_CONF[@INSTANCE@]=$INSTANCE
+MME_CONF[@PREFIX@]=$PREFIX
+MME_CONF[@REALM@]=$MY_REALM
+MME_CONF[@MME_FQDN@]="mme.${MME_CONF[@REALM@]}"
+MME_CONF[@HSS_HOSTNAME@]='hss'
+MME_CONF[@HSS_FQDN@]="${MME_CONF[@HSS_HOSTNAME@]}.${MME_CONF[@REALM@]}"
+MME_CONF[@HSS_IP_ADDR@]="192.168.61.2"
+
+cp mme_fd.conf.tmplt $PREFIX/mme_fd.conf
+
+for K in "${!MME_CONF[@]}"; do
+ egrep -lRZ "$K" $PREFIX/mme_fd.conf | xargs -0 -l sed -i -e "s|$K|${MME_CONF[$K]}|g"
+ ret=$?;[[ ret -ne 0 ]] && echo "Could not replace $K with ${MME_CONF[$K]}"
+done
+
+sed -i -e "s@etc/freeDiameter@etc@" /magma-mme/etc/mme_fd.conf
+sed -i -e "s@bind: 127.0.0.1@bind: 192.168.61.6@" /etc/magma/redis.yml
+# Generate freeDiameter certificate
+popd
+cd /magma-mme/scripts
+./check_mme_s6a_certificate $PREFIX mme.${MME_CONF[@REALM@]}
+
+cd /magma-mme
+nohup /magma-mme/bin/sctpd > /var/log/sctpd.log 2>&1 &
+sleep 5
+/magma-mme/bin/oai_mme -c /magma-mme/etc/mme.conf
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/mme.conf b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/mme.conf
new file mode 100644
index 0000000000..4f491cc63d
--- /dev/null
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/mme.conf
@@ -0,0 +1,134 @@
+# generated by generate_mme_config_script.py
+MME :
+{
+ REALM = "openairinterface.org"
+ PID_DIRECTORY = "/var/run";
+ MAXENB = 8; # power of 2
+ MAXUE = 16; # power of 2
+ RELATIVE_CAPACITY = 10;
+
+ EMERGENCY_ATTACH_SUPPORTED = "no";
+ UNAUTHENTICATED_IMSI_SUPPORTED = "no";
+
+ # EPS network feature support
+ EPS_NETWORK_FEATURE_SUPPORT_IMS_VOICE_OVER_PS_SESSION_IN_S1 = "no"; # DO NOT CHANGE
+ EPS_NETWORK_FEATURE_SUPPORT_EMERGENCY_BEARER_SERVICES_IN_S1_MODE = "no"; # DO NOT CHANGE
+ EPS_NETWORK_FEATURE_SUPPORT_LOCATION_SERVICES_VIA_EPC = "no"; # DO NOT CHANGE
+ EPS_NETWORK_FEATURE_SUPPORT_EXTENDED_SERVICE_REQUEST = "no"; # DO NOT CHANGE
+
+ # Display statistics about whole system (expressed in seconds)
+ MME_STATISTIC_TIMER = 10;
+ IP_CAPABILITY = "IPV4"; # UE PDN_TYPE
+ USE_STATELESS = "";
+
+ INTERTASK_INTERFACE :
+ {
+ # max queue size per task
+ ITTI_QUEUE_SIZE = 2000000;
+ };
+
+ S6A :
+ {
+ S6A_CONF = "/magma-mme/etc/mme_fd.conf"; # YOUR MME freeDiameter config file path
+ HSS_HOSTNAME = "hss.openairinterface.org";
+ HSS_REALM = "openairinterface.org";
+ };
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 8;
+ SCTP_OUTSTREAMS = 8;
+ };
+
+ # ------- S1AP definitions
+ S1AP :
+ {
+ # outcome drop timer value (seconds)
+ S1AP_OUTCOME_TIMER = 10;
+ };
+
+ # ------- MME served GUMMEIs
+ GUMMEI_LIST = (
+ { MCC="208" ; MNC="96"; MME_GID="32768" ; MME_CODE="3"; }
+ );
+
+ # ------- MME served TAIs
+ TAI_LIST = (
+ {MCC="208" ; MNC="96"; TAC = "1"; }
+ );
+
+ TAC_LIST = (
+ {MCC="208" ; MNC="96"; TAC = "1"; }
+ );
+
+ CSFB :
+ {
+ NON_EPS_SERVICE_CONTROL = "OFF";
+ CSFB_MCC = "208";
+ CSFB_MNC = "96";
+ LAC = "1";
+ };
+ NAS :
+ {
+ ORDERED_SUPPORTED_INTEGRITY_ALGORITHM_LIST = [ "EIA2" , "EIA1" , "EIA0" ];
+ ORDERED_SUPPORTED_CIPHERING_ALGORITHM_LIST = [ "EEA0" , "EEA1" , "EEA2" ];
+ T3402 = 1 # in minutes (default is 12 minutes)
+ T3412 = 54 # in minutes (default is 54 minutes, network dependent)
+ T3422 = 6 # in seconds (default is 6s)
+ T3450 = 6 # in seconds (default is 6s)
+ T3460 = 6 # in seconds (default is 6s)
+ T3470 = 6 # in seconds (default is 6s)
+ T3485 = 8 # UNUSED in seconds (default is 8s)
+ T3486 = 8 # UNUSED in seconds (default is 8s)
+ T3489 = 4 # UNUSED in seconds (default is 4s)
+ T3495 = 8 # UNUSED in seconds (default is 8s)
+ };
+
+ SGS :
+ {
+ TS6_1 = 10 # in seconds (default is 10s)
+ TS8 = 4 # in seconds (default is 4s)
+ TS9 = 2 # in seconds (default is 4s)
+ TS10 = 4 # in seconds (default is 4s)
+ TS13 = 4 # in seconds (default is 4s)
+ };
+
+ NETWORK_INTERFACES :
+ {
+ MME_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ MME_IPV4_ADDRESS_FOR_S1_MME = "192.168.61.3/24";
+ MME_INTERFACE_NAME_FOR_S11_MME = "eth0";
+ MME_IPV4_ADDRESS_FOR_S11_MME = "192.168.61.3/24";
+ MME_PORT_FOR_S11_MME = 2123;
+ };
+
+ LOGGING :
+ {
+ OUTPUT = "CONSOLE";
+ THREAD_SAFE = "no";
+ COLOR = "no";
+
+ SCTP_LOG_LEVEL = "ERROR";
+ GTPV1U_LOG_LEVEL = "INFO";
+ SPGW_APP_LOG_LEVEL = "INFO";
+ UDP_LOG_LEVEL = "INFO";
+ S1AP_LOG_LEVEL = "DEBUG";
+ NAS_LOG_LEVEL = "INFO";
+ MME_APP_LOG_LEVEL = "DEBUG";
+ GTPV2C_LOG_LEVEL = "INFO";
+ S11_LOG_LEVEL = "DEBUG";
+ S6A_LOG_LEVEL = "DEBUG";
+ UTIL_LOG_LEVEL = "INFO";
+ MSC_LOG_LEVEL = "ERROR";
+ ITTI_LOG_LEVEL = "ERROR";
+ MME_SCENARIO_PLAYER_LOG_LEVEL = "ERROR";
+ ASN1_VERBOSITY = "INFO";
+ };
+
+ S-GW :
+ {
+ SGW_IPV4_ADDRESS_FOR_S11 = "192.168.61.4";
+ };
+};
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/mme_fd.sprint.conf b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/mme_fd.sprint.conf
new file mode 100644
index 0000000000..6f87ed8c2b
--- /dev/null
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/mme_fd.sprint.conf
@@ -0,0 +1,169 @@
+# -------- Local ---------
+
+# Uncomment if the framework cannot resolv it.
+Identity = "@MME_FQDN@";
+Realm = "@REALM@";
+
+# TLS configuration (see previous section)
+TLS_Cred = "@PREFIX@/freeDiameter/mme.cert.pem",
+ "@PREFIX@/freeDiameter/mme.key.pem";
+TLS_CA = "@PREFIX@/freeDiameter/mme.cacert.pem";
+
+# Disable use of TCP protocol (only listen and connect in SCTP)
+# Default : TCP enabled
+No_SCTP;
+
+# This option is ignored if freeDiameter is compiled with DISABLE_SCTP option.
+# Prefer TCP instead of SCTP for establishing new connections.
+# This setting may be overwritten per peer in peer configuration blocs.
+# Default : SCTP is attempted first.
+Prefer_TCP;
+
+
+No_IPv6;
+
+# Overwrite the number of SCTP streams. This value should be kept low,
+# especially if you are using TLS over SCTP, because it consumes a lot of
+# resources in that case. See tickets 19 and 27 for some additional details on
+# this.
+# Limit the number of SCTP streams
+SCTP_streams = 3;
+
+
+# By default, freeDiameter acts as a Diameter Relay Agent by forwarding all
+# messages it cannot handle locally. This parameter disables this behavior.
+NoRelay;
+
+# Use RFC3588 method for TLS protection, where TLS is negociated after CER/CEA exchange is completed
+# on the unsecure connection. The alternative is RFC6733 mechanism, where TLS protects also the
+# CER/CEA exchange on a dedicated secure port.
+# This parameter only affects outgoing connections.
+# The setting can be also defined per-peer (see Peers configuration section).
+# Default: use RFC6733 method with separate port for TLS.
+
+#TLS_old_method;
+
+AppServThreads = 4;
+
+# Specify the addresses on which to bind the listening server. This must be
+# specified if the framework is unable to auto-detect these addresses, or if the
+# auto-detected values are incorrect. Note that the list of addresses is sent
+# in CER or CEA message, so one should pay attention to this parameter if some
+# adresses should be kept hidden.
+ListenOn = "@MME_S6A_IP_ADDR@";
+
+Port = 3870;
+SecPort = 5870;
+
+# -------- Extensions ---------
+
+# Uncomment (and create rtd.conf) to specify routing table for this peer.
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_default.fdx" : "rtd.conf";
+
+#LoadExtension = "/usr/local/lib/freeDiameter/_sample.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/app_acct.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/app_diameap.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/app_radgw.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/app_redirect.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/app_sip.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dbg_interactive.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dbg_monitor.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dbg_msg_dumps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dbg_msg_timings.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dbg_rt.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_3gpp2_avps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_CreditControl.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_CxDx.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Gx.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_NAS.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Ro.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Rx.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_S6mS6n.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_SGd.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_SLh.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Sd.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Sh.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_T4.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_T6aT6bT7.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Tsp.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_dcca.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_dcca_3gpp.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_dcca_starent.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_draftload_avps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_eap.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_etsi283034_avps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_legacy_xml.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_mip6a.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_mip6i.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_nas_mipv6.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_nasreq.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4004_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4006bis_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4072_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4590_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5447_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5580_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5777_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5778_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6734_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6942_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7155_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7683_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7944_avps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_sip.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29061_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29128_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29154_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29173_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29212_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29214_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29215_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29217_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29229_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29272_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29273_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29329_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29336_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29337_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29338_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29343_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29344_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29345_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29368_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29468_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts32299_avps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_busypeers.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_default.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_ereg.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_ignore_dh.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_load_balance.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_randomize.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_redirect.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_acct.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_app.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_hss.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_netemul.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_rt_any.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_sip.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Rf.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_S6as6d.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_S6t.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_S6c.fdx";
+
+
+# -------- Peers ---------
+
+# The framework will actively attempt to establish and maintain a connection
+# with the peers listed here.
+# For only accepting incoming connections, see the acl_wl.fx extension.
+
+# ConnectPeer
+# Declare a remote peer to which this peer must maintain a connection.
+# In addition, this allows specifying non-default parameters for this peer only
+# (for example disable SCTP with this peer, or use RFC3588-flavour TLS).
+# Note that by default, if a peer is not listed as a ConnectPeer entry, an
+# incoming connection from this peer will be rejected. If you want to accept
+# incoming connections from other peers, see the acl_wl.fdx? extension which
+# allows exactly this.
+
+ConnectPeer= "@HSS_FQDN@" { ConnectTo = "@HSS_IP_ADDR@"; No_SCTP ; No_IPv6; Prefer_TCP; No_TLS; port = 3868;};
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/redis_extern.conf b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/redis_extern.conf
new file mode 100644
index 0000000000..1ee9dd9a78
--- /dev/null
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/redis_extern.conf
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2016-present, Facebook, Inc.
+# All rights reserved.
+#
+# This source code is licensed under the BSD-style license found in the
+# LICENSE file in the root directory of this source tree. An additional grant
+# of patent rights can be found in the PATENTS file in the same directory.
+
+# Jinja template for Redis configuration
+# See the default config file for options and explanations:
+# https://github.com/antirez/redis/blob/unstable/redis.conf
+
+# TODO: make sensible, production-aware config decisions
+
+bind 192.168.61.6
+port 6380
+
+daemonize no
+loglevel notice
+
+timeout 0
+databases 1
+
+dbfilename redis_dump.rdb
+dir /data
+
+# Save the DB on disk
+
+save 900 1
+
+save 300 10
+
+save 60 1000
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml
index 4c1ceb424a..e1e992c94c 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml
@@ -58,57 +58,45 @@ services:
timeout: 5s
retries: 5
- oai_mme:
- image: oai-mme:latest
- container_name: rfsim4g-oai-mme
+ redis:
+ image: redis:6.0.5
+ container_name: rfsim4g-redis
privileged: true
- depends_on: [oai_hss]
+ networks:
+ public_net:
+ ipv4_address: 192.168.61.6
+ volumes:
+ - ../4g_rfsimulator_fdd_05MHz/redis_extern.conf:/usr/local/etc/redis/redis.conf
+ entrypoint: /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf"
+ healthcheck:
+ test: /bin/bash -c "redis-cli -h 192.168.61.6 -p 6380 ping"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ magma_mme:
+ image: magma-mme:latest
+ container_name: rfsim4g-magma-mme
+ hostname: mme
+ privileged: true
+ depends_on: [oai_hss, redis]
networks:
public_net:
ipv4_address: 192.168.61.3
environment:
+ TZ: Europe/Paris
REALM: openairinterface.org
PREFIX: /openair-mme/etc
- INSTANCE: 1
- PID_DIRECTORY: /var/run
- HSS_IP_ADDR: 192.168.61.2
HSS_HOSTNAME: hss
HSS_FQDN: hss.openairinterface.org
HSS_REALM: openairinterface.org
- MCC: '208'
- MNC: '96'
- MME_GID: 32768
- MME_CODE: 3
- TAC_0: 1
- TAC_1: 2
- TAC_2: 3
MME_FQDN: mme.openairinterface.org
- MME_S6A_IP_ADDR: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S1_MME: eth0
- MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S11: eth0
- MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S10: lo
- MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
- OUTPUT: CONSOLE
- SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
- PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
- PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
- MCC_SGW_0: '208'
- MNC3_SGW_0: '096'
- TAC_LB_SGW_0: '01'
- TAC_HB_SGW_0: '00'
- MCC_MME_0: '208'
- MNC3_MME_0: '096'
- TAC_LB_MME_0: '02'
- TAC_HB_MME_0: '00'
- MCC_MME_1: '208'
- MNC3_MME_1: '096'
- TAC_LB_MME_1: '03'
- TAC_HB_MME_1: '00'
- TAC_LB_SGW_TEST_0: '03'
- TAC_HB_SGW_TEST_0: '00'
- SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
+ FEATURES: mme_oai
+ volumes:
+ - ../4g_rfsimulator_fdd_05MHz/mme_fd.sprint.conf:/magma-mme/etc/mme_fd.conf.tmplt
+ - ../4g_rfsimulator_fdd_05MHz/mme.conf:/magma-mme/etc/mme.conf
+ - ../4g_rfsimulator_fdd_05MHz/entrypoint.sh:/magma-mme/bin/entrypoint.sh
+ entrypoint: /bin/bash -c "/magma-mme/bin/entrypoint.sh"
healthcheck:
test: /bin/bash -c "pgrep oai_mme"
interval: 10s
@@ -118,7 +106,7 @@ services:
oai_spgwc:
image: oai-spgwc:latest
privileged: true
- depends_on: [oai_mme]
+ depends_on: [magma_mme]
container_name: rfsim4g-oai-spgwc
networks:
public_net:
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml
index 4a61181afb..ad665813f2 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml
@@ -58,57 +58,45 @@ services:
timeout: 5s
retries: 5
- oai_mme:
- image: oai-mme:latest
- container_name: rfsim4g-oai-mme
+ redis:
+ image: redis:6.0.5
+ container_name: rfsim4g-redis
privileged: true
- depends_on: [oai_hss]
+ networks:
+ public_net:
+ ipv4_address: 192.168.61.6
+ volumes:
+ - ../4g_rfsimulator_fdd_05MHz/redis_extern.conf:/usr/local/etc/redis/redis.conf
+ entrypoint: /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf"
+ healthcheck:
+ test: /bin/bash -c "redis-cli -h 192.168.61.6 -p 6380 ping"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ magma_mme:
+ image: magma-mme:latest
+ container_name: rfsim4g-magma-mme
+ hostname: mme
+ privileged: true
+ depends_on: [oai_hss, redis]
networks:
public_net:
ipv4_address: 192.168.61.3
environment:
+ TZ: Europe/Paris
REALM: openairinterface.org
PREFIX: /openair-mme/etc
- INSTANCE: 1
- PID_DIRECTORY: /var/run
- HSS_IP_ADDR: 192.168.61.2
HSS_HOSTNAME: hss
HSS_FQDN: hss.openairinterface.org
HSS_REALM: openairinterface.org
- MCC: '208'
- MNC: '96'
- MME_GID: 32768
- MME_CODE: 3
- TAC_0: 1
- TAC_1: 2
- TAC_2: 3
MME_FQDN: mme.openairinterface.org
- MME_S6A_IP_ADDR: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S1_MME: eth0
- MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S11: eth0
- MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S10: lo
- MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
- OUTPUT: CONSOLE
- SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
- PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
- PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
- MCC_SGW_0: '208'
- MNC3_SGW_0: '096'
- TAC_LB_SGW_0: '01'
- TAC_HB_SGW_0: '00'
- MCC_MME_0: '208'
- MNC3_MME_0: '096'
- TAC_LB_MME_0: '02'
- TAC_HB_MME_0: '00'
- MCC_MME_1: '208'
- MNC3_MME_1: '096'
- TAC_LB_MME_1: '03'
- TAC_HB_MME_1: '00'
- TAC_LB_SGW_TEST_0: '03'
- TAC_HB_SGW_TEST_0: '00'
- SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
+ FEATURES: mme_oai
+ volumes:
+ - ../4g_rfsimulator_fdd_05MHz/mme_fd.sprint.conf:/magma-mme/etc/mme_fd.conf.tmplt
+ - ../4g_rfsimulator_fdd_05MHz/mme.conf:/magma-mme/etc/mme.conf
+ - ../4g_rfsimulator_fdd_05MHz/entrypoint.sh:/magma-mme/bin/entrypoint.sh
+ entrypoint: /bin/bash -c "/magma-mme/bin/entrypoint.sh"
healthcheck:
test: /bin/bash -c "pgrep oai_mme"
interval: 10s
@@ -118,7 +106,7 @@ services:
oai_spgwc:
image: oai-spgwc:latest
privileged: true
- depends_on: [oai_mme]
+ depends_on: [magma_mme]
container_name: rfsim4g-oai-spgwc
networks:
public_net:
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml
index 3424780791..ffa92bac49 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml
@@ -58,57 +58,45 @@ services:
timeout: 5s
retries: 5
- oai_mme:
- image: oai-mme:latest
- container_name: rfsim4g-oai-mme
+ redis:
+ image: redis:6.0.5
+ container_name: rfsim4g-redis
privileged: true
- depends_on: [oai_hss]
+ networks:
+ public_net:
+ ipv4_address: 192.168.61.6
+ volumes:
+ - ../4g_rfsimulator_fdd_05MHz/redis_extern.conf:/usr/local/etc/redis/redis.conf
+ entrypoint: /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf"
+ healthcheck:
+ test: /bin/bash -c "redis-cli -h 192.168.61.6 -p 6380 ping"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ magma_mme:
+ image: magma-mme:latest
+ container_name: rfsim4g-magma-mme
+ hostname: mme
+ privileged: true
+ depends_on: [oai_hss, redis]
networks:
public_net:
ipv4_address: 192.168.61.3
environment:
+ TZ: Europe/Paris
REALM: openairinterface.org
PREFIX: /openair-mme/etc
- INSTANCE: 1
- PID_DIRECTORY: /var/run
- HSS_IP_ADDR: 192.168.61.2
HSS_HOSTNAME: hss
HSS_FQDN: hss.openairinterface.org
HSS_REALM: openairinterface.org
- MCC: '208'
- MNC: '96'
- MME_GID: 32768
- MME_CODE: 3
- TAC_0: 1
- TAC_1: 2
- TAC_2: 3
MME_FQDN: mme.openairinterface.org
- MME_S6A_IP_ADDR: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S1_MME: eth0
- MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S11: eth0
- MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
- MME_INTERFACE_NAME_FOR_S10: lo
- MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
- OUTPUT: CONSOLE
- SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
- PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
- PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
- MCC_SGW_0: '208'
- MNC3_SGW_0: '096'
- TAC_LB_SGW_0: '01'
- TAC_HB_SGW_0: '00'
- MCC_MME_0: '208'
- MNC3_MME_0: '096'
- TAC_LB_MME_0: '02'
- TAC_HB_MME_0: '00'
- MCC_MME_1: '208'
- MNC3_MME_1: '096'
- TAC_LB_MME_1: '03'
- TAC_HB_MME_1: '00'
- TAC_LB_SGW_TEST_0: '03'
- TAC_HB_SGW_TEST_0: '00'
- SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
+ FEATURES: mme_oai
+ volumes:
+ - ../4g_rfsimulator_fdd_05MHz/mme_fd.sprint.conf:/magma-mme/etc/mme_fd.conf.tmplt
+ - ../4g_rfsimulator_fdd_05MHz/mme.conf:/magma-mme/etc/mme.conf
+ - ../4g_rfsimulator_fdd_05MHz/entrypoint.sh:/magma-mme/bin/entrypoint.sh
+ entrypoint: /bin/bash -c "/magma-mme/bin/entrypoint.sh"
healthcheck:
test: /bin/bash -c "pgrep oai_mme"
interval: 10s
@@ -118,7 +106,7 @@ services:
oai_spgwc:
image: oai-spgwc:latest
privileged: true
- depends_on: [oai_mme]
+ depends_on: [magma_mme]
container_name: rfsim4g-oai-spgwc
networks:
public_net:
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 6a39f2147e..74a23905f0 100644
--- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
@@ -241,12 +241,12 @@ services:
NSSAI_SD1: 112233
AMF_IP_ADDRESS: 192.168.71.132
GNB_NGA_IF_NAME: eth0
- GNB_NGA_IP_ADDRESS: 192.168.71.136
+ GNB_NGA_IP_ADDRESS: 192.168.71.140
GNB_NGU_IF_NAME: eth0
- GNB_NGU_IP_ADDRESS: 192.168.71.136
+ GNB_NGU_IP_ADDRESS: 192.168.71.140
F1_IF_NAME: eth0
- F1_CU_IP_ADDRESS: 192.168.71.136
- F1_DU_IP_ADDRESS: 192.168.71.138
+ F1_CU_IP_ADDRESS: 192.168.71.140
+ F1_DU_IP_ADDRESS: 192.168.71.142
F1_CU_D_PORT: 2153
F1_DU_D_PORT: 2153
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
@@ -254,7 +254,7 @@ services:
- oai-ext-dn
networks:
public_net:
- ipv4_address: 192.168.71.136
+ ipv4_address: 192.168.71.140
healthcheck:
test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s
@@ -277,12 +277,12 @@ services:
NSSAI_SD1: 112233
AMF_IP_ADDRESS: 192.168.71.132
GNB_NGA_IF_NAME: eth0
- GNB_NGA_IP_ADDRESS: 192.168.71.138
+ GNB_NGA_IP_ADDRESS: 192.168.71.142
GNB_NGU_IF_NAME: eth0
- GNB_NGU_IP_ADDRESS: 192.168.71.138
+ GNB_NGU_IP_ADDRESS: 192.168.71.142
F1_IF_NAME: eth0
- F1_CU_IP_ADDRESS: 192.168.71.136
- F1_DU_IP_ADDRESS: 192.168.71.138
+ F1_CU_IP_ADDRESS: 192.168.71.140
+ F1_DU_IP_ADDRESS: 192.168.71.142
F1_CU_D_PORT: 2153
F1_DU_D_PORT: 2153
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time
@@ -290,7 +290,7 @@ services:
- oai-cu
networks:
public_net:
- ipv4_address: 192.168.71.138
+ ipv4_address: 192.168.71.142
healthcheck:
test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s
@@ -301,7 +301,7 @@ services:
privileged: true
container_name: rfsim5g-oai-nr-ue
environment:
- RFSIMULATOR: 192.168.71.138
+ RFSIMULATOR: 192.168.71.142
FULL_IMSI: '208990100001100'
FULL_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
OPC: 'C42449363BBAD02B66D16BC975D77CC1'
@@ -313,7 +313,7 @@ services:
- oai-du
networks:
public_net:
- ipv4_address: 192.168.71.137
+ ipv4_address: 192.168.71.150
healthcheck:
test: /bin/bash -c "pgrep nr-uesoftmodem"
interval: 10s
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
index f0476b0a1e..808be7d83d 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
@@ -241,15 +241,15 @@ services:
NSSAI_SD1: 112233
AMF_IP_ADDRESS: 192.168.71.132
GNB_NGA_IF_NAME: eth0
- GNB_NGA_IP_ADDRESS: 192.168.71.136
+ GNB_NGA_IP_ADDRESS: 192.168.71.140
GNB_NGU_IF_NAME: eth0
- GNB_NGU_IP_ADDRESS: 192.168.71.136
+ GNB_NGU_IP_ADDRESS: 192.168.71.140
USE_ADDITIONAL_OPTIONS: --sa -E --rfsim --log_config.global_log_options level,nocolor,time
depends_on:
- oai-ext-dn
networks:
public_net:
- ipv4_address: 192.168.71.136
+ ipv4_address: 192.168.71.140
healthcheck:
test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s
@@ -260,7 +260,7 @@ services:
privileged: true
container_name: rfsim5g-oai-nr-ue
environment:
- RFSIMULATOR: 192.168.71.136
+ RFSIMULATOR: 192.168.71.140
FULL_IMSI: '208990100001100'
FULL_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
OPC: 'C42449363BBAD02B66D16BC975D77CC1'
@@ -272,7 +272,7 @@ services:
- oai-gnb
networks:
public_net:
- ipv4_address: 192.168.71.137
+ ipv4_address: 192.168.71.150
healthcheck:
test: /bin/bash -c "pgrep nr-uesoftmodem"
interval: 10s
diff --git a/ci-scripts/yaml_files/fr1_epc_20897/mme.conf b/ci-scripts/yaml_files/fr1_epc_20897/mme.conf
index 9dcb44ef2a..923bf1c388 100644
--- a/ci-scripts/yaml_files/fr1_epc_20897/mme.conf
+++ b/ci-scripts/yaml_files/fr1_epc_20897/mme.conf
@@ -114,7 +114,6 @@ MME :
MME_APP_LOG_LEVEL = "TRACE";
S6A_LOG_LEVEL = "TRACE";
UTIL_LOG_LEVEL = "ERROR";
- MSC_LOG_LEVEL = "ERROR";
ITTI_LOG_LEVEL = "ERROR";
ASN1_VERBOSITY = "annoying";
};
diff --git a/ci-scripts/yaml_files/magma_nsa_20897/mme.conf b/ci-scripts/yaml_files/magma_nsa_20897/mme.conf
index 242b780a40..6bdace2c28 100644
--- a/ci-scripts/yaml_files/magma_nsa_20897/mme.conf
+++ b/ci-scripts/yaml_files/magma_nsa_20897/mme.conf
@@ -121,7 +121,6 @@ MME :
S11_LOG_LEVEL = "DEBUG";
S6A_LOG_LEVEL = "DEBUG";
UTIL_LOG_LEVEL = "INFO";
- MSC_LOG_LEVEL = "ERROR";
ITTI_LOG_LEVEL = "ERROR";
MME_SCENARIO_PLAYER_LOG_LEVEL = "ERROR";
ASN1_VERBOSITY = "INFO";
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index b7b365741c..ffc2e26dc5 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -21,8 +21,10 @@
# Author: laurent THOMAS, Lionel GAUTHIER
-cmake_minimum_required (VERSION 3.0)
+cmake_minimum_required (VERSION 2.8)
+project (OpenAirInterface LANGUAGES C CXX)
+include("macros.cmake")
# System packages that are required
# We use either the cmake buildin, in ubuntu are in: /usr/share/cmake*/Modules/
@@ -48,6 +50,7 @@ include_directories(${CRYPTO_INCLUDE_DIRS})
#uhd 4.0 and iris installs by default in /usr/local
include_directories("/usr/local/include/")
#use native cmake method as this package is not in pkg-config
+add_list2_option(RF_BOARD "None" "RF head type" "None" "OAI_USRP" "OAI_BLADERF" "OAI_LMSSDR" "OAI_SIMU" "EXMIMO")
if (${RF_BOARD} STREQUAL "OAI_USRP")
find_package(Boost REQUIRED)
include_directories(${LIBBOOST_INCLUDE_DIR})
@@ -184,106 +187,6 @@ else (CUDA_FOUND)
message ("No CUDA tool installed")
endif ()
-
-###########################################
-# macros to define options as there is numerous options in oai
-################################################
-macro(add_option name val helpstr)
- if(DEFINED ${name})
- set(value ${${name}})
- else(DEFINED ${name})
- set(value ${val})
- endif()
- set(${name} ${value} CACHE STRING "${helpstr}")
- add_definitions("-D${name}=${value}")
-endmacro(add_option)
-
-macro(add_boolean_option name val helpstr)
- if(DEFINED ${name})
- set(value ${${name}})
- else(DEFINED ${name})
- set(value ${val})
- endif()
- set(${name} ${value} CACHE STRING "${helpstr}")
- set_property(CACHE ${name} PROPERTY TYPE BOOL)
- if (${value})
- add_definitions("-D${name}")
- endif (${value})
-endmacro(add_boolean_option)
-
-macro(add_integer_option name val helpstr)
- if(DEFINED ${name})
- set(value ${${name}})
- else(DEFINED ${name})
- set(value ${val})
- endif()
- set(${name} ${value} CACHE STRING "${helpstr}")
- add_definitions("-D${name}=${value}")
-endmacro(add_integer_option)
-
-macro(add_list1_option name val helpstr)
- if(DEFINED ${name})
- set(value ${${name}})
- else(DEFINED ${name})
- set(value ${val})
- endif()
- set(${name} ${value} CACHE STRING "${helpstr}")
- set_property(CACHE ${name} PROPERTY STRINGS ${ARGN})
- if(NOT "${value}" STREQUAL "False")
- add_definitions("-D${name}=${value}")
- endif()
-endmacro(add_list1_option)
-
-macro(add_list2_option name val helpstr)
- if(DEFINED ${name})
- set(value ${${name}})
- else(DEFINED ${name})
- set(value ${val})
- endif()
- set(${name} ${value} CACHE STRING "${helpstr}")
- set_property(CACHE ${name} PROPERTY STRINGS ${ARGN})
- if(NOT "${value}" STREQUAL "False")
- add_definitions("-D${value}=1")
- endif()
-endmacro(add_list2_option)
-
-macro(add_list_string_option name val helpstr)
- if(DEFINED ${name})
- set(value ${${name}})
- else(DEFINED ${name})
- set(value ${val})
- endif()
- set(${name} ${value} CACHE STRING "${helpstr}")
- set_property(CACHE ${name} PROPERTY STRINGS ${ARGN})
- if(NOT "${value}" STREQUAL "False")
- add_definitions("-D${name}=\"${value}\"")
- endif()
-endmacro(add_list_string_option)
-
-# this function should produce the same value as the macro MAKE_VERSION defined in the C code (file types.h)
-function(make_version VERSION_VALUE)
- math(EXPR RESULT "0")
- foreach (ARG ${ARGN})
- math(EXPR RESULT "${RESULT} * 16 + ${ARG}")
- endforeach()
- set(${VERSION_VALUE} "${RESULT}" PARENT_SCOPE)
-endfunction()
-
-macro(compile_asn1 asn1Source asn1cCmd ResultFlag)
- # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
- execute_process(COMMAND ${asn1cCmd} ${asn1Source} RESULT_VARIABLE ret)
-
- if (NOT ${ret} STREQUAL 0)
- message(FATAL_ERROR "${ret}: error")
- endif (NOT ${ret} STREQUAL 0)
-
- add_custom_target (
- ${ResultFlag} ALL
- ${asn1cCmd} ${asn1Source}
- DEPENDS ${asn1Source}
- )
-endmacro(compile_asn1)
-
####################################################
# compilation flags
#############################################
@@ -341,10 +244,10 @@ set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} ${commonOpts} -std=c++11")
-
+add_boolean_option(SANITIZE_ADDRESS False "enable the address sanitizer (ASan)")
if (SANITIZE_ADDRESS)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan -fno-common")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan -fno-common")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-common")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-common")
endif ()
add_definitions("-DASN_DISABLE_OER_SUPPORT")
@@ -786,23 +689,14 @@ add_library(F1AP ${F1AP_C_FILES} )
add_list1_option(NB_ANTENNAS_RX "4" "Number of antennas in reception" "1" "2" "4")
add_list1_option(NB_ANTENNAS_TX "4" "Number of antennas in transmission" "1" "2" "4")
-add_list2_option(RF_BOARD "EXMIMO" "RF head type" "None" "OAI_USRP" "OAI_BLADERF" "OAI_LMSSDR" "OAI_SIMU")
-
-add_list2_option(TRANSP_PRO "None" "Transport protocol type" "None" "ETHERNET")
#NOKIA config enhancement
-set (CONFIG_ROOTDIR
- ${OPENAIR_DIR}/common/config
- )
-set (CONFIG_SOURCES
+set (CONFIG_ROOTDIR ${OPENAIR_DIR}/common/config)
+add_library(CONFIG_LIB
${CONFIG_ROOTDIR}/config_load_configmodule.c
${CONFIG_ROOTDIR}/config_userapi.c
${CONFIG_ROOTDIR}/config_cmdline.c
- )
-set (CONFIG_LIBCONFIG_SOURCES
- ${CONFIG_ROOTDIR}/libconfig/config_libconfig.c
- )
-add_library(CONFIG_LIB ${CONFIG_SOURCES})
-add_library(params_libconfig MODULE ${CONFIG_LIBCONFIG_SOURCES} )
+)
+add_library(params_libconfig MODULE ${CONFIG_ROOTDIR}/libconfig/config_libconfig.c)
target_link_libraries(params_libconfig config)
# shared library loader
set (SHLIB_LOADER_SOURCES
@@ -938,10 +832,6 @@ add_boolean_option(CPU_AFFINITY False "Enable CPU Affinity of threads (only vali
add_boolean_option(NAS_NETLINK False "useless ??? Must be True to compile nasmesh driver without rtai ????")
add_boolean_option(OAI_NW_DRIVER_USE_NETLINK True "????")
-add_boolean_option(MESSAGE_CHART_GENERATOR False "For generating sequence diagrams")
-add_boolean_option(MESSAGE_CHART_GENERATOR_RLC_MAC False "trace RLC-MAC exchanges in sequence diagrams")
-add_boolean_option(MESSAGE_CHART_GENERATOR_PHY False "trace some PHY exchanges in sequence diagrams")
-
add_boolean_option(UE_EXPANSION False "enable UE_EXPANSION with max 256 UE")
add_boolean_option(PHY_TX_THREAD False "enable UE_EXPANSION with max 256 UE")
add_boolean_option(PRE_SCD_THREAD False "enable UE_EXPANSION with max 256 UE")
@@ -1019,7 +909,6 @@ add_boolean_option(TRACE_RLC_UM_TX_STATUS False "TRACE for RLC UM, TO BE CHANGE
##########################
#add_boolean_option(LINK_ENB_PDCP_TO_IP_DRIVER False "For eNB, PDCP communicate with a IP driver")
#add_boolean_option(LINK_ENB_PDCP_TO_GTPV1U True "For eNB, PDCP communicate with GTP-U protocol (eNB<->S-GW)")
-add_definitions(-DNEW_GTPU=1)
##########################
# RRC LAYER OPTIONS
@@ -1097,8 +986,7 @@ include_directories("${OPENAIR3_DIR}/S1AP")
include_directories("${OPENAIR2_DIR}/X2AP")
include_directories("${OPENAIR2_DIR}/M2AP")
include_directories("${OPENAIR2_DIR}/F1AP")
-include_directories("${OPENAIR3_DIR}/UDP")
-include_directories("${OPENAIR3_DIR}/GTPV1-U")
+include_directories("${OPENAIR3_DIR}/ocp-gtpu")
include_directories("${OPENAIR3_DIR}/M3AP")
include_directories("${OPENAIR3_DIR}/MME_APP")
include_directories("${OPENAIR_DIR}/targets/COMMON")
@@ -1111,7 +999,6 @@ include_directories("${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/S1AP")
include_directories("${OPENAIR2_DIR}/UTIL/OSA")
include_directories("${OPENAIR2_DIR}/UTIL/LFDS/liblfds6.1.1/liblfds611/inc")
include_directories("${OPENAIR2_DIR}/UTIL/LFDS/liblfds7.0.0/liblfds700/inc")
-include_directories("${OPENAIR2_DIR}/LAYER2/PROTO_AGENT")
include_directories("${OPENAIR2_DIR}/UTIL/MEM")
include_directories("${OPENAIR2_DIR}/UTIL/LISTS")
include_directories("${OPENAIR2_DIR}/UTIL/FIFO")
@@ -1124,8 +1011,6 @@ include_directories("${OPENAIR2_DIR}/UTIL/CLI")
include_directories("${OPENAIR2_DIR}/UTIL/OPT")
include_directories("${OPENAIR2_DIR}/UTIL/OMV")
include_directories("${OPENAIR2_DIR}/RRC/LTE/MESSAGES")
-include_directories("${OPENAIR3_DIR}/GTPV1-U/nw-gtpv1u/shared")
-include_directories("${OPENAIR3_DIR}/GTPV1-U/nw-gtpv1u/include")
include_directories("${OPENAIR_DIR}")
# Utilities Library
@@ -1270,27 +1155,6 @@ set(FSPT_MSG_LIB FSPT_MSG)
message("fspt c dir is : ${FSPT_C_DIR}")
include_directories (${FSPT_C_DIR})
-# add_library(ASYNC_IF
-# ${OPENAIR2_DIR}/UTIL/ASYNC_IF/socket_link.c
-# ${OPENAIR2_DIR}/UTIL/ASYNC_IF/link_manager.c
-# ${OPENAIR2_DIR}/UTIL/ASYNC_IF/message_queue.c
-# ${OPENAIR2_DIR}/UTIL/ASYNC_IF/ringbuffer_queue.c
-# )
-# set(ASYNC_IF_LIB ASYNC_IF)
-# include_directories(${OPENAIR2_DIR}/UTIL/ASYNC_IF)
-
-add_library(PROTO_AGENT
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_handler.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_common.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_net_comm.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_async.c
- )
-set(PROTO_AGENT_LIB PROTO_AGENT)
-include_directories(${OPENAIR2_DIR}/LAYER2/PROTO_AGENT)
-
-
-
set(PROTOBUF_LIB "protobuf-c")
#set(PROTOBUF_LIB "protobuf") #for Cpp
@@ -1301,60 +1165,19 @@ add_library(HASHTABLE
)
include_directories(${OPENAIR_DIR}/common/utils/hashtable)
-add_library(msc MODULE ${OPENAIR_DIR}/common/utils/msc/msc.c )
-target_link_libraries (msc LFDS)
-
-include_directories(${OPENAIR_DIR}/common/utils/msc)
-
-set(UTIL_SRC
- # ${OPENAIR2_DIR}/UTIL/CLI/cli.c
- # ${OPENAIR2_DIR}/UTIL/CLI/cli_cmd.c
- # ${OPENAIR2_DIR}/UTIL/CLI/cli_server.c
- ${OPENAIR2_DIR}/UTIL/FIFO/pad_list.c
+add_library(UTIL
${OPENAIR2_DIR}/UTIL/LISTS/list.c
${OPENAIR2_DIR}/UTIL/LISTS/list2.c
${OPENAIR_DIR}/common/utils/LOG/log.c
${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.c
${OPENAIR2_DIR}/UTIL/MATH/oml.c
- # ${OPENAIR2_DIR}/UTIL/MEM/mem_block.c
- # ${OPENAIR2_DIR}/UTIL/OCG/OCG.c
- # ${OPENAIR2_DIR}/UTIL/OCG/OCG_create_dir.c
- # ${OPENAIR2_DIR}/UTIL/OCG/OCG_detect_file.c
- # ${OPENAIR2_DIR}/UTIL/OCG/OCG_generate_report.c
- # ${OPENAIR2_DIR}/UTIL/OCG/OCG_parse_filename.c
- # ${OPENAIR2_DIR}/UTIL/OCG/OCG_parse_XML.c
- # ${OPENAIR2_DIR}/UTIL/OCG/OCG_save_XML.c
- # ${OPENAIR2_DIR}/UTIL/OMG/common.c
- # ${OPENAIR2_DIR}/UTIL/OMG/grid.c
- # ${OPENAIR2_DIR}/UTIL/OMG/job.c
- # ${OPENAIR2_DIR}/UTIL/OMG/mobility_parser.c
- # ${OPENAIR2_DIR}/UTIL/OMG/omg.c
- # ${OPENAIR2_DIR}/UTIL/OMG/omg_hashtable.c
- # ${OPENAIR2_DIR}/UTIL/OMG/rwalk.c
- # ${OPENAIR2_DIR}/UTIL/OMG/rwp.c
- # ${OPENAIR2_DIR}/UTIL/OMG/static.c
- # ${OPENAIR2_DIR}/UTIL/OMG/steadystaterwp.c
- # ${OPENAIR2_DIR}/UTIL/OMG/trace.c
- # ${OPENAIR2_DIR}/UTIL/OMG/trace_hashtable.c
${OPENAIR2_DIR}/UTIL/OPT/probe.c
- # ${OPENAIR2_DIR}/UTIL/OTG/otg_tx.c
- # ${OPENAIR2_DIR}/UTIL/OTG/otg.c
- # ${OPENAIR2_DIR}/UTIL/OTG/otg_kpi.c
- # ${OPENAIR2_DIR}/UTIL/OTG/otg_models.c
- # ${OPENAIR2_DIR}/UTIL/OTG/otg_form.c
- # ${OPENAIR2_DIR}/UTIL/OTG/otg_rx.c
- )
-add_library(UTIL ${UTIL_SRC})
-add_dependencies(UTIL rrc_flag)
-
-#set(OMG_SUMO_SRC
-# ${OPENAIR2_DIR}/UTIL/OMG/client_traci_OMG.c
-# ${OPENAIR2_DIR}/UTIL/OMG/id_manager.c
-# ${OPENAIR2_DIR}/UTIL/OMG/sumo.c
-# ${OPENAIR2_DIR}/UTIL/OMG/socket_traci_OMG.c
-# ${OPENAIR2_DIR}/UTIL/OMG/storage_traci_OMG.c
-# )
-#add_library(OMG_SUMO ${OMG_SUMO_SRC})
+ ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
+ ${OPENAIR_DIR}/common/utils/utils.c
+ ${OPENAIR_DIR}/common/utils/system.c
+ ${OPENAIR_DIR}/common/utils/backtrace.c
+ ${OPENAIR_DIR}/common/utils/time_meas.c
+)
set(SECU_OSA_SRC
${OPENAIR2_DIR}/UTIL/OSA/osa_key_deriver.c
@@ -1617,7 +1440,6 @@ set(PHY_SRC_COMMON
${OPENAIR1_DIR}/PHY/TOOLS/signal_energy.c
${OPENAIR1_DIR}/PHY/TOOLS/dB_routines.c
${OPENAIR1_DIR}/PHY/TOOLS/sqrt.c
- ${OPENAIR1_DIR}/PHY/TOOLS/time_meas.c
${OPENAIR1_DIR}/PHY/TOOLS/lut.c
)
@@ -1754,7 +1576,6 @@ set(PHY_SRC_UE
${OPENAIR1_DIR}/PHY/TOOLS/signal_energy.c
${OPENAIR1_DIR}/PHY/TOOLS/dB_routines.c
${OPENAIR1_DIR}/PHY/TOOLS/sqrt.c
- ${OPENAIR1_DIR}/PHY/TOOLS/time_meas.c
${OPENAIR1_DIR}/PHY/TOOLS/lut.c
${PHY_POLARSRC}
${PHY_SMALLBLOCKSRC}
@@ -1808,7 +1629,6 @@ set(PHY_SRC_UE
${OPENAIR1_DIR}/PHY/TOOLS/signal_energy.c
${OPENAIR1_DIR}/PHY/TOOLS/dB_routines.c
${OPENAIR1_DIR}/PHY/TOOLS/sqrt.c
- ${OPENAIR1_DIR}/PHY/TOOLS/time_meas.c
${OPENAIR1_DIR}/PHY/TOOLS/lut.c
${OPENAIR1_DIR}/PHY/INIT/nr_init_ue.c
# ${OPENAIR1_DIR}/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_test.c
@@ -2036,6 +1856,7 @@ set(NR_L2_SRC_UE
${NR_SDAP_SRC}
${NR_UE_RRC_DIR}/L2_interface_ue.c
${NR_UE_RRC_DIR}/main_ue.c
+ ${NR_RRC_DIR}/nr_rrc_config.c
${NR_UE_RRC_DIR}/rrc_UE.c
${NR_UE_RRC_DIR}/rrc_nsa.c
)
@@ -2161,7 +1982,6 @@ add_library(L2_NR
${MAC_NR_SRC}
${GNB_APP_SRC}
)
-target_compile_definitions(L2_NR PUBLIC NEW_GTPU)
add_library(L2_LTE_NR
${L2_RRC_SRC}
@@ -2169,7 +1989,6 @@ add_library(L2_LTE_NR
${ENB_APP_SRC}
${MCE_APP_SRC}
)
-target_compile_definitions(L2_LTE_NR PUBLIC NEW_GTPU)
add_dependencies(L2_NR rrc_flag nr_rrc_flag s1ap_flag x2_flag)
@@ -2210,32 +2029,14 @@ add_library(CN_UTILS
${OPENAIR3_DIR}/UTILS/mcc_mnc_itu.c
)
-set(GTPV1U_DIR ${OPENAIR3_DIR}/GTPV1-U)
-
-add_library (GTPV1U_OCP
+add_library (GTPV1U
${NR_RRC_DIR}/rrc_gNB_GTPV1U.c
${RRC_DIR}/rrc_eNB_GTPV1U.c
${OPENAIR3_DIR}/ocp-gtpu/gtp_itf.cpp
)
-target_compile_definitions(GTPV1U_OCP PUBLIC NEW_GTPU)
-add_dependencies(GTPV1U_OCP rrc_flag)
+add_dependencies(GTPV1U rrc_flag)
include_directories(${OPENAIR3_DIR}/ocp-gtp)
-#NR case
-set (NR_GTPV1U_SRC
- ${NR_RRC_DIR}/rrc_gNB_GTPV1U.c
- ${RRC_DIR}/rrc_eNB_GTPV1U.c
- ${GTPV1U_DIR}/gtpv1u_eNB.c
- ${GTPV1U_DIR}/gtpv1u_gNB.c
- ${GTPV1U_DIR}/nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c
- ${GTPV1U_DIR}/nw-gtpv1u/src/NwGtpv1uTrxn.c
- ${GTPV1U_DIR}/nw-gtpv1u/src/NwGtpv1uMsg.c
- ${GTPV1U_DIR}/nw-gtpv1u/src/NwGtpv1u.c
- ${GTPV1U_DIR}/gtpv1u_teid_pool.c
- )
-add_library(NR_GTPV1U ${NR_GTPV1U_SRC})
-add_dependencies(NR_GTPV1U rrc_flag)
-
set (MME_APP_SRC
${OPENAIR3_DIR}/MME_APP/mme_app.c
${OPENAIR3_DIR}/MME_APP/mme_config.c
@@ -2251,9 +2052,6 @@ set(SCTP_SRC
add_library(SCTP_CLIENT ${SCTP_SRC})
add_dependencies(SCTP_CLIENT rrc_flag)
-add_library(UDP ${OPENAIR3_DIR}/UDP/udp_eNB_task.c)
-add_dependencies(UDP rrc_flag)
-
set(NAS_SRC ${OPENAIR3_DIR}/NAS/)
set(libnas_api_OBJS
${NAS_SRC}COMMON/API/NETWORK/as_message.c
@@ -2750,7 +2548,7 @@ add_library(minimal_lib
${OPENAIR_DIR}/common/utils/minimal_stub.c
${T_SOURCE}
)
-target_link_libraries(minimal_lib pthread dl ${T_LIB} ${CONFIG_LIB})
+target_link_libraries(minimal_lib pthread dl ${T_LIB} CONFIG_LIB)
add_executable(nfapi_test
${OPENAIR_DIR}/openair2/NR_PHY_INTERFACE/nfapi_5g_test.c
@@ -2779,7 +2577,6 @@ add_executable(lte-softmodem
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
${OPENAIR_TARGETS}/RT/USER/ru_control.c
${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
${OPENAIR_DIR}/executables/softmodem-common.c
${OPENAIR2_DIR}/ENB_APP/NB_IoT_interface.c
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
@@ -2794,34 +2591,30 @@ add_executable(lte-softmodem
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/socket.c
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${PHY_INTERFACE_DIR}/queue_t.c
${OPENAIR_DIR}/common/utils/lte/ue_power.c
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
${XFORMSINTERFACE_SOURCE}
${T_SOURCE}
- ${CONFIG_SOURCES}
${SHLIB_LOADER_SOURCES}
)
add_dependencies(lte-softmodem rrc_flag s1ap_flag x2_flag oai_iqplayer)
target_link_libraries (lte-softmodem
-Wl,--start-group
- RRC_LIB NR_RRC_LIB S1AP_LIB S1AP_ENB M2AP_LIB M2AP_ENB X2AP_LIB X2AP_ENB M3AP_LIB M3AP_ENB GTPV1U_OCP F1AP_LIB F1AP SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_LIB SCHED_RU_LIB
+ RRC_LIB NR_RRC_LIB S1AP_LIB S1AP_ENB M2AP_LIB M2AP_ENB X2AP_LIB X2AP_ENB M3AP_LIB M3AP_ENB GTPV1U F1AP_LIB F1AP SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
PHY_COMMON PHY PHY_RU LFDS L2 L2_LTE NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB MISC_NFAPI_LTE_LIB LFDS7
- ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB} ${PROTO_AGENT_LIB}
+ ${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB}
-Wl,--end-group z dl)
target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES})
-target_link_libraries (lte-softmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
+target_link_libraries (lte-softmodem pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
target_link_libraries (lte-softmodem ${LIB_LMS_LIBRARIES})
target_link_libraries (lte-softmodem ${T_LIB})
add_executable(ocp-enb
${OPENAIR_DIR}/executables/main-ocp.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
${OPENAIR_DIR}/executables/softmodem-common.c
${OPENAIR_DIR}/executables/main-fs6.c
${OPENAIR_DIR}/executables/transport_split.c
@@ -2837,14 +2630,11 @@ add_executable(ocp-enb
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/socket.c
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/lte/ue_power.c
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
${PHY_INTERFACE_DIR}/queue_t.c
${XFORMSINTERFACE_SOURCE}
${T_SOURCE}
- ${CONFIG_SOURCES}
${SHLIB_LOADER_SOURCES}
)
add_dependencies(ocp-enb rrc_flag s1ap_flag x2_flag oai_iqplayer coding params_libconfig rfsimulator)
@@ -2852,39 +2642,11 @@ add_dependencies(ocp-enb rrc_flag s1ap_flag x2_flag oai_iqplayer coding params_l
target_link_libraries (ocp-enb
-Wl,--start-group
- RRC_LIB NR_RRC_LIB S1AP_LIB S1AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB X2AP_LIB X2AP_ENB M3AP_LIB M3AP_ENB GTPV1U_OCP SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_LIB SCHED_RU_LIB
+ RRC_LIB NR_RRC_LIB S1AP_LIB S1AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB X2AP_LIB X2AP_ENB M3AP_LIB M3AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
PHY_COMMON PHY PHY_RU LFDS L2 L2_LTE NFAPI_COMMON_LIB NFAPI_LIB MISC_NFAPI_LTE_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB LFDS7 SIMU_COMMON
- ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB} ${PROTO_AGENT_LIB}
+ ${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB}
-Wl,--end-group z dl)
-target_link_libraries (ocp-enb ${LIBXML2_LIBRARIES} pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${LIB_LMS_LIBRARIES} ${T_LIB})
-
-add_executable(cu_test
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/cu_test.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_handler.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_common.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_net_comm.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_async.c
- ${T_SOURCE}
-)
-target_link_libraries(cu_test
- ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FSPT_MSG_LIB} ${PROTOBUF_LIB}
- ${PROTO_AGENT_LIB} pthread UTIL ${T_LIB} dl ITTI
-)
-
-add_executable(du_test
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/du_test.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_handler.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_common.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_net_comm.c
- ${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/proto_agent_async.c
- ${T_SOURCE}
-)
-target_link_libraries(du_test
- ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FSPT_MSG_LIB} ${PROTOBUF_LIB}
- ${PROTO_AGENT_LIB} pthread UTIL ${T_LIB} dl ITTI
-)
+target_link_libraries (ocp-enb ${LIBXML2_LIBRARIES} pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${LIB_LMS_LIBRARIES} ${T_LIB})
add_executable(oairu
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
@@ -2893,23 +2655,18 @@ add_executable(oairu
${OPENAIR_TARGETS}/ARCH/COMMON/record_player.c
${OPENAIR_DIR}/executables/softmodem-common.c
${OPENAIR_DIR}/openair1/SCHED/phy_procedures_lte_common.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
${OPENAIR_DIR}/executables/main_ru.c
${T_SOURCE}
- ${OPENAIR_DIR}/common/utils/LOG/log.c
- ${CONFIG_SOURCES}
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
${SHLIB_LOADER_SOURCES}
)
target_link_libraries (oairu
-Wl,--start-group
SCHED_RU_LIB
- PHY_COMMON PHY_RU
+ PHY_COMMON PHY_RU UTIL
-Wl,--end-group z dl)
-target_link_libraries (oairu pthread m ${CONFIG_LIB} rt ${CMAKE_DL_LIBS} ${T_LIB})
+target_link_libraries (oairu pthread m CONFIG_LIB rt ${CMAKE_DL_LIBS} ${T_LIB})
# lte-uesoftmodem is UE implementation
@@ -2928,13 +2685,10 @@ add_executable(lte-uesoftmodem
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/socket.c
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/lte/ue_power.c
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
${XFORMSINTERFACE_SOURCE}
${T_SOURCE}
- ${CONFIG_SOURCES}
${SHLIB_LOADER_SOURCES}
)
@@ -2946,13 +2700,13 @@ endif()
target_link_libraries (lte-uesoftmodem
-Wl,--start-group
RRC_LIB NR_RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB
- SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON
+ SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON
PHY_UE PHY_RU LFDS L2_UE L2_LTE LFDS7 SIMU_COMMON SIMU NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB MISC_NFAPI_LTE_LIB
- ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${ATLAS_LIBRARIES}
+ ${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${ATLAS_LIBRARIES}
-Wl,--end-group z dl)
target_link_libraries (lte-uesoftmodem ${LIBXML2_LIBRARIES})
-target_link_libraries (lte-uesoftmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
+target_link_libraries (lte-uesoftmodem pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
target_link_libraries (lte-uesoftmodem ${LIB_LMS_LIBRARIES})
target_link_libraries (lte-uesoftmodem ${T_LIB})
@@ -2965,7 +2719,6 @@ add_executable(nr-softmodem
${s1ap_h}
# ${OPENAIR_BIN_DIR}/messages_xml.h
${OPENAIR_DIR}/executables/nr-gnb.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
${OPENAIR_DIR}/executables/nr-ru.c
${OPENAIR_DIR}/executables/nr-softmodem.c
${OPENAIR_DIR}/executables/softmodem-common.c
@@ -2975,75 +2728,31 @@ add_executable(nr-softmodem
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/lte/ue_power.c
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
${PHY_INTERFACE_DIR}/queue_t.c
${XFORMSINTERFACE_SOURCE}
${T_SOURCE}
- ${CONFIG_SOURCES}
${SHLIB_LOADER_SOURCES}
${OPENAIR2_DIR}/ENB_APP/flexran_agent_ran_api_to_fix.c
)
-target_compile_definitions(nr-softmodem PUBLIC NEW_GTPU)
target_link_libraries (nr-softmodem
-Wl,--start-group
- UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS GTPV1U_OCP SECU_CN SECU_OSA
- ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} RRC_LIB NR_RRC_LIB
+ UTIL HASHTABLE SCTP_CLIENT SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS GTPV1U SECU_CN SECU_OSA
+ ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${RAL_LIB} ${NAS_UE_LIB} RRC_LIB NR_RRC_LIB
NGAP_LIB NGAP_GNB S1AP_LIB S1AP_ENB L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
- X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${PROTO_AGENT_LIB} ${FSPT_MSG_LIB}
+ X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${FSPT_MSG_LIB}
-Wl,--end-group z dl)
target_link_libraries (nr-softmodem ${LIBXML2_LIBRARIES})
-target_link_libraries (nr-softmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
+target_link_libraries (nr-softmodem pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
target_link_libraries (nr-softmodem ${LIB_LMS_LIBRARIES})
target_link_libraries (nr-softmodem ${T_LIB})
add_dependencies( nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
-add_executable(ocp-gnb
- ${rrc_h}
- ${nr_rrc_h}
- ${s1ap_h}
-# ${OPENAIR_BIN_DIR}/messages_xml.h
- ${OPENAIR_DIR}/executables/ocp-gnb.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
- ${OPENAIR_DIR}/executables/softmodem-common.c
- ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
- ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
- ${OPENAIR_TARGETS}/ARCH/COMMON/record_player.c
- ${OPENAIR2_DIR}/RRC/NAS/nas_config.c
- ${OPENAIR2_DIR}/RRC/NAS/rb_config.c
- ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
- ${OPENAIR_DIR}/common/utils/nr/nr_common.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
- ${PHY_INTERFACE_DIR}/queue_t.c
- ${XFORMS_SOURCE_NR}
- ${T_SOURCE}
- ${CONFIG_SOURCES}
- ${SHLIB_LOADER_SOURCES}
- ${XFORMSINTERFACE_SOURCE}
- )
-
-target_link_libraries (ocp-gnb
- -Wl,--start-group
- UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS GTPV1U_OCP SECU_CN SECU_OSA
- ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} RRC_LIB NR_RRC_LIB
- NGAP_LIB NGAP_GNB S1AP_LIB S1AP_ENB L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
- X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB SIMU_COMMON
- -Wl,--end-group z dl)
-
-target_link_libraries (ocp-gnb ${LIBXML2_LIBRARIES} )
-target_link_libraries (ocp-gnb pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
-target_link_libraries (ocp-gnb ${LIB_LMS_LIBRARIES})
-target_link_libraries (ocp-gnb ${T_LIB})
-add_dependencies(ocp-gnb ldpc_orig ldpc_optim ldpc_optim8seg ldpc params_libconfig rfsimulator oai_usrpdevif rfsimulator nrscope)
-
-
# nr-uesoftmodem is UE implementation
#######################################
@@ -3051,7 +2760,6 @@ add_executable(nr-uesoftmodem
${rrc_h}
${s1ap_h}
# ${OPENAIR_BIN_DIR}/messages_xml.h
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
${OPENAIR_DIR}/executables/nr-uesoftmodem.c
${OPENAIR_DIR}/executables/nr-ue.c
${OPENAIR_DIR}/executables/softmodem-common.c
@@ -3063,28 +2771,24 @@ add_executable(nr-uesoftmodem
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
${XFORMSINTERFACE_SOURCE}
${T_SOURCE}
- ${UTIL_SRC}
- ${CONFIG_SOURCES}
${SHLIB_LOADER_SOURCES}
)
target_link_libraries (nr-uesoftmodem
-Wl,--start-group
- RRC_LIB NR_RRC_LIB NGAP_LIB NGAP_GNB SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB
+ RRC_LIB NR_RRC_LIB NGAP_LIB NGAP_GNB SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB
PHY_COMMON PHY_NR_COMMON PHY_UE PHY_NR_UE PHY_RU LFDS NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB
NFAPI_USER_LIB MISC_NFAPI_NR_LIB S1AP_LIB S1AP_ENB
- ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
+ ${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
NFAPI_USER_LIB S1AP_LIB S1AP_ENB
- ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES} LIB_5GNAS_GNB LIB_NAS_SIMUE ${NAS_SIM_LIB}
+ ${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES} LIB_5GNAS_GNB LIB_NAS_SIMUE ${NAS_SIM_LIB}
-Wl,--end-group z dl)
target_link_libraries (nr-uesoftmodem ${LIBXML2_LIBRARIES})
-target_link_libraries (nr-uesoftmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
+target_link_libraries (nr-uesoftmodem pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
target_link_libraries (nr-uesoftmodem ${LIB_LMS_LIBRARIES})
target_link_libraries (nr-uesoftmodem ${T_LIB})
@@ -3092,7 +2796,6 @@ add_dependencies( nr-uesoftmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
if (CUDA_FOUND)
add_dependencies( nr-uesoftmodem ldpc_cuda)
add_dependencies( nr-softmodem ldpc_cuda)
- add_dependencies( ocp-gnb ldpc_cuda)
endif (CUDA_FOUND)
###################################"
# Addexecutables for tests
@@ -3106,30 +2809,25 @@ endif (CUDA_FOUND)
add_executable(dlsim_tm4
${OPENAIR1_DIR}/SIMULATION/LTE_PHY/dlsim_tm4.c
${OPENAIR1_DIR}/PHY/TOOLS/lte_phy_scope_tm4.c
- ${OPENAIR_DIR}/common/utils/system.c
${T_SOURCE}
)
target_link_libraries (dlsim_tm4
-Wl,--start-group SIMU_COMMON SIMU UTIL SCHED_LIB SCHED_RU_LIB PHY LFDS ITTI -Wl,--end-group
- pthread m rt ${CONFIG_LIB} ${ATLAS_LIBRARIES} ${T_LIB}
+ pthread m rt CONFIG_LIB ${ATLAS_LIBRARIES} ${T_LIB}
)
add_executable(rftest
${OPENAIR_DIR}/openair1/PHY/TOOLS/calibration_test.c
${OPENAIR_DIR}/openair1/PHY/TOOLS/calibration_scope.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
${OPENAIR_DIR}/executables/softmodem-common.c
- ${CONFIG_SOURCES}
${SHLIB_LOADER_SOURCES}
)
-target_link_libraries(rftest minimal_lib PHY_NR_COMMON pthread dl m forms ${T_LIB} )
+target_link_libraries(rftest minimal_lib CONFIG_LIB PHY_NR_COMMON UTIL pthread dl m forms ${T_LIB} )
add_executable(polartest
${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/polartest.c
- ${OPENAIR_DIR}/common/utils/backtrace.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
- ${OPENAIR_DIR}/common/utils/system.c
${T_SOURCE}
${SHLIB_LOADER_SOURCES}
)
@@ -3140,9 +2838,7 @@ target_link_libraries(polartest
add_executable(smallblocktest
${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/smallblocktest.c
- ${OPENAIR_DIR}/common/utils/backtrace.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
- ${OPENAIR_DIR}/common/utils/system.c
${T_SOURCE}
${SHLIB_LOADER_SOURCES}
)
@@ -3172,11 +2868,7 @@ target_link_libraries(ldpctest
add_executable(nr_dlschsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlschsim.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
- ${UTIL_SRC}
${T_SOURCE}
${SHLIB_LOADER_SOURCES}
)
@@ -3187,11 +2879,7 @@ target_link_libraries(nr_dlschsim
add_executable(nr_pbchsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/pbchsim.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
- ${UTIL_SRC}
${T_SOURCE}
${SHLIB_LOADER_SOURCES}
)
@@ -3203,12 +2891,7 @@ target_link_libraries(nr_pbchsim
#PUCCH ---> Prashanth
add_executable(nr_pucchsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/pucchsim.c
- ${OPENAIR_DIR}/common/utils/backtrace.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
- ${OPENAIR_DIR}/common/utils/system.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
- ${UTIL_SRC}
${T_SOURCE}
${SHLIB_LOADER_SOURCES}
)
@@ -3219,17 +2902,13 @@ target_link_libraries(nr_pucchsim
add_executable(nr_dlsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlsim.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
${OPENAIR_DIR}/executables/softmodem-common.c
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
${NR_UE_RRC_DIR}/rrc_nsa.c
${NFAPI_USER_DIR}/nfapi.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
${PHY_INTERFACE_DIR}/queue_t.c
- ${UTIL_SRC}
${T_SOURCE}
${SHLIB_LOADER_SOURCES}
)
@@ -3241,17 +2920,13 @@ target_compile_definitions(nr_dlsim PUBLIC -DPHYSICAL_SIMULATOR)
add_executable(nr_prachsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/prachsim.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
${OPENAIR1_DIR}/SCHED_NR/phy_procedures_nr_common.c
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
${NR_UE_RRC_DIR}/rrc_nsa.c
${NFAPI_USER_DIR}/nfapi.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
${PHY_INTERFACE_DIR}/queue_t.c
- ${UTIL_SRC}
${T_SOURCE}
${SHLIB_LOADER_SOURCES})
target_link_libraries(nr_prachsim
@@ -3260,12 +2935,8 @@ target_link_libraries(nr_prachsim
add_executable(nr_ulschsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulschsim.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
${PHY_INTERFACE_DIR}/queue_t.c
- ${UTIL_SRC}
${T_SOURCE}
${SHLIB_LOADER_SOURCES}
)
@@ -3276,9 +2947,6 @@ target_link_libraries(nr_ulschsim
add_executable(nr_ulsim
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulsim.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
${OPENAIR_DIR}/executables/softmodem-common.c
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
@@ -3286,7 +2954,6 @@ add_executable(nr_ulsim
${NR_UE_RRC_DIR}/rrc_nsa.c
${NFAPI_USER_DIR}/nfapi.c
${PHY_INTERFACE_DIR}/queue_t.c
- ${UTIL_SRC}
${T_SOURCE}
${SHLIB_LOADER_SOURCES}
)
@@ -3300,58 +2967,21 @@ foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim pr
add_executable(${myExe}
${OPENAIR1_DIR}/SIMULATION/LTE_PHY/${myExe}.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
- ${OPENAIR_DIR}/common/utils/backtrace.c
- ${OPENAIR_DIR}/common/utils/system.c
- ${OPENAIR_DIR}/common/utils/utils.c
${OPENAIR_DIR}/common/utils/lte/ue_power.c
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
${OPENAIR1_DIR}/PHY/INIT/lte_param_init.c
${XFORMS_SOURCE}
${T_SOURCE}
- ${CONFIG_SOURCES}
${SHLIB_LOADER_SOURCES}
${NFAPI_USER_DIR}/nfapi.c
)
target_link_libraries (${myExe}
-Wl,--start-group SIMU_COMMON SIMU UTIL SCHED_LIB SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_NR_COMMON PHY PHY_UE PHY_RU LFDS ITTI LFDS7 -Wl,--end-group
- pthread m rt ${CONFIG_LIB} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${T_LIB} dl
+ pthread m rt CONFIG_LIB ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${T_LIB} dl
)
endforeach(myExe)
-add_executable(test_epc_generate_scenario
- ${OPENAIR3_DIR}/TEST/EPC_TEST/generate_scenario.c
- ${OPENAIR3_DIR}/TEST/EPC_TEST/generate_scenario.h
- ${OPENAIR2_DIR}/ENB_APP/enb_config.h
- ${OPENAIR2_DIR}/COMMON/commonDef.h
- ${OPENAIR2_DIR}/COMMON/messages_def.h
- ${OPENAIR3_DIR}/S1AP/s1ap_eNB_defs.h
- )
-target_link_libraries (test_epc_generate_scenario
- -Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB F1AP_LIB F1AP GTPV1U_OCP LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_LIB PHY LFDS ITTI ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${CONFIG_LIB}
- )
-
-add_executable(test_epc_play_scenario
- ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario.c
- ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_decode.c
- ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_display.c
- ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_fsm.c
- ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_parse.c
- ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_s1ap.c
- ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c
- ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_s1ap_eNB_defs.h
- ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_sctp.c
- ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario.h
- ${OPENAIR2_DIR}/COMMON/commonDef.h
- ${OPENAIR2_DIR}/COMMON/messages_def.h
- )
-target_include_directories(test_epc_play_scenario PUBLIC /usr/local/share/asn1c)
-target_link_libraries (test_epc_play_scenario
- -Wl,--start-group RRC_LIB S1AP_LIB X2AP_LIB X2AP_ENB M3AP_LIB M3AP_ENB F1AP_LIB F1AP GTPV1U_OCP LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_LIB PHY_NR_COMMON PHY_COMMON PHY PHY_UE LFDS ITTI ${MSC_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${CONFIG_LIB}
- )
-
-
#unitary tests for Core NEtwork pieces
#################################
foreach(myExe s1ap
@@ -3368,7 +2998,7 @@ foreach(myExe s1ap
${OPENAIR3_DIR}/TEST/test_${myExe}.c
)
target_link_libraries (test_${myExe}
- -Wl,--start-group SECU_CN UTIL LFDS -Wl,--end-group m rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${CONFIG_LIB}
+ -Wl,--start-group SECU_CN UTIL LFDS -Wl,--end-group m rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} CONFIG_LIB
)
endforeach(myExe)
@@ -3389,13 +3019,13 @@ if (${T_TRACER})
ITTI RRC_LIB NR_RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB F1AP_LIB F1AP
params_libconfig oai_exmimodevif oai_usrpdevif oai_bladerfdevif oai_lmssdrdevif oai_iqplayer
oai_eth_transpro oai_mobipass tcp_bridge tcp_bridge_oai
- coding FLPT_MSG ASYNC_IF FLEXRAN_AGENT HASHTABLE MSC UTIL OMG_SUMO
+ coding FLPT_MSG ASYNC_IF FLEXRAN_AGENT HASHTABLE UTIL OMG_SUMO
SECU_OSA SECU_CN SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB default_sched remote_sched RAL
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_VNF_LIB NFAPI_USER_LIB
PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU PHY_MEX
L2 L2_LTE L2_NR L2_LTE_NR L2_UE NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON MAC_NR MAC_UE_NR NGAP_GNB
- CN_UTILS GTPV1U_OCP GTPV1U_OCP SCTP_CLIENT MME_APP UDP LIB_NAS_UE NB_IoT LFDS LFDS7 SIMU_COMMON SIMU SIMU_ETH OPENAIR0_LIB
- ldpc_orig ldpc_optim ldpc_optim8seg ldpc PROTO_AGENT dfts)
+ CN_UTILS GTPV1U SCTP_CLIENT MME_APP LIB_NAS_UE NB_IoT LFDS LFDS7 SIMU_COMMON SIMU SIMU_ETH OPENAIR0_LIB
+ ldpc_orig ldpc_optim ldpc_optim8seg ldpc dfts)
if (TARGET ${i})
add_dependencies(${i} generate_T)
endif()
@@ -3487,31 +3117,26 @@ add_executable(nr-ittisim
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
- ${OPENAIR_DIR}/common/utils/utils.c
- ${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/nr/nr_common.c
- ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
${OPENAIR_DIR}/common/utils/lte/ue_power.c
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
${OPENAIR2_DIR}/ENB_APP/flexran_agent_ran_api_to_fix.c
${XFORMSINTERFACE_SOURCE}
${T_SOURCE}
- ${CONFIG_SOURCES}
${SHLIB_LOADER_SOURCES}
)
-target_compile_definitions(nr-ittisim PUBLIC NEW_GTPU)
target_link_libraries (nr-ittisim
-Wl,--start-group
- UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS GTPV1U_OCP SECU_CN SECU_OSA
- ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_SIM_LIB} RRC_LIB NR_RRC_LIB
+ UTIL HASHTABLE SCTP_CLIENT SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS GTPV1U SECU_CN SECU_OSA
+ ITTI ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${RAL_LIB} ${NAS_SIM_LIB} RRC_LIB NR_RRC_LIB
NGAP_LIB NGAP_GNB S1AP_LIB S1AP_ENB L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
- X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${PROTO_AGENT_LIB} ${FSPT_MSG_LIB}
+ X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${FSPT_MSG_LIB}
PHY_NR_UE SCHED_NR_UE_LIB NR_L2_UE
-Wl,--end-group z dl)
target_link_libraries (nr-ittisim ${LIBXML2_LIBRARIES})
-target_link_libraries (nr-ittisim pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
+target_link_libraries (nr-ittisim pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
target_link_libraries (nr-ittisim ${LIB_LMS_LIBRARIES})
target_link_libraries (nr-ittisim ${T_LIB})
diff --git a/cmake_targets/at_commands/CMakeLists.txt b/cmake_targets/at_commands/CMakeLists.txt
index bd71125cf0..dc91f3c31c 100755
--- a/cmake_targets/at_commands/CMakeLists.txt
+++ b/cmake_targets/at_commands/CMakeLists.txt
@@ -409,7 +409,6 @@ set(emm_HDR
add_library(emm ${emm_SRC} ${emm_HDR})
target_include_directories(emm PRIVATE
- ${OPENAIR_DIR}/common/utils/msc
${OPENAIR_DIR}/common/utils
${OPENAIR_DIR}/openair2/COMMON
${OPENAIR_NAS_DIR}/UE
@@ -693,7 +692,6 @@ include_directories(
${OPENAIR_TARGETS}/COMMON
${OPENAIR_NAS_DIR}/UE
${OPENAIR_DIR}/common/utils
- ${OPENAIR_DIR}/common/utils/msc
${OPENAIR3_DIR}/COMMON
${OPENAIR3_DIR}/SECU
${OPENAIR_NAS_DIR}/src
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index 6450b64298..7497fb419c 100755
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -1093,17 +1093,18 @@
(Test8: 217 PRB 100 PDSCH-PRBs 110 PDSCH-Offset),
(Test9: 106 PRBs 50 PDSCH-PRBs MCS Index 27),
(Test10: 106 PRBs 50 PDSCH-PRBs MCS Index 16),
- (Test11: HARQ test 25% TP (4 rounds),
- (Test12: HARQ test 33% TP (3 rounds),
- (Test13: HARQ test 50% TP (2 rounds),
- (Test14: 3 PTRS, 8 Interpolated Symbols),
- (Test15: 6 PTRS, 5 Interpolated Symbols),
- (Test16: 11 PTRS, 0 Interpolated Symbols),
- (Test17: Mapping type A, 2 DMRS Symbols),
- (Test18: Mapping type A, 3 DMRS Symbols),
- (Test19: Mapping type B, 4 DMRS Symbols),
- (Test20: 4x4 MIMO, 1 Layer),
- (Test21: 4x4 MIMO, 2 Layers)
+ (Test11: 106 MCS-TABLE 256 QAM MCS Index 26),
+ (Test12: HARQ test 25% TP (4 rounds),
+ (Test13: HARQ test 33% TP (3 rounds),
+ (Test14: HARQ test 50% TP (2 rounds),
+ (Test15: 3 PTRS, 8 Interpolated Symbols),
+ (Test16: 6 PTRS, 5 Interpolated Symbols),
+ (Test17: 11 PTRS, 0 Interpolated Symbols),
+ (Test18: Mapping type A, 2 DMRS Symbols),
+ (Test19: Mapping type A, 3 DMRS Symbols),
+ (Test20: Mapping type B, 4 DMRS Symbols),
+ (Test21: 4x4 MIMO, 1 Layer),
+ (Test22: 4x4 MIMO, 2 Layers)
$OPENAIR_DIR/cmake_targets/build_oai
--phy_simulators -c
@@ -1118,8 +1119,9 @@
-n100 -R217 -b100 -s5
-n100 -R217 -a80 -s5
-n100 -R217 -a110 -s5 -b100
- -n100 -e27 -s30
- -n100 -e16 -s10
+ -n100 -e27 -s30
+ -n100 -e16 -s10
+ -n100 -q1 -e27 -s30
-n100 -s1 -t25
-n100 -s1 -t33
-n100 -s1 -t50
@@ -1131,7 +1133,7 @@
-n100 -s2 -U 2 1 3
-n10 -s20 -U 3 0 0 2 -gR -x1 -y4 -z4
-n10 -s20 -U 3 0 0 2 -gR -x2 -y4 -z4
- nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13 nr_dlsim.test14 nr_dlsim.test15 nr_dlsim.test16 nr_dlsim.test17 nr_dlsim.test18 nr_dlsim.test19 nr_dlsim.test20 nr_dlsim.test21
+ nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13 nr_dlsim.test14 nr_dlsim.test15 nr_dlsim.test16 nr_dlsim.test17 nr_dlsim.test18 nr_dlsim.test19 nr_dlsim.test20 nr_dlsim.test21 nr_dlsim.test22
PDSCH test OK
segmentation fault|assertion|exiting|fatal
3
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
index 7158790b28..df4ec5d01c 100755
--- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
@@ -165,19 +165,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
index 70819d0e29..f9bb8338bf 100755
--- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
@@ -165,19 +165,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
index 7381fefc1a..5c3d9214bc 100755
--- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
@@ -165,19 +165,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
index 8eecfa2ac5..f214f12783 100755
--- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
@@ -165,19 +165,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
index ce2b71bdd2..f9f70281ca 100755
--- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
@@ -165,19 +165,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
index 11e6e24418..87deb03172 100755
--- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
@@ -165,19 +165,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
index 11f6adbb4d..039b1d8aa3 100755
--- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
+++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
@@ -182,19 +182,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
index 3bf79f94bf..3c70040bfc 100755
--- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
+++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
@@ -182,19 +182,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
index 67a2bae08c..f9d3da2c35 100755
--- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
+++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
@@ -182,19 +182,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
index 02f29c4c2e..c4b3e00a75 100755
--- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
+++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
@@ -184,19 +184,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
index 71a479a512..e2786ef21c 100755
--- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
+++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
@@ -184,19 +184,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
index 09958d62e4..8cd9bd6c67 100755
--- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
+++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
@@ -184,19 +184,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
);
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 92bcfd88e2..930f2a7f77 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -39,35 +39,25 @@ conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf
XFORMS="True"
SKIP_SHARED_LIB_FLAG="False"
-UE_EXPANSION="False"
PRINT_STATS="False"
-VCD_TIMING="False"
DEADLINE_SCHEDULER_FLAG_USER=""
-CPU_AFFINITY_FLAG_USER="False" #Only valid when low-latency flag is set to False
REL="Rel15"
HW="None"
TP="Ethernet"
EPC=0
VERBOSE_CI=0
VERBOSE_COMPILE=0
-CFLAGS_PROCESSOR_USER=""
RUN_GROUP=0
TEST_CASE_GROUP=""
+BUILD_DIR=ran_build
BUILD_DOXYGEN=0
BUILD_COVERITY_SCAN=0
-T_TRACER="True"
DISABLE_HARDWARE_DEPENDENCY="False"
CMAKE_BUILD_TYPE="RelWithDebInfo"
CMAKE_CMD="$CMAKE"
-UE_AUTOTEST_TRACE="False"
-UE_DEBUG_TRACE="False"
-UE_TIMING_TRACE="False"
-USRP_REC_PLAY="False"
BUILD_ECLIPSE=0
NR="False"
-ITTI_SIM="False"
-SANITIZE_ADDRESS="False"
-OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope msc"
+OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope"
RU=0
trap handle_ctrl_c INT
@@ -82,6 +72,8 @@ Options
Erase all files made by previous compilations, installations
--clean-kernel
Erase previously installed features in kernel: iptables, drivers, ...
+-d | --build-dir
+ Sets build directory (will be /cmake_targets//build)
-I | --install-external-packages
Installs required packages such as LibXML, asn1.1 compiler, freediameter, ...
This option will require root password
@@ -201,6 +193,9 @@ function main() {
clean_kernel
echo_info "Erased iptables config and removed modules from kernel"
shift;;
+ -d | --build-dir)
+ BUILD_DIR=$2
+ shift;;
-I | --install-external-packages)
INSTALL_EXTERNAL=1
echo_info "Will install external packages"
@@ -275,7 +270,7 @@ function main() {
echo_info "Will compile NR UE"
shift;;
--mu)
- UE_EXPANSION="True"
+ CMAKE_CMD="$CMAKE_CMD -DUE_EXPANSION=True -DPRE_SCD_THREAD=True"
echo_info "Will compile with UE_EXPANSION"
shift;;
--UE-conf-nvram)
@@ -299,7 +294,9 @@ function main() {
*)
echo_fatal "Unknown HW type $HW: exit..."
esac
- echo_info "Setting hardware to: $HW"
+ echo_info "Setting hardware to: $HW"
+ #CMAKE_CMD="$CMAKE_CMD -DRF_BOARD=\"${HW}\""
+ CMAKE_CMD="$CMAKE_CMD -DRF_BOARD=${HW}"
shift 2;;
-t | --transport)
TP=$2
@@ -323,7 +320,7 @@ function main() {
shift 2;;
-V | --vcd)
echo_info "Setting gtk-wave output"
- VCD_TIMING=1
+ CMAKE_CMD="$CMAKE_CMD -DENABLE_VCD_FIFO=True"
EXE_ARGUMENTS="$EXE_ARGUMENTS -V"
shift;;
-x | --xforms)
@@ -348,8 +345,8 @@ function main() {
echo_info "Will compile with verbose instructions"
shift;;
--cflags_processor)
- CFLAGS_PROCESSOR_USER=$2
- echo_info "Setting CPU FLAGS from USER to: $CFLAGS_PROCESSOR_USER"
+ CMAKE_CMD="$CMAKE_CMD -DCFLAGS_PROCESSOR_USER=\"$2\""
+ echo_info "Setting CPU FLAGS from USER to: $2"
shift 2;;
--build-doxygen)
BUILD_DOXYGEN=1
@@ -361,22 +358,26 @@ function main() {
shift;;
--disable-deadline)
DEADLINE_SCHEDULER_FLAG_USER="False"
+ CMAKE_CMD="$CMAKE_CMD -DDEADLINE_SCHEDULER=False"
echo_info "Disabling the usage of deadline scheduler"
shift 1;;
--enable-deadline)
DEADLINE_SCHEDULER_FLAG_USER="True"
+ CMAKE_CMD="$CMAKE_CMD -DDEADLINE_SCHEDULER=True"
echo_info "Enabling the usage of deadline scheduler"
shift 1;;
--enable-cpu-affinity)
CPU_AFFINITY_FLAG_USER="True"
+ CMAKE_CMD="$CMAKE_CMD -DCPU_AFFINITY=True"
echo_info "Enabling CPU Affinity (only valid when not using deadline scheduler)"
shift 1;;
--disable-cpu-affinity)
CPU_AFFINITY_FLAG_USER="False"
+ CMAKE_CMD="$CMAKE_CMD -DCPU_AFFINITY=False"
echo_info "Disabling CPU Affinity (only valid when not using deadline scheduler)"
shift 1;;
--disable-T-Tracer)
- T_TRACER="False"
+ CMAKE_CMD="$CMAKE_CMD -DT_TRACER=False"
echo_info "Disabling the T tracer"
shift 1;;
--disable-hardware-dependency)
@@ -384,15 +385,15 @@ function main() {
DISABLE_HARDWARE_DEPENDENCY="True"
shift 1;;
--ue-autotest-trace)
- UE_AUTOTEST_TRACE="True"
+ CMAKE_CMD="$CMAKE_CMD -DUE_AUTOTEST_TRACE=True"
echo_info "Enabling autotest specific trace for UE"
shift 1;;
--ue-trace)
- UE_DEBUG_TRACE="True"
+ CMAKE_CMD="$CMAKE_CMD -DUE_DEBUG_TRACE=False"
echo_info "Enabling UE trace for debug"
shift 1;;
--ue-timing)
- UE_TIMING_TRACE="True"
+ CMAKE_CMD="$CMAKE_CMD -DUE_TIMING_TRACE=True"
echo_info "Enabling UE timing trace"
shift 1;;
--uhd-images-dir)
@@ -423,24 +424,20 @@ function main() {
fi
fi
shift 2;;
- --usrp-recplay)
- USRP_REC_PLAY="True"
- echo_info "Enabling USRP record playback mode"
- shift 1;;
-k | --skip-shared-libraries)
SKIP_SHARED_LIB_FLAG="True"
echo_info "Skipping build of shared libraries, rfsimulator and transport protocol libraries"
shift;;
- --ninja)
- CMAKE_CMD="$CMAKE_CMD -GNinja"
- MAKE_CMD=ninja
- shift;;
- --sanitize-address | -fsanitize=address)
- SANITIZE_ADDRESS=True
- shift;;
- --ittiSIM)
+ --ninja)
+ CMAKE_CMD="$CMAKE_CMD -GNinja"
+ MAKE_CMD=ninja
+ shift;;
+ --sanitize-address | -fsanitize=address)
+ CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True"
+ shift;;
+ --ittiSIM)
ittiSIM=1
- ITTI_SIM="True"
+ CMAKE_CMD="$CMAKE_CMD -DITTI_SIM=True"
echo_info "Will compile itti simulator"
shift;;
-h | --help)
@@ -466,9 +463,6 @@ function main() {
fi
fi
- CMAKE_CMD="$CMAKE_CMD .."
- echo_info "CMAKE_CMD=$CMAKE_CMD"
-
########################################################
# Check validity of HW and TP parameters for eNB / gNB #
########################################################
@@ -508,6 +502,7 @@ function main() {
#Disable CPU Affinity for deadline scheduler
if [ "$DEADLINE_SCHEDULER_FLAG_USER" = "True" ] ; then
CPU_AFFINITY_FLAG_USER="False"
+ CMAKE_CMD="$CMAKE_CMD -DCPU_AFFINITY=False"
fi
echo_info "Flags for Deadline scheduler: $DEADLINE_SCHEDULER_FLAG_USER"
@@ -585,46 +580,13 @@ function main() {
echo_info "3. building the compilation directives ..."
DIR=$OPENAIR_DIR/cmake_targets
- if [ "$T_TRACER" = "False" ] ; then
- build_dir=ran_build_noLOG
- else
- build_dir=ran_build
- fi
- [ "$CLEAN" = "1" ] && rm -rf $DIR/$build_dir/build
- mkdir -p $DIR/$build_dir/build
+ [ "$CLEAN" = "1" ] && rm -rf $DIR/$BUILD_DIR/build
+ mkdir -p $DIR/$BUILD_DIR/build
-# configuration module libraries, one currently available, using libconfig
- config_libconfig_shlib=params_libconfig
-
- # first generate the CMakefile in the right directory
- # softmodem compilation
-
- cmake_file=$DIR/$build_dir/CMakeLists.txt
- echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
- echo "project (OpenAirInterface)" >> $cmake_file
- echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
- echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
- echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
- # echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
- echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file
- echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
- echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file
- echo "set ( TRANSP_PRO \"${TP}\")" >> $cmake_file
- echo "set ( PACKAGE_NAME \"${exec}\")" >> $cmake_file
- echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >> $cmake_file
- echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >> $cmake_file
- echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
- echo "set ( UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE )" >> $cmake_file
- echo "set ( UE_DEBUG_TRACE $UE_DEBUG_TRACE )" >> $cmake_file
- echo "set ( UE_TIMING_TRACE $UE_TIMING_TRACE )" >> $cmake_file
- echo "set ( USRP_REC_PLAY $USRP_REC_PLAY )" >> $cmake_file
- echo "set ( SKIP_SHARED_LIB_FLAG $SKIP_SHARED_LIB_FLAG )" >> $cmake_file
- echo "set ( ITTI_SIM $ITTI_SIM )" >> $cmake_file
- echo "set ( SANITIZE_ADDRESS $SANITIZE_ADDRESS )" >> $cmake_file
- echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
- cd $DIR/$build_dir/build
- eval $CMAKE_CMD
+ cd $DIR/$BUILD_DIR/build
+ echo_info "running $CMAKE_CMD"
+ eval $CMAKE_CMD ../..
execlist=""
if [ "$eNB" = "1" ] ; then
@@ -653,7 +615,7 @@ function main() {
for f in $execlist ; do
echo_info "Compiling $f..."
compilations \
- $build_dir $f \
+ $BUILD_DIR $f \
$f $dbin/$f.$REL
done
@@ -662,13 +624,16 @@ function main() {
if [ "$SKIP_SHARED_LIB_FLAG" = "False" ]; then
echo_info "Building shared libraries common to UE and gNB"
+
+ # configuration module libraries, one currently available, using libconfig
+ config_libconfig_shlib=params_libconfig
compilations \
- $build_dir $config_libconfig_shlib \
+ $BUILD_DIR $config_libconfig_shlib \
lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
compilations \
- $build_dir coding \
+ $BUILD_DIR coding \
libcoding.so $dbin/libcoding.so
fi
@@ -681,7 +646,7 @@ function main() {
then
echo_info "Building ue_ip module"
compilations \
- $build_dir ue_ip \
+ $BUILD_DIR ue_ip \
CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
else
echo_info "Bypassing ue_ip build"
@@ -698,7 +663,7 @@ function main() {
mkdir -p $DIR/nas_sim_tools/build
cd $DIR/nas_sim_tools/build
- eval $CMAKE_CMD
+ eval $CMAKE_CMD ..
compilations \
nas_sim_tools usim \
usim $dbin/usim
@@ -712,16 +677,16 @@ function main() {
# generate USIM data
if [ -f $dbin/conf2uedata ]; then
install_nas_tools $conf_nvram_path $gen_nvram_path "$dlog/conf2uedata.txt"
- echo_info "Copying UE specific part to $DIR/$build_dir/build"
- cp -Rvf $dbin/.ue_emm.nvram0 $DIR/$build_dir/build
- cp -Rvf $dbin/.ue.nvram0 $DIR/$build_dir/build
- cp -Rvf $dbin/.usim.nvram0 $DIR/$build_dir/build
+ echo_info "Copying UE specific part to $DIR/$BUILD_DIR/build"
+ cp -Rvf $dbin/.ue_emm.nvram0 $DIR/$BUILD_DIR/build
+ cp -Rvf $dbin/.ue.nvram0 $DIR/$BUILD_DIR/build
+ cp -Rvf $dbin/.usim.nvram0 $DIR/$BUILD_DIR/build
else
echo_warning "not generated UE NAS files: binaries not found"
fi
fi
- cd $DIR/$build_dir/build
+ cd $DIR/$BUILD_DIR/build
##################
# PHY simulators #
@@ -739,9 +704,6 @@ function main() {
compilations \
ran_build coding \
libcoding.so $dbin/libcoding.so
-# compilations \
-# lte-simulators $config_libconfig_shlib \
-# lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
fi
###################
@@ -763,14 +725,14 @@ function main() {
if [ "$HW" = "EXMIMO" ] ; then
echo_info "Compiling Express MIMO 2 board drivers"
compilations \
- $build_dir openair_rf \
+ $BUILD_DIR openair_rf \
CMakeFiles/openair_rf/openair_rf.ko $dbin/openair_rf.ko
compilations \
- $build_dir updatefw \
+ $BUILD_DIR updatefw \
updatefw $dbin/updatefw
echo_info "Compiling oarf tools. The logfile for compilation is here: $dlog/oarf.txt"
- make -C $OPENAIR_DIR/cmake_targets/$build_dir/build oarf > $dlog/oarf.txt 2>&1
- cp $OPENAIR_DIR/cmake_targets/$build_dir/build/*.oct $dbin
+ make -C $OPENAIR_DIR/cmake_targets/$BUILD_DIR/build oarf > $dlog/oarf.txt 2>&1
+ cp $OPENAIR_DIR/cmake_targets/$BUILD_DIR/build/*.oct $dbin
if [ -s $dbin/oarf_config_exmimo.oct ] ; then
echo_success "oarf tools compiled"
else
@@ -785,7 +747,7 @@ function main() {
if [ ! -z "$BUILD_OPTLIB" ] ; then
for oklib in $BUILD_OPTLIB ; do
compilations \
- $build_dir $oklib \
+ $BUILD_DIR $oklib \
lib${oklib}.so $dbin/lib${oklib}.so
done
fi
@@ -859,7 +821,7 @@ function main() {
# link liboai_device.so with the selected RF device library
if [ "$HW" == "EXMIMO" ] ; then
compilations \
- $build_dir oai_exmimodevif \
+ $BUILD_DIR oai_exmimodevif \
liboai_exmimodevif.so $dbin/liboai_exmimodevif.so.$REL
ln -sf liboai_exmimodevif.so liboai_device.so
@@ -867,7 +829,7 @@ function main() {
echo_info "liboai_device.so is linked to EXMIMO device library"
elif [ "$HW" == "OAI_USRP" ] ; then
compilations \
- $build_dir oai_usrpdevif \
+ $BUILD_DIR oai_usrpdevif \
liboai_usrpdevif.so $dbin/liboai_usrpdevif.so.$REL
ln -sf liboai_usrpdevif.so liboai_device.so
@@ -876,7 +838,7 @@ function main() {
elif [ "$HW" == "OAI_BLADERF" ] ; then
if [ -f "/usr/include/libbladeRF.h" ] ; then
compilations \
- $build_dir oai_bladerfdevif \
+ $BUILD_DIR oai_bladerfdevif \
liboai_bladerfdevif.so $dbin/liboai_bladerfdevif.so.$REL
fi
@@ -886,7 +848,7 @@ function main() {
elif [ "$HW" == "OAI_LMSSDR" ] ; then
# if [ -f "/usr/include/libbladeRF.h" ] ; then
compilations \
- $build_dir oai_lmssdrdevif \
+ $BUILD_DIR oai_lmssdrdevif \
liboai_lmssdrdevif.so $dbin/liboai_lmssdrdevif.so.$REL
# fi
@@ -895,7 +857,7 @@ function main() {
echo_info "liboai_device.so is linked to LMSSDR device library"
elif [ "$HW" == "OAI_IRIS" ] ; then
compilations \
- $build_dir oai_irisdevif \
+ $BUILD_DIR oai_irisdevif \
liboai_irisdevif.so $dbin/liboai_irisdevif.so.$REL
ln -s liboai_irisdevif.so liboai_device.so
@@ -915,7 +877,7 @@ function main() {
echo_info "liboai_device.so is linked to ADRV9371_ZC706 device library for Kernel $SYRIQ_KMAJ.$SYRIQ_KMIN"
elif [ "$HW" == "OAI_AW2SORI" ] ; then
compilations \
- $build_dir aw2sori_transpro \
+ $BUILD_DIR aw2sori_transpro \
libaw2sori_transpro.so $dbin/libaw2sori_transpro.so.$REL
ln -sf libaw2sori_transpro.so libthirdparty_transpro.so
@@ -930,12 +892,12 @@ function main() {
if [ "$SKIP_SHARED_LIB_FLAG" = "False" ]; then
echo_info "Compiling rfsimulator"
compilations \
- $build_dir rfsimulator \
+ $BUILD_DIR rfsimulator \
librfsimulator.so $dbin/librfsimulator.so.$REL
echo_info "Compiling tcp_bridge_oai"
compilations \
- $build_dir tcp_bridge_oai \
+ $BUILD_DIR tcp_bridge_oai \
libtcp_bridge_oai.so $dbin/libtcp_bridge_oai.so.$REL
fi
@@ -946,7 +908,7 @@ function main() {
rm -f $dbin/liboai_transpro.so
if [ "$TP" == "Ethernet" ]; then
compilations \
- $build_dir oai_eth_transpro \
+ $BUILD_DIR oai_eth_transpro \
liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
ln -sf liboai_eth_transpro.so liboai_transpro.so
ln -sf $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so
@@ -954,7 +916,7 @@ function main() {
fi
if [ "$TP" == "benetel4g" ]; then
compilations \
- $build_dir benetel_4g \
+ $BUILD_DIR benetel_4g \
libbenetel_4g.so $dbin/libbenetel_4g.$REL
ln -sf libbenetel_4g.so liboai_transpro.so
ln -sf $dbin/libbenetel_4g.so.$REL $dbin/liboai_transpro.so
@@ -962,7 +924,7 @@ function main() {
fi
if [ "$TP" == "benetel5g" ]; then
compilations \
- $build_dir benetel_5g \
+ $BUILD_DIR benetel_5g \
libbenetel_5g.so $dbin/libbenetel_5g.$REL
ln -sf libbenetel_5g.so liboai_transpro.so
ln -sf $dbin/libbenetel_5g.so.$REL $dbin/liboai_transpro.so
@@ -983,7 +945,7 @@ function main() {
[ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/doxygen/build
mkdir -p $OPENAIR_DIR/cmake_targets/doxygen/build
cd $OPENAIR_DIR/cmake_targets/doxygen/build
- eval $CMAKE_CMD
+ eval $CMAKE_CMD ..
make doc
) >& $doxygen_log
fi
diff --git a/cmake_targets/epc_test/CMakeLists.template b/cmake_targets/epc_test/CMakeLists.template
index 7a097fffb0..28da13437c 100755
--- a/cmake_targets/epc_test/CMakeLists.template
+++ b/cmake_targets/epc_test/CMakeLists.template
@@ -26,7 +26,6 @@ set ( LOG_NO_THREAD True )
set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
-set ( MESSAGE_CHART_GENERATOR False)
set ( MSG_PRINT False )
set ( MU_RECEIVER False )
set ( NAS_ADDRESS_FIX False )
diff --git a/cmake_targets/install_external_packages.ubuntu20 b/cmake_targets/install_external_packages.ubuntu20
index e58f5c9bb1..a2f6a9709c 100755
--- a/cmake_targets/install_external_packages.ubuntu20
+++ b/cmake_targets/install_external_packages.ubuntu20
@@ -86,6 +86,7 @@ check_supported_distribution() {
"ubuntu20.04") return 0 ;;
"ubuntu20.10") return 0 ;;
"ubuntu21.04") return 0 ;;
+ "ubuntu21.10") return 0 ;;
esac
return 1
}
@@ -409,7 +410,6 @@ check_install_ubuntu_packages() {
libxml2 \
libxml2-dev \
libxslt1-dev \
- mscgen \
octave-signal \
openssh-client \
openssh-server \
diff --git a/cmake_targets/macros.cmake b/cmake_targets/macros.cmake
new file mode 100644
index 0000000000..0417420af4
--- /dev/null
+++ b/cmake_targets/macros.cmake
@@ -0,0 +1,98 @@
+###########################################
+# macros to define options as there is numerous options in oai
+################################################
+macro(add_option name val helpstr)
+ if(DEFINED ${name})
+ set(value ${${name}})
+ else(DEFINED ${name})
+ set(value ${val})
+ endif()
+ set(${name} ${value} CACHE STRING "${helpstr}")
+ add_definitions("-D${name}=${value}")
+endmacro(add_option)
+
+macro(add_boolean_option name val helpstr)
+ if(DEFINED ${name})
+ set(value ${${name}})
+ else(DEFINED ${name})
+ set(value ${val})
+ endif()
+ set(${name} ${value} CACHE STRING "${helpstr}")
+ set_property(CACHE ${name} PROPERTY TYPE BOOL)
+ if (${value})
+ add_definitions("-D${name}")
+ endif (${value})
+endmacro(add_boolean_option)
+
+macro(add_integer_option name val helpstr)
+ if(DEFINED ${name})
+ set(value ${${name}})
+ else(DEFINED ${name})
+ set(value ${val})
+ endif()
+ set(${name} ${value} CACHE STRING "${helpstr}")
+ add_definitions("-D${name}=${value}")
+endmacro(add_integer_option)
+
+macro(add_list1_option name val helpstr)
+ if(DEFINED ${name})
+ set(value ${${name}})
+ else(DEFINED ${name})
+ set(value ${val})
+ endif()
+ set(${name} ${value} CACHE STRING "${helpstr}")
+ set_property(CACHE ${name} PROPERTY STRINGS ${ARGN})
+ if(NOT "${value}" STREQUAL "False")
+ add_definitions("-D${name}=${value}")
+ endif()
+endmacro(add_list1_option)
+
+macro(add_list2_option name val helpstr)
+ if(DEFINED ${name})
+ set(value ${${name}})
+ else(DEFINED ${name})
+ set(value ${val})
+ endif()
+ set(${name} ${value} CACHE STRING "${helpstr}")
+ set_property(CACHE ${name} PROPERTY STRINGS ${ARGN})
+ if(NOT "${value}" STREQUAL "False")
+ add_definitions("-D${value}=1")
+ endif()
+endmacro(add_list2_option)
+
+macro(add_list_string_option name val helpstr)
+ if(DEFINED ${name})
+ set(value ${${name}})
+ else(DEFINED ${name})
+ set(value ${val})
+ endif()
+ set(${name} ${value} CACHE STRING "${helpstr}")
+ set_property(CACHE ${name} PROPERTY STRINGS ${ARGN})
+ if(NOT "${value}" STREQUAL "False")
+ add_definitions("-D${name}=\"${value}\"")
+ endif()
+endmacro(add_list_string_option)
+
+# this function should produce the same value as the macro MAKE_VERSION defined in the C code (file types.h)
+function(make_version VERSION_VALUE)
+ math(EXPR RESULT "0")
+ foreach (ARG ${ARGN})
+ math(EXPR RESULT "${RESULT} * 16 + ${ARG}")
+ endforeach()
+ set(${VERSION_VALUE} "${RESULT}" PARENT_SCOPE)
+endfunction()
+
+macro(compile_asn1 asn1Source asn1cCmd ResultFlag)
+ # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
+ execute_process(COMMAND ${asn1cCmd} ${asn1Source} RESULT_VARIABLE ret)
+
+ if (NOT ${ret} STREQUAL 0)
+ message(FATAL_ERROR "${ret}: error")
+ endif (NOT ${ret} STREQUAL 0)
+
+ add_custom_target (
+ ${ResultFlag} ALL
+ ${asn1cCmd} ${asn1Source}
+ DEPENDS ${asn1Source}
+ )
+endmacro(compile_asn1)
diff --git a/cmake_targets/s1c_mme_test/CMakeLists.template b/cmake_targets/s1c_mme_test/CMakeLists.template
index e62df04bc6..d2d2d3e053 100755
--- a/cmake_targets/s1c_mme_test/CMakeLists.template
+++ b/cmake_targets/s1c_mme_test/CMakeLists.template
@@ -26,7 +26,6 @@ set ( LOG_NO_THREAD True )
set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
-set ( MESSAGE_CHART_GENERATOR False)
set ( MSG_PRINT False )
set ( MU_RECEIVER False )
set ( NAS_ADDRESS_FIX False )
diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper
index ec5de6a0d1..55a39c6b2b 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -765,7 +765,6 @@ check_install_oai_software() {
libxml2 \
libxml2-dev \
libxslt1-dev \
- mscgen \
octave-signal \
openssh-client \
openssh-server \
@@ -793,7 +792,7 @@ check_install_oai_software() {
fi
$SUDO $INSTALLER install -y python-epdb vim-common
else
- $SUDO $INSTALLER install -y mscgen pydb
+ $SUDO $INSTALLER install -y pydb
fi
$SUDO $INSTALLER install -y \
diff --git a/cmake_targets/tools/example_enb_exmimo_mme_hss.txt b/cmake_targets/tools/example_enb_exmimo_mme_hss.txt
index 238554f8e2..b55266dfe7 100755
--- a/cmake_targets/tools/example_enb_exmimo_mme_hss.txt
+++ b/cmake_targets/tools/example_enb_exmimo_mme_hss.txt
@@ -85,18 +85,7 @@ Tools available:
1) itti_analyser (list messages exchanged between protocol layers)
2) xforms (Layer 1)
-3) mscgen (under construction, but can give some results now)
- (http://www.mcternan.me.uk/mscgen/)
- We use the software to generate sequence diagrams
- with traces generated during the execution of the eNB.
- After the enb execution:
- yang@yang:...$ cd /tmp
- yang@yang:/tmp$ /home/yang/openair4G/trunk/targets/SCRIPTS/msc_gen.py
- The results are located in the current directory (/tmp in this example) in a folder. The name of the folder
- is the current date (for example: 2015-04-08_20.34.10).
- The results are input files for the mscgen tool containing events or messages and the
- corresponding generated png files.
-4) vcd (timing mesurements)
+3) vcd (timing mesurements)
diff --git a/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt b/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt
index 9996a53e19..805d121e6d 100755
--- a/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt
+++ b/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt
@@ -92,18 +92,7 @@ Tools available:
1) itti_analyser (list messages exchanged between protocol layers)
2) xforms (Layer 1)
-3) mscgen (under construction, but can give some results now)
- (http://www.mcternan.me.uk/mscgen/)
- We use the software to generate sequence diagrams
- with traces generated during the execution of the eNB.
- After the enb execution:
- yang@yang:...$ cd /tmp
- yang@yang:/tmp$ /home/yang/openair4G/trunk/targets/SCRIPTS/msc_gen.py
- The results are located in the current directory (/tmp in this example) in a folder. The name of the folder
- is the current date (for example: 2015-04-08_20.34.10).
- The results are input files for the mscgen tool containing events or messages and the
- corresponding generated png files.
-4) vcd (timing mesurements)
+3) vcd (timing mesurements)
diff --git a/cmake_targets/tools/run_enb_s1_usrp b/cmake_targets/tools/run_enb_s1_usrp
index 1a4c6b10b8..db22e31493 100755
--- a/cmake_targets/tools/run_enb_s1_usrp
+++ b/cmake_targets/tools/run_enb_s1_usrp
@@ -32,8 +32,6 @@
################################
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
source $THIS_SCRIPT_PATH/build_helper
-declare -i g_run_msc_gen=0
-declare g_msc_dir="/tmp"
function help()
@@ -55,7 +53,6 @@ function help()
echo_error " -M, --target-dl-mcs mcs Downlink target MCS."
echo_error " -n, --T-no-wait don't wait for tracer, start immediately"
echo_error " -p, --T-port port use given port"
- echo_error " -m, --mscgen directory Generate mscgen output files in a directory"
echo_error " -s, --show-stdout Do not redirect stdout and stderr to file /tmp/lte_softmodem.stdout.txt."
echo_error " -S, --enable-missed-slot Continue execution in case of missed slot."
echo_error " -T, --target-ul-mcs mcs Uplink target MCS."
@@ -68,30 +65,10 @@ function help()
}
-function do_msc_gen()
-{
- cd $g_msc_dir
- last_created_file=`ls -t mscgen* | head -1 | tr -d ':'`
- $OPENAIR_DIR/targets/SCRIPTS/msc_gen.py
- sync
- last_created_file2=`ls -t mscgen* | head -1 | tr -d ':'`
-
- if [ x"$last_created_file" != x"$last_created_file2" ]; then
- if [ -f ./$last_created_file2/oai_mscgen_page_0.png ]; then
- command -v eog 2>/dev/null && eog ./$last_created_file2/oai_mscgen_page_0.png
- fi
- fi
-
-}
-
-
function control_c()
# run if user hits control-c
{
echo_warning "\nExiting by ctrl+c\n"
- if [ $g_run_msc_gen -eq 1 ]; then
- do_msc_gen
- fi
exit $?
}
@@ -153,18 +130,6 @@ function main()
exe_arguments="$exe_arguments --rf-config-file=$rf_config_file"
fi
;;
- -m | --mscgen)
- g_msc_dir=$2
- # can omit file name if last arg on the line
- if [ -d "$g_msc_dir" ]; then
- echo "setting mscgen log files to dir: $g_msc_dir"
- g_run_msc_gen=1
- shift 2;
- else
- echo_error "Mscgen log dir does not exist"
- exit -1
- fi
- ;;
-M | --target-dl-mcs)
echo "setting target dl MCS to $2"
exe_arguments="$exe_arguments -m $2"
@@ -251,9 +216,6 @@ function main()
else
gdb -n -x ~/.gdb_lte_softmodem
fi
- if [ $g_run_msc_gen -eq 1 ]; then
- do_msc_gen
- fi
fi
}
diff --git a/cmake_targets/tools/run_enb_ue_virt_noS1 b/cmake_targets/tools/run_enb_ue_virt_noS1
index 79d5bc35dc..5f8e7e5374 100755
--- a/cmake_targets/tools/run_enb_ue_virt_noS1
+++ b/cmake_targets/tools/run_enb_ue_virt_noS1
@@ -57,7 +57,6 @@ function help()
echo_error " -l, --log-level set the global log level (8:trace, 7:debug, 6:info, 4:warn, 3:error). Note that the log configuration is eNB config file is ignored for oaisim."
echo_error " -h, --help Print this help."
echo_error " -K, --itti-dump-file filename ITTI dump file containing all ITTI events occuring during EPC runtime.(can omit file name if last argument)"
- echo_error " -m, --mscgen directory Generate mscgen output files in a directory"
echo_error " -V, --vcd Dump timings of processing in a GTKWave compliant file format."
echo_error " -W, --wireshark-l2 Dump MAC frames for visualization with wireshark."
echo_error " You need to open Wireshark, open the preferences, and check try heuristics for the UDP protocol, MAC-LTE, RLC-LTE,"
@@ -75,11 +74,9 @@ function main()
cecho "OPENAIR_DIR = $OPENAIR_DIR" $green
local -i run_gdb=0
- local -i run_mscgen=0
local exe_arguments=""
local DEFAULT_CONFIG_FILE_ENB=$OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf
local CONFIG_FILE_ENB=$DEFAULT_CONFIG_FILE_ENB
- local MSC_DIR="/tmp"
local abstraction_flag=0
until [ -z "$1" ]
@@ -136,17 +133,6 @@ function main()
exe_arguments="$exe_arguments -K $ITTI_DUMP_FILE"
;;
- -m | --mscgen)
- MSC_DIR=$2
- if [ -d "$MSC_DIR" ]; then
- echo "setting mscgen log files to dir: $MSC_DIR"
- run_mscgen=1
- shift 2;
- else
- echo_error "Mscgen log dir does not exist"
- exit -1
- fi
- ;;
# -u | --num-ue )
-V | --vcd)
@@ -212,10 +198,6 @@ function main()
cd $OPENAIR_DIR/targets/bin
- if [ $run_mscgen -eq 1 ]; then
- $SUDO rm -f /tmp/openair.msc.*
- fi
-
if [ $run_gdb -eq 0 ]; then
exec $SUDO $OPENAIR_DIR/targets/bin/oaisim_nos1.Rel14 $exe_arguments | tee /tmp/enb_ue_nos1.log.txt
else
@@ -227,20 +209,6 @@ function main()
cat ~/.gdb_enb_ue_nos1
$SUDO gdb -n -x ~/.gdb_enb_ue_nos1
fi
-
- if [ $run_mscgen -eq 1 ]; then
- cd $MSC_DIR
- last_created_file=`ls -t mscgen* | head -1 | tr -d ':'`
- $OPENAIR_DIR/targets/SCRIPTS/msc_gen.py --profile E_UTRAN
- sync
- last_created_file2=`ls -t mscgen* | head -1 | tr -d ':'`
-
- if [ x"$last_created_file" != x"$last_created_file2" ]; then
- if [ -f ./$last_created_file2/oai_mscgen_page_0.png ]; then
- command -v eog 2>/dev/null && eog ./$last_created_file2/oai_mscgen_page_0.png
- fi
- fi
- fi
}
main "$@"
diff --git a/cmake_targets/tools/run_enb_ue_virt_s1 b/cmake_targets/tools/run_enb_ue_virt_s1
index 50fc819ec8..76bc3c2b39 100755
--- a/cmake_targets/tools/run_enb_ue_virt_s1
+++ b/cmake_targets/tools/run_enb_ue_virt_s1
@@ -81,7 +81,6 @@ function help()
echo_error " -g, --gdb Run with GDB."
echo_error " -h, --help Print this help."
echo_error " -K, --itti-dump-file filename ITTI dump file containing all ITTI events occuring during EPC runtime.(can omit file name if last argument)"
- echo_error " -m, --mscgen directory Generate mscgen output files in a directory"
echo_error " -V, --vcd Dump timings of processing in a GTKWave compliant file format."
echo_error " -W, --wireshark-l2 Dump MAC frames for visualization with wireshark."
echo_error " You need to open Wireshark, open the preferences, and check try heuristics for the UDP protocol, MAC-LTE, RLC-LTE,"
@@ -100,11 +99,9 @@ function main()
cecho "OPENAIR_DIR = $OPENAIR_DIR" $green
local -i run_gdb=0
- local -i run_mscgen=0
local exe_arguments=""
local DEFAULT_CONFIG_FILE_ENB=$OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_mme.conf
local CONFIG_FILE_ENB=$DEFAULT_CONFIG_FILE_ENB
- local MSC_DIR="/tmp"
until [ -z "$1" ]
do
@@ -160,19 +157,6 @@ function main()
exe_arguments="$exe_arguments -K $ITTI_DUMP_FILE"
;;
- -m | --mscgen)
- MSC_DIR=$2
- # can omit file name if last arg on the line
- if [ -d "$MSC_DIR" ]; then
- echo "setting mscgen log files to dir: $MSC_DIR"
- run_mscgen=1
- shift 2;
- else
- echo_error "Mscgen log dir does not exist"
- exit -1
- fi
- ;;
-
-V | --vcd)
echo "setting gtk-wave output"
exe_arguments="$exe_arguments -V /tmp/oai_gtk_wave.vcd"
@@ -258,10 +242,6 @@ function main()
cd $OPENAIR_DIR/targets/bin
- if [ $run_mscgen -eq 1 ]; then
- rm -f /tmp/openair.msc.*
- fi
-
if [ $run_gdb -eq 0 ]; then
exec $OPENAIR_DIR/targets/bin/oaisim.Rel14 $exe_arguments | tee /tmp/enb_ue_s1.log.txt
else
@@ -273,21 +253,6 @@ function main()
cat ~/.gdb_enb_ue_s1
gdb -n -x ~/.gdb_enb_ue_s1
fi
-
- if [ $run_mscgen -eq 1 ]; then
- cd $MSC_DIR
- last_created_file=`ls -t mscgen* | head -1 | tr -d ':'`
- $OPENAIR_DIR/targets/SCRIPTS/msc_gen.py --profile E_UTRAN
- sync
- last_created_file2=`ls -t mscgen* | head -1 | tr -d ':'`
-
- if [ x"$last_created_file" != x"$last_created_file2" ]; then
- if [ -f ./$last_created_file2/oai_mscgen_page_0.png ]; then
- command -v eog 2>/dev/null && eog ./$last_created_file2/oai_mscgen_page_0.png
- fi
- fi
- fi
-
}
sudo echo
diff --git a/common/config/DOC/config/rtusage.md b/common/config/DOC/config/rtusage.md
index 10cbee2495..8db58ddac3 100644
--- a/common/config/DOC/config/rtusage.md
+++ b/common/config/DOC/config/rtusage.md
@@ -65,7 +65,6 @@ To get help on supported parameters you can use specific options:
-R: Enable online log
-g: Set the global log level, valide options: (4:trace, 3:debug, 2:info, 1:warn, (0:error))
--telnetsrv: Start embedded telnet server
- --msc: Enable the MSC tracing utility
--------------------------------------------------------------------
[LIBCONFIG] loader: 2/2 parameters successfully set, (2 to default value)
diff --git a/common/ran_context.h b/common/ran_context.h
index db981e9182..055c6f783e 100644
--- a/common/ran_context.h
+++ b/common/ran_context.h
@@ -42,17 +42,11 @@
//#include "ENB_APP/enb_config.h"
#include "flexran_agent_defs.h"
-#include "gtpv1u.h"
-#include "NwGtpv1u.h"
-#include "NwGtpv1uMsg.h"
-#include "NwGtpv1uPrivate.h"
-#include "gtpv1u_eNB_defs.h"
-#include "gtpv1u_gNB_defs.h"
-
#include "PHY/defs_L1_NB_IoT.h"
#include "RRC/LTE/defs_NB_IoT.h"
#include "RRC/LTE/rrc_defs.h"
#include "RRC/NR/nr_rrc_defs.h"
+#include
typedef struct {
@@ -110,8 +104,6 @@ typedef struct {
struct gNB_MAC_INST_s **nrmac;
/// GTPu descriptor
gtpv1u_data_t *gtpv1u_data_g;
- /// NR GTPu descriptor
- nr_gtpv1u_data_t *nr_gtpv1u_data_g;
/// RU descriptors. These describe what each radio unit is supposed to do and contain the necessary functions for fronthaul interfaces
struct RU_t_s **ru;
/// Mask to indicate fronthaul setup status of RU (hard-limit to 64 RUs)
diff --git a/common/utils/LOG/DOC/rtusage.md b/common/utils/LOG/DOC/rtusage.md
index 041c29e688..2f6fa5e6ea 100644
--- a/common/utils/LOG/DOC/rtusage.md
+++ b/common/utils/LOG/DOC/rtusage.md
@@ -49,7 +49,6 @@ The list of components defined within oai can be retrieved from the [config mod
[CONFIG] log_config.perf_log_level set to default value "info"
[CONFIG] log_config.oip_log_level set to default value "info"
[CONFIG] log_config.cli_log_level set to default value "info"
-[CONFIG] log_config.msc_log_level set to default value "info"
[CONFIG] log_config.ocm_log_level set to default value "info"
[CONFIG] log_config.udp_log_level set to default value "info"
[CONFIG] log_config.gtpv1u_log_level set to default value "info"
@@ -108,8 +107,6 @@ The list of components defined within oai can be retrieved from the [config mod
[CONFIG] log_config.oip_log_infile set to default value
[CONFIG] cli_log_infile: 0
[CONFIG] log_config.cli_log_infile set to default value
-[CONFIG] msc_log_infile: 0
-[CONFIG] log_config.msc_log_infile set to default value
[CONFIG] ocm_log_infile: 0
[CONFIG] log_config.ocm_log_infile set to default value
[CONFIG] udp_log_infile: 0
diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c
index 29e4f718c6..5b047c082d 100644
--- a/common/utils/LOG/log.c
+++ b/common/utils/LOG/log.c
@@ -411,6 +411,16 @@ int register_log_component(char *name,
return computed_compidx;
}
+static void unregister_all_log_components(void)
+{
+ log_component_t* lc = &g_log->log_component[0];
+ while (lc->name) {
+ free((char *)lc->name); // defined as const, but assigned through strdup()
+ free(lc->filelog_name);
+ lc++;
+ }
+}
+
int isLogInitDone (void)
{
if (g_log == NULL)
@@ -449,7 +459,6 @@ int logInit (void)
register_log_component("OCG","",OCG);
register_log_component("PERF","",PERF);
register_log_component("OIP","",OIP);
- register_log_component("MSC","log",MSC);
register_log_component("OCM","log",OCM);
register_log_component("HW","",HW);
register_log_component("OSA","",OSA);
@@ -503,6 +512,12 @@ int logInit (void)
return 0;
}
+void logTerm(void)
+{
+ unregister_all_log_components();
+ free_and_zero(g_log);
+}
+
#include
static inline int log_header(log_component_t *c,
char *log_buffer,
diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h
index 46c73427c1..1f19d55878 100644
--- a/common/utils/LOG/log.h
+++ b/common/utils/LOG/log.h
@@ -212,7 +212,6 @@ typedef enum {
PERF,
OIP,
CLI,
- MSC,
OCM,
UDP_,
GTPU,
@@ -303,6 +302,7 @@ extern "C" {
# include "log_if.h"
/*----------------------------------------------------------------------------*/
int logInit (void);
+void logTerm (void);
int isLogInitDone (void);
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
void vlogRecord_mt(const char *file, const char *func, int line, int comp, int level, const char *format, va_list args );
@@ -473,130 +473,6 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
/* @}*/
-static __inline__ uint64_t rdtsc(void) {
- uint32_t a, d;
- __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
- return (((uint64_t)d)<<32) | ((uint64_t)a);
-}
-
-#define DEBUG_REALTIME 1
-#if DEBUG_REALTIME
-
-extern double cpuf;
-
-static inline uint64_t checkTCPU(int timeout,
- char *file,
- int line)
-{
- static uint64_t __thread lastCPUTime=0;
- static uint64_t __thread last=0;
- uint64_t cur=rdtsc();
- struct timespec CPUt;
- clock_gettime(CLOCK_THREAD_CPUTIME_ID, &CPUt);
- uint64_t CPUTime=CPUt.tv_sec*1000*1000+CPUt.tv_nsec/1000;
- double microCycles=(double)(cpuf*1000);
- int duration=(int)((cur-last)/microCycles);
-
- if ( last!=0 && duration > timeout ) {
- //struct timespec ts;
- //clock_gettime(CLOCK_MONOTONIC, &ts);
- printf("%s:%d lte-ue delay %d (exceed %d), CPU for this period: %lld\n", file, line,
- duration, timeout, (long long)CPUTime-lastCPUTime );
- }
-
- last=cur;
- lastCPUTime=CPUTime;
- return cur;
-}
-
-static inline unsigned long long checkT(int timeout,
- char *file,
- int line)
-{
- static unsigned long long __thread last=0;
- unsigned long long cur=rdtsc();
- int microCycles=(int)(cpuf*1000);
- int duration=(int)((cur-last)/microCycles);
-
- if ( last!=0 && duration > timeout )
- printf("%s:%d lte-ue delay %d (exceed %d)\n", file, line,
- duration, timeout);
-
- last=cur;
- return cur;
-}
-
-typedef struct m {
- uint64_t iterations;
- uint64_t sum;
- uint64_t maxArray[11];
-} Meas;
-
-static inline void printMeas(char *txt,
- Meas *M,
- int period)
-{
- if (M->iterations%period == 0 ) {
- char txt2[512];
- sprintf(txt2,"%s avg=%" PRIu64 " iterations=%" PRIu64 " max=%"
- PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 "\n",
- txt,
- M->sum/M->iterations,
- M->iterations,
- M->maxArray[1],M->maxArray[2], M->maxArray[3],M->maxArray[4], M->maxArray[5],
- M->maxArray[6],M->maxArray[7], M->maxArray[8],M->maxArray[9],M->maxArray[10]);
-#if T_TRACER
- LOG_W(PHY,"%s",txt2);
-#else
- printf("%s",txt2);
-#endif
- }
-}
-
-static inline int cmpint(const void *a,
- const void *b)
-{
- uint64_t *aa=(uint64_t *)a;
- uint64_t *bb=(uint64_t *)b;
- return (int)(*aa-*bb);
-}
-
-static inline void updateTimes(uint64_t start,
- Meas *M,
- int period,
- char *txt)
-{
- if (start!=0) {
- uint64_t end=rdtsc();
- long long diff=(end-start)/(cpuf*1000);
- M->maxArray[0]=diff;
- M->sum+=diff;
- M->iterations++;
- qsort(M->maxArray, 11, sizeof(uint64_t), cmpint);
- printMeas(txt,M,period);
- }
-}
-
-#define check(a) do { checkT(a,__FILE__,__LINE__); } while (0)
-#define checkcpu(a) do { checkTCPU(a,__FILE__,__LINE__); } while (0)
-#define initRefTimes(a) static __thread Meas a= {0}
-#define pickTime(a) uint64_t a=rdtsc()
-#define readTime(a) a
-#define initStaticTime(a) static __thread uint64_t a={0}
-#define pickStaticTime(a) do { a=rdtsc(); } while (0)
-
-#else
-#define check(a) do {} while (0)
-#define checkcpu(a) do {} while (0)
-#define initRefTimes(a) do {} while (0)
-#define initStaticTime(a) do {} while (0)
-#define pickTime(a) do {} while (0)
-#define readTime(a) 0
-#define pickStaticTime(a) do {} while (0)
-#define updateTimes(a,b,c,d) do {} while (0)
-#define printMeas(a,b,c) do {} while (0)
-#endif
-
#ifdef __cplusplus
}
#endif
diff --git a/common/utils/assertions.h b/common/utils/assertions.h
index d85dab79a0..573036b1d9 100644
--- a/common/utils/assertions.h
+++ b/common/utils/assertions.h
@@ -25,14 +25,21 @@
#include
#include
#include
+#include
+#include
#include
#include "backtrace.h"
-#define _Assert_Exit_ \
- fprintf(stderr, "\nExiting execution\n"); \
- fflush(stdout); \
- fflush(stderr); \
- abort();
+#define _Assert_Exit_ \
+ if (getenv("gdbStacks")) { \
+ char tmp [1000]; \
+ sprintf(tmp,"gdb -ex='set confirm off' -ex 'thread apply all bt' -ex q -p %d < /dev/null", getpid()); \
+ __attribute__((unused)) int dummy=system(tmp); \
+ } \
+ fprintf(stderr, "\nExiting execution\n"); \
+ fflush(stdout); \
+ fflush(stderr); \
+ abort();
#define _Assert_(cOND, aCTION, fORMAT, aRGS...) \
do { \
diff --git a/common/utils/load_module_shlib.c b/common/utils/load_module_shlib.c
index 2b0d339358..1c9aa8cab9 100644
--- a/common/utils/load_module_shlib.c
+++ b/common/utils/load_module_shlib.c
@@ -69,7 +69,6 @@ char *loader_format_shlibpath(char *modname, char *version)
char *tmpstr;
char *shlibpath =NULL;
char *shlibversion=NULL;
-char *cfgprefix;
paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0, NULL},
{"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0, NULL}};
@@ -81,16 +80,11 @@ int ret;
/* looks for specific path for this module in the config file */
/* specific value for a module path and version is located in a modname subsection of the loader section */
/* shared lib name is formatted as lib.so */
- cfgprefix = malloc(sizeof(LOADER_CONFIG_PREFIX)+strlen(modname)+16);
- if (cfgprefix == NULL) {
- fprintf(stderr,"[LOADER] %s %d malloc error loading module %s, %s\n",__FILE__, __LINE__, modname, strerror(errno));
- exit_fun("[LOADER] unrecoverable error");
- } else {
- sprintf(cfgprefix,LOADER_CONFIG_PREFIX ".%s",modname);
- int ret = config_get( LoaderParams,sizeof(LoaderParams)/sizeof(paramdef_t),cfgprefix);
- if (ret <0) {
- fprintf(stderr,"[LOADER] %s %d couldn't retrieve config from section %s\n",__FILE__, __LINE__,cfgprefix);
- }
+ char cfgprefix[sizeof(LOADER_CONFIG_PREFIX)+strlen(modname)+16];
+ sprintf(cfgprefix,LOADER_CONFIG_PREFIX ".%s",modname);
+ ret = config_get( LoaderParams,sizeof(LoaderParams)/sizeof(paramdef_t),cfgprefix);
+ if (ret <0) {
+ fprintf(stderr,"[LOADER] %s %d couldn't retrieve config from section %s\n",__FILE__, __LINE__,cfgprefix);
}
/* no specific path, use loader default shared lib path */
if (shlibpath == NULL) {
@@ -142,6 +136,7 @@ int load_module_version_shlib(char *modname, char *version, loader_shlibfunc_t *
}
shlib_path = loader_format_shlibpath(modname, version);
+ printf("shlib_path %s\n", shlib_path);
for (int i = 0; i < loader_data.numshlibs; i++) {
if (strcmp(loader_data.shlibs[i].name, modname) == 0) {
@@ -198,15 +193,17 @@ int load_module_version_shlib(char *modname, char *version, loader_shlibfunc_t *
}
if (farray) {
- if (!loader_data.shlibs[lib_idx].funcarray) {
- loader_data.shlibs[lib_idx].funcarray = malloc(numf*sizeof(loader_shlibfunc_t));
- if (!loader_data.shlibs[lib_idx].funcarray) {
+ loader_shlibdesc_t *shlib = &loader_data.shlibs[lib_idx];
+ if (!shlib->funcarray) {
+ shlib->funcarray = calloc(numf, sizeof(loader_shlibfunc_t));
+ if (!shlib->funcarray) {
fprintf(stderr, "[LOADER] load_module_shlib(): unable to allocate memory\n");
ret = -1;
goto load_module_shlib_exit;
}
+ shlib->len_funcarray = numf;
+ shlib->numfunc = 0;
}
- loader_data.shlibs[lib_idx].numfunc = 0;
for (int i = 0; i < numf; i++) {
farray[i].fptr = dlsym(lib_handle,farray[i].fname);
if (!farray[i].fptr) {
@@ -215,9 +212,32 @@ int load_module_version_shlib(char *modname, char *version, loader_shlibfunc_t *
ret = -1;
goto load_module_shlib_exit;
}
- loader_data.shlibs[lib_idx].funcarray[i].fname=strdup(farray[i].fname);
- loader_data.shlibs[lib_idx].funcarray[i].fptr = farray[i].fptr;
- loader_data.shlibs[lib_idx].numfunc++;
+ /* check whether this function has been loaded before */
+ int j = 0;
+ for (; j < shlib->numfunc; ++j) {
+ if (shlib->funcarray[j].fptr == farray[i].fptr) {
+ int rc = strcmp(shlib->funcarray[i].fname, farray[i].fname);
+ AssertFatal(rc == 0,
+ "reloading the same fptr with different fnames (%s, %s)\n",
+ shlib->funcarray[i].fname, farray[i].fname);
+ break;
+ }
+ }
+ if (j == shlib->numfunc) {
+ if (shlib->numfunc == shlib->len_funcarray) {
+ loader_shlibfunc_t *n = realloc(shlib->funcarray, shlib->numfunc * 2 * sizeof(loader_shlibfunc_t));
+ if (!n) {
+ fprintf(stderr, "[LOADER] %s(): unable to allocate memory\n", __func__);
+ ret = -1;
+ goto load_module_shlib_exit;
+ }
+ shlib->funcarray = n;
+ shlib->len_funcarray = shlib->numfunc * 2;
+ }
+ shlib->funcarray[j].fname = strdup(farray[i].fname);
+ shlib->funcarray[j].fptr = farray[i].fptr;
+ shlib->numfunc++;
+ }
} /* for int i... */
} else { /* farray ! NULL */
sprintf(afname,"%s_getfarray",modname);
@@ -248,3 +268,18 @@ void * get_shlibmodule_fptr(char *modname, char *fname)
} /* for i loop on modules */
return NULL;
}
+
+void loader_reset()
+{
+ for (int i = 0; i < loader_data.numshlibs && loader_data.shlibs[i].name != NULL; i++) {
+ loader_shlibdesc_t *shlib = &loader_data.shlibs[i];
+ free(shlib->name);
+ free(shlib->thisshlib_path);
+ for (int j = 0; j < shlib->numfunc; ++j)
+ free(shlib->funcarray[j].fname);
+ free(shlib->funcarray);
+ shlib->numfunc = 0;
+ shlib->len_funcarray = 0;
+ }
+ free(loader_data.shlibs);
+}
diff --git a/common/utils/load_module_shlib.h b/common/utils/load_module_shlib.h
index 0e80a5353c..8139c21909 100644
--- a/common/utils/load_module_shlib.h
+++ b/common/utils/load_module_shlib.h
@@ -47,6 +47,7 @@ typedef struct {
char *thisshlib_path;
uint32_t numfunc;
loader_shlibfunc_t *funcarray;
+ uint32_t len_funcarray;
}loader_shlibdesc_t;
typedef struct {
@@ -90,5 +91,6 @@ extern void * get_shlibmodule_fptr(char *modname, char *fname);
extern loader_data_t loader_data;
#endif /* LOAD_MODULE_SHLIB_MAIN */
#define load_module_shlib(M, F, N, I) load_module_version_shlib(M, NULL, F, N, I)
+void loader_reset();
#endif
diff --git a/common/utils/lte/ue_power.h b/common/utils/lte/ue_power.h
deleted file mode 100644
index caeebec2c8..0000000000
--- a/common/utils/lte/ue_power.h
+++ /dev/null
@@ -1,34 +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
- */
-
-/*! \file ue_power.h
-* \brief support routines used in MAC and PHY
-* \author R. Knopp, F. Kaltenberger
-* \date 2020
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
-
-int16_t estimate_ue_tx_power(int norm,uint32_t tbs, uint32_t nb_rb, uint8_t control_only, lte_prefix_type_t ncp, uint8_t use_srs);
-
diff --git a/common/utils/msc/msc.c b/common/utils/msc/msc.c
deleted file mode 100644
index 84b723b022..0000000000
--- a/common/utils/msc/msc.c
+++ /dev/null
@@ -1,785 +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
- */
-
-/*! \file msc.c
- * \brief Message chart generator logging utility (generated files to processed by a script to produce a mscgen input file for generating a sequence diagram document)
- * \author Lionel GAUTHIER
- * \date 2015
- * \email: lionel.gauthier@eurecom.fr
- */
-#include
-#include
-#include
-#include
-#include
-#include
-
-#define MSC_LIBRARY
-#include "msc.h"
-
-#include "liblfds611.h"
-#include "intertask_interface.h"
-
-
-
-#include "assertions.h"
-
-//-------------------------------
-#define MSC_MAX_QUEUE_ELEMENTS 1024
-#define MSC_MAX_PROTO_NAME_LENGTH 16
-#define MSC_MAX_MESSAGE_LENGTH 512
-
-//-------------------------------
-
-FILE *g_msc_fd;
-char g_msc_proto2str[MAX_MSC_PROTOS][MSC_MAX_PROTO_NAME_LENGTH];
-
-msc_interface_t msc_interface;
-
-typedef unsigned long msc_message_number_t;
-typedef struct msc_queue_item_s {
- char *message_str;
- uint32_t message_str_size;
- uint8_t *message_bin;
- uint32_t message_bin_size;
-} msc_queue_item_t;
-
-msc_message_number_t g_message_number = 0;
-struct lfds611_queue_state *g_msc_message_queue_p = NULL;
-struct lfds611_stack_state *g_msc_memory_stack_p = NULL;
-
-//------------------------------------------------------------------------------
-void *msc_task(void *args_p)
-//------------------------------------------------------------------------------
-{
- MessageDef *received_message_p = NULL;
- // const char *msg_name = NULL;
- // instance_t instance = 0;
- long timer_id;
- itti_mark_task_ready(TASK_MSC);
- msc_start_use();
- timer_setup(0, // seconds
- 50000, // usec
- TASK_MSC,
- INSTANCE_DEFAULT,
- TIMER_PERIODIC,
- NULL,
- &timer_id);
-
- while(1) {
- itti_receive_msg(TASK_MSC, &received_message_p);
-
- if (received_message_p != NULL) {
- // msg_name = ITTI_MSG_NAME (received_message_p);
- // instance = ITTI_MSG_DESTINATION_INSTANCE (received_message_p);
- switch (ITTI_MSG_ID(received_message_p)) {
- case TIMER_HAS_EXPIRED: {
- msc_flush_messages();
- }
- break;
-
- case TERMINATE_MESSAGE: {
- fprintf(stderr, " *** Exiting MSC thread\n");
- timer_remove(timer_id);
- msc_end();
- itti_exit_task();
- }
- break;
-
- case MESSAGE_TEST: {
- }
- break;
-
- default: {
- }
- break;
- }
- }
- }
-
- fprintf(stderr, "Task MSC exiting\n");
- return NULL;
-}
-
-//------------------------------------------------------------------------------
-int msc_init(const msc_env_t envP, const int max_threadsP)
-//------------------------------------------------------------------------------
-{
- int i;
- int rv;
- void *pointer_p;
- char msc_filename[256];
- fprintf(stderr, "Initializing MSC logs\n");
- rv = snprintf(msc_filename, 256, "/tmp/openair.msc.%i.log", envP); // TODO NAME
-
- if ((0 >= rv) || (256 < rv)) {
- fprintf(stderr, "Error in MSC log file name");
- }
-
- g_msc_fd = fopen(msc_filename,"w");
- AssertFatal(g_msc_fd != NULL, "Could not open MSC log file %s : %s", msc_filename, strerror(errno));
- rv = lfds611_stack_new(&g_msc_memory_stack_p, (lfds611_atom_t)max_threadsP + 2);
-
- if (0 >= rv) {
- AssertFatal (0, "lfds611_stack_new failed!\n");
- }
-
- rv = lfds611_queue_new(&g_msc_message_queue_p, (lfds611_atom_t)MSC_MAX_QUEUE_ELEMENTS);
- AssertFatal (rv, "lfds611_queue_new failed!\n");
- AssertFatal (g_msc_message_queue_p != NULL, "g_msc_message_queue_p is NULL!\n");
- msc_start_use();
-
- for (i=0; i < max_threadsP * 30; i++) {
- pointer_p = malloc(MSC_MAX_MESSAGE_LENGTH);
- AssertFatal (pointer_p, "malloc failed!\n");
- rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, pointer_p );
- AssertFatal (rv, "lfds611_stack_guaranteed_push failed for item %d\n", i);
- }
-
- for (i = MIN_MSC_PROTOS; i < MAX_MSC_PROTOS; i++) {
- switch (i) {
- case MSC_IP_UE:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "IP_UE");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_IP_ENB:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "IP_ENB");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if (envP == MSC_E_UTRAN_LIPA) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_NAS_UE:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_UE");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_RRC_UE:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RRC_UE");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_PDCP_UE:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PDCP_UE");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_RLC_UE:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RLC_UE");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_MAC_UE:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MAC_UE");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_PHY_UE:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PHY_UE");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_PHY_ENB:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PHY_ENB");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_MAC_ENB:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MAC_ENB");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_RLC_ENB:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RLC_ENB");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_PDCP_ENB:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PDCP_ENB");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_RRC_ENB:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RRC_ENB");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_S1AP_ENB:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S1AP_ENB");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_MME_GW) || (envP == MSC_MME)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_GTPU_ENB:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "GTPU_ENB");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_GTPU_SGW:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "GTPU_SGW");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_MME_GW) || (envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_S1AP_MME:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S1AP_MME");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_MME_GW) || (envP == MSC_MME) || (envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_MMEAPP_MME:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MME_APP");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_MME_GW) || (envP == MSC_MME)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_NAS_MME:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_MME");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- msc_log_declare_proto(i);
- break;
-
- case MSC_NAS_EMM_MME:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_EMM");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_MME_GW) || (envP == MSC_MME)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_NAS_ESM_MME:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_ESM");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_MME_GW) || (envP == MSC_MME)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_SP_GWAPP_MME:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "SP_GW_MME");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if (envP == MSC_MME_GW) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_S11_MME:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S11_MME");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if (envP == MSC_MME) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_S6A_MME:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S6A");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_MME_GW) || (envP == MSC_MME)) {
- msc_log_declare_proto(i);
- }
-
- break;
-
- case MSC_HSS:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "HSS");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
-
- if ((envP == MSC_MME_GW) || (envP == MSC_MME)) {
- msc_log_declare_proto(i);
- }
-
- break;
- case MSC_F1AP_CU:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "F1AP_CU");
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
- //if ((envP == MSC_E_UTRAN) || (envP == MSC_MME_GW) || (envP == MSC_MME)) {
- msc_log_declare_proto(i);
- //}
- break;
- case MSC_F1AP_DU:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "F1AP_DU");
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
- //if ((envP == MSC_E_UTRAN) || (envP == MSC_MME_GW) || (envP == MSC_MME)) {
- msc_log_declare_proto(i);
- //}
- break;
- default:
- rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "UNKNOWN");
-
- if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
- g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
- }
- }
- }
-
- rv = itti_create_task (TASK_MSC, msc_task, NULL);
- AssertFatal (rv == 0, "Create task for MSC failed!\n");
- fprintf(stderr, "Initializing MSC logs Done\n");
- return 0;
-}
-
-//------------------------------------------------------------------------------
-void msc_start_use(void)
-//------------------------------------------------------------------------------
-{
- lfds611_queue_use(g_msc_message_queue_p);
- lfds611_stack_use(g_msc_memory_stack_p);
-}
-
-
-//------------------------------------------------------------------------------
-void msc_flush_messages(void)
-//------------------------------------------------------------------------------
-{
- int rv;
- msc_queue_item_t *item_p = NULL;
-
- while ((rv = lfds611_queue_dequeue( g_msc_message_queue_p, (void **)&item_p )) == 1) {
- if (NULL != item_p->message_str) {
- fputs(item_p->message_str, g_msc_fd);
- // TODO BIN DATA
- rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, item_p->message_str );
- }
-
- // TODO FREE BIN DATA
- free(item_p);
- }
-
- fflush(g_msc_fd);
-}
-
-
-//------------------------------------------------------------------------------
-void msc_end(void)
-//------------------------------------------------------------------------------
-{
- int rv;
-
- if (NULL != g_msc_fd ) {
- msc_flush_messages();
- rv = fflush(g_msc_fd);
-
- if (rv != 0) {
- fprintf(stderr, "Error while flushing stream of MSC log file: %s", strerror(errno));
- }
-
- rv = fclose(g_msc_fd);
-
- if (rv != 0) {
- fprintf(stderr, "Error while closing MSC log file: %s", strerror(errno));
- }
- }
-}
-
-//------------------------------------------------------------------------------
-void msc_log_declare_proto(
- const msc_proto_t protoP
-)
-//------------------------------------------------------------------------------
-{
- int rv = 0;
- msc_queue_item_t *new_item_p = NULL;
- char *char_message_p = NULL;
-
- if ((MIN_MSC_PROTOS <= protoP) && (MAX_MSC_PROTOS > protoP)) {
- // may be build a memory pool for that also ?
- new_item_p = malloc(sizeof(msc_queue_item_t));
-
- if (NULL != new_item_p) {
- rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
-
- if (0 == rv) {
- msc_flush_messages();
- rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
- }
-
- if (1 == rv) {
- rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [PROTO] %d %s\n", __sync_fetch_and_add (&g_message_number, 1), protoP, &g_msc_proto2str[protoP][0]);
-
- if (0 > rv) {
- fprintf(stderr, "Error while declaring new protocol in MSC: %s", strerror(errno));
- }
-
- new_item_p->message_str = char_message_p;
- new_item_p->message_str_size = rv;
- new_item_p->message_bin = NULL;
- new_item_p->message_bin_size = 0;
- rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p );
-
- if (0 == rv) {
- rv = lfds611_queue_guaranteed_enqueue(g_msc_message_queue_p, new_item_p );
-
- if (0 == rv) {
- fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p);
- rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p );
- free(new_item_p);
- }
- }
-
- return;
- } else {
- fprintf(stderr, "Error while lfds611_stack_pop()\n");
- }
-
- free(new_item_p);
- } else {
- fprintf(stderr, "Error while malloc in MSC");
- }
- }
-}
-//------------------------------------------------------------------------------
-void msc_log_event(
- const msc_proto_t protoP,
- char *format, ...)
-//------------------------------------------------------------------------------
-{
- va_list args;
- int rv;
- int rv2;
- msc_queue_item_t *new_item_p = NULL;
- char *char_message_p = NULL;
-
- if ((MIN_MSC_PROTOS > protoP) || (MAX_MSC_PROTOS <= protoP)) {
- return;
- }
-
- new_item_p = malloc(sizeof(msc_queue_item_t));
-
- if (NULL != new_item_p) {
- rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
-
- if (0 == rv) {
- msc_flush_messages();
- rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
- }
-
- if (1 == rv) {
- rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [EVENT] %d ", __sync_fetch_and_add (&g_message_number, 1), protoP);
-
- if ((0 > rv) || (MSC_MAX_MESSAGE_LENGTH < rv)) {
- fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]);
- goto error_event;
- }
-
- va_start(args, format);
- rv2 = vsnprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, format, args);
- va_end(args);
-
- if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) {
- fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]);
- goto error_event;
- }
-
- rv += rv2;
- rv2 = snprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, "\n");
-
- if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) {
- fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]);
- goto error_event;
- }
-
- rv += rv2;
- new_item_p->message_str = char_message_p;
- new_item_p->message_str_size = rv;
- new_item_p->message_bin = NULL;
- new_item_p->message_bin_size = 0;
- rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p );
-
- if (0 == rv) {
- fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p);
- rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p );
- free(new_item_p);
- }
- } else {
- fprintf(stderr, "Error while lfds611_stack_pop()\n");
- }
- }
-
- return;
-error_event:
- rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p );
- free(new_item_p);
-}
-//------------------------------------------------------------------------------
-void msc_log_message(
- const char *const message_operationP,
- const msc_proto_t proto1P,
- const msc_proto_t proto2P,
- const uint8_t *const bytesP,
- const unsigned int num_bytes,
- char *format, ...)
-//------------------------------------------------------------------------------
-{
- va_list args;
- uint64_t mac = 0; // TO DO mac on bytesP param
- int rv;
- int rv2;
- msc_queue_item_t *new_item_p = NULL;
- char *char_message_p = NULL;
-
- if ((MIN_MSC_PROTOS > proto1P) || (MAX_MSC_PROTOS <= proto1P) ||
- (MIN_MSC_PROTOS > proto2P) || (MAX_MSC_PROTOS <= proto2P) ) {
- return;
- }
-
- new_item_p = malloc(sizeof(msc_queue_item_t));
-
- if (NULL != new_item_p) {
- rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
-
- if (0 == rv) {
- msc_flush_messages();
- rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
- }
-
- if (1 == rv) {
- rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [MESSAGE] %d %s %d %"PRIu64" ",
- __sync_fetch_and_add (&g_message_number, 1), proto1P, message_operationP, proto2P, mac);
-
- if ((0 > rv) || (MSC_MAX_MESSAGE_LENGTH < rv)) {
- fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]);
- goto error_event;
- }
-
- va_start(args, format);
- rv2 = vsnprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, format, args);
- va_end(args);
-
- if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) {
- fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]);
- goto error_event;
- }
-
- rv += rv2;
- rv2 = snprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, "\n");
-
- if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) {
- fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]);
- goto error_event;
- }
-
- rv += rv2;
- new_item_p->message_str = char_message_p;
- new_item_p->message_str_size = rv;
- new_item_p->message_bin = NULL; // TO DO
- new_item_p->message_bin_size = 0; // TO DO
- rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p );
-
- if (0 == rv) {
- fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p);
- rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p );
- free(new_item_p);
- }
- } else {
- fprintf(stderr, "Error while lfds611_stack_pop()\n");
- msc_flush_messages();
- }
- }
-
- return;
-error_event:
- rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p );
- free(new_item_p);
-}
-
-//------------------------------------------------------------------------------
-// function called when oai loader loads the msc shared lib
-int msc_autoinit(msc_interface_t *msc_interface)
-//------------------------------------------------------------------------------
-{
- msc_interface->msc_init = msc_init;
- msc_interface->msc_start_use = msc_start_use;
- msc_interface->msc_end = msc_end;
- msc_interface->msc_log_event = msc_log_event;
- msc_interface->msc_log_message = msc_log_message;
- msc_interface->msc_loaded = 1;
- return 0;
-}
diff --git a/common/utils/msc/msc.h b/common/utils/msc/msc.h
deleted file mode 100644
index adb0d9e657..0000000000
--- a/common/utils/msc/msc.h
+++ /dev/null
@@ -1,131 +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
- */
-
-#ifndef MSC_H_
-#define MSC_H_
-#include
-#include
-
-typedef enum {
- MIN_MSC_ENV = 0,
- MSC_E_UTRAN = MIN_MSC_ENV,
- MSC_E_UTRAN_LIPA,
- MSC_MME_GW,
- MSC_MME,
- MSC_SP_GW,
- MAX_MSC_ENV
-} msc_env_t;
-
-
-typedef enum {
- MIN_MSC_PROTOS = 0,
- MSC_IP_UE = MIN_MSC_PROTOS,
- MSC_NAS_UE,
- MSC_RRC_UE,
- MSC_PDCP_UE,
- MSC_RLC_UE,
- MSC_MAC_UE,
- MSC_PHY_UE,
- MSC_PHY_ENB,
- MSC_MAC_ENB,
- MSC_RLC_ENB,
- MSC_PDCP_ENB,
- MSC_PDCP_GNB,
- MSC_RRC_ENB,
- MSC_RRC_GNB,
- MSC_IP_ENB,
- MSC_S1AP_ENB,
- MSC_NGAP_GNB,
- MSC_GTPU_ENB,
- MSC_GTPU_GNB,
- MSC_GTPU_SGW,
- MSC_S1AP_MME,
- MSC_NGAP_AMF,
- MSC_MMEAPP_MME,
- MSC_NAS_MME,
- MSC_NAS_EMM_MME,
- MSC_NAS_ESM_MME,
- MSC_SP_GWAPP_MME,
- MSC_S11_MME,
- MSC_S6A_MME,
- MSC_HSS,
- MSC_F1AP_CU,
- MSC_F1AP_DU,
- MSC_X2AP_SRC_ENB,
- MSC_X2AP_TARGET_ENB,
- MAX_MSC_PROTOS,
-} msc_proto_t;
-
-
-
-// Access stratum
-#define MSC_AS_TIME_FMT "%05u:%02u"
-
-#define MSC_AS_TIME_ARGS(CTXT_Pp) \
- (CTXT_Pp)->frame, \
- (CTXT_Pp)->subframe
-
-typedef int(*msc_init_t)(const msc_env_t, const int );
-typedef void(*msc_start_use_t)(void );
-typedef void(*msc_end_t)(void);
-typedef void(*msc_log_event_t)(const msc_proto_t,char *, ...);
-typedef void(*msc_log_message_t)(const char *const, const msc_proto_t, const msc_proto_t,
- const uint8_t *const, const unsigned int, char *, ...);
-typedef struct msc_interface {
- int msc_loaded;
- msc_init_t msc_init;
- msc_start_use_t msc_start_use;
- msc_end_t msc_end;
- msc_log_event_t msc_log_event;
- msc_log_message_t msc_log_message;
-} msc_interface_t;
-
-#ifdef MSC_LIBRARY
-int msc_init(const msc_env_t envP, const int max_threadsP);
-void msc_start_use(void);
-void msc_flush_messages(void);
-void msc_end(void);
-void msc_log_declare_proto(const msc_proto_t protoP);
-void msc_log_event(const msc_proto_t protoP,char *format, ...);
-void msc_log_message(
- const char *const message_operationP,
- const msc_proto_t receiverP,
- const msc_proto_t senderP,
- const uint8_t *const bytesP,
- const unsigned int num_bytes,
- char *format, ...);
-
-#else
-
-#define MESSAGE_CHART_GENERATOR msc_interface.msc_loaded
-
-extern msc_interface_t msc_interface;
-#define MSC_INIT(arg1,arg2) if(msc_interface.msc_loaded) msc_interface.msc_init(arg1,arg2)
-#define MSC_START_USE if(msc_interface.msc_loaded) msc_interface.msc_start_use
-#define MSC_END if(msc_interface.msc_loaded) msc_interface.msc_end
-#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_event(mScPaRaMs, fORMAT, ##aRGS)
-#define MSC_LOG_RX_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("<-",rECEIVER, sENDER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
-#define MSC_LOG_RX_DISCARDED_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("x-",rECEIVER, sENDER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
-#define MSC_LOG_TX_MESSAGE(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("->",sENDER, rECEIVER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
-#define MSC_LOG_TX_MESSAGE_FAILED(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("-x",sENDER, rECEIVER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
-#endif
-
-#endif
diff --git a/common/utils/nr/nr_common.c b/common/utils/nr/nr_common.c
index 4950b29bf3..49743b3bdc 100644
--- a/common/utils/nr/nr_common.c
+++ b/common/utils/nr/nr_common.c
@@ -36,6 +36,27 @@
const char *duplex_mode[]={"FDD","TDD"};
+int tables_5_3_2[5][11] = {
+ {25, 52, 79, 106, 133, 160, 216, 270, -1, -1, -1}, // 15 FR1
+ {11, 24, 38, 51, 65, 78, 106, 133, 162, 217, 273}, // 30 FR1
+ {-1, 11, 18, 24, 31, 38, 51, 65, 79, 107, 135}, // 60 FR1
+ {66, 132, 264, -1 , -1, -1, -1, -1, -1, -1, -1}, // 60 FR2
+ {32, 66, 132, 264, -1, -1, -1, -1, -1, -1, -1} // 120FR2
+};
+
+int get_supported_band_index(int scs, int band, int n_rbs){
+
+ int scs_index = scs;
+ if (band>256)
+ scs_index++;
+ for (int i=0; i<11; i++) {
+ if(n_rbs == tables_5_3_2[scs][i])
+ return i;
+ }
+ return (-1); // not found
+}
+
+
// Table 5.2-1 NR operating bands in FR1 & FR2 (3GPP TS 38.101)
// Table 5.4.2.3-1 Applicable NR-ARFCN per operating band in FR1 & FR2 (3GPP TS 38.101)
// Notes:
@@ -231,7 +252,6 @@ uint32_t nr_get_code_rate(uint8_t Imcs, uint8_t table_idx) {
}
}
-
void get_coreset_rballoc(uint8_t *FreqDomainResource,int *n_rb,int *rb_offset) {
uint8_t count=0, start=0, start_set=0;
@@ -483,6 +503,7 @@ int get_nr_table_idx(int nr_bandP, uint8_t scs_index) {
return i;
}
+
int get_subband_size(int NPRB,int size) {
// implements table 5.2.1.4-2 from 36.214
//
diff --git a/common/utils/nr/nr_common.h b/common/utils/nr/nr_common.h
index 882f99338c..0150cf59f8 100644
--- a/common/utils/nr/nr_common.h
+++ b/common/utils/nr/nr_common.h
@@ -80,6 +80,7 @@ void SLIV2SL(int SLIV,int *S,int *L);
int get_dmrs_port(int nl, uint16_t dmrs_ports);
uint16_t SL_to_bitmap(int startSymbolIndex, int nrOfSymbols);
int get_nb_periods_per_frame(uint8_t tdd_period);
+int get_supported_band_index(int scs, int band, int n_rbs);
long rrc_get_max_nr_csrs(uint8_t max_rbs, long b_SRS);
#define CEILIDIV(a,b) ((a+b-1)/b)
diff --git a/common/utils/ocp_itti/intertask_interface.h b/common/utils/ocp_itti/intertask_interface.h
index 3188e5889f..e595311b26 100644
--- a/common/utils/ocp_itti/intertask_interface.h
+++ b/common/utils/ocp_itti/intertask_interface.h
@@ -256,8 +256,8 @@ typedef struct IttiMsgText_s {
#include
//#include
-#include
-#include
+#include
+#include
void *rrc_enb_process_itti_msg(void *);
#include
#include
@@ -338,10 +338,7 @@ void *rrc_enb_process_msg(void *);
TASK_DEF(TASK_RRC_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_NAS_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RAL_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
- TASK_DEF(TASK_MSC, TASK_PRIORITY_MED, 200, NULL, NULL)\
TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL)\
- TASK_DEF(OCP_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL)\
- TASK_DEF(TASK_UDP, TASK_PRIORITY_MED, 1000, NULL, NULL)\
TASK_DEF(TASK_CU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_DU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_UE_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \
@@ -560,7 +557,6 @@ MessageDef *itti_alloc_new_message_sized(
This function should be called from the main thread after having created all ITTI tasks.
**/
void itti_wait_tasks_end(void);
-#define ADDED_QUEUES_MAX 10 // Fix me: MSC component too hard to understand, we keep room for 10 queues created dynamically
void itti_set_task_real_time(task_id_t task_id);
/** \brief Send a termination message to all tasks.
diff --git a/common/utils/telnetsrv/DOC/telnetlog.md b/common/utils/telnetsrv/DOC/telnetlog.md
index 36c5cfb348..cb008fc8bb 100644
--- a/common/utils/telnetsrv/DOC/telnetlog.md
+++ b/common/utils/telnetsrv/DOC/telnetlog.md
@@ -62,7 +62,6 @@ component verbosity level enabled
16 PERF: medium info N
17 OIP: medium info N
18 CLI: medium info N
-19 MSC: medium info N
20 OCM: medium info N
21 UDP: medium info N
22 GTPV1U: medium info N
diff --git a/common/utils/telnetsrv/telnetsrv_measurements.c b/common/utils/telnetsrv/telnetsrv_measurements.c
index 786cbd094c..2af76753b8 100644
--- a/common/utils/telnetsrv/telnetsrv_measurements.c
+++ b/common/utils/telnetsrv/telnetsrv_measurements.c
@@ -51,6 +51,7 @@
static char *grouptypes[] = {"ltestats","cpustats"};
static double cpufreq;
+extern notifiedFIFO_t measur_fifo;
#define TELNET_NUM_MEASURTYPES (sizeof(grouptypes)/sizeof(char *))
#define HDR "---------------------------------"
diff --git a/common/utils/threadPool/measurement_display.c b/common/utils/threadPool/measurement_display.c
index 0f5a3e0f69..cf2febaf33 100644
--- a/common/utils/threadPool/measurement_display.c
+++ b/common/utils/threadPool/measurement_display.c
@@ -43,9 +43,9 @@ int main(int argc, char *argv[]) {
exit(1);
}
- uint64_t deb=rdtsc();
+ uint64_t deb=rdtsc_oai();
usleep(100000);
- cpuCyclesMicroSec=(rdtsc()-deb)/100000;
+ cpuCyclesMicroSec=(rdtsc_oai()-deb)/100000;
printf("Cycles per µs: %lu\n",cpuCyclesMicroSec);
printf("Key" SEP "delay to process" SEP "processing time" SEP "delay to be read answer\n");
notifiedFIFO_elt_t doneRequest;
diff --git a/common/utils/threadPool/thread-pool.c b/common/utils/threadPool/thread-pool.c
index fff09528a8..de9091de79 100644
--- a/common/utils/threadPool/thread-pool.c
+++ b/common/utils/threadPool/thread-pool.c
@@ -72,11 +72,11 @@ void *one_thread(void *arg) {
do {
notifiedFIFO_elt_t *elt=pullNotifiedFifoRemember(&tp->incomingFifo, myThread);
- if (tp->measurePerf) elt->startProcessingTime=rdtsc();
+ if (tp->measurePerf) elt->startProcessingTime=rdtsc_oai();
elt->processingFunc(NotifiedFifoData(elt));
- if (tp->measurePerf) elt->endProcessingTime=rdtsc();
+ if (tp->measurePerf) elt->endProcessingTime=rdtsc_oai();
if (elt->reponseFifo) {
// Check if the job is still alive, else it has been aborted
@@ -97,7 +97,7 @@ void initNamedTpool(char *params,tpool_t *pool, bool performanceMeas, char *name
char *measr=getenv("threadPoolMeasurements");
pool->measurePerf=performanceMeas;
// force measurement if the output is defined
- pool->measurePerf=measr!=NULL;
+ pool->measurePerf |= measr!=NULL;
if (measr) {
mkfifo(measr,0666);
diff --git a/common/utils/threadPool/thread-pool.h b/common/utils/threadPool/thread-pool.h
index a8f8572cfe..d06f2195ee 100644
--- a/common/utils/threadPool/thread-pool.h
+++ b/common/utils/threadPool/thread-pool.h
@@ -27,11 +27,11 @@
#include
#include
#include
+#include
#include
-#include
-#include
-#include
-//#include
+#include "assertions.h"
+#include "common/utils/time_meas.h"
+#include "common/utils/system.h"
#ifdef DEBUG
#define THREADINIT PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
@@ -60,10 +60,10 @@ typedef struct notifiedFIFO_elt_s {
struct notifiedFIFO_s *reponseFifo;
void (*processingFunc)(void *);
bool malloced;
- uint64_t creationTime;
- uint64_t startProcessingTime;
- uint64_t endProcessingTime;
- uint64_t returnTime;
+ oai_cputime_t creationTime;
+ oai_cputime_t startProcessingTime;
+ oai_cputime_t endProcessingTime;
+ oai_cputime_t returnTime;
void *msgData;
} notifiedFIFO_elt_t;
@@ -97,12 +97,11 @@ static inline void *NotifiedFifoData(notifiedFIFO_elt_t *elt) {
static inline void delNotifiedFIFO_elt(notifiedFIFO_elt_t *elt) {
if (elt->malloced) {
- elt->malloced=false;
+ elt->malloced = false;
free(elt);
- } else
- printf("delNotifiedFIFO on something not allocated by newNotifiedFIFO\n");
-
- //LOG_W(UTIL,"delNotifiedFIFO on something not allocated by newNotifiedFIFO\n");
+ }
+ /* it is allowed to call delNotifiedFIFO_elt when the memory is managed by
+ * the caller */
}
static inline void initNotifiedFIFO_nothreadSafe(notifiedFIFO_t *nf) {
@@ -141,8 +140,7 @@ static inline notifiedFIFO_elt_t *pullNotifiedFIFO_nothreadSafe(notifiedFIFO_t
notifiedFIFO_elt_t *ret=nf->outF;
- if (nf->outF==nf->outF->next)
- LOG_E(UTIL,"Circular list in thread pool: push several times the same buffer is forbidden\n");
+ AssertFatal(nf->outF != nf->outF->next,"Circular list in thread pool: push several times the same buffer is forbidden\n");
nf->outF=nf->outF->next;
@@ -174,6 +172,20 @@ static inline notifiedFIFO_elt_t *pollNotifiedFIFO(notifiedFIFO_t *nf) {
return ret;
}
+static inline time_stats_t exec_time_stats_NotifiedFIFO(const notifiedFIFO_elt_t* elt)
+{
+ time_stats_t ts = {0};
+ if (elt->startProcessingTime == 0 && elt->endProcessingTime == 0)
+ return ts; /* no measurements done */
+ ts.in = elt->startProcessingTime;
+ ts.diff = elt->endProcessingTime - ts.in;
+ ts.p_time = ts.diff;
+ ts.diff_square = ts.diff * ts.diff;
+ ts.max = ts.diff;
+ ts.trials = 1;
+ return ts;
+}
+
// This function aborts all messages matching the key
// If the queue is used in thread pools, it doesn't cancels already running processing
// because the message has already been picked
@@ -224,18 +236,18 @@ typedef struct thread_pool {
} tpool_t;
static inline void pushTpool(tpool_t *t, notifiedFIFO_elt_t *msg) {
- if (t->measurePerf) msg->creationTime=rdtsc();
+ if (t->measurePerf) msg->creationTime=rdtsc_oai();
if ( t->activated)
pushNotifiedFIFO(&t->incomingFifo, msg);
else {
if (t->measurePerf)
- msg->startProcessingTime=rdtsc();
+ msg->startProcessingTime=rdtsc_oai();
msg->processingFunc(NotifiedFifoData(msg));
if (t->measurePerf)
- msg->endProcessingTime=rdtsc();
+ msg->endProcessingTime=rdtsc_oai();
if (msg->reponseFifo)
pushNotifiedFIFO(msg->reponseFifo, msg);
@@ -246,7 +258,7 @@ static inline notifiedFIFO_elt_t *pullTpool(notifiedFIFO_t *responseFifo, tpool_
notifiedFIFO_elt_t *msg= pullNotifiedFIFO(responseFifo);
AssertFatal(t->traceFd, "Thread pool used while not initialized");
if (t->measurePerf)
- msg->returnTime=rdtsc();
+ msg->returnTime=rdtsc_oai();
if (t->traceFd > 0)
if(write(t->traceFd, msg, sizeof(*msg)));
@@ -261,7 +273,7 @@ static inline notifiedFIFO_elt_t *tryPullTpool(notifiedFIFO_t *responseFifo, tpo
return NULL;
if (t->measurePerf)
- msg->returnTime=rdtsc();
+ msg->returnTime=rdtsc_oai();
if (t->traceFd)
if(write(t->traceFd, msg, sizeof(*msg)));
diff --git a/openair1/PHY/TOOLS/time_meas.c b/common/utils/time_meas.c
similarity index 97%
rename from openair1/PHY/TOOLS/time_meas.c
rename to common/utils/time_meas.c
index 353f170434..df2bfd64de 100644
--- a/openair1/PHY/TOOLS/time_meas.c
+++ b/common/utils/time_meas.c
@@ -267,6 +267,15 @@ void init_meas(void) {
AssertFatal(rt==0, "couldn't create cpu measurment thread: %s\n",strerror(errno));
}
+void send_meas(time_stats_t *ts, int msgid) {
+ if (MEASURE_ENABLED(ts) ) {
+ ts->tstatptr->timestat_id=ts->meas_index;
+ ts->tstatptr->msgid = msgid ;
+ ts->tstatptr->ts = rdtsc_oai();
+ pushNotifiedFIFO(&measur_fifo, ts->tpoolmsg);
+ }
+ }
+
void end_meas(void) {
notifiedFIFO_elt_t *nfe = newNotifiedFIFO_elt(sizeof(time_stats_msg_t),0,NULL,NULL);
time_stats_msg_t *msg = (time_stats_msg_t *)NotifiedFifoData(nfe);
diff --git a/openair1/PHY/TOOLS/time_meas.h b/common/utils/time_meas.h
similarity index 83%
rename from openair1/PHY/TOOLS/time_meas.h
rename to common/utils/time_meas.h
index ed4e9a125f..382dd7455a 100644
--- a/openair1/PHY/TOOLS/time_meas.h
+++ b/common/utils/time_meas.h
@@ -31,15 +31,14 @@
#include
#include
#include
-#include "common/utils/threadPool/thread-pool.h"
// global var to enable openair performance profiler
extern int opp_enabled;
extern double cpu_freq_GHz __attribute__ ((aligned(32)));;
// structure to store data to compute cpu measurment
#if defined(__x86_64__) || defined(__i386__)
- #define OAI_CPUTIME_TYPE long long
+ typedef long long oai_cputime_t;
#elif defined(__arm__)
- #define OAI_CPUTIME_TYPE uint32_t
+ typedef uint32_t oai_cputime_t;
#else
#error "building on unsupported CPU architecture"
#endif
@@ -54,23 +53,23 @@ typedef void(*meas_printfunc_t)(const char* format, ...);
typedef struct {
int msgid; /*!< \brief message id, as defined by TIMESTAT_MSGID_X macros */
int timestat_id; /*!< \brief points to the time_stats_t entry in cpumeas table */
- OAI_CPUTIME_TYPE ts; /*!< \brief time stamp */
+ oai_cputime_t ts; /*!< \brief time stamp */
meas_printfunc_t displayFunc; /*!< \brief function to call when DISPLAY message is received*/
} time_stats_msg_t;
-
-typedef struct {
- OAI_CPUTIME_TYPE in; /*!< \brief time at measure starting point */
- OAI_CPUTIME_TYPE diff; /*!< \brief average difference between time at starting point and time at endpoint*/
- OAI_CPUTIME_TYPE p_time; /*!< \brief absolute process duration */
- OAI_CPUTIME_TYPE diff_square; /*!< \brief process duration square */
- OAI_CPUTIME_TYPE max; /*!< \brief maximum difference between time at starting point and time at endpoint*/
+struct notifiedFIFO_elt_s;
+typedef struct time_stats {
+ oai_cputime_t in; /*!< \brief time at measure starting point */
+ oai_cputime_t diff; /*!< \brief average difference between time at starting point and time at endpoint*/
+ oai_cputime_t p_time; /*!< \brief absolute process duration */
+ oai_cputime_t diff_square; /*!< \brief process duration square */
+ oai_cputime_t max; /*!< \brief maximum difference between time at starting point and time at endpoint*/
int trials; /*!< \brief number of start point - end point iterations */
int meas_flag; /*!< \brief 1: stop_meas not called (consecutive calls of start_meas) */
char *meas_name; /*!< \brief name to use when printing the measure (not used for PHY simulators)*/
int meas_index; /*!< \brief index of this measure in the measure array (not used for PHY simulators)*/
int meas_enabled; /*!< \brief per measure enablement flag. send_meas tests this flag, unused today in start_meas and stop_meas*/
- notifiedFIFO_elt_t *tpoolmsg; /*!< \brief message pushed to the cpu measurment queue to report a measure START or STOP */
+ struct notifiedFIFO_elt_s *tpoolmsg; /*!< \brief message pushed to the cpu measurment queue to report a measure START or STOP */
time_stats_msg_t *tstatptr; /*!< \brief pointer to the time_stats_msg_t data in the tpoolmsg, stored here for perf considerations*/
} time_stats_t;
#define MEASURE_ENABLED(X) (X->meas_enabled)
@@ -179,7 +178,7 @@ static inline void copy_meas(time_stats_t *dst_ts,time_stats_t *src_ts) {
}
}
-static inline void merge_meas(time_stats_t *dst_ts, time_stats_t *src_ts)
+static inline void merge_meas(time_stats_t *dst_ts, const time_stats_t *src_ts)
{
if (!opp_enabled)
return;
@@ -189,25 +188,17 @@ static inline void merge_meas(time_stats_t *dst_ts, time_stats_t *src_ts)
dst_ts->max = src_ts->max;
}
-extern notifiedFIFO_t measur_fifo;
#define CPUMEASUR_SECTION "cpumeasur"
#define CPUMEASUR_PARAMS_DESC { \
{"max_cpumeasur", "Max number of cpu measur entries", 0, uptr:&max_cpumeasur, defintval:100, TYPE_UINT, 0},\
}
- void init_meas(void);
- time_stats_t *register_meas(char *name);
- #define START_MEAS(X) send_meas(X, TIMESTAT_MSGID_START)
- #define STOP_MEAS(X) send_meas(X, TIMESTAT_MSGID_STOP)
- static inline void send_meas(time_stats_t *ts, int msgid) {
- if (MEASURE_ENABLED(ts) ) {
- ts->tstatptr->timestat_id=ts->meas_index;
- ts->tstatptr->msgid = msgid ;
- ts->tstatptr->ts = rdtsc_oai();
- pushNotifiedFIFO(&measur_fifo, ts->tpoolmsg);
- }
- }
- void end_meas(void);
+void init_meas(void);
+time_stats_t *register_meas(char *name);
+#define START_MEAS(X) send_meas(X, TIMESTAT_MSGID_START)
+#define STOP_MEAS(X) send_meas(X, TIMESTAT_MSGID_STOP)
+void send_meas(time_stats_t *ts, int msgid);
+void end_meas(void);
#endif
diff --git a/configuration/bladeRF/enb-band7-5mhz.conf b/configuration/bladeRF/enb-band7-5mhz.conf
index 9d19207522..985f4eb378 100644
--- a/configuration/bladeRF/enb-band7-5mhz.conf
+++ b/configuration/bladeRF/enb-band7-5mhz.conf
@@ -206,19 +206,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="high";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="debug";
- rlc_log_verbosity ="high";
pdcp_log_level ="info";
- pdcp_log_verbosity ="high";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
@@ -267,17 +260,10 @@ RUs = (
log_config :
{
global_log_level ="info";
- global_log_verbosity ="high";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="high";
pdcp_log_level ="info";
- pdcp_log_verbosity ="high";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/doc/5Gnas.md b/doc/5Gnas.md
index 3d33af426c..db0c19f07e 100644
--- a/doc/5Gnas.md
+++ b/doc/5Gnas.md
@@ -23,7 +23,6 @@ This tuto for 5G gNB NAS design
# source files
-executables/ocp-gnb.c: a main loop to create a debuggable gNB, see document SW_archi.md
openair2/RRC/NR/nr_ngap_gNB.c: skeleton for interface with NGAP
openair3/NAS/COMMON/milenage.h: a simple milenage implementation, depend only on crypto library
openair3/NAS/COMMON/NR_NAS_defs.h: messages defined for NAS implemented in C: C struct, C enums and automatic conversion to labels for debug messages
diff --git a/doc/SW_archi.md b/doc/SW_archi.md
index 0e77cfa580..0a53bf3793 100644
--- a/doc/SW_archi.md
+++ b/doc/SW_archi.md
@@ -85,10 +85,6 @@ end
This tuto for 5G gNB design, with Open Cells main
{: .text-center}
-# Top file: executables/ocp-gnb.c
-
-the function main() initializes the data from configuration file
-
# The main thread is in ru_thread()
The infinite loop:
## rx_rf()
@@ -369,7 +365,7 @@ gtpv1u_create_s1u_tunnel(), delete tunnel, ... functions are called inside the o
# New GTP
## initialization
-ocp_gtpv1uTask(): this creates only the thread, doesn't configure anything
+gtpv1uTask(): this creates only the thread, doesn't configure anything
gtpv1Init(): creates a listening socket to Linux for a given reception and select a local IP address
## newGtpuCreateTunnel()
diff --git a/doc/TESTING_5GSA_setup.md b/doc/TESTING_5GSA_setup.md
index 048d8c86ff..f8c85bf2ca 100644
--- a/doc/TESTING_5GSA_setup.md
+++ b/doc/TESTING_5GSA_setup.md
@@ -169,8 +169,7 @@ MACRLCs = (
At the point of writing this document the control-plane exchanges between the CU and the DU over *F1-C* interface, as well as some IP traffic tests over *F1-U* have been validated using the OAI gNB/nrUE in RFSIMULATOR mode.
-
-*These extensions are not yet fully integrated into develop branch, as they are under merge request. Until they get fully integrated, the CU/DU functionalities can be tested in [NR_F1C_F1U_extensions](https://gitlab.eurecom.fr/oai/openairinterface5g/-/tree/NR_F1C_F1U_extensions) branch.*
+
## 1.2 OAI 5G Core Network installation and configuration
The instructions for the installation of OAI CN components (AMF, SMF, NRF, UPF) using `docker-compose` can be found [here](https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed/-/blob/master/README.md).
@@ -264,12 +263,12 @@ the gNB can be launched in 2 modes:
1. Launch the CU component:
```bash
sudo RFSIMULATOR=server ./nr-softmodem --rfsim --sa \
- -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
+ -O ../../../ci-scripts/conf_files/gNB_SA_CU.conf
```
2. Launch the DU component:
```bash
sudo RFSIMULATOR=server ./nr-softmodem --rfsim --sa \
- -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
+ -O ../../../ci-scripts/conf_files/gNB_SA_DU.conf
```
- To launch the OAI UE (valid in `monolithic` gNB and `CU/DU split` gNB):
diff --git a/doc/testing_gnb_w_cots_ue_resources/enb.conf b/doc/testing_gnb_w_cots_ue_resources/enb.conf
index a6bbd98bda..027b6f2499 100755
--- a/doc/testing_gnb_w_cots_ue_resources/enb.conf
+++ b/doc/testing_gnb_w_cots_ue_resources/enb.conf
@@ -206,19 +206,12 @@ eNBs =
log_config :
{
global_log_level ="info";
- global_log_verbosity ="high";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="debug";
- rlc_log_verbosity ="high";
pdcp_log_level ="info";
- pdcp_log_verbosity ="high";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
}
@@ -267,17 +260,10 @@ RUs = (
log_config :
{
global_log_level ="info";
- global_log_verbosity ="high";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="high";
pdcp_log_level ="info";
- pdcp_log_verbosity ="high";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/doc/testing_gnb_w_cots_ue_resources/gnb.conf b/doc/testing_gnb_w_cots_ue_resources/gnb.conf
index aae22a92ba..c96d207445 100755
--- a/doc/testing_gnb_w_cots_ue_resources/gnb.conf
+++ b/doc/testing_gnb_w_cots_ue_resources/gnb.conf
@@ -258,18 +258,11 @@ security = {
log_config :
{
global_log_level ="info";
- global_log_verbosity ="medium";
hw_log_level ="info";
- hw_log_verbosity ="medium";
phy_log_level ="info";
- phy_log_verbosity ="medium";
mac_log_level ="info";
- mac_log_verbosity ="high";
rlc_log_level ="info";
- rlc_log_verbosity ="medium";
pdcp_log_level ="info";
- pdcp_log_verbosity ="medium";
rrc_log_level ="info";
- rrc_log_verbosity ="medium";
};
diff --git a/doc/testing_gnb_w_cots_ue_resources/oai_enb.log b/doc/testing_gnb_w_cots_ue_resources/oai_enb.log
index 9b9de24a86..7356c0c88d 100755
--- a/doc/testing_gnb_w_cots_ue_resources/oai_enb.log
+++ b/doc/testing_gnb_w_cots_ue_resources/oai_enb.log
@@ -62,7 +62,6 @@ ITTI init, useMME: 1
[0m[0m[TMR] Starting itti queue: TASK_RRC_UE as task 31
[0m[0m[TMR] Starting itti queue: TASK_NAS_UE as task 32
[0m[0m[TMR] Starting itti queue: TASK_RAL_UE as task 33
-[0m[0m[TMR] Starting itti queue: TASK_MSC as task 34
[0m[0m[TMR] Starting itti queue: TASK_GTPV1_U as task 35
[0m[0m[TMR] Starting itti queue: TASK_UDP as task 36
[0m[0m[TMR] Starting itti queue: TASK_CU_F1 as task 37
diff --git a/doc/testing_gnb_w_cots_ue_resources/oai_gnb.log b/doc/testing_gnb_w_cots_ue_resources/oai_gnb.log
index 37b3c10516..3c76c0d0d6 100755
--- a/doc/testing_gnb_w_cots_ue_resources/oai_gnb.log
+++ b/doc/testing_gnb_w_cots_ue_resources/oai_gnb.log
@@ -58,7 +58,6 @@ CPU Freq is 3.092986
[0m[0m[TMR] Starting itti queue: TASK_RRC_UE as task 31
[0m[0m[TMR] Starting itti queue: TASK_NAS_UE as task 32
[0m[0m[TMR] Starting itti queue: TASK_RAL_UE as task 33
-[0m[0m[TMR] Starting itti queue: TASK_MSC as task 34
[0m[0m[TMR] Starting itti queue: TASK_GTPV1_U as task 35
[0m[0m[TMR] Starting itti queue: TASK_UDP as task 36
[0m[0m[TMR] Starting itti queue: TASK_CU_F1 as task 37
diff --git a/docker/Dockerfile.phySim.rhel8.2 b/docker/Dockerfile.phySim.rhel8.2
index 9f4b27ec0e..2627a9eafd 100644
--- a/docker/Dockerfile.phySim.rhel8.2
+++ b/docker/Dockerfile.phySim.rhel8.2
@@ -31,11 +31,14 @@ RUN rm -Rf /oai-ran
WORKDIR /oai-ran
COPY . .
+#only install address sanitizer for this container, the others don't need it
+RUN yum install -y libasan
+
#run build_oai to build the target image
RUN /bin/sh oaienv && \
cd cmake_targets && \
mkdir -p log && \
- ./build_oai --phy_simulators --ninja --verbose-ci
+ ./build_oai --phy_simulators --ninja --verbose-ci --sanitize-address
#start from scratch for target executable
FROM registry.access.redhat.com/ubi8/ubi:latest as oai-physim
@@ -85,6 +88,7 @@ COPY --from=phy-sim-build \
/lib64/liblapack.so.3 \
/lib64/libexslt.so.0 \
/lib64/libxslt.so.1 \
+ /usr/lib64/libasan.so.5 \
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
/oai-ran/cmake_targets/ran_build/build/libSIMU.so \
/oai-ran/cmake_targets/ran_build/build/libldpc.so \
diff --git a/executables/main-fs6.c b/executables/main-fs6.c
index 9e92f2e41a..fff4c51155 100644
--- a/executables/main-fs6.c
+++ b/executables/main-fs6.c
@@ -55,6 +55,59 @@ int sum(uint8_t *b, int s) {
return sum;
}
+
+extern double cpuf;
+
+typedef struct m {
+ uint64_t iterations;
+ uint64_t sum;
+ uint64_t maxArray[11];
+} Meas;
+
+int cmpint(const void *a, const void *b)
+{
+ uint64_t *aa=(uint64_t *)a;
+ uint64_t *bb=(uint64_t *)b;
+ return (int)(*aa-*bb);
+}
+
+static inline void printMeas(char *txt,
+ Meas *M,
+ int period)
+{
+ if (M->iterations%period == 0 ) {
+ char txt2[512];
+ sprintf(txt2,"%s avg=%" PRIu64 " iterations=%" PRIu64 " max=%"
+ PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 ":%" PRIu64 "\n",
+ txt,
+ M->sum/M->iterations,
+ M->iterations,
+ M->maxArray[1],M->maxArray[2], M->maxArray[3],M->maxArray[4], M->maxArray[5],
+ M->maxArray[6],M->maxArray[7], M->maxArray[8],M->maxArray[9],M->maxArray[10]);
+#if T_TRACER
+ LOG_W(PHY,"%s",txt2);
+#else
+ printf("%s",txt2);
+#endif
+ }
+}
+
+void updateTimes(uint64_t start, Meas *M, int period, char *txt)
+{
+ if (start!=0) {
+ uint64_t end=rdtsc_oai();
+ long long diff=(end-start)/(cpuf*1000);
+ M->maxArray[0]=diff;
+ M->sum+=diff;
+ M->iterations++;
+ qsort(M->maxArray, 11, sizeof(uint64_t), cmpint);
+ printMeas(txt,M,period);
+ }
+}
+
+#define initStaticTime(a) static __thread uint64_t a={0}
+#define pickStaticTime(a) do { a=rdtsc_oai(); } while (0)
+#define initRefTimes(a) static __thread Meas a= {0}
static inline int cmpintRev(const void *a, const void *b) {
uint64_t *aa=(uint64_t *)a;
uint64_t *bb=(uint64_t *)b;
@@ -82,7 +135,7 @@ static inline void printMeas2(char *txt, Meas *M, int period, bool MaxMin) {
static inline void updateTimesReset(uint64_t start, Meas *M, int period, bool MaxMin, char *txt) {
if (start!=0) {
- uint64_t end=rdtsc();
+ uint64_t end=rdtsc_oai();
long long diff=(end-start)/(cpuf*1000);
M->maxArray[0]=diff;
M->sum+=diff;
@@ -107,7 +160,7 @@ static inline void updateTimesReset(uint64_t start, Meas *M, int period, bool Ma
static inline void measTransportTime(uint64_t DuSend, uint64_t CuMicroSec, Meas *M, int period, bool MaxMin, char *txt) {
if (DuSend!=0) {
- uint64_t end=rdtsc();
+ uint64_t end=rdtsc_oai();
long long diff=(end-DuSend)/(cpuf*1000)-CuMicroSec;
M->maxArray[0]=diff;
M->sum+=diff;
@@ -894,7 +947,7 @@ void phy_procedures_eNB_TX_fromsplit(uint8_t *bufferZone, int nbBlocks, PHY_VARS
memcpy(eNB->pbch_pdu,hDL(bufferZone)->pbch_pdu, 4);
// Remove all scheduled DL, we will populate from the CU sending
- for (int UE_id=0; UE_iddlsch[UE_id][0];
if ( dlsch0 && dlsch0->rnti>0 ) {
@@ -1463,7 +1516,7 @@ void DL_cu_fs6(RU_t *ru, L1_rxtx_proc_t *proc, uint64_t DuClock, uint64_t start
}
hDL(bufferZone)->DuClock=DuClock;
- hDL(bufferZone)->CuSpentMicroSec=(rdtsc()-startCycle)/(cpuf*1000);
+ hDL(bufferZone)->CuSpentMicroSec=(rdtsc_oai()-startCycle)/(cpuf*1000);
updateTimesReset(startCycle, &CUprocessing, 1000, true,"CU entire processing from recv to send");
sendSubFrame(&sockFS6, bufferZone, sizeof(fs6_dl_t), CTsentCUv0 );
return;
@@ -1476,7 +1529,7 @@ void UL_cu_fs6(RU_t *ru, L1_rxtx_proc_t *proc, uint64_t *TS, uint64_t *DuClock,
pickStaticTime(begingWait);
int nb_blocks=receiveSubFrame(&sockFS6, bufferZone, sizeof(bufferZone), CTsentDUv0 );
* DuClock=hUDP(bufferZone)->senderClock;
- * startProcessing=rdtsc();
+ * startProcessing=rdtsc_oai();
updateTimesReset(begingWait, &fullLoop, 1000, false, "CU wait DU");
if (nb_blocks ==0) {
diff --git a/executables/main-ocp.c b/executables/main-ocp.c
index 04315a4d57..c9388e179d 100644
--- a/executables/main-ocp.c
+++ b/executables/main-ocp.c
@@ -87,10 +87,10 @@ AGENT_RRC_xface *agent_rrc_xface[NUM_MAX_ENB]= {0};
AGENT_MAC_xface *agent_mac_xface[NUM_MAX_ENB]= {0};
void flexran_agent_slice_update(mid_t module_idP) {
}
-int proto_agent_start(mod_id_t mod_id, const cudu_params_t *p) {
+int proto_agent_start(mid_t mod_id, const cudu_params_t *p) {
return 0;
}
-void proto_agent_stop(mod_id_t mod_id) {
+void proto_agent_stop(mid_t mod_id) {
}
static void *ru_thread( void *param );
diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c
index 2b1c36407b..fa0c3a1f63 100644
--- a/executables/nr-gnb.c
+++ b/executables/nr-gnb.c
@@ -300,8 +300,7 @@ void rx_func(void *param) {
}
static void dump_L1_meas_stats(PHY_VARS_gNB *gNB, RU_t *ru, char *output) {
int stroff = 0;
- stroff += print_meas_log(gNB->phy_proc_tx[0], "L1 Tx processing thread 0", NULL, NULL, output);
- //stroff += print_meas_log(gNB->phy_proc_tx[1], "L1 Tx processing thread 1", NULL, NULL, output+stroff);
+ stroff += print_meas_log(&gNB->phy_proc_tx, "L1 Tx processing", NULL, NULL, output);
stroff += print_meas_log(&gNB->dlsch_encoding_stats, "DLSCH encoding", NULL, NULL, output+stroff);
stroff += print_meas_log(&gNB->phy_proc_rx, "L1 Rx processing", NULL, NULL, output+stroff);
stroff += print_meas_log(&gNB->ul_indication_stats, "UL Indication", NULL, NULL, output+stroff);
@@ -337,8 +336,7 @@ void *nrL1_stats_thread(void *param) {
fd=fopen("nrL1_stats.log","w");
AssertFatal(fd!=NULL,"Cannot open nrL1_stats.log\n");
- reset_meas(gNB->phy_proc_tx[0]);
- //reset_meas(gNB->phy_proc_tx[1]);
+ reset_meas(&gNB->phy_proc_tx);
reset_meas(&gNB->dlsch_encoding_stats);
reset_meas(&gNB->phy_proc_rx);
reset_meas(&gNB->ul_indication_stats);
@@ -425,7 +423,7 @@ void init_gNB_Tpool(int inst) {
s_offset += 3;
}
if (getenv("noThreads")) strcpy(pool, "n");
- initTpool(pool, gNB->threadPool, false);
+ initTpool(pool, gNB->threadPool, cpumeas(CPUMEAS_GETSTATE));
// ULSCH decoder result FIFO
gNB->respDecode = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
initNotifiedFIFO(gNB->respDecode);
@@ -450,8 +448,6 @@ void init_gNB_Tpool(int inst) {
processingData_L1tx_t *msgDataTx = (processingData_L1tx_t *)NotifiedFifoData(msgL1Tx);
init_DLSCH_struct(gNB, msgDataTx);
memset(msgDataTx->ssb, 0, 64*sizeof(NR_gNB_SSB_t));
- reset_meas(&msgDataTx->phy_proc_tx);
- gNB->phy_proc_tx[i] = &msgDataTx->phy_proc_tx;
pushNotifiedFIFO(gNB->L1_tx_free,msgL1Tx); // to unblock the process in the beginning
}
diff --git a/executables/nr-softmodem-common.h b/executables/nr-softmodem-common.h
index 45d7852adc..47fd816db5 100644
--- a/executables/nr-softmodem-common.h
+++ b/executables/nr-softmodem-common.h
@@ -104,7 +104,6 @@
#define CONFIG_HLP_LOGL "Set the global log level, valid options: (4:trace, 3:debug, 2:info, 1:warn, (0:error))\n"
#define CONFIG_HLP_LOGV "Set the global log verbosity \n"
#define CONFIG_HLP_TELN "Start embedded telnet server \n"
-#define CONFIG_HLP_MSC "Enable the MSC tracing utility \n"
#define CONFIG_HLP_SNR "Set average SNR in dB (for --siml1 option)\n"
#define CONFIG_HLP_NOS1 "Disable s1 interface\n"
#define CONFIG_HLP_NOKRNMOD "(noS1 only): Use tun instead of namesh module \n"
@@ -112,13 +111,11 @@
/* command line parameters for LOG utility */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*--------------------------------------------------------------------------------------------------------------------------------*/
-#define START_MSC softmodem_params.start_msc
#define CMDLINE_LOGPARAMS_DESC_NR { \
{"R" , CONFIG_HLP_FLOG, 0, uptr:&online_log_messages, defintval:1, TYPE_INT, 0}, \
{"g" , CONFIG_HLP_LOGL, 0, uptr:&glog_level, defintval:0, TYPE_UINT, 0}, \
{"G" , CONFIG_HLP_LOGV, 0, uptr:&glog_verbosity, defintval:0, TYPE_UINT16, 0}, \
{"telnetsrv", CONFIG_HLP_TELN, PARAMFLAG_BOOL, uptr:&start_telnetsrv, defintval:0, TYPE_UINT, 0}, \
- {"msc", CONFIG_HLP_MSC, PARAMFLAG_BOOL, uptr:&START_MSC, defintval:0, TYPE_UINT, 0}, \
}
#define CMDLINE_ONLINELOG_IDX 0
diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c
index 5f57919645..ac5a1b0132 100644
--- a/executables/nr-softmodem.c
+++ b/executables/nr-softmodem.c
@@ -29,8 +29,6 @@
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
#include
-#include "msc.h"
-
#include "PHY/types.h"
#include "common/ran_context.h"
@@ -64,8 +62,6 @@ unsigned short config_frames[4] = {2,9,11,13};
#include "common/utils/LOG/vcd_signal_dumper.h"
#include "UTIL/OPT/opt.h"
-//#include "PHY/TOOLS/time_meas.h"
-
#include "intertask_interface.h"
#include "PHY/INIT/phy_init.h"
@@ -365,7 +361,7 @@ int create_gNB_tasks(uint32_t gnb_nb) {
//Use check on x2ap to consider the NSA scenario and check on AMF_MODE_ENABLED for the SA scenario
if(is_x2ap_enabled() || AMF_MODE_ENABLED) {
- if (itti_create_task (TASK_GTPV1_U, &nr_gtpv1u_gNB_task, NULL) < 0) {
+ if (itti_create_task (TASK_GTPV1_U, >pv1uTask, NULL) < 0) {
LOG_E(GTPU, "Create task for GTPV1U failed\n");
return -1;
}
@@ -589,48 +585,21 @@ static void wait_nfapi_init(char *thread_name) {
}
void init_pdcp(void) {
+ uint32_t pdcp_initmask = (IS_SOFTMODEM_NOS1) ?
+ PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT:
+ LINK_ENB_PDCP_TO_GTPV1U_BIT;
+
if (!get_softmodem_params()->nsa) {
if (!NODE_IS_DU(RC.nrrrc[0]->node_type)) {
- //pdcp_layer_init();
- uint32_t pdcp_initmask = (IS_SOFTMODEM_NOS1) ?
- (PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT) : LINK_ENB_PDCP_TO_GTPV1U_BIT;
-
- if (IS_SOFTMODEM_NOS1) {
- printf("IS_SOFTMODEM_NOS1 option enabled \n");
- pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT;
- }
-
+ pdcp_layer_init();
nr_pdcp_module_init(pdcp_initmask, 0);
-
- if (NODE_IS_CU(RC.nrrrc[0]->node_type)) {
- LOG_I(PDCP, "node is CU, pdcp send rlc_data_req by proto_agent \n");
- pdcp_set_rlc_data_req_func((send_rlc_data_req_func_t)proto_agent_send_rlc_data_req);
- } else {
- LOG_I(PDCP, "node is gNB \n");
- pdcp_set_rlc_data_req_func((send_rlc_data_req_func_t) rlc_data_req);
- pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) pdcp_data_ind);
- }
- } else {
- LOG_I(PDCP, "node is DU, rlc send pdcp_data_ind by proto_agent \n");
- pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) proto_agent_send_pdcp_data_ind);
}
} else {
pdcp_layer_init();
- uint32_t pdcp_initmask = (IS_SOFTMODEM_NOS1) ?
- (PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT) : LINK_ENB_PDCP_TO_GTPV1U_BIT;
-
- if (IS_SOFTMODEM_NOS1) {
- printf("IS_SOFTMODEM_NOS1 option enabled \n");
- pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT;
- }
-
nr_pdcp_module_init(pdcp_initmask, 0);
- pdcp_set_rlc_data_req_func((send_rlc_data_req_func_t) rlc_data_req);
- pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) pdcp_data_ind);
}
}
-
int main( int argc, char **argv ) {
int ru_id, CC_id = 0;
start_background_system();
@@ -684,7 +653,6 @@ int main( int argc, char **argv ) {
cpuf=get_cpu_freq_GHz();
itti_init(TASK_MAX, tasks_info);
// initialize mscgen log after ITTI
- MSC_INIT(MSC_E_UTRAN, ADDED_QUEUES_MAX+TASK_MAX);
init_opt();
if(PDCP_USE_NETLINK && !IS_SOFTMODEM_NOS1) {
netlink_init();
diff --git a/executables/nr-softmodem.h b/executables/nr-softmodem.h
index 4190a6074b..834e89b403 100644
--- a/executables/nr-softmodem.h
+++ b/executables/nr-softmodem.h
@@ -5,7 +5,6 @@
#include "flexran_agent.h"
#include "PHY/defs_gNB.h"
-#include "proto_agent.h"
#define DEFAULT_DLF 2680000000
@@ -65,5 +64,6 @@ void init_gNB_afterRU(void);
extern int stop_L1L2(module_id_t gnb_id);
extern int restart_L1L2(module_id_t gnb_id);
+void init_pdcp(void);
#endif
diff --git a/executables/nr-ue.c b/executables/nr-ue.c
index 0a59ba3b6a..543be7a8b5 100644
--- a/executables/nr-ue.c
+++ b/executables/nr-ue.c
@@ -18,7 +18,8 @@
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
-
+#define _GNU_SOURCE
+#include
#include
#include "executables/nr-uesoftmodem.h"
#include "PHY/phy_extern_nr_ue.h"
@@ -166,10 +167,10 @@ void init_nr_ue_vars(PHY_VARS_NR_UE *ue,
}
// initialize all signal buffers
- init_nr_ue_signal(ue, nb_connected_gNB, abstraction_flag);
+ init_nr_ue_signal(ue, nb_connected_gNB);
// intialize transport
- init_nr_ue_transport(ue, abstraction_flag);
+ init_nr_ue_transport(ue);
// init N_TA offset
init_N_TA_offset(ue);
@@ -765,9 +766,9 @@ void processSlotRX(void *arg) {
#ifdef UE_SLOT_PARALLELISATION
phy_procedures_slot_parallelization_nrUE_RX( UE, proc, 0, 0, 1, no_relay, NULL );
#else
- uint64_t a=rdtsc();
+ uint64_t a=rdtsc_oai();
phy_procedures_nrUE_RX(UE, proc, gNB_id, get_nrUE_params()->nr_dlsch_parallel, &rxtxD->txFifo);
- LOG_D(PHY, "In %s: slot %d, time %lu\n", __FUNCTION__, proc->nr_slot_rx, (rdtsc()-a)/3500);
+ LOG_D(PHY, "In %s: slot %d, time %llu\n", __FUNCTION__, proc->nr_slot_rx, (rdtsc_oai()-a)/3500);
#endif
if(IS_SOFTMODEM_NOS1 || get_softmodem_params()->sa){
diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c
index 7663e9ebd8..76c21bb422 100644
--- a/executables/nr-uesoftmodem.c
+++ b/executables/nr-uesoftmodem.c
@@ -61,7 +61,6 @@ unsigned short config_frames[4] = {2,9,11,13};
#include "UTIL/OPT/opt.h"
#include "enb_config.h"
-//#include "PHY/TOOLS/time_meas.h"
#include "intertask_interface.h"
diff --git a/executables/ocp-gnb.c b/executables/ocp-gnb.c
deleted file mode 100644
index 462a07c707..0000000000
--- a/executables/ocp-gnb.c
+++ /dev/null
@@ -1,1007 +0,0 @@
-/*
- * Author: Laurent Thomas, Open Cells Project
- * all rights reserved
- */
-
-#define _GNU_SOURCE
-#include
-#include "assertions.h"
-#include
-#include
-
-#include "PHY/types.h"
-
-#include "PHY/INIT/phy_init.h"
-
-#include "PHY/defs_gNB.h"
-#include "SCHED/sched_eNB.h"
-#include "SCHED_NR/sched_nr.h"
-#include "SCHED_NR/fapi_nr_l1.h"
-#include "PHY/LTE_TRANSPORT/transport_proto.h"
-#include "../../ARCH/COMMON/common_lib.h"
-
-#include "PHY/phy_extern.h"
-#include "LAYER2/MAC/mac.h"
-#include "LAYER2/NR_MAC_COMMON/nr_mac_extern.h"
-#include "LAYER2/MAC/mac_proto.h"
-#include "RRC/LTE/rrc_extern.h"
-#include "PHY_INTERFACE/phy_interface.h"
-#include "common/utils/LOG/log_extern.h"
-#include "UTIL/OTG/otg_tx.h"
-#include "UTIL/OTG/otg_externs.h"
-#include "UTIL/MATH/oml.h"
-#include "common/utils/LOG/vcd_signal_dumper.h"
-#include "UTIL/OPT/opt.h"
-#include "enb_config.h"
-#include "s1ap_eNB.h"
-#include "SIMULATION/ETH_TRANSPORT/proto.h"
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-// should be in a shared lib
-#include
-#include
-#include
-#include
-
-// Global vars
-#include
-#include
-#include
-#include
-volatile int oai_exit;
-int single_thread_flag=1;
-uint32_t do_forms=0;
-unsigned int mmapped_dma=0;
-int8_t threequarter_fs=0;
-
-int chain_offset=0;
-uint16_t sl_ahead=6;
-uint16_t sf_ahead=6;
-uint32_t timing_advance = 0;
-int transmission_mode=1;
-int emulate_rf = 0;
-int numerology = 0;
-
-
-int config_sync_var=-1;
-pthread_mutex_t nfapi_sync_mutex;
-pthread_cond_t nfapi_sync_cond;
-int nfapi_sync_var=-1;
-double cpuf;
-
-THREAD_STRUCT thread_struct;
-
-pthread_cond_t sync_cond;
-pthread_mutex_t sync_mutex;
-int sync_var=-1; //!< protected by mutex \ref sync_mutex.
-
-
-uint64_t downlink_frequency[MAX_NUM_CCs][4];
-int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
-time_stats_t softmodem_stats_mt; // main thread
-time_stats_t softmodem_stats_hw; // hw acquisition
-time_stats_t softmodem_stats_rxtx_sf; // total tx time
-time_stats_t nfapi_meas; // total tx time
-time_stats_t softmodem_stats_rx_sf; // total rx time
-// not used but needed for link
-openair0_config_t openair0_cfg[MAX_CARDS];
-uint16_t slot_ahead=6;
-msc_interface_t msc_interface;
-AGENT_RRC_xface *agent_rrc_xface[NUM_MAX_ENB];
-AGENT_MAC_xface *agent_mac_xface[NUM_MAX_ENB];
-int flexran_agent_start(mid_t mod_id) {
- memset (agent_rrc_xface, 0, sizeof(agent_rrc_xface));
- memset (agent_mac_xface, 0, sizeof(agent_mac_xface));
- return 0;
-}
-void flexran_agent_slice_update(mid_t module_idP) {
-}
-int proto_agent_start(mod_id_t mod_id, const cudu_params_t *p) {
- return 0;
-}
-void proto_agent_stop(mod_id_t mod_id) {
-}
-int split73=0;
-void sendFs6Ul(PHY_VARS_eNB *eNB, int UE_id, int harq_pid, int segmentID, int16_t *data, int dataLen, int r_offset) {
- AssertFatal(false, "Must not be called in this context\n");
-}
-int stop_L1L2(module_id_t gnb_id) {
- AssertFatal(false, "Must not be called in this context\n");
-}
-int restart_L1L2(module_id_t gnb_id) {
- AssertFatal(false, "Must not be called in this context\n");
-}
-
-static int wait_for_sync = 0;
-static double snr_dB=20;
-static int DEFBANDS[] = {7};
-static int DEFENBS[] = {0};
-static int DEFBFW[] = {0x00007fff};
-
-extern double cpuf;
-
-short nr_mod_table[NR_MOD_TABLE_SIZE_SHORT] = {0,0,16384,16384,-16384,-16384,16384,16384,16384,-16384,-16384,16384,-16384,-16384,7327,7327,7327,21981,21981,7327,21981,21981,7327,-7327,7327,-21981,21981,-7327,21981,-21981,-7327,7327,-7327,21981,-21981,7327,-21981,21981,-7327,-7327,-7327,-21981,-21981,-7327,-21981,-21981,10726,10726,10726,3576,3576,10726,3576,3576,10726,17876,10726,25027,3576,17876,3576,25027,17876,10726,17876,3576,25027,10726,25027,3576,17876,17876,17876,25027,25027,17876,25027,25027,10726,-10726,10726,-3576,3576,-10726,3576,-3576,10726,-17876,10726,-25027,3576,-17876,3576,-25027,17876,-10726,17876,-3576,25027,-10726,25027,-3576,17876,-17876,17876,-25027,25027,-17876,25027,-25027,-10726,10726,-10726,3576,-3576,10726,-3576,3576,-10726,17876,-10726,25027,-3576,17876,-3576,25027,-17876,10726,-17876,3576,-25027,10726,-25027,3576,-17876,17876,-17876,25027,-25027,17876,-25027,25027,-10726,-10726,-10726,-3576,-3576,-10726,-3576,-3576,-10726,-17876,-10726,-25027,-3576,-17876,-3576,-25027,-17876,-10726,-17876,-3576,-25027,-10726,-25027,-3576,-17876,-17876,-17876,-25027,-25027,-17876,-25027,-25027,8886,8886,8886,12439,12439,8886,12439,12439,8886,5332,8886,1778,12439,5332,12439,1778,5332,8886,5332,12439,1778,8886,1778,12439,5332,5332,5332,1778,1778,5332,1778,1778,8886,19547,8886,15993,12439,19547,12439,15993,8886,23101,8886,26655,12439,23101,12439,26655,5332,19547,5332,15993,1778,19547,1778,15993,5332,23101,5332,26655,1778,23101,1778,26655,19547,8886,19547,12439,15993,8886,15993,12439,19547,5332,19547,1778,15993,5332,15993,1778,23101,8886,23101,12439,26655,8886,26655,12439,23101,5332,23101,1778,26655,5332,26655,1778,19547,19547,19547,15993,15993,19547,15993,15993,19547,23101,19547,26655,15993,23101,15993,26655,23101,19547,23101,15993,26655,19547,26655,15993,23101,23101,23101,26655,26655,23101,26655,26655,8886,-8886,8886,-12439,12439,-8886,12439,-12439,8886,-5332,8886,-1778,12439,-5332,12439,-1778,5332,-8886,5332,-12439,1778,-8886,1778,-12439,5332,-5332,5332,-1778,1778,-5332,1778,-1778,8886,-19547,8886,-15993,12439,-19547,12439,-15993,8886,-23101,8886,-26655,12439,-23101,12439,-26655,5332,-19547,5332,-15993,1778,-19547,1778,-15993,5332,-23101,5332,-26655,1778,-23101,1778,-26655,19547,-8886,19547,-12439,15993,-8886,15993,-12439,19547,-5332,19547,-1778,15993,-5332,15993,-1778,23101,-8886,23101,-12439,26655,-8886,26655,-12439,23101,-5332,23101,-1778,26655,-5332,26655,-1778,19547,-19547,19547,-15993,15993,-19547,15993,-15993,19547,-23101,19547,-26655,15993,-23101,15993,-26655,23101,-19547,23101,-15993,26655,-19547,26655,-15993,23101,-23101,23101,-26655,26655,-23101,26655,-26655,-8886,8886,-8886,12439,-12439,8886,-12439,12439,-8886,5332,-8886,1778,-12439,5332,-12439,1778,-5332,8886,-5332,12439,-1778,8886,-1778,12439,-5332,5332,-5332,1778,-1778,5332,-1778,1778,-8886,19547,-8886,15993,-12439,19547,-12439,15993,-8886,23101,-8886,26655,-12439,23101,-12439,26655,-5332,19547,-5332,15993,-1778,19547,-1778,15993,-5332,23101,-5332,26655,-1778,23101,-1778,26655,-19547,8886,-19547,12439,-15993,8886,-15993,12439,-19547,5332,-19547,1778,-15993,5332,-15993,1778,-23101,8886,-23101,12439,-26655,8886,-26655,12439,-23101,5332,-23101,1778,-26655,5332,-26655,1778,-19547,19547,-19547,15993,-15993,19547,-15993,15993,-19547,23101,-19547,26655,-15993,23101,-15993,26655,-23101,19547,-23101,15993,-26655,19547,-26655,15993,-23101,23101,-23101,26655,-26655,23101,-26655,26655,-8886,-8886,-8886,-12439,-12439,-8886,-12439,-12439,-8886,-5332,-8886,-1778,-12439,-5332,-12439,-1778,-5332,-8886,-5332,-12439,-1778,-8886,-1778,-12439,-5332,-5332,-5332,-1778,-1778,-5332,-1778,-1778,-8886,-19547,-8886,-15993,-12439,-19547,-12439,-15993,-8886,-23101,-8886,-26655,-12439,-23101,-12439,-26655,-5332,-19547,-5332,-15993,-1778,-19547,-1778,-15993,-5332,-23101,-5332,-26655,-1778,-23101,-1778,-26655,-19547,-8886,-19547,-12439,-15993,-8886,-15993,-12439,-19547,-5332,-19547,-1778,-15993,-5332,-15993,-1778,-23101,-8886,-23101,-12439,-26655,-8886,-26655,-12439,-23101,-5332,-23101,-1778,-26655,-5332,-26655,-1778,-19547,-19547,-19547,-15993,-15993,-19547,-15993,-15993,-19547,-23101,-19547,-26655,-15993,-23101,-15993,-26655,-23101,-19547,-23101,-15993,-26655,-19547,-26655,-15993,-23101,-23101,-23101,-26655,-26655,-23101,-26655,-26655};
-
-static inline int ocp_rxtx(PHY_VARS_gNB *gNB, gNB_L1_rxtx_proc_t *proc) {
- nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
- start_meas(&softmodem_stats_rxtx_sf);
-
- // *******************************************************************
-
- if (nfapi_mode == NFAPI_MODE_PNF) {
- // I am a PNF and I need to let nFAPI know that we have a (sub)frame tick
- //add_subframe(&frame, &subframe, 4);
- //oai_subframe_ind(proc->frame_tx, proc->subframe_tx);
- //LOG_D(PHY, "oai_subframe_ind(frame:%u, subframe:%d) - NOT CALLED ********\n", frame, subframe);
- start_meas(&nfapi_meas);
- oai_subframe_ind(proc->frame_rx, proc->slot_rx);
- stop_meas(&nfapi_meas);
- /*if (gNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus||
- gNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs ||
- gNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs ||
- gNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles ||
- gNB->UL_INFO.cqi_ind.number_of_cqis
- ) {
- LOG_D(PHY, "UL_info[rx_ind:%05d:%d harqs:%05d:%d crcs:%05d:%d preambles:%05d:%d cqis:%d] RX:%04d%d TX:%04d%d \n",
- NFAPI_SFNSF2DEC(gNB->UL_INFO.rx_ind.sfn_sf), gNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus,
- NFAPI_SFNSF2DEC(gNB->UL_INFO.harq_ind.sfn_sf), gNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs,
- NFAPI_SFNSF2DEC(gNB->UL_INFO.crc_ind.sfn_sf), gNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs,
- NFAPI_SFNSF2DEC(gNB->UL_INFO.rach_ind.sfn_sf), gNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles,
- gNB->UL_INFO.cqi_ind.number_of_cqis,
- frame_rx, slot_rx,
- frame_tx, slot_tx);
- }*/
- }
-
- /// NR disabling
- // ****************************************
- // Common RX procedures subframe n
- pthread_mutex_lock(&gNB->UL_INFO_mutex);
- gNB->UL_INFO.frame = proc->frame_rx;
- gNB->UL_INFO.slot = proc->slot_rx;
- gNB->UL_INFO.module_id = gNB->Mod_id;
- gNB->UL_INFO.CC_id = gNB->CC_id;
- gNB->if_inst->NR_UL_indication(&gNB->UL_INFO);
- pthread_mutex_unlock(&gNB->UL_INFO_mutex);
- // RX processing
- int tx_slot_type = nr_slot_select(cfg,proc->frame_tx,proc->slot_tx);
- int rx_slot_type = nr_slot_select(cfg,proc->frame_rx,proc->slot_rx);
-
- if (rx_slot_type == NR_UPLINK_SLOT || rx_slot_type == NR_MIXED_SLOT) {
- // Do PRACH RU processing
- L1_nr_prach_procedures(gNB,proc->frame_rx,proc->slot_rx);
- phy_procedures_gNB_uespec_RX(gNB, proc->frame_rx, proc->slot_rx);
- }
-
- if (oai_exit) return(-1);
-
- // *****************************************
- // TX processing for subframe n+sf_ahead
- // run PHY TX procedures the one after the other for all CCs to avoid race conditions
- // (may be relaxed in the future for performance reasons)
- // *****************************************
-
- if (tx_slot_type == NR_DOWNLINK_SLOT || tx_slot_type == NR_MIXED_SLOT) {
- phy_procedures_gNB_TX(gNB, proc->frame_tx,proc->slot_tx, 1);
- }
-
- stop_meas( &softmodem_stats_rxtx_sf );
- LOG_D(PHY,"%s() Exit proc[rx:%d%d tx:%d%d]\n", __FUNCTION__, proc->frame_rx, proc->slot_rx, proc->frame_tx, proc->slot_tx);
- return(0);
-}
-
-
-static void *process_stats_thread(void *param) {
- PHY_VARS_gNB *gNB = (PHY_VARS_gNB *)param;
- reset_meas(&gNB->dlsch_encoding_stats);
- reset_meas(&gNB->dlsch_scrambling_stats);
- reset_meas(&gNB->dlsch_modulation_stats);
-
- while(!oai_exit) {
- sleep(1);
- print_meas(&gNB->dlsch_encoding_stats, "pdsch_encoding", NULL, NULL);
- print_meas(&gNB->dlsch_scrambling_stats, "pdsch_scrambling", NULL, NULL);
- print_meas(&gNB->dlsch_modulation_stats, "pdsch_modulation", NULL, NULL);
- }
-
- return(NULL);
-}
-
-void init_gNB_proc(int inst) {
- PHY_VARS_gNB *gNB = RC.gNB[inst];
- gNB_L1_proc_t *proc = &gNB->proc;
- gNB_L1_rxtx_proc_t *L1_proc = &proc->L1_proc;
- gNB_L1_rxtx_proc_t *L1_proc_tx = &proc->L1_proc_tx;
- L1_proc->instance_cnt = -1;
- L1_proc_tx->instance_cnt = -1;
- L1_proc->instance_cnt_RUs = 0;
- L1_proc_tx->instance_cnt_RUs = 0;
- proc->instance_cnt_prach = -1;
- proc->instance_cnt_asynch_rxtx = -1;
- proc->CC_id = 0;
- proc->first_rx =1;
- proc->first_tx =1;
- proc->RU_mask =0;
- proc->RU_mask_tx = (1<num_RU)-1;
- proc->RU_mask_prach =0;
- pthread_mutex_init( &gNB->UL_INFO_mutex, NULL);
- gNB->threadPool = (tpool_t *)malloc(sizeof(tpool_t));
- gNB->respDecode = (notifiedFIFO_t *) malloc(sizeof(notifiedFIFO_t));
- char ul_pool[] = "-1,-1";
- initTpool(ul_pool, gNB->threadPool, false);
- initNotifiedFIFO(gNB->respDecode);
-}
-
-/// eNB kept in function name for nffapi calls, TO FIX
-void init_gNB_phase2(RU_t *ru) {
- int inst;
- LOG_I(PHY,"%s() RC.nb_nr_inst:%d\n", __FUNCTION__, RC.nb_nr_inst);
-
- for (inst=0; instnum_RU:%d\n", gNB->num_RU);
- phy_init_nr_gNB(gNB,0,0);
- RC.gNB[inst]->num_RU=1;
- RC.gNB[inst]->RU_list[0]=ru;
- //init_precoding_weights(RC.gNB[inst][CC_id]);
- }
-}
-
-void init_gNB(int single_thread_flag,int wait_for_sync) {
- for (int inst=0; instRCconfig_NR_L1\n");
- PHY_VARS_gNB *gNB= RC.gNB[inst];
- gNB->abstraction_flag = false;
- gNB->single_thread_flag = true;
- /*nr_polar_init(&gNB->nrPolar_params,
- NR_POLAR_PBCH_MESSAGE_TYPE,
- NR_POLAR_PBCH_PAYLOAD_BITS,
- NR_POLAR_PBCH_AGGREGATION_LEVEL);*/
- LOG_I(PHY,"Registering with MAC interface module\n");
- AssertFatal((gNB->if_inst = NR_IF_Module_init(inst))!=NULL,"Cannot register interface");
- gNB->if_inst->NR_Schedule_response = nr_schedule_response;
- gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
- memset((void *)&gNB->UL_INFO,0,sizeof(gNB->UL_INFO));
- memset((void *)&gNB->UL_tti_req,0,sizeof(nfapi_nr_ul_tti_request_t));
- //memset((void *)&gNB->Sched_INFO,0,sizeof(gNB->Sched_INFO));
- LOG_I(PHY,"Setting indication lists\n");
- gNB->UL_INFO.rx_ind.pdu_list = gNB->rx_pdu_list;
- gNB->UL_INFO.crc_ind.crc_list = gNB->crc_pdu_list;
- /*gNB->UL_INFO.sr_ind.sr_indication_body.sr_pdu_list = gNB->sr_pdu_list;
- gNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list = gNB->harq_pdu_list;
- gNB->UL_INFO.cqi_ind.cqi_pdu_list = gNB->cqi_pdu_list;
- gNB->UL_INFO.cqi_ind.cqi_raw_pdu_list = gNB->cqi_raw_pdu_list;*/
- gNB->prach_energy_counter = 0;
- }
-
- LOG_I(PHY,"[nr-softmodem.c] gNB structure allocated\n");
-}
-
-
-void stop_gNB(int nb_inst) {
-}
-
-static void get_options(void) {
- paramdef_t cmdline_params[] = CMDLINE_PARAMS_DESC_GNB ;
- config_process_cmdline( cmdline_params,sizeof(cmdline_params)/sizeof(paramdef_t),NULL);
-
- if ( !(CONFIG_ISFLAGSET(CONFIG_ABORT)) ) {
- memset((void *)&RC,0,sizeof(RC));
- /* Read RC configuration file */
- NRRCConfig();
- printf("Configuration: nb_rrc_inst %d, nb_nr_L1_inst %d, nb_ru %hhd\n", RC.nb_nr_inst,RC.nb_nr_L1_inst,RC.nb_RU);
- }
-
- AssertFatal(RC.nb_nr_L1_inst == 1 && RC.nb_RU == 1, "Only one gNB, one RU and one carrier is supported\n");
-}
-
-void set_default_frame_parms(nfapi_nr_config_request_t *config[MAX_NUM_CCs],
- NR_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
- for (int CC_id=0; CC_idsubframe_config.numerology_index_mu.value =1;
- config[CC_id]->subframe_config.duplex_mode.value = 1; //FDD
- config[CC_id]->subframe_config.dl_cyclic_prefix_type.value = 0; //NORMAL
- config[CC_id]->rf_config.dl_carrier_bandwidth.value = 106;
- config[CC_id]->rf_config.ul_carrier_bandwidth.value = 106;
- config[CC_id]->sch_config.physical_cell_id.value = 0;
- }
-}
-
-static void init_pdcp(void) {
- //if (!NODE_IS_DU(RC.rrc[0]->node_type)) {
- pdcp_layer_init();
- uint32_t pdcp_initmask = (IS_SOFTMODEM_NOS1) ?
- (PDCP_USE_NETLINK_BIT | LINK_ENB_PDCP_TO_IP_DRIVER_BIT) : LINK_ENB_PDCP_TO_GTPV1U_BIT;
-
- if (IS_SOFTMODEM_NOS1) {
- printf("IS_SOFTMODEM_NOS1 option enabled \n");
- pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT ;
- }
-
- nr_pdcp_module_init(pdcp_initmask, 0);
- pdcp_set_rlc_data_req_func(rlc_data_req);
- pdcp_set_pdcp_data_ind_func(pdcp_data_ind);
-}
-
-void init_main_gNB(void) {
- RCconfig_NR_L1();
- RCconfig_nr_macrlc();
-
- if (RC.nb_nr_L1_inst>0)
- AssertFatal(l1_north_init_gNB()==0,"could not initialize L1 north interface\n");
-
- LOG_I(GNB_APP,"Allocating gNB_RRC_INST for %d instances\n",RC.nb_nr_inst);
- RC.nrrrc = (gNB_RRC_INST **)calloc(RC.nb_nr_inst*sizeof(gNB_RRC_INST *),1);
- LOG_I(PHY, "%s() RC.nb_nr_inst:%d RC.nrrrc:%p\n", __FUNCTION__, RC.nb_nr_inst, RC.nrrrc);
- int gnb_id=0; // only 1 gnb per process, index 0 for now
- RC.nrrrc[gnb_id] = (gNB_RRC_INST *)calloc(sizeof(gNB_RRC_INST),1);
- MessageDef *msg_p = itti_alloc_new_message (TASK_GNB_APP, 0, NRRRC_CONFIGURATION_REQ);
- RCconfig_NRRRC(msg_p,gnb_id, RC.nrrrc[gnb_id]);
- openair_rrc_gNB_configuration(GNB_INSTANCE_TO_MODULE_ID(ITTI_MSG_DESTINATION_INSTANCE(msg_p)), &NRRRC_CONFIGURATION_REQ(msg_p));
- //AssertFatal(itti_create_task(TASK_GNB_APP, gNB_app_task, NULL) >= 0, "");
- AssertFatal(itti_create_task(TASK_RRC_GNB, rrc_gnb_task, NULL) >= 0, "");
- //AssertFatal(itti_create_task(TASK_X2AP, x2ap_task, NULL) >= 0, "");
-}
-
-static void wait_nfapi_init(char *thread_name) {
- printf( "waiting for NFAPI PNF connection and population of global structure (%s)\n",thread_name);
- pthread_mutex_lock( &nfapi_sync_mutex );
-
- while (nfapi_sync_var<0)
- pthread_cond_wait( &nfapi_sync_cond, &nfapi_sync_mutex );
-
- pthread_mutex_unlock(&nfapi_sync_mutex);
- printf( "NFAPI: got sync (%s)\n", thread_name);
-}
-
-void exit_function(const char *file, const char *function, const int line, const char *s) {
- if (s != NULL) {
- printf("%s:%d %s() Exiting OAI softmodem: %s\n",file,line, function, s);
- }
-
- oai_exit = 1;
- sleep(1); //allow lte-softmodem threads to exit first
- exit(1);
-}
-
-void stop_RU(int nb_ru) {
- return;
-}
-
-void OCPconfig_RU(RU_t *ru) {
- int i = 0, j = 0; // Ru and gNB cardinality
- paramdef_t RUParams[] = RUPARAMS_DESC;
- paramlist_def_t RUParamList = {CONFIG_STRING_RU_LIST,NULL,0};
- config_getlist( &RUParamList, RUParams, sizeof(RUParams)/sizeof(paramdef_t), NULL);
- AssertFatal( RUParamList.numelt == 1 && RC.nb_nr_L1_inst ==1,"" );
- ru->idx=0;
- ru->nr_frame_parms = (NR_DL_FRAME_PARMS *)calloc(sizeof(NR_DL_FRAME_PARMS),1);
- ru->frame_parms = (LTE_DL_FRAME_PARMS *)calloc(sizeof(LTE_DL_FRAME_PARMS),1);
- ru->if_timing = synch_to_ext_device;
- ru->num_gNB = RUParamList.paramarray[j][RU_ENB_LIST_IDX].numelt;
- ru->gNB_list[i] = &RC.gNB[RUParamList.paramarray[j][RU_ENB_LIST_IDX].iptr[i]][0];
-
- if (config_isparamset(RUParamList.paramarray[j], RU_SDR_ADDRS)) {
- ru->openair0_cfg.sdr_addrs = strdup(*(RUParamList.paramarray[j][RU_SDR_ADDRS].strptr));
- }
-
- if (config_isparamset(RUParamList.paramarray[j], RU_SDR_CLK_SRC)) {
- if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "internal") == 0) {
- ru->openair0_cfg.clock_source = internal;
- LOG_D(PHY, "RU clock source set as internal\n");
- } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "external") == 0) {
- ru->openair0_cfg.clock_source = external;
- LOG_D(PHY, "RU clock source set as external\n");
- } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "gpsdo") == 0) {
- ru->openair0_cfg.clock_source = gpsdo;
- LOG_D(PHY, "RU clock source set as gpsdo\n");
- } else {
- LOG_E(PHY, "Erroneous RU clock source in the provided configuration file: '%s'\n", *(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr));
- }
- } else {
- ru->openair0_cfg.clock_source = unset;
- }
-
- if (strcmp(*(RUParamList.paramarray[j][RU_LOCAL_RF_IDX].strptr), "yes") == 0) {
- if ( !(config_isparamset(RUParamList.paramarray[j],RU_LOCAL_IF_NAME_IDX)) ) {
- ru->if_south = REMOTE_IF5; //TBD: max value to avoid to call "ru" functions
- ru->function = gNodeB_3GPP;
- printf("Setting function for RU %d to gNodeB_3GPP\n",j);
- } else {
- }
-
- ru->max_pdschReferenceSignalPower = *(RUParamList.paramarray[j][RU_MAX_RS_EPRE_IDX].uptr);;
- ru->max_rxgain = *(RUParamList.paramarray[j][RU_MAX_RXGAIN_IDX].uptr);
- ru->num_bands = RUParamList.paramarray[j][RU_BAND_LIST_IDX].numelt;
-
- for (i=0; inum_bands; i++) ru->band[i] = RUParamList.paramarray[j][RU_BAND_LIST_IDX].iptr[i];
- } //strcmp(local_rf, "yes") == 0
- else {
- }
-
- ru->nb_tx = *(RUParamList.paramarray[j][RU_NB_TX_IDX].uptr);
- ru->nb_rx = *(RUParamList.paramarray[j][RU_NB_RX_IDX].uptr);
- ru->att_tx = *(RUParamList.paramarray[j][RU_ATT_TX_IDX].uptr);
- ru->att_rx = *(RUParamList.paramarray[j][RU_ATT_RX_IDX].uptr);
-
- if (config_isparamset(RUParamList.paramarray[j], RU_BF_WEIGHTS_LIST_IDX)) {
- ru->nb_bfw = RUParamList.paramarray[j][RU_BF_WEIGHTS_LIST_IDX].numelt;
-
- for (i=0; inum_gNB; i++) {
- ru->bw_list[i] = (int32_t *)malloc16_clear((ru->nb_bfw)*sizeof(int32_t));
-
- for (int b=0; bnb_bfw; b++) ru->bw_list[i][b] = RUParamList.paramarray[j][RU_BF_WEIGHTS_LIST_IDX].iptr[b];
- }
- }
-
- return;
-}
-
-// this is for RU with local RF unit
-void fill_rf_config(RU_t *ru, char *rf_config_file) {
- int i;
- NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
- nfapi_nr_config_request_scf_t *gNB_config = &ru->gNB_list[0]->gNB_config; //tmp index
- openair0_config_t *cfg = &ru->openair0_cfg;
- int mu = gNB_config->ssb_config.scs_common.value;
- int N_RB = gNB_config->carrier_config.dl_grid_size[gNB_config->ssb_config.scs_common.value].value;
- fp->threequarter_fs=threequarter_fs;
-
- if (mu == NR_MU_0) { //or if LTE
- if(N_RB == 100) {
- if (fp->threequarter_fs) {
- cfg->sample_rate=23.04e6;
- cfg->samples_per_frame = 230400;
- cfg->tx_bw = 10e6;
- cfg->rx_bw = 10e6;
- } else {
- cfg->sample_rate=30.72e6;
- cfg->samples_per_frame = 307200;
- cfg->tx_bw = 10e6;
- cfg->rx_bw = 10e6;
- }
- } else if(N_RB == 50) {
- cfg->sample_rate=15.36e6;
- cfg->samples_per_frame = 153600;
- cfg->tx_bw = 5e6;
- cfg->rx_bw = 5e6;
- } else if (N_RB == 25) {
- cfg->sample_rate=7.68e6;
- cfg->samples_per_frame = 76800;
- cfg->tx_bw = 2.5e6;
- cfg->rx_bw = 2.5e6;
- } else if (N_RB == 6) {
- cfg->sample_rate=1.92e6;
- cfg->samples_per_frame = 19200;
- cfg->tx_bw = 1.5e6;
- cfg->rx_bw = 1.5e6;
- } else AssertFatal(1==0,"Unknown N_RB %d\n",N_RB);
- } else if (mu == NR_MU_1) {
- if(N_RB == 273) {
- if (fp->threequarter_fs) {
- AssertFatal(0 == 1,"three quarter sampling not supported for N_RB 273\n");
- } else {
- cfg->sample_rate=122.88e6;
- cfg->samples_per_frame = 1228800;
- cfg->tx_bw = 100e6;
- cfg->rx_bw = 100e6;
- }
- } else if(N_RB == 217) {
- if (fp->threequarter_fs) {
- cfg->sample_rate=92.16e6;
- cfg->samples_per_frame = 921600;
- cfg->tx_bw = 80e6;
- cfg->rx_bw = 80e6;
- } else {
- cfg->sample_rate=122.88e6;
- cfg->samples_per_frame = 1228800;
- cfg->tx_bw = 80e6;
- cfg->rx_bw = 80e6;
- }
- } else if(N_RB == 106) {
- if (fp->threequarter_fs) {
- cfg->sample_rate=46.08e6;
- cfg->samples_per_frame = 460800;
- cfg->tx_bw = 40e6;
- cfg->rx_bw = 40e6;
- } else {
- cfg->sample_rate=61.44e6;
- cfg->samples_per_frame = 614400;
- cfg->tx_bw = 40e6;
- cfg->rx_bw = 40e6;
- }
- } else {
- AssertFatal(0==1,"N_RB %d not yet supported for numerology %d\n",N_RB,mu);
- }
- } else if (mu == NR_MU_3) {
- if (N_RB == 66) {
- cfg->sample_rate = 122.88e6;
- cfg->samples_per_frame = 1228800;
- cfg->tx_bw = 100e6;
- cfg->rx_bw = 100e6;
- } else if(N_RB == 32) {
- cfg->sample_rate=61.44e6;
- cfg->samples_per_frame = 614400;
- cfg->tx_bw = 50e6;
- cfg->rx_bw = 50e6;
- }
- } else {
- AssertFatal(0 == 1,"Numerology %d not supported for the moment\n",mu);
- }
-
- if (gNB_config->cell_config.frame_duplex_type.value==TDD)
- cfg->duplex_mode = duplex_mode_TDD;
- else //FDD
- cfg->duplex_mode = duplex_mode_FDD;
-
- cfg->Mod_id = 0;
- cfg->num_rb_dl=N_RB;
- cfg->tx_num_channels=ru->nb_tx;
- cfg->rx_num_channels=ru->nb_rx;
-
- for (i=0; inb_tx; i++) {
- if (ru->if_frequency == 0) {
- cfg->tx_freq[i] = (double)fp->dl_CarrierFreq;
- cfg->rx_freq[i] = (double)fp->ul_CarrierFreq;
- } else {
- cfg->tx_freq[i] = (double)ru->if_frequency;
- cfg->rx_freq[i] = (double)(ru->if_frequency+fp->ul_CarrierFreq-fp->dl_CarrierFreq);
- }
-
- cfg->tx_gain[i] = ru->att_tx;
- cfg->rx_gain[i] = ru->max_rxgain-ru->att_rx;
- cfg->configFilename = rf_config_file;
- printf("channel %d, Setting tx_gain offset %f, rx_gain offset %f, tx_freq %f, rx_freq %f\n",
- i, cfg->tx_gain[i],
- cfg->rx_gain[i],
- cfg->tx_freq[i],
- cfg->rx_freq[i]);
- }
-}
-
-/* this function maps the RU tx and rx buffers to the available rf chains.
- Each rf chain is is addressed by the card number and the chain on the card. The
- rf_map specifies for each antenna port, on which rf chain the mapping should start. Multiple
- antennas are mapped to successive RF chains on the same card. */
-int setup_RU_buffers(RU_t *ru) {
- int i,j;
- int card,ant;
- //uint16_t N_TA_offset = 0;
- NR_DL_FRAME_PARMS *frame_parms;
- nfapi_nr_config_request_scf_t *config = &ru->config;
-
- if (ru) {
- frame_parms = ru->nr_frame_parms;
- printf("setup_RU_buffers: frame_parms = %p\n",frame_parms);
- } else {
- printf("ru pointer is NULL\n");
- return(-1);
- }
-
- int mu = config->ssb_config.scs_common.value;
- int N_RB = config->carrier_config.dl_grid_size[config->ssb_config.scs_common.value].value;
-
- if (config->cell_config.frame_duplex_type.value == TDD) {
- int N_TA_offset = config->carrier_config.uplink_frequency.value < 6000000 ? 400 : 431; // reference samples for 25600Tc @ 30.72 Ms/s for FR1, same @ 61.44 Ms/s for FR2
- double factor=1;
-
- switch (mu) {
- case 0: //15 kHz scs
- AssertFatal(N_TA_offset == 400,"scs_common 15kHz only for FR1\n");
-
- if (N_RB <= 25) factor = .25; // 7.68 Ms/s
- else if (N_RB <=50) factor = .5; // 15.36 Ms/s
- else if (N_RB <=75) factor = 1.0; // 30.72 Ms/s
- else if (N_RB <=100) factor = 1.0; // 30.72 Ms/s
- else AssertFatal(1==0,"Too many PRBS for mu=0\n");
-
- break;
-
- case 1: //30 kHz sc
- AssertFatal(N_TA_offset == 400,"scs_common 30kHz only for FR1\n");
-
- if (N_RB <= 106) factor = 2.0; // 61.44 Ms/s
- else if (N_RB <= 275) factor = 4.0; // 122.88 Ms/s
-
- break;
-
- case 2: //60 kHz scs
- AssertFatal(1==0,"scs_common should not be 60 kHz\n");
- break;
-
- case 3: //120 kHz scs
- AssertFatal(N_TA_offset == 431,"scs_common 120kHz only for FR2\n");
- break;
-
- case 4: //240 kHz scs
- AssertFatal(1==0,"scs_common should not be 60 kHz\n");
-
- if (N_RB <= 32) factor = 1.0; // 61.44 Ms/s
- else if (N_RB <= 66) factor = 2.0; // 122.88 Ms/s
- else AssertFatal(1==0,"N_RB %d is too big for curretn FR2 implementation\n",N_RB);
-
- break;
-
- if (N_RB == 100) ru->N_TA_offset = 624;
- else if (N_RB == 50) ru->N_TA_offset = 624/2;
- else if (N_RB == 25) ru->N_TA_offset = 624/4;
- }
-
- if (frame_parms->threequarter_fs == 1) factor = factor*.75;
-
- ru->N_TA_offset = (int)(N_TA_offset * factor);
- LOG_I(PHY,"RU %d Setting N_TA_offset to %d samples (factor %f, UL Freq %d, N_RB %d)\n",ru->idx,ru->N_TA_offset,factor,
- config->carrier_config.uplink_frequency.value, N_RB);
- } else ru->N_TA_offset = 0;
-
- if (ru->openair0_cfg.mmapped_dma == 1) {
- // replace RX signal buffers with mmaped HW versions
- for (i=0; inb_rx; i++) {
- card = i/4;
- ant = i%4;
- printf("Mapping RU id %u, rx_ant %d, on card %d, chain %d\n",ru->idx,i,ru->rf_map.card+card, ru->rf_map.chain+ant);
- free(ru->common.rxdata[i]);
- ru->common.rxdata[i] = ru->openair0_cfg.rxbase[ru->rf_map.chain+ant];
- printf("rxdata[%d] @ %p\n",i,ru->common.rxdata[i]);
-
- for (j=0; j<16; j++) {
- printf("rxbuffer %d: %x\n",j,ru->common.rxdata[i][j]);
- ru->common.rxdata[i][j] = 16-j;
- }
- }
-
- for (i=0; inb_tx; i++) {
- card = i/4;
- ant = i%4;
- printf("Mapping RU id %u, tx_ant %d, on card %d, chain %d\n",ru->idx,i,ru->rf_map.card+card, ru->rf_map.chain+ant);
- free(ru->common.txdata[i]);
- ru->common.txdata[i] = ru->openair0_cfg.txbase[ru->rf_map.chain+ant];
- printf("txdata[%d] @ %p\n",i,ru->common.txdata[i]);
-
- for (j=0; j<16; j++) {
- printf("txbuffer %d: %x\n",j,ru->common.txdata[i][j]);
- ru->common.txdata[i][j] = 16-j;
- }
- }
- } else { // not memory-mapped DMA
- //nothing to do, everything already allocated in lte_init
- }
-
- return(0);
-}
-int rx_rf(int rxBufOffet, int nbSamples, int nb_rx, int32_t **rxdata, openair0_device *rfdevice, openair0_timestamp *HWtimeStamp) {
- void *rxp[nb_rx];
-
- for (int i=0; itrx_read_func(rfdevice,
- HWtimeStamp,
- rxp,
- nbSamples,
- nb_rx);
-
- if (rxs != nbSamples )
- LOG_E(PHY, "rx_rf: Asked for %d samples, got %d from USRP\n",nbSamples,rxs);
-
- return rxs;
-}
-
-void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
- RU_proc_t *proc = &ru->proc;
- NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
- nfapi_nr_config_request_scf_t *cfg = &ru->gNB_list[0]->gNB_config;
- int i,txsymb;
- int slot_type = nr_slot_select(cfg,frame,slot%fp->slots_per_frame);
- int prevslot_type = nr_slot_select(cfg,frame,(slot+(fp->slots_per_frame-1))%fp->slots_per_frame);
- int nextslot_type = nr_slot_select(cfg,frame,(slot+1)%fp->slots_per_frame);
- int sf_extension = 0; //sf_extension = ru->sf_extension;
- int siglen=fp->get_samples_per_slot(slot,fp);
- int flags=1;
-
- //nr_subframe_t SF_type = nr_slot_select(cfg,slot%fp->slots_per_frame);
- if (slot_type == NR_DOWNLINK_SLOT || slot_type == NR_MIXED_SLOT || IS_SOFTMODEM_RFSIM) {
- if(slot_type == NR_MIXED_SLOT) {
- txsymb = 0;
-
- for(int symbol_count =0; symbol_counttdd_table.max_tdd_periodicity_list[slot].max_num_of_symbol_per_slot_list[symbol_count].slot_config.value==0)
- txsymb++;
- }
-
- AssertFatal(txsymb>0,"illegal txsymb %d\n",txsymb);
-
- if(slot%(fp->slots_per_subframe/2))
- siglen = txsymb * (fp->ofdm_symbol_size + fp->nb_prefix_samples);
- else
- siglen = (fp->ofdm_symbol_size + fp->nb_prefix_samples0) + (txsymb - 1) * (fp->ofdm_symbol_size + fp->nb_prefix_samples);
-
- //+ ru->end_of_burst_delay;
- flags=3; // end of burst
- }
-
- if (cfg->cell_config.frame_duplex_type.value == TDD &&
- slot_type == NR_DOWNLINK_SLOT &&
- prevslot_type == NR_UPLINK_SLOT) {
- flags = 2; // start of burst
- }
-
- if (cfg->cell_config.frame_duplex_type.value == TDD &&
- slot_type == NR_DOWNLINK_SLOT &&
- nextslot_type == NR_UPLINK_SLOT) {
- flags = 3; // end of burst
- }
-
- if (fp->freq_range==nr_FR2) {
- // the beam index is written in bits 8-10 of the flags
- // bit 11 enables the gpio programming
- int beam=0;
-
- if (slot==0) beam = 11; //3 for boresight & 8 to enable
-
- /*
- if (slot==0 || slot==40) beam=0&8;
- if (slot==10 || slot==50) beam=1&8;
- if (slot==20 || slot==60) beam=2&8;
- if (slot==30 || slot==70) beam=3&8;
- */
- flags |= beam<<8;
- }
-
- void *txp[ru->nb_tx];
-
- for (i=0; inb_tx; i++)
- txp[i] = (void *)&ru->common.txdata[i][fp->get_samples_slot_timestamp(slot,fp,0)-sf_extension];
-
- // prepare tx buffer pointers
- unsigned int txs = ru->rfdevice.trx_write_func(&ru->rfdevice,
- timestamp+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension,
- txp,
- siglen+sf_extension,
- ru->nb_tx,
- flags);
- LOG_D(PHY,"[TXPATH] RU %d tx_rf, writing to TS %llu, frame %d, unwrapped_frame %d, slot %d\n",ru->idx,
- (long long unsigned int)timestamp,frame,proc->frame_tx_unwrap,slot);
- AssertFatal(txs == siglen+sf_extension,"TX : Timeout (sent %u/%d)\n", txs, siglen);
- }
-}
-
-static void *ru_thread( void *param ) {
- RU_t *ru = (RU_t *)param;
- NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
- LOG_I(PHY,"Starting RU %d (%s,%s),\n",ru->idx,NB_functions[ru->function],NB_timing[ru->if_timing]);
- nr_dump_frame_parms(fp);
- AssertFatal(openair0_device_load(&ru->rfdevice,&ru->openair0_cfg)==0,"Cannot connect to local radio\n");
- AssertFatal(ru->rfdevice.trx_start_func(&ru->rfdevice) == 0,"Could not start the RF device\n");
- int64_t slot=-1;
- int64_t nextHWTSshouldBe=0, nextRxTSlogical=0;
- // weird globals, used in NR_IF_Module.c
- sf_ahead = (uint16_t) ceil((float)6/(0x01<numerology_index));
- sl_ahead = sf_ahead*fp->slots_per_subframe;
-
- // This is a forever while loop, it loops over subframes which are scheduled by incoming samples from HW devices
-
- while (!oai_exit) {
- int nextSlot=(slot+1)%fp->slots_per_frame;
- uint32_t samples_per_slot = fp->get_samples_per_slot(nextSlot,fp);
- int rxBuffOffset=fp->get_samples_slot_timestamp(nextSlot,fp,0);
- AssertFatal(rxBuffOffset + samples_per_slot <= fp->samples_per_frame, "Will read outside allocated buffer\n");
- int samples=fp->get_samples_per_slot(nextSlot,fp);
- openair0_timestamp HWtimeStamp=0; //for multi RU
- int rxs=rx_rf(rxBuffOffset,
- samples,
- ru->nb_rx,
- ru->common.rxdata,
- &ru->rfdevice,
- &HWtimeStamp);
- LOG_D(PHY,"Reading %d samples for slot %d\n",samples_per_slot,nextSlot);
-
- if ( HWtimeStamp != nextHWTSshouldBe)
- LOG_E(HW,"reading a stream must be continuous, %ld, %ld\n", HWtimeStamp, nextHWTSshouldBe);
-
- nextHWTSshouldBe=HWtimeStamp+rxs;
- ru->proc.timestamp_rx=nextRxTSlogical;
- nextRxTSlogical+=samples_per_slot;
- int64_t HW_to_logical_RxTSoffset=(int64_t)HWtimeStamp-(int64_t)ru->proc.timestamp_rx;
- ru->proc.frame_rx = (ru->proc.timestamp_rx / (fp->samples_per_subframe*10))&1023;
- uint32_t idx_sf = ru->proc.timestamp_rx / fp->samples_per_subframe;
- float offsetInSubframe=ru->proc.timestamp_rx % fp->samples_per_subframe;
- ru->proc.tti_rx = (idx_sf * fp->slots_per_subframe +
- lroundf(offsetInSubframe / fp->samples_per_slot0))%
- fp->slots_per_frame;
- LOG_D(PHY,"RU %d/%d TS %llu (off %d), frame %d, slot %d.%d / %d\n",
- ru->idx, 0,
- (unsigned long long int)ru->proc.timestamp_rx,
- (int)ru->ts_offset,ru->proc.frame_rx,ru->proc.tti_rx,ru->proc.tti_tx,fp->slots_per_frame);
- int slot_type = nr_slot_select(&ru->gNB_list[0]->gNB_config,ru->proc.frame_rx,ru->proc.tti_rx);
-
- if (slot_type == NR_UPLINK_SLOT || slot_type == NR_MIXED_SLOT) {
- nr_fep_full(ru,ru->proc.tti_rx);
-
- for (int aa=0; aanb_rx; aa++)
- memcpy((void *)RC.gNB[0]->common_vars.rxdataF[aa],
- (void *)ru->common.rxdataF[aa], fp->symbols_per_slot*fp->ofdm_symbol_size*sizeof(int32_t));
-
- LOG_D(PHY, "rxdataF energy: %d\n", signal_energy(ru->common.rxdataF[0], fp->symbols_per_slot*fp->ofdm_symbol_size));
- }
-
- gNB_L1_proc_t *gNBproc=&RC.gNB[0][0].proc;
- gNB_L1_rxtx_proc_t *L1_proc = &gNBproc->L1_proc;
- NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
- gNBproc->timestamp_rx = ru->proc.timestamp_rx;
- L1_proc->frame_rx = gNBproc->frame_rx = gNBproc->frame_prach = ru->proc.frame_rx =
- (ru->proc.timestamp_rx / (fp->samples_per_subframe*10))&1023;
- L1_proc->slot_rx = gNBproc->slot_rx = gNBproc->slot_prach =
- ru->proc.tti_rx; // computed before in caller function
- L1_proc->timestamp_tx = gNBproc->timestamp_tx = ru->proc.timestamp_tx =
- ru->proc.timestamp_rx +
- sf_ahead*fp->samples_per_subframe;
- L1_proc->frame_tx = gNBproc->frame_tx = ru->proc.frame_tx =
- (gNBproc->timestamp_tx / (fp->samples_per_subframe*10))&1023;
- L1_proc->slot_tx = ru->proc.tti_tx =
- (L1_proc->slot_rx + sl_ahead)%fp->slots_per_frame;
-
- if (ocp_rxtx(&RC.gNB[0][0],L1_proc) < 0)
- LOG_E(PHY,"gNB %d CC_id %d failed during execution\n",RC.gNB[0][0].Mod_id,RC.gNB[0][0].CC_id);
-
- // do TX front-end processing if needed (precoding and/or IDFTs)
- //ru->feptx_prec(ru,proc->frame_tx,proc->tti_tx);
- nr_feptx_prec(ru,ru->proc.frame_tx,ru->proc.tti_tx);
- // do OFDM with/without TX front-end processing if needed
- //ru->feptx_ofdm
- nfapi_nr_config_request_scf_t *cfg = &ru->gNB_list[0]->gNB_config;
-
- if (nr_slot_select(cfg,ru->proc.frame_tx, ru->proc.tti_tx ) != NR_UPLINK_SLOT) {
- int aa=0; // antenna 0 hardcoded
- NR_DL_FRAME_PARMS *fp=ru->nr_frame_parms;
- nr_feptx0(ru,ru->proc.tti_tx,0,fp->symbols_per_slot,aa);
- int *txdata = &ru->common.txdata[aa][fp->get_samples_slot_timestamp(ru->proc.tti_tx,fp,0)];
- int slot_sizeF = (fp->ofdm_symbol_size)*
- ((NFAPI_CP_NORMAL == 1) ? 12 : 14);
- LOG_D(PHY,"feptx_ofdm (TXPATH): frame %d, slot %d: txp (time %ld) %d dB, txp (freq) %d dB\n",
- ru->proc.frame_tx,ru->proc.tti_tx,ru->proc.timestamp_tx,
- dB_fixed(signal_energy((int32_t *)txdata,fp->get_samples_per_slot(ru->proc.tti_tx,fp))),
- dB_fixed(signal_energy_nodc(ru->common.txdataF_BF[aa],2*slot_sizeF)));
- }
-
- // do outgoing fronthaul (south) if needed
- tx_rf(ru,ru->proc.frame_tx,ru->proc.tti_tx,ru->proc.timestamp_tx+HW_to_logical_RxTSoffset);
- slot++;
- }
-
- printf( "Exiting ru_thread \n");
- ru->rfdevice.trx_end_func(&ru->rfdevice);
- static int ru_thread_status = 0;
- return &ru_thread_status;
-}
-
-void launch_NR_RU(RU_t *ru, char *rf_config_file) {
- LOG_I(PHY,"number of L1 instances %d, number of RU %d, number of CPU cores %d\n",
- RC.nb_nr_L1_inst,RC.nb_RU,get_nprocs());
- LOG_D(PHY,"Process RUs RC.nb_RU:%d\n",RC.nb_RU);
-
- for (int ru_id=0; ru_idrf_config_file = rf_config_file;
- ru->idx = ru_id;
- ru->ts_offset = 0;
- // use gNB_list[0] as a reference for RU frame parameters
- // NOTE: multiple CC_id are not handled here yet!
- LOG_D(PHY, "%s() RC.ru[%d].num_gNB:%d ru->gNB_list[0]:%p rf_config_file:%s\n",
- __FUNCTION__, ru_id, ru->num_gNB, ru->gNB_list[0], ru->rf_config_file);
- LOG_E(PHY,"ru->gNB_list ru->num_gNB hardcoded: one RU connected to carrier 0 of gNB 0\n");
- ru->gNB_list[0] = &RC.gNB[0][0];
- ru->num_gNB=1;
- LOG_I(PHY,"Copying frame parms from gNB in RC to ru %d and frame_parms in ru\n",ru->idx);
- RU_proc_t *proc = &ru->proc;
- threadCreate( &proc->pthread_FH, ru_thread, (void *)ru, "MainLoop", -1, OAI_PRIORITY_RT_MAX );
- }
-}
-
-void init_eNB_afterRU(void) {
- AssertFatal(false,"");
-}
-
-int main( int argc, char **argv ) {
- AssertFatal(load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY),
- "[SOFTMODEM] Error, configuration module init failed\n");
- logInit();
-#ifndef PACKAGE_VERSION
-# define PACKAGE_VERSION "UNKNOWN"
-#endif
- LOG_I(HW, "Version: %s\n", PACKAGE_VERSION);
- set_latency_target();
- get_options ();
- get_common_options(SOFTMODEM_GNB_BIT );
- AssertFatal(!CONFIG_ISFLAGSET(CONFIG_ABORT),"Getting configuration failed\n");
- cpuf=get_cpu_freq_GHz();
- itti_init(TASK_MAX, tasks_info);
- set_taus_seed (0);
- init_opt();
- init_pdcp();
- init_main_gNB();
- init_gNB(true, wait_for_sync);
- /* Start the agent. If it is turned off in the configuration, it won't start */
- RCconfig_nr_flexran();
-
- for (int i = 0; i < RC.nb_nr_L1_inst; i++) {
- flexran_agent_start(i);
- }
-
- /*
- *nfapi stuff very buggy in 4G, not yet implemented in 5G
- */
- // init UE_PF_PO and mutex lock (paging from S1AP)
- pthread_mutex_init(&ue_pf_po_mutex, NULL);
- printf("NFAPI*** - mutex and cond created - will block shortly for completion of PNF connection\n");
- pthread_cond_init(&nfapi_sync_cond,NULL);
- pthread_mutex_init(&nfapi_sync_mutex, NULL);
- const char *nfapi_mode_str[] = {
- "MONOLITHIC", "PNF", "VNF",
- };
- AssertFatal(nfapi_mode < 3,"");
- printf("NFAPI MODE:%s\n", nfapi_mode_str[nfapi_mode]);
-
- if (nfapi_mode==NFAPI_MODE_VNF) // VNF
- wait_nfapi_init("main?");
-
- for (int i=0; iconfigured, "Remain threads to manage\n");
-
- printf("About to Init RU threads RC.nb_RU:%d\n", RC.nb_RU);
- config_sync_var=0;
-
- if (nfapi_mode==NFAPI_MODE_PNF) { // PNF
- wait_nfapi_init("main?");
- }
-
- printf("wait RUs\n");
- printf("ALL RUs READY!\n");
- printf("RC.nb_RU:%d\n", RC.nb_RU);
- // once all RUs are ready initialize the rest of the gNBs ((dependence on final RU parameters after configuration)
- printf("ALL RUs ready - init gNBs\n");
- LOG_E(PHY,"configuring RU from file, hardcoded one gNB for one RU, one carrier\n");
- RU_t ru= {0};
- OCPconfig_RU(&ru);
- ru.nr_frame_parms->threequarter_fs=threequarter_fs;
- fill_rf_config(&ru,ru.rf_config_file);
- init_gNB_phase2(&ru);
- memcpy((void *)ru.nr_frame_parms,&RC.gNB[0][0].frame_parms,sizeof(NR_DL_FRAME_PARMS));
- memcpy((void *)&ru.config,(void *)&RC.gNB[0]->gNB_config,sizeof(ru.config));
- AssertFatal(setup_RU_buffers(&ru)==0,"Inconsistent configuration");
- nr_phy_init_RU(&ru);
- init_gNB_proc(0); // only instance 0 (one gNB per process)
-
- if (RC.nb_RU >0) {
- printf("Initializing RU threads\n");
- launch_NR_RU(&ru, get_softmodem_params()->rf_config_file);
- }
-
- if (opp_enabled ==1) {
- pthread_t t;
- threadCreate(&t, process_stats_thread,
- (void *)NULL, "time_meas", -1, OAI_PRIORITY_RT_LOW);
- }
-
- if(IS_SOFTMODEM_DOSCOPE) {
- scopeParms_t tmp= {&argc, argv, &ru, RC.gNB[0]};
- load_softscope("nr",&tmp);
- }
-
- while(!oai_exit)
- sleep(1);
-
- logClean();
- printf("Bye.\n");
- return 0;
-}
diff --git a/executables/softmodem-common.c b/executables/softmodem-common.c
index 3e20081b18..12c60e98fd 100644
--- a/executables/softmodem-common.c
+++ b/executables/softmodem-common.c
@@ -45,7 +45,6 @@
static softmodem_params_t softmodem_params;
char *parallel_config=NULL;
char *worker_config=NULL;
-msc_interface_t msc_interface;
int usrp_tx_thread = 0;
uint8_t nfapi_mode=0;
diff --git a/executables/softmodem-common.h b/executables/softmodem-common.h
index 9aca677473..1f73720e70 100644
--- a/executables/softmodem-common.h
+++ b/executables/softmodem-common.h
@@ -120,7 +120,6 @@ extern "C"
#define TIMING_SOURCE softmodem_params.timing_source
#define SEND_DMRSSYNC softmodem_params.send_dmrs_sync
#define USIM_TEST softmodem_params.usim_test
-#define USE_256QAM_TABLE softmodem_params.use_256qam_table
#define PRB_INTERPOLATION softmodem_params.prb_interpolation
#define NFAPI softmodem_params.nfapi
#define NSA softmodem_params.nsa
@@ -158,34 +157,29 @@ extern int usrp_tx_thread;
{"basicsim", CONFIG_HLP_RFSIM, PARAMFLAG_BOOL, uptr:&basicsim, defintval:0, TYPE_INT, 0}, \
{"nokrnmod", CONFIG_HLP_NOKRNMOD, PARAMFLAG_BOOL, uptr:&nokrnmod, defintval:0, TYPE_INT, 0}, \
{"nbiot-disable", CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL, uptr:&nonbiot, defuintval:0, TYPE_INT, 0}, \
- {"use-256qam-table", CONFIG_HLP_256QAM, PARAMFLAG_BOOL, iptr:&USE_256QAM_TABLE, defintval:0, TYPE_INT, 0}, \
{"nsa", CONFIG_HLP_NSA, PARAMFLAG_BOOL, iptr:&NSA, defintval:0, TYPE_INT, 0}, \
{"node-number", NULL, 0, u16ptr:&NODE_NUMBER, defuintval:0, TYPE_UINT16, 0}, \
{"usrp-tx-thread-config", CONFIG_HLP_USRP_THREAD, 0, iptr:&usrp_tx_thread, defstrval:0, TYPE_INT, 0}, \
{"do-prb-interpolation", CONFIG_HLP_PRBINTER, PARAMFLAG_BOOL, iptr:&PRB_INTERPOLATION, defintval:0, TYPE_INT, 0}, \
{"nfapi", CONFIG_HLP_NFAPI, 0, u8ptr:&nfapi_mode, defintval:0, TYPE_UINT8, 0}, \
{"non-stop", CONFIG_HLP_NONSTOP, PARAMFLAG_BOOL, iptr:&NON_STOP, defintval:0, TYPE_INT, 0}, \
- {"emulate-l1", CONFIG_L1_EMULATOR, PARAMFLAG_BOOL, iptr:&EMULATE_L1, defintval:0, TYPE_INT, 0}, \
+ {"emulate-l1", CONFIG_L1_EMULATOR, PARAMFLAG_BOOL, iptr:&EMULATE_L1, defintval:0, TYPE_INT, 0} \
}
#define CONFIG_HLP_NSA "Enable NSA mode \n"
#define CONFIG_HLP_FLOG "Enable online log \n"
#define CONFIG_HLP_LOGL "Set the global log level, valid options: (4:trace, 3:debug, 2:info, 1:warn, (0:error))\n"
-#define CONFIG_HLP_LOGV "Set the global log verbosity \n"
#define CONFIG_HLP_TELN "Start embedded telnet server \n"
-#define CONFIG_HLP_MSC "Enable the MSC tracing utility \n"
#define CONFIG_FLOG_OPT "R"
#define CONFIG_LOGL_OPT "g"
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
/* command line parameters for LOG utility */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
-#define START_MSC softmodem_params.start_msc
#define CMDLINE_LOGPARAMS_DESC { \
{CONFIG_FLOG_OPT , CONFIG_HLP_FLOG, 0, uptr:&online_log_messages, defintval:1, TYPE_INT, 0}, \
{CONFIG_LOGL_OPT , CONFIG_HLP_LOGL, 0, uptr:&glog_level, defintval:0, TYPE_UINT, 0}, \
{"telnetsrv", CONFIG_HLP_TELN, PARAMFLAG_BOOL, uptr:&start_telnetsrv, defintval:0, TYPE_UINT, 0}, \
- {"msc", CONFIG_HLP_MSC, PARAMFLAG_BOOL, uptr:&START_MSC, defintval:0, TYPE_UINT, 0}, \
{"log-mem", NULL, 0, strptr:(char **)&logmem_filename, defstrval:NULL, TYPE_STRING, 0}, \
{"telnetclt", NULL, 0, uptr:&start_telnetclt, defstrval:NULL, TYPE_UINT, 0}, \
}
@@ -250,12 +244,10 @@ typedef struct {
int chain_offset;
int numerology;
int band;
- unsigned int start_msc;
uint32_t clock_source;
uint32_t timing_source;
int hw_timing_advance;
uint32_t send_dmrs_sync;
- int use_256qam_table;
int prb_interpolation;
uint8_t nfapi;
int nsa;
diff --git a/executables/transport_split.c b/executables/transport_split.c
index f380eb90e3..e7199637cc 100644
--- a/executables/transport_split.c
+++ b/executables/transport_split.c
@@ -156,7 +156,7 @@ int receiveSubFrame(UDPsock_t *sock, void *bufferZone, int bufferSize, uint16_t
int sendSubFrame(UDPsock_t *sock, void *bufferZone, ssize_t secondHeaderSize, uint16_t contentType) {
commonUDP_t *UDPheader=(commonUDP_t *)bufferZone ;
UDPheader->contentType=contentType;
- UDPheader->senderClock=rdtsc();
+ UDPheader->senderClock=rdtsc_oai();
int nbBlocks=UDPheader->nbBlocks;
int blockId=0;
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
index f107b5b973..7fb42e566a 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
@@ -46,7 +46,9 @@
#define FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH 0x03
#define FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH 0x04
#define FAPI_NR_DL_CONFIG_TYPE_P_DLSCH 0x05
-#define FAPI_NR_DL_CONFIG_TYPES 0x05
+#define FAPI_NR_DL_CONFIG_TYPE_CSI_RS 0x06
+#define FAPI_NR_DL_CONFIG_TYPE_CSI_IM 0x07
+#define FAPI_NR_DL_CONFIG_TYPES 0x07
#define FAPI_NR_CCE_REG_MAPPING_TYPE_INTERLEAVED 0x01
#define FAPI_NR_CCE_REG_MAPPING_TYPE_NON_INTERLEAVED 0x02
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
index 3b429a5e84..284ef22fc4 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
@@ -444,7 +444,7 @@ typedef struct {
uint8_t pucch_resource_id;
uint8_t pdsch_to_harq_feedback_time_ind;
uint8_t n_dmrs_cdm_groups;
- uint8_t dmrs_ports[10];
+ uint16_t dmrs_ports;
uint8_t n_front_load_symb;
uint8_t tci_state;
fapi_nr_dl_srs_config_t srs_config;
@@ -473,11 +473,53 @@ typedef struct {
fapi_nr_dl_config_dlsch_pdu_rel15_t dlsch_config_rel15;
} fapi_nr_dl_config_dlsch_pdu;
+
+typedef struct {
+ uint16_t bwp_size;//
+ uint16_t bwp_start;//
+ uint8_t subcarrier_spacing;//
+ uint8_t cyclic_prefix;//
+ uint16_t start_rb;
+ uint16_t nr_of_rbs;
+ uint8_t csi_type;//Value: 0:TRS 1:CSI-RS NZP 2:CSI-RS ZP
+ uint8_t row;//Row entry into the CSI Resource location table. [TS38.211, sec 7.4.1.5.3 and table 7.4.1.5.3-1] Value: 1-18
+ uint16_t freq_domain;//Value: Up to the 12 LSBs, actual size is determined by the Row parameter
+ uint8_t symb_l0;//The time domain location l0 and firstOFDMSymbolInTimeDomain Value: 0->13
+ uint8_t symb_l1;//
+ uint8_t cdm_type;
+ uint8_t freq_density;//The density field, p and comb offset (for dot5).0: dot5 (even RB), 1: dot5 (odd RB), 2: one, 3: three
+ uint16_t scramb_id;//ScramblingID of the CSI-RS [TS38.214, sec 5.2.2.3.1] Value: 0->1023
+} fapi_nr_dl_config_csirs_pdu_rel15_t;
+
+
+typedef struct {
+ uint16_t bwp_size;
+ uint16_t bwp_start;
+ uint8_t subcarrier_spacing;
+ uint16_t start_rb;
+ uint16_t nr_of_rbs;
+ uint8_t k_csiim[4];
+ uint8_t l_csiim[4];
+} fapi_nr_dl_config_csiim_pdu_rel15_t;
+
+
+typedef struct {
+ fapi_nr_dl_config_csirs_pdu_rel15_t csirs_config_rel15;
+} fapi_nr_dl_config_csirs_pdu;
+
+
+typedef struct {
+ fapi_nr_dl_config_csiim_pdu_rel15_t csiim_config_rel15;
+} fapi_nr_dl_config_csiim_pdu;
+
+
typedef struct {
uint8_t pdu_type;
union {
fapi_nr_dl_config_dci_pdu dci_config_pdu;
fapi_nr_dl_config_dlsch_pdu dlsch_config_pdu;
+ fapi_nr_dl_config_csirs_pdu csirs_config_pdu;
+ fapi_nr_dl_config_csiim_pdu csiim_config_pdu;
};
} fapi_nr_dl_config_request_pdu_t;
diff --git a/openair1/PHY/CODING/TESTBENCH/ldpctest.c b/openair1/PHY/CODING/TESTBENCH/ldpctest.c
index 371deba3f2..58d649d011 100644
--- a/openair1/PHY/CODING/TESTBENCH/ldpctest.c
+++ b/openair1/PHY/CODING/TESTBENCH/ldpctest.c
@@ -25,6 +25,7 @@
#include
#include "assertions.h"
#include "SIMULATION/TOOLS/sim.h"
+#include "common/utils/load_module_shlib.h"
#include "PHY/CODING/nrLDPC_extern.h"
//#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
#include "openair1/PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.h"
@@ -118,15 +119,13 @@ int test_ldpc(short No_iteration,
//short test_input[block_length];
unsigned char *test_input[MAX_NUM_NR_DLSCH_SEGMENTS]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};;
//short *c; //padded codeword
- unsigned char *estimated_output[MAX_NUM_DLSCH_SEGMENTS];
- unsigned char *estimated_output_bit[MAX_NUM_DLSCH_SEGMENTS];
- unsigned char *test_input_bit;
+ unsigned char estimated_output[MAX_NUM_DLSCH_SEGMENTS][block_length];
+ memset(estimated_output, 0, sizeof(estimated_output));
unsigned char *channel_input[MAX_NUM_DLSCH_SEGMENTS];
- unsigned char *channel_output_uncoded[MAX_NUM_DLSCH_SEGMENTS];
unsigned char *channel_input_optim[MAX_NUM_DLSCH_SEGMENTS];
- double *channel_output;
- double *modulated_input[MAX_NUM_DLSCH_SEGMENTS];
- char *channel_output_fixed[MAX_NUM_DLSCH_SEGMENTS];
+ //double channel_output[68 * 384];
+ double modulated_input[MAX_NUM_DLSCH_SEGMENTS][68 * 384] = { 0 };
+ char channel_output_fixed[MAX_NUM_DLSCH_SEGMENTS][68 * 384] = { 0 };
unsigned int i,j,trial=0;
short BG=0,nrows=0;//,ncols;
int no_punctured_columns,removed_bit;
@@ -155,24 +154,12 @@ int test_ldpc(short No_iteration,
// generate input block
for(j=0;j>(i&7);
- test_input_bit[i] = (test_input[j][i/8]&(1<<(i&7)))>>(i&7); // Further correct for multiple segments
- if (estimated_output_bit[j][i] != test_input_bit[i])
- {
+ unsigned char estoutputbit = (estimated_output[j][i/8]&(1<<(i&7)))>>(i&7);
+ unsigned char inputbit = (test_input[j][i/8]&(1<<(i&7)))>>(i&7); // Further correct for multiple segments
+ if (estoutputbit != inputbit)
*errors_bit = (*errors_bit) + 1;
- }
}
//if (*errors == 1000)
@@ -460,17 +441,8 @@ int test_ldpc(short No_iteration,
for(j=0;j0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", dci_est[0], dci_est[1], dci_est[2], dci_est[3]);
free(encoder_outputByte);
free(channel_output);
@@ -239,13 +245,13 @@ if (logFlag){
start_meas(&timeEncoder);
if (decoder_int16==1) {
- polar_encoder_fast((uint64_t *)testInput, encoderOutput, 0, 0, currentPtr);
+ polar_encoder_fast((uint64_t *)testInput, encoderOutput, 0, 0, polarMessageType, testLength, aggregation_level);
//polar_encoder_fast((uint64_t*)testInput, (uint64_t*)encoderOutput,0,0,currentPtr);
} else { //0 --> PBCH, 1 --> DCI, -1 --> UCI
if (polarMessageType == 0)
- polar_encoder(testInput, encoderOutput, currentPtr);
+ polar_encoder(testInput, encoderOutput, polarMessageType, testLength, aggregation_level);
else if (polarMessageType == 1)
- polar_encoder_dci(testInput, encoderOutput, currentPtr, rnti);
+ polar_encoder_dci(testInput, encoderOutput, rnti, polarMessageType, testLength, aggregation_level);
}
stop_meas(&timeEncoder);
@@ -276,19 +282,20 @@ if (logFlag){
start_meas(&timeDecoder);
if (decoder_int16==1) {
- decoderState = polar_decoder_int16(channelOutput_int16, (uint64_t *)estimatedOutput, 0, currentPtr);
+ decoderState = polar_decoder_int16(channelOutput_int16, (uint64_t *)estimatedOutput, 0,
+ polarMessageType, testLength, aggregation_level);
} else { //0 --> PBCH, 1 --> DCI, -1 --> UCI
if (polarMessageType == 0) {
- decoderState = polar_decoder(channelOutput,
- estimatedOutput,
- currentPtr,
- decoderListSize);
+ decoderState = polar_decoder(channelOutput,
+ estimatedOutput,
+ decoderListSize,
+ polarMessageType, testLength, aggregation_level);
} else if (polarMessageType == 1) {
- decoderState = polar_decoder_dci(channelOutput,
- estimatedOutput,
- currentPtr,
- decoderListSize,
- rnti);
+ decoderState = polar_decoder_dci(channelOutput,
+ estimatedOutput,
+ decoderListSize,
+ rnti,
+ polarMessageType, testLength, aggregation_level);
}
}
stop_meas(&timeDecoder);
@@ -334,9 +341,9 @@ if (logFlag){
decoderState=0;
nBitError=0;
blockErrorState=0;
- memset(testInput,0,sizeof(uint32_t) * testArrayLength);
+ memset(testInput,0,sizeof(uint32_t) * realArrayLength);
memset(encoderOutput,0,sizeof(uint32_t) * coderArrayLength);
- memset(estimatedOutput,0,sizeof(uint32_t) * testArrayLength);
+ memset(estimatedOutput,0,sizeof(uint32_t) * realArrayLength);
}
//Calculate error statistics for the SNR.
diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h
index 99b6f75f93..b7b15b5d33 100644
--- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h
+++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h
@@ -31,7 +31,7 @@
#ifndef __NR_LDPC_TYPES__H__
#define __NR_LDPC_TYPES__H__
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
#include "nrLDPCdecoder_defs.h"
// ==============================================================================
// TYPES
diff --git a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encode_parity_check.c b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encode_parity_check.c
index 69d2ac4972..d36398a13a 100644
--- a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encode_parity_check.c
+++ b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encode_parity_check.c
@@ -33,7 +33,6 @@
#include
#include
#include
-#include
#include "assertions.h"
#include "common/utils/LOG/log.h"
diff --git a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder.c b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder.c
index 76f92574ba..d5669fbbab 100644
--- a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder.c
+++ b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder.c
@@ -35,7 +35,6 @@
#include
#include
#include
-#include
#include "defs.h"
#include "assertions.h"
#include "openair1/PHY/CODING/nrLDPC_defs.h"
@@ -280,4 +279,4 @@ int ldpc_encoder_orig(unsigned char *test_input,unsigned char *channel_input,int
int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc,int Kb,short block_length, short BG, encoder_implemparams_t *impp) {
return ldpc_encoder_orig(test_input[0],channel_input[0],Zc,Kb,block_length,BG,impp->gen_code);
-}
\ No newline at end of file
+}
diff --git a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
index bef5b291dc..73c165a2c8 100644
--- a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
+++ b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
@@ -36,7 +36,7 @@
#include
#include "assertions.h"
#include "common/utils/LOG/log.h"
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
#include "defs.h"
#include "ldpc384_byte.c"
diff --git a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c
index 07062f6123..d05ced18c6 100644
--- a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c
+++ b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c
@@ -33,10 +33,9 @@
#include
#include
#include
-#include
#include "assertions.h"
#include "common/utils/LOG/log.h"
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
#include "openair1/PHY/CODING/nrLDPC_defs.h"
#include "ldpc_encode_parity_check.c"
#include "ldpc_generate_coefficient.c"
diff --git a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c
index 6fa9c5ff53..958ef5aca7 100644
--- a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c
+++ b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c
@@ -33,10 +33,9 @@
#include
#include
#include
-#include
#include "assertions.h"
#include "common/utils/LOG/log.h"
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
#include "openair1/PHY/CODING/nrLDPC_defs.h"
#include "ldpc_encode_parity_check.c"
#include "ldpc_generate_coefficient.c"
diff --git a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c
index 15d4481eb6..9ef8cbfe65 100644
--- a/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c
+++ b/openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c
@@ -33,10 +33,9 @@
#include
#include
#include
-#include
#include "assertions.h"
#include "common/utils/LOG/log.h"
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
#include "openair1/PHY/CODING/nrLDPC_defs.h"
#include "ldpc_encode_parity_check.c"
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c b/openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c
index 461eb7d6f6..3a484ff991 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c
@@ -29,12 +29,13 @@ uint8_t **crc24c_generator_matrix(uint16_t payloadSizeBits){
uint8_t crcPolynomialSize = 24;
uint8_t temp1[crcPolynomialSize], temp2[crcPolynomialSize];
- uint8_t **crc_generator_matrix = malloc(payloadSizeBits * sizeof(uint8_t *));
+ uint8_t **crc_generator_matrix = malloc(payloadSizeBits*sizeof(uint8_t *) + payloadSizeBits*crcPolynomialSize*sizeof(uint8_t));
if (crc_generator_matrix)
for (int i = 0; i < payloadSizeBits; i++)
- crc_generator_matrix[i] = malloc(crcPolynomialSize * sizeof(uint8_t));
+ crc_generator_matrix[i] = ((uint8_t*)&crc_generator_matrix[payloadSizeBits])+i*crcPolynomialSize;
- for (int i = 0; i < crcPolynomialSize; i++) crc_generator_matrix[payloadSizeBits-1][i]=crcPolynomialPattern[i+1];
+ for (int i = 0; i < crcPolynomialSize; i++)
+ crc_generator_matrix[payloadSizeBits-1][i]=crcPolynomialPattern[i+1];
for (int i = payloadSizeBits-2; i >= 0; i--){
for (int j = 0; j < crcPolynomialSize-1; j++) temp1[j]=crc_generator_matrix[i+1][j+1];
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
index 8fe115b23a..62ce034f59 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
@@ -39,19 +39,44 @@
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
#include "assertions.h"
+static inline void updateCrcChecksum2(int xlen,
+ int ylen,
+ uint8_t crcChecksum[xlen][ylen],
+ int gxlen,
+ int gylen,
+ uint8_t crcGen[gxlen][gylen],
+ uint8_t listSize,
+ uint32_t i2,
+ uint8_t len)
+{
+ for (uint8_t i = 0; i < listSize; i++) {
+ for (uint8_t j = 0; j < len; j++) {
+ crcChecksum[j][i+listSize] = ( (crcChecksum[j][i] + crcGen[i2][j]) % 2 );
+ }
+ }
+}
+
int8_t polar_decoder(double *input,
uint32_t *out,
- const t_nrPolar_params *polarParams,
- uint8_t listSize)
+ uint8_t listSize,
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level
+ )
{
+ t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, true);
//Assumes no a priori knowledge.
- uint8_t ***bit = nr_alloc_uint8_3D_array(polarParams->N, (polarParams->n+1), 2*listSize);
- uint8_t **bitUpdated = nr_alloc_uint8_2D_array(polarParams->N, (polarParams->n+1)); //0=False, 1=True
- uint8_t **llrUpdated = nr_alloc_uint8_2D_array(polarParams->N, (polarParams->n+1)); //0=False, 1=True
- double ***llr = nr_alloc_double_3D_array(polarParams->N, (polarParams->n+1), 2*listSize);
- uint8_t **crcChecksum = nr_alloc_uint8_2D_array(polarParams->crcParityBits, 2*listSize);
- double *pathMetric = malloc(sizeof(double)*(2*listSize));
- uint8_t *crcState = malloc(sizeof(uint8_t)*(2*listSize)); //0=False, 1=True
+ uint8_t bit[polarParams->N][polarParams->n+1][2*listSize];
+ memset(bit,0,sizeof bit);
+ uint8_t bitUpdated[polarParams->N][polarParams->n+1]; //0=False, 1=True
+ memset(bitUpdated,0,sizeof bitUpdated);
+ uint8_t llrUpdated[polarParams->N][polarParams->n+1]; //0=False, 1=True
+ memset(llrUpdated,0,sizeof llrUpdated);
+ double llr[polarParams->N][polarParams->n+1][2*listSize];
+ uint8_t crcChecksum[polarParams->crcParityBits][2*listSize];
+ memset(crcChecksum,0,sizeof crcChecksum);
+ double pathMetric[2*listSize];
+ uint8_t crcState[2*listSize]; //0=False, 1=True
for (int i=0; i<(2*listSize); i++) {
pathMetric[i] = 0;
@@ -63,13 +88,8 @@ int8_t polar_decoder(double *input,
bitUpdated[i][0]=((polarParams->information_bit_pattern[i]+1) % 2);
}
- uint8_t **extended_crc_generator_matrix = malloc(polarParams->K * sizeof(uint8_t *)); //G_P3
- uint8_t **tempECGM = malloc(polarParams->K * sizeof(uint8_t *)); //G_P2
-
- for (int i = 0; i < polarParams->K; i++) {
- extended_crc_generator_matrix[i] = malloc(polarParams->crcParityBits * sizeof(uint8_t));
- tempECGM[i] = malloc(polarParams->crcParityBits * sizeof(uint8_t));
- }
+ uint8_t extended_crc_generator_matrix[polarParams->K][polarParams->crcParityBits]; //G_P3
+ uint8_t tempECGM[polarParams->K][polarParams->crcParityBits]; //G_P2
for (int i=0; ipayloadBits; i++) {
for (int j=0; jcrcParityBits; j++) {
@@ -102,7 +122,7 @@ int8_t polar_decoder(double *input,
}
}
- double *d_tilde = malloc(sizeof(double) * polarParams->N);
+ double d_tilde[polarParams->N];
nr_polar_rate_matching(input, d_tilde, polarParams->rate_matching_pattern, polarParams->K, polarParams->N, polarParams->encoderLength);
for (int j = 0; j < polarParams->N; j++) llr[j][polarParams->n][0]=d_tilde[j];
@@ -117,31 +137,33 @@ int8_t polar_decoder(double *input,
uint8_t listIndex[2*listSize], copyIndex;
for (uint16_t currentBit=0; currentBitN; currentBit++) {
- updateLLR(llr, llrUpdated, bit, bitUpdated, currentListSize, currentBit, 0, polarParams->N, (polarParams->n+1));
+ updateLLR(currentListSize, currentBit, 0, polarParams->N, polarParams->n+1, 2*listSize, llr, llrUpdated, bit, bitUpdated);
if (polarParams->information_bit_pattern[currentBit]==0) { //Frozen bit.
- updatePathMetric(pathMetric, llr, currentListSize, 0, currentBit);
+ updatePathMetric(pathMetric, currentListSize, 0, currentBit, polarParams->N, polarParams->n+1, 2*listSize, llr);
} else { //Information or CRC bit.
- updatePathMetric2(pathMetric, llr, currentListSize, currentBit);
+ updatePathMetric2(pathMetric, currentListSize, currentBit, polarParams->N, polarParams->n+1, 2*listSize, llr);
for (int i = 0; i < currentListSize; i++) {
- for (int j = 0; j < polarParams->N; j++) {
- for (int k = 0; k < (polarParams->n+1); k++) {
+ for (int j = 0; j < polarParams->N; j++) {
+ for (int k = 0; k < (polarParams->n+1); k++) {
bit[j][k][i+currentListSize]=bit[j][k][i];
llr[j][k][i+currentListSize]=llr[j][k][i];
}
- }
+ }
}
- for (int i = 0; i < currentListSize; i++) {
- bit[currentBit][0][i]=0;
- crcState[i+currentListSize]=crcState[i];
- }
+ for (int i = 0; i < currentListSize; i++) {
+ bit[currentBit][0][i]=0;
+ crcState[i+currentListSize]=crcState[i];
+ }
for (int i = currentListSize; i < 2*currentListSize; i++) bit[currentBit][0][i]=1;
bitUpdated[currentBit][0]=1;
- updateCrcChecksum2(crcChecksum, extended_crc_generator_matrix, currentListSize, nonFrozenBit, polarParams->crcParityBits);
+ updateCrcChecksum2(polarParams->crcParityBits, 2*listSize, crcChecksum,
+ polarParams->K, polarParams->crcParityBits, extended_crc_generator_matrix,
+ currentListSize, nonFrozenBit, polarParams->crcParityBits);
currentListSize*=2;
//Keep only the best "listSize" number of entries.
@@ -246,14 +268,7 @@ int8_t polar_decoder(double *input,
if (decoderIterationCheck==0) {
//perror("[SCL polar decoder] All list entries have failed the CRC checks.");
- free(d_tilde);
- free(pathMetric);
- free(crcState);
- nr_free_uint8_3D_array(bit, polarParams->N, (polarParams->n+1));
- nr_free_double_3D_array(llr, polarParams->N, (polarParams->n+1));
- nr_free_uint8_2D_array(crcChecksum, polarParams->crcParityBits);
- free(tempECGM);
- return(-1);
+ polarReturn(-1);
}
nonFrozenBit++;
@@ -282,33 +297,34 @@ int8_t polar_decoder(double *input,
}
}
- free(d_tilde);
- free(pathMetric);
- free(crcState);
- nr_free_uint8_3D_array(bit, polarParams->N, (polarParams->n+1));
- nr_free_double_3D_array(llr, polarParams->N, (polarParams->n+1));
- nr_free_uint8_2D_array(crcChecksum, polarParams->crcParityBits);
- nr_free_uint8_2D_array(extended_crc_generator_matrix, polarParams->K);
- nr_free_uint8_2D_array(tempECGM, polarParams->K);
/*
* Return bits.
*/
nr_byte2bit_uint8_32(polarParams->nr_polar_A, polarParams->payloadBits, out);
- return(0);
+
+ polarReturn 0;
}
int8_t polar_decoder_dci(double *input,
uint32_t *out,
- const t_nrPolar_params *polarParams,
uint8_t listSize,
- uint16_t n_RNTI) {
- uint8_t ***bit = nr_alloc_uint8_3D_array(polarParams->N, (polarParams->n+1), 2*listSize);
- uint8_t **bitUpdated = nr_alloc_uint8_2D_array(polarParams->N, (polarParams->n+1)); //0=False, 1=True
- uint8_t **llrUpdated = nr_alloc_uint8_2D_array(polarParams->N, (polarParams->n+1)); //0=False, 1=True
- double ***llr = nr_alloc_double_3D_array(polarParams->N, (polarParams->n+1), 2*listSize);
- uint8_t **crcChecksum = nr_alloc_uint8_2D_array(polarParams->crcParityBits, 2*listSize);
- double *pathMetric = malloc(sizeof(double)*(2*listSize));
- uint8_t *crcState = malloc(sizeof(uint8_t)*(2*listSize)); //0=False, 1=True
+ uint16_t n_RNTI,
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level ) {
+ t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, true);
+
+ uint8_t bit[polarParams->N][polarParams->n+1][2*listSize];
+ memset(bit,0,sizeof bit);
+ uint8_t bitUpdated[polarParams->N][polarParams->n+1]; //0=False, 1=True
+ memset(bitUpdated,0,sizeof bitUpdated);
+ uint8_t llrUpdated[polarParams->N][polarParams->n+1]; //0=False, 1=True
+ memset(llrUpdated,0,sizeof llrUpdated);
+ double llr[polarParams->N][polarParams->n+1][2*listSize];
+ uint8_t crcChecksum[polarParams->crcParityBits][2*listSize];
+ memset(crcChecksum,0,sizeof crcChecksum);
+ double pathMetric[2*listSize];
+ uint8_t crcState[2*listSize]; //0=False, 1=True
uint8_t extended_crc_scrambling_pattern[polarParams->crcParityBits];
for (int i=0; i<(2*listSize); i++) {
@@ -321,13 +337,8 @@ int8_t polar_decoder_dci(double *input,
bitUpdated[i][0]=((polarParams->information_bit_pattern[i]+1) % 2);
}
- uint8_t **extended_crc_generator_matrix = malloc(polarParams->K * sizeof(uint8_t *)); //G_P3: K-by-P
- uint8_t **tempECGM = malloc(polarParams->K * sizeof(uint8_t *)); //G_P2: K-by-P
-
- for (int i = 0; i < polarParams->K; i++) {
- extended_crc_generator_matrix[i] = malloc(polarParams->crcParityBits * sizeof(uint8_t));
- tempECGM[i] = malloc(polarParams->crcParityBits * sizeof(uint8_t));
- }
+ uint8_t extended_crc_generator_matrix[polarParams->K][polarParams->crcParityBits]; //G_P3: K-by-P
+ uint8_t tempECGM[polarParams->K][polarParams->crcParityBits]; //G_P2: K-by-P
for (int i=0; ipayloadBits; i++) {
for (int j=0; jcrcParityBits; j++) {
@@ -366,17 +377,19 @@ int8_t polar_decoder_dci(double *input,
extended_crc_scrambling_pattern[i]=(n_RNTI>>(23-i))&1;
}
- double *d_tilde = malloc(sizeof(double) * polarParams->N);
+ double d_tilde[polarParams->N];
nr_polar_rate_matching(input, d_tilde, polarParams->rate_matching_pattern, polarParams->K, polarParams->N, polarParams->encoderLength);
- for (int j = 0; j < polarParams->N; j++) llr[j][polarParams->n][0]=d_tilde[j];
+ for (int j = 0; j < polarParams->N; j++)
+ llr[j][polarParams->n][0]=d_tilde[j];
/*
* SCL polar decoder.
*/
for (int i=0; icrcParityBits; i++) {
- for (int j=0; jcrcParityBits; j++) crcChecksum[i][0]=crcChecksum[i][0]+polarParams->crc_generator_matrix[j][i];
+ for (int j=0; jcrcParityBits; j++)
+ crcChecksum[i][0]=crcChecksum[i][0]+polarParams->crc_generator_matrix[j][i];
crcChecksum[i][0]=(crcChecksum[i][0]%2);
}
@@ -388,12 +401,12 @@ int8_t polar_decoder_dci(double *input,
uint8_t listIndex[2*listSize], copyIndex;
for (uint16_t currentBit=0; currentBitN; currentBit++) {
- updateLLR(llr, llrUpdated, bit, bitUpdated, currentListSize, currentBit, 0, polarParams->N, (polarParams->n+1));
+ updateLLR(currentListSize, currentBit, 0, polarParams->N, polarParams->n+1, 2*listSize, llr, llrUpdated, bit, bitUpdated);
if (polarParams->information_bit_pattern[currentBit]==0) { //Frozen bit.
- updatePathMetric(pathMetric, llr, currentListSize, 0, currentBit);
+ updatePathMetric(pathMetric, currentListSize, 0, currentBit,polarParams->N, polarParams->n+1, 2*listSize, llr);
} else { //Information or CRC bit.
- updatePathMetric2(pathMetric, llr, currentListSize, currentBit);
+ updatePathMetric2(pathMetric, currentListSize, currentBit, polarParams->N, polarParams->n+1, 2*listSize, llr);
for (int i = 0; i < currentListSize; i++) {
for (int j = 0; j < polarParams->N; j++) {
@@ -412,7 +425,9 @@ int8_t polar_decoder_dci(double *input,
for (int i = currentListSize; i < 2*currentListSize; i++) bit[currentBit][0][i]=1;
bitUpdated[currentBit][0]=1;
- updateCrcChecksum2(crcChecksum, extended_crc_generator_matrix, currentListSize, nonFrozenBit, polarParams->crcParityBits);
+ updateCrcChecksum2(polarParams->crcParityBits, 2*listSize, crcChecksum,
+ polarParams->K, polarParams->crcParityBits, extended_crc_generator_matrix,
+ currentListSize, nonFrozenBit, polarParams->crcParityBits);
currentListSize*=2;
//Keep only the best "listSize" number of entries.
@@ -513,18 +528,12 @@ int8_t polar_decoder_dci(double *input,
}
}
- for (uint8_t i = 0; i < currentListSize; i++) decoderIterationCheck+=crcState[i];
+ for (uint8_t i = 0; i < currentListSize; i++)
+ decoderIterationCheck+=crcState[i];
if (decoderIterationCheck==0) {
//perror("[SCL polar decoder] All list entries have failed the CRC checks.");
- free(d_tilde);
- free(pathMetric);
- free(crcState);
- nr_free_uint8_3D_array(bit, polarParams->N, (polarParams->n+1));
- nr_free_double_3D_array(llr, polarParams->N, (polarParams->n+1));
- nr_free_uint8_2D_array(crcChecksum, polarParams->crcParityBits);
- free(tempECGM);
- return(-1);
+ polarReturn -1;
}
nonFrozenBit++;
@@ -553,19 +562,12 @@ int8_t polar_decoder_dci(double *input,
}
}
- free(d_tilde);
- free(pathMetric);
- free(crcState);
- nr_free_uint8_3D_array(bit, polarParams->N, (polarParams->n+1));
- nr_free_double_3D_array(llr, polarParams->N, (polarParams->n+1));
- nr_free_uint8_2D_array(crcChecksum, polarParams->crcParityBits);
- nr_free_uint8_2D_array(extended_crc_generator_matrix, polarParams->K);
- nr_free_uint8_2D_array(tempECGM, polarParams->K);
/*
* Return bits.
*/
nr_byte2bit_uint8_32(polarParams->nr_polar_A, polarParams->payloadBits, out);
- return(0);
+
+ polarReturn 0;
}
void init_polar_deinterleaver_table(t_nrPolar_params *polarParams) {
@@ -604,8 +606,11 @@ void init_polar_deinterleaver_table(t_nrPolar_params *polarParams) {
uint32_t polar_decoder_int16(int16_t *input,
uint64_t *out,
uint8_t ones_flag,
- const t_nrPolar_params *polarParams)
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level )
{
+ t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, true);
int16_t d_tilde[polarParams->N];// = malloc(sizeof(double) * polarParams->N);
nr_polar_rate_matching_int16(input, d_tilde, polarParams->rate_matching_pattern, polarParams->K, polarParams->N, polarParams->encoderLength);
@@ -702,5 +707,6 @@ uint32_t polar_decoder_int16(int16_t *input,
rxcrc,polarParams->payloadBits);
#endif
out[0]=Ar;
- return(crc^rxcrc);
+
+ polarReturn crc^rxcrc;
}
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c
index 42d500ae86..b201db2ba6 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c
@@ -36,51 +36,25 @@
//#define DEBUG_NEW_IMPL 1
-void updateLLR(double ***llr,
- uint8_t **llrU,
- uint8_t ***bit,
- uint8_t **bitU,
- uint8_t listSize,
- uint16_t row,
- uint16_t col,
- uint16_t xlen,
- uint8_t ylen)
-{
- uint16_t offset = (xlen/(pow(2,(ylen-col-1))));
- for (uint8_t i=0; i= offset ) {
- if(bitU[row-offset][col]==0) updateBit(bit, bitU, listSize, (row-offset), col, xlen, ylen);
- if(llrU[row-offset][col+1]==0) updateLLR(llr, llrU, bit, bitU, listSize, (row-offset), (col+1), xlen, ylen);
- if(llrU[row][col+1]==0) updateLLR(llr, llrU, bit, bitU, listSize, row, (col+1), xlen, ylen);
- llr[row][col][i] = (pow((-1),bit[row-offset][col][i])*llr[row-offset][col+1][i]) + llr[row][col+1][i];
- } else {
- if(llrU[row][col+1]==0) updateLLR(llr, llrU, bit, bitU, listSize, row, (col+1), xlen, ylen);
- if(llrU[row+offset][col+1]==0) updateLLR(llr, llrU, bit, bitU, listSize, (row+offset), (col+1), xlen, ylen);
- computeLLR(llr, row, col, i, offset);
- }
- }
- llrU[row][col]=1;
- // printf("LLR (a %f, b %f): llr[%d][%d] %f\n",32*a,32*b,col,row,32*llr[col][row]);
-}
-
-void updateBit(uint8_t ***bit,
- uint8_t **bitU,
- uint8_t listSize,
- uint16_t row,
- uint16_t col,
- uint16_t xlen,
- uint8_t ylen)
+static inline void updateBit(uint8_t listSize,
+ uint16_t row,
+ uint16_t col,
+ uint16_t xlen,
+ uint8_t ylen,
+ int zlen,
+ uint8_t bit[xlen][ylen][zlen],
+ uint8_t bitU[xlen][ylen])
{
uint16_t offset = ( xlen/(pow(2,(ylen-col))) );
for (uint8_t i=0; i= offset ) {
- if (bitU[row][col-1]==0) updateBit(bit, bitU, listSize, row, (col-1), xlen, ylen);
+ if (bitU[row][col-1]==0) updateBit(listSize, row, (col-1), xlen, ylen, zlen, bit, bitU);
bit[row][col][i] = bit[row][col-1][i];
} else {
- if (bitU[row][col-1]==0) updateBit(bit, bitU, listSize, row, (col-1), xlen, ylen);
- if (bitU[row+offset][col-1]==0) updateBit(bit, bitU, listSize, (row+offset), (col-1), xlen, ylen);
+ if (bitU[row][col-1]==0) updateBit(listSize, row, (col-1), xlen, ylen, zlen, bit, bitU);
+ if (bitU[row+offset][col-1]==0) updateBit(listSize, (row+offset), (col-1), xlen, ylen, zlen, bit, bitU);
bit[row][col][i] = ( (bit[row][col-1][i]+bit[row+offset][col-1][i]) % 2);
}
}
@@ -88,11 +62,60 @@ void updateBit(uint8_t ***bit,
bitU[row][col]=1;
}
+static inline void computeLLR(uint16_t row,
+ uint16_t col,
+ uint8_t i,
+ uint16_t offset,
+ int xlen,
+ int ylen,
+ int zlen,
+ double llr[xlen][ylen][zlen])
+{
+ double a = llr[row][col + 1][i];
+ double b = llr[row + offset][col + 1][i];
+ llr[row][col][i] = log((exp(a + b) + 1) / (exp(a) + exp(b))); //eq. (8a)
+}
+
+
+void updateLLR(uint8_t listSize,
+ uint16_t row,
+ uint16_t col,
+ uint16_t xlen,
+ uint8_t ylen,
+ int zlen,
+ double llr[xlen][ylen][zlen],
+ uint8_t llrU[xlen][ylen],
+ uint8_t bit[xlen][ylen][zlen],
+ uint8_t bitU[xlen][ylen]
+ )
+{
+ uint16_t offset = (xlen/(pow(2,(ylen-col-1))));
+ for (uint8_t i=0; i= offset ) {
+ if(bitU[row-offset][col]==0) updateBit(listSize, (row-offset), col, xlen, ylen, zlen, bit, bitU);
+ if(llrU[row-offset][col+1]==0) updateLLR(listSize, (row-offset), (col+1), xlen, ylen, zlen, llr, llrU, bit, bitU );
+ if(llrU[row][col+1]==0) updateLLR(listSize, row, (col+1), xlen, ylen, zlen, llr, llrU, bit, bitU);
+ llr[row][col][i] = (pow((-1),bit[row-offset][col][i])*llr[row-offset][col+1][i]) + llr[row][col+1][i];
+ } else {
+ if(llrU[row][col+1]==0) updateLLR(listSize, row, (col+1), xlen, ylen, zlen, llr, llrU, bit, bitU );
+ if(llrU[row+offset][col+1]==0) updateLLR(listSize, (row+offset), (col+1), xlen, ylen, zlen, llr, llrU, bit, bitU );
+ computeLLR(row, col, i, offset, xlen, ylen, zlen, llr);
+ }
+ }
+ llrU[row][col]=1;
+
+ // printf("LLR (a %f, b %f): llr[%d][%d] %f\n",32*a,32*b,col,row,32*llr[col][row]);
+}
+
void updatePathMetric(double *pathMetric,
- double ***llr,
- uint8_t listSize,
- uint8_t bitValue,
- uint16_t row)
+ uint8_t listSize,
+ uint8_t bitValue,
+ uint16_t row,
+ int xlen,
+ int ylen,
+ int zlen,
+ double llr[xlen][ylen][zlen]
+ )
{
int8_t multiplier = (2*bitValue) - 1;
for (uint8_t i=0; ileft)
+ delete_nodes(n->left);
+ if(n->right)
+ delete_nodes(n->right);
+ free(n->alpha);
+ free(n->beta);
+ free(n);
+ }
+}
+
+void delete_decoder_tree(t_nrPolar_params *polarParams) {
+ if (polarParams->tree.root)
+ delete_nodes(polarParams->tree.root);
+}
+
void build_decoder_tree(t_nrPolar_params *polarParams)
{
polarParams->tree.num_nodes=0;
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
index c2e9fd9381..79af311e45 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
@@ -79,9 +79,10 @@ typedef struct decoder_tree_t_s {
struct nrPolar_params {
//messageType: 0=PBCH, 1=DCI, -1=UCI
- int idx; //idx = (messageType * messageLength * aggregation_prime);
- struct nrPolar_params *nextPtr;
+ struct nrPolar_params *nextPtr __attribute__((aligned(16)));
+ bool busy;
+ uint32_t idx;
uint8_t n_max;
uint8_t i_il;
uint8_t i_seg;
@@ -138,34 +139,46 @@ typedef struct nrPolar_params t_nrPolar_params;
void polar_encoder(uint32_t *input,
uint32_t *output,
- const t_nrPolar_params *polarParams);
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level);
void polar_encoder_dci(uint32_t *in,
uint32_t *out,
- const t_nrPolar_params *polarParams,
- uint16_t n_RNTI);
+ uint16_t n_RNTI,
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level);
void polar_encoder_fast(uint64_t *A,
void *out,
int32_t crcmask,
uint8_t ones_flag,
- const t_nrPolar_params *polarParams);
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level);
int8_t polar_decoder(double *input,
uint32_t *output,
- const t_nrPolar_params *polarParams,
- uint8_t listSize);
+ uint8_t listSize,
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level);
uint32_t polar_decoder_int16(int16_t *input,
uint64_t *out,
uint8_t ones_flag,
- const t_nrPolar_params *polarParams);
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level);
int8_t polar_decoder_dci(double *input,
uint32_t *out,
- const t_nrPolar_params *polarParams,
uint8_t listSize,
- uint16_t n_RNTI);
+ uint16_t n_RNTI,
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level);
void generic_polar_decoder(const t_nrPolar_params *pp,
decoder_node_t *node);
@@ -183,13 +196,12 @@ void build_decoder_tree(t_nrPolar_params *pp);
void build_polar_tables(t_nrPolar_params *polarParams);
void init_polar_deinterleaver_table(t_nrPolar_params *polarParams);
-void nr_polar_print_polarParams(t_nrPolar_params *polarParams);
+void nr_polar_print_polarParams(void);
t_nrPolar_params *nr_polar_params (int8_t messageType,
uint16_t messageLength,
uint8_t aggregation_level,
- int decoder_flag,
- t_nrPolar_params **polarList_ext);
+ int decoder_flag);
uint16_t nr_polar_aggregation_prime (uint8_t aggregation_level);
@@ -278,34 +290,6 @@ void nr_matrix_multiplication_uint8_1D_uint8_2D(uint8_t *matrix1,
uint16_t row,
uint16_t col);
-uint8_t ***nr_alloc_uint8_3D_array(uint16_t xlen,
- uint16_t ylen,
- uint16_t zlen);
-
-uint8_t **nr_alloc_uint8_2D_array(uint16_t xlen,
- uint16_t ylen);
-
-double ***nr_alloc_double_3D_array(uint16_t xlen,
- uint16_t ylen,
- uint16_t zlen);
-
-double **nr_alloc_double_2D_array(uint16_t xlen,
- uint16_t ylen);
-
-void nr_free_double_3D_array(double ***input,
- uint16_t xlen,
- uint16_t ylen);
-
-void nr_free_double_2D_array(double **input,
- uint16_t xlen);
-
-void nr_free_uint8_3D_array(uint8_t ***input,
- uint16_t xlen,
- uint16_t ylen);
-
-void nr_free_uint8_2D_array(uint8_t **input,
- uint16_t xlen);
-
void nr_sort_asc_double_1D_array_ind(double *matrix,
uint8_t *ind,
uint8_t len);
@@ -316,52 +300,33 @@ void nr_sort_asc_int16_1D_array_ind(int32_t *matrix,
void nr_free_double_2D_array(double **input, uint16_t xlen);
-void updateLLR(double ***llr,
- uint8_t **llrU,
- uint8_t ***bit,
- uint8_t **bitU,
- uint8_t listSize,
- uint16_t row,
- uint16_t col,
- uint16_t xlen,
- uint8_t ylen);
-
-void updateBit(uint8_t ***bit,
- uint8_t **bitU,
- uint8_t listSize,
- uint16_t row,
- uint16_t col,
- uint16_t xlen,
- uint8_t ylen);
-
+void updateLLR(uint8_t listSize,
+ uint16_t row,
+ uint16_t col,
+ uint16_t xlen,
+ uint8_t ylen,
+ int zlen,
+ double llr[xlen][ylen][zlen],
+ uint8_t llrU[xlen][ylen],
+ uint8_t bit[xlen][ylen][zlen],
+ uint8_t bitU[xlen][ylen]
+ );
void updatePathMetric(double *pathMetric,
- double ***llr,
- uint8_t listSize,
- uint8_t bitValue,
- uint16_t row);
-
+ uint8_t listSize,
+ uint8_t bitValue,
+ uint16_t row,
+ int xlen,
+ int ylen,
+ int zlen,
+ double llr[xlen][ylen][zlen]
+ );
void updatePathMetric2(double *pathMetric,
- double ***llr,
- uint8_t listSize,
- uint16_t row);
-
-void computeLLR(double ***llr,
- uint16_t row,
- uint16_t col,
- uint8_t i,
- uint16_t offset);
-
-void updateCrcChecksum(uint8_t **crcChecksum,
- uint8_t **crcGen,
- uint8_t listSize,
- uint32_t i2,
- uint8_t len);
-
-void updateCrcChecksum2(uint8_t **crcChecksum,
- uint8_t **crcGen,
- uint8_t listSize,
- uint32_t i2,
- uint8_t len);
+ uint8_t listSize,
+ uint16_t row,
+ int xlen,
+ int ylen,
+ int zlen,
+ double llr[xlen][ylen][zlen]);
//Also nr_polar_rate_matcher
static inline void nr_polar_interleaver(uint8_t *input,
@@ -379,5 +344,13 @@ static inline void nr_polar_deinterleaver(uint8_t *input,
{
for (int i=0; ibusy=false; \
+pthread_mutex_unlock(&PolarListMutex); \
+return
#endif
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
index 1dfaed8b94..4cba3fe078 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
@@ -43,7 +43,10 @@
void polar_encoder(uint32_t *in,
uint32_t *out,
- const t_nrPolar_params *polarParams) {
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level) {
+ t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, false);
if (1) {//polarParams->idx == 0 || polarParams->idx == 1) { //PBCH or PDCCH
/*
uint64_t B = (((uint64_t)*in)&((((uint64_t)1)<<32)-1)) | (((uint64_t)crc24c((uint8_t*)in,polarParams->payloadBits)>>8)<payloadBits);
@@ -57,10 +60,10 @@ void polar_encoder(uint32_t *in,
*/
//Calculate CRC.
nr_matrix_multiplication_uint8_1D_uint8_2D(polarParams->nr_polar_A,
- polarParams->crc_generator_matrix,
- polarParams->nr_polar_crc,
- polarParams->payloadBits,
- polarParams->crcParityBits);
+ polarParams->crc_generator_matrix,
+ polarParams->nr_polar_crc,
+ polarParams->payloadBits,
+ polarParams->crcParityBits);
for (uint8_t i = 0; i < polarParams->crcParityBits; i++)
polarParams->nr_polar_crc[i] = (polarParams->nr_polar_crc[i] % 2);
@@ -150,12 +153,19 @@ void polar_encoder(uint32_t *in,
#endif
nr_byte2bit_uint8_32(polarParams->nr_polar_E, polarParams->encoderLength, out);
+
+ polarReturn;
+
}
void polar_encoder_dci(uint32_t *in,
uint32_t *out,
- const t_nrPolar_params *polarParams,
- uint16_t n_RNTI) {
+ uint16_t n_RNTI,
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level) {
+ t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, false);
+
#ifdef DEBUG_POLAR_ENCODER_DCI
printf("[polar_encoder_dci] in: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", in[0], in[1], in[2], in[3]);
#endif
@@ -249,6 +259,7 @@ void polar_encoder_dci(uint32_t *in,
printf("\n[polar_encoder_dci] out: ");
for (int i = 0; i < outputInd; i++) printf("[%d]->0x%08x\t", i, out[i]);
#endif
+ polarReturn;
}
static inline void polar_rate_matching(const t_nrPolar_params *polarParams,void *in,void *out) __attribute__((always_inline));
@@ -334,7 +345,7 @@ void build_polar_tables(t_nrPolar_params *polarParams) {
AssertFatal(polarParams->N==512 || polarParams->N==256 || polarParams->N==128,"N = %d, not done yet\n",polarParams->N);
// build G bit vectors for information bit positions and convert the bit as bytes tables in nr_polar_kronecker_power_matrices.c to 64 bit packed vectors.
// keep only rows of G which correspond to information/crc bits
- polarParams->G_N_tab = (uint64_t **)malloc((polarParams->K + polarParams->n_pc) * sizeof(int64_t *));
+ polarParams->G_N_tab = (uint64_t **)calloc((polarParams->K + polarParams->n_pc),sizeof(int64_t *));
int k=0;
for (int i=0; iN; i++) {
@@ -418,11 +429,14 @@ void polar_encoder_fast(uint64_t *A,
void *out,
int32_t crcmask,
uint8_t ones_flag,
- const t_nrPolar_params *polarParams) {
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level) {
+
+ t_nrPolar_params *polarParams=nr_polar_params(messageType, messageLength, aggregation_level, false);
// AssertFatal(polarParams->K > 32, "K = %d < 33, is not supported yet\n",polarParams->K);
AssertFatal(polarParams->K < 129, "K = %d > 128, is not supported yet\n",polarParams->K);
AssertFatal(polarParams->payloadBits < 65, "payload bits = %d > 64, is not supported yet\n",polarParams->payloadBits);
- uint64_t B[4]= {0,0,0,0},Cprime[4]= {0,0,0,0};
int bitlen = polarParams->payloadBits;
// append crc
AssertFatal(bitlen<129,"support for payloads <= 128 bits\n");
@@ -451,9 +465,12 @@ void polar_encoder_fast(uint64_t *A,
A32_flip[1+offset]=((uint8_t *)&Aprime)[2];
A32_flip[2+offset]=((uint8_t *)&Aprime)[1];
A32_flip[3+offset]=((uint8_t *)&Aprime)[0];
- if (polarParams->crcParityBits == 24) tcrc = (uint64_t)(((crcmask^(crc24c(A32_flip,8*offset+bitlen)>>8)))&0xffffff);
- else if (polarParams->crcParityBits == 11) tcrc = (uint64_t)(((crcmask^(crc11(A32_flip,bitlen)>>21)))&0x7ff);
- else if (polarParams->crcParityBits == 6) tcrc = (uint64_t)(((crcmask^(crc6(A32_flip,bitlen)>>26)))&0x3f);
+ if (polarParams->crcParityBits == 24)
+ tcrc = (uint64_t)(((crcmask^(crc24c(A32_flip,8*offset+bitlen)>>8)))&0xffffff);
+ else if (polarParams->crcParityBits == 11)
+ tcrc = (uint64_t)(((crcmask^(crc11(A32_flip,bitlen)>>21)))&0x7ff);
+ else if (polarParams->crcParityBits == 6)
+ tcrc = (uint64_t)(((crcmask^(crc6(A32_flip,bitlen)>>26)))&0x3f);
} else if (bitlen<=64) {
uint8_t A64_flip[8+offset];
if (ones_flag) {
@@ -470,8 +487,10 @@ void polar_encoder_fast(uint64_t *A,
A64_flip[5+offset]=((uint8_t *)&Aprime)[2];
A64_flip[6+offset]=((uint8_t *)&Aprime)[1];
A64_flip[7+offset]=((uint8_t *)&Aprime)[0];
- if (polarParams->crcParityBits == 24) tcrc = (uint64_t)((crcmask^(crc24c(A64_flip,8*offset+bitlen)>>8)))&0xffffff;
- else if (polarParams->crcParityBits == 11) tcrc = (uint64_t)((crcmask^(crc11(A64_flip,bitlen)>>21)))&0x7ff;
+ if (polarParams->crcParityBits == 24)
+ tcrc = (uint64_t)((crcmask^(crc24c(A64_flip,8*offset+bitlen)>>8)))&0xffffff;
+ else if (polarParams->crcParityBits == 11)
+ tcrc = (uint64_t)((crcmask^(crc11(A64_flip,bitlen)>>21)))&0x7ff;
}
else if (bitlen<=128) {
uint8_t A128_flip[16+offset];
@@ -481,38 +500,37 @@ void polar_encoder_fast(uint64_t *A,
A128_flip[2] = 0xff;
}
uint128_t Aprime= (uint128_t)(((uint128_t)*A)<<(128-bitlen));
- A128_flip[0+offset]=((uint8_t*)&Aprime)[15]; A128_flip[1+offset]=((uint8_t*)&Aprime)[14];
- A128_flip[2+offset]=((uint8_t*)&Aprime)[13]; A128_flip[3+offset]=((uint8_t*)&Aprime)[12];
- A128_flip[4+offset]=((uint8_t*)&Aprime)[11]; A128_flip[5+offset]=((uint8_t*)&Aprime)[10];
- A128_flip[6+offset] =((uint8_t*)&Aprime)[9]; A128_flip[7+offset] =((uint8_t*)&Aprime)[8];
- A128_flip[8+offset] =((uint8_t*)&Aprime)[7]; A128_flip[9+offset] =((uint8_t*)&Aprime)[6];
- A128_flip[10+offset]=((uint8_t*)&Aprime)[5]; A128_flip[11+offset]=((uint8_t*)&Aprime)[4];
- A128_flip[12+offset]=((uint8_t*)&Aprime)[3]; A128_flip[13+offset]=((uint8_t*)&Aprime)[2];
- A128_flip[14+offset]=((uint8_t*)&Aprime)[1]; A128_flip[15+offset]=((uint8_t*)&Aprime)[0];
- if (polarParams->crcParityBits == 24) tcrc = (uint64_t)((crcmask^(crc24c(A128_flip,8*offset+bitlen)>>8)))&0xffffff;
- else if (polarParams->crcParityBits == 11) tcrc = (uint64_t)((crcmask^(crc11(A128_flip,bitlen)>>21)))&0x7ff;
+ for (int i=0; i<16 ; i++)
+ A128_flip[i+offset]=((uint8_t*)&Aprime)[15-i];
+ if (polarParams->crcParityBits == 24)
+ tcrc = (uint64_t)((crcmask^(crc24c(A128_flip,8*offset+bitlen)>>8)))&0xffffff;
+ else if (polarParams->crcParityBits == 11)
+ tcrc = (uint64_t)((crcmask^(crc11(A128_flip,bitlen)>>21)))&0x7ff;
}
int n;
// this is number of quadwords in the bit string
- int quadwlen = (polarParams->K>>6);
-
- if ((polarParams->K&63) > 0) quadwlen++;
+ int quadwlen = (polarParams->K+63)/64;
// Create the B bit string as
// 0, 0, ..., 0, a'_0, a'_1, ..., a'_A-1, p_0, p_1, ..., p_{N_parity-1}
//??? b_{N'-1} b_{N'-2} ... b_{N'-A} b_{N'-A-1} ... b_{N'-A-Nparity} = a_{N-1} a_{N-2} ... a_{N-A} p_{N_parity-1} ... p_0
-
- for (n=0; ncrcParityBits) | tcrc;
- else B[n] = (A[n] << polarParams->crcParityBits) | (A[n-1]>>(64-polarParams->crcParityBits));
+ uint64_t B[4]= {0};
+ B[0] = (A[0] << polarParams->crcParityBits) | tcrc;
+ for (n=1; n n)
+ B[n] = (A[n] << polarParams->crcParityBits) | (A[n-1]>>(64-polarParams->crcParityBits));
+ else
+ B[n] = (A[n-1]>>(64-polarParams->crcParityBits));
uint8_t *Bbyte = (uint8_t *)B;
// for each byte of B, lookup in corresponding table for 64-bit word corresponding to that byte and its position
+ uint64_t Cprime[4]= {0};
if (polarParams->K<65)
Cprime[0] = polarParams->cprime_tab0[0][Bbyte[0]] |
- polarParams->cprime_tab0[1][Bbyte[1]] |
+ polarParams->cprime_tab0[1][Bbyte[1]] |
polarParams->cprime_tab0[2][Bbyte[2]] |
polarParams->cprime_tab0[3][Bbyte[3]] |
polarParams->cprime_tab0[4][Bbyte[4]] |
@@ -684,4 +702,7 @@ void polar_encoder_fast(uint64_t *A,
}
memset((void*)out,0,polarParams->encoderLength>>3);
polar_rate_matching(polarParams,(void *)D, out);
+
+ polarReturn;
+
}
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_matrix_and_array.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_matrix_and_array.c
index c4c68e4e0e..ffeacb6be1 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_matrix_and_array.c
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_matrix_and_array.c
@@ -43,163 +43,6 @@ void nr_matrix_multiplication_uint8_1D_uint8_2D(uint8_t *matrix1, uint8_t **matr
}
}
-uint8_t ***nr_alloc_uint8_3D_array(uint16_t xlen, uint16_t ylen, uint16_t zlen) {
- uint8_t ***output;
- int i, j;
-
- if ((output = malloc(xlen * sizeof(*output))) == NULL) {
- perror("[nr_alloc_uint8_3D_array] Problem at 1D allocation");
- return NULL;
- }
- for (i = 0; i < xlen; i++)
- output[i] = NULL;
-
-
- for (i = 0; i < xlen; i++)
- if ((output[i] = malloc(ylen * sizeof *output[i])) == NULL) {
- perror("[nr_alloc_uint8_3D_array] Problem at 2D allocation");
- nr_free_uint8_3D_array(output, xlen, ylen);
- return NULL;
- }
- for (i = 0; i < xlen; i++)
- for (j = 0; j < ylen; j++)
- output[i][j] = NULL;
-
-
- for (i = 0; i < xlen; i++)
- for (j = 0; j < ylen; j++)
- if ((output[i][j] = malloc(zlen * sizeof *output[i][j])) == NULL) {
- perror("[nr_alloc_uint8_3D_array] Problem at 3D allocation");
- nr_free_uint8_3D_array(output, xlen, ylen);
- return NULL;
- }
-
- return output;
-}
-
-uint8_t **nr_alloc_uint8_2D_array(uint16_t xlen, uint16_t ylen) {
- uint8_t **output;
- int i, j;
-
- if ((output = malloc(xlen * sizeof(*output))) == NULL) {
- perror("[nr_alloc_uint8_2D_array] Problem at 1D allocation");
- return NULL;
- }
- for (i = 0; i < xlen; i++)
- output[i] = NULL;
-
-
- for (i = 0; i < xlen; i++)
- if ((output[i] = malloc(ylen * sizeof *output[i])) == NULL) {
- perror("[nr_alloc_uint8_2D_array] Problem at 2D allocation");
- nr_free_uint8_2D_array(output, xlen);
- return NULL;
- }
- for (i = 0; i < xlen; i++)
- for (j = 0; j < ylen; j++)
- output[i][j] = 0;
-
- return output;
-}
-
-double ***nr_alloc_double_3D_array(uint16_t xlen, uint16_t ylen, uint16_t zlen) {
- double ***output;
- int i, j;
-
- if ((output = malloc(xlen * sizeof(*output))) == NULL) {
- perror("[nr_alloc_double_3D_array] Problem at 1D allocation");
- return NULL;
- }
- for (i = 0; i < xlen; i++)
- output[i] = NULL;
-
-
- for (i = 0; i < xlen; i++)
- if ((output[i] = malloc(ylen * sizeof *output[i])) == NULL) {
- perror("[nr_alloc_double_3D_array] Problem at 2D allocation");
- nr_free_double_3D_array(output, xlen, ylen);
- return NULL;
- }
- for (i = 0; i < xlen; i++)
- for (j = 0; j < ylen; j++)
- output[i][j] = NULL;
-
-
- for (i = 0; i < xlen; i++)
- for (j = 0; j < ylen; j++)
- if ((output[i][j] = malloc(zlen * sizeof *output[i][j])) == NULL) {
- perror("[nr_alloc_double_3D_array] Problem at 3D allocation");
- nr_free_double_3D_array(output, xlen, ylen);
- return NULL;
- }
-
- return output;
-}
-
-double **nr_alloc_double_2D_array(uint16_t xlen, uint16_t ylen) {
- double **output;
- int i, j;
-
- if ((output = malloc(xlen * sizeof(*output))) == NULL) {
- perror("[nr_alloc_double_3D_array] Problem at 1D allocation");
- return NULL;
- }
- for (i = 0; i < xlen; i++)
- output[i] = NULL;
-
-
- for (i = 0; i < xlen; i++)
- if ((output[i] = malloc(ylen * sizeof *output[i])) == NULL) {
- perror("[nr_alloc_double_2D_array] Problem at 2D allocation");
- nr_free_double_2D_array(output, xlen);
- return NULL;
- }
- for (i = 0; i < xlen; i++)
- for (j = 0; j < ylen; j++)
- output[i][j] = 0;
-
-
- return output;
-}
-
-void nr_free_double_3D_array(double ***input, uint16_t xlen, uint16_t ylen) {
- int i, j;
-
- for (i = 0; i < xlen; i++) {
- for (j = 0; j < ylen; j++) {
- free(input[i][j]);
- }
- free(input[i]);
- }
- free(input);
-}
-
-void nr_free_double_2D_array(double **input, uint16_t xlen) {
- int i;
-
- for (i = 0; i < xlen; i++) {
- free(input[i]);
- }
- free(input);
-}
-
-void nr_free_uint8_3D_array(uint8_t ***input, uint16_t xlen, uint16_t ylen) {
- int i, j;
-
- for (i = 0; i < xlen; i++) {
- for (j = 0; j < ylen; j++) {
- free(input[i][j]);
- }
- free(input[i]);
- }
- free(input);
-}
-
-void nr_free_uint8_2D_array(uint8_t **input, uint16_t xlen) {
- for (int i = 0; i < xlen; i++) free(input[i]);
- free(input);
-}
-
// Modified Bubble Sort.
void nr_sort_asc_double_1D_array_ind(double *matrix, uint8_t *ind, uint8_t len) {
int swaps;
diff --git a/openair1/PHY/CODING/nr_polar_init.c b/openair1/PHY/CODING/nr_polar_init.c
index f6a700117d..38a1ae86ae 100644
--- a/openair1/PHY/CODING/nr_polar_init.c
+++ b/openair1/PHY/CODING/nr_polar_init.c
@@ -33,178 +33,236 @@
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
#include "PHY/NR_TRANSPORT/nr_dci.h"
+#define PolarKey ((messageType<<24)|(messageLength<<8)|aggregation_level)
+static t_nrPolar_params * PolarList=NULL;
+pthread_mutex_t PolarListMutex=PTHREAD_MUTEX_INITIALIZER;
+
static int intcmp(const void *p1,const void *p2) {
return(*(int16_t *)p1 > *(int16_t *)p2);
}
-static void nr_polar_init(t_nrPolar_params * *polarParams,
- int8_t messageType,
+static void nr_polar_delete_list(t_nrPolar_params * polarParams) {
+ if (!polarParams)
+ return;
+ if (polarParams->nextPtr)
+ nr_polar_delete_list(polarParams->nextPtr);
+
+ delete_decoder_tree(polarParams);
+ //From build_polar_tables()
+ for (int k=0; k < polarParams->K + polarParams->n_pc; k++)
+ if (polarParams->G_N_tab[k])
+ free(polarParams->G_N_tab[k]);
+ free(polarParams->G_N_tab);
+ free(polarParams->rm_tab);
+ if (polarParams->crc_generator_matrix)
+ free(polarParams->crc_generator_matrix);
+ //polar_encoder vectors:
+ free(polarParams->nr_polar_crc);
+ free(polarParams->nr_polar_aPrime);
+ free(polarParams->nr_polar_APrime);
+ free(polarParams->nr_polar_D);
+ free(polarParams->nr_polar_E);
+ //Polar Coding vectors
+ free(polarParams->nr_polar_U);
+ free(polarParams->nr_polar_CPrime);
+ free(polarParams->nr_polar_B);
+ free(polarParams->nr_polar_A);
+ free(polarParams->interleaving_pattern);
+ free(polarParams->deinterleaving_pattern);
+ free(polarParams->rate_matching_pattern);
+ free(polarParams->information_bit_pattern);
+ free(polarParams->Q_I_N);
+ free(polarParams->Q_F_N);
+ free(polarParams->Q_PC_N);
+ free(polarParams->channel_interleaver_pattern);
+ free(polarParams);
+}
+
+static void nr_polar_delete(void) {
+ pthread_mutex_lock(&PolarListMutex);
+ nr_polar_delete_list(PolarList);
+ PolarList=NULL;
+ pthread_mutex_unlock(&PolarListMutex);
+}
+
+t_nrPolar_params * nr_polar_params(int8_t messageType,
uint16_t messageLength,
uint8_t aggregation_level,
int decoder_flag) {
- t_nrPolar_params *currentPtr = *polarParams;
- uint16_t aggregation_prime = (messageType >= 2) ? aggregation_level : nr_polar_aggregation_prime(aggregation_level);
-
+ // The lock is weak, because we never delete in the list, only at exit time
+ // therefore, returning t_nrPolar_params * from the list is safe for future usage
+ pthread_mutex_lock(&PolarListMutex);
+ if(!PolarList)
+ atexit(nr_polar_delete);
+
+ t_nrPolar_params *currentPtr = PolarList;
//Parse the list. If the node is already created, return without initialization.
while (currentPtr != NULL) {
//printf("currentPtr->idx %d, (%d,%d)\n",currentPtr->idx,currentPtr->payloadBits,currentPtr->encoderLength);
//LOG_D(PHY,"Looking for index %d\n",(messageType * messageLength * aggregation_prime));
- if (currentPtr->idx == (messageType * messageLength * aggregation_prime)) return;
- else currentPtr = currentPtr->nextPtr;
+ if (currentPtr->busy == false && currentPtr->idx == PolarKey ) {
+ currentPtr->busy=true;
+ pthread_mutex_unlock(&PolarListMutex);
+ if (decoder_flag && !currentPtr->tree.root)
+ build_decoder_tree(currentPtr);
+ return currentPtr ;
+ }
+ else
+ currentPtr = currentPtr->nextPtr;
}
// printf("currentPtr %p (polarParams %p)\n",currentPtr,polarParams);
//Else, initialize and add node to the end of the linked list.
t_nrPolar_params *newPolarInitNode = calloc(sizeof(t_nrPolar_params),1);
-
- if (newPolarInitNode != NULL) {
- // LOG_D(PHY,"Setting new polarParams index %d, messageType %d, messageLength %d, aggregation_prime %d\n",(messageType * messageLength * aggregation_prime),messageType,messageLength,aggregation_prime);
- newPolarInitNode->idx = (messageType * messageLength * aggregation_prime);
- newPolarInitNode->nextPtr = NULL;
- //printf("newPolarInitNode->idx %d, (%d,%d,%d:%d)\n",newPolarInitNode->idx,messageType,messageLength,aggregation_prime,aggregation_level);
+ newPolarInitNode->busy=true;
+ pthread_mutex_unlock(&PolarListMutex);
- if (messageType == 0) { //PBCH
- newPolarInitNode->n_max = NR_POLAR_PBCH_N_MAX;
- newPolarInitNode->i_il = NR_POLAR_PBCH_I_IL;
- newPolarInitNode->i_seg = NR_POLAR_PBCH_I_SEG;
- newPolarInitNode->n_pc = NR_POLAR_PBCH_N_PC;
- newPolarInitNode->n_pc_wm = NR_POLAR_PBCH_N_PC_WM;
- newPolarInitNode->i_bil = NR_POLAR_PBCH_I_BIL;
- newPolarInitNode->crcParityBits = NR_POLAR_PBCH_CRC_PARITY_BITS;
- newPolarInitNode->payloadBits = NR_POLAR_PBCH_PAYLOAD_BITS;
- newPolarInitNode->encoderLength = NR_POLAR_PBCH_E;
- newPolarInitNode->crcCorrectionBits = NR_POLAR_PBCH_CRC_ERROR_CORRECTION_BITS;
- newPolarInitNode->crc_generator_matrix = crc24c_generator_matrix(newPolarInitNode->payloadBits);//G_P
- //printf("Initializing polar parameters for PBCH (K %d, E %d)\n",newPolarInitNode->payloadBits,newPolarInitNode->encoderLength);
- } else if (messageType == 1) { //DCI
- newPolarInitNode->n_max = NR_POLAR_DCI_N_MAX;
- newPolarInitNode->i_il = NR_POLAR_DCI_I_IL;
- newPolarInitNode->i_seg = NR_POLAR_DCI_I_SEG;
- newPolarInitNode->n_pc = NR_POLAR_DCI_N_PC;
- newPolarInitNode->n_pc_wm = NR_POLAR_DCI_N_PC_WM;
- newPolarInitNode->i_bil = NR_POLAR_DCI_I_BIL;
- newPolarInitNode->crcParityBits = NR_POLAR_DCI_CRC_PARITY_BITS;
- newPolarInitNode->payloadBits = messageLength;
- newPolarInitNode->encoderLength = aggregation_level*108;
- newPolarInitNode->crcCorrectionBits = NR_POLAR_DCI_CRC_ERROR_CORRECTION_BITS;
- newPolarInitNode->crc_generator_matrix=crc24c_generator_matrix(newPolarInitNode->payloadBits+newPolarInitNode->crcParityBits);//G_P
- //printf("Initializing polar parameters for DCI (K %d, E %d, L %d)\n",newPolarInitNode->payloadBits,newPolarInitNode->encoderLength,aggregation_level);
- } else if (messageType == 2) { //UCI PUCCH2
- AssertFatal(aggregation_level>2,"Aggregation level (%d) for PUCCH 2 encoding is NPRB and should be > 2\n",aggregation_level);
- AssertFatal(messageLength>11,"Message length %d is too short for polar encoding of UCI\n",messageLength);
- newPolarInitNode->n_max = NR_POLAR_PUCCH_N_MAX;
- newPolarInitNode->i_il = NR_POLAR_PUCCH_I_IL;
- newPolarInitNode->encoderLength = aggregation_level * 16;
+ AssertFatal(newPolarInitNode != NULL, "[nr_polar_init] New t_nrPolar_params * could not be created");
+
+ // LOG_D(PHY,"Setting new polarParams index %d, messageType %d, messageLength %d, aggregation_prime %d\n",(messageType * messageLength * aggregation_prime),messageType,messageLength,aggregation_prime);
+ newPolarInitNode->idx = PolarKey;
+ newPolarInitNode->nextPtr = NULL;
+ //printf("newPolarInitNode->idx %d, (%d,%d,%d:%d)\n",newPolarInitNode->idx,messageType,messageLength,aggregation_prime,aggregation_level);
+
+ if (messageType == 0) { //PBCH
+ newPolarInitNode->n_max = NR_POLAR_PBCH_N_MAX;
+ newPolarInitNode->i_il = NR_POLAR_PBCH_I_IL;
+ newPolarInitNode->i_seg = NR_POLAR_PBCH_I_SEG;
+ newPolarInitNode->n_pc = NR_POLAR_PBCH_N_PC;
+ newPolarInitNode->n_pc_wm = NR_POLAR_PBCH_N_PC_WM;
+ newPolarInitNode->i_bil = NR_POLAR_PBCH_I_BIL;
+ newPolarInitNode->crcParityBits = NR_POLAR_PBCH_CRC_PARITY_BITS;
+ newPolarInitNode->payloadBits = NR_POLAR_PBCH_PAYLOAD_BITS;
+ newPolarInitNode->encoderLength = NR_POLAR_PBCH_E;
+ newPolarInitNode->crcCorrectionBits = NR_POLAR_PBCH_CRC_ERROR_CORRECTION_BITS;
+ newPolarInitNode->crc_generator_matrix = crc24c_generator_matrix(newPolarInitNode->payloadBits);//G_P
+ //printf("Initializing polar parameters for PBCH (K %d, E %d)\n",newPolarInitNode->payloadBits,newPolarInitNode->encoderLength);
+ } else if (messageType == 1) { //DCI
+ newPolarInitNode->n_max = NR_POLAR_DCI_N_MAX;
+ newPolarInitNode->i_il = NR_POLAR_DCI_I_IL;
+ newPolarInitNode->i_seg = NR_POLAR_DCI_I_SEG;
+ newPolarInitNode->n_pc = NR_POLAR_DCI_N_PC;
+ newPolarInitNode->n_pc_wm = NR_POLAR_DCI_N_PC_WM;
+ newPolarInitNode->i_bil = NR_POLAR_DCI_I_BIL;
+ newPolarInitNode->crcParityBits = NR_POLAR_DCI_CRC_PARITY_BITS;
+ newPolarInitNode->payloadBits = messageLength;
+ newPolarInitNode->encoderLength = aggregation_level*108;
+ newPolarInitNode->crcCorrectionBits = NR_POLAR_DCI_CRC_ERROR_CORRECTION_BITS;
+ newPolarInitNode->crc_generator_matrix=crc24c_generator_matrix(newPolarInitNode->payloadBits+newPolarInitNode->crcParityBits);//G_P
+ //printf("Initializing polar parameters for DCI (K %d, E %d, L %d)\n",newPolarInitNode->payloadBits,newPolarInitNode->encoderLength,aggregation_level);
+ } else if (messageType == 2) { //UCI PUCCH2
+ AssertFatal(aggregation_level>2,"Aggregation level (%d) for PUCCH 2 encoding is NPRB and should be > 2\n",aggregation_level);
+ AssertFatal(messageLength>11,"Message length %d is too short for polar encoding of UCI\n",messageLength);
+ newPolarInitNode->n_max = NR_POLAR_PUCCH_N_MAX;
+ newPolarInitNode->i_il = NR_POLAR_PUCCH_I_IL;
+ newPolarInitNode->encoderLength = aggregation_level * 16;
- newPolarInitNode->i_seg = 0;
+ newPolarInitNode->i_seg = 0;
- if ((messageLength >= 360 && newPolarInitNode->encoderLength >= 1088)||
- (messageLength >= 1013)) newPolarInitNode->i_seg = 1;
+ if ((messageLength >= 360 && newPolarInitNode->encoderLength >= 1088)||
+ (messageLength >= 1013)) newPolarInitNode->i_seg = 1;
- newPolarInitNode->crcParityBits = 11;
- newPolarInitNode->n_pc = 0;
- newPolarInitNode->n_pc_wm = 0;
+ newPolarInitNode->crcParityBits = 11;
+ newPolarInitNode->n_pc = 0;
+ newPolarInitNode->n_pc_wm = 0;
- if (messageLength < 20) {
- newPolarInitNode->crcParityBits = 6;
- newPolarInitNode->n_pc = 3;
- if ((newPolarInitNode->encoderLength - messageLength - 6 + 3) < 193) newPolarInitNode->n_pc_wm = 1;
- }
-
-
-
- newPolarInitNode->i_bil = NR_POLAR_PUCCH_I_BIL;
-
- newPolarInitNode->payloadBits = messageLength;
- newPolarInitNode->crcCorrectionBits = NR_POLAR_PUCCH_CRC_ERROR_CORRECTION_BITS;
- //newPolarInitNode->crc_generator_matrix=crc24c_generator_matrix(newPolarInitNode->payloadBits+newPolarInitNode->crcParityBits);//G_P
- //LOG_D(PHY,"New polar node, encoderLength %d, aggregation_level %d\n",newPolarInitNode->encoderLength,aggregation_level);
- } else {
- AssertFatal(1 == 0, "[nr_polar_init] Incorrect Message Type(%d)", messageType);
+ if (messageLength < 20) {
+ newPolarInitNode->crcParityBits = 6;
+ newPolarInitNode->n_pc = 3;
+ if ((newPolarInitNode->encoderLength - messageLength - 6 + 3) < 193) newPolarInitNode->n_pc_wm = 1;
}
- newPolarInitNode->K = newPolarInitNode->payloadBits + newPolarInitNode->crcParityBits; // Number of bits to encode.
- newPolarInitNode->N = nr_polar_output_length(newPolarInitNode->K,
- newPolarInitNode->encoderLength,
- newPolarInitNode->n_max);
- newPolarInitNode->n = log2(newPolarInitNode->N);
- newPolarInitNode->G_N = nr_polar_kronecker_power_matrices(newPolarInitNode->n);
- //polar_encoder vectors:
- newPolarInitNode->nr_polar_crc = malloc(sizeof(uint8_t) * newPolarInitNode->crcParityBits);
- newPolarInitNode->nr_polar_aPrime = malloc(sizeof(uint8_t) * ((ceil((newPolarInitNode->payloadBits)/32.0)*4)+3));
- newPolarInitNode->nr_polar_APrime = malloc(sizeof(uint8_t) * newPolarInitNode->K);
- newPolarInitNode->nr_polar_D = malloc(sizeof(uint8_t) * newPolarInitNode->N);
- newPolarInitNode->nr_polar_E = malloc(sizeof(uint8_t) * newPolarInitNode->encoderLength);
- //Polar Coding vectors
- newPolarInitNode->nr_polar_U = malloc(sizeof(uint8_t) * newPolarInitNode->N); //Decoder: nr_polar_uHat
- newPolarInitNode->nr_polar_CPrime = malloc(sizeof(uint8_t) * newPolarInitNode->K); //Decoder: nr_polar_cHat
- newPolarInitNode->nr_polar_B = malloc(sizeof(uint8_t) * newPolarInitNode->K); //Decoder: nr_polar_bHat
- newPolarInitNode->nr_polar_A = malloc(sizeof(uint8_t) * newPolarInitNode->payloadBits); //Decoder: nr_polar_aHat
- newPolarInitNode->Q_0_Nminus1 = nr_polar_sequence_pattern(newPolarInitNode->n);
- newPolarInitNode->interleaving_pattern = malloc(sizeof(uint16_t) * newPolarInitNode->K);
- nr_polar_interleaving_pattern(newPolarInitNode->K,
- newPolarInitNode->i_il,
- newPolarInitNode->interleaving_pattern);
- newPolarInitNode->deinterleaving_pattern = malloc(sizeof(uint16_t) * newPolarInitNode->K);
- for (int i=0; iK; i++)
- newPolarInitNode->deinterleaving_pattern[newPolarInitNode->interleaving_pattern[i]] = i;
- newPolarInitNode->rate_matching_pattern = malloc(sizeof(uint16_t) * newPolarInitNode->encoderLength);
- uint16_t *J = malloc(sizeof(uint16_t) * newPolarInitNode->N);
- nr_polar_rate_matching_pattern(newPolarInitNode->rate_matching_pattern,
- J,
- nr_polar_subblock_interleaver_pattern,
- newPolarInitNode->K,
- newPolarInitNode->N,
- newPolarInitNode->encoderLength);
- newPolarInitNode->information_bit_pattern = malloc(sizeof(uint8_t) * newPolarInitNode->N);
- newPolarInitNode->Q_I_N = malloc(sizeof(int16_t) * (newPolarInitNode->K + newPolarInitNode->n_pc));
- newPolarInitNode->Q_F_N = malloc( sizeof(int16_t) * (newPolarInitNode->N + 1)); // Last element shows the final array index assigned a value.
- newPolarInitNode->Q_PC_N = malloc( sizeof(int16_t) * (newPolarInitNode->n_pc));
+ newPolarInitNode->i_bil = NR_POLAR_PUCCH_I_BIL;
- for (int i = 0; i <= newPolarInitNode->N; i++)
- newPolarInitNode->Q_F_N[i] = -1; // Empty array.
-
- nr_polar_info_bit_pattern(newPolarInitNode->information_bit_pattern,
- newPolarInitNode->Q_I_N,
- newPolarInitNode->Q_F_N,
- J,
- newPolarInitNode->Q_0_Nminus1,
- newPolarInitNode->K,
- newPolarInitNode->N,
- newPolarInitNode->encoderLength,
- newPolarInitNode->n_pc);
- // sort the Q_I_N array in ascending order (first K positions)
- qsort((void *)newPolarInitNode->Q_I_N,newPolarInitNode->K,sizeof(int16_t),intcmp);
- newPolarInitNode->channel_interleaver_pattern = malloc(sizeof(uint16_t) * newPolarInitNode->encoderLength);
- nr_polar_channel_interleaver_pattern(newPolarInitNode->channel_interleaver_pattern,
- newPolarInitNode->i_bil,
- newPolarInitNode->encoderLength);
- free(J);
- if (decoder_flag == 1) build_decoder_tree(newPolarInitNode);
- build_polar_tables(newPolarInitNode);
- init_polar_deinterleaver_table(newPolarInitNode);
- //printf("decoder tree nodes %d\n",newPolarInitNode->tree.num_nodes);
+ newPolarInitNode->payloadBits = messageLength;
+ newPolarInitNode->crcCorrectionBits = NR_POLAR_PUCCH_CRC_ERROR_CORRECTION_BITS;
+ //newPolarInitNode->crc_generator_matrix=crc24c_generator_matrix(newPolarInitNode->payloadBits+newPolarInitNode->crcParityBits);//G_P
+ //LOG_D(PHY,"New polar node, encoderLength %d, aggregation_level %d\n",newPolarInitNode->encoderLength,aggregation_level);
} else {
- AssertFatal(1 == 0, "[nr_polar_init] New t_nrPolar_params * could not be created");
+ AssertFatal(1 == 0, "[nr_polar_init] Incorrect Message Type(%d)", messageType);
}
- //Fixme: the list is not thread safe
- //The defect is not critical: we always append (never delete items) and adding two times the same is fine
- newPolarInitNode->nextPtr=*polarParams;
- *polarParams=newPolarInitNode;
- return;
+ newPolarInitNode->K = newPolarInitNode->payloadBits + newPolarInitNode->crcParityBits; // Number of bits to encode.
+ newPolarInitNode->N = nr_polar_output_length(newPolarInitNode->K,
+ newPolarInitNode->encoderLength,
+ newPolarInitNode->n_max);
+ newPolarInitNode->n = log2(newPolarInitNode->N);
+ newPolarInitNode->G_N = nr_polar_kronecker_power_matrices(newPolarInitNode->n);
+ //polar_encoder vectors:
+ newPolarInitNode->nr_polar_crc = malloc(sizeof(uint8_t) * newPolarInitNode->crcParityBits);
+ newPolarInitNode->nr_polar_aPrime = malloc(sizeof(uint8_t) * ((ceil((newPolarInitNode->payloadBits)/32.0)*4)+3));
+ newPolarInitNode->nr_polar_APrime = malloc(sizeof(uint8_t) * newPolarInitNode->K);
+ newPolarInitNode->nr_polar_D = malloc(sizeof(uint8_t) * newPolarInitNode->N);
+ newPolarInitNode->nr_polar_E = malloc(sizeof(uint8_t) * newPolarInitNode->encoderLength);
+ //Polar Coding vectors
+ newPolarInitNode->nr_polar_U = malloc(sizeof(uint8_t) * newPolarInitNode->N); //Decoder: nr_polar_uHat
+ newPolarInitNode->nr_polar_CPrime = malloc(sizeof(uint8_t) * newPolarInitNode->K); //Decoder: nr_polar_cHat
+ newPolarInitNode->nr_polar_B = malloc(sizeof(uint8_t) * newPolarInitNode->K); //Decoder: nr_polar_bHat
+ newPolarInitNode->nr_polar_A = malloc(sizeof(uint8_t) * newPolarInitNode->payloadBits); //Decoder: nr_polar_aHat
+ newPolarInitNode->Q_0_Nminus1 = nr_polar_sequence_pattern(newPolarInitNode->n);
+ newPolarInitNode->interleaving_pattern = malloc(sizeof(uint16_t) * newPolarInitNode->K);
+ nr_polar_interleaving_pattern(newPolarInitNode->K,
+ newPolarInitNode->i_il,
+ newPolarInitNode->interleaving_pattern);
+ newPolarInitNode->deinterleaving_pattern = malloc(sizeof(uint16_t) * newPolarInitNode->K);
+
+ for (int i=0; iK; i++)
+ newPolarInitNode->deinterleaving_pattern[newPolarInitNode->interleaving_pattern[i]] = i;
+
+ newPolarInitNode->rate_matching_pattern = malloc(sizeof(uint16_t) * newPolarInitNode->encoderLength);
+ uint16_t J[newPolarInitNode->N];
+ nr_polar_rate_matching_pattern(newPolarInitNode->rate_matching_pattern,
+ J,
+ nr_polar_subblock_interleaver_pattern,
+ newPolarInitNode->K,
+ newPolarInitNode->N,
+ newPolarInitNode->encoderLength);
+ newPolarInitNode->information_bit_pattern = malloc(sizeof(uint8_t) * newPolarInitNode->N);
+ newPolarInitNode->Q_I_N = malloc(sizeof(int16_t) * (newPolarInitNode->K + newPolarInitNode->n_pc));
+ newPolarInitNode->Q_F_N = malloc( sizeof(int16_t) * (newPolarInitNode->N + 1)); // Last element shows the final array index assigned a value.
+ newPolarInitNode->Q_PC_N = malloc( sizeof(int16_t) * (newPolarInitNode->n_pc));
+
+ for (int i = 0; i <= newPolarInitNode->N; i++)
+ newPolarInitNode->Q_F_N[i] = -1; // Empty array.
+
+ nr_polar_info_bit_pattern(newPolarInitNode->information_bit_pattern,
+ newPolarInitNode->Q_I_N,
+ newPolarInitNode->Q_F_N,
+ J,
+ newPolarInitNode->Q_0_Nminus1,
+ newPolarInitNode->K,
+ newPolarInitNode->N,
+ newPolarInitNode->encoderLength,
+ newPolarInitNode->n_pc);
+ // sort the Q_I_N array in ascending order (first K positions)
+ qsort((void *)newPolarInitNode->Q_I_N,newPolarInitNode->K,sizeof(int16_t),intcmp);
+ newPolarInitNode->channel_interleaver_pattern = malloc(sizeof(uint16_t) * newPolarInitNode->encoderLength);
+ nr_polar_channel_interleaver_pattern(newPolarInitNode->channel_interleaver_pattern,
+ newPolarInitNode->i_bil,
+ newPolarInitNode->encoderLength);
+ if (decoder_flag == 1)
+ build_decoder_tree(newPolarInitNode);
+ build_polar_tables(newPolarInitNode);
+ init_polar_deinterleaver_table(newPolarInitNode);
+ //printf("decoder tree nodes %d\n",newPolarInitNode->tree.num_nodes);
+
+ newPolarInitNode->nextPtr=PolarList;
+ PolarList=newPolarInitNode;
+ return newPolarInitNode;
}
-void nr_polar_print_polarParams(t_nrPolar_params *polarParams) {
+void nr_polar_print_polarParams() {
uint8_t i = 0;
- if (polarParams == NULL) {
+ if (PolarList == NULL) {
printf("polarParams is empty.\n");
} else {
+ t_nrPolar_params * polarParams=PolarList;
while (polarParams != NULL) {
- printf("polarParams[%d] = %d\n", i, polarParams->idx);
+ printf("polarParams[%d] = %d, %d, %d\n", i,
+ polarParams->idx>>24, (polarParams->idx>>8)&0xFFFF, polarParams->idx&0xFF);
polarParams = polarParams->nextPtr;
i++;
}
@@ -213,31 +271,6 @@ void nr_polar_print_polarParams(t_nrPolar_params *polarParams) {
return;
}
-t_nrPolar_params *nr_polar_params (int8_t messageType,
- uint16_t messageLength,
- uint8_t aggregation_level,
- int decoding_flag,
- t_nrPolar_params **polarList_ext) {
- static t_nrPolar_params *polarList = NULL;
- nr_polar_init(polarList_ext != NULL ? polarList_ext : &polarList,
- messageType,messageLength,aggregation_level,decoding_flag);
- t_nrPolar_params *polarParams=polarList_ext != NULL ? *polarList_ext : polarList;
- const int tag=messageType * messageLength * (messageType>=2 ? aggregation_level : nr_polar_aggregation_prime(aggregation_level));
-
-
-
- while (polarParams != NULL) {
- // LOG_D(PHY,"nr_polar_params : tag %d (from nr_polar_init %d)\n",tag,polarParams->idx);
- if (polarParams->idx == tag)
- return polarParams;
-
- polarParams = polarParams->nextPtr;
- }
-
- AssertFatal(false,"Polar Init tables internal failure, no polarParams found\n");
- return NULL;
-}
-
uint16_t nr_polar_aggregation_prime (uint8_t aggregation_level) {
if (aggregation_level == 0) return 0;
else if (aggregation_level == 1) return NR_POLAR_AGGREGATION_LEVEL_1_PRIME;
diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index 308a059d51..c92d926a8f 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -415,10 +415,8 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset
);
- LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_eNB][MOD %02"PRIu8"][]\n", eNB->Mod_id);
LOG_I (PHY, "[eNB %" PRIu8 "] Initializing DL_FRAME_PARMS : N_RB_DL %" PRIu8 ", PHICH Resource %d, PHICH Duration %d\n",
eNB->Mod_id, fp->N_RB_DL, fp->phich_config_common.phich_resource, fp->phich_config_common.phich_duration);
- LOG_D (PHY, "[MSC_NEW][FRAME 00000][PHY_eNB][MOD %02" PRIu8 "][]\n", eNB->Mod_id);
crcTableInit();
lte_gold (fp, eNB->lte_gold_table, fp->Nid_cell);
generate_pcfich_reg_mapping (fp);
diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index 3bf450703c..bf360d347a 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -104,7 +104,6 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
load_dftslib();
- LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_gNB][MOD %02"PRIu8"][]\n", gNB->Mod_id);
crcTableInit();
init_scrambling_luts();
init_pucch2_luts();
@@ -243,37 +242,9 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
common_vars->debugBuff = (int32_t*)malloc16_clear(fp->samples_per_frame*sizeof(int32_t)*100);
common_vars->debugBuff_sample_offset = 0;
-
- // Channel estimates for SRS
-/*
- for (UE_id=0; UE_idofdm_symbol_size );
- srs_vars[UE_id].srs_ch_estimates_time[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->ofdm_symbol_size*2 );
- }
- } //UE_id
-*/
- /*generate_ul_ref_sigs_rx();
-
- init_ulsch_power_LUT();*/
-
-/*
- // SRS
- for (UE_id=0; UE_idofdm_symbol_size*sizeof(int32_t));
- }
-*/
// PRACH
prach_vars->prachF = (int16_t *)malloc16_clear( 1024*2*sizeof(int16_t) );
prach_vars->rxsigF = (int16_t **)malloc16_clear(Prx*sizeof(int16_t*));
- /*
- for (i=0;irxsigF[i] = (int16_t *)malloc16_clear( 1024*2*sizeof(int16_t) );
- }
- */
prach_vars->prach_ifft = (int32_t *)malloc16_clear(1024*2*sizeof(int32_t));
init_prach_list(gNB);
@@ -329,51 +300,102 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
{
NR_DL_FRAME_PARMS* const fp = &gNB->frame_parms;
- NR_gNB_COMMON *const common_vars = &gNB->common_vars;
- NR_gNB_PUSCH **const pusch_vars = gNB->pusch_vars;
- /*LTE_eNB_SRS *const srs_vars = gNB->srs_vars;
- LTE_eNB_PRACH *const prach_vars = &gNB->prach_vars;*/
- uint32_t ***pdcch_dmrs = gNB->nr_gold_pdcch_dmrs;
- int Ptx=gNB->gNB_config.carrier_config.num_tx_ant.value;
+ const int Ptx = gNB->gNB_config.carrier_config.num_tx_ant.value;
+ const int Prx = gNB->gNB_config.carrier_config.num_rx_ant.value;
+ const int max_ul_mimo_layers = 4; // taken from phy_init_nr_gNB()
+ const int n_buf = Prx * max_ul_mimo_layers;
+ uint32_t ***pdcch_dmrs = gNB->nr_gold_pdcch_dmrs;
+ for (int slot = 0; slot < fp->slots_per_frame; slot++) {
+ for (int symb = 0; symb < fp->symbols_per_slot; symb++)
+ free_and_zero(pdcch_dmrs[slot][symb]);
+ free_and_zero(pdcch_dmrs[slot]);
+ }
+ free_and_zero(pdcch_dmrs);
+
+ uint32_t ****pdsch_dmrs = gNB->nr_gold_pdsch_dmrs;
+ for (int slot = 0; slot < fp->slots_per_frame; slot++) {
+ for (int symb = 0; symb < fp->symbols_per_slot; symb++) {
+ for (int q = 0; q < NR_MAX_NB_CODEWORDS; q++)
+ free_and_zero(pdsch_dmrs[slot][symb][q]);
+ free_and_zero(pdsch_dmrs[slot][symb]);
+ }
+ free_and_zero(pdsch_dmrs[slot]);
+ }
+ free_and_zero(gNB->nr_gold_pdsch_dmrs);
+
+ uint32_t ****pusch_dmrs = gNB->nr_gold_pusch_dmrs;
+ for(int nscid = 0; nscid < 2; nscid++) {
+ for (int slot = 0; slot < fp->slots_per_frame; slot++) {
+ for (int symb = 0; symb < fp->symbols_per_slot; symb++)
+ free_and_zero(pusch_dmrs[nscid][slot][symb]);
+ free_and_zero(pusch_dmrs[nscid][slot]);
+ }
+ free_and_zero(pusch_dmrs[nscid]);
+ }
+ free_and_zero(pusch_dmrs);
+
+ uint32_t ***csi_rs = gNB->nr_gold_csi_rs;
+ for (int slot = 0; slot < fp->slots_per_frame; slot++) {
+ for (int symb = 0; symb < fp->symbols_per_slot; symb++)
+ free_and_zero(csi_rs[slot][symb]);
+ free_and_zero(csi_rs[slot]);
+ }
+ free_and_zero(csi_rs);
+
+ for (int id = 0; id < NUMBER_OF_NR_SRS_MAX; id++) {
+ for (int i = 0; i < Prx; i++){
+ free_and_zero(gNB->nr_srs_info[id]->srs_received_signal[i]);
+ free_and_zero(gNB->nr_srs_info[id]->srs_ls_estimated_channel[i]);
+ free_and_zero(gNB->nr_srs_info[id]->srs_estimated_channel_freq[i]);
+ free_and_zero(gNB->nr_srs_info[id]->srs_estimated_channel_time[i]);
+ free_and_zero(gNB->nr_srs_info[id]->srs_estimated_channel_time_shifted[i]);
+ }
+ free_and_zero(gNB->nr_srs_info[id]->srs_generated_signal);
+ free_and_zero(gNB->nr_srs_info[id]->noise_power);
+ free_and_zero(gNB->nr_srs_info[id]->srs_received_signal);
+ free_and_zero(gNB->nr_srs_info[id]->srs_ls_estimated_channel);
+ free_and_zero(gNB->nr_srs_info[id]->srs_estimated_channel_freq);
+ free_and_zero(gNB->nr_srs_info[id]->srs_estimated_channel_time);
+ free_and_zero(gNB->nr_srs_info[id]->srs_estimated_channel_time_shifted);
+ free_and_zero(gNB->nr_srs_info[id]);
+ }
+
+ free_ul_reference_signal_sequences();
+ free_gnb_lowpapr_sequences();
+
+ reset_nr_transport(gNB);
+
+ NR_gNB_COMMON * common_vars = &gNB->common_vars;
for (int i = 0; i < Ptx; i++) {
free_and_zero(common_vars->txdataF[i]);
- /* rxdataF[i] is not allocated -> don't free */
+ free_and_zero(common_vars->beam_id[i]);
+ }
+
+ for (int i = 0; i < Prx; ++i) {
+ free_and_zero(common_vars->rxdataF[i]);
+ free_and_zero(common_vars->rxdata[i]);
}
free_and_zero(common_vars->txdataF);
+ free_and_zero(common_vars->rxdata);
free_and_zero(common_vars->rxdataF);
- // PDCCH DMRS sequences
- free_and_zero(pdcch_dmrs);
-/*
- // Channel estimates for SRS
- for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) {
- for (i=0; i<64; i++) {
- free_and_zero(srs_vars[UE_id].srs_ch_estimates[i]);
- free_and_zero(srs_vars[UE_id].srs_ch_estimates_time[i]);
- }
+ free_and_zero(common_vars->beam_id);
- free_and_zero(srs_vars[UE_id].srs_ch_estimates);
- free_and_zero(srs_vars[UE_id].srs_ch_estimates_time);
- } //UE_id
-
- //free_ul_ref_sigs();
-
- for (UE_id=0; UE_iddebugBuff);
+ NR_gNB_PRACH* prach_vars = &gNB->prach_vars;
free_and_zero(prach_vars->prachF);
+ free_and_zero(prach_vars->rxsigF);
+ free_and_zero(prach_vars->prach_ifft);
- for (i = 0; i < 64; i++) free_and_zero(prach_vars->prach_ifft[0][i]);
-
- free_and_zero(prach_vars->prach_ifft[0]);
- free_and_zero(prach_vars->rxsigF[0]);
-*/
+ NR_gNB_PUSCH** pusch_vars = gNB->pusch_vars;
for (int ULSCH_id=0; ULSCH_idnumber_of_nr_ulsch_max; ULSCH_id++) {
- for (int i = 0; i < fp->nb_antennas_rx; i++) {
+ for (int i = 0; i < Prx; i++) {
free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext[i]);
free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext2[i]);
}
- for (int i = 0; i < 4*fp->nb_antennas_rx; i++) {
+ for (int i = 0; i < n_buf; i++) {
free_and_zero(pusch_vars[ULSCH_id]->ul_ch_estimates[i]);
free_and_zero(pusch_vars[ULSCH_id]->ul_ch_estimates_ext[i]);
free_and_zero(pusch_vars[ULSCH_id]->ul_ch_estimates_time[i]);
@@ -393,8 +415,8 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
free_and_zero(pusch_vars[ULSCH_id]->ul_ch_estimates_ext);
free_and_zero(pusch_vars[ULSCH_id]->ul_ch_ptrs_estimates);
free_and_zero(pusch_vars[ULSCH_id]->ul_ch_ptrs_estimates_ext);
- free_and_zero(pusch_vars[ULSCH_id]->ul_ch_estimates_time);
free_and_zero(pusch_vars[ULSCH_id]->ptrs_phase_per_slot);
+ free_and_zero(pusch_vars[ULSCH_id]->ul_ch_estimates_time);
free_and_zero(pusch_vars[ULSCH_id]->ul_valid_re_per_slot);
free_and_zero(pusch_vars[ULSCH_id]->rxdataF_comp);
free_and_zero(pusch_vars[ULSCH_id]->ul_ch_mag0);
@@ -406,14 +428,6 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
free_and_zero(pusch_vars[ULSCH_id]->llr);
free_and_zero(pusch_vars[ULSCH_id]);
} //ULSCH_id
-/*
- for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) gNB->UE_stats_ptr[UE_id] = NULL;
-*/
-
-
- free_gnb_lowpapr_sequences();
-
-
}
//Adding nr_schedule_handler
@@ -554,6 +568,16 @@ void init_DLSCH_struct(PHY_VARS_gNB *gNB, processingData_L1tx_t *msg) {
}
}
+void reset_DLSCH_struct(const PHY_VARS_gNB *gNB, processingData_L1tx_t *msg)
+{
+ const NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
+ const nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
+ const uint16_t grid_size = cfg->carrier_config.dl_grid_size[fp->numerology_index].value;
+ for (int i=0; inumber_of_nr_dlsch_max; i++)
+ for (int j=0; j<2; j++)
+ free_gNB_dlsch(&msg->dlsch[i][j], grid_size);
+}
+
void init_nr_transport(PHY_VARS_gNB *gNB) {
NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
LOG_I(PHY, "Initialise nr transport\n");
@@ -578,7 +602,7 @@ void init_nr_transport(PHY_VARS_gNB *gNB) {
for (int j=0; j<2; j++) {
// ULSCH for data
- gNB->ulsch[i][j] = new_gNB_ulsch(MAX_LDPC_ITERATIONS, fp->N_RB_UL, 0);
+ gNB->ulsch[i][j] = new_gNB_ulsch(MAX_LDPC_ITERATIONS, fp->N_RB_UL);
if (!gNB->ulsch[i][j]) {
LOG_E(PHY,"Can't get gNB ulsch structures\n");
@@ -594,3 +618,18 @@ void init_nr_transport(PHY_VARS_gNB *gNB) {
//fp->pucch_config_common.deltaPUCCH_Shift = 1;
}
+
+void reset_nr_transport(PHY_VARS_gNB *gNB)
+{
+ const NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
+
+ for (int i = 0; i < NUMBER_OF_NR_PUCCH_MAX; i++)
+ free_gNB_pucch(gNB->pucch[i]);
+
+ for (int i = 0; i < NUMBER_OF_NR_SRS_MAX; i++)
+ free_gNB_srs(gNB->srs[i]);
+
+ for (int i=0; inumber_of_nr_ulsch_max; i++)
+ for (int j=0; j<2; j++)
+ free_gNB_ulsch(&gNB->ulsch[i][j], fp->N_RB_UL);
+}
diff --git a/openair1/PHY/INIT/nr_init_ru.c b/openair1/PHY/INIT/nr_init_ru.c
index 4024ed1617..07f1d3b9e3 100644
--- a/openair1/PHY/INIT/nr_init_ru.c
+++ b/openair1/PHY/INIT/nr_init_ru.c
@@ -124,32 +124,32 @@ int nr_phy_init_RU(RU_t *ru) {
ru->num_gNB,NUMBER_OF_gNB_MAX);
LOG_I(PHY,"[INIT] %s() ru->num_gNB:%d \n", __FUNCTION__, ru->num_gNB);
-
- if (ru->do_precoding == 1) {
+ if (ru->do_precoding == 1) {
int beam_count = 0;
if (ru->nb_tx>1) {//Enable beamforming when nb_tx > 1
+
for (p=0;pnb_log_antennas;p++) {
//if ((fp->L_ssb >> (63-p)) & 0x01)//64 bit-map with the MSB @2⁶³ corresponds to SSB ssb_index 0
beam_count++;
}
AssertFatal(ru->nb_bfw==(beam_count*ru->nb_tx),"Number of beam weights from config file is %d while the expected number is %d",ru->nb_bfw,(beam_count*ru->nb_tx));
- for (i=0; inum_gNB; i++) {
- int l_ind = 0;
- for (p=0;pnb_log_antennas;p++) {
+ for (i=0; inum_gNB; i++) {
+ int l_ind = 0;
+ for (p=0;pnb_log_antennas;p++) {
//if ((fp->L_ssb >> (63-p)) & 0x01) {
- ru->beam_weights[i][p] = (int32_t **)malloc16_clear(ru->nb_tx*sizeof(int32_t*));
- for (j=0; jnb_tx; j++) {
- ru->beam_weights[i][p][j] = (int32_t *)malloc16_clear(fp->ofdm_symbol_size*sizeof(int32_t));
- AssertFatal(ru->bw_list[i],"ru->bw_list[%d] is null\n",i);
- for (re=0; reofdm_symbol_size; re++)
- ru->beam_weights[i][p][j][re] = ru->bw_list[i][l_ind];
- //printf("Beam Weight %08x for beam %d and tx %d\n",ru->bw_list[i][l_ind],p,j);
- l_ind++;
- } // for j
+ ru->beam_weights[i][p] = (int32_t **)malloc16_clear(ru->nb_tx*sizeof(int32_t*));
+ for (j=0; jnb_tx; j++) {
+ ru->beam_weights[i][p][j] = (int32_t *)malloc16_clear(fp->ofdm_symbol_size*sizeof(int32_t));
+ AssertFatal(ru->bw_list[i],"ru->bw_list[%d] is null\n",i);
+ for (re=0; reofdm_symbol_size; re++)
+ ru->beam_weights[i][p][j][re] = ru->bw_list[i][l_ind];
+ //printf("Beam Weight %08x for beam %d and tx %d\n",ru->bw_list[i][l_ind],p,j);
+ l_ind++;
+ } // for j
//}
- } // for p
- } //for i
+ } // for p
+ } //for i
}
ru->common.beam_id = (uint8_t**)malloc16_clear(ru->nb_tx*sizeof(uint8_t*));
@@ -174,17 +174,13 @@ void nr_phy_free_RU(RU_t *ru)
LOG_I(PHY, "Feeing RU signal buffers (if_south %s) nb_tx %d\n", ru_if_types[ru->if_south], ru->nb_tx);
- free_and_zero(ru->nr_frame_parms);
- free_and_zero(ru->frame_parms);
-
if (ru->if_south <= REMOTE_IF5) { // this means REMOTE_IF5 or LOCAL_RF, so free memory for time-domain signals
- int32_t *ptr;
- for (i = 0; i < ru->nb_tx; i++) {
- ptr=&ru->common.txdata[i][-ru->sf_extension];
- free_and_zero(ptr);
- }
- for (i = 0; i < ru->nb_rx; i++) free_and_zero(ru->common.rxdata[i]);
+ for (i = 0; i < ru->nb_tx; i++)
+ free_and_zero(ru->common.txdata[i]);
free_and_zero(ru->common.txdata);
+
+ for (i = 0; i < ru->nb_rx; i++)
+ free_and_zero(ru->common.rxdata[i]);
free_and_zero(ru->common.rxdata);
} // else: IF5 or local RF -> nothing to free()
@@ -193,7 +189,7 @@ void nr_phy_free_RU(RU_t *ru)
free_and_zero(ru->common.rxdata_7_5kHz);
// free beamforming input buffers (TX)
- for (i = 0; i < 15; i++) free_and_zero(ru->common.txdataF[i]);
+ for (i = 0; i < ru->nb_tx; i++) free_and_zero(ru->common.txdataF[i]);
free_and_zero(ru->common.txdataF);
// free IFFT input buffers (TX)
@@ -205,15 +201,21 @@ void nr_phy_free_RU(RU_t *ru)
free_and_zero(ru->common.rxdataF);
for (j=0;jnb_rx; i++) {
+ for (i = 0; i < ru->nb_rx; i++)
free_and_zero(ru->prach_rxsigF[j][i]);
- }
+ free_and_zero(ru->prach_rxsigF[j]);
}
- for (i = 0; i < ru->num_gNB; i++) {
- for (p = 0; p < 15; p++) {
- for (j=0; jnb_tx; j++) free_and_zero(ru->beam_weights[i][p][j]);
- free_and_zero(ru->beam_weights[i][p]);
+
+ if (ru->do_precoding == 1) {
+ for (i = 0; i < ru->num_gNB; i++) {
+ for (p = 0; p < ru->nb_log_antennas; p++) {
+ for (j=0; jnb_tx; j++) free_and_zero(ru->beam_weights[i][p][j]);
+ free_and_zero(ru->beam_weights[i][p]);
+ }
}
+ for(i=0; i< ru->nb_tx; ++i)
+ free_and_zero(ru->common.beam_id[i]);
+ free_and_zero(ru->common.beam_id);
}
}
free_and_zero(ru->common.sync_corr);
diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c
index b571afe416..a27c541c80 100644
--- a/openair1/PHY/INIT/nr_init_ue.c
+++ b/openair1/PHY/INIT/nr_init_ue.c
@@ -111,6 +111,49 @@ void phy_init_nr_ue__PDSCH(NR_UE_PDSCH *const pdsch,
}
}
+void phy_term_nr_ue__PDSCH(NR_UE_PDSCH* pdsch, const NR_DL_FRAME_PARMS *const fp)
+{
+ for (int i = 0; i < fp->nb_antennas_rx; i++) {
+ for (int j = 0; j < NR_MAX_NB_LAYERS; j++) {
+ const int idx = j * fp->nb_antennas_rx + i;
+ for (int k = 0; k < NR_MAX_NB_LAYERS; k++)
+ free_and_zero(pdsch->rho[i][j*NR_MAX_NB_LAYERS+k]);
+ free_and_zero(pdsch->rxdataF_comp0[idx]);
+ free_and_zero(pdsch->dl_ch_estimates[idx]);
+ free_and_zero(pdsch->dl_ch_estimates_ext[idx]);
+ free_and_zero(pdsch->dl_bf_ch_estimates[idx]);
+ free_and_zero(pdsch->dl_bf_ch_estimates_ext[idx]);
+ free_and_zero(pdsch->dl_ch_mag0[idx]);
+ free_and_zero(pdsch->dl_ch_magb0[idx]);
+ free_and_zero(pdsch->dl_ch_magr0[idx]);
+ }
+ free_and_zero(pdsch->rxdataF_ext[i]);
+ free_and_zero(pdsch->rxdataF_uespec_pilots[i]);
+ free_and_zero(pdsch->ptrs_phase_per_slot[i]);
+ free_and_zero(pdsch->ptrs_re_per_slot[i]);
+ free_and_zero(pdsch->dl_ch_ptrs_estimates_ext[i]);
+ free_and_zero(pdsch->rho[i]);
+ }
+ free_and_zero(pdsch->pmi_ext);
+ free_and_zero(pdsch->llr[0]);
+ free_and_zero(pdsch->layer_llr[0]);
+ free_and_zero(pdsch->llr128);
+ free_and_zero(pdsch->rxdataF_ext);
+ free_and_zero(pdsch->rxdataF_uespec_pilots);
+ free_and_zero(pdsch->rxdataF_comp0);
+ free_and_zero(pdsch->rho);
+ free_and_zero(pdsch->dl_ch_estimates);
+ free_and_zero(pdsch->dl_ch_estimates_ext);
+ free_and_zero(pdsch->dl_bf_ch_estimates);
+ free_and_zero(pdsch->dl_bf_ch_estimates_ext);
+ free_and_zero(pdsch->dl_ch_mag0);
+ free_and_zero(pdsch->dl_ch_magb0);
+ free_and_zero(pdsch->dl_ch_magr0);
+ free_and_zero(pdsch->ptrs_phase_per_slot);
+ free_and_zero(pdsch->ptrs_re_per_slot);
+ free_and_zero(pdsch->dl_ch_ptrs_estimates_ext);
+}
+
void phy_init_nr_ue_PUSCH(NR_UE_PUSCH *const pusch,
const NR_DL_FRAME_PARMS *const fp) {
AssertFatal( pusch, "pusch==0" );
@@ -120,9 +163,14 @@ void phy_init_nr_ue_PUSCH(NR_UE_PUSCH *const pusch,
}
}
-int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
- int nb_connected_gNB,
- uint8_t abstraction_flag) {
+void phy_term_nr_ue_PUSCH(NR_UE_PUSCH *pusch)
+{
+ for (int i = 0; i < NR_MAX_NB_LAYERS; i++)
+ free_and_zero(pusch->txdataF_layers[i]);
+}
+
+int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
+{
// create shortcuts
NR_DL_FRAME_PARMS *const fp = &ue->frame_parms;
NR_UE_COMMON *const common_vars = &ue->common_vars;
@@ -134,11 +182,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
int gNB_id;
int th_id;
uint32_t ****pusch_dmrs;
- uint16_t N_n_scid[2] = {0,1}; // [HOTFIX] This is a temporary implementation of scramblingID0 and scramblingID1 which are given by DMRS-UplinkConfig
- int n_scid;
- abstraction_flag = 0;
- LOG_I(PHY, "Initializing UE vars (abstraction %u) for gNB TXant %u, UE RXant %u\n", abstraction_flag, fp->nb_antennas_tx, fp->nb_antennas_rx);
- //LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_UE][MOD %02u][]\n", ue->Mod_id+NB_gNB_INST);
+ LOG_I(PHY, "Initializing UE vars for gNB TXant %u, UE RXant %u\n", fp->nb_antennas_tx, fp->nb_antennas_rx);
phy_init_nr_top(ue);
// many memory allocation sizes are hard coded
AssertFatal( fp->nb_antennas_rx <= 4, "hard coded allocation for ue_common_vars->dl_ch_estimates[gNB_id]" );
@@ -192,7 +236,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
///////////
ue->nr_gold_pusch_dmrs = (uint32_t ****)malloc16(fp->slots_per_frame*sizeof(uint32_t ***));
pusch_dmrs = ue->nr_gold_pusch_dmrs;
- n_scid = 0; // This quantity is indicated by higher layer parameter dmrs-SeqInitialization
for (slot=0; slotslots_per_frame; slot++) {
pusch_dmrs[slot] = (uint32_t ***)malloc16(fp->symbols_per_slot*sizeof(uint32_t **));
@@ -209,7 +252,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
}
}
- nr_init_pusch_dmrs(ue, N_n_scid, n_scid);
///////////
////////////////////////////////////////////////////////////////////////////////////////////
@@ -231,29 +273,27 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
for (i=0; i<10; i++)
ue->tx_power_dBm[i]=-127;
- if (abstraction_flag == 0) {
- // init TX buffers
- common_vars->txdata = (int32_t **)malloc16( fp->nb_antennas_tx*sizeof(int32_t *) );
- common_vars->txdataF = (int32_t **)malloc16( fp->nb_antennas_tx*sizeof(int32_t *) );
+ // init TX buffers
+ common_vars->txdata = (int32_t **)malloc16( fp->nb_antennas_tx*sizeof(int32_t *) );
+ common_vars->txdataF = (int32_t **)malloc16( fp->nb_antennas_tx*sizeof(int32_t *) );
- for (i=0; inb_antennas_tx; i++) {
- common_vars->txdata[i] = (int32_t *)malloc16_clear( fp->samples_per_subframe*10*sizeof(int32_t) );
- common_vars->txdataF[i] = (int32_t *)malloc16_clear( fp->samples_per_slot_wCP*sizeof(int32_t) );
- }
+ for (i=0; inb_antennas_tx; i++) {
+ common_vars->txdata[i] = (int32_t *)malloc16_clear( fp->samples_per_subframe*10*sizeof(int32_t) );
+ common_vars->txdataF[i] = (int32_t *)malloc16_clear( fp->samples_per_slot_wCP*sizeof(int32_t) );
+ }
- // init RX buffers
- common_vars->rxdata = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) );
+ // init RX buffers
+ common_vars->rxdata = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) );
+
+ for (th_id=0; th_idcommon_vars_rx_data_per_thread[th_id].rxdataF = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) );
+ }
+
+ for (i=0; inb_antennas_rx; i++) {
+ common_vars->rxdata[i] = (int32_t *) malloc16_clear( (2*(fp->samples_per_frame)+2048)*sizeof(int32_t) );
for (th_id=0; th_idcommon_vars_rx_data_per_thread[th_id].rxdataF = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) );
- }
-
- for (i=0; inb_antennas_rx; i++) {
- common_vars->rxdata[i] = (int32_t *) malloc16_clear( (2*(fp->samples_per_frame)+2048)*sizeof(int32_t) );
-
- for (th_id=0; th_idcommon_vars_rx_data_per_thread[th_id].rxdataF[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*(fp->samples_per_slot_wCP) );
- }
+ common_vars->common_vars_rx_data_per_thread[th_id].rxdataF[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*(fp->samples_per_slot_wCP) );
}
}
@@ -272,9 +312,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
}
}
- ue->scramblingID_pdcch = fp->Nid_cell;
- nr_gold_pdcch(ue,fp->Nid_cell);
-
//PDSCH DMRS init (eNB offset = 0)
ue->nr_gold_pdsch[0] = (uint32_t ****)malloc16(fp->slots_per_frame*sizeof(uint32_t ***));
uint32_t ****pdsch_dmrs = ue->nr_gold_pdsch[0];
@@ -294,12 +331,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
}
}
- // initializing the scrambling IDs for PDSCH DMRS
- for (int i=0; i<2; i++)
- ue->scramblingID[i]=fp->Nid_cell;
-
- nr_gold_pdsch(ue,ue->scramblingID);
-
// DLSCH
for (gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) {
for (th_id=0; th_idnr_srs_info->srs_estimated_channel_time_shifted[i] = (int32_t *) malloc16_clear(fp->ofdm_symbol_size*MAX_NUM_NR_SRS_SYMBOLS*sizeof(int32_t));
}
- if (abstraction_flag == 0) {
- for (th_id=0; th_idpdsch_vars[th_id][gNB_id], fp );
+ for (th_id=0; th_idpdsch_vars[th_id][gNB_id], fp );
+ }
+
+ for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->llr_shifts = (uint8_t *)malloc16_clear(7*2*fp->N_RB_DL*12);
+ ue->pdsch_vars[th_id][gNB_id]->llr_shifts_p = ue->pdsch_vars[0][gNB_id]->llr_shifts;
+ ue->pdsch_vars[th_id][gNB_id]->llr[1] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );
+ ue->pdsch_vars[th_id][gNB_id]->layer_llr[1] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );
+ ue->pdsch_vars[th_id][gNB_id]->llr128_2ndstream = (int16_t **)malloc16_clear( sizeof(int16_t *) );
+ }
+
+
+ for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->dl_ch_rho2_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ }
+
+ for (i=0; inb_antennas_rx; i++)
+ for (j=0; j<4; j++) {
+ const int idx = (j*fp->nb_antennas_rx)+i;
+ const size_t num = 7*2*fp->N_RB_DL*12+4;
+
+ for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->dl_ch_rho2_ext[idx] = (int32_t *)malloc16_clear( sizeof(int32_t) * num );
+ }
}
- for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->llr_shifts = (uint8_t *)malloc16_clear(7*2*fp->N_RB_DL*12);
- ue->pdsch_vars[th_id][gNB_id]->llr_shifts_p = ue->pdsch_vars[0][gNB_id]->llr_shifts;
- ue->pdsch_vars[th_id][gNB_id]->llr[1] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );
- ue->pdsch_vars[th_id][gNB_id]->layer_llr[1] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );
- ue->pdsch_vars[th_id][gNB_id]->llr128_2ndstream = (int16_t **)malloc16_clear( sizeof(int16_t *) );
- }
-
-
- for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->dl_ch_rho2_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- }
-
- for (i=0; inb_antennas_rx; i++)
- for (j=0; j<4; j++) {
- const int idx = (j*fp->nb_antennas_rx)+i;
- const size_t num = 7*2*fp->N_RB_DL*12+4;
-
- for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->dl_ch_rho2_ext[idx] = (int32_t *)malloc16_clear( sizeof(int32_t) * num );
- }
+ //const size_t num = 7*2*fp->N_RB_DL*12+4;
+ for (k=0; k<8; k++) { //harq_pid
+ for (l=0; l<8; l++) { //round
+ for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->rxdataF_comp1[k][l] = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ ue->pdsch_vars[th_id][gNB_id]->dl_ch_rho_ext[k][l] = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ ue->pdsch_vars[th_id][gNB_id]->dl_ch_mag1[k][l] = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ ue->pdsch_vars[th_id][gNB_id]->dl_ch_magb1[k][l] = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
}
- //const size_t num = 7*2*fp->N_RB_DL*12+4;
- for (k=0; k<8; k++) { //harq_pid
- for (l=0; l<8; l++) { //round
- for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->rxdataF_comp1[k][l] = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- ue->pdsch_vars[th_id][gNB_id]->dl_ch_rho_ext[k][l] = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- ue->pdsch_vars[th_id][gNB_id]->dl_ch_mag1[k][l] = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- ue->pdsch_vars[th_id][gNB_id]->dl_ch_magb1[k][l] = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- }
+ for (int i=0; inb_antennas_rx; i++)
+ for (int j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++)
+ const int idx = (j*fp->nb_antennas_rx)+i;
- for (int i=0; inb_antennas_rx; i++)
- for (int j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++)
- const int idx = (j*fp->nb_antennas_rx)+i;
-
- for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->dl_ch_rho_ext[k][l][idx] = (int32_t *)malloc16_clear(7*2*sizeof(int32_t)*(fp->N_RB_DL*12));
- ue->pdsch_vars[th_id][gNB_id]->rxdataF_comp1[k][l][idx] = (int32_t *)malloc16_clear(7*2*sizeof(int32_t)*(fp->N_RB_DL*12));
- ue->pdsch_vars[th_id][gNB_id]->dl_ch_mag1[k][l][idx] = (int32_t *)malloc16_clear(7*2*sizeof(int32_t)*(fp->N_RB_DL*12));
- ue->pdsch_vars[th_id][gNB_id]->dl_ch_magb1[k][l][idx] = (int32_t *)malloc16_clear(7*2*sizeof(int32_t)*(fp->N_RB_DL*12));
- }
+ for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->dl_ch_rho_ext[k][l][idx] = (int32_t *)malloc16_clear(7*2*sizeof(int32_t)*(fp->N_RB_DL*12));
+ ue->pdsch_vars[th_id][gNB_id]->rxdataF_comp1[k][l][idx] = (int32_t *)malloc16_clear(7*2*sizeof(int32_t)*(fp->N_RB_DL*12));
+ ue->pdsch_vars[th_id][gNB_id]->dl_ch_mag1[k][l][idx] = (int32_t *)malloc16_clear(7*2*sizeof(int32_t)*(fp->N_RB_DL*12));
+ ue->pdsch_vars[th_id][gNB_id]->dl_ch_magb1[k][l][idx] = (int32_t *)malloc16_clear(7*2*sizeof(int32_t)*(fp->N_RB_DL*12));
}
- }
- }
-
- // 100 PRBs * 12 REs/PRB * 4 PDCCH SYMBOLS * 2 LLRs/RE
- for (th_id=0; th_idpdcch_vars[th_id][gNB_id]->llr = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
- ue->pdcch_vars[th_id][gNB_id]->llr16 = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
- ue->pdcch_vars[th_id][gNB_id]->wbar = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
- ue->pdcch_vars[th_id][gNB_id]->e_rx = (int16_t *)malloc16_clear( 4*2*100*12 );
- ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- ue->pdcch_vars[th_id][gNB_id]->rho = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) );
- ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- // Channel estimates
- ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates = (int32_t **)malloc16_clear(4*fp->nb_antennas_rx*sizeof(int32_t *));
- ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time = (int32_t **)malloc16_clear(4*fp->nb_antennas_rx*sizeof(int32_t *));
-
- for (i=0; inb_antennas_rx; i++) {
- ue->pdcch_vars[th_id][gNB_id]->rho[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*(100*12*4));
-
- for (j=0; j<4; j++) {
- int idx = (j*fp->nb_antennas_rx)+i;
- ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->symbols_per_slot*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) );
- ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->ofdm_symbol_size*2 );
- // size_t num = 7*2*fp->N_RB_DL*12;
- size_t num = 4*273*12; // 4 symbols, 100 PRBs, 12 REs per PRB
- ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num);
- ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num);
- ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num);
- ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num);
}
- }
}
+ }
- // PBCH
- pbch_vars[gNB_id]->rxdataF_ext = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) );
- pbch_vars[gNB_id]->rxdataF_comp = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- pbch_vars[gNB_id]->dl_ch_estimates = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- pbch_vars[gNB_id]->dl_ch_estimates_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- pbch_vars[gNB_id]->dl_ch_estimates_time = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
- pbch_vars[gNB_id]->llr = (int16_t *)malloc16_clear( 1920 ); //
- prach_vars[gNB_id]->prachF = (int16_t *)malloc16_clear( sizeof(int)*(7*2*sizeof(int)*(fp->ofdm_symbol_size*12)) );
- prach_vars[gNB_id]->prach = (int16_t *)malloc16_clear( sizeof(int)*(7*2*sizeof(int)*(fp->ofdm_symbol_size*12)) );
+ // 100 PRBs * 12 REs/PRB * 4 PDCCH SYMBOLS * 2 LLRs/RE
+ for (th_id=0; th_idpdcch_vars[th_id][gNB_id]->llr = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+ ue->pdcch_vars[th_id][gNB_id]->llr16 = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+ ue->pdcch_vars[th_id][gNB_id]->wbar = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+ ue->pdcch_vars[th_id][gNB_id]->e_rx = (int16_t *)malloc16_clear( 4*2*100*12 );
+ ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ ue->pdcch_vars[th_id][gNB_id]->rho = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) );
+ ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ // Channel estimates
+ ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates = (int32_t **)malloc16_clear(4*fp->nb_antennas_rx*sizeof(int32_t *));
+ ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time = (int32_t **)malloc16_clear(4*fp->nb_antennas_rx*sizeof(int32_t *));
for (i=0; inb_antennas_rx; i++) {
- pbch_vars[gNB_id]->rxdataF_ext[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*20*12*4 );
+ ue->pdcch_vars[th_id][gNB_id]->rho[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*(100*12*4));
- for (j=0; j<4; j++) {//fp->nb_antennas_tx;j++) {
+ for (j=0; j<4; j++) {
int idx = (j*fp->nb_antennas_rx)+i;
- pbch_vars[gNB_id]->rxdataF_comp[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*20*12*4 );
- pbch_vars[gNB_id]->dl_ch_estimates[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*7*2*sizeof(int)*(fp->ofdm_symbol_size) );
- pbch_vars[gNB_id]->dl_ch_estimates_time[idx]= (int32_t *)malloc16_clear( sizeof(int32_t)*7*2*sizeof(int)*(fp->ofdm_symbol_size) );
- pbch_vars[gNB_id]->dl_ch_estimates_ext[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*20*12*4 );
+ ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->symbols_per_slot*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) );
+ ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->ofdm_symbol_size*2 );
+ // size_t num = 7*2*fp->N_RB_DL*12;
+ size_t num = 4*273*12; // 4 symbols, 100 PRBs, 12 REs per PRB
+ ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num);
+ ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num);
+ ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num);
+ ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num);
}
}
}
+ // PBCH
+ pbch_vars[gNB_id]->rxdataF_ext = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) );
+ pbch_vars[gNB_id]->rxdataF_comp = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ pbch_vars[gNB_id]->dl_ch_estimates = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ pbch_vars[gNB_id]->dl_ch_estimates_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ pbch_vars[gNB_id]->dl_ch_estimates_time = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) );
+ pbch_vars[gNB_id]->llr = (int16_t *)malloc16_clear( 1920 ); //
+ prach_vars[gNB_id]->prachF = (int16_t *)malloc16_clear( sizeof(int)*(7*2*sizeof(int)*(fp->ofdm_symbol_size*12)) );
+ prach_vars[gNB_id]->prach = (int16_t *)malloc16_clear( sizeof(int)*(7*2*sizeof(int)*(fp->ofdm_symbol_size*12)) );
+
+ for (i=0; inb_antennas_rx; i++) {
+ pbch_vars[gNB_id]->rxdataF_ext[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*20*12*4 );
+
+ for (j=0; j<4; j++) {//fp->nb_antennas_tx;j++) {
+ int idx = (j*fp->nb_antennas_rx)+i;
+ pbch_vars[gNB_id]->rxdataF_comp[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*20*12*4 );
+ pbch_vars[gNB_id]->dl_ch_estimates[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*7*2*sizeof(int)*(fp->ofdm_symbol_size) );
+ pbch_vars[gNB_id]->dl_ch_estimates_time[idx]= (int32_t *)malloc16_clear( sizeof(int32_t)*7*2*sizeof(int)*(fp->ofdm_symbol_size) );
+ pbch_vars[gNB_id]->dl_ch_estimates_ext[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*20*12*4 );
+ }
+ }
+
pbch_vars[gNB_id]->decoded_output = (uint8_t *)malloc16_clear(64);
}
// initialization for the last instance of pdsch_vars (used for MU-MIMO)
for (th_id=0; th_idpdsch_vars[th_id][gNB_id] = (NR_UE_PDSCH *)malloc16_clear(sizeof(NR_UE_PDSCH));
- }
-
- if (abstraction_flag == 0) {
- for (th_id=0; th_idpdsch_vars[th_id][gNB_id], fp );
- ue->pdsch_vars[th_id][gNB_id]->llr[1] = (int16_t *)malloc16_clear((8*(3*8*8448))*sizeof(int16_t));
- ue->pdsch_vars[th_id][gNB_id]->layer_llr[1] = (int16_t *)malloc16_clear((8*(3*8*8448))*sizeof(int16_t));
- }
- } else { //abstraction == 1
- ue->sinr_dB = (double *) malloc16_clear( fp->N_RB_DL*12*sizeof(double) );
+ ue->pdsch_vars[th_id][gNB_id] = malloc16_clear(sizeof(NR_UE_PDSCH));
+ ue->pdsch_vars[th_id][gNB_id]->llr[1] = malloc16_clear((8*(3*8*8448))*sizeof(int16_t));
+ ue->pdsch_vars[th_id][gNB_id]->layer_llr[1] = malloc16_clear((8*(3*8*8448))*sizeof(int16_t));
}
ue->sinr_CQI_dB = (double *) malloc16_clear( fp->N_RB_DL*12*sizeof(double) );
@@ -474,25 +495,224 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
return 0;
}
-void init_nr_ue_transport(PHY_VARS_NR_UE *ue,
- int abstraction_flag) {
+void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
+{
+ const NR_DL_FRAME_PARMS* fp = &ue->frame_parms;
+ phy_term_nr_top();
+
+ for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) {
+ for (int gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) {
+ phy_term_nr_ue_PUSCH(ue->pusch_vars[th_id][gNB_id]);
+ free_and_zero(ue->pusch_vars[th_id][gNB_id]);
+ free_and_zero(ue->pucch_vars[th_id][gNB_id]);
+ }
+ }
+
+ for (int slot = 0; slot < fp->slots_per_frame; slot++) {
+ for (int symb = 0; symb < fp->symbols_per_slot; symb++) {
+ for (int q = 0; q < NR_MAX_NB_CODEWORDS; q++)
+ free_and_zero(ue->nr_gold_pusch_dmrs[slot][symb][q]);
+ free_and_zero(ue->nr_gold_pusch_dmrs[slot][symb]);
+ }
+ free_and_zero(ue->nr_gold_pusch_dmrs[slot]);
+ }
+ free_and_zero(ue->nr_gold_pusch_dmrs);
+
+ NR_UE_COMMON* common_vars = &ue->common_vars;
+
+ for (int i = 0; i < fp->nb_antennas_tx; i++) {
+ free_and_zero(common_vars->txdata[i]);
+ free_and_zero(common_vars->txdataF[i]);
+ }
+
+ free_and_zero(common_vars->txdata);
+ free_and_zero(common_vars->txdataF);
+
+ for (int i = 0; i < fp->nb_antennas_rx; i++) {
+ free_and_zero(common_vars->rxdata[i]);
+ for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++)
+ free_and_zero(common_vars->common_vars_rx_data_per_thread[th_id].rxdataF[i]);
+ }
+ for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) {
+ free_and_zero(common_vars->common_vars_rx_data_per_thread[th_id].rxdataF);
+ }
+ free_and_zero(common_vars->rxdata);
+
+ for (int slot = 0; slot < fp->slots_per_frame; slot++) {
+ for (int symb = 0; symb < fp->symbols_per_slot; symb++)
+ free_and_zero(ue->nr_gold_pdcch[0][slot][symb]);
+ free_and_zero(ue->nr_gold_pdcch[0][slot]);
+ }
+ free_and_zero(ue->nr_gold_pdcch[0]);
+
+ for (int slot=0; slotslots_per_frame; slot++) {
+ for (int symb=0; symbsymbols_per_slot; symb++) {
+ for (int q=0; qnr_gold_pdsch[0][slot][symb][q]);
+ free_and_zero(ue->nr_gold_pdsch[0][slot][symb]);
+ }
+ free_and_zero(ue->nr_gold_pdsch[0][slot]);
+ }
+ free_and_zero(ue->nr_gold_pdsch[0]);
+
+ for (int gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) {
+
+ // PDSCH
+ for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) {
+ for (int k = 0; k < 8; k++) { //harq_pid
+ for (int l = 0; l < 8; l++) { //round
+ for (int i = 0; i < fp->nb_antennas_rx; i++) {
+ for (int j = 0; j < 4; j++) { //frame_parms->nb_antennas_tx; j++)
+ const int idx = j * fp->nb_antennas_rx + i;
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->dl_ch_rho_ext[k][l][idx]);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->rxdataF_comp1[k][l][idx]);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->dl_ch_mag1[k][l][idx]);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->dl_ch_magb1[k][l][idx]);
+ }
+ }
+
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->rxdataF_comp1[k][l]);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->dl_ch_rho_ext[k][l]);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->dl_ch_mag1[k][l]);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->dl_ch_magb1[k][l]);
+ }
+ }
+
+ for (int i = 0; i < fp->nb_antennas_rx; i++) {
+ for (int j = 0; j < 4; j++) {
+ const int idx = (j*fp->nb_antennas_rx)+i;
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->dl_ch_rho2_ext[idx]);
+ }
+ }
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->llr_shifts);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->llr[1]);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->layer_llr[1]);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->llr128_2ndstream);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->dl_ch_rho2_ext);
+
+ phy_term_nr_ue__PDSCH(ue->pdsch_vars[th_id][gNB_id], fp);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]);
+ }
+
+ for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) {
+ for (int i = 0; i < fp->nb_antennas_rx; i++) {
+ for (int j = 0; j < 4; j++) {
+ int idx = j * fp->nb_antennas_rx + i;
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates[idx]);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time[idx]);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp[idx]);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext[idx]);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext[idx]);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext[idx]);
+ }
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rho[i]);
+ }
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->llr);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->llr16);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->wbar);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->e_rx);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rho);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates);
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time);
+
+ free_and_zero(ue->pdcch_vars[th_id][gNB_id]);
+ }
+
+ for (int i = 0; i < fp->nb_antennas_rx; i++) {
+ free_and_zero(ue->nr_srs_info->srs_received_signal[i]);
+ free_and_zero(ue->nr_srs_info->srs_ls_estimated_channel[i]);
+ free_and_zero(ue->nr_srs_info->srs_estimated_channel_freq[i]);
+ free_and_zero(ue->nr_srs_info->srs_estimated_channel_time[i]);
+ free_and_zero(ue->nr_srs_info->srs_estimated_channel_time_shifted[i]);
+ }
+ free_and_zero(ue->nr_srs_info->srs_generated_signal);
+ free_and_zero(ue->nr_srs_info->noise_power);
+ free_and_zero(ue->nr_srs_info->srs_received_signal);
+ free_and_zero(ue->nr_srs_info->srs_ls_estimated_channel);
+ free_and_zero(ue->nr_srs_info->srs_estimated_channel_freq);
+ free_and_zero(ue->nr_srs_info->srs_estimated_channel_time);
+ free_and_zero(ue->nr_srs_info->srs_estimated_channel_time_shifted);
+ free_and_zero(ue->nr_srs_info);
+
+ free_and_zero(ue->srs_vars[gNB_id]);
+
+ for (int i = 0; i < fp->nb_antennas_rx; i++) {
+ free_and_zero(ue->pbch_vars[gNB_id]->rxdataF_ext[i]);
+
+ for (int j = 0; j < 4; j++) {
+ int idx = (j*fp->nb_antennas_rx)+i;
+ free_and_zero(ue->pbch_vars[gNB_id]->rxdataF_comp[idx]);
+ free_and_zero(ue->pbch_vars[gNB_id]->dl_ch_estimates[idx]);
+ free_and_zero(ue->pbch_vars[gNB_id]->dl_ch_estimates_time[idx]);
+ free_and_zero(ue->pbch_vars[gNB_id]->dl_ch_estimates_ext[idx]);
+ }
+ }
+
+ free_and_zero(ue->pbch_vars[gNB_id]->rxdataF_ext);
+ free_and_zero(ue->pbch_vars[gNB_id]->rxdataF_comp);
+ free_and_zero(ue->pbch_vars[gNB_id]->dl_ch_estimates);
+ free_and_zero(ue->pbch_vars[gNB_id]->dl_ch_estimates_ext);
+ free_and_zero(ue->pbch_vars[gNB_id]->dl_ch_estimates_time);
+ free_and_zero(ue->pbch_vars[gNB_id]->llr);
+ free_and_zero(ue->pbch_vars[gNB_id]->decoded_output);
+ free_and_zero(ue->pbch_vars[gNB_id]);
+
+ free_and_zero(ue->prach_vars[gNB_id]->prachF);
+ free_and_zero(ue->prach_vars[gNB_id]->prach);
+ free_and_zero(ue->prach_vars[gNB_id]);
+ }
+
+ const int gNB_id = ue->n_connected_gNB;
+ for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) {
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->llr[1]);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]->layer_llr[1]);
+ free_and_zero(ue->pdsch_vars[th_id][gNB_id]);
+ }
+
+ free_and_zero(ue->sinr_CQI_dB);
+}
+
+void term_nr_ue_transport(PHY_VARS_NR_UE *ue)
+{
+ const int N_RB_DL = ue->frame_parms.N_RB_DL;
+ for (int i = 0; i < NUMBER_OF_CONNECTED_gNB_MAX; i++) {
+ for (int j = 0; j < 2; j++) {
+ for (int k = 0; k < RX_NB_TH_MAX; k++) {
+ free_nr_ue_dlsch(&ue->dlsch[k][i][j], N_RB_DL);
+ free_nr_ue_ulsch(&ue->ulsch[k][i][j], N_RB_DL);
+ }
+ }
+
+ free_nr_ue_dlsch(&ue->dlsch_SI[i], N_RB_DL);
+ free_nr_ue_dlsch(&ue->dlsch_ra[i], N_RB_DL);
+ }
+
+ free_nr_ue_dlsch(&ue->dlsch_MCH[0], N_RB_DL);
+}
+
+void init_nr_ue_transport(PHY_VARS_NR_UE *ue)
+{
for (int i = 0; i < NUMBER_OF_CONNECTED_gNB_MAX; i++) {
for (int j=0; j<2; j++) {
for (int k=0; kdlsch[k][i][j] = new_nr_ue_dlsch(1,NR_MAX_DLSCH_HARQ_PROCESSES,NSOFT,MAX_LDPC_ITERATIONS,ue->frame_parms.N_RB_DL, abstraction_flag))!=NULL,"Can't get ue dlsch structures\n");
+ AssertFatal((ue->dlsch[k][i][j] = new_nr_ue_dlsch(1,NR_MAX_DLSCH_HARQ_PROCESSES,NSOFT,MAX_LDPC_ITERATIONS,ue->frame_parms.N_RB_DL))!=NULL,"Can't get ue dlsch structures\n");
LOG_D(PHY,"dlsch[%d][%d][%d] => %p\n",k,i,j,ue->dlsch[k][i][j]);
- AssertFatal((ue->ulsch[k][i][j] = new_nr_ue_ulsch(ue->frame_parms.N_RB_UL, NR_MAX_ULSCH_HARQ_PROCESSES, abstraction_flag))!=NULL,"Can't get ue ulsch structures\n");
+ AssertFatal((ue->ulsch[k][i][j] = new_nr_ue_ulsch(ue->frame_parms.N_RB_UL, NR_MAX_ULSCH_HARQ_PROCESSES))!=NULL,"Can't get ue ulsch structures\n");
LOG_D(PHY,"ulsch[%d][%d][%d] => %p\n",k,i,j,ue->ulsch[k][i][j]);
}
}
- ue->dlsch_SI[i] = new_nr_ue_dlsch(1,1,NSOFT,MAX_LDPC_ITERATIONS,ue->frame_parms.N_RB_DL, abstraction_flag);
- ue->dlsch_ra[i] = new_nr_ue_dlsch(1,1,NSOFT,MAX_LDPC_ITERATIONS,ue->frame_parms.N_RB_DL, abstraction_flag);
+ ue->dlsch_SI[i] = new_nr_ue_dlsch(1,1,NSOFT,MAX_LDPC_ITERATIONS,ue->frame_parms.N_RB_DL);
+ ue->dlsch_ra[i] = new_nr_ue_dlsch(1,1,NSOFT,MAX_LDPC_ITERATIONS,ue->frame_parms.N_RB_DL);
ue->transmission_mode[i] = ue->frame_parms.nb_antenna_ports_gNB==1 ? 1 : 2;
}
//ue->frame_parms.pucch_config_common.deltaPUCCH_Shift = 1;
- ue->dlsch_MCH[0] = new_nr_ue_dlsch(1,NR_MAX_DLSCH_HARQ_PROCESSES,NSOFT,MAX_LDPC_ITERATIONS_MBSFN,ue->frame_parms.N_RB_DL,0);
+ ue->dlsch_MCH[0] = new_nr_ue_dlsch(1,NR_MAX_DLSCH_HARQ_PROCESSES,NSOFT,MAX_LDPC_ITERATIONS_MBSFN,ue->frame_parms.N_RB_DL);
for(int i=0; i<5; i++)
ue->dl_stats[i] = 0;
@@ -556,3 +776,9 @@ void phy_init_nr_top(PHY_VARS_NR_UE *ue) {
//init_unscrambling_lut();
//set_taus_seed(1328);
}
+
+void phy_term_nr_top(void)
+{
+ free_ul_reference_signal_sequences();
+ free_context_synchro_nr();
+}
diff --git a/openair1/PHY/INIT/phy_init.h b/openair1/PHY/INIT/phy_init.h
index dd9232de83..8648dd7d82 100644
--- a/openair1/PHY/INIT/phy_init.h
+++ b/openair1/PHY/INIT/phy_init.h
@@ -57,6 +57,7 @@ int l1_north_init_eNB(void);
int phy_init_top(LTE_DL_FRAME_PARMS *frame_parms);
void phy_init_nr_top(PHY_VARS_NR_UE *ue);
+void phy_term_nr_top(void);
/*!
@@ -395,8 +396,9 @@ int nr_get_ssb_start_symbol(NR_DL_FRAME_PARMS *fp,uint8_t i_ssb);
int nr_init_frame_parms(nfapi_nr_config_request_scf_t *config, NR_DL_FRAME_PARMS *frame_parms);
int nr_init_frame_parms_ue(NR_DL_FRAME_PARMS *frame_parms, fapi_nr_config_request_t *config, uint16_t nr_band);
void nr_init_frame_parms_ue_sa(NR_DL_FRAME_PARMS *frame_parms, uint64_t downlink_frequency, int32_t uplink_frequency_offset, uint8_t mu, uint16_t nr_band);
-int init_nr_ue_signal(PHY_VARS_NR_UE *ue,int nb_connected_eNB,uint8_t abstraction_flag);
-void init_nr_ue_transport(PHY_VARS_NR_UE *ue,int abstraction_flag);
+int init_nr_ue_signal(PHY_VARS_NR_UE *ue,int nb_connected_eNB);
+void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB);
+void init_nr_ue_transport(PHY_VARS_NR_UE *ue);
void init_N_TA_offset(PHY_VARS_NR_UE *ue);
void nr_dump_frame_parms(NR_DL_FRAME_PARMS *frame_parms);
int phy_init_nr_gNB(PHY_VARS_gNB *gNB, unsigned char is_secondary_gNB, unsigned char lowmem_flag);
@@ -405,11 +407,13 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,int N_RB_DL,int N_RB_UL,int mu,
void phy_free_nr_gNB(PHY_VARS_gNB *gNB);
int l1_north_init_gNB(void);
void init_nr_transport(PHY_VARS_gNB *gNB);
+void reset_nr_transport(PHY_VARS_gNB *gNB);
void init_dfts(void);
void fill_subframe_mask(PHY_VARS_eNB *eNB);
void init_DLSCH_struct(PHY_VARS_gNB *gNB, processingData_L1tx_t *msg);
+void reset_DLSCH_struct(const PHY_VARS_gNB *gNB, processingData_L1tx_t *msg);
/** @} */
#endif
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
index a7054a44d2..0b665737a7 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
@@ -6481,7 +6481,7 @@ void dump_dlsch2(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t subframe,unsigned int *c
sprintf(fname,"dlsch%d_rxF_r%d_uespec0.m",eNB_id,round);
sprintf(vname,"dl%d_rxF_r%d_uespec0",eNB_id,round);
LOG_M(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_uespec_pilots[0],
- 12*(ue->frame_parms.N_RB_DL)*NSYMB,1,1);
+ 12*(ue->frame_parms.N_RB_DL),1,1);
/*
LOG_M("dlsch%d_ch_ext01.m","dl01_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*NSYMB,1,1);
LOG_M("dlsch%d_ch_ext10.m","dl10_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*NSYMB,1,1);
diff --git a/openair1/PHY/NR_REFSIG/ul_ref_seq_nr.c b/openair1/PHY/NR_REFSIG/ul_ref_seq_nr.c
index 4a419ae926..c3c4c7a2ee 100644
--- a/openair1/PHY/NR_REFSIG/ul_ref_seq_nr.c
+++ b/openair1/PHY/NR_REFSIG/ul_ref_seq_nr.c
@@ -122,23 +122,20 @@ int16_t *base_sequence_less_than_36(unsigned int M_ZC,
*********************************************************************/
int16_t get_index_for_dmrs_lowpapr_seq(int16_t num_dmrs_res) {
-
- int16_t index = -1;
-
- if (num_dmrs_res >= dmrs_ul_allocated_res[(MAX_INDEX_DMRS_UL_ALLOCATED_REs-1)])
+
+ int16_t index = num_dmrs_res/6 - 1;
+
+ if (index >= MAX_INDEX_DMRS_UL_ALLOCATED_REs)
index = MAX_INDEX_DMRS_UL_ALLOCATED_REs-1;
- else
- index = (num_dmrs_res/6) -1;
for (;index >= 0; index--) {
if (dmrs_ul_allocated_res[index] == num_dmrs_res)
break;
-
}
- LOG_D(PHY, "num_dmrs_res: %d INDEX RETURNED: %d", num_dmrs_res, index);
- return index;
+ LOG_D(PHY, "num_dmrs_res: %d INDEX RETURNED: %d", num_dmrs_res, index);
+ return index;
}
/*******************************************************************
@@ -204,6 +201,11 @@ int16_t *base_sequence_36_or_larger(unsigned int Msc_RS,
void generate_lowpapr_typ1_refsig_sequences(unsigned int scaling)
{
+ /* prevent multiple calls, relevant when both UE & gNB initialize this */
+ static bool already_called = false;
+ if (already_called) return;
+ already_called = true;
+
unsigned int u,Msc_RS;
unsigned int v = 0; // sequence hopping and group hopping are not supported yet
@@ -223,6 +225,11 @@ void generate_lowpapr_typ1_refsig_sequences(unsigned int scaling)
void generate_ul_reference_signal_sequences(unsigned int scaling)
{
+ /* prevent multiple calls, relevant when both UE & gNB initialize this */
+ static bool already_called = false;
+ if (already_called) return;
+ already_called = true;
+
unsigned int u,v,Msc_RS;
#if 0
@@ -295,10 +302,10 @@ void free_ul_reference_signal_sequences(void)
for (u=0; u < U_GROUP_NUMBER; u++) {
for (v=0; v < V_BASE_SEQUENCE_NUMBER; v++) {
if (rv_ul_ref_sig[u][v][Msc_RS])
- free16(rv_ul_ref_sig[u][v][Msc_RS],2*sizeof(int16_t)*ul_allocated_re[Msc_RS]);
+ free_and_zero(rv_ul_ref_sig[u][v][Msc_RS]);
if ((v==0) && (Msc_RS < MAX_INDEX_DMRS_UL_ALLOCATED_REs))
if (dmrs_lowpaprtype1_ul_ref_sig[u][v][Msc_RS])
- free16(dmrs_lowpaprtype1_ul_ref_sig[u][v][Msc_RS],2*sizeof(int16_t)*dmrs_ul_allocated_res[Msc_RS]);
+ free_and_zero(dmrs_lowpaprtype1_ul_ref_sig[u][v][Msc_RS]);
}
}
}
@@ -321,7 +328,7 @@ void free_gnb_lowpapr_sequences(void)
v=0;
for (u=0; u < U_GROUP_NUMBER; u++) {
if (gNB_dmrs_lowpaprtype1_sequence[u][v][Msc_RS])
- free16(gNB_dmrs_lowpaprtype1_sequence[u][v][Msc_RS],2*sizeof(int16_t)*dmrs_ul_allocated_res[Msc_RS]);
+ free_and_zero(gNB_dmrs_lowpaprtype1_sequence[u][v][Msc_RS]);
}
}
}
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c
index d233eb9ba6..0af56ba706 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dci.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c
@@ -130,11 +130,8 @@ void nr_generate_dci(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15,
uint16_t Nid = dci_pdu->ScramblingId;
uint16_t scrambling_RNTI = dci_pdu->ScramblingRNTI;
- t_nrPolar_params *currentPtr = nr_polar_params(NR_POLAR_DCI_MESSAGE_TYPE,
- dci_pdu->PayloadSizeBits,
- dci_pdu->AggregationLevel,
- 0,NULL);
- polar_encoder_fast((uint64_t*)dci_pdu->Payload, (void*)encoder_output, n_RNTI,1,currentPtr);
+ polar_encoder_fast((uint64_t*)dci_pdu->Payload, (void*)encoder_output, n_RNTI, 1,
+ NR_POLAR_DCI_MESSAGE_TYPE, dci_pdu->PayloadSizeBits, dci_pdu->AggregationLevel);
#ifdef DEBUG_CHANNEL_CODING
printf("polar rnti %x,length %d, L %d\n",n_RNTI, dci_pdu->PayloadSizeBits,pdcch_pdu_rel15->dci_pdu->AggregationLevel);
printf("DCI PDU: [0]->0x%lx \t [1]->0x%lx\n",
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
index c6c89c80be..37ef5fb207 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
@@ -224,21 +224,23 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
printf("PDSCH resource mapping started (start SC %d\tstart symbol %d\tN_PRB %d\tnb_re %d,nb_layers %d)\n",
start_sc, rel15->StartSymbolIndex, rel15->rbSize, nb_re,rel15->nrOfLayers);
#endif
- start_meas(&gNB->dlsch_resource_mapping_stats);
- for (int ap=0; apnrOfLayers; ap++) {
- // DMRS params for this ap
- get_Wt(Wt, ap, dmrs_Type);
- get_Wf(Wf, ap, dmrs_Type);
- delta = get_delta(ap, dmrs_Type);
- l_prime = 0; // single symbol ap 0
+ start_meas(&gNB->dlsch_resource_mapping_stats);
+ for (int nl=0; nlnrOfLayers; nl++) {
+
+ int dmrs_port = get_dmrs_port(nl,rel15->dmrsPorts);
+ // DMRS params for this dmrs port
+ get_Wt(Wt, dmrs_port, dmrs_Type);
+ get_Wf(Wf, dmrs_port, dmrs_Type);
+ delta = get_delta(dmrs_port, dmrs_Type);
+ l_prime = 0; // single symbol nl 0
l0 = get_l0(rel15->dlDmrsSymbPos);
l_overline = l0;
#ifdef DEBUG_DLSCH_MAPPING
uint8_t dmrs_symbol = l0+l_prime;
- printf("DMRS Type %d params for ap %d: Wt %d %d \t Wf %d %d \t delta %d \t l_prime %d \t l0 %d\tDMRS symbol %d\n",
- 1+dmrs_Type,ap, Wt[0], Wt[1], Wf[0], Wf[1], delta, l_prime, l0, dmrs_symbol);
+ printf("DMRS Type %d params for nl %d: Wt %d %d \t Wf %d %d \t delta %d \t l_prime %d \t l0 %d\tDMRS symbol %d\n",
+ 1+dmrs_Type,nl, Wt[0], Wt[1], Wf[0], Wf[1], delta, l_prime, l0, dmrs_symbol);
#endif
uint16_t m=0, dmrs_idx=0;
@@ -307,7 +309,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
if (ptrs_symbol)
is_ptrs_re = is_ptrs_subcarrier(k,
rel15->rnti,
- ap,
+ nl,
rel15->dmrsConfigType,
rel15->PTRSFreqDensity,
rel15->rbSize,
@@ -317,12 +319,12 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
/* Map DMRS Symbol */
if ( (dmrs_symbol_map & (1 << l)) &&
(k == ((start_sc+get_dmrs_freq_idx(n, k_prime, delta, dmrs_Type))%(frame_parms->ofdm_symbol_size)))) {
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[dmrs_idx<<1]) >> 15;
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 ] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[(dmrs_idx<<1) + 1]) >> 15;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[dmrs_idx<<1]) >> 15;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 ] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[(dmrs_idx<<1) + 1]) >> 15;
#ifdef DEBUG_DLSCH_MAPPING
printf("dmrs_idx %d\t l %d \t k %d \t k_prime %d \t n %d \t txdataF: %d %d\n",
- dmrs_idx, l, k, k_prime, n, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1)],
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1]);
+ dmrs_idx, l, k, k_prime, n, txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1)],
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1]);
#endif
dmrs_idx++;
k_prime++;
@@ -330,30 +332,30 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
n+=(k_prime)?0:1;
}
else if(is_ptrs_re){
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = (beta_ptrs*amp*mod_ptrs[ptrs_idx<<1]) >> 15;
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = (beta_ptrs*amp*mod_ptrs[(ptrs_idx<<1) + 1])>> 15;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = (beta_ptrs*amp*mod_ptrs[ptrs_idx<<1]) >> 15;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = (beta_ptrs*amp*mod_ptrs[(ptrs_idx<<1) + 1])>> 15;
#ifdef DEBUG_DLSCH_MAPPING
printf("ptrs_idx %d\t l %d \t k %d \t k_prime %d \t n %d \t txdataF: %d %d, mod_ptrs: %d %d\n",
- ptrs_idx, l, k, k_prime, n, ((int16_t*)txdataF[ap])[((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)],
- ((int16_t*)txdataF[ap])[((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)],mod_ptrs[ptrs_idx<<1],mod_ptrs[(ptrs_idx<<1)+1]);
+ ptrs_idx, l, k, k_prime, n, ((int16_t*)txdataF_precoding[nl])[((l*frame_parms->ofdm_symbol_size + k)<<1)],
+ ((int16_t*)txdataF_precoding[nl])[((l*frame_parms->ofdm_symbol_size + k)<<1) + 1],mod_ptrs[ptrs_idx<<1],mod_ptrs[(ptrs_idx<<1)+1]);
#endif
ptrs_idx++;
}
/* Map DATA Symbol */
else if( ptrs_symbol || allowed_xlsch_re_in_dmrs_symbol(k,start_sc,frame_parms->ofdm_symbol_size,rel15->numDmrsCdmGrpsNoData,dmrs_Type)) {
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = (amp * tx_layers[ap][m<<1]) >> 15;
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = (amp * tx_layers[ap][(m<<1) + 1]) >> 15;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = (amp * tx_layers[nl][m<<1]) >> 15;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = (amp * tx_layers[nl][(m<<1) + 1]) >> 15;
#ifdef DEBUG_DLSCH_MAPPING
printf("m %d\t l %d \t k %d \t txdataF: %d %d\n",
- m, l, k, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1)],
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1]);
+ m, l, k, txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1)],
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1]);
#endif
m++;
}
/* mute RE */
else {
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0;
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0;
}
if (++k >= frame_parms->ofdm_symbol_size)
k -= frame_parms->ofdm_symbol_size;
@@ -369,26 +371,26 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
}
// fix the alignment issues later, use 64-bit SIMD below instead of 128.
if (0/*(frame_parms->N_RB_DL&1)==0*/) {
- __m128i *txF=(__m128i*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size+start_sc)<<1)];
+ __m128i *txF=(__m128i*)&txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size+start_sc)<<1)];
- __m128i *txl = (__m128i*)&tx_layers[ap][m<<1];
+ __m128i *txl = (__m128i*)&tx_layers[nl][m<<1];
__m128i amp128=_mm_set1_epi16(amp);
for (int i=0; i<(upper_limit>>2); i++) {
txF[i] = _mm_mulhrs_epi16(amp128,txl[i]);
} //RE loop, first part
m+=upper_limit;
if (remaining_re > 0) {
- txF = (__m128i*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size)<<1)];
- txl = (__m128i*)&tx_layers[ap][m<<1];
+ txF = (__m128i*)&txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size)<<1)];
+ txl = (__m128i*)&tx_layers[nl][m<<1];
for (int i=0; i<(remaining_re>>2); i++) {
txF[i] = _mm_mulhrs_epi16(amp128,txl[i]);
}
}
}
else {
- __m64 *txF=(__m64*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size+start_sc)<<1)];
+ __m64 *txF=(__m64*)&txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size+start_sc)<<1)];
- __m64 *txl = (__m64*)&tx_layers[ap][m<<1];
+ __m64 *txl = (__m64*)&tx_layers[nl][m<<1];
__m64 amp64=_mm_set1_pi16(amp);
for (int i=0; i<(upper_limit>>1); i++) {
@@ -396,31 +398,31 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
#ifdef DEBUG_DLSCH_MAPPING
if ((i&1) > 0)
printf("m %d\t l %d \t k %d \t txdataF: %d %d\n",
- m, l, start_sc+(i>>1), txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + start_sc+(i>>1))<<1)],
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + start_sc+(i>>1))<<1) + 1]);
+ m, l, start_sc+(i>>1), txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + start_sc+(i>>1))<<1)],
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + start_sc+(i>>1))<<1) + 1]);
#endif
/* handle this, mute RE */
/*else {
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0;
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0;
+ txdataF_precoding[anl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0;
}*/
} //RE loop, first part
m+=upper_limit;
if (remaining_re > 0) {
- txF = (__m64*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size)<<1)];
- txl = (__m64*)&tx_layers[ap][m<<1];
+ txF = (__m64*)&txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size)<<1)];
+ txl = (__m64*)&tx_layers[nl][m<<1];
for (int i=0; i<(remaining_re>>1); i++) {
txF[i] = _mm_mulhrs_pi16(amp64,txl[i]);
#ifdef DEBUG_DLSCH_MAPPING
if ((i&1) > 0)
printf("m %d\t l %d \t k %d \t txdataF: %d %d\n",
- m, l, i>>1, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + (i>>1))<<1) ],
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + (i>>1))<<1) + 1]);
+ m, l, i>>1, txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + (i>>1))<<1) ],
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + (i>>1))<<1) + 1]);
#endif
/* handle this, mute RE */
/*else {
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0;
- txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0;
+ txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0;
}*/
} //RE loop, second part
} //
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
index 6d16fa531c..cdf0e6c152 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
@@ -55,42 +55,39 @@ void free_gNB_dlsch(NR_gNB_DLSCH_t **dlschptr, uint16_t N_RB) {
NR_gNB_DLSCH_t *dlsch = *dlschptr;
uint16_t a_segments = MAX_NUM_NR_DLSCH_SEGMENTS; //number of segments to be allocated
- if (dlsch) {
- if (N_RB != 273) {
- a_segments = a_segments*N_RB;
- a_segments = a_segments/273 +1;
- }
-
-#ifdef DEBUG_DLSCH_FREE
- LOG_D(PHY,"Freeing dlsch %p\n",dlsch);
-#endif
- NR_DL_gNB_HARQ_t *harq = &dlsch->harq_process;
-
- if (harq->b) {
- free16(harq->b, a_segments * 1056);
- harq->b = NULL;
-#ifdef DEBUG_DLSCH_FREE
- LOG_D(PHY, "Freeing harq->b (%p)\n", harq->b);
-#endif
- }
-
-#ifdef DEBUG_DLSCH_FREE
- LOG_D(PHY, "Freeing dlsch process %d c (%p)\n", i, harq->c);
-#endif
-
- for (r = 0; r < a_segments; r++) {
-#ifdef DEBUG_DLSCH_FREE
- LOG_D(PHY, "Freeing dlsch process %d c[%d] (%p)\n", i, r, harq->c[r]);
-#endif
-
- if (harq->c[r]) {
- free16(harq->c[r], 1056);
- harq->c[r] = NULL;
- }
- }
- free16(dlsch, sizeof(NR_gNB_DLSCH_t));
- *dlschptr = NULL;
+ if (N_RB != 273) {
+ a_segments = a_segments*N_RB;
+ a_segments = a_segments/273 +1;
}
+
+ NR_DL_gNB_HARQ_t *harq = &dlsch->harq_process;
+ if (harq->b) {
+ free16(harq->b, a_segments * 1056);
+ harq->b = NULL;
+ }
+ for (r = 0; r < a_segments; r++) {
+ free(harq->c[r]);
+ harq->c[r] = NULL;
+ }
+ free(harq->pdu);
+
+ for (int aa = 0; aa < 64; aa++)
+ free(dlsch->calib_dl_ch_estimates[aa]);
+ free(dlsch->calib_dl_ch_estimates);
+
+ for (int q=0; qmod_symbs[q]);
+
+ for (int layer = 0; layer < NR_MAX_NB_LAYERS; layer++) {
+ free(dlsch->txdataF_precoding[layer]);
+ free(dlsch->txdataF[layer]);
+ for (int aa = 0; aa < 64; aa++)
+ free(dlsch->ue_spec_bf_weights[layer][aa]);
+ free(dlsch->ue_spec_bf_weights[layer]);
+ }
+
+ free(dlsch);
+ *dlschptr = NULL;
}
NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms,
diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c
index bf5edccb1b..fc7df46496 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c
@@ -299,8 +299,8 @@ int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
/// CRC, coding and rate matching
polar_encoder_fast (&a_reversed, (void*)pbch->pbch_e, 0, 0,
- nr_polar_params( NR_POLAR_PBCH_MESSAGE_TYPE, NR_POLAR_PBCH_PAYLOAD_BITS, NR_POLAR_PBCH_AGGREGATION_LEVEL,0,NULL)
- );
+ NR_POLAR_PBCH_MESSAGE_TYPE, NR_POLAR_PBCH_PAYLOAD_BITS, NR_POLAR_PBCH_AGGREGATION_LEVEL);
+
#ifdef DEBUG_PBCH_ENCODING
printf("Channel coding:\n");
diff --git a/openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.c b/openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.c
index e6a9b8c5dc..a62138621d 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.c
@@ -92,6 +92,5 @@ uint8_t get_l0(uint16_t dlDmrsSymbPos) {
if ((mask&1) == 1) break;
mask>>=1;
}
- AssertFatal(l0 < 4,"impossible l0 %d\n",l0);
return (l0);
}
diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
index d45858bca0..b62698c748 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
+++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
@@ -106,6 +106,8 @@ NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms,
uint8_t abstraction_flag,
uint16_t N_RB);
+void free_gNB_dlsch(NR_gNB_DLSCH_t **dlschptr, uint16_t N_RB);
+
/** \brief This function is the top-level entry point to PUSCH demodulation, after frequency-domain transformation and channel estimation. It performs
- RB extraction (signal and channel estimates)
- channel compensation (matched filtering)
@@ -296,6 +298,7 @@ int16_t find_nr_prach(PHY_VARS_gNB *gNB,int frame,int slot, find_type_t type);
int16_t find_nr_prach_ru(RU_t *ru,int frame,int slot, find_type_t type);
NR_gNB_PUCCH_t *new_gNB_pucch(void);
+void free_gNB_pucch(NR_gNB_PUCCH_t *pucch);
void nr_fill_pucch(PHY_VARS_gNB *gNB,
int frame,
@@ -308,6 +311,7 @@ int nr_find_pucch(uint16_t rnti,
PHY_VARS_gNB *gNB);
NR_gNB_SRS_t *new_gNB_srs(void);
+void free_gNB_srs(NR_gNB_SRS_t *srs);
int nr_find_srs(uint16_t rnti,
int frame,
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch.h b/openair1/PHY/NR_TRANSPORT/nr_ulsch.h
index f7bb3be577..0791fd2bbc 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch.h
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch.h
@@ -33,9 +33,9 @@
#include "PHY/defs_gNB.h"
#include "common/utils/threadPool/thread-pool.h"
-void free_gNB_ulsch(NR_gNB_ULSCH_t **ulsch,uint8_t N_RB_UL);
+void free_gNB_ulsch(NR_gNB_ULSCH_t **ulsch, uint16_t N_RB_UL);
-NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint8_t abstraction_flag);
+NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL);
/*! \brief Perform PUSCH decoding. TS 38.212 V15.4.0 subclause 6.2
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
index 7ac2e67be0..e9ed278bb1 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
@@ -54,60 +54,40 @@
//extern double cpuf;
-void free_gNB_ulsch(NR_gNB_ULSCH_t **ulschptr,uint8_t N_RB_UL)
+void free_gNB_ulsch(NR_gNB_ULSCH_t **ulschptr, uint16_t N_RB_UL)
{
int i,r;
uint16_t a_segments = MAX_NUM_NR_ULSCH_SEGMENTS; //number of segments to be allocated
NR_gNB_ULSCH_t *ulsch = *ulschptr;
- if (ulsch) {
- if (N_RB_UL != 273) {
- a_segments = a_segments*N_RB_UL;
- a_segments = a_segments/273 +1;
- }
-
-
- for (i=0; iharq_processes[i]) {
- if (ulsch->harq_processes[i]->b) {
- free16(ulsch->harq_processes[i]->b,a_segments*1056);
- ulsch->harq_processes[i]->b = NULL;
- }
- for (r=0; rharq_processes[i]->c[r],(8448)*sizeof(uint8_t));
- ulsch->harq_processes[i]->c[r] = NULL;
- }
- for (r=0; rharq_processes[i]->d[r]) {
- free16(ulsch->harq_processes[i]->d[r],(68*384)*sizeof(int16_t));
- ulsch->harq_processes[i]->d[r] = NULL;
- }
- }
- for (r=0; rharq_processes[i]->w[r]) {
- free16(ulsch->harq_processes[i]->w[r],(3*(6144+64))*sizeof(int16_t));
- ulsch->harq_processes[i]->w[r] = NULL;
- }
- }
- for (r=0; rharq_processes[i]->p_nrLDPC_procBuf[r]){
- nrLDPC_free_mem(ulsch->harq_processes[i]->p_nrLDPC_procBuf[r]);
- ulsch->harq_processes[i]->p_nrLDPC_procBuf[r] = NULL;
- }
- }
- free16(ulsch->harq_processes[i],sizeof(NR_UL_gNB_HARQ_t));
- ulsch->harq_processes[i] = NULL;
- }
- }
- free16(ulsch,sizeof(NR_gNB_ULSCH_t));
- *ulschptr = NULL;
+ if (N_RB_UL != 273) {
+ a_segments = a_segments*N_RB_UL;
+ a_segments = a_segments/273 +1;
}
+
+ for (i=0; iharq_processes[i]) {
+ if (ulsch->harq_processes[i]->b) {
+ free_and_zero(ulsch->harq_processes[i]->b);
+ ulsch->harq_processes[i]->b = NULL;
+ }
+ for (r=0; rharq_processes[i]->c[r]);
+ free_and_zero(ulsch->harq_processes[i]->d[r]);
+ free_and_zero(ulsch->harq_processes[i]->w[r]);
+ nrLDPC_free_mem(ulsch->harq_processes[i]->p_nrLDPC_procBuf[r]);
+ ulsch->harq_processes[i]->p_nrLDPC_procBuf[r] = NULL;
+ }
+ free_and_zero(ulsch->harq_processes[i]);
+ ulsch->harq_processes[i] = NULL;
+ }
+ }
+ free_and_zero(*ulschptr);
}
-NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint8_t abstraction_flag)
+NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
{
NR_gNB_ULSCH_t *ulsch;
@@ -129,13 +109,11 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint
ulsch->harq_processes[i] = (NR_UL_gNB_HARQ_t *)malloc16_clear(sizeof(NR_UL_gNB_HARQ_t));
ulsch->harq_processes[i]->b = (uint8_t*)malloc16_clear(ulsch_bytes);
- if (abstraction_flag == 0) {
- for (r=0; rharq_processes[i]->p_nrLDPC_procBuf[r] = nrLDPC_init_mem();
- ulsch->harq_processes[i]->c[r] = (uint8_t*)malloc16_clear(8448*sizeof(uint8_t));
- ulsch->harq_processes[i]->d[r] = (int16_t*)malloc16_clear((68*384)*sizeof(int16_t));
- ulsch->harq_processes[i]->w[r] = (int16_t*)malloc16_clear((3*(6144+64))*sizeof(int16_t));
- }
+ for (r=0; rharq_processes[i]->p_nrLDPC_procBuf[r] = nrLDPC_init_mem();
+ ulsch->harq_processes[i]->c[r] = (uint8_t*)malloc16_clear(8448*sizeof(uint8_t));
+ ulsch->harq_processes[i]->d[r] = (int16_t*)malloc16_clear((68*384)*sizeof(int16_t));
+ ulsch->harq_processes[i]->w[r] = (int16_t*)malloc16_clear((3*(6144+64))*sizeof(int16_t));
}
}
@@ -328,8 +306,8 @@ void nr_processULSegment(void* arg) {
rv_index,
ulsch_harq->new_rx,
E,
- ulsch_harq->F,
- Kr-ulsch_harq->F-2*(p_decoderParms->Z))==-1) {
+ ulsch_harq->F,
+ Kr-ulsch_harq->F-2*(p_decoderParms->Z))==-1) {
stop_meas(&phy_vars_gNB->ulsch_rate_unmatching_stats);
diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c
index 56d87866ed..b85dbd1454 100644
--- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c
+++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c
@@ -62,6 +62,11 @@ NR_gNB_PUCCH_t *new_gNB_pucch(void){
return (pucch);
}
+void free_gNB_pucch(NR_gNB_PUCCH_t *pucch)
+{
+ free_and_zero(pucch);
+}
+
int nr_find_pucch(uint16_t rnti,
int frame,
int slot,
@@ -1533,7 +1538,6 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
}
else { // polar coded case
- t_nrPolar_params *currentPtr = nr_polar_params(2,nb_bit,pucch_pdu->prb_size,1,&gNB->uci_polarParams);
__m64 *rp_re[Prx2][2];
__m64 *rp2_re[Prx2][2];
__m64 *rp_im[Prx2][2];
@@ -1660,7 +1664,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
} // half_prb
} // symb
// run polar decoder on llrs
- decoderState = polar_decoder_int16((int16_t*)llrs, decodedPayload, 0, currentPtr);
+ decoderState = polar_decoder_int16((int16_t*)llrs, decodedPayload, 0, 2,nb_bit,pucch_pdu->prb_size);
LOG_D(PHY,"UCI decoderState %d, payload[0] %llu\n",decoderState,(unsigned long long)decodedPayload[0]);
if (decoderState>0) decoderState=1;
corr_dB = dB_fixed64(corr);
diff --git a/openair1/PHY/NR_TRANSPORT/srs_rx.c b/openair1/PHY/NR_TRANSPORT/srs_rx.c
index c16becdb20..2d7aefdee0 100644
--- a/openair1/PHY/NR_TRANSPORT/srs_rx.c
+++ b/openair1/PHY/NR_TRANSPORT/srs_rx.c
@@ -49,6 +49,11 @@ NR_gNB_SRS_t *new_gNB_srs(void){
return (srs);
}
+void free_gNB_srs(NR_gNB_SRS_t *srs)
+{
+ free_and_zero(srs);
+}
+
int nr_find_srs(uint16_t rnti,
int frame,
int slot,
diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
index 30eae2d30f..7281f8e290 100644
--- a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+++ b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
@@ -642,6 +642,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
unsigned short p,
unsigned char symbol,
unsigned short BWPStart,
+ uint8_t config_type,
unsigned short bwp_start_subcarrier,
unsigned short nb_rb_pdsch)
{
@@ -653,10 +654,6 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
int16_t *fl=NULL,*fm=NULL,*fr=NULL,*fml=NULL,*fmr=NULL,*fmm=NULL,*fdcl=NULL,*fdcr=NULL,*fdclh=NULL,*fdcrh=NULL, *frl=NULL, *frr=NULL;
int ch_offset,symbol_offset;
- NR_UE_DLSCH_t **dlsch = ue->dlsch[proc->thread_id][gNB_id];
- const unsigned char harq_pid = dlsch[0]->current_harq_pid;
- NR_DL_UE_HARQ_t *dlsch0_harq = dlsch[0]->harq_processes[harq_pid];
-
uint8_t nushift;
int **dl_ch_estimates =ue->pdsch_vars[proc->thread_id][gNB_id]->dl_ch_estimates;
int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[proc->thread_id].rxdataF;
@@ -678,7 +675,6 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
if (is_SI) {
rb_offset -= BWPStart;
}
- uint8_t config_type = dlsch0_harq->dmrsConfigType;
int8_t delta = get_delta(p, config_type);
// checking if re-initialization of scrambling IDs is needed
diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
index c5330ce2f2..4dec92143a 100644
--- a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
+++ b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
@@ -72,6 +72,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
unsigned short p,
unsigned char symbol,
unsigned short BWPStart,
+ uint8_t config_type,
unsigned short bwp_start_subcarrier,
unsigned short nb_rb_pdsch);
diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
index 84c9627c8a..5e18f6cc6d 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
@@ -130,76 +130,75 @@ void nr_pdcch_demapping_deinterleaving(uint32_t *llr,
*/
int c = 0, r = 0;
- uint16_t bundle_j = 0, f_bundle_j = 0, f_reg = 0;
+ uint16_t f_bundle_j = 0;
uint32_t coreset_C = 0;
uint16_t index_z, index_llr;
int coreset_interleaved = 0;
+ int N_regs = coreset_nbr_rb*coreset_time_dur;
if (reg_bundle_size_L != 0) { // interleaving will be done only if reg_bundle_size_L != 0
coreset_interleaved = 1;
- coreset_C = (uint32_t) (coreset_nbr_rb / (coreset_interleaver_size_R * reg_bundle_size_L));
+ coreset_C = (uint32_t) (N_regs / (coreset_interleaver_size_R * reg_bundle_size_L));
} else {
reg_bundle_size_L = 6;
}
+ int B_rb = reg_bundle_size_L/coreset_time_dur; // nb of RBs occupied by each REG bundle
+ int num_bundles_per_cce = 6/reg_bundle_size_L;
+ int max_bundles = NR_MAX_PDCCH_AGG_LEVEL*num_bundles_per_cce;
+ int f_bundle_j_list[max_bundles];
- int f_bundle_j_list[(2*NR_MAX_PDCCH_AGG_LEVEL) - 1] = {};
-
- for (int reg = 0; reg < coreset_nbr_rb; reg++) {
- if ((reg % reg_bundle_size_L) == 0) {
+ // for each bundle
+ for (int nb = 0; nb < max_bundles; nb++) {
+ if (coreset_interleaved == 0) f_bundle_j = nb;
+ else {
if (r == coreset_interleaver_size_R) {
r = 0;
c++;
}
-
- bundle_j = (c * coreset_interleaver_size_R) + r;
- f_bundle_j = ((r * coreset_C) + c + n_shift) % (coreset_nbr_rb / reg_bundle_size_L);
-
- if (coreset_interleaved == 0) f_bundle_j = bundle_j;
-
- f_bundle_j_list[reg / 6] = f_bundle_j;
-
+ f_bundle_j = ((r * coreset_C) + c + n_shift) % (N_regs / reg_bundle_size_L);
+ r++;
}
- if ((reg % reg_bundle_size_L) == 0) r++;
+ f_bundle_j_list[nb] = f_bundle_j;
}
- // Get cce_list indices by reg_idx in ascending order
- int f_bundle_j_list_id = 0;
- int f_bundle_j_list_ord[(2*NR_MAX_PDCCH_AGG_LEVEL)-1] = {};
+ // Get cce_list indices by bundle index in ascending order
+ int f_bundle_j_list_ord[number_of_candidates][max_bundles];
for (int c_id = 0; c_id < number_of_candidates; c_id++ ) {
- f_bundle_j_list_id = CCE[c_id];
- for (int p = 0; p < NR_MAX_PDCCH_AGG_LEVEL; p++) {
- for (int p2 = CCE[c_id]; p2 < CCE[c_id] + L[c_id]; p2++) {
- AssertFatal(p2<2*NR_MAX_PDCCH_AGG_LEVEL,"number_of_candidates %d : p2 %d, CCE[%d] %d, L[%d] %d\n",number_of_candidates,p2,c_id,CCE[c_id],c_id,L[c_id]);
- if (f_bundle_j_list[p2] == p) {
- AssertFatal(f_bundle_j_list_id < 2*NR_MAX_PDCCH_AGG_LEVEL,"f_bundle_j_list_id %d\n",f_bundle_j_list_id);
- f_bundle_j_list_ord[f_bundle_j_list_id] = p;
+ int start_bund_cand = CCE[c_id]*num_bundles_per_cce;
+ int max_bund_per_cand = L[c_id]*num_bundles_per_cce;
+ int f_bundle_j_list_id = 0;
+ for(int nb = 0; nb < max_bundles; nb++) {
+ for(int bund_cand = start_bund_cand; bund_cand < start_bund_cand+max_bund_per_cand; bund_cand++){
+ if (f_bundle_j_list[bund_cand] == nb) {
+ f_bundle_j_list_ord[c_id][f_bundle_j_list_id] = nb;
f_bundle_j_list_id++;
- break;
+
}
}
}
}
- int rb = 0;
+ int rb_count = 0;
+ int data_sc = 9; // 9 sub-carriers with data per PRB
for (int c_id = 0; c_id < number_of_candidates; c_id++ ) {
for (int symbol_idx = start_symbol; symbol_idx < start_symbol+coreset_time_dur; symbol_idx++) {
- for (int cce_count = CCE[c_id/coreset_time_dur]+c_id%coreset_time_dur; cce_count < CCE[c_id/coreset_time_dur]+c_id%coreset_time_dur+L[c_id]; cce_count += coreset_time_dur) {
- for (int reg_in_cce_idx = 0; reg_in_cce_idx < NR_NB_REG_PER_CCE; reg_in_cce_idx++) {
-
- f_reg = (f_bundle_j_list_ord[cce_count] * reg_bundle_size_L) + reg_in_cce_idx;
- index_z = 9 * rb;
- index_llr = (uint16_t) (f_reg + symbol_idx * coreset_nbr_rb) * 9;
-
- for (int i = 0; i < 9; i++) {
- z[index_z + i] = llr[index_llr + i];
+ for (int cce_count = 0; cce_count < L[c_id]; cce_count ++) {
+ for (int k=0; k \t[f_reg=%d,fbundle_j=%d] llr[%d]=(%d,%d) \n",
- cce_count,reg_in_cce_idx,bundle_j,symbol_idx,c_id,(index_z + i),*(int16_t *) &z[index_z + i],*(1 + (int16_t *) &z[index_z + i]),
- f_reg,f_bundle_j,(index_llr + i),*(int16_t *) &llr[index_llr + i], *(1 + (int16_t *) &llr[index_llr + i]));
+ LOG_I(PHY,"[candidate=%d,symbol_idx=%d,cce=%d,REG bundle=%d,PRB=%d] z[%d]=(%d,%d) <-> \t llr[%d]=(%d,%d) \n",
+ c_id,symbol_idx,cce_count,k,f*B_rb + rb,(index_z + i),*(int16_t *) &z[index_z + i],*(1 + (int16_t *) &z[index_z + i]),
+ (index_llr + i),*(int16_t *) &llr[index_llr + i], *(1 + (int16_t *) &llr[index_llr + i]));
#endif
+ }
+ rb_count++;
}
- rb++;
}
}
}
@@ -783,15 +782,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
rel15->number_of_candidates,
rel15->CCE,
rel15->L);
- /*
- nr_pdcch_unscrambling(rel15->rnti,
- frame_parms,
- slot,
- pdcch_vars->e_rx,
- rel15->coreset.duration*n_rb*9*2,
- // get_nCCE(n_pdcch_symbols, frame_parms, mi) * 72,
- rel15->coreset.pdcch_dmrs_scrambling_id);
- */
+
LOG_D(PHY,"we end nr_pdcch_unscrambling()\n");
LOG_D(PHY,"Ending nr_rx_pdcch() function\n");
@@ -832,14 +823,18 @@ void nr_pdcch_unscrambling(int16_t *z,
/* This function compares the received DCI bits with
* re-encoded DCI bits and returns the number of mismatched bits
*/
-uint16_t nr_dci_false_detection(uint64_t *dci,
- int16_t *soft_in,
- const t_nrPolar_params *polar_param,
- int encoded_length,
- int rnti) {
+static uint16_t nr_dci_false_detection(uint64_t *dci,
+ int16_t *soft_in,
+ int encoded_length,
+ int rnti,
+ int8_t messageType,
+ uint16_t messageLength,
+ uint8_t aggregation_level
+ ) {
uint32_t encoder_output[NR_MAX_DCI_SIZE_DWORD];
- polar_encoder_fast(dci, (void*)encoder_output, rnti, 1, (t_nrPolar_params *)polar_param);
+ polar_encoder_fast(dci, (void*)encoder_output, rnti, 1,
+ messageType, messageLength, aggregation_level);
uint8_t *enout_p = (uint8_t*)encoder_output;
uint16_t x = 0;
@@ -866,6 +861,7 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
//int gNB_id = 0;
int16_t tmp_e[16*108];
rnti_t n_rnti;
+ int e_rx_cand_idx = 0;
for (int j=0;jnumber_of_candidates;j++) {
int CCEind = rel15->CCE[j];
@@ -886,26 +882,24 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
if (dci_found==1) continue;
int dci_length = rel15->dci_length_options[k];
uint64_t dci_estimation[2]= {0};
- const t_nrPolar_params *currentPtrDCI = nr_polar_params(NR_POLAR_DCI_MESSAGE_TYPE, dci_length, L, 1, &ue->polarList);
LOG_D(PHY, "Trying DCI candidate %d of %d number of candidates, CCE %d (%d), L %d, length %d, format %s\n",
- j, rel15->number_of_candidates, CCEind, CCEind*9*6*2, L, dci_length,nr_dci_format_string[rel15->dci_format_options[k]]);
+ j, rel15->number_of_candidates, CCEind, e_rx_cand_idx, L, dci_length,nr_dci_format_string[rel15->dci_format_options[k]]);
- nr_pdcch_unscrambling(&pdcch_vars->e_rx[CCEind*108], rel15->coreset.scrambling_rnti, L*108, rel15->coreset.pdcch_dmrs_scrambling_id, tmp_e);
+ nr_pdcch_unscrambling(&pdcch_vars->e_rx[e_rx_cand_idx], rel15->coreset.scrambling_rnti, L*108, rel15->coreset.pdcch_dmrs_scrambling_id, tmp_e);
#ifdef DEBUG_DCI_DECODING
- uint32_t * z = (uint32_t *) &pdcch_vars->e_rx[CCEind*108];
- for (int index_z = 0; index_z < 96; index_z++){
+ uint32_t *z = (uint32_t *) &pdcch_vars->e_rx[e_rx_cand_idx];
+ for (int index_z = 0; index_z < L*6; index_z++){
for (int i=0; i<9; i++) {
LOG_D(PHY,"z[%d]=(%d,%d) \n", (9*index_z + i), *(int16_t *) &z[index_z + i],*(1 + (int16_t *) &z[index_z + i]));
}
}
#endif
-
uint16_t crc = polar_decoder_int16(tmp_e,
dci_estimation,
1,
- currentPtrDCI);
+ NR_POLAR_DCI_MESSAGE_TYPE, dci_length, L);
n_rnti = rel15->rnti;
LOG_D(PHY, "(%i.%i) dci indication (rnti %x,dci format %s,n_CCE %d,payloadSize %d)\n",
@@ -913,7 +907,7 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
if (crc == n_rnti) {
LOG_D(PHY, "(%i.%i) Received dci indication (rnti %x,dci format %s,n_CCE %d,payloadSize %d,payload %llx)\n",
proc->frame_rx, proc->nr_slot_rx,n_rnti,nr_dci_format_string[rel15->dci_format_options[k]],CCEind,dci_length,*(unsigned long long*)dci_estimation);
- uint16_t mb = nr_dci_false_detection(dci_estimation,tmp_e,currentPtrDCI,L*108,n_rnti);
+ uint16_t mb = nr_dci_false_detection(dci_estimation,tmp_e,L*108,n_rnti, NR_POLAR_DCI_MESSAGE_TYPE, dci_length, L);
ue->dci_thres = (ue->dci_thres + mb) / 2;
if (mb > (ue->dci_thres+20)) {
LOG_W(PHY,"DCI false positive. Dropping DCI index %d. Mismatched bits: %d/%d. Current DCI threshold: %d\n",j,mb,L*108,ue->dci_thres);
@@ -935,6 +929,7 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue,
LOG_D(PHY,"(%i.%i) Decoded crc %x does not match rnti %x for DCI format %d\n", proc->frame_rx, proc->nr_slot_rx, crc, n_rnti, rel15->dci_format_options[k]);
}
}
+ e_rx_cand_idx += 9*L*6*2; //e_rx index for next candidate (L CCEs, 6 REGs per CCE and 9 REs per REG and 2 uint16_t per RE)
}
pdcch_vars->nb_search_space = 0;
return(dci_ind->number_of_dcis);
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
index 8064093eed..a9b8ce2e55 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
@@ -79,7 +79,7 @@ void init_dlsch_tpool(uint8_t num_dlsch_threads) {
free(params);
}
-void free_nr_ue_dlsch(NR_UE_DLSCH_t **dlschptr,uint8_t N_RB_DL) {
+void free_nr_ue_dlsch(NR_UE_DLSCH_t **dlschptr, uint16_t N_RB_DL) {
int i,r;
uint16_t a_segments = MAX_NUM_NR_DLSCH_SEGMENTS; //number of segments to be allocated
NR_UE_DLSCH_t *dlsch=*dlschptr;
@@ -131,7 +131,7 @@ void free_nr_ue_dlsch(NR_UE_DLSCH_t **dlschptr,uint8_t N_RB_DL) {
}
}
-NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t max_ldpc_iterations,uint16_t N_RB_DL, uint8_t abstraction_flag) {
+NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t max_ldpc_iterations,uint16_t N_RB_DL) {
NR_UE_DLSCH_t *dlsch;
uint8_t exit_flag = 0,i,r;
uint16_t a_segments = MAX_NUM_NR_DLSCH_SEGMENTS; //number of segments to be allocated
@@ -167,30 +167,28 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint
else
exit_flag=3;
- if (abstraction_flag == 0) {
- for (r=0; rharq_processes[i]->p_nrLDPC_procBuf[r] = nrLDPC_init_mem();
- dlsch->harq_processes[i]->c[r] = (uint8_t *)malloc16(1056);
+ for (r=0; rharq_processes[i]->p_nrLDPC_procBuf[r] = nrLDPC_init_mem();
+ dlsch->harq_processes[i]->c[r] = (uint8_t *)malloc16(1056);
- if (dlsch->harq_processes[i]->c[r])
- memset(dlsch->harq_processes[i]->c[r],0,1056);
- else
- exit_flag=2;
+ if (dlsch->harq_processes[i]->c[r])
+ memset(dlsch->harq_processes[i]->c[r],0,1056);
+ else
+ exit_flag=2;
- dlsch->harq_processes[i]->d[r] = (short *)malloc16((5*8448)*sizeof(short));
+ dlsch->harq_processes[i]->d[r] = (short *)malloc16((5*8448)*sizeof(short));
- if (dlsch->harq_processes[i]->d[r])
- memset(dlsch->harq_processes[i]->d[r],0,(5*8448)*sizeof(short));
- else
- exit_flag=2;
+ if (dlsch->harq_processes[i]->d[r])
+ memset(dlsch->harq_processes[i]->d[r],0,(5*8448)*sizeof(short));
+ else
+ exit_flag=2;
- dlsch->harq_processes[i]->w[r] = (short *)malloc16((5*8448)*sizeof(short));
+ dlsch->harq_processes[i]->w[r] = (short *)malloc16((5*8448)*sizeof(short));
- if (dlsch->harq_processes[i]->w[r])
- memset(dlsch->harq_processes[i]->w[r],0,(5*8448)*sizeof(short));
- else
- exit_flag=2;
- }
+ if (dlsch->harq_processes[i]->w[r])
+ memset(dlsch->harq_processes[i]->w[r],0,(5*8448)*sizeof(short));
+ else
+ exit_flag=2;
}
} else {
exit_flag=1;
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
index 075aaecc08..75517b7a6f 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
@@ -931,12 +931,12 @@ void nr_dlsch_channel_compensation(int **rxdataF_ext,
for (aarx=0; aarxnb_antennas_rx; aarx++) {
for (aatx=0; aatxnb_antennas_rx+aarx][symbol*nb_rb*12];
for (atx=0; atxnb_antennas_rx+aarx][symbol*nb_rb*12];
dl_ch128_2 = (__m128i *)&dl_ch_estimates_ext[atx*frame_parms->nb_antennas_rx+aarx][symbol*nb_rb*12];
for (rb=0; rbofdm_symbol_size + fp->nb_prefix_samples0)+(ue->symbol_offset-n_symb_prefix0)*(fp->ofdm_symbol_size + fp->nb_prefix_samples);
// for a correct computation of frame number to sync with the one decoded at MIB we need to take into account in which of the n_frames we got sync
ue->init_sync_frame = n_frames - 1 - is;
+
+ // compute the scramblingID_pdcch and the gold pdcch
+ ue->scramblingID_pdcch = fp->Nid_cell;
+ nr_gold_pdcch(ue,fp->Nid_cell);
+
+ // compute the scrambling IDs for PDSCH DMRS
+ for (int i=0; i<2; i++)
+ ue->scramblingID[i]=fp->Nid_cell;
+
+ nr_gold_pdsch(ue,ue->scramblingID);
+
+ // initialize the pusch dmrs
+ uint16_t N_n_scid[2] = {fp->Nid_cell,fp->Nid_cell};
+ int n_scid = 0; // This quantity is indicated by higher layer parameter dmrs-SeqInitialization
+ nr_init_pusch_dmrs(ue, N_n_scid, n_scid);
+
// we also need to take into account the shift by samples_per_frame in case the if is true
if (ue->ssb_offset < sync_pos_frame){
ue->rx_offset = fp->samples_per_frame - sync_pos_frame + ue->ssb_offset;
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
index dff347f7c0..6b5185dc2c 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
@@ -533,8 +533,8 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
nr_pbch_unscrambling(nr_ue_pbch_vars,frame_parms->Nid_cell,nushift,M,NR_POLAR_PBCH_E,0,0);
//polar decoding de-rate matching
- const t_nrPolar_params *currentPtr = nr_polar_params( NR_POLAR_PBCH_MESSAGE_TYPE, NR_POLAR_PBCH_PAYLOAD_BITS, NR_POLAR_PBCH_AGGREGATION_LEVEL,1,&ue->polarList);
- decoderState = polar_decoder_int16(pbch_e_rx,(uint64_t *)&nr_ue_pbch_vars->pbch_a_prime,0,currentPtr);
+ decoderState = polar_decoder_int16(pbch_e_rx,(uint64_t *)&nr_ue_pbch_vars->pbch_a_prime,0,
+ NR_POLAR_PBCH_MESSAGE_TYPE, NR_POLAR_PBCH_PAYLOAD_BITS, NR_POLAR_PBCH_AGGREGATION_LEVEL);
if(decoderState) return(decoderState);
@@ -601,7 +601,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
#endif
nr_downlink_indication_t dl_indication;
- fapi_nr_rx_indication_t *rx_ind = calloc(1, sizeof(*rx_ind));
+ fapi_nr_rx_indication_t *rx_ind=calloc(sizeof(*rx_ind),1);
uint16_t number_pdus = 1;
nr_fill_dl_indication(&dl_indication, NULL, rx_ind, proc, ue, gNB_id);
@@ -609,6 +609,8 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
if (ue->if_inst && ue->if_inst->dl_indication)
ue->if_inst->dl_indication(&dl_indication, NULL);
+ else
+ free(rx_ind); // dl_indication would free(), so free() here if not called
return 0;
}
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
index 239731208e..9bc3643557 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
@@ -50,24 +50,23 @@
\brief This function frees memory allocated for a particular DLSCH at UE
@param dlsch Pointer to DLSCH to be removed
*/
-void free_nr_ue_dlsch(NR_UE_DLSCH_t **dlsch,uint8_t N_RB_DL);
+void free_nr_ue_dlsch(NR_UE_DLSCH_t **dlsch, uint16_t N_RB_DL);
-/** \fn new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t abstraction_flag)
+/** \fn new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft)
\brief This function allocates structures for a particular DLSCH at UE
@returns Pointer to DLSCH to be removed
@param Kmimo Kmimo factor from 36-212/36-213
@param Mdlharq Maximum number of HARQ rounds (36-212/36-213)
@param Nsoft Soft-LLR buffer size from UE-Category
@params N_RB_DL total number of resource blocks (determine the operating BW)
- @param abstraction_flag Flag to indicate abstracted interface
*/
-NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t max_turbo_iterations,uint16_t N_RB_DL, uint8_t abstraction_flag);
+NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t max_turbo_iterations,uint16_t N_RB_DL);
-void free_nr_ue_ulsch(NR_UE_ULSCH_t **ulsch,unsigned char N_RB_UL);
+void free_nr_ue_ulsch(NR_UE_ULSCH_t **ulsch, uint16_t N_RB_UL);
-NR_UE_ULSCH_t *new_nr_ue_ulsch(uint16_t N_RB_UL, int number_of_harq_pids, uint8_t abstraction_flag);
+NR_UE_ULSCH_t *new_nr_ue_ulsch(uint16_t N_RB_UL, int number_of_harq_pids);
/** \brief This function computes the LLRs for ML (max-logsum approximation) dual-stream QPSK/QPSK reception.
@param stream0_in Input from channel compensated (MR combined) stream 0
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
index 9b9f1add6e..caf3a19d85 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
@@ -272,6 +272,8 @@ typedef struct {
uint8_t dmrsConfigType;
// Number of DMRS CDM groups with no data
uint8_t n_dmrs_cdm_groups;
+ /// DMRS ports bitmap
+ uint16_t dmrs_ports;
/// Starting Symbol number
uint16_t start_symbol;
/// Current subband PMI allocation
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
index aa4c858574..0ab4c94b96 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
@@ -43,7 +43,7 @@
//#define DEBUG_ULSCH_CODING
-void free_nr_ue_ulsch(NR_UE_ULSCH_t **ulschptr,unsigned char N_RB_UL)
+void free_nr_ue_ulsch(NR_UE_ULSCH_t **ulschptr, uint16_t N_RB_UL)
{
int i, r;
@@ -105,12 +105,8 @@ void free_nr_ue_ulsch(NR_UE_ULSCH_t **ulschptr,unsigned char N_RB_UL)
}
-NR_UE_ULSCH_t *new_nr_ue_ulsch(uint16_t N_RB_UL,
- int number_of_harq_pids,
- uint8_t abstraction_flag)
+NR_UE_ULSCH_t *new_nr_ue_ulsch(uint16_t N_RB_UL, int number_of_harq_pids)
{
- NR_UE_ULSCH_t *ulsch;
- unsigned char exit_flag = 0,i,r;
uint16_t a_segments = MAX_NUM_NR_ULSCH_SEGMENTS; //number of segments to be allocated
if (N_RB_UL != 273) {
@@ -120,97 +116,54 @@ NR_UE_ULSCH_t *new_nr_ue_ulsch(uint16_t N_RB_UL,
uint32_t ulsch_bytes = a_segments*1056; // allocated bytes per segment
- ulsch = (NR_UE_ULSCH_t *)malloc16(sizeof(NR_UE_ULSCH_t));
+ NR_UE_ULSCH_t *ulsch = malloc16(sizeof(NR_UE_ULSCH_t));
+ DevAssert(ulsch);
+ memset(ulsch, 0, sizeof(*ulsch));
- if (ulsch) {
- memset(ulsch,0,sizeof(NR_UE_ULSCH_t));
+ ulsch->number_harq_processes_for_pusch = NR_MAX_ULSCH_HARQ_PROCESSES;
+ ulsch->Mlimit = 4; // maximum harq retransmissions
- ulsch->number_harq_processes_for_pusch = NR_MAX_ULSCH_HARQ_PROCESSES;
- ulsch->Mlimit = 4; // maximum harq retransmissions
+ //for (i=0; i<10; i++)
+ //ulsch->harq_ids[i] = 0;
- //for (i=0; i<10; i++)
- //ulsch->harq_ids[i] = 0;
+ for (int i = 0; i < number_of_harq_pids; i++) {
- for (i=0; iharq_processes[i] = malloc16(sizeof(NR_UL_UE_HARQ_t));
+ DevAssert(ulsch->harq_processes[i]);
+ memset(ulsch->harq_processes[i], 0, sizeof(NR_UL_UE_HARQ_t));
- ulsch->harq_processes[i] = (NR_UL_UE_HARQ_t *)malloc16(sizeof(NR_UL_UE_HARQ_t));
+ ulsch->harq_processes[i]->a = malloc16(ulsch_bytes);
+ DevAssert(ulsch->harq_processes[i]->a);
+ bzero(ulsch->harq_processes[i]->a,ulsch_bytes);
- // printf("ulsch->harq_processes[%d] %p\n",i,ulsch->harq_processes[i]);
- if (ulsch->harq_processes[i]) {
- memset(ulsch->harq_processes[i], 0, sizeof(NR_UL_UE_HARQ_t));
- ulsch->harq_processes[i]->b = (uint8_t*)malloc16(ulsch_bytes);
- ulsch->harq_processes[i]->a = (unsigned char*)malloc16(ulsch_bytes);
+ ulsch->harq_processes[i]->b = malloc16(ulsch_bytes);
+ DevAssert(ulsch->harq_processes[i]->b);
+ bzero(ulsch->harq_processes[i]->b,ulsch_bytes);
- if (ulsch->harq_processes[i]->a) {
- bzero(ulsch->harq_processes[i]->a,ulsch_bytes);
- } else {
- printf("Can't allocate PDU\n");
- exit_flag=1;
- }
+ for (int r = 0; r < a_segments; r++) {
+ // account for filler in first segment and CRCs for multiple segment case
+ ulsch->harq_processes[i]->c[r] = malloc16(8448);
+ DevAssert(ulsch->harq_processes[i]->c[r]);
+ bzero(ulsch->harq_processes[i]->c[r],8448);
- if (ulsch->harq_processes[i]->b)
- bzero(ulsch->harq_processes[i]->b,ulsch_bytes);
- else {
- LOG_E(PHY,"Can't get b\n");
- exit_flag=1;
- }
-
- if (abstraction_flag==0) {
- for (r=0; rharq_processes[i]->c[r] = (uint8_t*)malloc16(8448);
- ulsch->harq_processes[i]->d[r] = (uint8_t*)malloc16(68*384); //max size for coded output
-
- if (ulsch->harq_processes[i]->c[r]) {
- bzero(ulsch->harq_processes[i]->c[r],8448);
- } else {
- printf("Can't get c\n");
- exit_flag=2;
- }
- if (ulsch->harq_processes[i]->d[r]) {
- bzero(ulsch->harq_processes[i]->d[r],(68*384));
- } else {
- printf("Can't get d\n");
- exit_flag=2;
- }
- }
- ulsch->harq_processes[i]->e = (uint8_t*)malloc16(14*N_RB_UL*12*8);
- if (ulsch->harq_processes[i]->e) {
- bzero(ulsch->harq_processes[i]->e,14*N_RB_UL*12*8);
- } else {
- printf("Can't get e\n");
- exit_flag=1;
- }
- ulsch->harq_processes[i]->f = (uint8_t*)malloc16(14*N_RB_UL*12*8);
- if (ulsch->harq_processes[i]->f) {
- bzero(ulsch->harq_processes[i]->f,14*N_RB_UL*12*8);
- } else {
- printf("Can't get f\n");
- exit_flag=1;
- }
- }
-
- ulsch->harq_processes[i]->subframe_scheduling_flag = 0;
- ulsch->harq_processes[i]->first_tx = 1;
- } else {
- LOG_E(PHY,"Can't get harq_p %d\n",i);
- exit_flag=3;
- }
+ ulsch->harq_processes[i]->d[r] = malloc16(68*384); //max size for coded output
+ DevAssert(ulsch->harq_processes[i]->d[r]);
+ bzero(ulsch->harq_processes[i]->d[r],(68*384));
}
- if (exit_flag==0) {
- for (i=0; iharq_processes[i]->round=0;
- }
- return(ulsch);
- }
+ ulsch->harq_processes[i]->e = malloc16(14*N_RB_UL*12*8);
+ DevAssert(ulsch->harq_processes[i]->e);
+ bzero(ulsch->harq_processes[i]->e,14*N_RB_UL*12*8);
+
+ ulsch->harq_processes[i]->f = malloc16(14*N_RB_UL*12*8);
+ DevAssert(ulsch->harq_processes[i]->f);
+ bzero(ulsch->harq_processes[i]->f,14*N_RB_UL*12*8);
+
+ ulsch->harq_processes[i]->subframe_scheduling_flag = 0;
+ ulsch->harq_processes[i]->first_tx = 1;
}
- LOG_E(PHY,"new_ue_ulsch exit flag, size of %d , %zu\n",exit_flag, sizeof(LTE_UE_ULSCH_t));
- free_nr_ue_ulsch(&ulsch,N_RB_UL);
- return(NULL);
-
-
+ return(ulsch);
}
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
index 0c188e9119..41cf9c2ffa 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
@@ -128,7 +128,6 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
NR_UE_PUSCH *pusch_ue = UE->pusch_vars[thread_id][gNB_id];
uint8_t num_of_codewords = 1; // tmp assumption
- int Nid_cell = 0;
int N_PRB_oh = 0; // higher layer (RRC) parameter xOverhead in PUSCH-ServingCellConfig
uint16_t number_dmrs_symbols = 0;
@@ -153,7 +152,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
if (start_sc >= frame_parms->ofdm_symbol_size)
start_sc -= frame_parms->ofdm_symbol_size;
- ulsch_ue->Nid_cell = Nid_cell;
+ ulsch_ue->Nid_cell = frame_parms->Nid_cell;
for (int i = start_symbol; i < start_symbol + number_of_symbols; i++) {
if((ul_dmrs_symb_pos >> i) & 0x01)
@@ -391,7 +390,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
// Perform this on gold sequence, not required when SC FDMA operation is done,
LOG_D(PHY,"DMRS in symbol %d\n",l);
nr_modulation(pusch_dmrs[l][0], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
-
+
} else {
dmrs_idx = 0;
}
diff --git a/openair1/PHY/NR_UE_TRANSPORT/pss_nr.c b/openair1/PHY/NR_UE_TRANSPORT/pss_nr.c
index 4fc11d5fc6..88bdc3a9cd 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/pss_nr.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/pss_nr.c
@@ -440,33 +440,10 @@ void init_context_pss_nr(NR_DL_FRAME_PARMS *frame_parms_ue)
void free_context_pss_nr(void)
{
for (int i = 0; i < NUMBER_PSS_SEQUENCE; i++) {
-
- if (primary_synchro_time_nr[i] != NULL) {
- free(primary_synchro_time_nr[i]);
- primary_synchro_time_nr[i] = NULL;
- }
- else {
- LOG_E(PHY,"Fatal memory deallocation problem \n");
- assert(0);
- }
-
- if (primary_synchro_nr[i] != NULL) {
- free(primary_synchro_nr[i]);
- primary_synchro_nr[i] = NULL;
- }
- else {
- LOG_E(PHY,"Fatal memory deallocation problem \n");
- assert(0);
- }
-
- if (pss_corr_ue[i] != NULL) {
- free(pss_corr_ue[i]);
- pss_corr_ue[i] = NULL;
- }
- else {
- LOG_E(PHY,"Fatal memory deallocation problem \n");
- assert(0);
- }
+ free_and_zero(primary_synchro_nr[i]);
+ free_and_zero(primary_synchro_nr2[i]);
+ free_and_zero(primary_synchro_time_nr[i]);
+ free_and_zero(pss_corr_ue[i]);
}
}
diff --git a/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c b/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
index ddec605253..4dcce9f60f 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
@@ -850,7 +850,7 @@ static inline void nr_pucch2_3_4_scrambling(uint16_t M_bit,uint16_t rnti,uint16_
printf("\t\t [nr_pucch2_3_4_scrambling] scrambling M_bit=%d bits\n", M_bit);
#endif
}
-void nr_uci_encoding(uint64_t payload,
+static void nr_uci_encoding(uint64_t payload,
uint8_t nr_bit,
int fmt,
uint8_t is_pi_over_2_bpsk_enabled,
@@ -946,12 +946,10 @@ void nr_uci_encoding(uint64_t payload,
AssertFatal(nrofPRB<=16,"Number of PRB >16\n");
} else if (A>=12) {
AssertFatal(A<65,"Polar encoding not supported yet for UCI with more than 64 bits\n");
- t_nrPolar_params *currentPtr = nr_polar_params(NR_POLAR_UCI_PUCCH_MESSAGE_TYPE,
- A,
- nrofPRB,
- 1,
- NULL);
- polar_encoder_fast(&payload, b, 0,0,currentPtr);
+ polar_encoder_fast(&payload, b, 0,0,
+ NR_POLAR_UCI_PUCCH_MESSAGE_TYPE,
+ A,
+ nrofPRB);
}
}
diff --git a/openair1/PHY/TOOLS/lte_enb_scope.c b/openair1/PHY/TOOLS/lte_enb_scope.c
index 7fde9f244c..0e873addbc 100644
--- a/openair1/PHY/TOOLS/lte_enb_scope.c
+++ b/openair1/PHY/TOOLS/lte_enb_scope.c
@@ -49,12 +49,6 @@ void reset_stats(FL_OBJECT *button, long arg) {
int i,j,k;
PHY_VARS_eNB *phy_vars_eNB = RC.eNB[0][0];
- printf("XXX %d %d %d\n",
- sizeofArray(phy_vars_eNB->UE_stats),
- sizeofArray( phy_vars_eNB->UE_stats[i].dlsch_NAK),
- sizeofArray( *phy_vars_eNB->UE_stats[i].dlsch_NAK)
- );
-
for (i=0; iUE_stats); i++) {
for (k=0; kUE_stats[i].dlsch_NAK); k++) { //harq_processes
for (j=0; jUE_stats[i].dlsch_NAK); j++) {
diff --git a/openair1/PHY/TOOLS/lte_ue_scope.c b/openair1/PHY/TOOLS/lte_ue_scope.c
index 00560f2d74..9b3f65d7d1 100644
--- a/openair1/PHY/TOOLS/lte_ue_scope.c
+++ b/openair1/PHY/TOOLS/lte_ue_scope.c
@@ -51,7 +51,7 @@ void reset_stats(FL_OBJECT *button, long arg) {
int i,j,k;
PHY_VARS_eNB *phy_vars_eNB = RC.eNB[0][0];
- for (i=0; idlsch[i][0]->Mlimit; j++) {
phy_vars_eNB->UE_stats[i].dlsch_NAK[k][j]=0;
diff --git a/openair1/PHY/defs_L1_NB_IoT.h b/openair1/PHY/defs_L1_NB_IoT.h
index a4552c8c27..b4aee78310 100644
--- a/openair1/PHY/defs_L1_NB_IoT.h
+++ b/openair1/PHY/defs_L1_NB_IoT.h
@@ -122,7 +122,7 @@ static inline void* malloc16_clear( size_t size )
#include "PHY/impl_defs_top_NB_IoT.h"
#include "PHY/impl_defs_lte_NB_IoT.h"
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
//#include "PHY/CODING/defs.h"
#include "PHY/CODING/defs_NB_IoT.h"
#include "openair2/PHY_INTERFACE/IF_Module_NB_IoT.h"
@@ -452,9 +452,6 @@ typedef struct {
int sub_frame_start;
///
int sub_frame_step;
- ///
- unsigned long long gotIQs;
-
} UE_rxtx_proc_NB_IoT_t;
/// Context data structure for eNB subframe processing
diff --git a/openair1/PHY/defs_RU.h b/openair1/PHY/defs_RU.h
index 76dd92ef5d..6b18e55c4b 100644
--- a/openair1/PHY/defs_RU.h
+++ b/openair1/PHY/defs_RU.h
@@ -36,7 +36,7 @@
#include "common_lib.h"
#include "openairinterface5g_limits.h"
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
#include "defs_common.h"
#include "nfapi_nr_interface_scf.h"
diff --git a/openair1/PHY/defs_UE.h b/openair1/PHY/defs_UE.h
index 2d2697a4b7..fa55384093 100644
--- a/openair1/PHY/defs_UE.h
+++ b/openair1/PHY/defs_UE.h
@@ -55,12 +55,11 @@
#include
#include
#include "common_lib.h"
-#include "msc.h"
#include "defs_common.h"
#include "impl_defs_top.h"
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
#include "PHY/CODING/coding_defs.h"
#include "PHY/TOOLS/tools_defs.h"
#include "platform_types.h"
@@ -155,7 +154,6 @@ typedef struct {
int sub_frame_start;
int sub_frame_step;
- unsigned long long gotIQs;
} UE_rxtx_proc_t;
/// Context data structure for eNB subframe processing
diff --git a/openair1/PHY/defs_common.h b/openair1/PHY/defs_common.h
index a371b2334b..86df85db5c 100644
--- a/openair1/PHY/defs_common.h
+++ b/openair1/PHY/defs_common.h
@@ -54,12 +54,11 @@
#include
#include
#include "common_lib.h"
-#include "msc.h"
#include
#include "assertions.h"
//#include
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
#include "platform_types.h"
#define MAX_NUM_RU_PER_eNB 64
diff --git a/openair1/PHY/defs_eNB.h b/openair1/PHY/defs_eNB.h
index 030d50bc04..3a48dc51d6 100644
--- a/openair1/PHY/defs_eNB.h
+++ b/openair1/PHY/defs_eNB.h
@@ -55,11 +55,10 @@
#include
#include "common_lib.h"
-#include "msc.h"
#include "defs_common.h"
#include "defs_RU.h"
#include "impl_defs_top.h"
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
//#include "PHY/CODING/coding_defs.h"
#include "PHY/TOOLS/tools_defs.h"
#include "platform_types.h"
@@ -203,7 +202,7 @@ typedef struct {
int repetition_number[4];
} LTE_eNB_PRACH;
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
#include "PHY/CODING/coding_defs.h"
#include "PHY/TOOLS/tools_defs.h"
#include "PHY/LTE_TRANSPORT/transport_eNB.h"
diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h
index 7c7d30a6e2..c24bd81549 100644
--- a/openair1/PHY/defs_gNB.h
+++ b/openair1/PHY/defs_gNB.h
@@ -779,7 +779,7 @@ typedef struct PHY_VARS_gNB_s {
/// statistics for ULSCH measurement collection
NR_gNB_SCH_STATS_t ulsch_stats[NUMBER_OF_NR_SCH_STATS_MAX];
NR_gNB_UCI_STATS_t uci_stats[NUMBER_OF_NR_UCI_STATS_MAX];
- t_nrPolar_params *uci_polarParams;
+ t_nrPolar_params **polarParams;
/// SRS variables
nr_srs_info_t *nr_srs_info[NUMBER_OF_NR_SRS_MAX];
@@ -856,7 +856,7 @@ typedef struct PHY_VARS_gNB_s {
/*
time_stats_t phy_proc;
*/
- time_stats_t *phy_proc_tx[2];
+ time_stats_t phy_proc_tx;
time_stats_t phy_proc_rx;
time_stats_t rx_prach;
/*
@@ -973,7 +973,6 @@ typedef struct processingData_L1tx {
uint16_t num_pdsch_slot;
int num_dl_pdcch;
int num_ul_pdcch;
- time_stats_t phy_proc_tx;
} processingData_L1tx_t;
#endif
diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h
index bca956bf75..f4b49ececa 100644
--- a/openair1/PHY/defs_nr_UE.h
+++ b/openair1/PHY/defs_nr_UE.h
@@ -44,7 +44,6 @@
#include
#include
#include "common_lib.h"
-#include "msc.h"
#include "fapi_nr_ue_interface.h"
#include "assertions.h"
@@ -97,7 +96,7 @@
#include "impl_defs_top.h"
#include "impl_defs_nr.h"
-#include "PHY/TOOLS/time_meas.h"
+#include "time_meas.h"
#include "PHY/CODING/coding_defs.h"
#include "PHY/TOOLS/tools_defs.h"
#include "platform_types.h"
@@ -815,7 +814,6 @@ typedef struct {
fapi_nr_config_request_t nrUE_config;
- t_nrPolar_params *polarList;
NR_UE_PDSCH *pdsch_vars[RX_NB_TH_MAX][NUMBER_OF_CONNECTED_gNB_MAX+1]; // two RxTx Threads
NR_UE_PBCH *pbch_vars[NUMBER_OF_CONNECTED_gNB_MAX];
NR_UE_PDCCH *pdcch_vars[RX_NB_TH_MAX][NUMBER_OF_CONNECTED_gNB_MAX];
diff --git a/openair1/PHY/defs_nr_common.h b/openair1/PHY/defs_nr_common.h
index 78599dcbb6..d3352fb520 100644
--- a/openair1/PHY/defs_nr_common.h
+++ b/openair1/PHY/defs_nr_common.h
@@ -387,8 +387,6 @@ struct NR_DL_FRAME_PARMS {
uint8_t N_ssb;
/// SSB index
uint8_t ssb_index;
- /// PBCH polar encoder params
- t_nrPolar_params pbch_polar_params;
/// OFDM symbol offset divisor for UL
uint32_t ofdm_offset_divisor;
};
diff --git a/openair1/PHY/thread_NR_UE.h b/openair1/PHY/thread_NR_UE.h
index 901d8faec9..a3cc2d9782 100644
--- a/openair1/PHY/thread_NR_UE.h
+++ b/openair1/PHY/thread_NR_UE.h
@@ -62,7 +62,6 @@ typedef struct {
int sub_frame_start;
int sub_frame_step;
- unsigned long long gotIQs;
uint8_t decoder_thread_available1;
int dci_err_cnt;
} UE_nr_rxtx_proc_t;
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 569d2a464a..ee1e0be49a 100644
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -43,7 +43,6 @@
#include
#include "assertions.h"
-#include "msc.h"
#include
diff --git a/openair1/SCHED/prach_procedures.c b/openair1/SCHED/prach_procedures.c
index 4d0fe428e8..805354ce1b 100644
--- a/openair1/SCHED/prach_procedures.c
+++ b/openair1/SCHED/prach_procedures.c
@@ -40,7 +40,6 @@
#include "assertions.h"
-#include "msc.h"
#include
diff --git a/openair1/SCHED/ru_procedures.c b/openair1/SCHED/ru_procedures.c
index 15eba7b5bc..dc84279a96 100644
--- a/openair1/SCHED/ru_procedures.c
+++ b/openair1/SCHED/ru_procedures.c
@@ -69,7 +69,6 @@
#include "assertions.h"
#include "common/utils/system.h"
-#include "msc.h"
#include
diff --git a/openair1/SCHED_NR/fapi_nr_l1.c b/openair1/SCHED_NR/fapi_nr_l1.c
index 2dbaa738dc..4b9f9534f0 100644
--- a/openair1/SCHED_NR/fapi_nr_l1.c
+++ b/openair1/SCHED_NR/fapi_nr_l1.c
@@ -165,6 +165,8 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){
notifiedFIFO_elt_t *res;
res = pullTpool(gNB->L1_tx_free, gNB->threadPool);
processingData_L1tx_t *msgTx = (processingData_L1tx_t *)NotifiedFifoData(res);
+ const time_stats_t ts = exec_time_stats_NotifiedFIFO(res);
+ merge_meas(&gNB->phy_proc_tx, &ts);
msgTx->num_pdsch_slot=0;
msgTx->num_dl_pdcch=0;
diff --git a/openair1/SCHED_NR/nr_prach_procedures.c b/openair1/SCHED_NR/nr_prach_procedures.c
index 1ea8dbdf3c..b0f59d5f47 100644
--- a/openair1/SCHED_NR/nr_prach_procedures.c
+++ b/openair1/SCHED_NR/nr_prach_procedures.c
@@ -41,7 +41,6 @@
#include "assertions.h"
-#include "msc.h"
#include
diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c
index 4d3174007a..b90f14a129 100644
--- a/openair1/SCHED_NR/nr_ru_procedures.c
+++ b/openair1/SCHED_NR/nr_ru_procedures.c
@@ -44,7 +44,6 @@
#include "T.h"
#include "assertions.h"
-#include "msc.h"
#include
// RU OFDM Modulator gNodeB
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index 7e9f4d091a..1ddf4b0d07 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -39,7 +39,6 @@
#include "executables/softmodem-common.h"
#include "assertions.h"
-#include "msc.h"
#include
@@ -89,7 +88,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_
nr_generate_pss(&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
nr_generate_sss(&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
- if (cfg->carrier_config.num_tx_ant.value <= 4)
+ if (fp->Lmax == 4)
nr_generate_pbch_dmrs(gNB->nr_gold_pbch_dmrs[n_hf][ssb_index&7],&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
else
nr_generate_pbch_dmrs(gNB->nr_gold_pbch_dmrs[0][ssb_index&7],&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
@@ -135,8 +134,6 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX+offset,1);
- if (do_meas==1) start_meas(&msgTx->phy_proc_tx);
-
// clear the transmit data array and beam index for the current slot
for (aa=0; aacarrier_config.num_tx_ant.value; aa++) {
memset(&gNB->common_vars.txdataF[aa][txdataF_offset],0,fp->samples_per_slot_wCP*sizeof(int32_t));
@@ -190,12 +187,10 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx,
//apply the OFDM symbol rotation here
for (aa=0; aacarrier_config.num_tx_ant.value; aa++) {
- apply_nr_rotation(fp,(int16_t*) &gNB->common_vars.txdataF[aa][txdataF_offset],slot,0,fp->Ncp==EXTENDED?12:14,fp->ofdm_symbol_size);
+ apply_nr_rotation(fp,(int16_t*) &gNB->common_vars.txdataF[aa][txdataF_offset],slot,0,fp->Ncp==EXTENDED?12:14,fp->ofdm_symbol_size);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX+offset,0);
-
- if (do_meas==1) stop_meas(&msgTx->phy_proc_tx);
}
void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req) {
diff --git a/openair1/SCHED_NR/sched_nr.h b/openair1/SCHED_NR/sched_nr.h
index d7e0332b85..2124397c47 100644
--- a/openair1/SCHED_NR/sched_nr.h
+++ b/openair1/SCHED_NR/sched_nr.h
@@ -54,5 +54,6 @@ void nr_fep_full(RU_t *ru, int slot);
void nr_fep_full_2thread(RU_t *ru, int slot);
void feptx_prec(RU_t *ru,int frame_tx,int tti_tx);
int nr_phy_init_RU(RU_t *ru);
+void nr_phy_free_RU(RU_t *ru);
#endif
diff --git a/openair1/SCHED_NR/vars.h b/openair1/SCHED_NR/vars.h
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/openair1/SCHED_NR_UE/defs.h b/openair1/SCHED_NR_UE/defs.h
index b85d4c1b50..c362bb470f 100644
--- a/openair1/SCHED_NR_UE/defs.h
+++ b/openair1/SCHED_NR_UE/defs.h
@@ -295,9 +295,6 @@ uint8_t nr_pdcch_alloc2ul_subframe(NR_DL_FRAME_PARMS *frame_parms,uint8_t n);
uint32_t nr_pdcch_alloc2ul_frame(NR_DL_FRAME_PARMS *frame_parms,uint32_t frame, uint8_t n);
-uint16_t nr_get_Np(uint8_t N_RB_DL,uint8_t nCCE,uint8_t plus1);
-
-
int8_t nr_find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB);
/*! \brief UL time alignment procedures for TA application
diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
index 4f4757ec5a..8af91b1f38 100644
--- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
@@ -90,8 +90,11 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
rx_ind->pdu_list[j].pdu = CALLOC(tx_req_body->pdu_length, sizeof(*rx_ind->pdu_list[j].pdu));
memcpy(rx_ind->pdu_list[j].pdu, tx_req_body->pdu, tx_req_body->pdu_length * sizeof(*rx_ind->pdu_list[j].pdu));
rx_ind->pdu_list[j].rnti = pusch_config_pdu->rnti;
- rx_ind->pdu_list[j].timing_advance = scheduled_response->tx_request->tx_config.timing_advance;
- rx_ind->pdu_list[j].ul_cqi = scheduled_response->tx_request->tx_config.ul_cqi;
+ /* TODO: Implement channel modeling to abstract TA and CQI. For now,
+ we hard code the values below since they are set in L1 and we are
+ abstracting L1. */
+ rx_ind->pdu_list[j].timing_advance = 31;
+ rx_ind->pdu_list[j].ul_cqi = 255;
char buffer[1024];
hexdump(rx_ind->pdu_list[j].pdu, rx_ind->pdu_list[j].pdu_length, buffer, sizeof(buffer));
LOG_D(NR_MAC, "Hexdump of pdu %s before queuing rx_ind\n",
@@ -113,7 +116,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
crc_ind->crc_list[j].num_cb = pusch_config_pdu->pusch_data.num_cb;
crc_ind->crc_list[j].rnti = pusch_config_pdu->rnti;
crc_ind->crc_list[j].tb_crc_status = 0;
- crc_ind->crc_list[j].timing_advance = scheduled_response->tx_request->tx_config.timing_advance;
+ crc_ind->crc_list[j].timing_advance = 31;
crc_ind->crc_list[j].ul_cqi = 255;
}
@@ -204,12 +207,66 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response
}
}
}
+ dl_config->number_pdus = 0;
}
}
return 0;
}
+
+void configure_dlsch(NR_UE_DLSCH_t *dlsch0,
+ fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu,
+ module_id_t module_id,
+ int rnti) {
+
+ const uint8_t current_harq_pid = dlsch_config_pdu->harq_process_nbr;
+ dlsch0->current_harq_pid = current_harq_pid;
+ dlsch0->active = 1;
+ dlsch0->rnti = rnti;
+
+ LOG_D(PHY,"current_harq_pid = %d\n", current_harq_pid);
+
+ NR_DL_UE_HARQ_t *dlsch0_harq = dlsch0->harq_processes[current_harq_pid];
+ AssertFatal(dlsch0_harq, "no harq_process for HARQ PID %d\n", current_harq_pid);
+
+ dlsch0_harq->BWPStart = dlsch_config_pdu->BWPStart;
+ dlsch0_harq->BWPSize = dlsch_config_pdu->BWPSize;
+ dlsch0_harq->nb_rb = dlsch_config_pdu->number_rbs;
+ dlsch0_harq->start_rb = dlsch_config_pdu->start_rb;
+ dlsch0_harq->nb_symbols = dlsch_config_pdu->number_symbols;
+ dlsch0_harq->start_symbol = dlsch_config_pdu->start_symbol;
+ dlsch0_harq->dlDmrsSymbPos = dlsch_config_pdu->dlDmrsSymbPos;
+ dlsch0_harq->dmrsConfigType = dlsch_config_pdu->dmrsConfigType;
+ dlsch0_harq->n_dmrs_cdm_groups = dlsch_config_pdu->n_dmrs_cdm_groups;
+ dlsch0_harq->dmrs_ports = dlsch_config_pdu->dmrs_ports;
+ dlsch0_harq->mcs = dlsch_config_pdu->mcs;
+ dlsch0_harq->rvidx = dlsch_config_pdu->rv;
+ dlsch0->g_pucch = dlsch_config_pdu->accumulated_delta_PUCCH;
+ //get nrOfLayers from DCI info
+ uint8_t Nl = 0;
+ for (int i = 0; i < 12; i++) { // max 12 ports
+ if ((dlsch_config_pdu->dmrs_ports>>i)&0x01) Nl += 1;
+ }
+ dlsch0_harq->Nl = Nl;
+ dlsch0_harq->mcs_table=dlsch_config_pdu->mcs_table;
+ downlink_harq_process(dlsch0_harq, dlsch0->current_harq_pid, dlsch_config_pdu->ndi, dlsch_config_pdu->rv, dlsch0->rnti_type);
+ if (dlsch0_harq->status != ACTIVE) {
+ // dlsch0_harq->status not ACTIVE due to false retransmission
+ // Reset the following flag to skip PDSCH procedures in that case and retrasmit harq status
+ dlsch0->active = 0;
+ update_harq_status(module_id,dlsch0->current_harq_pid,dlsch0_harq->ack);
+ }
+ /* PTRS */
+ dlsch0_harq->PTRSFreqDensity = dlsch_config_pdu->PTRSFreqDensity;
+ dlsch0_harq->PTRSTimeDensity = dlsch_config_pdu->PTRSTimeDensity;
+ dlsch0_harq->PTRSPortIndex = dlsch_config_pdu->PTRSPortIndex;
+ dlsch0_harq->nEpreRatioOfPDSCHToPTRS = dlsch_config_pdu->nEpreRatioOfPDSCHToPTRS;
+ dlsch0_harq->PTRSReOffset = dlsch_config_pdu->PTRSReOffset;
+ dlsch0_harq->pduBitmap = dlsch_config_pdu->pduBitmap;
+ LOG_D(MAC, ">>>> \tdlsch0->g_pucch = %d\tdlsch0_harq.mcs = %d\n", dlsch0->g_pucch, dlsch0_harq->mcs);
+}
+
int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
bool found = false;
@@ -217,7 +274,6 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
module_id_t module_id = scheduled_response->module_id;
uint8_t cc_id = scheduled_response->CC_id, thread_id;
- uint32_t i;
int slot = scheduled_response->slot;
// Note: we have to handle the thread IDs for this. To be revisited completely.
@@ -229,87 +285,53 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
if(scheduled_response->dl_config != NULL){
fapi_nr_dl_config_request_t *dl_config = scheduled_response->dl_config;
-
+ fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu;
+ fapi_nr_dl_config_dci_dl_pdu_rel15_t *pdcch_config;
pdcch_vars->nb_search_space = 0;
- for (i = 0; i < dl_config->number_pdus; ++i){
+ for (int i = 0; i < dl_config->number_pdus; ++i){
AssertFatal(dl_config->number_pdus < FAPI_NR_DL_CONFIG_LIST_NUM,"dl_config->number_pdus %d out of bounds\n",dl_config->number_pdus);
AssertFatal(dl_config->dl_config_list[i].pdu_type<=FAPI_NR_DL_CONFIG_TYPES,"pdu_type %d > 2\n",dl_config->dl_config_list[i].pdu_type);
LOG_D(PHY, "In %s: frame %d slot %d received 1 DL %s PDU of %d total DL PDUs:\n",
__FUNCTION__, scheduled_response->frame, slot, dl_pdu_type[dl_config->dl_config_list[i].pdu_type - 1], dl_config->number_pdus);
- if (dl_config->dl_config_list[i].pdu_type == FAPI_NR_DL_CONFIG_TYPE_DCI) {
-
- fapi_nr_dl_config_dci_dl_pdu_rel15_t *pdcch_config = &dl_config->dl_config_list[i].dci_config_pdu.dci_config_rel15;
- memcpy((void*)&pdcch_vars->pdcch_config[pdcch_vars->nb_search_space],(void*)pdcch_config,sizeof(*pdcch_config));
- pdcch_vars->nb_search_space = pdcch_vars->nb_search_space + 1;
- pdcch_vars->sfn = scheduled_response->frame;
- pdcch_vars->slot = slot;
- LOG_D(PHY,"Number of DCI SearchSpaces %d\n",pdcch_vars->nb_search_space);
-
- } else {
-
- fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu = &dl_config->dl_config_list[i].dlsch_config_pdu.dlsch_config_rel15;
- uint8_t current_harq_pid = dlsch_config_pdu->harq_process_nbr;
-
- if (dl_config->dl_config_list[i].pdu_type == FAPI_NR_DL_CONFIG_TYPE_DLSCH){
- dlsch0 = PHY_vars_UE_g[module_id][cc_id]->dlsch[thread_id][0][0];
- }
- else if (dl_config->dl_config_list[i].pdu_type == FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH){
+ switch(dl_config->dl_config_list[i].pdu_type) {
+ case FAPI_NR_DL_CONFIG_TYPE_DCI:
+ pdcch_config = &dl_config->dl_config_list[i].dci_config_pdu.dci_config_rel15;
+ memcpy(&pdcch_vars->pdcch_config[pdcch_vars->nb_search_space],pdcch_config,sizeof(*pdcch_config));
+ pdcch_vars->nb_search_space = pdcch_vars->nb_search_space + 1;
+ pdcch_vars->sfn = scheduled_response->frame;
+ pdcch_vars->slot = slot;
+ LOG_D(PHY,"Number of DCI SearchSpaces %d\n",pdcch_vars->nb_search_space);
+ break;
+ case FAPI_NR_DL_CONFIG_TYPE_CSI_IM:
+ LOG_I(PHY,"Received CSI-IM PDU at FAPI\n");
+ break;
+ case FAPI_NR_DL_CONFIG_TYPE_CSI_RS:
+ LOG_I(PHY,"Received CSI-RS PDU at FAPI\n");
+ break;
+ case FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH:
+ dlsch_config_pdu = &dl_config->dl_config_list[i].dlsch_config_pdu.dlsch_config_rel15;
dlsch0 = PHY_vars_UE_g[module_id][cc_id]->dlsch_ra[0];
dlsch0->rnti_type = _RA_RNTI_;
- dlsch0->harq_processes[current_harq_pid]->status = ACTIVE;
- }
- else if (dl_config->dl_config_list[i].pdu_type == FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH){
+ dlsch0->harq_processes[dlsch_config_pdu->harq_process_nbr]->status = ACTIVE;
+ configure_dlsch(dlsch0, dlsch_config_pdu, module_id,
+ dl_config->dl_config_list[i].dlsch_config_pdu.rnti);
+ break;
+ case FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH:
+ dlsch_config_pdu = &dl_config->dl_config_list[i].dlsch_config_pdu.dlsch_config_rel15;
dlsch0 = PHY_vars_UE_g[module_id][cc_id]->dlsch_SI[0];
dlsch0->rnti_type = _SI_RNTI_;
- dlsch0->harq_processes[current_harq_pid]->status = ACTIVE;
- }
-
- dlsch0->current_harq_pid = current_harq_pid;
- dlsch0->active = 1;
- dlsch0->rnti = dl_config->dl_config_list[i].dlsch_config_pdu.rnti;
-
- LOG_D(PHY,"slot %d current_harq_pid = %d\n",slot, current_harq_pid);
-
- NR_DL_UE_HARQ_t *dlsch0_harq = dlsch0->harq_processes[current_harq_pid];
- if (dlsch0_harq){
-
- dlsch0_harq->BWPStart = dlsch_config_pdu->BWPStart;
- dlsch0_harq->BWPSize = dlsch_config_pdu->BWPSize;
- dlsch0_harq->nb_rb = dlsch_config_pdu->number_rbs;
- dlsch0_harq->start_rb = dlsch_config_pdu->start_rb;
- dlsch0_harq->nb_symbols = dlsch_config_pdu->number_symbols;
- dlsch0_harq->start_symbol = dlsch_config_pdu->start_symbol;
- dlsch0_harq->dlDmrsSymbPos = dlsch_config_pdu->dlDmrsSymbPos;
- dlsch0_harq->dmrsConfigType = dlsch_config_pdu->dmrsConfigType;
- dlsch0_harq->n_dmrs_cdm_groups = dlsch_config_pdu->n_dmrs_cdm_groups;
- dlsch0_harq->mcs = dlsch_config_pdu->mcs;
- dlsch0_harq->rvidx = dlsch_config_pdu->rv;
- dlsch0->g_pucch = dlsch_config_pdu->accumulated_delta_PUCCH;
- //get nrOfLayers from DCI info
- uint8_t Nl = 0;
- for (i = 0; i < 4; i++) {
- if (dlsch_config_pdu->dmrs_ports[i] >= i) Nl += 1;
- }
- dlsch0_harq->Nl = Nl;
- dlsch0_harq->mcs_table=dlsch_config_pdu->mcs_table;
- downlink_harq_process(dlsch0_harq, dlsch0->current_harq_pid, dlsch_config_pdu->ndi, dlsch_config_pdu->rv, dlsch0->rnti_type);
- if (dlsch0_harq->status != ACTIVE) {
- // dlsch0_harq->status not ACTIVE due to false retransmission
- // Reset the following flag to skip PDSCH procedures in that case and retrasmit harq status
- dlsch0->active = 0;
- update_harq_status(module_id,dlsch0->current_harq_pid,dlsch0_harq->ack);
- }
- /* PTRS */
- dlsch0_harq->PTRSFreqDensity = dlsch_config_pdu->PTRSFreqDensity;
- dlsch0_harq->PTRSTimeDensity = dlsch_config_pdu->PTRSTimeDensity;
- dlsch0_harq->PTRSPortIndex = dlsch_config_pdu->PTRSPortIndex;
- dlsch0_harq->nEpreRatioOfPDSCHToPTRS = dlsch_config_pdu->nEpreRatioOfPDSCHToPTRS;
- dlsch0_harq->PTRSReOffset = dlsch_config_pdu->PTRSReOffset;
- dlsch0_harq->pduBitmap = dlsch_config_pdu->pduBitmap;
- LOG_D(MAC, ">>>> \tdlsch0->g_pucch = %d\tdlsch0_harq.mcs = %d\n", dlsch0->g_pucch, dlsch0_harq->mcs);
- }
+ dlsch0->harq_processes[dlsch_config_pdu->harq_process_nbr]->status = ACTIVE;
+ configure_dlsch(dlsch0, dlsch_config_pdu, module_id,
+ dl_config->dl_config_list[i].dlsch_config_pdu.rnti);
+ break;
+ case FAPI_NR_DL_CONFIG_TYPE_DLSCH:
+ dlsch_config_pdu = &dl_config->dl_config_list[i].dlsch_config_pdu.dlsch_config_rel15;
+ dlsch0 = PHY_vars_UE_g[module_id][cc_id]->dlsch[thread_id][0][0];
+ configure_dlsch(dlsch0, dlsch_config_pdu, module_id,
+ dl_config->dl_config_list[i].dlsch_config_pdu.rnti);
+ break;
}
}
dl_config->number_pdus = 0;
@@ -320,9 +342,9 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
fapi_nr_ul_config_request_t *ul_config = scheduled_response->ul_config;
int pdu_done = 0;
pthread_mutex_lock(&ul_config->mutex_ul_config);
- LOG_D(PHY, "%d.%d ul S ul_config %p pdu_done %d number_pdus %d\n", scheduled_response->frame, slot, ul_config, pdu_done, ul_config->number_pdus);
- for (i = 0; i < ul_config->number_pdus; ++i){
+ LOG_D(PHY, "%d.%d ul S ul_config %p pdu_done %d number_pdus %d\n", scheduled_response->frame, slot, ul_config, pdu_done, ul_config->number_pdus);
+ for (int i = 0; i < ul_config->number_pdus; ++i){
AssertFatal(ul_config->ul_config_list[i].pdu_type <= FAPI_NR_UL_CONFIG_TYPES,"pdu_type %d out of bounds\n",ul_config->ul_config_list[i].pdu_type);
LOG_D(PHY, "In %s: processing %s PDU of %d total UL PDUs (ul_config %p) \n", __FUNCTION__, ul_pdu_type[ul_config->ul_config_list[i].pdu_type - 1], ul_config->number_pdus, ul_config);
diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
index 97a7e2e489..0d284de71c 100644
--- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
@@ -561,23 +561,24 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int gNB_
uint16_t s1 = dlsch0_harq->nb_symbols;
bool is_SI = dlsch0->rnti_type == _SI_RNTI_;
- LOG_D(PHY,"[UE %d] PDSCH type %d active in nr_slot_rx %d, harq_pid %d (%d), rb_start %d, nb_rb %d, symbol_start %d, nb_symbols %d, DMRS mask %x\n",
- ue->Mod_id,pdsch,nr_slot_rx,harq_pid,dlsch0_harq->status,pdsch_start_rb,pdsch_nb_rb,s0,s1,dlsch0_harq->dlDmrsSymbPos);
+ LOG_D(PHY,"[UE %d] PDSCH type %d active in nr_slot_rx %d, harq_pid %d (%d), rb_start %d, nb_rb %d, symbol_start %d, nb_symbols %d, DMRS mask %x, Nl %d\n",
+ ue->Mod_id,pdsch,nr_slot_rx,harq_pid,dlsch0_harq->status,pdsch_start_rb,pdsch_nb_rb,s0,s1,dlsch0_harq->dlDmrsSymbPos, dlsch0_harq->Nl);
for (m = s0; m < (s0 +s1); m++) {
if (dlsch0_harq->dlDmrsSymbPos & (1 << m)) {
for (uint8_t aatx=0; aatxNl; aatx++) {//for MIMO Config: it shall loop over no_layers
+ LOG_D(PHY,"PDSCH Channel estimation gNB id %d, PDSCH antenna port %d, slot %d, symbol %d\n",0,aatx,nr_slot_rx,m);
nr_pdsch_channel_estimation(ue,
proc,
gNB_id,
is_SI,
nr_slot_rx,
- aatx /*p*/,
+ get_dmrs_port(aatx,dlsch0_harq->dmrs_ports),
m,
BWPStart,
+ dlsch0_harq->dmrsConfigType,
ue->frame_parms.first_carrier_offset+(BWPStart + pdsch_start_rb)*12,
pdsch_nb_rb);
- LOG_D(PHY,"PDSCH Channel estimation gNB id %d, PDSCH antenna port %d, slot %d, symbol %d\n",0,aatx,nr_slot_rx,m);
#if 0
///LOG_M: the channel estimation
int nr_frame_rx = proc->frame_rx;
@@ -610,7 +611,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int gNB_
dual_stream_UE = 0;
gNB_id_i = gNB_id+1;
i_mod = 0;
- if (( m==first_symbol_with_data ) && (m<4))
+ if (m==first_symbol_with_data)
first_symbol_flag = 1;
else
first_symbol_flag = 0;
@@ -1528,7 +1529,6 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
// do procedures for C-RNTI
int ret_pdsch = 0;
if (ue->dlsch[proc->thread_id][gNB_id][0]->active == 1) {
-
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_IN);
ret_pdsch = nr_ue_pdsch_procedures(ue,
proc,
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index c1443700f3..231d63cf04 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -64,6 +64,13 @@
void feptx_ofdm(RU_t *ru, int frame, int subframe);
void feptx_prec(RU_t *ru, int frame, int subframe);
+const char *__asan_default_options()
+{
+ /* don't do leak checking in nr_ulsim, not finished yet */
+ return "detect_leaks=0";
+}
+
+
double cpuf;
#define inMicroS(a) (((double)(a))/(get_cpu_freq_GHz()*1000.0))
//#define MCS_COUNT 23//added for PHY abstraction
@@ -122,7 +129,6 @@ void do_OFDM_mod_l(int32_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_
slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1);
for (aa=0; aanb_antennas_tx; aa++) {
- // printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc());
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
@@ -140,7 +146,7 @@ void do_OFDM_mod_l(int32_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_
}
void DL_channel(RU_t *ru,PHY_VARS_UE *UE,uint subframe,int awgn_flag,double SNR, int tx_lev,int hold_channel,int abstx, int num_rounds, int trials, int round, channel_desc_t *eNB2UE[4],
- double *s_re[2],double *s_im[2],double *r_re[2],double *r_im[2],FILE *csv_fd) {
+ double *s_re[NB_ANTENNAS_TX],double *s_im[NB_ANTENNAS_TX],double *r_re[NB_ANTENNAS_RX],double *r_im[NB_ANTENNAS_RX],FILE *csv_fd) {
int i,u;
int aa,aarx,aatx;
double channelx,channely;
@@ -1538,9 +1544,9 @@ int main(int argc, char **argv) {
LOG_M("txsig0.m","txs0", &ru->common.txdata[0][subframe* eNB->frame_parms.samples_per_tti], eNB->frame_parms.samples_per_tti,1,1);
if (transmission_mode<7) {
- LOG_M("txsigF0.m","txsF0x", &ru->common.txdataF_BF[0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
+ LOG_M("txsigF0.m","txsF0x", &ru->common.txdataF_BF[0][0],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
} else if (transmission_mode == 7) {
- LOG_M("txsigF0.m","txsF0", &ru->common.txdataF_BF[5][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
+ LOG_M("txsigF0.m","txsF0", &ru->common.txdataF_BF[5][0],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1);
LOG_M("txsigF0_BF.m","txsF0_BF", &ru->common.txdataF_BF[0][0],eNB->frame_parms.ofdm_symbol_size,1,1);
}
}
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
index 3b4e6782da..57c06e3b13 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
@@ -112,7 +112,6 @@ void do_OFDM_mod_l(int32_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_
slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1);
for (aa=0; aanb_antennas_tx; aa++) {
- // printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc());
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
diff --git a/openair1/SIMULATION/LTE_PHY/framegen.c b/openair1/SIMULATION/LTE_PHY/framegen.c
index f5b1e6d45e..b9f0221b2d 100644
--- a/openair1/SIMULATION/LTE_PHY/framegen.c
+++ b/openair1/SIMULATION/LTE_PHY/framegen.c
@@ -333,7 +333,6 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_
slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1);
for (aa=0; aanb_antennas_tx; aa++) {
- // printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc());
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c
index 31c3b47227..7efe9f4530 100644
--- a/openair1/SIMULATION/LTE_PHY/mbmssim.c
+++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c
@@ -121,7 +121,6 @@ void do_OFDM_mod_l(int32_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_
slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1);
for (aa=0; aanb_antennas_tx; aa++) {
- // printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc());
if (frame_parms->Ncp == 1)
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
&txdata[aa][slot_offset], // output
diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c
index 1b1058535e..a1894d03d7 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsim.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsim.c
@@ -58,6 +58,12 @@
#include "common/ran_context.h"
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
+const char *__asan_default_options()
+{
+ /* don't do leak checking in ulsim, not finished yet */
+ return "detect_leaks=0";
+}
+
double cpuf;
#define inMicroS(a) (((double)(a))/(get_cpu_freq_GHz()*1000.0))
//#define MCS_COUNT 23//added for PHY abstraction
@@ -334,10 +340,10 @@ int main(int argc, char **argv) {
double s_re1[30720],s_im1[30720],r_re1[30720],r_im1[30720];
double r_re2[30720],r_im2[30720];
double r_re3[30720],r_im3[30720];
- double *s_re[2]= {s_re0,s_re1};
- double *s_im[2]= {s_im0,s_im1};
- double *r_re[4]= {r_re0,r_re1,r_re2,r_re3};
- double *r_im[4]= {r_im0,r_im1,r_im2,r_im3};
+ double *s_re[NB_ANTENNAS_TX]= {s_re0,s_re1, NULL, NULL};
+ double *s_im[NB_ANTENNAS_TX]= {s_im0,s_im1, NULL, NULL};
+ double *r_re[NB_ANTENNAS_RX]= {r_re0,r_re1,r_re2,r_re3};
+ double *r_im[NB_ANTENNAS_RX]= {r_im0,r_im1,r_im2,r_im3};
double forgetting_factor=0.0; //in [0,1] 0 means a new channel every time, 1 means keep the same channel
double iqim=0.0;
int cqi_error,cqi_errors,ack_errors,cqi_crc_falsepositives,cqi_crc_falsenegatives;
diff --git a/openair1/SIMULATION/NR_PHY/dlschsim.c b/openair1/SIMULATION/NR_PHY/dlschsim.c
index f566b93d9c..f3aae9a3f7 100644
--- a/openair1/SIMULATION/NR_PHY/dlschsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlschsim.c
@@ -29,6 +29,7 @@
#include "common/config/config_userapi.h"
#include "common/utils/LOG/log.h"
#include "common/utils/LOG/vcd_signal_dumper.h"
+#include "common/utils/load_module_shlib.h"
#include "T.h"
#include "PHY/defs_gNB.h"
#include "PHY/defs_nr_common.h"
@@ -355,7 +356,7 @@ int main(int argc, char **argv)
}
RC.gNB = (PHY_VARS_gNB **) malloc(sizeof(PHY_VARS_gNB *));
- RC.gNB[0] = malloc(sizeof(PHY_VARS_gNB));
+ RC.gNB[0] = calloc(1, sizeof(PHY_VARS_gNB));
gNB = RC.gNB[0];
gNB->threadPool = (tpool_t*)malloc(sizeof(tpool_t));
initTpool(gNBthreads, gNB->threadPool, true);
@@ -412,7 +413,7 @@ int main(int argc, char **argv)
memcpy(&UE->frame_parms, frame_parms, sizeof(NR_DL_FRAME_PARMS));
//phy_init_nr_top(frame_parms);
- if (init_nr_ue_signal(UE, 1, 0) != 0) {
+ if (init_nr_ue_signal(UE, 1) != 0) {
printf("Error at UE NR initialisation\n");
exit(-1);
}
@@ -421,8 +422,7 @@ int main(int argc, char **argv)
//init_nr_ue_transport(UE, 0);
for (int sf = 0; sf < 2; sf++) {
for (i = 0; i < 2; i++) {
- UE->dlsch[sf][0][i] = new_nr_ue_dlsch(Kmimo, 8, Nsoft, 5, N_RB_DL,
- 0);
+ UE->dlsch[sf][0][i] = new_nr_ue_dlsch(Kmimo, 8, Nsoft, 5, N_RB_DL);
if (!UE->dlsch[sf][0][i]) {
printf("Can't get ue dlsch structures\n");
@@ -433,8 +433,6 @@ int main(int argc, char **argv)
}
}
- UE->dlsch_SI[0] = new_nr_ue_dlsch(1, 1, Nsoft, 5, N_RB_DL, 0);
- UE->dlsch_ra[0] = new_nr_ue_dlsch(1, 1, Nsoft, 5, N_RB_DL, 0);
unsigned char harq_pid = 0; //dlsch->harq_ids[subframe];
processingData_L1tx_t msgDataTx;
init_DLSCH_struct(gNB, &msgDataTx);
@@ -472,16 +470,13 @@ int main(int argc, char **argv)
rel15->dlDmrsSymbPos = 4;
rel15->mcsIndex[0] = Imcs;
rel15->numDmrsCdmGrpsNoData = 1;
- double *modulated_input = malloc16(sizeof(double) * 16 * 68 * 384); // [hna] 16 segments, 68*Zc
- short *channel_output_fixed = malloc16(sizeof(short) * 16 * 68 * 384);
- short *channel_output_uncoded = malloc16(sizeof(unsigned short) * 16 * 68 * 384);
+ double modulated_input[16 * 68 * 384]; // [hna] 16 segments, 68*Zc
+ short channel_output_fixed[16 * 68 * 384];
//unsigned char *estimated_output;
- unsigned char *estimated_output_bit;
- unsigned char *test_input_bit;
unsigned int errors_bit = 0;
- test_input_bit = (unsigned char *) malloc16(sizeof(unsigned char) * 16 * 68 * 384);
+ unsigned char test_input_bit[16 * 68 * 384];
//estimated_output = (unsigned char *) malloc16(sizeof(unsigned char) * 16 * 68 * 384);
- estimated_output_bit = (unsigned char *) malloc16(sizeof(unsigned char) * 16 * 68 * 384);
+ unsigned char estimated_output_bit[16 * 68 * 384];
NR_UE_DLSCH_t *dlsch0_ue = UE->dlsch[0][0][0];
NR_DL_UE_HARQ_t *harq_process = dlsch0_ue->harq_processes[harq_pid];
harq_process->mcs = Imcs;
@@ -495,9 +490,10 @@ int main(int argc, char **argv)
harq_process->dlDmrsSymbPos = 4;
harq_process->n_dmrs_cdm_groups = 1;
printf("harq process ue mcs = %d Qm = %d, symb %d\n", harq_process->mcs, harq_process->Qm, nb_symb_sch);
+
unsigned char *test_input;
test_input = (unsigned char *) malloc16(sizeof(unsigned char) * TBS / 8);
-
+ //unsigned char test_input[TBS / 8] __attribute__ ((aligned(16)));
for (i = 0; i < TBS / 8; i++)
test_input[i] = (unsigned char) rand();
@@ -554,12 +550,6 @@ int main(int argc, char **argv)
i,modulated_input[i],
i,channel_output_fixed[i]);
*/
-
- //Uncoded BER
- if (channel_output_fixed[i] < 0)
- channel_output_uncoded[i] = 1; //QPSK demod
- else
- channel_output_uncoded[i] = 0;
}
#ifdef DEBUG_CODER
@@ -641,12 +631,22 @@ int main(int argc, char **argv)
}
}*/
- for (i = 0; i < 2; i++) {
- printf("gNB %d\n", i);
- free_gNB_dlsch(&(msgDataTx.dlsch[0][i]),N_RB_DL);
- printf("UE %d\n", i);
- free_nr_ue_dlsch(&(UE->dlsch[0][0][i]),N_RB_DL);
- }
+ free(test_input);
+
+ free_channel_desc_scm(gNB2UE);
+
+ reset_DLSCH_struct(gNB, &msgDataTx);
+
+ phy_free_nr_gNB(gNB);
+ free(gNB->threadPool);
+ free(RC.gNB[0]);
+ free(RC.gNB);
+
+ for (int sf = 0; sf < 2; sf++)
+ for (int i = 0; i < 2; i++)
+ free_nr_ue_dlsch(&UE->dlsch[sf][0][i], N_RB_DL);
+ term_nr_ue_signal(UE, 1);
+ free(UE);
for (i = 0; i < 2; i++) {
free(s_re[i]);
@@ -671,6 +671,9 @@ int main(int argc, char **argv)
if (ouput_vcd)
vcd_signal_dumper_close();
+ loader_reset();
+ logTerm();
+
return (n_errors);
}
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index 93368f4ab9..e797c01096 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -73,6 +73,12 @@
#include
#include
+const char *__asan_default_options()
+{
+ /* don't do leak checking in nr_ulsim, not finished yet */
+ return "detect_leaks=0";
+}
+
LCHAN_DESC DCCH_LCHAN_DESC,DTCH_DL_LCHAN_DESC,DTCH_UL_LCHAN_DESC;
rlc_info_t Rlc_info_um,Rlc_info_am_config;
@@ -175,7 +181,12 @@ gtpv1u_update_ngu_tunnel(
return 0;
}
-int ocp_gtpv1u_delete_s1u_tunnel(const instance_t instance, const gtpv1u_enb_delete_tunnel_req_t *const req_pP) {
+int gtpv1u_delete_s1u_tunnel(const instance_t instance, const gtpv1u_enb_delete_tunnel_req_t *const req_pP) {
+ return 0;
+}
+
+int gtpv1u_delete_ngu_tunnel( const instance_t instance,
+ gtpv1u_gnb_delete_tunnel_req_t *req) {
return 0;
}
@@ -271,17 +282,13 @@ void nr_dlsim_preprocessor(module_id_t module_id,
NR_pdsch_semi_static_t *ps = &sched_ctrl->pdsch_semi_static;
- ps->nrOfLayers = g_nrOfLayers;
-
- int dci_format = sched_ctrl->search_space && sched_ctrl->search_space->searchSpaceType->choice.ue_Specific->dci_Formats ?
- NR_DL_DCI_FORMAT_1_1 : NR_DL_DCI_FORMAT_1_0;
-
nr_set_pdsch_semi_static(scc,
UE_info->CellGroup[0],
sched_ctrl->active_bwp,
NULL,
/* tda = */ 2,
- dci_format,
+ g_nrOfLayers,
+ sched_ctrl,
ps);
NR_sched_pdsch_t *sched_pdsch = &sched_ctrl->sched_pdsch;
@@ -434,7 +441,7 @@ int main(int argc, char **argv)
FILE *scg_fd=NULL;
- while ((c = getopt (argc, argv, "f:hA:pf:g:in:s:S:t:x:y:z:M:N:F:GR:dPIL:Ea:b:d:e:m:w:T:U:qX:")) != -1) {
+ while ((c = getopt (argc, argv, "f:hA:pf:g:in:s:S:t:x:y:z:M:N:F:GR:dPIL:Ea:b:d:e:q:m:w:T:U:X:")) != -1) {
switch (c) {
case 'f':
scg_fd = fopen(optarg,"r");
@@ -600,16 +607,17 @@ int main(int argc, char **argv)
case 'b':
g_rbSize = atoi(optarg);
break;
+
case 'D':
dlsch_threads = atoi(optarg);
- break;
+ break;
+
case 'e':
g_mcsIndex = atoi(optarg);
break;
case 'q':
- g_mcsTableIdx = 1;
- get_softmodem_params()->use_256qam_table = 1;
+ g_mcsTableIdx = atoi(optarg);
break;
case 'm':
@@ -673,7 +681,7 @@ int main(int argc, char **argv)
printf("-c Start symbol for PDSCH (fixed for now)\n");
printf("-j Number of symbols for PDSCH (fixed for now)\n");
printf("-e MSC index\n");
- printf("-q Use 2nd MCS table (256 QAM table) for PDSCH\n");
+ printf("-q MCS Table index\n");
printf("-t Acceptable effective throughput (in percentage)\n");
printf("-T Enable PTRS, arguments list L_PTRS{0,1,2} K_PTRS{2,4}, e.g. -T 2 0 2 \n");
printf("-U Change DMRS Config, arguments list DMRS TYPE{0=A,1=B} DMRS AddPos{0:2} DMRS ConfType{1:2}, e.g. -U 3 0 2 1 \n");
@@ -774,10 +782,14 @@ int main(int argc, char **argv)
fill_scc_sim(rrc.carrier.servingcellconfigcommon,&ssb_bitmap,N_RB_DL,N_RB_DL,mu,mu);
ssb_bitmap = 1;// Enable only first SSB with index ssb_indx=0
fix_scc(scc,ssb_bitmap);
-
prepare_scd(scd);
- fill_default_secondaryCellGroup(scc, scd, secondaryCellGroup, 0, 1, n_tx, 6, 0, 0, 0, 0);
+ NR_UE_NR_Capability_t* UE_Capability_nr = CALLOC(1,sizeof(NR_UE_NR_Capability_t));
+ prepare_sim_uecap(UE_Capability_nr,scc,mu,
+ N_RB_DL,g_mcsTableIdx);
+
+ // TODO do a UECAP for phy-sim
+ fill_default_secondaryCellGroup(scc, scd, secondaryCellGroup, UE_Capability_nr, 0, 1, n_tx, 6, 0, 0, 0);
/* RRC parameter validation for secondaryCellGroup */
fix_scd(scd);
@@ -915,16 +927,25 @@ int main(int argc, char **argv)
UE->perfect_ce = 0;
- if (init_nr_ue_signal(UE, 1, 0) != 0)
+ if (init_nr_ue_signal(UE, 1) != 0)
{
printf("Error at UE NR initialisation\n");
exit(-1);
}
- init_nr_ue_transport(UE,0);
+ init_nr_ue_transport(UE);
nr_gold_pbch(UE);
- nr_gold_pdcch(UE,0);
+
+ // compute the scramblingID_pdcch and the gold pdcch
+ UE->scramblingID_pdcch = frame_parms->Nid_cell;
+ nr_gold_pdcch(UE, frame_parms->Nid_cell);
+
+ // compute the scrambling IDs for PDSCH DMRS
+ for (int i = 0; i < 2; i++)
+ UE->scramblingID[i] = frame_parms->Nid_cell;
+
+ nr_gold_pdsch(UE, UE->scramblingID);
nr_l2_init_ue(NULL);
UE_mac = get_mac_inst(0);
@@ -997,8 +1018,6 @@ int main(int argc, char **argv)
msgDataTx->slot = slot;
msgDataTx->frame = frame;
memset(msgDataTx->ssb, 0, 64*sizeof(NR_gNB_SSB_t));
- reset_meas(&msgDataTx->phy_proc_tx);
- gNB->phy_proc_tx[0] = &msgDataTx->phy_proc_tx;
for (SNR = snr0; SNR < snr1; SNR += .2) {
@@ -1216,7 +1235,7 @@ int main(int argc, char **argv)
nr_ue_dcireq(&dcireq); //to be replaced with function pointer later
nr_ue_scheduled_response(&scheduled_response);
-
+
phy_procedures_nrUE_RX(UE,
&UE_proc,
0,
@@ -1312,7 +1331,7 @@ int main(int argc, char **argv)
printf("\ngNB TX function statistics (per %d us slot, NPRB %d, mcs %d, block %d)\n",
1000>>*scc->ssbSubcarrierSpacing, g_rbSize, g_mcsIndex,
msgDataTx->dlsch[0][0]->harq_process.pdsch_pdu.pdsch_pdu_rel15.TBSize[0]<<3);
- printDistribution(gNB->phy_proc_tx[0],table_tx,"PHY proc tx");
+ printDistribution(&gNB->phy_proc_tx,table_tx,"PHY proc tx");
printStatIndent2(&gNB->dlsch_encoding_stats,"DLSCH encoding time");
printStatIndent3(&gNB->dlsch_segmentation_stats,"DLSCH segmentation time");
printStatIndent3(&gNB->tinput,"DLSCH LDPC input processing time");
diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c
index 0f5752c227..f3a8d21fdd 100644
--- a/openair1/SIMULATION/NR_PHY/pbchsim.c
+++ b/openair1/SIMULATION/NR_PHY/pbchsim.c
@@ -27,6 +27,7 @@
#include
#include "common/config/config_userapi.h"
#include "common/utils/LOG/log.h"
+#include "common/utils/load_module_shlib.h"
#include "common/ran_context.h"
#include "common/utils/nr/nr_common.h"
#include "PHY/types.h"
@@ -438,12 +439,13 @@ int main(int argc, char **argv)
printf("Initializing gNodeB for mu %d, N_RB_DL %d\n",mu,N_RB_DL);
RC.gNB = (PHY_VARS_gNB**) malloc(sizeof(PHY_VARS_gNB *));
- RC.gNB[0] = malloc(sizeof(PHY_VARS_gNB));
+ RC.gNB[0] = malloc16_clear(sizeof(*(RC.gNB[0])));
gNB = RC.gNB[0];
gNB->ofdm_offset_divisor = UINT_MAX;
frame_parms = &gNB->frame_parms; //to be initialized I suppose (maybe not necessary for PBCH)
frame_parms->nb_antennas_tx = n_tx;
frame_parms->nb_antennas_rx = n_rx;
+ frame_parms->nb_antenna_ports_gNB = n_tx;
frame_parms->N_RB_DL = N_RB_DL;
frame_parms->Nid_cell = Nid_cell;
frame_parms->nushift = Nid_cell%4;
@@ -533,19 +535,13 @@ int main(int argc, char **argv)
for (i=0; i<2; i++) {
- s_re[i] = malloc(frame_length_complex_samples*sizeof(double));
- bzero(s_re[i],frame_length_complex_samples*sizeof(double));
- s_im[i] = malloc(frame_length_complex_samples*sizeof(double));
- bzero(s_im[i],frame_length_complex_samples*sizeof(double));
-
- r_re[i] = malloc(frame_length_complex_samples*sizeof(double));
- bzero(r_re[i],frame_length_complex_samples*sizeof(double));
- r_im[i] = malloc(frame_length_complex_samples*sizeof(double));
- bzero(r_im[i],frame_length_complex_samples*sizeof(double));
+ s_re[i] = malloc16_clear(frame_length_complex_samples*sizeof(double));
+ s_im[i] = malloc16_clear(frame_length_complex_samples*sizeof(double));
+ r_re[i] = malloc16_clear(frame_length_complex_samples*sizeof(double));
+ r_im[i] = malloc16_clear(frame_length_complex_samples*sizeof(double));
printf("Allocating %d samples for txdata\n",frame_length_complex_samples);
- txdata[i] = malloc(frame_length_complex_samples*sizeof(int));
- bzero(r_re[i],frame_length_complex_samples*sizeof(int));
+ txdata[i] = malloc16_clear(frame_length_complex_samples*sizeof(int));
}
if (pbch_file_fd!=NULL) {
@@ -554,8 +550,8 @@ int main(int argc, char **argv)
//configure UE
- UE = malloc(sizeof(PHY_VARS_NR_UE));
- memcpy(&UE->frame_parms,frame_parms,sizeof(NR_DL_FRAME_PARMS));
+ UE = malloc16_clear(sizeof(*UE));
+ memcpy(&UE->frame_parms,frame_parms,sizeof(UE->frame_parms));
//phy_init_nr_top(UE); //called from init_nr_ue_signal
if (run_initial_sync==1) UE->is_synchronized = 0;
else UE->is_synchronized = 1;
@@ -565,7 +561,7 @@ int main(int argc, char **argv)
if(eps!=0.0)
UE->UE_fo_compensation = 1; // if a frequency offset is set then perform fo estimation and compensation
- if (init_nr_ue_signal(UE, 1, 0) != 0) {
+ if (init_nr_ue_signal(UE, 1) != 0) {
printf("Error at UE NR initialisation\n");
exit(-1);
}
@@ -780,6 +776,15 @@ int main(int argc, char **argv)
} // NSR
+ free_channel_desc_scm(gNB2UE);
+
+ phy_free_nr_gNB(gNB);
+ free(RC.gNB[0]);
+ free(RC.gNB);
+
+ term_nr_ue_signal(UE, 1);
+ free(UE);
+
for (i=0; i<2; i++) {
free(s_re[i]);
free(s_im[i]);
@@ -800,6 +805,9 @@ int main(int argc, char **argv)
if (input_fd)
fclose(input_fd);
+ loader_reset();
+ logTerm();
+
return(n_errors);
}
diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c
index fb0f37d7ac..bc4f4a0b60 100644
--- a/openair1/SIMULATION/NR_PHY/prachsim.c
+++ b/openair1/SIMULATION/NR_PHY/prachsim.c
@@ -25,6 +25,7 @@
#include
#include "common/config/config_userapi.h"
+#include "common/utils/load_module_shlib.h"
#include "common/utils/LOG/log.h"
#include "common/ran_context.h"
@@ -72,13 +73,11 @@ openair0_config_t openair0_cfg[MAX_CARDS];
uint64_t downlink_frequency[MAX_NUM_CCs][4];
int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
uint16_t sl_ahead = 0;
-msc_interface_t msc_interface;
uint32_t N_RB_DL = 106;
//void dump_nr_prach_config(NR_DL_FRAME_PARMS *frame_parms,uint8_t subframe);
/* temporary dummy implem of get_softmodem_optmask, till basic simulators implemented as device */
-msc_interface_t msc_interface;
uint64_t get_softmodem_optmask(void) {return 0;}
softmodem_params_t *get_softmodem_params(void) {return 0;}
int oai_nfapi_dl_tti_req(nfapi_nr_dl_tti_request_t *dl_config_req) { return(0); }
@@ -143,7 +142,12 @@ gtpv1u_update_ngu_tunnel(
return 0;
}
-int ocp_gtpv1u_delete_s1u_tunnel(const instance_t instance, const gtpv1u_enb_delete_tunnel_req_t *const req_pP) {
+int gtpv1u_delete_s1u_tunnel(const instance_t instance, const gtpv1u_enb_delete_tunnel_req_t *const req_pP) {
+ return 0;
+}
+
+int gtpv1u_delete_ngu_tunnel( const instance_t instance,
+ gtpv1u_gnb_delete_tunnel_req_t *req) {
return 0;
}
@@ -659,7 +663,6 @@ int main(int argc, char **argv){
RC.nb_nr_L1_inst=1;
phy_init_nr_gNB(gNB,0,1); //lowmem
nr_phy_init_RU(ru);
- gNB->common_vars.rxdata = ru->common.rxdata;
set_tdd_config_nr(&gNB->gNB_config, mu, 7, 6, 2, 4);
// Configure UE
@@ -671,7 +674,7 @@ int main(int argc, char **argv){
memcpy(&UE->frame_parms,frame_parms,sizeof(NR_DL_FRAME_PARMS));
UE->nrUE_config.prach_config.num_prach_fd_occasions_list = (fapi_nr_num_prach_fd_occasions_t *) malloc(num_prach_fd_occasions*sizeof(fapi_nr_num_prach_fd_occasions_t));
- if (init_nr_ue_signal(UE, 1, 0) != 0){
+ if (init_nr_ue_signal(UE, 1) != 0){
printf("Error at UE NR initialisation\n");
exit(-1);
}
@@ -778,7 +781,7 @@ int main(int argc, char **argv){
// multipath channel
// dump_nr_prach_config(&gNB->frame_parms,subframe);
- for (i = 0; i < frame_parms->samples_per_subframe<<1; i++) {
+ for (i = 0; i < frame_parms->samples_per_subframe; i++) {
for (aa=0; aa<1; aa++) {
if (awgn_flag == 0) {
s_re[aa][i] = ((double)(((short *)&txdata[aa][prach_start]))[(i<<1)]);
@@ -876,7 +879,8 @@ int main(int argc, char **argv){
rx_nr_prach_ru(ru, prach_format, numRA, prachStartSymbol, prachOccasion, frame, slot);
- gNB->prach_vars.rxsigF = ru->prach_rxsigF[prachOccasion];
+ for (int i = 0; i < ru->nb_rx; ++i)
+ gNB->prach_vars.rxsigF[i] = ru->prach_rxsigF[prachOccasion][i];
if (n_frames == 1) printf("ncs %d,num_seq %d\n",prach_pdu->num_cs, prach_config->num_prach_fd_occasions_list[fd_occasion].num_root_sequences.value);
rx_nr_prach(gNB, prach_pdu, prachOccasion, frame, subframe, &preamble_rx, &preamble_energy, &preamble_delay);
@@ -894,7 +898,7 @@ int main(int argc, char **argv){
#ifdef NR_PRACH_DEBUG
LOG_M("prach0.m","prach0", &txdata[0][prach_start], frame_parms->samples_per_subframe, 1, 1);
LOG_M("prachF0.m","prachF0", &gNB->prach_vars.prachF[0], N_ZC, 1, 1);
- LOG_M("rxsig0.m","rxs0", &gNB->common_vars.rxdata[0][subframe*frame_parms->samples_per_subframe], frame_parms->samples_per_subframe, 1, 1);
+ LOG_M("rxsig0.m","rxs0", &ru->common.rxdata[0][subframe*frame_parms->samples_per_subframe], frame_parms->samples_per_subframe, 1, 1);
LOG_M("ru_rxsig0.m","rxs0", &ru->common.rxdata[0][subframe*frame_parms->samples_per_subframe], frame_parms->samples_per_subframe, 1, 1);
LOG_M("ru_rxsigF0.m","rxsF0", ru->common.rxdataF[0], frame_parms->ofdm_symbol_size*frame_parms->symbols_per_slot, 1, 1);
LOG_M("ru_prach_rxsigF0.m","rxsF0", ru->prach_rxsigF[0][0], N_ZC, 1, 1);
@@ -919,6 +923,28 @@ int main(int argc, char **argv){
break;
} //SNR loop
+ free_channel_desc_scm(UE2gNB);
+
+ nr_phy_free_RU(ru);
+ free(RC.ru[0]);
+ free(RC.ru);
+
+ phy_free_nr_gNB(gNB);
+ // allocated in set_tdd_config_nr()
+ int nb_slots_to_set = TDD_CONFIG_NB_FRAMES*(1<gNB_config.prach_config.num_prach_fd_occasions_list);
+ for (int i = 0; i < nb_slots_to_set; ++i)
+ free(gNB->gNB_config.tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list);
+ free(gNB->gNB_config.tdd_table.max_tdd_periodicity_list);
+ free(RC.gNB[0]);
+ free(RC.gNB);
+
+ term_nr_ue_signal(UE, 1);
+ free(UE->nrUE_config.prach_config.num_prach_fd_occasions_list);
+ free(UE);
+ free(PHY_vars_UE_g[0]);
+ free(PHY_vars_UE_g);
+
for (i=0; i<2; i++) {
free(s_re[i]);
free(s_im[i]);
@@ -933,5 +959,8 @@ int main(int argc, char **argv){
if (input_fd) fclose(input_fd);
+ loader_reset();
+ logTerm();
+
return(0);
}
diff --git a/openair1/SIMULATION/NR_PHY/pucchsim.c b/openair1/SIMULATION/NR_PHY/pucchsim.c
index d07469a4b7..151d51d726 100644
--- a/openair1/SIMULATION/NR_PHY/pucchsim.c
+++ b/openair1/SIMULATION/NR_PHY/pucchsim.c
@@ -26,6 +26,7 @@
#include
#include
#include "common/config/config_userapi.h"
+#include "common/utils/load_module_shlib.h"
#include "common/utils/LOG/log.h"
#include "common/ran_context.h"
#include "PHY/types.h"
@@ -70,7 +71,6 @@ int main(int argc, char **argv)
double sigma2, sigma2_dB=10,SNR,snr0=-2.0,snr1=2.0;
double cfo=0;
uint8_t snr1set=0;
- int **txdataF,**rxdataF;
double **s_re,**s_im,**r_re,**r_im;
//int sync_pos, sync_pos_slot;
//FILE *rx_frame_file;
@@ -372,7 +372,7 @@ int main(int argc, char **argv)
printf("Transmitted payload is %ld, do_DTX = %d\n",actual_payload,do_DTX);
- RC.gNB = (PHY_VARS_gNB**) malloc(sizeof(PHY_VARS_gNB *));
+ RC.gNB = calloc(1, sizeof(PHY_VARS_gNB *));
RC.gNB[0] = calloc(1,sizeof(PHY_VARS_gNB));
gNB = RC.gNB[0];
gNB->pucch0_thres = pucch_DTX_thres;
@@ -441,24 +441,15 @@ int main(int argc, char **argv)
s_im = malloc(n_tx*sizeof(double*));
r_re = malloc(n_rx*sizeof(double*));
r_im = malloc(n_rx*sizeof(double*));
- txdataF = malloc(n_tx*sizeof(int*));
- rxdataF = malloc(n_rx*sizeof(int*));
- gNB->common_vars.rxdataF=rxdataF;
memcpy((void*)&gNB->frame_parms,(void*)frame_parms,sizeof(frame_parms));
for (int aatx=0; aatxsymbols_per_slot*frame_parms->ofdm_symbol_size);
- txdataF[aatx] = memalign(32,14*frame_parms->ofdm_symbol_size*sizeof(int));
- bzero(txdataF[aatx],14*frame_parms->ofdm_symbol_size*sizeof(int));
}
for (int aarx=0; aarxsymbols_per_slot*frame_parms->ofdm_symbol_size);
- rxdataF[aarx] = memalign(32,14*frame_parms->ofdm_symbol_size*sizeof(int));
- bzero(rxdataF[aarx],14*frame_parms->ofdm_symbol_size*sizeof(int));
}
uint8_t mcs=0;
@@ -474,7 +465,6 @@ int main(int argc, char **argv)
mcs=table2_mcs[actual_payload+shift];
else AssertFatal(1==0,"Either nr_bit %d or sr_flag %d must be non-zero\n", nr_bit, sr_flag);
}
- else if (format == 2 && nr_bit > 11) gNB->uci_polarParams = nr_polar_params(2, nr_bit, nrofPRB, 1, NULL);
startingPRB_intraSlotHopping = N_RB_DL-1;
uint32_t hopping_id = Nid_cell;
@@ -490,7 +480,7 @@ int main(int argc, char **argv)
if(eps!=0.0)
UE->UE_fo_compensation = 1; // if a frequency offset is set then perform fo estimation and compensation
- if (init_nr_ue_signal(UE, 1, 0) != 0)
+ if (init_nr_ue_signal(UE, 1) != 0)
{
printf("Error at UE NR initialisation\n");
exit(-1);
@@ -536,6 +526,7 @@ int main(int argc, char **argv)
ack_nack_errors=0;
sr_errors=0;
n_errors = 0;
+ int **txdataF = gNB->common_vars.txdataF;
for (trial=0; trialofdm_symbol_size*sizeof(int));
@@ -560,18 +551,17 @@ int main(int argc, char **argv)
if (n_trials==1) printf("txlev %d (%f dB), offset %d, sigma2 %f ( %f dB)\n",txlev,10*log10(txlev),startingSymbolIndex*frame_parms->ofdm_symbol_size,sigma2,sigma2_dB);
- int i0;
- double txr,txi,rxr,rxi,nr,ni;
+ struct complex16 **rxdataF = (struct complex16 **)gNB->common_vars.rxdataF;
for (int symb=0; symbframe_parms.symbols_per_slot;symb++) {
if (symb= startingSymbolIndex+nrofSymbols) {
- i0 = symb*gNB->frame_parms.ofdm_symbol_size;
+ int i0 = symb*gNB->frame_parms.ofdm_symbol_size;
for (int re=0;reframe_parms.first_carrier_offset + re)%gNB->frame_parms.ofdm_symbol_size);
for (int aarx=0;aarxframe_parms.ofdm_symbol_size;
+ int i0 = (startingSymbolIndex + symb)*gNB->frame_parms.ofdm_symbol_size;
for (int re=0;reframe_parms.first_carrier_offset + re)%gNB->frame_parms.ofdm_symbol_size);
- phasor.r = cos(2*M_PI*phase*re);
+ struct complexd phasor;
+ phasor.r = cos(2*M_PI*phase*re);
phasor.i = sin(2*M_PI*phase*re);
for (int aarx=0;aarxchF[aarx][re].r - txi*UE2gNB->chF[aarx][re].i;
- rxi = txr*UE2gNB->chF[aarx][re].i + txi*UE2gNB->chF[aarx][re].r;
- rxr_tmp = rxr*phasor.r - rxi*phasor.i;
+ double txr = (double)(((int16_t *)txdataF[0])[(i<<1)]);
+ double txi = (double)(((int16_t *)txdataF[0])[1+(i<<1)]);
+ double rxr={0},rxi={0};
+ for (int l = 0; l