Merge branch 'rh_ci_next' of https://gitlab.eurecom.fr/oai/openairinterface5g into rh_ci_next
This commit is contained in:
@@ -110,7 +110,7 @@ MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-sta
|
|||||||
NB_WARNINGS_FILES=0
|
NB_WARNINGS_FILES=0
|
||||||
|
|
||||||
# Retrieve list of warnings
|
# Retrieve list of warnings
|
||||||
LIST_WARNING_FILES=`egrep "error:|warning:" archives/*/*.Rel15.txt archives/*/basic_simulator_*txt | egrep -v "jobserver unavailable|Clock skew detected.|flexran.proto" | sed -e "s#^.*/home/ubuntu/tmp/##" -e "s#^.*/tmp/CI-eNB/##" -e "s#common/utils/.*/itti#common/utils/itti#" | awk -F ":" '{print $1}' | sort | uniq`
|
LIST_WARNING_FILES=`egrep "error:|warning:" archives/*/*.Rel15.txt | egrep -v "jobserver unavailable|Clock skew detected.|flexran.proto" | sed -e "s#^.*/home/ubuntu/tmp/##" -e "s#^.*/tmp/CI-eNB/##" -e "s#common/utils/.*/itti#common/utils/itti#" | awk -F ":" '{print $1}' | sort | uniq`
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "List of files that have been modified by the Merge Request AND"
|
echo "List of files that have been modified by the Merge Request AND"
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ OAI_UE_PROCESS_ASSERTION = -22
|
|||||||
OAI_UE_PROCESS_FAILED = -23
|
OAI_UE_PROCESS_FAILED = -23
|
||||||
OAI_UE_PROCESS_NO_TUNNEL_INTERFACE = -24
|
OAI_UE_PROCESS_NO_TUNNEL_INTERFACE = -24
|
||||||
OAI_UE_PROCESS_SEG_FAULT = -25
|
OAI_UE_PROCESS_SEG_FAULT = -25
|
||||||
|
OAI_UE_PROCESS_NO_MBMS_MSGS = -26
|
||||||
OAI_UE_PROCESS_OK = +6
|
OAI_UE_PROCESS_OK = +6
|
||||||
|
|
||||||
UE_STATUS_DETACHED = 0
|
UE_STATUS_DETACHED = 0
|
||||||
|
|||||||
+1
-1
@@ -326,7 +326,7 @@ class HTMLManagement():
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
self.htmlFile.write(' <tr>\n')
|
self.htmlFile.write(' <tr>\n')
|
||||||
self.htmlFile.write(' <th colspan=8>' + str('eNB') + ' Server Characteristics</th>\n')
|
self.htmlFile.write(' <th colspan=8>' + str(machine) + ' Server Characteristics</th>\n')
|
||||||
self.htmlFile.write(' </tr>\n')
|
self.htmlFile.write(' </tr>\n')
|
||||||
self.htmlFile.write(' <tr>\n')
|
self.htmlFile.write(' <tr>\n')
|
||||||
self.htmlFile.write(' <td>OS Version</td>\n')
|
self.htmlFile.write(' <td>OS Version</td>\n')
|
||||||
|
|||||||
+37
-23
@@ -2433,6 +2433,7 @@ class OaiCiTest():
|
|||||||
nrCRCOK = 0
|
nrCRCOK = 0
|
||||||
mbms_messages = 0
|
mbms_messages = 0
|
||||||
HTML.SethtmlUEFailureMsg('')
|
HTML.SethtmlUEFailureMsg('')
|
||||||
|
global_status = CONST.ALL_PROCESSES_OK
|
||||||
for line in ue_log_file.readlines():
|
for line in ue_log_file.readlines():
|
||||||
result = re.search('nr_synchro_time', str(line))
|
result = re.search('nr_synchro_time', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
@@ -2626,36 +2627,36 @@ class OaiCiTest():
|
|||||||
else:
|
else:
|
||||||
statMsg = 'UE did NOT SHOW "TRIED TO PUSH MBMS DATA" message(s)'
|
statMsg = 'UE did NOT SHOW "TRIED TO PUSH MBMS DATA" message(s)'
|
||||||
logging.debug('\u001B[1;30;41m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;41m ' + statMsg + ' \u001B[0m')
|
||||||
|
global_status = OAI_UE_PROCESS_NO_MBMS_MSGS
|
||||||
HTML.SethtmlUEFailureMsg(HTML.GethtmlUEFailureMsg() + statMsg + '\n')
|
HTML.SethtmlUEFailureMsg(HTML.GethtmlUEFailureMsg() + statMsg + '\n')
|
||||||
if foundSegFault:
|
if foundSegFault:
|
||||||
logging.debug('\u001B[1;37;41m UE ended with a Segmentation Fault! \u001B[0m')
|
logging.debug('\u001B[1;37;41m UE ended with a Segmentation Fault! \u001B[0m')
|
||||||
if not nrUEFlag:
|
if not nrUEFlag:
|
||||||
return CONST.OAI_UE_PROCESS_SEG_FAULT
|
global_status = CONST.OAI_UE_PROCESS_SEG_FAULT
|
||||||
else:
|
else:
|
||||||
if not frequency_found:
|
if not frequency_found:
|
||||||
return CONST.OAI_UE_PROCESS_SEG_FAULT
|
global_status = CONST.OAI_UE_PROCESS_SEG_FAULT
|
||||||
if foundAssertion:
|
if foundAssertion:
|
||||||
logging.debug('\u001B[1;30;43m UE showed an assertion! \u001B[0m')
|
logging.debug('\u001B[1;30;43m UE showed an assertion! \u001B[0m')
|
||||||
HTML.SethtmlUEFailureMsg(HTML.GethtmlUEFailureMsg() + 'UE showed an assertion!\n')
|
HTML.SethtmlUEFailureMsg(HTML.GethtmlUEFailureMsg() + 'UE showed an assertion!\n')
|
||||||
if not nrUEFlag:
|
if not nrUEFlag:
|
||||||
if not mib_found or not frequency_found:
|
if not mib_found or not frequency_found:
|
||||||
return CONST.OAI_UE_PROCESS_ASSERTION
|
global_status = CONST.OAI_UE_PROCESS_ASSERTION
|
||||||
else:
|
else:
|
||||||
if not frequency_found:
|
if not frequency_found:
|
||||||
return CONST.OAI_UE_PROCESS_ASSERTION
|
global_status = CONST.OAI_UE_PROCESS_ASSERTION
|
||||||
if foundRealTimeIssue:
|
if foundRealTimeIssue:
|
||||||
logging.debug('\u001B[1;37;41m UE faced real time issues! \u001B[0m')
|
logging.debug('\u001B[1;37;41m UE faced real time issues! \u001B[0m')
|
||||||
HTML.SethtmlUEFailureMsg(HTML.GethtmlUEFailureMsg() + 'UE faced real time issues!\n')
|
HTML.SethtmlUEFailureMsg(HTML.GethtmlUEFailureMsg() + 'UE faced real time issues!\n')
|
||||||
#return CONST.ENB_PROCESS_REALTIME_ISSUE
|
|
||||||
if nrUEFlag:
|
if nrUEFlag:
|
||||||
if not frequency_found:
|
if not frequency_found:
|
||||||
return CONST.OAI_UE_PROCESS_COULD_NOT_SYNC
|
global_status = CONST.OAI_UE_PROCESS_COULD_NOT_SYNC
|
||||||
else:
|
else:
|
||||||
if no_cell_sync_found and not mib_found:
|
if no_cell_sync_found and not mib_found:
|
||||||
logging.debug('\u001B[1;37;41m UE could not synchronize ! \u001B[0m')
|
logging.debug('\u001B[1;37;41m UE could not synchronize ! \u001B[0m')
|
||||||
HTML.SethtmlUEFailureMsg(HTML.GethtmlUEFailureMsg() + 'UE could not synchronize!\n')
|
HTML.SethtmlUEFailureMsg(HTML.GethtmlUEFailureMsg() + 'UE could not synchronize!\n')
|
||||||
return CONST.OAI_UE_PROCESS_COULD_NOT_SYNC
|
global_status = CONST.OAI_UE_PROCESS_COULD_NOT_SYNC
|
||||||
return 0
|
return global_status
|
||||||
|
|
||||||
|
|
||||||
def TerminateFlexranCtrl(self):
|
def TerminateFlexranCtrl(self):
|
||||||
@@ -3110,11 +3111,15 @@ def GetParametersFromXML(action):
|
|||||||
RAN.SeteNB_serverId(test.findtext('eNB_serverId'))
|
RAN.SeteNB_serverId(test.findtext('eNB_serverId'))
|
||||||
if (RAN.GeteNB_serverId() is None):
|
if (RAN.GeteNB_serverId() is None):
|
||||||
RAN.SeteNB_serverId('0')
|
RAN.SeteNB_serverId('0')
|
||||||
CiTestObj.air_interface = test.findtext('air_interface')
|
|
||||||
if (CiTestObj.air_interface is None):
|
#local variable air_interface
|
||||||
CiTestObj.air_interface = 'lte'
|
air_interface = test.findtext('air_interface')
|
||||||
else:
|
if (air_interface is None) or (air_interface.lower() not in ['nr','lte','ocp']):
|
||||||
CiTestObj.air_interface = CiTestObj.air_interface.lower()
|
CiTestObj.air_interface = 'lte-softmodem'
|
||||||
|
elif (air_interface.lower() in ['nr','lte']):
|
||||||
|
CiTestObj.air_interface = air_interface.lower() +'-softmodem'
|
||||||
|
else :
|
||||||
|
CiTestObj.air_interface = air_interface.lower() +'ocp-enb'
|
||||||
RAN.Setair_interface(CiTestObj.air_interface)
|
RAN.Setair_interface(CiTestObj.air_interface)
|
||||||
|
|
||||||
if action == 'Terminate_eNB':
|
if action == 'Terminate_eNB':
|
||||||
@@ -3124,11 +3129,15 @@ def GetParametersFromXML(action):
|
|||||||
RAN.SeteNB_serverId(test.findtext('eNB_serverId'))
|
RAN.SeteNB_serverId(test.findtext('eNB_serverId'))
|
||||||
if (RAN.GeteNB_serverId() is None):
|
if (RAN.GeteNB_serverId() is None):
|
||||||
RAN.SeteNB_serverId('0')
|
RAN.SeteNB_serverId('0')
|
||||||
CiTestObj.air_interface = test.findtext('air_interface')
|
|
||||||
if (CiTestObj.air_interface is None):
|
#local variable air_interface
|
||||||
CiTestObj.air_interface = 'lte'
|
air_interface = test.findtext('air_interface')
|
||||||
else:
|
if (air_interface is None) or (air_interface.lower() not in ['nr','lte','ocp']):
|
||||||
CiTestObj.air_interface = CiTestObj.air_interface.lower()
|
CiTestObj.air_interface = 'lte-softmodem'
|
||||||
|
elif (air_interface.lower() in ['nr','lte']):
|
||||||
|
CiTestObj.air_interface = air_interface.lower() +'-softmodem'
|
||||||
|
else :
|
||||||
|
CiTestObj.air_interface = air_interface.lower() +'ocp-enb'
|
||||||
RAN.Setair_interface(CiTestObj.air_interface)
|
RAN.Setair_interface(CiTestObj.air_interface)
|
||||||
|
|
||||||
if action == 'Attach_UE':
|
if action == 'Attach_UE':
|
||||||
@@ -3158,11 +3167,16 @@ def GetParametersFromXML(action):
|
|||||||
CiTestObj.UE_instance = test.findtext('UE_instance')
|
CiTestObj.UE_instance = test.findtext('UE_instance')
|
||||||
if (CiTestObj.UE_instance is None):
|
if (CiTestObj.UE_instance is None):
|
||||||
CiTestObj.UE_instance = '0'
|
CiTestObj.UE_instance = '0'
|
||||||
CiTestObj.air_interface = test.findtext('air_interface')
|
|
||||||
if (CiTestObj.air_interface is None):
|
#local variable air_interface
|
||||||
CiTestObj.air_interface = 'lte'
|
air_interface = test.findtext('air_interface')
|
||||||
else:
|
if (air_interface is None) or (air_interface.lower() not in ['nr','lte','ocp']):
|
||||||
CiTestObj.air_interface = CiTestObj.air_interface.lower()
|
CiTestObj.air_interface = 'lte-softmodem'
|
||||||
|
elif (air_interface.lower() in ['nr','lte']):
|
||||||
|
CiTestObj.air_interface = air_interface.lower() +'-softmodem'
|
||||||
|
else :
|
||||||
|
CiTestObj.air_interface = air_interface.lower() +'ocp-enb'
|
||||||
|
RAN.Setair_interface(CiTestObj.air_interface)
|
||||||
|
|
||||||
if action == 'Terminate_OAI_UE':
|
if action == 'Terminate_OAI_UE':
|
||||||
RAN.SeteNB_instance(test.findtext('UE_instance'))
|
RAN.SeteNB_instance(test.findtext('UE_instance'))
|
||||||
|
|||||||
+53
-46
@@ -77,7 +77,7 @@ class RANManagement():
|
|||||||
self.backgroundBuildTestId = ['', '', '']
|
self.backgroundBuildTestId = ['', '', '']
|
||||||
self.Build_eNB_forced_workspace_cleanup = False
|
self.Build_eNB_forced_workspace_cleanup = False
|
||||||
self.Initialize_eNB_args = ''
|
self.Initialize_eNB_args = ''
|
||||||
self.air_interface = 'lte'
|
self.air_interface = '' #changed from 'lte' to '' may lead to side effects in main
|
||||||
self.eNB_instance = ''
|
self.eNB_instance = ''
|
||||||
self.eNB_serverId = ''
|
self.eNB_serverId = ''
|
||||||
self.eNBLogFiles = ['', '', '']
|
self.eNBLogFiles = ['', '', '']
|
||||||
@@ -91,6 +91,8 @@ class RANManagement():
|
|||||||
self.htmlObj = None
|
self.htmlObj = None
|
||||||
self.epcObj = None
|
self.epcObj = None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# Setters and Getters on Public members
|
# Setters and Getters on Public members
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
@@ -254,12 +256,18 @@ class RANManagement():
|
|||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
# Check if we build an 5G-NR gNB or an LTE eNB
|
|
||||||
result = re.search('--gNB', self.Build_eNB_args)
|
# Check if we build an 5G-NR gNB or an LTE eNB or an OCP eNB
|
||||||
|
result = re.search('--eNBocp', self.Build_eNB_args)
|
||||||
if result is not None:
|
if result is not None:
|
||||||
self.air_interface = 'nr'
|
self.air_interface='ocp-enb'
|
||||||
else:
|
else:
|
||||||
self.air_interface = 'lte'
|
result = re.search('--gNB', self.Build_eNB_args)
|
||||||
|
if result is not None:
|
||||||
|
self.air_interface = 'nr-softmodem'
|
||||||
|
else:
|
||||||
|
self.air_interface = 'lte-softmodem'
|
||||||
|
|
||||||
# Worakround for some servers, we need to erase completely the workspace
|
# Worakround for some servers, we need to erase completely the workspace
|
||||||
if self.Build_eNB_forced_workspace_cleanup:
|
if self.Build_eNB_forced_workspace_cleanup:
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf ' + lSourcePath, '\$', 15)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf ' + lSourcePath, '\$', 15)
|
||||||
@@ -366,7 +374,7 @@ class RANManagement():
|
|||||||
count = 40
|
count = 40
|
||||||
buildOAIprocess = True
|
buildOAIprocess = True
|
||||||
while (count > 0) and buildOAIprocess:
|
while (count > 0) and buildOAIprocess:
|
||||||
mySSH.command('ps aux | grep --color=never build_ | grep -v grep', '\$', 3)
|
mySSH.command('ps aux | grep --color=never build_ | grep -v grep', '\$', 6)
|
||||||
result = re.search('build_oai', mySSH.getBefore())
|
result = re.search('build_oai', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
buildOAIprocess = False
|
buildOAIprocess = False
|
||||||
@@ -379,20 +387,19 @@ class RANManagement():
|
|||||||
def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId):
|
def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId):
|
||||||
if self.htmlObj is not None:
|
if self.htmlObj is not None:
|
||||||
self.htmlObj.SettestCase_id(testcaseId)
|
self.htmlObj.SettestCase_id(testcaseId)
|
||||||
|
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 3)
|
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 3)
|
||||||
mySSH.command('ls ran_build/build', '\$', 3)
|
mySSH.command('ls ran_build/build', '\$', 3)
|
||||||
mySSH.command('ls ran_build/build', '\$', 3)
|
mySSH.command('ls ran_build/build', '\$', 3)
|
||||||
if self.air_interface == 'nr':
|
|
||||||
nodeB_prefix = 'g'
|
#check if we have the build corresponding to the air interface keywords (nr-softmode, lte-softmodem, ocp-enb)
|
||||||
else:
|
result = re.search(self.air_interface, mySSH.getBefore())
|
||||||
nodeB_prefix = 'e'
|
|
||||||
buildStatus = True
|
|
||||||
result = re.search(self.air_interface + '-softmodem', mySSH.getBefore())
|
|
||||||
if result is None:
|
if result is None:
|
||||||
buildStatus = False
|
buildStatus = False #if not, build failed
|
||||||
else:
|
else:
|
||||||
|
buildStatus = True
|
||||||
# Generating a BUILD INFO file
|
# Generating a BUILD INFO file
|
||||||
mySSH.command('echo "SRC_BRANCH: ' + self.ranBranch + '" > ../LAST_BUILD_INFO.txt', '\$', 2)
|
mySSH.command('echo "SRC_BRANCH: ' + self.ranBranch + '" > ../LAST_BUILD_INFO.txt', '\$', 2)
|
||||||
mySSH.command('echo "SRC_COMMIT: ' + self.ranCommitID + '" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
mySSH.command('echo "SRC_COMMIT: ' + self.ranCommitID + '" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
||||||
@@ -404,6 +411,8 @@ class RANManagement():
|
|||||||
mySSH.command('echo "TGT_BRANCH: ' + self.ranTargetBranch + '" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
mySSH.command('echo "TGT_BRANCH: ' + self.ranTargetBranch + '" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
||||||
else:
|
else:
|
||||||
mySSH.command('echo "MERGED_W_TGT_BRANCH: NO" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
mySSH.command('echo "MERGED_W_TGT_BRANCH: NO" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
||||||
|
|
||||||
|
|
||||||
mySSH.command('mkdir -p build_log_' + testcaseId, '\$', 5)
|
mySSH.command('mkdir -p build_log_' + testcaseId, '\$', 5)
|
||||||
mySSH.command('mv log/* ' + 'build_log_' + testcaseId, '\$', 5)
|
mySSH.command('mv log/* ' + 'build_log_' + testcaseId, '\$', 5)
|
||||||
mySSH.command('mv compile_oai_enb.log ' + 'build_log_' + testcaseId, '\$', 5)
|
mySSH.command('mv compile_oai_enb.log ' + 'build_log_' + testcaseId, '\$', 5)
|
||||||
@@ -426,12 +435,13 @@ class RANManagement():
|
|||||||
else:
|
else:
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|
||||||
|
#generate logging info depending on buildStatus and air interface
|
||||||
if buildStatus:
|
if buildStatus:
|
||||||
logging.info('\u001B[1m Building OAI ' + nodeB_prefix + 'NB Pass\u001B[0m')
|
logging.info('\u001B[1m Building OAI ' + self.air_interface + ' Pass\u001B[0m')
|
||||||
if self.htmlObj is not None:
|
if self.htmlObj is not None:
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
|
self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
else:
|
else
|
||||||
logging.error('\u001B[1m Building OAI ' + nodeB_prefix + 'NB Failed\u001B[0m')
|
logging.error('\u001B[1m Building OAI ' + self.air_interface + ' Failed\u001B[0m')
|
||||||
if self.htmlObj is not None:
|
if self.htmlObj is not None:
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'KO', CONST.ALL_PROCESSES_OK)
|
self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTabFooter(False)
|
self.htmlObj.CreateHtmlTabFooter(False)
|
||||||
@@ -546,7 +556,7 @@ class RANManagement():
|
|||||||
# Launch eNB with the modified config file
|
# Launch eNB with the modified config file
|
||||||
mySSH.command('source oaienv', '\$', 5)
|
mySSH.command('source oaienv', '\$', 5)
|
||||||
mySSH.command('cd cmake_targets', '\$', 5)
|
mySSH.command('cd cmake_targets', '\$', 5)
|
||||||
mySSH.command('echo "ulimit -c unlimited && ./ran_build/build/' + self.air_interface + '-softmodem -O ' + lSourcePath + '/' + ci_full_config_file + extra_options + '" > ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
mySSH.command('echo "ulimit -c unlimited && ./ran_build/build/' + self.air_interface + ' -O ' + lSourcePath + '/' + ci_full_config_file + extra_options + '" > ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||||
mySSH.command('chmod 775 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
mySSH.command('chmod 775 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf enb_' + self.testCase_id + '.log', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf enb_' + self.testCase_id + '.log', '\$', 5)
|
||||||
mySSH.command('hostnamectl','\$', 5)
|
mySSH.command('hostnamectl','\$', 5)
|
||||||
@@ -607,7 +617,11 @@ class RANManagement():
|
|||||||
enbDidSync = True
|
enbDidSync = True
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
|
|
||||||
if enbDidSync and eNBinNoS1:
|
rruCheck = False
|
||||||
|
result = re.search('^rru|^du.band', str(config_file))
|
||||||
|
if result is not None:
|
||||||
|
rruCheck = True
|
||||||
|
if enbDidSync and eNBinNoS1 and not rruCheck:
|
||||||
mySSH.command('ifconfig oaitun_enb1', '\$', 4)
|
mySSH.command('ifconfig oaitun_enb1', '\$', 4)
|
||||||
mySSH.command('ifconfig oaitun_enb1', '\$', 4)
|
mySSH.command('ifconfig oaitun_enb1', '\$', 4)
|
||||||
result = re.search('inet addr:1|inet 1', mySSH.getBefore())
|
result = re.search('inet addr:1|inet 1', mySSH.getBefore())
|
||||||
@@ -651,8 +665,8 @@ class RANManagement():
|
|||||||
lPassWord = self.eNBPassword
|
lPassWord = self.eNBPassword
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never ' + self.air_interface + '-softmodem | grep -v grep', '\$', 5)
|
mySSH.command('stdbuf -o0 ps -aux | grep --color=never ' + self.air_interface + ' | grep -v grep', '\$', 5)
|
||||||
result = re.search(self.air_interface + '-softmodem', mySSH.getBefore())
|
result = re.search(self.air_interface, mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.debug('\u001B[1;37;41m eNB Process Not Found! \u001B[0m')
|
logging.debug('\u001B[1;37;41m eNB Process Not Found! \u001B[0m')
|
||||||
status_queue.put(CONST.ENB_PROCESS_FAILED)
|
status_queue.put(CONST.ENB_PROCESS_FAILED)
|
||||||
@@ -684,20 +698,20 @@ class RANManagement():
|
|||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
|
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
|
||||||
if self.air_interface == 'lte':
|
if (self.air_interface == 'lte-softmodem') or (self.air_interface == 'ocp-enb'):
|
||||||
nodeB_prefix = 'e'
|
nodeB_prefix = 'e'
|
||||||
else:
|
else:
|
||||||
nodeB_prefix = 'g'
|
nodeB_prefix = 'g'
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never softmodem | grep -v grep', '\$', 5)
|
mySSH.command('stdbuf -o0 ps -aux | grep --color=never -e softmodem -e ocp-enb | grep -v grep', '\$', 5)
|
||||||
result = re.search('-softmodem', mySSH.getBefore())
|
result = re.search('(-softmodem|ocp)', mySSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S daemon --name=enb' + str(self.eNB_instance) + '_daemon --stop', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S daemon --name=enb' + str(self.eNB_instance) + '_daemon --stop', '\$', 5)
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGINT -r .*-softmodem || true', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGINT -r .*-softmodem .ocp-enb || true', '\$', 5)
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never softmodem | grep -v grep', '\$', 5)
|
mySSH.command('stdbuf -o0 ps -aux | grep --color=never -e softmodem -e ocp-enb | grep -v grep', '\$', 5)
|
||||||
result = re.search('-softmodem', mySSH.getBefore())
|
result = re.search('(-softmodem|ocp)', mySSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL -r .*-softmodem || true', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL -r .*-softmodem .ocp-enb || true', '\$', 5)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
mySSH.command('rm -f my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
mySSH.command('rm -f my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
@@ -812,6 +826,7 @@ class RANManagement():
|
|||||||
X2HO_state = CONST.X2_HO_REQ_STATE__IDLE
|
X2HO_state = CONST.X2_HO_REQ_STATE__IDLE
|
||||||
X2HO_inNbProcedures = 0
|
X2HO_inNbProcedures = 0
|
||||||
X2HO_outNbProcedures = 0
|
X2HO_outNbProcedures = 0
|
||||||
|
global_status = CONST.ALL_PROCESSES_OK
|
||||||
for line in enb_log_file.readlines():
|
for line in enb_log_file.readlines():
|
||||||
if X2HO_state == CONST.X2_HO_REQ_STATE__IDLE:
|
if X2HO_state == CONST.X2_HO_REQ_STATE__IDLE:
|
||||||
result = re.search('target eNB Receives X2 HO Req X2AP_HANDOVER_REQ', str(line))
|
result = re.search('target eNB Receives X2 HO Req X2AP_HANDOVER_REQ', str(line))
|
||||||
@@ -885,8 +900,7 @@ class RANManagement():
|
|||||||
if result is not None:
|
if result is not None:
|
||||||
rrcSetupComplete += 1
|
rrcSetupComplete += 1
|
||||||
result = re.search('Generate LTE_RRCConnectionRelease|Generate RRCConnectionRelease', str(line))
|
result = re.search('Generate LTE_RRCConnectionRelease|Generate RRCConnectionRelease', str(line))
|
||||||
if result is not None:
|
if result is not None: rrcReleaseRequest += 1
|
||||||
rrcReleaseRequest += 1
|
|
||||||
result = re.search('Generate LTE_RRCConnectionReconfiguration', str(line))
|
result = re.search('Generate LTE_RRCConnectionReconfiguration', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
rrcReconfigRequest += 1
|
rrcReconfigRequest += 1
|
||||||
@@ -935,11 +949,11 @@ class RANManagement():
|
|||||||
mbmsRequestMsg += 1
|
mbmsRequestMsg += 1
|
||||||
enb_log_file.close()
|
enb_log_file.close()
|
||||||
logging.debug(' File analysis completed')
|
logging.debug(' File analysis completed')
|
||||||
if self.air_interface == 'lte':
|
if (self.air_interface == 'lte-softmodem') or (self.air_interface == 'ocp-enb'):
|
||||||
nodeB_prefix = 'e'
|
nodeB_prefix = 'e'
|
||||||
else:
|
else:
|
||||||
nodeB_prefix = 'g'
|
nodeB_prefix = 'g'
|
||||||
if self.air_interface == 'nr':
|
if self.air_interface == 'nr-softmodem':
|
||||||
if ulschReceiveOK > 0:
|
if ulschReceiveOK > 0:
|
||||||
statMsg = nodeB_prefix + 'NB showed ' + str(ulschReceiveOK) + ' "ULSCH received ok" message(s)'
|
statMsg = nodeB_prefix + 'NB showed ' + str(ulschReceiveOK) + ' "ULSCH received ok" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
@@ -1030,30 +1044,23 @@ class RANManagement():
|
|||||||
rruMsg = 'Slave RRU DID NOT receive the RRU_frame_resynch command from RAU'
|
rruMsg = 'Slave RRU DID NOT receive the RRU_frame_resynch command from RAU'
|
||||||
logging.debug('\u001B[1;37;41m ' + rruMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + rruMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += rruMsg + '\n'
|
htmleNBFailureMsg += rruMsg + '\n'
|
||||||
self.prematureExit(True)
|
self.prematureExit = True
|
||||||
return CONST.ENB_PROCESS_SLAVE_RRU_NOT_SYNCED
|
global_status = CONST.ENB_PROCESS_SLAVE_RRU_NOT_SYNCED
|
||||||
if foundSegFault:
|
if foundSegFault:
|
||||||
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with a Segmentation Fault! \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with a Segmentation Fault! \u001B[0m')
|
||||||
if self.htmlObj is not None:
|
global_status = CONST.ENB_PROCESS_SEG_FAULT
|
||||||
self.htmlObj.SetHmleNBFailureMsg(htmleNBFailureMsg)
|
|
||||||
return CONST.ENB_PROCESS_SEG_FAULT
|
|
||||||
if foundAssertion:
|
if foundAssertion:
|
||||||
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with an assertion! \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with an assertion! \u001B[0m')
|
||||||
htmleNBFailureMsg += msgAssertion
|
htmleNBFailureMsg += msgAssertion
|
||||||
if self.htmlObj is not None:
|
global_status = CONST.ENB_PROCESS_ASSERTION
|
||||||
self.htmlObj.SetHmleNBFailureMsg(htmleNBFailureMsg)
|
|
||||||
return CONST.ENB_PROCESS_ASSERTION
|
|
||||||
if foundRealTimeIssue:
|
if foundRealTimeIssue:
|
||||||
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB faced real time issues! \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB faced real time issues! \u001B[0m')
|
||||||
htmleNBFailureMsg += nodeB_prefix + 'NB faced real time issues!\n'
|
htmleNBFailureMsg += nodeB_prefix + 'NB faced real time issues!\n'
|
||||||
#return CONST.ENB_PROCESS_REALTIME_ISSUE
|
|
||||||
if rlcDiscardBuffer > 0:
|
if rlcDiscardBuffer > 0:
|
||||||
rlcMsg = nodeB_prefix + 'NB RLC discarded ' + str(rlcDiscardBuffer) + ' buffer(s)'
|
rlcMsg = nodeB_prefix + 'NB RLC discarded ' + str(rlcDiscardBuffer) + ' buffer(s)'
|
||||||
logging.debug('\u001B[1;37;41m ' + rlcMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + rlcMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += rlcMsg + '\n'
|
htmleNBFailureMsg += rlcMsg + '\n'
|
||||||
if self.htmlObj is not None:
|
global_status = CONST.ENB_PROCESS_REALTIME_ISSUE
|
||||||
self.htmlObj.SetHmleNBFailureMsg(htmleNBFailureMsg)
|
|
||||||
return CONST.ENB_PROCESS_REALTIME_ISSUE
|
|
||||||
if self.htmlObj is not None:
|
if self.htmlObj is not None:
|
||||||
self.htmlObj.SetHmleNBFailureMsg(htmleNBFailureMsg)
|
self.htmlObj.SetHmleNBFailureMsg(htmleNBFailureMsg)
|
||||||
return 0
|
return global_status
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ function details_table {
|
|||||||
echo " <th>Message</th>" >> $3
|
echo " <th>Message</th>" >> $3
|
||||||
echo " </tr>" >> $3
|
echo " </tr>" >> $3
|
||||||
|
|
||||||
LIST_MESSAGES=`egrep "error:|warning:" $2 | egrep -v "jobserver unavailable|Clock skew detected.|flexran.proto"`
|
LIST_MESSAGES=`egrep "error:|warning:" $2 | egrep -v "jobserver unavailable|Clock skew detected.|flexran.proto|disabling jobserver mode"`
|
||||||
COMPLETE_MESSAGE="start"
|
COMPLETE_MESSAGE="start"
|
||||||
for MESSAGE in $LIST_MESSAGES
|
for MESSAGE in $LIST_MESSAGES
|
||||||
do
|
do
|
||||||
@@ -146,7 +146,7 @@ function summary_table_row {
|
|||||||
else
|
else
|
||||||
echo " <td bgcolor = \"red\" >$NB_ERRORS</th>" >> ./build_results.html
|
echo " <td bgcolor = \"red\" >$NB_ERRORS</th>" >> ./build_results.html
|
||||||
fi
|
fi
|
||||||
NB_WARNINGS=`egrep "warning:" $2 | egrep -v "jobserver unavailable|Clock skew detected.|flexran.proto" | egrep -c "warning:"`
|
NB_WARNINGS=`egrep "warning:" $2 | egrep -v "jobserver unavailable|Clock skew detected.|flexran.proto|disabling jobserver mode" | egrep -c "warning:"`
|
||||||
if [ $NB_WARNINGS -eq 0 ]
|
if [ $NB_WARNINGS -eq 0 ]
|
||||||
then
|
then
|
||||||
echo " <td bgcolor = \"green\" >$NB_WARNINGS</th>" >> ./build_results.html
|
echo " <td bgcolor = \"green\" >$NB_WARNINGS</th>" >> ./build_results.html
|
||||||
|
|||||||
@@ -724,8 +724,8 @@ function report_test {
|
|||||||
echo " </pre></td>" >> ./test_simulator_results.html
|
echo " </pre></td>" >> ./test_simulator_results.html
|
||||||
echo " </tr>" >> ./test_simulator_results.html
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
fi
|
fi
|
||||||
#PING_LOGS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${UES}users_${CN_CONFIG}_ping*.log 2> /dev/null`
|
PING_LOGS=`ls $ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_ping*.log 2> /dev/null`
|
||||||
#analyzePingFiles
|
analyzePingFiles
|
||||||
|
|
||||||
IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_iperf_dl*client*txt 2> /dev/null`
|
IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_iperf_dl*client*txt 2> /dev/null`
|
||||||
analyzeIperfFiles
|
analyzeIperfFiles
|
||||||
|
|||||||
@@ -523,9 +523,9 @@ function install_epc_on_vm {
|
|||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "[ -f 01proxy ] && sudo cp 01proxy /etc/apt/apt.conf.d/" > $LOC_EPC_VM_CMDS
|
echo "[ -f 01proxy ] && sudo cp 01proxy /etc/apt/apt.conf.d/" > $LOC_EPC_VM_CMDS
|
||||||
echo "touch /home/ubuntu/.hushlogin" >> $LOC_EPC_VM_CMDS
|
echo "touch /home/ubuntu/.hushlogin" >> $LOC_EPC_VM_CMDS
|
||||||
echo "echo \"sudo apt-get --yes --quiet install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf\"" >> $LOC_EPC_VM_CMDS
|
echo "echo \"sudo apt-get --yes --quiet install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev iperf\"" >> $LOC_EPC_VM_CMDS
|
||||||
echo "sudo apt-get update > zip-install.txt 2>&1" >> $LOC_EPC_VM_CMDS
|
echo "sudo apt-get update > zip-install.txt 2>&1" >> $LOC_EPC_VM_CMDS
|
||||||
echo "sudo apt-get --yes install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf >> zip-install.txt 2>&1" >> $LOC_EPC_VM_CMDS
|
echo "sudo apt-get --yes install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev iperf >> zip-install.txt 2>&1" >> $LOC_EPC_VM_CMDS
|
||||||
|
|
||||||
# Installing HSS
|
# Installing HSS
|
||||||
echo "echo \"cd /opt\"" >> $LOC_EPC_VM_CMDS
|
echo "echo \"cd /opt\"" >> $LOC_EPC_VM_CMDS
|
||||||
@@ -588,8 +588,6 @@ function start_epc {
|
|||||||
echo "echo \"cd /opt/hss_sim0609\"" > $LOC_EPC_VM_CMDS
|
echo "echo \"cd /opt/hss_sim0609\"" > $LOC_EPC_VM_CMDS
|
||||||
echo "cd /opt/hss_sim0609" >> $LOC_EPC_VM_CMDS
|
echo "cd /opt/hss_sim0609" >> $LOC_EPC_VM_CMDS
|
||||||
echo "sudo rm -f hss.log" >> $LOC_EPC_VM_CMDS
|
echo "sudo rm -f hss.log" >> $LOC_EPC_VM_CMDS
|
||||||
#echo "echo \"sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real\"" >> $LOC_EPC_VM_CMDS
|
|
||||||
#echo "sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real" >> $LOC_EPC_VM_CMDS
|
|
||||||
echo "echo \"screen -dm -S simulated_hss ./starthss_real\"" >> $LOC_EPC_VM_CMDS
|
echo "echo \"screen -dm -S simulated_hss ./starthss_real\"" >> $LOC_EPC_VM_CMDS
|
||||||
echo "sudo su -c \"screen -dm -S simulated_hss ./starthss_real\"" >> $LOC_EPC_VM_CMDS
|
echo "sudo su -c \"screen -dm -S simulated_hss ./starthss_real\"" >> $LOC_EPC_VM_CMDS
|
||||||
|
|
||||||
@@ -656,8 +654,6 @@ function terminate_epc {
|
|||||||
echo "cd /opt/ltebox/tools" >> $1
|
echo "cd /opt/ltebox/tools" >> $1
|
||||||
echo "echo \"sudo ./stop_ltebox\"" >> $1
|
echo "echo \"sudo ./stop_ltebox\"" >> $1
|
||||||
echo "sudo ./stop_ltebox" >> $1
|
echo "sudo ./stop_ltebox" >> $1
|
||||||
echo "echo \"sudo daemon --name=simulated_hss --stop\"" >> $1
|
|
||||||
echo "sudo daemon --name=simulated_hss --stop" >> $1
|
|
||||||
echo "echo \"sudo killall --signal SIGKILL hss_sim\"" >> $1
|
echo "echo \"sudo killall --signal SIGKILL hss_sim\"" >> $1
|
||||||
echo "sudo killall --signal SIGKILL hss_sim" >> $1
|
echo "sudo killall --signal SIGKILL hss_sim" >> $1
|
||||||
ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
|
|||||||
@@ -0,0 +1,146 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.openairinterface.org/?page_id=698
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
contact@openairinterface.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>test-05-tm1</htmlTabRef>
|
||||||
|
<htmlTabName>Test-05MHz-TM1</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
030201
|
||||||
|
040101
|
||||||
|
030101 040301 040501 040603 040604 040605 040606 040607 040641 040642 040643 040644 040401 040201 030201
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="030101">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
||||||
|
<air_interface>ocp</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030201">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate eNB</desc>
|
||||||
|
<air_interface>ocp</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040101">
|
||||||
|
<class>Initialize_UE</class>
|
||||||
|
<desc>Initialize UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040201">
|
||||||
|
<class>Terminate_UE</class>
|
||||||
|
<desc>Terminate UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040301">
|
||||||
|
<class>Attach_UE</class>
|
||||||
|
<desc>Attach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040401">
|
||||||
|
<class>Detach_UE</class>
|
||||||
|
<desc>Detach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040501">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>ping (5MHz - 20 sec)</desc>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040603">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040604">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040605">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040606">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040607">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040641">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 9M -t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040642">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 9M -t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040643">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040644">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.openairinterface.org/?page_id=698
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
contact@openairinterface.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>build-tab</htmlTabRef>
|
||||||
|
<htmlTabName>Build</htmlTabName>
|
||||||
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
010101
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="010101">
|
||||||
|
<class>Build_eNB</class>
|
||||||
|
<desc>Build eNB OCP (USRP)</desc>
|
||||||
|
<Build_eNB_args>-I -w USRP -c --eNBocp --ninja</Build_eNB_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<testCase id="010101">
|
<testCase id="010101">
|
||||||
<class>Build_eNB</class>
|
<class>Build_eNB</class>
|
||||||
<desc>Build RCC</desc>
|
<desc>Build RCC</desc>
|
||||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
|
||||||
<eNB_instance>0</eNB_instance>
|
<eNB_instance>0</eNB_instance>
|
||||||
<eNB_serverId>0</eNB_serverId>
|
<eNB_serverId>0</eNB_serverId>
|
||||||
<backgroundBuild>True</backgroundBuild>
|
<backgroundBuild>True</backgroundBuild>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<testCase id="000101">
|
<testCase id="000101">
|
||||||
<class>WaitEndBuild_eNB</class>
|
<class>WaitEndBuild_eNB</class>
|
||||||
<desc>Wait for end of Build RCC</desc>
|
<desc>Wait for end of Build RCC</desc>
|
||||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
|
||||||
<eNB_instance>0</eNB_instance>
|
<eNB_instance>0</eNB_instance>
|
||||||
<eNB_serverId>0</eNB_serverId>
|
<eNB_serverId>0</eNB_serverId>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
<testCase id="010102">
|
<testCase id="010102">
|
||||||
<class>Build_eNB</class>
|
<class>Build_eNB</class>
|
||||||
<desc>Build Master RRU</desc>
|
<desc>Build Master RRU</desc>
|
||||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
|
||||||
<eNB_instance>1</eNB_instance>
|
<eNB_instance>1</eNB_instance>
|
||||||
<eNB_serverId>1</eNB_serverId>
|
<eNB_serverId>1</eNB_serverId>
|
||||||
<backgroundBuild>True</backgroundBuild>
|
<backgroundBuild>True</backgroundBuild>
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
<testCase id="000102">
|
<testCase id="000102">
|
||||||
<class>WaitEndBuild_eNB</class>
|
<class>WaitEndBuild_eNB</class>
|
||||||
<desc>Wait for end of Build Master RRU</desc>
|
<desc>Wait for end of Build Master RRU</desc>
|
||||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
|
||||||
<eNB_instance>1</eNB_instance>
|
<eNB_instance>1</eNB_instance>
|
||||||
<eNB_serverId>1</eNB_serverId>
|
<eNB_serverId>1</eNB_serverId>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
<testCase id="010103">
|
<testCase id="010103">
|
||||||
<class>Build_eNB</class>
|
<class>Build_eNB</class>
|
||||||
<desc>Build Slave RRU</desc>
|
<desc>Build Slave RRU</desc>
|
||||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
|
||||||
<eNB_instance>2</eNB_instance>
|
<eNB_instance>2</eNB_instance>
|
||||||
<eNB_serverId>2</eNB_serverId>
|
<eNB_serverId>2</eNB_serverId>
|
||||||
<backgroundBuild>True</backgroundBuild>
|
<backgroundBuild>True</backgroundBuild>
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
<testCase id="000103">
|
<testCase id="000103">
|
||||||
<class>WaitEndBuild_eNB</class>
|
<class>WaitEndBuild_eNB</class>
|
||||||
<desc>Wait for end of Build Slave RRU</desc>
|
<desc>Wait for end of Build Slave RRU</desc>
|
||||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
|
||||||
<eNB_instance>2</eNB_instance>
|
<eNB_instance>2</eNB_instance>
|
||||||
<eNB_serverId>2</eNB_serverId>
|
<eNB_serverId>2</eNB_serverId>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<htmlTabRef>test-multi-rru-10</htmlTabRef>
|
<htmlTabRef>test-multi-rru-10</htmlTabRef>
|
||||||
<htmlTabName>Test-Multi-RRU-10MHz</htmlTabName>
|
<htmlTabName>Test-Multi-RRU-10MHz</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>4</repeatCount>
|
<repeatCount>2</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030211 030212 030213
|
030211 030212 030213
|
||||||
030111 030112 030113
|
030111 030112 030113
|
||||||
|
|||||||
@@ -2283,26 +2283,28 @@ add_library(LFDS7
|
|||||||
${lfds7_queue} ${lfds7_ring} ${lfds7_qbss} ${lfds7_stack} ${lfds7_freelist} ${lfds7_btree} ${lfds7_hash} ${lfds7_ordered_list} ${lfds7_unordered_list} ${lfds7_misc}
|
${lfds7_queue} ${lfds7_ring} ${lfds7_qbss} ${lfds7_stack} ${lfds7_freelist} ${lfds7_btree} ${lfds7_hash} ${lfds7_ordered_list} ${lfds7_unordered_list} ${lfds7_misc}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Simulation library
|
add_library(SIMU_COMMON
|
||||||
##########################
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/random_channel.c
|
||||||
set (SIMUSRC
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/rangen_double.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/random_channel.c
|
)
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/rangen_double.c
|
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/multipath_channel.c
|
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/multipath_tv_channel.c
|
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/abstraction.c
|
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/channel_sim.c
|
|
||||||
${OPENAIR1_DIR}/SIMULATION/RF/rf.c
|
|
||||||
${OPENAIR1_DIR}/SIMULATION/RF/dac.c
|
|
||||||
${OPENAIR1_DIR}/SIMULATION/RF/adc.c
|
|
||||||
${OPENAIR_DIR}/targets/ARCH/rfsimulator/apply_channelmod.c
|
|
||||||
#${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
|
||||||
)
|
|
||||||
|
|
||||||
# Simulation library
|
# Simulation library
|
||||||
##########################
|
##########################
|
||||||
add_library( SIMU SHARED ${SIMUSRC} )
|
set (SIMUSRC
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/multipath_channel.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/multipath_tv_channel.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/abstraction.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/channel_sim.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/RF/rf.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/RF/dac.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/RF/adc.c
|
||||||
|
#${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||||
|
)
|
||||||
|
|
||||||
|
# Simulation library
|
||||||
|
##########################
|
||||||
|
add_library(SIMU SHARED ${SIMUSRC} )
|
||||||
|
|
||||||
add_library(SIMU_ETH
|
add_library(SIMU_ETH
|
||||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||||
@@ -2460,9 +2462,11 @@ target_link_libraries(gnbscope ${XFORMS_LIBRARIES})
|
|||||||
|
|
||||||
|
|
||||||
add_library(rfsimulator MODULE
|
add_library(rfsimulator MODULE
|
||||||
${OPENAIR_TARGETS}/ARCH/rfsimulator/simulator.c
|
${OPENAIR_TARGETS}/ARCH/rfsimulator/simulator.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/rfsimulator/apply_channelmod.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/rfsimulator/new_channel_sim.c
|
||||||
)
|
)
|
||||||
target_link_libraries(rfsimulator SIMU ${ATLAS_LIBRARIES})
|
target_link_libraries(rfsimulator SIMU_COMMON ${ATLAS_LIBRARIES})
|
||||||
|
|
||||||
add_library(oai_iqplayer MODULE
|
add_library(oai_iqplayer MODULE
|
||||||
${OPENAIR_TARGETS}/ARCH/iqplayer/iqplayer_lib.c
|
${OPENAIR_TARGETS}/ARCH/iqplayer/iqplayer_lib.c
|
||||||
@@ -2485,7 +2489,7 @@ endif (${T_TRACER})
|
|||||||
add_custom_command (
|
add_custom_command (
|
||||||
OUTPUT ${OPENAIR_DIR}/common/utils/T/T_IDs.h
|
OUTPUT ${OPENAIR_DIR}/common/utils/T/T_IDs.h
|
||||||
COMMAND make clean
|
COMMAND make clean
|
||||||
COMMAND make
|
COMMAND make -j2
|
||||||
COMMAND make check_vcd
|
COMMAND make check_vcd
|
||||||
WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T
|
WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T
|
||||||
DEPENDS ${OPENAIR_DIR}/common/utils/T/T_messages.txt
|
DEPENDS ${OPENAIR_DIR}/common/utils/T/T_messages.txt
|
||||||
@@ -2608,7 +2612,7 @@ add_dependencies(ocp-enb rrc_flag s1ap_flag x2_flag oai_iqplayer)
|
|||||||
target_link_libraries (ocp-enb
|
target_link_libraries (ocp-enb
|
||||||
-Wl,--start-group
|
-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 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 UDP 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 LFDS7
|
PHY_COMMON PHY PHY_RU LFDS L2 L2_LTE NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB LFDS7 SIMU_COMMON
|
||||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB} ${PROTO_AGENT_LIB}
|
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB} ${PROTO_AGENT_LIB}
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
target_link_libraries (ocp-enb ${LIBXML2_LIBRARIES} pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${LIB_LMS_LIBRARIES} ${T_LIB})
|
target_link_libraries (ocp-enb ${LIBXML2_LIBRARIES} pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${LIB_LMS_LIBRARIES} ${T_LIB})
|
||||||
@@ -2678,7 +2682,7 @@ target_link_libraries (lte-uesoftmodem
|
|||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB F1AP F1AP_LIB
|
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB F1AP F1AP_LIB
|
||||||
GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON
|
GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON
|
||||||
PHY_UE PHY_RU LFDS L2_UE L2_LTE LFDS7 SIMU NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
PHY_UE PHY_RU LFDS L2_UE L2_LTE LFDS7 SIMU_COMMON SIMU NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${ATLAS_LIBRARIES}
|
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${ATLAS_LIBRARIES}
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
|
|
||||||
@@ -2773,29 +2777,6 @@ target_link_libraries (nr-uesoftmodem ${T_LIB})
|
|||||||
|
|
||||||
add_dependencies( nr-uesoftmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
add_dependencies( nr-uesoftmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
||||||
|
|
||||||
# USIM process
|
|
||||||
#################
|
|
||||||
#add_executable(usim
|
|
||||||
# ${OPENAIR3_DIR}/NAS/TOOLS/usim_data.c
|
|
||||||
# ${OPENAIR3_DIR}/NAS/USER/API/USIM/usim_api.c
|
|
||||||
# ${OPENAIR3_DIR}/NAS/USER/API/USIM/aka_functions.c
|
|
||||||
# ${OPENAIR3_DIR}/NAS/COMMON/UTIL/memory.c
|
|
||||||
# ${OPENAIR3_DIR}/NAS/COMMON/UTIL/nas_log.c
|
|
||||||
# ${OPENAIR3_DIR}/NAS/COMMON/UTIL/OctetString.c
|
|
||||||
# ${OPENAIR3_DIR}/NAS/COMMON/UTIL/TLVEncoder.c
|
|
||||||
# )
|
|
||||||
#target_link_libraries (usim ${NAS_LIB} UTIL ${ITTI_LIB} LFDS pthread rt nettle crypto m)
|
|
||||||
|
|
||||||
# ???
|
|
||||||
#####################
|
|
||||||
#add_executable(nvram
|
|
||||||
# ${OPENAIR3_DIR}/NAS/TOOLS/ue_data.c
|
|
||||||
# ${OPENAIR3_DIR}/NAS/COMMON/UTIL/memory.c
|
|
||||||
# ${OPENAIR3_DIR}/NAS/COMMON/UTIL/nas_log.c
|
|
||||||
# )
|
|
||||||
#target_link_libraries (nvram LIB_NAS_UE UTIL ${ITTI_LIB} LFDS pthread rt nettle crypto m)
|
|
||||||
|
|
||||||
|
|
||||||
###################################"
|
###################################"
|
||||||
# Addexecutables for tests
|
# Addexecutables for tests
|
||||||
####################################
|
####################################
|
||||||
@@ -2812,7 +2793,7 @@ add_executable(dlsim_tm4
|
|||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
)
|
)
|
||||||
target_link_libraries (dlsim_tm4
|
target_link_libraries (dlsim_tm4
|
||||||
-Wl,--start-group SIMU UTIL SCHED_LIB SCHED_RU_LIB PHY LFDS ${ITTI_LIB} -Wl,--end-group
|
-Wl,--start-group SIMU_COMMON SIMU UTIL SCHED_LIB SCHED_RU_LIB PHY LFDS ${ITTI_LIB} -Wl,--end-group
|
||||||
pthread m rt ${CONFIG_LIB} ${ATLAS_LIBRARIES} ${T_LIB}
|
pthread m rt ${CONFIG_LIB} ${ATLAS_LIBRARIES} ${T_LIB}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2825,7 +2806,7 @@ add_executable(polartest
|
|||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
target_link_libraries(polartest
|
target_link_libraries(polartest
|
||||||
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_COMMON PHY_NR_UE CONFIG_LIB -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR PHY_NR_COMMON PHY_NR_UE CONFIG_LIB -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} dl
|
m pthread ${ATLAS_LIBRARIES} dl
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2840,7 +2821,7 @@ add_executable(smallblocktest
|
|||||||
|
|
||||||
|
|
||||||
target_link_libraries(smallblocktest
|
target_link_libraries(smallblocktest
|
||||||
-Wl,--start-group UTIL SIMU PHY_NR PHY_COMMON PHY_NR_COMMON CONFIG_LIB -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_NR PHY_COMMON PHY_NR_COMMON CONFIG_LIB -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} dl
|
m pthread ${ATLAS_LIBRARIES} dl
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2895,7 +2876,7 @@ set (CMAKE_CXX_FLAGS ${TEMP_CXX_FLAG})
|
|||||||
add_dependencies( ldpctest ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
add_dependencies( ldpctest ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
||||||
|
|
||||||
target_link_libraries(ldpctest
|
target_link_libraries(ldpctest
|
||||||
-Wl,--start-group UTIL SIMU PHY_NR PHY_COMMON PHY_NR_COMMON CONFIG_LIB -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_NR PHY_COMMON PHY_NR_COMMON CONFIG_LIB -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} dl
|
m pthread ${ATLAS_LIBRARIES} dl
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2907,7 +2888,7 @@ add_executable(nr_dlschsim
|
|||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
target_link_libraries(nr_dlschsim
|
target_link_libraries(nr_dlschsim
|
||||||
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2919,7 +2900,7 @@ add_executable(nr_pbchsim
|
|||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
target_link_libraries(nr_pbchsim
|
target_link_libraries(nr_pbchsim
|
||||||
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2934,7 +2915,7 @@ add_executable(nr_pucchsim
|
|||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
target_link_libraries(nr_pucchsim
|
target_link_libraries(nr_pucchsim
|
||||||
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2948,7 +2929,7 @@ add_executable(nr_dlsim
|
|||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
target_link_libraries(nr_dlsim
|
target_link_libraries(nr_dlsim
|
||||||
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_NR -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_NR -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
||||||
)
|
)
|
||||||
target_compile_definitions(nr_dlsim PUBLIC -DPHYSICAL_SIMULATOR)
|
target_compile_definitions(nr_dlsim PUBLIC -DPHYSICAL_SIMULATOR)
|
||||||
@@ -2962,7 +2943,7 @@ add_executable(nr_prachsim
|
|||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${SHLIB_LOADER_SOURCES})
|
${SHLIB_LOADER_SOURCES})
|
||||||
target_link_libraries(nr_prachsim
|
target_link_libraries(nr_prachsim
|
||||||
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_RU PHY_NR_UE MAC_NR_COMMON SCHED_NR_LIB SCHED_NR_UE_LIB RRC_LIB NR_RRC_LIB L2_NR CONFIG_LIB -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl)
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_RU PHY_NR_UE MAC_NR_COMMON SCHED_NR_LIB SCHED_NR_UE_LIB RRC_LIB NR_RRC_LIB L2_NR CONFIG_LIB -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl)
|
||||||
|
|
||||||
add_executable(nr_ulschsim
|
add_executable(nr_ulschsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulschsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulschsim.c
|
||||||
@@ -2972,7 +2953,7 @@ add_executable(nr_ulschsim
|
|||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
target_link_libraries(nr_ulschsim
|
target_link_libraries(nr_ulschsim
|
||||||
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2986,7 +2967,7 @@ add_executable(nr_ulsim
|
|||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
target_link_libraries(nr_ulsim
|
target_link_libraries(nr_ulsim
|
||||||
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_COMMON PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_NR -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR PHY_NR_COMMON PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_NR -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
||||||
)
|
)
|
||||||
target_compile_definitions(nr_ulsim PUBLIC -DPHYSICAL_SIMULATOR)
|
target_compile_definitions(nr_ulsim PUBLIC -DPHYSICAL_SIMULATOR)
|
||||||
@@ -3005,7 +2986,7 @@ foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim pr
|
|||||||
${NFAPI_USER_DIR}/nfapi.c
|
${NFAPI_USER_DIR}/nfapi.c
|
||||||
)
|
)
|
||||||
target_link_libraries (${myExe}
|
target_link_libraries (${myExe}
|
||||||
-Wl,--start-group SIMU UTIL SCHED_LIB SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_NR_COMMON PHY PHY_UE PHY_RU LFDS ${ITTI_LIB} LFDS7 -Wl,--end-group
|
-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_LIB} 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
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -3085,8 +3066,8 @@ if (${T_TRACER})
|
|||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_VNF_LIB NFAPI_USER_LIB
|
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
|
PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU PHY_MEX
|
||||||
L2 L2_LTE L2_NR L2_UE NR_L2_UE MAC_NR_COMMON MAC_NR MAC_UE_NR
|
L2 L2_LTE L2_NR L2_UE NR_L2_UE MAC_NR_COMMON MAC_NR MAC_UE_NR
|
||||||
CN_UTILS GTPV1U SCTP_CLIENT MME_APP UDP LIB_NAS_UE NB_IoT LFDS LFDS7 SIMU SIMU_ETH OPENAIR0_LIB
|
CN_UTILS GTPV1U 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)
|
ldpc_orig ldpc_optim ldpc_optim8seg ldpc PROTO_AGENT dfts)
|
||||||
if (TARGET ${i})
|
if (TARGET ${i})
|
||||||
add_dependencies(${i} generate_T)
|
add_dependencies(${i} generate_T)
|
||||||
endif()
|
endif()
|
||||||
@@ -3129,7 +3110,7 @@ function(make_driver name dir)
|
|||||||
endforeach()
|
endforeach()
|
||||||
CONFIGURE_FILE(${OPENAIR_CMAKE}/tools/Kbuild.cmake ${OPENAIR_BIN_DIR}/${name}/Kbuild)
|
CONFIGURE_FILE(${OPENAIR_CMAKE}/tools/Kbuild.cmake ${OPENAIR_BIN_DIR}/${name}/Kbuild)
|
||||||
add_custom_command(OUTPUT ${name}.ko
|
add_custom_command(OUTPUT ${name}.ko
|
||||||
COMMAND make -C ${module_build_path} M=${OPENAIR_BIN_DIR}/${name}
|
COMMAND make -j2 -C ${module_build_path} M=${OPENAIR_BIN_DIR}/${name}
|
||||||
WORKING_DIRECTORY ${OPENAIR_BIN_DIR}/${name}
|
WORKING_DIRECTORY ${OPENAIR_BIN_DIR}/${name}
|
||||||
COMMENT "building ${module}.ko"
|
COMMENT "building ${module}.ko"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
|
|||||||
+15
-6
@@ -96,7 +96,9 @@ Options
|
|||||||
enable cmake debugging messages
|
enable cmake debugging messages
|
||||||
--eNB
|
--eNB
|
||||||
Makes the LTE softmodem
|
Makes the LTE softmodem
|
||||||
--gNB
|
--eNBocp
|
||||||
|
Makes the OCP LTE softmodem
|
||||||
|
-gNB
|
||||||
Makes the NR softmodem
|
Makes the NR softmodem
|
||||||
--nrUE
|
--nrUE
|
||||||
Makes the NR UE softmodem
|
Makes the NR UE softmodem
|
||||||
@@ -237,7 +239,11 @@ function main() {
|
|||||||
eNB=1
|
eNB=1
|
||||||
echo_info "Will compile eNB"
|
echo_info "Will compile eNB"
|
||||||
shift;;
|
shift;;
|
||||||
--gNB)
|
--eNBocp)
|
||||||
|
eNBocp=1
|
||||||
|
echo_info "Will compile OCP eNB"
|
||||||
|
shift;;
|
||||||
|
--gNB)
|
||||||
gNB=1
|
gNB=1
|
||||||
NR="True"
|
NR="True"
|
||||||
echo_info "Will compile gNB"
|
echo_info "Will compile gNB"
|
||||||
@@ -406,7 +412,7 @@ function main() {
|
|||||||
shift 1;;
|
shift 1;;
|
||||||
-k | --skip-shared-libraries)
|
-k | --skip-shared-libraries)
|
||||||
SKIP_SHARED_LIB_FLAG="True"
|
SKIP_SHARED_LIB_FLAG="True"
|
||||||
echo_info "Skipping build of shared libraries, rfsimulator, basicsimulator and transport protocol libraries"
|
echo_info "Skipping build of shared libraries, rfsimulator and transport protocol libraries"
|
||||||
shift;;
|
shift;;
|
||||||
--ninja)
|
--ninja)
|
||||||
CMAKE_CMD="$CMAKE_CMD -GNinja"
|
CMAKE_CMD="$CMAKE_CMD -GNinja"
|
||||||
@@ -443,7 +449,7 @@ function main() {
|
|||||||
########################################################
|
########################################################
|
||||||
# to be discussed
|
# to be discussed
|
||||||
|
|
||||||
if [ "$eNB" = "1" -o "$gNB" = "1" ] ; then
|
if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$gNB" = "1" ] ; then
|
||||||
if [ "$HW" = "None" -a "$TP" = "None" ] ; then
|
if [ "$HW" = "None" -a "$TP" = "None" ] ; then
|
||||||
echo_info "No local radio head and no transport protocol selected"
|
echo_info "No local radio head and no transport protocol selected"
|
||||||
fi
|
fi
|
||||||
@@ -574,7 +580,7 @@ function main() {
|
|||||||
config_libconfig_shlib=params_libconfig
|
config_libconfig_shlib=params_libconfig
|
||||||
|
|
||||||
# first generate the CMakefile in the right directory
|
# first generate the CMakefile in the right directory
|
||||||
if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" ] ; then
|
if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" ] ; then
|
||||||
|
|
||||||
# softmodem compilation
|
# softmodem compilation
|
||||||
|
|
||||||
@@ -606,6 +612,9 @@ function main() {
|
|||||||
if [ "$eNB" = "1" ] ; then
|
if [ "$eNB" = "1" ] ; then
|
||||||
execlist="$execlist lte-softmodem"
|
execlist="$execlist lte-softmodem"
|
||||||
fi
|
fi
|
||||||
|
if [ "$eNBocp" = "1" ] ; then
|
||||||
|
execlist="$execlist ocp-enb"
|
||||||
|
fi
|
||||||
if [ "$gNB" = "1" ] ; then
|
if [ "$gNB" = "1" ] ; then
|
||||||
execlist="$execlist nr-softmodem"
|
execlist="$execlist nr-softmodem"
|
||||||
fi
|
fi
|
||||||
@@ -897,7 +906,7 @@ function main() {
|
|||||||
$build_dir rfsimulator \
|
$build_dir rfsimulator \
|
||||||
librfsimulator.so $dbin/librfsimulator.so.$REL
|
librfsimulator.so $dbin/librfsimulator.so.$REL
|
||||||
|
|
||||||
echo_info "Compiling basicsimulator"
|
echo_info "Compiling tcp_bridge_oai"
|
||||||
compilations \
|
compilations \
|
||||||
$build_dir tcp_bridge_oai \
|
$build_dir tcp_bridge_oai \
|
||||||
libtcp_bridge_oai.so $dbin/libtcp_bridge_oai.so.$REL
|
libtcp_bridge_oai.so $dbin/libtcp_bridge_oai.so.$REL
|
||||||
|
|||||||
@@ -150,7 +150,9 @@ clean_all_files() {
|
|||||||
set_openair_env
|
set_openair_env
|
||||||
dir=$OPENAIR_DIR/cmake_targets
|
dir=$OPENAIR_DIR/cmake_targets
|
||||||
rm -rf $dir/log $OPENAIR_DIR/targets/bin/*
|
rm -rf $dir/log $OPENAIR_DIR/targets/bin/*
|
||||||
rm -rf $dir/ran_build $dir/lte-simulators/build
|
rm -rf $dir/ran_build $dir/ran_build_noLOG
|
||||||
|
rm -rf $dir/lte-simulators/build
|
||||||
|
rm -rf $dir/phy_simulators/build $dir/nas_sim_tools/build
|
||||||
rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt
|
rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt
|
||||||
rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build
|
rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build
|
||||||
}
|
}
|
||||||
@@ -167,7 +169,7 @@ check_warnings() {
|
|||||||
#we look for 'warning:' in the compilation log file
|
#we look for 'warning:' in the compilation log file
|
||||||
#this is how gcc starts a warning
|
#this is how gcc starts a warning
|
||||||
#this is not perfect, we may get false positive
|
#this is not perfect, we may get false positive
|
||||||
warning_count=`grep "warning:" "$1"|wc -l`
|
warning_count=`grep "warning:" "$1" | egrep -v "jobserver unavailable|disabling jobserver mode" | wc -l`
|
||||||
if [ $warning_count -gt 0 ]; then
|
if [ $warning_count -gt 0 ]; then
|
||||||
echo_error "WARNING: $warning_count warnings. See $1"
|
echo_error "WARNING: $warning_count warnings. See $1"
|
||||||
fi
|
fi
|
||||||
@@ -177,7 +179,6 @@ compilations() {
|
|||||||
cd $OPENAIR_DIR/cmake_targets/$1/build
|
cd $OPENAIR_DIR/cmake_targets/$1/build
|
||||||
set +e
|
set +e
|
||||||
{
|
{
|
||||||
rm -f $3
|
|
||||||
if [ "$BUILD_COVERITY_SCAN" == "1" ]; then
|
if [ "$BUILD_COVERITY_SCAN" == "1" ]; then
|
||||||
COV_SCAN_PREFIX="cov-build --dir cov-int"
|
COV_SCAN_PREFIX="cov-build --dir cov-int"
|
||||||
else
|
else
|
||||||
|
|||||||
+117
-58
@@ -1,6 +1,8 @@
|
|||||||
**Table of Contents**
|
**Table of Contents**
|
||||||
|
|
||||||
1. [OpenAirInterface eNB Feature Set](#openairinterface-enb-feature-set)
|
1. [Functional Split Architecture](#functional-split-architecture)
|
||||||
|
2. [OpenAirInterface Block Diagram](#openairinterface-block-diagram)
|
||||||
|
2. [OpenAirInterface 4G-LTE eNB Feature Set](#openairinterface-4g-lte-enb-feature-set)
|
||||||
1. [eNB PHY Layer](#enb-phy-layer)
|
1. [eNB PHY Layer](#enb-phy-layer)
|
||||||
2. [eNB MAC Layer](#enb-mac-layer)
|
2. [eNB MAC Layer](#enb-mac-layer)
|
||||||
3. [eNB RLC Layer](#enb-rlc-layer)
|
3. [eNB RLC Layer](#enb-rlc-layer)
|
||||||
@@ -9,29 +11,38 @@
|
|||||||
6. [eNB X2AP](#enb-x2ap)
|
6. [eNB X2AP](#enb-x2ap)
|
||||||
7. [eNB/MCE M2AP](#enbmce-m2ap)
|
7. [eNB/MCE M2AP](#enbmce-m2ap)
|
||||||
8. [MCE/MME M3AP](#mcemme-m3ap)
|
8. [MCE/MME M3AP](#mcemme-m3ap)
|
||||||
9. [eNB Advanced Features](#enb-advanced-features)
|
3. [OpenAirInterface 4G-LTE UE Feature Set](#openairinterface-4g-lte-ue-feature-set)
|
||||||
2. [OpenAirInterface Functional Split](#openairinterface-functional-split)
|
|
||||||
3. [OpenAirInterface UE Feature Set](#openairinterface-ue-feature-set)
|
|
||||||
1. [LTE UE PHY Layer](#lte-ue-phy-layer)
|
1. [LTE UE PHY Layer](#lte-ue-phy-layer)
|
||||||
2. [LTE UE MAC Layer](#lte-ue-mac-layer)
|
2. [LTE UE MAC Layer](#lte-ue-mac-layer)
|
||||||
3. [LTE UE RLC Layer](#lte-ue-rlc-layer)
|
3. [LTE UE RLC Layer](#lte-ue-rlc-layer)
|
||||||
4. [LTE UE PDCP Layer](#lte-ue-pdcp-layer)
|
4. [LTE UE PDCP Layer](#lte-ue-pdcp-layer)
|
||||||
5. [LTE UE RRC Layer](#lte-ue-rrc-layer)
|
5. [LTE UE RRC Layer](#lte-ue-rrc-layer)
|
||||||
4. [OpenAirInterface Functional Split](#openairinterface-functional-split)
|
4. [OpenAirInterface 5G-NR gNB Feature Set](#openairinterface-5g-nr-feature-set)
|
||||||
5. [OpenAirInterface 5G-NR Feature Set](#openairinterface-5g-nr-feature-set)
|
|
||||||
1. [General Parameters](#general-parameters)
|
1. [General Parameters](#general-parameters)
|
||||||
2. [gNB Features](#gnb-features)
|
2. [gNB Physical Layer](#gnb-phy-layer)
|
||||||
1. [gNB Physical Layer](#gnb-phy-layer)
|
3. [gNB Higher Layers](#gnb-higher-layers)
|
||||||
2. [gNB Higher Layers](#gnb-higher-layers)
|
5. [OpenAirInterface 5G-NR UE Feature Set](#openairinterface-5g-nr-ue-feature-set)
|
||||||
3. [NR UE Features](#nr-ue-features)
|
1. [UE Physical Layer](#ue-phy-layer)
|
||||||
1. [NR UE Physical Layer](#nr-ue-phy-layer)
|
2. [UE Higher Layers](#ue-higher-layers)
|
||||||
2. [NR UE Higher Layers](#nr-ue-higher-layers)
|
|
||||||
|
|
||||||
# OpenAirInterface Block diagram #
|
|
||||||
|
# Functional Split Architecture #
|
||||||
|
|
||||||
|
- RCC: Radio-Cloud Center
|
||||||
|
- RAU: Radio-Access Unit
|
||||||
|
- RRU: Remote Radio-Unit
|
||||||
|
- IF4.5 / IF5 : similar to IEEE P1914.1
|
||||||
|
- FAPI (IF2) : specified by Small Cell Forum (open-nFAPI implementation)
|
||||||
|
- IF1 : F1 in 3GPP Release 15
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
# OpenAirInterface Block Diagram #
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
# OpenAirInterface eNB Feature Set #
|
# OpenAirInterface 4G LTE eNB Feature Set #
|
||||||
|
|
||||||
## eNB PHY Layer ##
|
## eNB PHY Layer ##
|
||||||
|
|
||||||
@@ -82,7 +93,11 @@ TDD UL: 20 MHz, 100 PRBS/ MCS **XX** | 3.0 Mbit/s | TM1: 4.21 Mbits/s
|
|||||||
The MAC layer implements a subset of the **3GPP 36.321** release v8.6 in support of BCH, DLSCH, RACH, and ULSCH channels.
|
The MAC layer implements a subset of the **3GPP 36.321** release v8.6 in support of BCH, DLSCH, RACH, and ULSCH channels.
|
||||||
|
|
||||||
- RRC interface for CCCH, DCCH, and DTCH
|
- RRC interface for CCCH, DCCH, and DTCH
|
||||||
- Proportional fair scheduler (round robin scheduler soon)
|
- Proportional fair scheduler (round robin scheduler soon), with the following improvements:
|
||||||
|
- Up to 30 users tested in the L2 simulator, CCE allocation in the preprocessor ; the scheduler was also simplified and made more modular
|
||||||
|
- Adaptative UL-HARQ
|
||||||
|
- Remove out-of-sync UEs
|
||||||
|
- No use of the `first_rb` in the UL scheduler ; respects `vrb_map_UL` and `vrb_map` in the DL
|
||||||
- DCI generation
|
- DCI generation
|
||||||
- HARQ Support
|
- HARQ Support
|
||||||
- RA procedures and RNTI management
|
- RA procedures and RNTI management
|
||||||
@@ -123,7 +138,7 @@ The current PDCP layer is header compliant with **3GPP 36.323** Rel 10.1.0 and i
|
|||||||
|
|
||||||
## eNB RRC Layer ##
|
## eNB RRC Layer ##
|
||||||
|
|
||||||
The RRC layer is based on **3GPP 36.331** v14.3.0 and implements the following functions:
|
The RRC layer is based on **3GPP 36.331** v15.6 and implements the following functions:
|
||||||
|
|
||||||
- System Information broadcast (SIB 1, 2, 3, and 13)
|
- System Information broadcast (SIB 1, 2, 3, and 13)
|
||||||
* SIB1: Up to 6 PLMN IDs broadcast
|
* SIB1: Up to 6 PLMN IDs broadcast
|
||||||
@@ -150,6 +165,10 @@ The X2AP layer is based on **3GPP 36.423** v14.6.0 and implements the following
|
|||||||
- X2 timers (t_reloc_prep, tx2_reloc_overall)
|
- X2 timers (t_reloc_prep, tx2_reloc_overall)
|
||||||
- Handover Cancel
|
- Handover Cancel
|
||||||
- X2-U interface implemented
|
- X2-U interface implemented
|
||||||
|
- EN-DC is implemented
|
||||||
|
- X2AP : Handling of SgNB Addition Request / Addition Request Acknowledge / Reconfiguration Complete
|
||||||
|
- RRC : Handling of RRC Connection Reconfiguration with 5G cell info, configuration of 5G-NR measurements
|
||||||
|
- S1AP : Handling of E-RAB Modification Indication / Confirmation
|
||||||
|
|
||||||
## eNB/MCE M2AP ##
|
## eNB/MCE M2AP ##
|
||||||
|
|
||||||
@@ -171,11 +190,8 @@ The M3AP layer is based on **3GPP 36.444** v14.0.1:
|
|||||||
- M3 Session Start Request
|
- M3 Session Start Request
|
||||||
- M3 Session Start Response
|
- M3 Session Start Response
|
||||||
|
|
||||||
## eNB Advanced Features ##
|
|
||||||
|
|
||||||
**To be completed**
|
# OpenAirInterface 4G LTE UE Feature Set #
|
||||||
|
|
||||||
# OpenAirInterface UE Feature Set #
|
|
||||||
|
|
||||||
## LTE UE PHY Layer ##
|
## LTE UE PHY Layer ##
|
||||||
|
|
||||||
@@ -230,17 +246,6 @@ The NAS layer is based on **3GPP 24.301** and implements the following functions
|
|||||||
- EMM attach/detach, authentication, tracking area update, and more
|
- EMM attach/detach, authentication, tracking area update, and more
|
||||||
- ESM default/dedicated bearer, PDN connectivity, and more
|
- ESM default/dedicated bearer, PDN connectivity, and more
|
||||||
|
|
||||||
# OpenAirInterface Functional Split #
|
|
||||||
|
|
||||||
- RCC: Radio-Cloud Center
|
|
||||||
- RAU: Radio-Access Unit
|
|
||||||
- RRU: Remote Radio-Unit
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
- IF4.5 / IF5 : similar to IEEE P1914.1
|
|
||||||
- FAPI (IF2) : specified by Small Cell Forum (open-nFAPI implementation)
|
|
||||||
- IF1 : F1 in 3GPP Release 15
|
|
||||||
|
|
||||||
# OpenAirInterface 5G-NR Feature Set #
|
# OpenAirInterface 5G-NR Feature Set #
|
||||||
|
|
||||||
@@ -258,49 +263,103 @@ The following features are valid for the gNB and the 5G-NR UE.
|
|||||||
* Highly efficient 3GPP compliant polar encoder and decoder
|
* Highly efficient 3GPP compliant polar encoder and decoder
|
||||||
* Encoder and decoder for short blocks
|
* Encoder and decoder for short blocks
|
||||||
|
|
||||||
## gNB Features ##
|
|
||||||
|
|
||||||
### gNB PHY Layer ###
|
## gNB PHY Layer ##
|
||||||
|
|
||||||
* Generation of PSS/SSS/PBCH for multiple beams and
|
* 30KHz SCS for FR1 and 120 KHz SCS for FR2
|
||||||
* Generation of PDCCH for SIB1 (including generation of DCI, polar encoding, scrambling, modulation, RB mapping, etc)
|
* Generation of NR-PSS/NR-SSS
|
||||||
|
* NR-PBCH supports multiple SSBs and flexible periodicity
|
||||||
|
* Generation of NR-PDCCH for SIB1 (including generation of DCI, polar encoding, scrambling, modulation, RB mapping, etc)
|
||||||
- common search space configured by MIB
|
- common search space configured by MIB
|
||||||
- user-specific search space configured by RRC
|
- user-specific search space configured by RRC
|
||||||
- DCI formats: 00, 10
|
- DCI formats: 00, 10 (01 and 11 **under integration**)
|
||||||
* Generation of PDSCH (including Segmentation, LDPC encoding, rate matching, scrambling, modulation, RB mapping, etc).
|
* Generation of NR-PDSCH (including Segmentation, LDPC encoding, rate matching, scrambling, modulation, RB mapping, etc).
|
||||||
- Single symbol DMRS, dmrs-TypeA-Position Pos2, DMRS configuration type 1
|
- Single symbol DMRS, DMRS-TypeA-Position Pos2, DMRS configuration type 1
|
||||||
- PDSCH mapping type A
|
- PDSCH mapping type A
|
||||||
|
* NR-CSI Generation of sequence at PHY (**under integration**)
|
||||||
* NR-PUSCH (including Segmentation, LDPC encoding, rate matching, scrambling, modulation, RB mapping, etc).
|
* NR-PUSCH (including Segmentation, LDPC encoding, rate matching, scrambling, modulation, RB mapping, etc).
|
||||||
* NR-PUCCH
|
* NR-PUCCH
|
||||||
- Format 0 (ACK/NACK)
|
- Format 0 (2 bits, mainly for ACK/NACK)
|
||||||
|
- Format 2 (up to 64 bits, mainly for CSI feedback)
|
||||||
|
* NR-PRACH
|
||||||
|
- Formats 0,1,2,3, A1-A3, B1-B3
|
||||||
|
* Highly efficient 3GPP compliant LDPC encoder and decoder (BG1 and BG2 are supported)
|
||||||
|
* Highly efficient 3GPP compliant polar encoder and decoder
|
||||||
|
* Encoder and decoder for short block
|
||||||
|
|
||||||
### gNB higher Layers ###
|
## gNB Higher Layers ##
|
||||||
|
|
||||||
|
**gNB RRC**
|
||||||
- NR RRC (38.331) Rel 15 messages using new asn1c
|
- NR RRC (38.331) Rel 15 messages using new asn1c
|
||||||
- LTE RRC (36.331) also updated to Rel 15
|
- LTE RRC (36.331) also updated to Rel 15
|
||||||
- Generation of MIB
|
- Generation of CellGroupConfig (for eNB) and MIB
|
||||||
- Application to read configuration file and program gNB RRC
|
- Application to read configuration file and program gNB RRC
|
||||||
- RRC -> MAC configuration
|
- RRC can configure PDCP, RLC, MAC
|
||||||
- MAC -> PHY configuration (using NR FAPI P5 interface)
|
|
||||||
- FAPI P7 interface for BCH PDU, DCI PDU, PDSCH PDU
|
|
||||||
|
|
||||||
For more details see [this document](https://gitlab.eurecom.fr/oai/openairinterface5g/uploads/ba5368448d627743a28c770c29e8978e/OAI_Software_Architecture_for_Dual_Connectivity_in_E-UTRA_and_5G-NR_and_nFAPI_for_MAC-PHY_Interface.docx)
|
**gNB X2AP**
|
||||||
|
- X2 setup with eNB
|
||||||
|
- Handling of SgNB Addition Request / Addition Request Acknowledge / Reconfiguration Complete
|
||||||
|
|
||||||
## NR UE Features ##
|
**gNB MAC**
|
||||||
|
- MAC -> PHY configuration using NR FAPI P5 interface
|
||||||
|
- MAC <-> PHY data interface using FAPI P7 interface for BCH PDU, DCI PDU, PDSCH PDU
|
||||||
|
- Scheduler for RA procedreat gNB
|
||||||
|
- MAC downlink scheduler (fixed allocations)
|
||||||
|
- MAC header generation (including timing advance)
|
||||||
|
- ACK / NACK handling and HARQ procedures for downlink
|
||||||
|
- **As of May 2020** only DL was validated with COTS phone ; UL in progress, validated with OAI UE in noS1 mode
|
||||||
|
|
||||||
### NR UE PHY Layer ###
|
|
||||||
|
|
||||||
- initial synchronization
|
# OpenAirInterface 5G-NR UE Feature Set #
|
||||||
- Time tracking based on PDCCH DMRS
|
|
||||||
- Frequency offset estimation
|
**as of May 2020** only supporting "noS1" mode (DL):
|
||||||
- PBCH RX
|
- Creates TUN interface to PDCP to inject and receive user-place traffic
|
||||||
- PDCCH RX
|
- Will only work with OAI gNB configured in the same mode
|
||||||
- PDSCH RX
|
|
||||||
- including first version of dual stream receiver for PDSCH
|
## UE PHY Layer ##
|
||||||
|
|
||||||
|
* Initial synchronization
|
||||||
|
* Time tracking based on PBCH DMRS
|
||||||
|
* Time tracking based on PBCH DMRS
|
||||||
|
* Frequency offset estimation
|
||||||
|
* PBCH RX
|
||||||
|
* PDCCH RX
|
||||||
|
* PDSCH RX, including a first version of dual stream receiver for PDSCH
|
||||||
|
* 30KHz SCS for FR1 and 120 KHz SCS for FR2
|
||||||
|
* Generation of NR-PSS/NR-SSS
|
||||||
|
* NR-PBCH supports multiple SSBs and flexible periodicity
|
||||||
|
* Generation of NR-PDCCH for SIB1 (including generation of DCI, polar encoding, scrambling, modulation, RB mapping, etc)
|
||||||
|
- common search space configured by MIB
|
||||||
|
- user-specific search space configured by RRC
|
||||||
|
- DCI formats: 00, 10 (01 and 11 **under integration**)
|
||||||
|
* Generation of NR-PDSCH (including Segmentation, LDPC encoding, rate matching, scrambling, modulation, RB mapping, etc).
|
||||||
|
- Single symbol DMRS, DMRS-TypeA-Position Pos2, DMRS configuration type 1
|
||||||
|
- PDSCH mapping type A
|
||||||
|
* NR-CSI Generation of sequence at PHY (**under integration**)
|
||||||
|
* NR-PUSCH (including Segmentation, LDPC encoding, rate matching, scrambling, modulation, RB mapping, etc).
|
||||||
|
* NR-PUCCH
|
||||||
|
- Format 0 (2 bits, mainly for ACK/NACK)
|
||||||
|
- Format 2 (up to 64 bits, mainly for CSI feedback)
|
||||||
|
* NR-PRACH
|
||||||
|
- Formats 0,1,2,3, A1-A3, B1-B3
|
||||||
|
* Highly efficient 3GPP compliant LDPC encoder and decoder (BG1 and BG2 are supported)
|
||||||
|
* Highly efficient 3GPP compliant polar encoder and decoder
|
||||||
|
* Encoder and decoder for short block
|
||||||
|
|
||||||
|
|
||||||
|
## UE Higher Layers ##
|
||||||
|
|
||||||
|
**gNB MAC**
|
||||||
|
- Initial sync and MIB detection
|
||||||
|
- MAC -> PHY configuration of PHY via UE FAPI P5 interface
|
||||||
|
- Basic MAC to control PHY via UE FAPI P7 interface
|
||||||
|
- Random ccess procedure
|
||||||
|
|
||||||
|
**RLC**
|
||||||
|
|
||||||
|
**PDCP**
|
||||||
|
|
||||||
### NR UE higher Layers ###
|
|
||||||
|
|
||||||
For more details see [this document](https://gitlab.eurecom.fr/oai/openairinterface5g/uploads/f7386f3a64806fd6b2ac1fc3d0252fff/UE_FAPI-like_interface.docx)
|
|
||||||
|
|
||||||
[OAI wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
[OAI wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -634,7 +634,7 @@ void syncInFrame(PHY_VARS_NR_UE *UE, openair0_timestamp *timestamp) {
|
|||||||
|
|
||||||
int computeSamplesShift(PHY_VARS_NR_UE *UE) {
|
int computeSamplesShift(PHY_VARS_NR_UE *UE) {
|
||||||
if (IS_SOFTMODEM_RFSIM) {
|
if (IS_SOFTMODEM_RFSIM) {
|
||||||
LOG_E(PHY,"SET rx_offset %d \n",UE->rx_offset);
|
LOG_D(PHY,"SET rx_offset %d \n",UE->rx_offset);
|
||||||
//UE->rx_offset_diff=0;
|
//UE->rx_offset_diff=0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -857,8 +857,9 @@ void *UE_thread(void *arg) {
|
|||||||
usleep(200);
|
usleep(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( decoded_frame_rx != curMsg->proc.frame_rx &&
|
if ( (decoded_frame_rx != curMsg->proc.frame_rx) &&
|
||||||
((decoded_frame_rx+1) % MAX_FRAME_NUMBER) != curMsg->proc.frame_rx )
|
(((decoded_frame_rx+1) % MAX_FRAME_NUMBER) != curMsg->proc.frame_rx) &&
|
||||||
|
(((decoded_frame_rx+2) % MAX_FRAME_NUMBER) != curMsg->proc.frame_rx))
|
||||||
LOG_E(PHY,"Decoded frame index (%d) is not compatible with current context (%d), UE should go back to synch mode\n",
|
LOG_E(PHY,"Decoded frame index (%d) is not compatible with current context (%d), UE should go back to synch mode\n",
|
||||||
decoded_frame_rx, curMsg->proc.frame_rx );
|
decoded_frame_rx, curMsg->proc.frame_rx );
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <cuda_runtime.h>
|
#include <cuda_runtime.h>
|
||||||
#include <cuda.h>
|
#include <cuda.h>
|
||||||
#include "PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_types.h"
|
#include "PHY/CODING/nrLDPC_decoder/nrLDPC_types.h"
|
||||||
#include "PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_defs.h"
|
#include "PHY/CODING/nrLDPC_decoder/nrLDPCdecoder_defs.h"
|
||||||
|
|
||||||
#include "bgs/BG1_I0"
|
#include "bgs/BG1_I0"
|
||||||
#include "bgs/BG1_I1"
|
#include "bgs/BG1_I1"
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
#ifndef __NR_LDPC_DECODER_LYC__H__
|
#ifndef __NR_LDPC_DECODER_LYC__H__
|
||||||
#define __NR_LDPC_DECODER_LYC__H__
|
#define __NR_LDPC_DECODER_LYC__H__
|
||||||
|
|
||||||
#include "nrLDPC_types.h"
|
|
||||||
#include "nrLDPC_init_mem.h"
|
|
||||||
|
|
||||||
/*! \file PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.h
|
/*! \file PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.h
|
||||||
* \brief LDPC cuda support BG1 all length
|
* \brief LDPC cuda support BG1 all length
|
||||||
|
|||||||
@@ -1,212 +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 PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_defs.h
|
|
||||||
* \brief LDPC cuda support BG1 all length
|
|
||||||
* \author NCTU OpinConnect Terng-Yin Hsu,WEI-YING,LIN
|
|
||||||
* \email tyhsu@cs.nctu.edu.tw
|
|
||||||
* \date 13-05-2020
|
|
||||||
* \version
|
|
||||||
* \note
|
|
||||||
* \warning
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*!\file nrLDPC_defs.h
|
|
||||||
* \brief Defines all constants and buffers for the LDPC decoder
|
|
||||||
* \author Sebastian Wagner (TCL Communications) Email: <mailto:sebastian.wagner@tcl.com>
|
|
||||||
* \date 27-03-2018
|
|
||||||
* \version 1.0
|
|
||||||
* \note
|
|
||||||
* \warning
|
|
||||||
* */
|
|
||||||
|
|
||||||
#ifndef __NR_LDPC_DEFS__H__
|
|
||||||
#define __NR_LDPC_DEFS__H__
|
|
||||||
|
|
||||||
// ==============================================================================
|
|
||||||
// DEFINES
|
|
||||||
|
|
||||||
/** Maximum lifting size */
|
|
||||||
#define NR_LDPC_ZMAX 384
|
|
||||||
|
|
||||||
/** Number of columns in BG1 */
|
|
||||||
#define NR_LDPC_NCOL_BG1 68
|
|
||||||
/** Number of rows in BG1 */
|
|
||||||
#define NR_LDPC_NROW_BG1 46
|
|
||||||
/** Number of edges/entries in BG1 */
|
|
||||||
#define NR_LDPC_NUM_EDGE_BG1 316
|
|
||||||
/** Number of check node (CN) groups in BG1
|
|
||||||
A CN group is defined by its number of connected bit nodes. */
|
|
||||||
#define NR_LDPC_NUM_CN_GROUPS_BG1 9
|
|
||||||
/** First column in BG1 that is connected to only a single CN */
|
|
||||||
#define NR_LDPC_START_COL_PARITY_BG1 26
|
|
||||||
|
|
||||||
/** Number of columns in BG1 for rate 1/3 = 22/(68-2) */
|
|
||||||
#define NR_LDPC_NCOL_BG1_R13 NR_LDPC_NCOL_BG1
|
|
||||||
/** Number of columns in BG1 for rate 2/3 = 22/(35-2) */
|
|
||||||
#define NR_LDPC_NCOL_BG1_R23 35
|
|
||||||
/** Number of columns in BG1 for rate 8/9 ~ 22/(27-2) */
|
|
||||||
#define NR_LDPC_NCOL_BG1_R89 27
|
|
||||||
|
|
||||||
/** Number of bit node (BN) groups in BG1 for rate 1/3
|
|
||||||
A BN group is defined by its number of connected CNs. */
|
|
||||||
#define NR_LDPC_NUM_BN_GROUPS_BG1_R13 30
|
|
||||||
/** Number of bit node (BN) groups in BG1 for rate 2/3 */
|
|
||||||
#define NR_LDPC_NUM_BN_GROUPS_BG1_R23 8
|
|
||||||
/** Number of bit node (BN) groups in BG1 for rate 8/9 */
|
|
||||||
#define NR_LDPC_NUM_BN_GROUPS_BG1_R89 5
|
|
||||||
|
|
||||||
/** Number of columns in BG2 */
|
|
||||||
#define NR_LDPC_NCOL_BG2 52
|
|
||||||
/** Number of rows in BG2 */
|
|
||||||
#define NR_LDPC_NROW_BG2 42
|
|
||||||
/** Number of edges/entries in BG2 */
|
|
||||||
#define NR_LDPC_NUM_EDGE_BG2 197
|
|
||||||
/** Number of check node (CN) groups in BG2
|
|
||||||
A CN group is defined by its number of connected bit nodes. */
|
|
||||||
#define NR_LDPC_NUM_CN_GROUPS_BG2 6
|
|
||||||
/** First column in BG2 that is connected to only a single CN */
|
|
||||||
#define NR_LDPC_START_COL_PARITY_BG2 14
|
|
||||||
|
|
||||||
/** Number of columns in BG2 for rate 1/5 = 10/(52-2) */
|
|
||||||
#define NR_LDPC_NCOL_BG2_R15 NR_LDPC_NCOL_BG2
|
|
||||||
/** Number of columns in BG2 for rate 1/3 = 10/(32-2) */
|
|
||||||
#define NR_LDPC_NCOL_BG2_R13 32
|
|
||||||
/** Number of columns in BG2 for rate 2/3 = 10/(17-2) */
|
|
||||||
#define NR_LDPC_NCOL_BG2_R23 17
|
|
||||||
|
|
||||||
/** Number of bit node (BN) groups in BG2 for rate 1/5
|
|
||||||
A BN group is defined by its number of connected CNs. */
|
|
||||||
#define NR_LDPC_NUM_BN_GROUPS_BG2_R15 23
|
|
||||||
/** Number of bit node (BN) groups in BG2 for rate 1/3 */
|
|
||||||
#define NR_LDPC_NUM_BN_GROUPS_BG2_R13 10
|
|
||||||
/** Number of bit node (BN) groups in BG2 for rate 2/3 */
|
|
||||||
#define NR_LDPC_NUM_BN_GROUPS_BG2_R23 6
|
|
||||||
|
|
||||||
/** Worst case size of the CN processing buffer */
|
|
||||||
#define NR_LDPC_SIZE_CN_PROC_BUF NR_LDPC_NUM_EDGE_BG1*NR_LDPC_ZMAX
|
|
||||||
/** Worst case size of the BN processing buffer */
|
|
||||||
#define NR_LDPC_SIZE_BN_PROC_BUF NR_LDPC_NUM_EDGE_BG1*NR_LDPC_ZMAX
|
|
||||||
|
|
||||||
/** Maximum number of possible input LLR = NR_LDPC_NCOL_BG1*NR_LDPC_ZMAX */
|
|
||||||
#define NR_LDPC_MAX_NUM_LLR 26112
|
|
||||||
|
|
||||||
// ==============================================================================
|
|
||||||
// GLOBAL CONSTANT VARIABLES
|
|
||||||
|
|
||||||
/** Start addresses for the cnProcBuf for each CN group in BG1*/
|
|
||||||
static const uint32_t lut_startAddrCnGroups_BG1[NR_LDPC_NUM_CN_GROUPS_BG1] = {0, 1152, 8832, 43392, 61824, 75264, 81408, 88320, 92160};
|
|
||||||
/** Start addresses for the cnProcBuf for each CN group in BG2*/
|
|
||||||
static const uint32_t lut_startAddrCnGroups_BG2[NR_LDPC_NUM_CN_GROUPS_BG2] = {0, 6912, 37632, 54912, 61824, 67968};
|
|
||||||
|
|
||||||
/** Number of BNs of CN group for BG1.
|
|
||||||
E.g. 10 means that there is a CN group where every CN is connected to 10 BNs */
|
|
||||||
static const uint8_t lut_numBnInCnGroups_BG1_R13[NR_LDPC_NUM_CN_GROUPS_BG1] = {3, 4, 5, 6, 7, 8, 9, 10, 19};
|
|
||||||
/** Number of rows/CNs in every CN group for rate = 1/3 BG1, e.g. 5 rows of CNs connected to 4 BNs */
|
|
||||||
static const uint8_t lut_numCnInCnGroups_BG1_R13[NR_LDPC_NUM_CN_GROUPS_BG1] = {1, 5, 18, 8, 5, 2, 2, 1, 4};
|
|
||||||
/** Number of rows/CNs in every CN group for rate = 2/3 BG1, e.g. 3 rows of CNs connected to 7 BNs */
|
|
||||||
static const uint8_t lut_numCnInCnGroups_BG1_R23[NR_LDPC_NUM_CN_GROUPS_BG1] = {1, 0, 0, 0, 3, 2, 2, 1, 4};
|
|
||||||
/** Number of rows/CNs in every CN group for rate = 8/9 BG1, e.g. 4 rows of CNs connected to 19 BNs */
|
|
||||||
static const uint8_t lut_numCnInCnGroups_BG1_R89[NR_LDPC_NUM_CN_GROUPS_BG1] = {1, 0, 0, 0, 0, 0, 0, 0, 4};
|
|
||||||
|
|
||||||
/** Number of connected BNs for every column in BG1 rate = 1/3, e.g. in first column all BNs are connected to 30 CNs */
|
|
||||||
static const uint8_t lut_numEdgesPerBn_BG1_R13[NR_LDPC_START_COL_PARITY_BG1] = {30, 28, 7, 11, 9, 4, 8, 12, 8, 7, 12, 10, 12, 11, 10, 7, 10, 10, 13, 7, 8, 11, 12, 5, 6, 6};
|
|
||||||
/** Number of connected BNs for every column in BG1 rate = 2/3, e.g. in first column all BNs are connected to 12 CNs */
|
|
||||||
static const uint8_t lut_numEdgesPerBn_BG1_R23[NR_LDPC_START_COL_PARITY_BG1] = {12, 11, 4, 5, 5, 3, 4, 5, 5, 3, 6, 6, 6, 6, 5, 3, 6, 5, 6, 4, 5, 6, 6, 3, 3, 2};
|
|
||||||
/** Number of connected BNs for every column in BG1 rate = 8/9, e.g. in first column all BNs are connected to 5 CNs */
|
|
||||||
static const uint8_t lut_numEdgesPerBn_BG1_R89[NR_LDPC_START_COL_PARITY_BG1] = {5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2};
|
|
||||||
|
|
||||||
/** Number of BNs of CN group for BG2.
|
|
||||||
E.g. 3 means that there is a CN group where every CN is connected to 3 BNs */
|
|
||||||
static const uint8_t lut_numBnInCnGroups_BG2_R15[NR_LDPC_NUM_CN_GROUPS_BG2] = {3, 4, 5, 6, 8, 10};
|
|
||||||
/** Number of rows/CNs in every CN group for rate = 1/5 BG2, e.g. 6 rows of CNs connected to 3 BNs */
|
|
||||||
static const uint8_t lut_numCnInCnGroups_BG2_R15[NR_LDPC_NUM_CN_GROUPS_BG2] = {6, 20, 9, 3, 2, 2};
|
|
||||||
/** Number of rows/CNs in every CN group for rate = 1/3 BG2, e.g. 8 rows of CNs connected to 4 BNs */
|
|
||||||
static const uint8_t lut_numCnInCnGroups_BG2_R13[NR_LDPC_NUM_CN_GROUPS_BG2] = {0, 8, 7, 3, 2, 2};
|
|
||||||
/** Number of rows/CNs in every CN group for rate = 2/3 BG2, e.g. 1 row of CNs connected to 4 BNs */
|
|
||||||
static const uint8_t lut_numCnInCnGroups_BG2_R23[NR_LDPC_NUM_CN_GROUPS_BG2] = {0, 1, 0, 2, 2, 2};
|
|
||||||
|
|
||||||
/** Number of connected BNs for every column in BG2 rate = 1/5, e.g. in first column all BNs are connected to 22 CNs */
|
|
||||||
static const uint8_t lut_numEdgesPerBn_BG2_R15[NR_LDPC_START_COL_PARITY_BG2] = {22, 23, 10, 5, 5, 14, 7, 13, 6, 8, 9, 16, 9, 12};
|
|
||||||
/** Number of connected BNs for every column in BG2 rate = 1/3, e.g. in first column all BNs are connected to 14 CNs */
|
|
||||||
static const uint8_t lut_numEdgesPerBn_BG2_R13[NR_LDPC_START_COL_PARITY_BG2] = {14, 16, 2, 4, 4, 6, 6, 8, 6, 6, 6, 13, 5, 7};
|
|
||||||
/** Number of connected BNs for every column in BG2 rate = 2/3, e.g. in first column all BNs are connected to 6 CNs */
|
|
||||||
static const uint8_t lut_numEdgesPerBn_BG2_R23[NR_LDPC_START_COL_PARITY_BG2] = { 6, 5, 2, 3, 3, 4, 3, 4, 3, 4, 3, 5, 2, 2};
|
|
||||||
|
|
||||||
// Number of groups for bit node processing
|
|
||||||
/** Number of connected CNs for every column/BN in BG1 for rate = 1/3, Worst case is BG1 with up to 30 CNs connected to one BN
|
|
||||||
E.g. 42 parity BNs connected to single CN */
|
|
||||||
// BG1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
|
||||||
static const uint8_t lut_numBnInBnGroups_BG1_R13[NR_LDPC_NUM_BN_GROUPS_BG1_R13] = {42, 0, 0, 1, 1, 2, 4, 3, 1, 4, 3, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1};
|
|
||||||
/** Number of connected CNs for every column/BN in BG1 for rate = 2/3 */
|
|
||||||
static const uint8_t lut_numBnInBnGroups_BG1_R23[NR_LDPC_NUM_BN_GROUPS_BG1_R13] = { 9, 1, 5, 3, 7, 8, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
/** Number of connected CNs for every column/BN in BG1 for rate = 8/9 */
|
|
||||||
static const uint8_t lut_numBnInBnGroups_BG1_R89[NR_LDPC_NUM_BN_GROUPS_BG1_R13] = { 1, 3,21, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
/** Number of connected CNs for every column/BN in BG2 for rate = 1/5, Worst case is BG1 with up to 30 CNs connected to one BN
|
|
||||||
E.g. 38 parity BNs connected to single CN */
|
|
||||||
// BG2: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
|
||||||
static const uint8_t lut_numBnInBnGroups_BG2_R15[NR_LDPC_NUM_BN_GROUPS_BG1_R13] = {38, 0, 0, 0, 2, 1, 1, 1, 2, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
/** Number of connected CNs for every column/BN in BG2 for rate = 1/3 */
|
|
||||||
static const uint8_t lut_numBnInBnGroups_BG2_R13[NR_LDPC_NUM_BN_GROUPS_BG1_R13] = {18, 1, 0, 2, 1, 5, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
/** Number of connected CNs for every column/BN in BG2 for rate = 2/3 */
|
|
||||||
static const uint8_t lut_numBnInBnGroups_BG2_R23[NR_LDPC_NUM_BN_GROUPS_BG1_R13] = { 3, 3, 5, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
// Start addresses for the bnProcBuf for each BN group
|
|
||||||
// BG1
|
|
||||||
/** Start address for every BN group within the BN processing buffer for BG1 rate = 1/3 */
|
|
||||||
static const uint32_t lut_startAddrBnGroups_BG1_R13[NR_LDPC_NUM_BN_GROUPS_BG1_R13] = {0, 16128, 17664, 19584, 24192, 34944, 44160, 47616, 62976, 75648, 94080, 99072, 109824};
|
|
||||||
/** Start address for every BN group within the BN processing buffer for BG1 rate = 2/3 */
|
|
||||||
static const uint32_t lut_startAddrBnGroups_BG1_R23[NR_LDPC_NUM_BN_GROUPS_BG1_R23] = {0, 3456, 4224, 9984, 14592, 28032, 46464, 50688};
|
|
||||||
/** Start address for every BN group within the BN processing buffer for BG1 rate = 8/9 */
|
|
||||||
static const uint32_t lut_startAddrBnGroups_BG1_R89[NR_LDPC_NUM_BN_GROUPS_BG1_R89] = {0, 384, 2688, 26880, 28416};
|
|
||||||
|
|
||||||
/** Start address for every BN group within the LLR processing buffer for BG1 rate = 1/3 */
|
|
||||||
static const uint16_t lut_startAddrBnGroupsLlr_BG1_R13[NR_LDPC_NUM_BN_GROUPS_BG1_R13] = {0, 16128, 16512, 16896, 17664, 19200, 20352, 20736, 22272, 23424, 24960, 25344, 25728};
|
|
||||||
/** Start address for every BN group within the LLR processing buffer for BG1 rate = 2/3 */
|
|
||||||
static const uint16_t lut_startAddrBnGroupsLlr_BG1_R23[NR_LDPC_NUM_BN_GROUPS_BG1_R23] = {0, 3456, 3840, 5760, 6912, 9600, 12672, 13056};
|
|
||||||
/** Start address for every BN group within the LLR processing buffer for BG1 rate = 8/9 */
|
|
||||||
static const uint16_t lut_startAddrBnGroupsLlr_BG1_R89[NR_LDPC_NUM_BN_GROUPS_BG1_R89] = {0, 384, 1536, 9600, 9984};
|
|
||||||
|
|
||||||
// BG2
|
|
||||||
/** Start address for every BN group within the BN processing buffer for BG2 rate = 1/5 */
|
|
||||||
static const uint32_t lut_startAddrBnGroups_BG2_R15[NR_LDPC_NUM_BN_GROUPS_BG2_R15] = {0, 14592, 18432, 20736, 23424, 26496, 33408, 37248, 41856, 46848, 52224, 58368, 66816};
|
|
||||||
/** Start address for every BN group within the BN processing buffer for BG2 rate = 1/3 */
|
|
||||||
static const uint32_t lut_startAddrBnGroups_BG2_R13[NR_LDPC_NUM_BN_GROUPS_BG2_R13] = {0, 6912, 7680, 10752, 12672, 24192, 26880, 29952, 34944, 40320};
|
|
||||||
/** Start address for every BN group within the BN processing buffer for BG2 rate = 2/3 */
|
|
||||||
static const uint32_t lut_startAddrBnGroups_BG2_R23[NR_LDPC_NUM_BN_GROUPS_BG2_R23] = {0, 1152, 3456, 9216, 13824, 17664};
|
|
||||||
|
|
||||||
/** Start address for every BN group within the LLR processing buffer for BG2 rate = 1/5 */
|
|
||||||
static const uint16_t lut_startAddrBnGroupsLlr_BG2_R15[NR_LDPC_NUM_BN_GROUPS_BG2_R15] = {0, 14592, 15360, 15744, 16128, 16512, 17280, 17664, 18048, 18432, 18816, 19200, 19584};
|
|
||||||
/** Start address for every BN group within the LLR processing buffer for BG2 rate = 1/3 */
|
|
||||||
static const uint16_t lut_startAddrBnGroupsLlr_BG2_R13[NR_LDPC_NUM_BN_GROUPS_BG2_R13] = {0, 6912, 7296, 8064, 8448, 10368, 10752, 11136, 11520, 11904};
|
|
||||||
/** Start address for every BN group within the LLR processing buffer for BG2 rate = 2/3 */
|
|
||||||
static const uint16_t lut_startAddrBnGroupsLlr_BG2_R23[NR_LDPC_NUM_BN_GROUPS_BG2_R23] = {0, 1152, 2304, 4224, 5376, 6144};
|
|
||||||
|
|
||||||
/** Vector of 32 '1' in int8 for application with AVX2 */
|
|
||||||
static const int8_t ones256_epi8[32] __attribute__ ((aligned(32))) = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
|
|
||||||
/** Vector of 32 '0' in int8 for application with AVX2 */
|
|
||||||
static const int8_t zeros256_epi8[32] __attribute__ ((aligned(32))) = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
|
||||||
/** Vector of 32 '127' in int8 for application with AVX2 */
|
|
||||||
static const int8_t maxLLR256_epi8[32] __attribute__ ((aligned(32))) = {127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,86 +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 nrLDPC_init_mem.h
|
|
||||||
* \brief Defines the function to initialize the LDPC decoder and sets correct LUTs.
|
|
||||||
* \author Sebastian Wagner (TCL Communications) Email: <mailto:sebastian.wagner@tcl.com>
|
|
||||||
* \date 07-12-2018
|
|
||||||
* \version 1.0
|
|
||||||
* \note
|
|
||||||
* \warning
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __NR_LDPC_INIT_MEM__H__
|
|
||||||
#define __NR_LDPC_INIT_MEM__H__
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "nrLDPC_defs.h"
|
|
||||||
#include "nrLDPC_types.h"
|
|
||||||
|
|
||||||
#ifndef malloc32_clear
|
|
||||||
/**
|
|
||||||
\brief Allocates 32 byte aligned memory and initializes to zero
|
|
||||||
\param size Input size in bytes
|
|
||||||
\return Pointer to memory
|
|
||||||
*/
|
|
||||||
static inline void* malloc32_clear(size_t size)
|
|
||||||
{
|
|
||||||
void* ptr = (void*) memalign(32, size+32);
|
|
||||||
memset(ptr, 0, size);
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
\brief Allocates and initializes the internal decoder processing buffers
|
|
||||||
\param p_decParams Pointer to decoder parameters
|
|
||||||
\param p_lut Pointer to decoder LUTs
|
|
||||||
\return Number of LLR values
|
|
||||||
*/
|
|
||||||
static inline t_nrLDPC_procBuf* nrLDPC_init_mem(void)
|
|
||||||
{
|
|
||||||
t_nrLDPC_procBuf* p_procBuf = (t_nrLDPC_procBuf*) malloc32_clear(sizeof(t_nrLDPC_procBuf));
|
|
||||||
|
|
||||||
if (p_procBuf)
|
|
||||||
{
|
|
||||||
p_procBuf->cnProcBuf = (int8_t*) malloc32_clear(NR_LDPC_SIZE_CN_PROC_BUF*sizeof(int8_t));
|
|
||||||
p_procBuf->cnProcBufRes = (int8_t*) malloc32_clear(NR_LDPC_SIZE_CN_PROC_BUF*sizeof(int8_t));
|
|
||||||
p_procBuf->bnProcBuf = (int8_t*) malloc32_clear(NR_LDPC_SIZE_BN_PROC_BUF*sizeof(int8_t));
|
|
||||||
p_procBuf->bnProcBufRes = (int8_t*) malloc32_clear(NR_LDPC_SIZE_BN_PROC_BUF*sizeof(int8_t));
|
|
||||||
p_procBuf->llrRes = (int8_t*) malloc32_clear(NR_LDPC_MAX_NUM_LLR *sizeof(int8_t));
|
|
||||||
p_procBuf->llrProcBuf = (int8_t*) malloc32_clear(NR_LDPC_MAX_NUM_LLR *sizeof(int8_t));
|
|
||||||
}
|
|
||||||
|
|
||||||
return(p_procBuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void nrLDPC_free_mem(t_nrLDPC_procBuf* p_procBuf)
|
|
||||||
{
|
|
||||||
free(p_procBuf->cnProcBuf);
|
|
||||||
free(p_procBuf->cnProcBufRes);
|
|
||||||
free(p_procBuf->bnProcBuf);
|
|
||||||
free(p_procBuf->bnProcBufRes);
|
|
||||||
free(p_procBuf->llrRes);
|
|
||||||
free(p_procBuf->llrProcBuf);
|
|
||||||
|
|
||||||
free(p_procBuf);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -1,106 +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 nrLDPC_types.h
|
|
||||||
* \brief Defines all types for the LDPC decoder
|
|
||||||
* \author Sebastian Wagner (TCL Communications) Email: <mailto:sebastian.wagner@tcl.com>
|
|
||||||
* \date 27-03-2018
|
|
||||||
* \version 1.0
|
|
||||||
* \note
|
|
||||||
* \warning
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __NR_LDPC_TYPES__H__
|
|
||||||
#define __NR_LDPC_TYPES__H__
|
|
||||||
|
|
||||||
#include "PHY/TOOLS/time_meas.h"
|
|
||||||
#include "nrLDPC_defs.h"
|
|
||||||
|
|
||||||
// ==============================================================================
|
|
||||||
// TYPES
|
|
||||||
|
|
||||||
/**
|
|
||||||
Structure containing the pointers to the LUTs.
|
|
||||||
*/
|
|
||||||
typedef struct nrLDPC_lut {
|
|
||||||
const uint32_t* startAddrCnGroups; /**< Start addresses for CN groups in CN processing buffer */
|
|
||||||
const uint8_t* numCnInCnGroups; /**< Number of CNs in every CN group */
|
|
||||||
const uint8_t* numBnInBnGroups; /**< Number of CNs in every BN group */
|
|
||||||
const uint32_t* startAddrBnGroups; /**< Start addresses for BN groups in BN processing buffer */
|
|
||||||
const uint16_t* startAddrBnGroupsLlr; /**< Start addresses for BN groups in LLR processing buffer */
|
|
||||||
const uint16_t** circShift[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT for circular shift values for all CN groups and Zs */
|
|
||||||
const uint32_t** startAddrBnProcBuf[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT of start addresses of CN groups in BN proc buffer */
|
|
||||||
const uint8_t** bnPosBnProcBuf[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT of BN positions in BG for CN groups */
|
|
||||||
const uint16_t* llr2llrProcBufAddr; /**< LUT for transferring input LLRs to LLR processing buffer */
|
|
||||||
const uint8_t* llr2llrProcBufBnPos; /**< LUT BN position in BG */
|
|
||||||
const uint8_t** posBnInCnProcBuf[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT for llr2cnProcBuf */
|
|
||||||
} t_nrLDPC_lut;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Enum with possible LDPC output formats.
|
|
||||||
*/
|
|
||||||
typedef enum nrLDPC_outMode {
|
|
||||||
nrLDPC_outMode_BIT, /**< 32 bits per uint32_t output */
|
|
||||||
nrLDPC_outMode_BITINT8, /**< 1 bit per int8_t output */
|
|
||||||
nrLDPC_outMode_LLRINT8 /**< Single LLR value per int8_t output */
|
|
||||||
} e_nrLDPC_outMode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Structure containing LDPC decoder parameters.
|
|
||||||
*/
|
|
||||||
typedef struct nrLDPC_dec_params {
|
|
||||||
uint8_t BG; /**< Base graph */
|
|
||||||
uint16_t Z; /**< Lifting size */
|
|
||||||
uint8_t R; /**< Decoding rate: Format 15,13,... for code rates 1/5, 1/3,... */
|
|
||||||
uint8_t numMaxIter; /**< Maximum number of iterations */
|
|
||||||
e_nrLDPC_outMode outMode; /**< Output format */
|
|
||||||
} t_nrLDPC_dec_params;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Structure containing LDPC decoder processing time statistics.
|
|
||||||
*/
|
|
||||||
typedef struct nrLDPC_time_stats {
|
|
||||||
time_stats_t llr2llrProcBuf; /**< Statistics for function llr2llrProcBuf */
|
|
||||||
time_stats_t llr2CnProcBuf; /**< Statistics for function llr2CnProcBuf */
|
|
||||||
time_stats_t cnProc; /**< Statistics for function cnProc */
|
|
||||||
time_stats_t cnProcPc; /**< Statistics for function cnProcPc */
|
|
||||||
time_stats_t bnProcPc; /**< Statistics for function bnProcPc */
|
|
||||||
time_stats_t bnProc; /**< Statistics for function bnProc */
|
|
||||||
time_stats_t cn2bnProcBuf; /**< Statistics for function cn2bnProcBuf */
|
|
||||||
time_stats_t bn2cnProcBuf; /**< Statistics for function bn2cnProcBuf */
|
|
||||||
time_stats_t llrRes2llrOut; /**< Statistics for function llrRes2llrOut */
|
|
||||||
time_stats_t llr2bit; /**< Statistics for function llr2bit */
|
|
||||||
time_stats_t total; /**< Statistics for total processing time */
|
|
||||||
} t_nrLDPC_time_stats;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Structure containing the processing buffers
|
|
||||||
*/
|
|
||||||
typedef struct nrLDPC_procBuf {
|
|
||||||
int8_t* cnProcBuf; /**< CN processing buffer */
|
|
||||||
int8_t* cnProcBufRes; /**< Buffer for CN processing results */
|
|
||||||
int8_t* bnProcBuf; /**< BN processing buffer */
|
|
||||||
int8_t* bnProcBufRes; /**< Buffer for BN processing results */
|
|
||||||
int8_t* llrRes; /**< Buffer for LLR results */
|
|
||||||
int8_t* llrProcBuf; /**< LLR processing buffer */
|
|
||||||
} t_nrLDPC_procBuf;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -112,18 +112,12 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int lte_est_timing_advance_pusch(PHY_VARS_eNB *eNB,
|
int lte_est_timing_advance_pusch(LTE_DL_FRAME_PARMS *frame_parms,
|
||||||
module_id_t UE_id)
|
int32_t **ul_ch_estimates_time)
|
||||||
{
|
{
|
||||||
int temp, i, aa, max_pos=0, max_val=0;
|
int temp, i, aa, max_pos=0, max_val=0;
|
||||||
short Re,Im;
|
short Re,Im;
|
||||||
|
|
||||||
RU_t *ru;
|
|
||||||
ru = RC.ru[UE_id];
|
|
||||||
LTE_DL_FRAME_PARMS *frame_parms = (eNB==NULL) ? ru->frame_parms : &eNB->frame_parms;
|
|
||||||
LTE_eNB_PUSCH *eNB_pusch_vars = (eNB!=NULL) ? eNB->pusch_vars[UE_id] : (LTE_eNB_PUSCH*)NULL;
|
|
||||||
RU_CALIBRATION *calibration = &ru->calibration;
|
|
||||||
int32_t **ul_ch_estimates_time = (eNB==NULL) ? calibration->drs_ch_estimates_time : eNB_pusch_vars->drs_ch_estimates_time;
|
|
||||||
uint8_t cyclic_shift = 0;
|
uint8_t cyclic_shift = 0;
|
||||||
int sync_pos = (frame_parms->ofdm_symbol_size-cyclic_shift*frame_parms->ofdm_symbol_size/12)%(frame_parms->ofdm_symbol_size);
|
int sync_pos = (frame_parms->ofdm_symbol_size-cyclic_shift*frame_parms->ofdm_symbol_size/12)%(frame_parms->ofdm_symbol_size);
|
||||||
|
|
||||||
@@ -149,7 +143,7 @@ int lte_est_timing_advance_pusch(PHY_VARS_eNB *eNB,
|
|||||||
max_pos = max_pos-frame_parms->ofdm_symbol_size;
|
max_pos = max_pos-frame_parms->ofdm_symbol_size;
|
||||||
|
|
||||||
//#ifdef DEBUG_PHY
|
//#ifdef DEBUG_PHY
|
||||||
LOG_D(PHY,"frame %d: max_pos = %d, sync_pos=%d\n",eNB->proc.frame_rx,max_pos,sync_pos);
|
LOG_D(PHY,"max_pos = %d, sync_pos=%d\n",max_pos,sync_pos);
|
||||||
//#endif //DEBUG_PHY
|
//#endif //DEBUG_PHY
|
||||||
|
|
||||||
return max_pos - sync_pos;
|
return max_pos - sync_pos;
|
||||||
|
|||||||
@@ -220,8 +220,12 @@ void phy_adjust_gain (PHY_VARS_UE *phy_vars_ue,
|
|||||||
uint32_t rx_power_fil_dB,
|
uint32_t rx_power_fil_dB,
|
||||||
unsigned char eNB_id);
|
unsigned char eNB_id);
|
||||||
|
|
||||||
int lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
|
int32_t lte_ul_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms,
|
||||||
L1_rxtx_proc_t *proc,
|
L1_rxtx_proc_t *proc,
|
||||||
|
LTE_eNB_ULSCH_t * ulsch,
|
||||||
|
int32_t **ul_ch_estimates,
|
||||||
|
int32_t **ul_ch_estimates_time,
|
||||||
|
int32_t **rxdataF_ext,
|
||||||
module_id_t UE_id,
|
module_id_t UE_id,
|
||||||
uint8_t l,
|
uint8_t l,
|
||||||
uint8_t Ns);
|
uint8_t Ns);
|
||||||
@@ -258,7 +262,8 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
unsigned char number_of_cards,
|
unsigned char number_of_cards,
|
||||||
short coef);
|
short coef);
|
||||||
|
|
||||||
int lte_est_timing_advance_pusch(PHY_VARS_eNB* phy_vars_eNB,module_id_t UE_id);
|
int lte_est_timing_advance_pusch(LTE_DL_FRAME_PARMS *frame_parms,
|
||||||
|
int32_t **ul_ch_estimates_time);
|
||||||
|
|
||||||
void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
|
void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
|
||||||
int subframe,
|
int subframe,
|
||||||
|
|||||||
@@ -34,23 +34,17 @@ static int16_t ru_90c[2*128] = {32767, 0,32766, -402,32758, -804,32746, -1206,32
|
|||||||
|
|
||||||
#define SCALE 0x3FFF
|
#define SCALE 0x3FFF
|
||||||
|
|
||||||
int32_t lte_ul_channel_estimation(PHY_VARS_eNB *eNB,
|
int32_t lte_ul_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms,
|
||||||
L1_rxtx_proc_t *proc,
|
L1_rxtx_proc_t *proc,
|
||||||
|
LTE_eNB_ULSCH_t * ulsch,
|
||||||
|
int32_t **ul_ch_estimates,
|
||||||
|
int32_t **ul_ch_estimates_time,
|
||||||
|
int32_t **rxdataF_ext,
|
||||||
module_id_t UE_id,
|
module_id_t UE_id,
|
||||||
unsigned char l,
|
unsigned char l,
|
||||||
unsigned char Ns) {
|
unsigned char Ns) {
|
||||||
RU_t *ru;
|
AssertFatal(ul_ch_estimates != NULL, "ul_ch_estimates is null ");
|
||||||
ru = RC.ru[UE_id];
|
|
||||||
LTE_DL_FRAME_PARMS *frame_parms = (eNB!=NULL) ? &eNB->frame_parms : ru->frame_parms;
|
|
||||||
LTE_eNB_PUSCH *pusch_vars = (eNB!=NULL) ? eNB->pusch_vars[UE_id] : NULL;
|
|
||||||
RU_CALIBRATION *calibration = &ru->calibration;
|
|
||||||
int32_t **ul_ch_estimates = (eNB!=NULL) ? pusch_vars->drs_ch_estimates : calibration->drs_ch_estimates;
|
|
||||||
AssertFatal(ul_ch_estimates != NULL, "ul_ch_estimates is null (eNB %p, pusch %p, pusch->drs_ch_estimates %p, pusch->drs_ch_estimates[0] %p ul_ch_estimates %p UE_id %d)\n",eNB,pusch_vars,
|
|
||||||
pusch_vars->drs_ch_estimates,pusch_vars->drs_ch_estimates[0],ul_ch_estimates,UE_id);
|
|
||||||
int32_t **ul_ch_estimates_time = (eNB!=NULL) ? pusch_vars->drs_ch_estimates_time : calibration->drs_ch_estimates_time;
|
|
||||||
AssertFatal(ul_ch_estimates_time != NULL, "ul_ch_estimates_time is null\n");
|
AssertFatal(ul_ch_estimates_time != NULL, "ul_ch_estimates_time is null\n");
|
||||||
int32_t **rxdataF_ext = (eNB!=NULL) ? pusch_vars->rxdataF_ext : calibration->rxdataF_ext;
|
|
||||||
|
|
||||||
int subframe = proc->subframe_rx;
|
int subframe = proc->subframe_rx;
|
||||||
|
|
||||||
uint8_t harq_pid;
|
uint8_t harq_pid;
|
||||||
@@ -83,16 +77,16 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *eNB,
|
|||||||
#endif
|
#endif
|
||||||
int32_t temp_in_ifft_0[2048*2] __attribute__((aligned(32)));
|
int32_t temp_in_ifft_0[2048*2] __attribute__((aligned(32)));
|
||||||
|
|
||||||
if (eNB->ulsch[UE_id]->ue_type > 0) harq_pid = 0;
|
if (ulsch->ue_type > 0) harq_pid = 0;
|
||||||
else {
|
else {
|
||||||
harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
|
harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t N_rb_alloc = eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb;
|
uint16_t N_rb_alloc = ulsch->harq_processes[harq_pid]->nb_rb;
|
||||||
int32_t tmp_estimates[N_rb_alloc*12] __attribute__((aligned(16)));
|
int32_t tmp_estimates[N_rb_alloc*12] __attribute__((aligned(16)));
|
||||||
Msc_RS = N_rb_alloc*12;
|
Msc_RS = N_rb_alloc*12;
|
||||||
cyclic_shift = (frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
|
cyclic_shift = (frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
|
||||||
eNB->ulsch[UE_id]->harq_processes[harq_pid]->n_DMRS2 +
|
ulsch->harq_processes[harq_pid]->n_DMRS2 +
|
||||||
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[(subframe<<1)+Ns]) % 12;
|
frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[(subframe<<1)+Ns]) % 12;
|
||||||
Msc_idx_ptr = (uint16_t *) bsearch(&Msc_RS, dftsizes, 34, sizeof(uint16_t), compareints);
|
Msc_idx_ptr = (uint16_t *) bsearch(&Msc_RS, dftsizes, 34, sizeof(uint16_t), compareints);
|
||||||
|
|
||||||
@@ -276,7 +270,7 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *eNB,
|
|||||||
#if T_TRACER
|
#if T_TRACER
|
||||||
|
|
||||||
if (aa == 0)
|
if (aa == 0)
|
||||||
T(T_ENB_PHY_UL_CHANNEL_ESTIMATE, T_INT(0), T_INT(eNB->ulsch[UE_id]->rnti),
|
T(T_ENB_PHY_UL_CHANNEL_ESTIMATE, T_INT(0), T_INT(ulsch->rnti),
|
||||||
T_INT(proc->frame_rx), T_INT(subframe),
|
T_INT(proc->frame_rx), T_INT(subframe),
|
||||||
T_INT(0), T_BUFFER(ul_ch_estimates_time[0], 512 * 4));
|
T_INT(0), T_BUFFER(ul_ch_estimates_time[0], 512 * 4));
|
||||||
|
|
||||||
|
|||||||
@@ -1047,7 +1047,11 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
l%(frame_parms->symbols_per_tti/2),
|
l%(frame_parms->symbols_per_tti/2),
|
||||||
l/(frame_parms->symbols_per_tti/2),
|
l/(frame_parms->symbols_per_tti/2),
|
||||||
frame_parms);
|
frame_parms);
|
||||||
lte_ul_channel_estimation(eNB,proc,
|
lte_ul_channel_estimation(&eNB->frame_parms,proc,
|
||||||
|
eNB->ulsch[UE_id],
|
||||||
|
eNB->pusch_vars[UE_id]->drs_ch_estimates,
|
||||||
|
eNB->pusch_vars[UE_id]->drs_ch_estimates_time,
|
||||||
|
eNB->pusch_vars[UE_id]->rxdataF_ext,
|
||||||
UE_id,
|
UE_id,
|
||||||
l%(frame_parms->symbols_per_tti/2),
|
l%(frame_parms->symbols_per_tti/2),
|
||||||
l/(frame_parms->symbols_per_tti/2));
|
l/(frame_parms->symbols_per_tti/2));
|
||||||
|
|||||||
@@ -339,7 +339,7 @@ int nr_slot_fep_init_sync(PHY_VARS_NR_UE *ue,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
dft(dftsize,(int16_t *) &common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
dft(dftsize,(int16_t *) &common_vars->rxdata[aa][rx_offset],
|
||||||
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||||
#if UE_TIMING_TRACE
|
#if UE_TIMING_TRACE
|
||||||
stop_meas(&ue->rx_dft_stats);
|
stop_meas(&ue->rx_dft_stats);
|
||||||
@@ -363,7 +363,7 @@ int nr_slot_fep_init_sync(PHY_VARS_NR_UE *ue,
|
|||||||
dft(dftsize,(int16_t *)tmp_dft_in,
|
dft(dftsize,(int16_t *)tmp_dft_in,
|
||||||
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||||
} else { // use dft input from RX buffer directly
|
} else { // use dft input from RX buffer directly
|
||||||
dft(dftsize,(int16_t *) &common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
dft(dftsize,(int16_t *) &common_vars->rxdata[aa][rx_offset],
|
||||||
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||||
}
|
}
|
||||||
#if UE_TIMING_TRACE
|
#if UE_TIMING_TRACE
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
|
|||||||
* Defining cyclic shift hopping TS 38.211 Subclause 6.3.2.2.2
|
* Defining cyclic shift hopping TS 38.211 Subclause 6.3.2.2.2
|
||||||
*/
|
*/
|
||||||
// alpha is cyclic shift
|
// alpha is cyclic shift
|
||||||
double alpha;
|
//double alpha;
|
||||||
// lnormal is the OFDM symbol number in the PUCCH transmission where l=0 corresponds to the first OFDM symbol of the PUCCH transmission
|
// lnormal is the OFDM symbol number in the PUCCH transmission where l=0 corresponds to the first OFDM symbol of the PUCCH transmission
|
||||||
//uint8_t lnormal;
|
//uint8_t lnormal;
|
||||||
// lprime is the index of the OFDM symbol in the slot that corresponds to the first OFDM symbol of the PUCCH transmission in the slot given by [5, TS 38.213]
|
// lprime is the index of the OFDM symbol in the slot that corresponds to the first OFDM symbol of the PUCCH transmission in the slot given by [5, TS 38.213]
|
||||||
@@ -193,7 +193,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
|
|||||||
for(i=0;i<nr_sequences;i++){
|
for(i=0;i<nr_sequences;i++){
|
||||||
// we proceed to calculate alpha according to TS 38.211 Subclause 6.3.2.2.2
|
// we proceed to calculate alpha according to TS 38.211 Subclause 6.3.2.2.2
|
||||||
for (l=0; l<pucch_pdu->nr_of_symbols; l++){
|
for (l=0; l<pucch_pdu->nr_of_symbols; l++){
|
||||||
alpha = nr_cyclic_shift_hopping(pucch_pdu->hopping_id,pucch_pdu->initial_cyclic_shift,mcs[i],l,pucch_pdu->start_symbol_index,slot);
|
double alpha = nr_cyclic_shift_hopping(pucch_pdu->hopping_id,pucch_pdu->initial_cyclic_shift,mcs[i],l,pucch_pdu->start_symbol_index,slot);
|
||||||
#ifdef DEBUG_NR_PUCCH_RX
|
#ifdef DEBUG_NR_PUCCH_RX
|
||||||
printf("\t [nr_generate_pucch0] sequence generation \tu=%d \tv=%d \talpha=%lf \t(for symbol l=%d/%d,mcs %d)\n",u,v,alpha,l,l+pucch_pdu->start_symbol_index,mcs[i]);
|
printf("\t [nr_generate_pucch0] sequence generation \tu=%d \tv=%d \talpha=%lf \t(for symbol l=%d/%d,mcs %d)\n",u,v,alpha,l,l+pucch_pdu->start_symbol_index,mcs[i]);
|
||||||
printf("lut output %d\n",gNB->pucch0_lut.lut[cs_ind][slot][l+pucch_pdu->start_symbol_index]);
|
printf("lut output %d\n",gNB->pucch0_lut.lut[cs_ind][slot][l+pucch_pdu->start_symbol_index]);
|
||||||
@@ -266,7 +266,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
const int16_t *x_re = table_5_2_2_2_2_Re[u],*x_im = table_5_2_2_2_2_Im[u];
|
const int16_t *x_re = table_5_2_2_2_2_Re[u],*x_im = table_5_2_2_2_2_Im[u];
|
||||||
int16_t xr[24] __attribute__((aligned(32)));
|
int16_t xr[24] __attribute__((aligned(32)));
|
||||||
int16_t xrt[24] __attribute__((aligned(32)));
|
//int16_t xrt[24] __attribute__((aligned(32)));
|
||||||
int32_t xrtmag=0;
|
int32_t xrtmag=0;
|
||||||
int maxpos=0;
|
int maxpos=0;
|
||||||
int n2=0;
|
int n2=0;
|
||||||
@@ -959,7 +959,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
int32_t **rxdataF = gNB->common_vars.rxdataF;
|
int32_t **rxdataF = gNB->common_vars.rxdataF;
|
||||||
NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms;
|
NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms;
|
||||||
pucch_GroupHopping_t pucch_GroupHopping = pucch_pdu->group_hop_flag + (pucch_pdu->sequence_hop_flag<<1);
|
//pucch_GroupHopping_t pucch_GroupHopping = pucch_pdu->group_hop_flag + (pucch_pdu->sequence_hop_flag<<1);
|
||||||
|
|
||||||
AssertFatal(pucch_pdu->nr_of_symbols==1 || pucch_pdu->nr_of_symbols==2,
|
AssertFatal(pucch_pdu->nr_of_symbols==1 || pucch_pdu->nr_of_symbols==2,
|
||||||
"Illegal number of symbols for PUCCH 2 %d\n",pucch_pdu->nr_of_symbols);
|
"Illegal number of symbols for PUCCH 2 %d\n",pucch_pdu->nr_of_symbols);
|
||||||
|
|||||||
@@ -225,7 +225,6 @@ int nr_ulsch_encoding(NR_UE_ULSCH_t *ulsch,
|
|||||||
unsigned int crc;
|
unsigned int crc;
|
||||||
NR_UL_UE_HARQ_t *harq_process;
|
NR_UL_UE_HARQ_t *harq_process;
|
||||||
uint16_t nb_rb ;
|
uint16_t nb_rb ;
|
||||||
uint8_t nb_symb_sch ;
|
|
||||||
uint32_t A, Z, F;
|
uint32_t A, Z, F;
|
||||||
uint32_t *pz;
|
uint32_t *pz;
|
||||||
uint8_t mod_order;
|
uint8_t mod_order;
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
uint8_t dmrs_type, nb_dmrs_re_per_rb, number_of_symbols, mcs, Nl;
|
uint8_t dmrs_type, nb_dmrs_re_per_rb, number_of_symbols, mcs, Nl;
|
||||||
int ap, start_symbol, Nid_cell, i;
|
int ap, start_symbol, Nid_cell, i;
|
||||||
int sample_offsetF, N_RE_prime, N_PRB_oh;
|
int sample_offsetF, N_RE_prime, N_PRB_oh;
|
||||||
uint16_t n_rnti, ul_dmrs_symb_pos;
|
uint16_t ul_dmrs_symb_pos;
|
||||||
uint8_t data_existing =0;
|
uint8_t data_existing =0;
|
||||||
uint8_t L_ptrs, K_ptrs; // PTRS parameters
|
uint8_t L_ptrs, K_ptrs; // PTRS parameters
|
||||||
uint16_t beta_ptrs; // PTRS parameter related to power control
|
uint16_t beta_ptrs; // PTRS parameter related to power control
|
||||||
|
|||||||
@@ -911,19 +911,18 @@ void reset_stats_gNB(FL_OBJECT *button,
|
|||||||
|
|
||||||
|
|
||||||
static void *scope_thread_gNB(void *arg) {
|
static void *scope_thread_gNB(void *arg) {
|
||||||
int UE_id;
|
scopeParms_t * p=(scopeParms_t *) arg;
|
||||||
int ue_cnt=0;
|
|
||||||
//# ifdef ENABLE_XFORMS_WRITE_STATS
|
//# ifdef ENABLE_XFORMS_WRITE_STATS
|
||||||
// FILE *gNB_stats = fopen("gNB_stats.txt", "w");
|
// FILE *gNB_stats = fopen("gNB_stats.txt", "w");
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
while (!oai_exit) {
|
while (!oai_exit) {
|
||||||
ue_cnt=0;
|
int ue_cnt=0;
|
||||||
|
|
||||||
for(UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
|
for(int UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
|
||||||
if ((ue_cnt<scope_enb_num_ue)) {
|
if ((ue_cnt<scope_enb_num_ue)) {
|
||||||
//this function needs to be written
|
//this function needs to be written
|
||||||
phy_scope_gNB(form_gnb[ue_cnt], RC.gNB[0], RC.ru[0], UE_id);
|
phy_scope_gNB(form_gnb[ue_cnt], p->gNB, p->ru, UE_id);
|
||||||
ue_cnt++;
|
ue_cnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -983,5 +982,5 @@ void startScope(scopeParms_t * p) {
|
|||||||
} // UE_id
|
} // UE_id
|
||||||
|
|
||||||
pthread_t forms_thread;
|
pthread_t forms_thread;
|
||||||
threadCreate(&forms_thread, scope_thread_gNB, NULL, "scope", -1, OAI_PRIORITY_RT_LOW);
|
threadCreate(&forms_thread, scope_thread_gNB, p, "scope", -1, OAI_PRIORITY_RT_LOW);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,19 +69,13 @@ typedef struct {
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
int *argc;
|
int *argc;
|
||||||
char **argv;
|
char **argv;
|
||||||
|
RU_t* ru;
|
||||||
|
PHY_VARS_gNB *gNB;
|
||||||
} scopeParms_t;
|
} scopeParms_t;
|
||||||
|
|
||||||
extern unsigned char scope_enb_num_ue;
|
extern unsigned char scope_enb_num_ue;
|
||||||
FD_phy_scope_gnb * create_phy_scope_gnb( void );
|
|
||||||
FD_phy_scope_nrue * create_phy_scope_nrue( void );
|
FD_phy_scope_nrue * create_phy_scope_nrue( void );
|
||||||
|
|
||||||
|
|
||||||
void phy_scope_gNB(FD_phy_scope_gnb *form,
|
|
||||||
PHY_VARS_gNB *phy_vars_gnb,
|
|
||||||
RU_t *phy_vars_ru,
|
|
||||||
int UE_id);
|
|
||||||
|
|
||||||
|
|
||||||
void phy_scope_nrUE(FD_phy_scope_nrue *form,
|
void phy_scope_nrUE(FD_phy_scope_nrue *form,
|
||||||
PHY_VARS_NR_UE *phy_vars_ue,
|
PHY_VARS_NR_UE *phy_vars_ue,
|
||||||
int eNB_id,
|
int eNB_id,
|
||||||
@@ -91,6 +85,5 @@ void phy_scope_nrUE(FD_phy_scope_nrue *form,
|
|||||||
|
|
||||||
void startScope(scopeParms_t * p);
|
void startScope(scopeParms_t * p);
|
||||||
|
|
||||||
|
|
||||||
extern RAN_CONTEXT_t RC;
|
extern RAN_CONTEXT_t RC;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1419,7 +1419,7 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,
|
|||||||
pdu->rx_indication_rel8.offset = 1; // DJP - I dont understand - but broken unless 1 ???? 0; // filled in at the end of the UL_INFO formation
|
pdu->rx_indication_rel8.offset = 1; // DJP - I dont understand - but broken unless 1 ???? 0; // filled in at the end of the UL_INFO formation
|
||||||
pdu->data = eNB->ulsch[UE_id]->harq_processes[harq_pid]->decodedBytes;
|
pdu->data = eNB->ulsch[UE_id]->harq_processes[harq_pid]->decodedBytes;
|
||||||
// estimate timing advance for MAC
|
// estimate timing advance for MAC
|
||||||
sync_pos = lte_est_timing_advance_pusch(eNB,UE_id);
|
sync_pos = lte_est_timing_advance_pusch(&eNB->frame_parms, eNB->pusch_vars[UE_id]->drs_ch_estimates_time);
|
||||||
timing_advance_update = sync_pos; // - eNB->frame_parms.nb_prefix_samples/4; //to check
|
timing_advance_update = sync_pos; // - eNB->frame_parms.nb_prefix_samples/4; //to check
|
||||||
|
|
||||||
// if (timing_advance_update > 10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
|
// if (timing_advance_update > 10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
|
||||||
|
|||||||
@@ -693,12 +693,6 @@ void ru_fep_full_2thread(RU_t *ru,
|
|||||||
3/(fp->symbols_per_tti/2),// Ns = slot number
|
3/(fp->symbols_per_tti/2),// Ns = slot number
|
||||||
fp);
|
fp);
|
||||||
|
|
||||||
/*lte_ul_channel_estimation((PHY_VARS_eNB *)NULL,
|
|
||||||
proc,
|
|
||||||
ru->idx,
|
|
||||||
3%(fp->symbols_per_tti/2),
|
|
||||||
3/(fp->symbols_per_tti/2));
|
|
||||||
*/
|
|
||||||
lte_ul_channel_estimation_RRU(fp,
|
lte_ul_channel_estimation_RRU(fp,
|
||||||
calibration->drs_ch_estimates,
|
calibration->drs_ch_estimates,
|
||||||
calibration->drs_ch_estimates_time,
|
calibration->drs_ch_estimates_time,
|
||||||
@@ -713,7 +707,7 @@ void ru_fep_full_2thread(RU_t *ru,
|
|||||||
0,//interpolate,
|
0,//interpolate,
|
||||||
0 /*eNB->ulsch[ru->idx]->rnti rnti or ru->ulsch[eNB_id]->rnti*/);
|
0 /*eNB->ulsch[ru->idx]->rnti rnti or ru->ulsch[eNB_id]->rnti*/);
|
||||||
|
|
||||||
check_sync_pos = lte_est_timing_advance_pusch((PHY_VARS_eNB *)NULL, ru->idx);
|
check_sync_pos = lte_est_timing_advance_pusch(ru->frame_parms, ru->calibration.drs_ch_estimates_time);
|
||||||
if (ru->state == RU_CHECK_SYNC) {
|
if (ru->state == RU_CHECK_SYNC) {
|
||||||
if ((check_sync_pos >= 0 && check_sync_pos<8) || (check_sync_pos < 0 && check_sync_pos>-8)) {
|
if ((check_sync_pos >= 0 && check_sync_pos<8) || (check_sync_pos < 0 && check_sync_pos>-8)) {
|
||||||
LOG_I(PHY,"~~~~~~~~~~~ check_sync_pos %d, frame %d, cnt %d\n",check_sync_pos,proc->frame_rx,ru->wait_check);
|
LOG_I(PHY,"~~~~~~~~~~~ check_sync_pos %d, frame %d, cnt %d\n",check_sync_pos,proc->frame_rx,ru->wait_check);
|
||||||
|
|||||||
@@ -432,15 +432,6 @@ void multipath_tv_channel(channel_desc_t *desc,
|
|||||||
/**@} */
|
/**@} */
|
||||||
/**@} */
|
/**@} */
|
||||||
|
|
||||||
void rxAddInput( struct complex16 *input_sig,
|
|
||||||
struct complex16 *after_channel_sig,
|
|
||||||
int rxAnt,
|
|
||||||
channel_desc_t *channelDesc,
|
|
||||||
int nbSamples,
|
|
||||||
uint64_t TS,
|
|
||||||
uint32_t CirSize
|
|
||||||
);
|
|
||||||
|
|
||||||
int modelid_fromname(char *modelname);
|
int modelid_fromname(char *modelname);
|
||||||
double channelmod_get_snr_dB(void);
|
double channelmod_get_snr_dB(void);
|
||||||
double channelmod_get_sinr_dB(void);
|
double channelmod_get_sinr_dB(void);
|
||||||
|
|||||||
@@ -1579,10 +1579,6 @@ int flexran_agent_unregister_mac_xface(mid_t mod_id)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AGENT_MAC_xface *flexran_agent_get_mac_xface(mid_t mod_id)
|
|
||||||
{
|
|
||||||
return agent_mac_xface[mod_id];
|
|
||||||
}
|
|
||||||
|
|
||||||
void flexran_create_config_structures(mid_t mod_id)
|
void flexran_create_config_structures(mid_t mod_id)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -921,7 +921,4 @@ int flexran_agent_unregister_rrc_xface(mid_t mod_id)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AGENT_RRC_xface *flexran_agent_get_rrc_xface(mid_t mod_id)
|
|
||||||
{
|
|
||||||
return agent_rrc_xface[mod_id];
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -41,10 +41,15 @@
|
|||||||
AGENT_PHY_xface *flexran_agent_get_phy_xface(mid_t mod_id);
|
AGENT_PHY_xface *flexran_agent_get_phy_xface(mid_t mod_id);
|
||||||
|
|
||||||
/* Control module interface for the communication of the MAC Control Module with the agent */
|
/* Control module interface for the communication of the MAC Control Module with the agent */
|
||||||
AGENT_MAC_xface *flexran_agent_get_mac_xface(mid_t mod_id);
|
|
||||||
|
extern AGENT_MAC_xface *agent_mac_xface[NUM_MAX_ENB];
|
||||||
|
#define flexran_agent_get_mac_xface(mod_id) (agent_mac_xface[mod_id])
|
||||||
|
/* Control module interface for the communication of the RRC Control Module with the agent */
|
||||||
|
|
||||||
/* Control module interface for the communication of the RRC Control Module with the agent */
|
/* Control module interface for the communication of the RRC Control Module with the agent */
|
||||||
AGENT_RRC_xface *flexran_agent_get_rrc_xface(mid_t mod_id);
|
// AGENT_RRC_xface *flexran_agent_get_rrc_xface(mid_t mod_id);
|
||||||
|
extern AGENT_RRC_xface *agent_rrc_xface[NUM_MAX_ENB];
|
||||||
|
#define flexran_agent_get_rrc_xface(mod_id) (agent_rrc_xface[mod_id])
|
||||||
|
|
||||||
/* Control module interface for the communication of the RRC Control Module with the agent */
|
/* Control module interface for the communication of the RRC Control Module with the agent */
|
||||||
AGENT_PDCP_xface *flexran_agent_get_pdcp_xface(mid_t mod_id);
|
AGENT_PDCP_xface *flexran_agent_get_pdcp_xface(mid_t mod_id);
|
||||||
|
|||||||
@@ -131,7 +131,6 @@ void *gNB_app_task(void *args_p)
|
|||||||
uint32_t gnb_nb = RC.nb_nr_inst;
|
uint32_t gnb_nb = RC.nb_nr_inst;
|
||||||
uint32_t gnb_id_start = 0;
|
uint32_t gnb_id_start = 0;
|
||||||
uint32_t gnb_id_end = gnb_id_start + gnb_nb;
|
uint32_t gnb_id_end = gnb_id_start + gnb_nb;
|
||||||
uint32_t x2_register_gnb_pending = 0;
|
|
||||||
uint32_t gnb_id;
|
uint32_t gnb_id;
|
||||||
MessageDef *msg_p = NULL;
|
MessageDef *msg_p = NULL;
|
||||||
const char *msg_name = NULL;
|
const char *msg_name = NULL;
|
||||||
@@ -170,7 +169,7 @@ void *gNB_app_task(void *args_p)
|
|||||||
|
|
||||||
if (is_x2ap_enabled() ) { //&& !NODE_IS_DU(RC.rrc[0]->node_type)
|
if (is_x2ap_enabled() ) { //&& !NODE_IS_DU(RC.rrc[0]->node_type)
|
||||||
LOG_I(X2AP, "X2AP enabled \n");
|
LOG_I(X2AP, "X2AP enabled \n");
|
||||||
x2_register_gnb_pending = gNB_app_register_x2 (gnb_id_start, gnb_id_end);
|
__attribute__((unused)) uint32_t x2_register_gnb_pending = gNB_app_register_x2 (gnb_id_start, gnb_id_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EPC_MODE_ENABLED) {
|
if (EPC_MODE_ENABLED) {
|
||||||
|
|||||||
@@ -2670,7 +2670,6 @@ void nr_ue_send_sdu(module_id_t module_idP,
|
|||||||
LOG_D(MAC, "Handling PDU frame %d slot %d\n", frameP, slotP);
|
LOG_D(MAC, "Handling PDU frame %d slot %d\n", frameP, slotP);
|
||||||
|
|
||||||
uint8_t * pduP = pdu;
|
uint8_t * pduP = pdu;
|
||||||
NR_UE_MAC_INST_t *UE_mac_inst = get_mac_inst(module_idP);
|
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN);
|
||||||
|
|
||||||
|
|||||||
@@ -375,7 +375,6 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
|||||||
int CC_id, UE_id = 0;
|
int CC_id, UE_id = 0;
|
||||||
gNB_MAC_INST *gNB = RC.nrmac[module_idP];
|
gNB_MAC_INST *gNB = RC.nrmac[module_idP];
|
||||||
NR_UE_list_t *UE_list = &gNB->UE_list;
|
NR_UE_list_t *UE_list = &gNB->UE_list;
|
||||||
NR_UE_sched_ctrl_t *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
|
|
||||||
NR_COMMON_channels_t *cc = gNB->common_channels;
|
NR_COMMON_channels_t *cc = gNB->common_channels;
|
||||||
NR_sched_pucch *pucch_sched = (NR_sched_pucch*) malloc(sizeof(NR_sched_pucch));
|
NR_sched_pucch *pucch_sched = (NR_sched_pucch*) malloc(sizeof(NR_sched_pucch));
|
||||||
|
|
||||||
@@ -424,6 +423,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
|||||||
|
|
||||||
// TbD once RACH is available, start ta_timer when UE is connected
|
// TbD once RACH is available, start ta_timer when UE is connected
|
||||||
#if 0
|
#if 0
|
||||||
|
NR_UE_sched_ctrl_t *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
|
||||||
if (ue_sched_ctl->ta_timer) ue_sched_ctl->ta_timer--;
|
if (ue_sched_ctl->ta_timer) ue_sched_ctl->ta_timer--;
|
||||||
|
|
||||||
if (ue_sched_ctl->ta_timer == 0) {
|
if (ue_sched_ctl->ta_timer == 0) {
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
|
|||||||
ue_context_p->ue_id_rnti = ue_context_p->ue_context.secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity;
|
ue_context_p->ue_id_rnti = ue_context_p->ue_context.secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity;
|
||||||
NR_CG_Config_t *CG_Config = calloc(1,sizeof(*CG_Config));
|
NR_CG_Config_t *CG_Config = calloc(1,sizeof(*CG_Config));
|
||||||
memset((void*)CG_Config,0,sizeof(*CG_Config));
|
memset((void*)CG_Config,0,sizeof(*CG_Config));
|
||||||
int CG_Config_size = generate_CG_Config(rrc,CG_Config,ue_context_p->ue_context.reconfig,ue_context_p->ue_context.rb_config);
|
__attribute__((unused))int CG_Config_size = generate_CG_Config(rrc,CG_Config,ue_context_p->ue_context.reconfig,ue_context_p->ue_context.rb_config);
|
||||||
|
|
||||||
//X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = CG_Config_size; //Need to verify correct value for the buffer_size
|
//X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = CG_Config_size; //Need to verify correct value for the buffer_size
|
||||||
// Send to X2 entity to transport to MeNB
|
// Send to X2 entity to transport to MeNB
|
||||||
|
|||||||
@@ -34,6 +34,9 @@
|
|||||||
#include <common/utils/LOG/log.h>
|
#include <common/utils/LOG/log.h>
|
||||||
#include <common/config/config_userapi.h>
|
#include <common/config/config_userapi.h>
|
||||||
#include <openair1/SIMULATION/TOOLS/sim.h>
|
#include <openair1/SIMULATION/TOOLS/sim.h>
|
||||||
|
#include <common/utils/telnetsrv/telnetsrv.h>
|
||||||
|
#include <common/utils/load_module_shlib.h>
|
||||||
|
#include <targets/ARCH/rfsimulator/rfsimulator.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Legacy study:
|
Legacy study:
|
||||||
@@ -99,8 +102,8 @@ void rxAddInput( struct complex16 *input_sig, struct complex16 *after_channel_si
|
|||||||
} //l
|
} //l
|
||||||
}
|
}
|
||||||
|
|
||||||
out_ptr->r += round(rx_tmp.x*pathLossLinear + noise_per_sample*gaussdouble(0.0,1.0));
|
out_ptr->r += round(rx_tmp.x*pathLossLinear + noise_per_sample*gaussZiggurat(0.0,1.0));
|
||||||
out_ptr->i += round(rx_tmp.y*pathLossLinear + noise_per_sample*gaussdouble(0.0,1.0));
|
out_ptr->i += round(rx_tmp.y*pathLossLinear + noise_per_sample*gaussZiggurat(0.0,1.0));
|
||||||
out_ptr++;
|
out_ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,3 +115,4 @@ void rxAddInput( struct complex16 *input_sig, struct complex16 *after_channel_si
|
|||||||
channelDesc->path_loss_dB,
|
channelDesc->path_loss_dB,
|
||||||
10*log10(noise_per_sample));
|
10*log10(noise_per_sample));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* Author and copyright: Laurent Thomas, open-cells.com
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*-------------------------------------------------------------------------------
|
||||||
|
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
* contact@openairinterface.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include <common/utils/assertions.h>
|
||||||
|
#include <common/utils/LOG/log.h>
|
||||||
|
#include <common/config/config_userapi.h>
|
||||||
|
#include <openair1/SIMULATION/TOOLS/sim.h>
|
||||||
|
#include <targets/ARCH/rfsimulator/rfsimulator.h>
|
||||||
|
|
||||||
|
// Ziggurat
|
||||||
|
static double wn[128],fn[128];
|
||||||
|
static uint32_t iz,jz,jsr=123456789,kn[128];
|
||||||
|
static int32_t hz;
|
||||||
|
#define SHR3 (jz=jsr, jsr^=(jsr<<13),jsr^=(jsr>>17),jsr^=(jsr<<5),jz+jsr)
|
||||||
|
#define UNI (0.5+(signed) SHR3 * 0.2328306e-9)
|
||||||
|
|
||||||
|
double nfix(void) {
|
||||||
|
const double r = 3.442620;
|
||||||
|
static double x, y;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
x=hz * wn[iz];
|
||||||
|
|
||||||
|
if (iz==0) {
|
||||||
|
do {
|
||||||
|
x = - 0.2904764 * log (UNI);
|
||||||
|
y = - log (UNI);
|
||||||
|
} while (y+y < x*x);
|
||||||
|
|
||||||
|
return (hz>0)? r+x : -r-x;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fn[iz]+UNI*(fn[iz-1]-fn[iz])<exp(-0.5*x*x)) {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
hz = SHR3;
|
||||||
|
iz = hz&127;
|
||||||
|
|
||||||
|
if (abs(hz) < kn[iz]) {
|
||||||
|
return ((hz)*wn[iz]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!\Procedure to create tables for normal distribution kn,wn and fn. */
|
||||||
|
|
||||||
|
void tableNor(unsigned long seed) {
|
||||||
|
jsr=seed;
|
||||||
|
double dn = 3.442619855899;
|
||||||
|
int i;
|
||||||
|
const double m1 = 2147483648.0;
|
||||||
|
double q;
|
||||||
|
double tn = 3.442619855899;
|
||||||
|
const double vn = 9.91256303526217E-03;
|
||||||
|
q = vn/exp(-0.5*dn*dn);
|
||||||
|
kn[0] = ((dn/q)*m1);
|
||||||
|
kn[1] = 0;
|
||||||
|
wn[0] = ( q / m1 );
|
||||||
|
wn[127] = ( dn / m1 );
|
||||||
|
fn[0] = 1.0;
|
||||||
|
fn[127] = ( exp ( - 0.5 * dn * dn ) );
|
||||||
|
|
||||||
|
for ( i = 126; 1 <= i; i-- ) {
|
||||||
|
dn = sqrt (-2.0 * log ( vn/dn + exp(-0.5*dn*dn)));
|
||||||
|
kn[i+1] = ((dn / tn)*m1);
|
||||||
|
tn = dn;
|
||||||
|
fn[i] = (exp (-0.5*dn*dn));
|
||||||
|
wn[i] = (dn / m1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
double gaussZiggurat(double mean, double variance) {
|
||||||
|
hz=SHR3;
|
||||||
|
iz=hz&127;
|
||||||
|
return abs(hz)<kn[iz]? hz*wn[iz] : nfix();
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.openairinterface.org/?page_id=698
|
||||||
|
*
|
||||||
|
* Author and copyright: Laurent Thomas, open-cells.com
|
||||||
|
*
|
||||||
|
* 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 __RFSIMULATOR_H
|
||||||
|
#define __RFSIMULATOR_H
|
||||||
|
double gaussZiggurat(double mean, double variance);
|
||||||
|
void tableNor(unsigned long seed);
|
||||||
|
void rxAddInput( struct complex16 *input_sig,
|
||||||
|
struct complex16 *after_channel_sig,
|
||||||
|
int rxAnt,
|
||||||
|
channel_desc_t *channelDesc,
|
||||||
|
int nbSamples,
|
||||||
|
uint64_t TS,
|
||||||
|
uint32_t CirSize
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -50,6 +50,7 @@
|
|||||||
#include "openair1/PHY/defs_UE.h"
|
#include "openair1/PHY/defs_UE.h"
|
||||||
#define CHANNELMOD_DYNAMICLOAD
|
#define CHANNELMOD_DYNAMICLOAD
|
||||||
#include <openair1/SIMULATION/TOOLS/sim.h>
|
#include <openair1/SIMULATION/TOOLS/sim.h>
|
||||||
|
#include <targets/ARCH/rfsimulator/rfsimulator.h>
|
||||||
|
|
||||||
#define PORT 4043 //default TCP port for this simulator
|
#define PORT 4043 //default TCP port for this simulator
|
||||||
#define CirSize 307200 // 100ms is enough
|
#define CirSize 307200 // 100ms is enough
|
||||||
@@ -146,6 +147,12 @@ void allocCirBuf(rfsimulator_state_t *bridge, int sock) {
|
|||||||
// the value channel_model->path_loss_dB seems only a storage place (new_channel_desc_scm() only copy the passed value)
|
// the value channel_model->path_loss_dB seems only a storage place (new_channel_desc_scm() only copy the passed value)
|
||||||
// Legacy changes directlty the variable channel_model->path_loss_dB place to place
|
// Legacy changes directlty the variable channel_model->path_loss_dB place to place
|
||||||
// while calling new_channel_desc_scm() with path losses = 0
|
// while calling new_channel_desc_scm() with path losses = 0
|
||||||
|
static bool init_done=false;
|
||||||
|
if (!init_done) {
|
||||||
|
randominit(0);
|
||||||
|
tableNor(0);
|
||||||
|
init_done=true;
|
||||||
|
}
|
||||||
ptr->channel_model=new_channel_desc_scm(bridge->tx_num_channels,bridge->rx_num_channels,
|
ptr->channel_model=new_channel_desc_scm(bridge->tx_num_channels,bridge->rx_num_channels,
|
||||||
bridge->channelmod,
|
bridge->channelmod,
|
||||||
bridge->sample_rate,
|
bridge->sample_rate,
|
||||||
@@ -561,6 +568,7 @@ int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimestamp, vo
|
|||||||
pthread_mutex_unlock(&Sockmutex);
|
pthread_mutex_unlock(&Sockmutex);
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
pthread_mutex_lock(&Sockmutex);
|
pthread_mutex_lock(&Sockmutex);
|
||||||
|
|
||||||
if ( t->lastWroteTS < t->nextTimestamp ) {
|
if ( t->lastWroteTS < t->nextTimestamp ) {
|
||||||
// Assuming Tx is not done fully in another thread
|
// Assuming Tx is not done fully in another thread
|
||||||
// We can never write is the past from the received time
|
// We can never write is the past from the received time
|
||||||
@@ -574,6 +582,7 @@ int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimestamp, vo
|
|||||||
|
|
||||||
for ( int i=0; i < t->tx_num_channels; i++)
|
for ( int i=0; i < t->tx_num_channels; i++)
|
||||||
samplesVoid[i]=(void *)&v;
|
samplesVoid[i]=(void *)&v;
|
||||||
|
|
||||||
LOG_I(HW, "No samples Tx occured, so we send 1 sample to notify it: Tx:%lu, Rx:%lu\n",
|
LOG_I(HW, "No samples Tx occured, so we send 1 sample to notify it: Tx:%lu, Rx:%lu\n",
|
||||||
t->lastWroteTS, t->nextTimestamp);
|
t->lastWroteTS, t->nextTimestamp);
|
||||||
rfsimulator_write_internal(t, t->nextTimestamp,
|
rfsimulator_write_internal(t, t->nextTimestamp,
|
||||||
@@ -716,7 +725,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
|
|||||||
rfsimulator->rx_num_channels=openair0_cfg->rx_num_channels;
|
rfsimulator->rx_num_channels=openair0_cfg->rx_num_channels;
|
||||||
rfsimulator->sample_rate=openair0_cfg->sample_rate;
|
rfsimulator->sample_rate=openair0_cfg->sample_rate;
|
||||||
rfsimulator->tx_bw=openair0_cfg->tx_bw;
|
rfsimulator->tx_bw=openair0_cfg->tx_bw;
|
||||||
randominit(0);
|
//randominit(0);
|
||||||
set_taus_seed(0);
|
set_taus_seed(0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user