benetel: driver for Benetel's 4G and 5G RRUs
This commit contains work done by Eurecom and by Benetel.
This commit is contained in:
+4
-5
@@ -2,13 +2,12 @@
|
|||||||
|
|
||||||
We want to make contributing to this project as easy and transparent as possible.
|
We want to make contributing to this project as easy and transparent as possible.
|
||||||
|
|
||||||
Please refer to the steps described on our website: [How to contribute to OAI](https://www.openairinterface.org/?page_id=112)
|
|
||||||
|
|
||||||
1. Sign and return a Contributor License Agreement to OAI team.
|
1. Sign and return a Contributor License Agreement to OAI team.
|
||||||
2. Create an account on [Eurecom GitLab Server](https://gitlab.eurecom.fr).
|
2. We recommend that you provide us with a professional or student email address
|
||||||
3. Provide the identifiant of this account to the OAI team (mailto:contact@openairinterface.org) so you have developer rights on this repository.
|
2. Register on [Eurecom GitLab Server](https://gitlab.eurecom.fr/users/sign_in)
|
||||||
|
3. Provide the OAI team with the **username** of this account to (mailto:contact@openairinterface.org) ; we will give you the developer rights on this repository.
|
||||||
4. The policies are described in these wiki pages: [OAI Policies](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/oai-policies-home)
|
4. The policies are described in these wiki pages: [OAI Policies](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/oai-policies-home)
|
||||||
- PLEASE DO NOT FORK the OAI repository on your own Eurecom GitLab account. It just eats up space on our servers.
|
- PLEASE DO NOT FORK the OAI repository on your own Eurecom GitLab account. It just eats up space on our servers.
|
||||||
- You can fork onto another hosting system. But we will NOT accept a merge request from a forked repository.
|
- You can fork onto another hosting system. But we will NOT accept a merge request from a forked repository.
|
||||||
* This decision was made for the license reasons.
|
* This decision was made for the license reasons.
|
||||||
* The Continuous Integration will reject your merge request.
|
* The Continuous Integration will reject your merge request.
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
r*.raw
|
||||||
enb_*.log
|
enb_*.log
|
||||||
ue_*.log
|
ue_*.log
|
||||||
ping_*.*
|
ping_*.*
|
||||||
|
|||||||
@@ -66,7 +66,8 @@ pipeline {
|
|||||||
"Test-IF4p5-TDD-Band38-Multi-RRU",
|
"Test-IF4p5-TDD-Band38-Multi-RRU",
|
||||||
"Test-eNB-OAI-UE-FDD-Band7",
|
"Test-eNB-OAI-UE-FDD-Band7",
|
||||||
"Test-Mono-FDD-Band13-X2-HO",
|
"Test-Mono-FDD-Band13-X2-HO",
|
||||||
"Test-TDD-Band78-gNB-NR-UE"
|
"Test-TDD-Band78-gNB-NR-UE",
|
||||||
|
"Test-OCP-FDD-Band7"
|
||||||
])
|
])
|
||||||
ansiColor('xterm')
|
ansiColor('xterm')
|
||||||
}
|
}
|
||||||
@@ -683,6 +684,25 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stage ("Test OAI OCP-eNB - FDD - Band 7 - B210") {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
triggerSlaveJob ('OCPeNB-FDD-Band7-B210', 'Test-OCP-FDD-Band7')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
script {
|
||||||
|
finalizeSlaveJob('OCPeNB-FDD-Band7-B210')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
failure {
|
||||||
|
script {
|
||||||
|
currentBuild.result = 'FAILURE'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
|
|||||||
@@ -0,0 +1,229 @@
|
|||||||
|
|
||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
# Python for CI of OAI-eNB + COTS-UE
|
||||||
|
#
|
||||||
|
# Required Python Version
|
||||||
|
# Python 3.x
|
||||||
|
#
|
||||||
|
# Required Python Package
|
||||||
|
# pexpect
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# Import Libs
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
import sys # arg
|
||||||
|
import re # reg
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# Parsing Command Line Arguements
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,HELP):
|
||||||
|
|
||||||
|
|
||||||
|
py_param_file_present = False
|
||||||
|
py_params={}
|
||||||
|
|
||||||
|
while len(argvs) > 1:
|
||||||
|
myArgv = argvs.pop(1) # 0th is this file's name
|
||||||
|
|
||||||
|
#--help
|
||||||
|
if re.match('^\-\-help$', myArgv, re.IGNORECASE):
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
#--apply=<filename> as parameters file, to replace inline parameters
|
||||||
|
elif re.match('^\-\-Apply=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-Apply=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
py_params_file = matchReg.group(1)
|
||||||
|
with open(py_params_file,'r') as file:
|
||||||
|
# The FullLoader parameter handles the conversion from YAML
|
||||||
|
# scalar values to Python dictionary format
|
||||||
|
py_params = yaml.load(file,Loader=yaml.FullLoader)
|
||||||
|
py_param_file_present = True #to be removed once validated
|
||||||
|
#AssignParams(py_params) #to be uncommented once validated
|
||||||
|
|
||||||
|
#consider inline parameters
|
||||||
|
elif re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
mode = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBRepository=(.+)$|^\-\-ranRepository(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
else:
|
||||||
|
matchReg = re.match('^\-\-ranRepository=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ranRepository = matchReg.group(1)
|
||||||
|
RAN.ranRepository=matchReg.group(1)
|
||||||
|
HTML.ranRepository=matchReg.group(1)
|
||||||
|
ldpc.ranRepository=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB_AllowMerge=(.+)$|^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
else:
|
||||||
|
matchReg = re.match('^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
doMerge = matchReg.group(1)
|
||||||
|
ldpc.ranAllowMerge=matchReg.group(1)
|
||||||
|
if ((doMerge == 'true') or (doMerge == 'True')):
|
||||||
|
CiTestObj.ranAllowMerge = True
|
||||||
|
RAN.ranAllowMerge=True
|
||||||
|
HTML.ranAllowMerge=True
|
||||||
|
elif re.match('^\-\-eNBBranch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
else:
|
||||||
|
matchReg = re.match('^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ranBranch = matchReg.group(1)
|
||||||
|
RAN.ranBranch=matchReg.group(1)
|
||||||
|
HTML.ranBranch=matchReg.group(1)
|
||||||
|
ldpc.ranBranch=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBCommitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE)
|
||||||
|
else:
|
||||||
|
matchReg = re.match('^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ranCommitID = matchReg.group(1)
|
||||||
|
RAN.ranCommitID=matchReg.group(1)
|
||||||
|
HTML.ranCommitID=matchReg.group(1)
|
||||||
|
ldpc.ranCommitID=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBTargetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
||||||
|
else:
|
||||||
|
matchReg = re.match('^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ranTargetBranch = matchReg.group(1)
|
||||||
|
RAN.ranTargetBranch=matchReg.group(1)
|
||||||
|
HTML.ranTargetBranch=matchReg.group(1)
|
||||||
|
ldpc.ranTargetBranch=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBIPAddress=(.+)$|^\-\-eNB[1-2]IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNBIPAddress=matchReg.group(1)
|
||||||
|
ldpc.eNBIpAddr=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB1IPAddress=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB2IPAddress=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBUserName=(.+)$|^\-\-eNB[1-2]UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNBUserName=matchReg.group(1)
|
||||||
|
ldpc.eNBUserName=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB1UserName=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB2UserName=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBPassword=(.+)$|^\-\-eNB[1-2]Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNBPassword=matchReg.group(1)
|
||||||
|
ldpc.eNBPassWord=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB1Password=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB2Password=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBSourceCodePath=(.+)$|^\-\-eNB[1-2]SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNBSourceCodePath=matchReg.group(1)
|
||||||
|
ldpc.eNBSourceCodePath=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB1SourceCodePath=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB2SourceCodePath=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
EPC.IPAddress=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
EPC.UserName=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
EPC.Password=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
EPC.SourceCodePath=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
if re.match('OAI', matchReg.group(1), re.IGNORECASE) or re.match('ltebox', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-CUPS', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-Docker', matchReg.group(1), re.IGNORECASE):
|
||||||
|
EPC.Type=matchReg.group(1)
|
||||||
|
else:
|
||||||
|
sys.exit('Invalid EPC Type: ' + matchReg.group(1) + ' -- (should be OAI or ltebox or OAI-Rel14-CUPS or OAI-Rel14-Docker)')
|
||||||
|
elif re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
EPC.ContainerPrefix=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ADBIPAddress = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ADBUserName = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
if re.match('centralized', matchReg.group(1), re.IGNORECASE) or re.match('distributed', matchReg.group(1), re.IGNORECASE):
|
||||||
|
if re.match('distributed', matchReg.group(1), re.IGNORECASE):
|
||||||
|
CiTestObj.ADBCentralized = False
|
||||||
|
else:
|
||||||
|
CiTestObj.ADBCentralized = True
|
||||||
|
else:
|
||||||
|
sys.exit('Invalid ADB Type: ' + matchReg.group(1) + ' -- (should be centralized or distributed)')
|
||||||
|
elif re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ADBPassword = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.testXMLfiles.append(matchReg.group(1))
|
||||||
|
HTML.testXMLfiles.append(matchReg.group(1))
|
||||||
|
HTML.nbTestXMLfiles=HTML.nbTestXMLfiles+1
|
||||||
|
elif re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.UEIPAddress = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.UEUserName = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.UEPassword = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.UESourceCodePath = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
finalStatus = matchReg.group(1)
|
||||||
|
if ((finalStatus == 'true') or (finalStatus == 'True')):
|
||||||
|
CiTestObj.finalStatus = True
|
||||||
|
else:
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
sys.exit('Invalid Parameter: ' + myArgv)
|
||||||
|
|
||||||
|
return py_param_file_present, py_params, mode
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
# Python for CI of OAI-eNB + COTS-UE
|
||||||
|
#
|
||||||
|
# Required Python Version
|
||||||
|
# Python 3.x
|
||||||
|
#
|
||||||
|
# Required Python Package
|
||||||
|
# pexpect
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#to use logging.info()
|
||||||
|
import logging
|
||||||
|
#to create a SSH object locally in the methods
|
||||||
|
import sshconnection
|
||||||
|
#time.sleep
|
||||||
|
import time
|
||||||
|
|
||||||
|
class CotsUe:
|
||||||
|
def __init__(self,model,UEIPAddr,UEUserName,UEPassWord):
|
||||||
|
self.model = model
|
||||||
|
self.UEIPAddr = UEIPAddr
|
||||||
|
self.UEUserName = UEUserName
|
||||||
|
self.UEPassWord = UEPassWord
|
||||||
|
self.runargs = '' #on of off to toggle airplane mode on/off
|
||||||
|
self.__SetAirplaneRetry = 3
|
||||||
|
|
||||||
|
#-----------------$
|
||||||
|
#PUBLIC Methods$
|
||||||
|
#-----------------$
|
||||||
|
|
||||||
|
def Check_Airplane(self):
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.UEIPAddr, self.UEUserName, self.UEPassWord)
|
||||||
|
status=mySSH.cde_check_value('sudo adb shell settings get global airplane_mode_on ', ['0','1'],5)
|
||||||
|
mySSH.close()
|
||||||
|
return status
|
||||||
|
|
||||||
|
|
||||||
|
def Set_Airplane(self,target_state_str):
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.UEIPAddr, self.UEUserName, self.UEPassWord)
|
||||||
|
mySSH.command('sudo adb start-server','$',5)
|
||||||
|
logging.info("Toggling COTS UE Airplane mode to : "+target_state_str)
|
||||||
|
current_state = self.Check_Airplane()
|
||||||
|
if target_state_str.lower()=="on":
|
||||||
|
target_state=1
|
||||||
|
else:
|
||||||
|
target_state=0
|
||||||
|
if current_state != target_state:
|
||||||
|
#toggle state
|
||||||
|
retry = 0
|
||||||
|
while (current_state!=target_state) and (retry < self.__SetAirplaneRetry):
|
||||||
|
mySSH.command('sudo adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS', '\$', 5)
|
||||||
|
mySSH.command('sudo adb shell input keyevent 20', '\$', 5)
|
||||||
|
mySSH.command('sudo adb shell input tap 968 324', '\$', 5)
|
||||||
|
time.sleep(1)
|
||||||
|
current_state = self.Check_Airplane()
|
||||||
|
retry+=1
|
||||||
|
if current_state != target_state:
|
||||||
|
logging.error("ATTENTION : Could not toggle to : "+target_state_str)
|
||||||
|
logging.error("Current state is : "+ str(current_state))
|
||||||
|
else:
|
||||||
|
print("Airplane mode is already "+ target_state_str)
|
||||||
|
mySSH.command('sudo adb kill-server','$',5)
|
||||||
|
mySSH.close()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,191 @@
|
|||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
# Python for CI of OAI-eNB + COTS-UE
|
||||||
|
#
|
||||||
|
# Required Python Version
|
||||||
|
# Python 3.x
|
||||||
|
#
|
||||||
|
# Required Python Package
|
||||||
|
# pexpect
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#to use logging.info()
|
||||||
|
import logging
|
||||||
|
#to create a SSH object locally in the methods
|
||||||
|
import sshconnection
|
||||||
|
#to update the HTML object
|
||||||
|
import html
|
||||||
|
from multiprocessing import SimpleQueue
|
||||||
|
#for log folder maintenance
|
||||||
|
import os
|
||||||
|
|
||||||
|
class PhySim:
|
||||||
|
def __init__(self):
|
||||||
|
self.buildargs = ""
|
||||||
|
self.runargs = ""
|
||||||
|
self.eNBIpAddr = ""
|
||||||
|
self.eNBUserName = ""
|
||||||
|
self.eNBPassWord = ""
|
||||||
|
self.eNBSourceCodePath = ""
|
||||||
|
self.ranRepository = ""
|
||||||
|
self.ranBranch = ""
|
||||||
|
self.ranCommitID= ""
|
||||||
|
self.ranAllowMerge= ""
|
||||||
|
self.ranTargetBranch= ""
|
||||||
|
self.exitStatus=0
|
||||||
|
self.forced_workspace_cleanup=False
|
||||||
|
#private attributes
|
||||||
|
self.__workSpacePath=''
|
||||||
|
self.__buildLogFile='compile_phy_sim.log'
|
||||||
|
self.__runLogFile=''
|
||||||
|
self.__runResults=[]
|
||||||
|
self.__runLogPath='phy_sim_logs'
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------
|
||||||
|
#PRIVATE Methods
|
||||||
|
#-----------------
|
||||||
|
|
||||||
|
def __CheckResults_PhySim(self,HTML,CONST,testcase_id):
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
|
#retrieve run log file and store it locally$
|
||||||
|
mySSH.copyin(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord, self.__workSpacePath+self.__runLogFile, '.')
|
||||||
|
mySSH.close()
|
||||||
|
#parse results looking for Encoding and Decoding mean values
|
||||||
|
self.__runResults=[]
|
||||||
|
with open(self.__runLogFile) as f:
|
||||||
|
for line in f:
|
||||||
|
if 'mean' in line:
|
||||||
|
self.__runResults.append(line)
|
||||||
|
#the values are appended for each mean value (2), so we take these 2 values from the list
|
||||||
|
info=self.__runResults[0]+self.__runResults[1]
|
||||||
|
|
||||||
|
#once parsed move the local logfile to its folder for tidiness
|
||||||
|
os.system('mv '+self.__runLogFile+' '+ self.__runLogPath+'/.')
|
||||||
|
|
||||||
|
#updating the HTML with results
|
||||||
|
html_cell = '<pre style="background-color:white">' + info + '</pre>'
|
||||||
|
html_queue=SimpleQueue()
|
||||||
|
html_queue.put(html_cell)
|
||||||
|
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', 1, html_queue)
|
||||||
|
return HTML
|
||||||
|
|
||||||
|
|
||||||
|
def __CheckBuild_PhySim(self, HTML, CONST):
|
||||||
|
self.__workSpacePath=self.eNBSourceCodePath+'/cmake_targets/'
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
|
#retrieve compile log file and store it locally
|
||||||
|
mySSH.copyin(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord, self.__workSpacePath+self.__buildLogFile, '.')
|
||||||
|
#delete older run log file
|
||||||
|
mySSH.command('rm ' + self.__workSpacePath+self.__runLogFile, '\$', 5)
|
||||||
|
mySSH.close()
|
||||||
|
#check build result from local compile log file
|
||||||
|
buildStatus=False
|
||||||
|
with open(self.__buildLogFile) as f:
|
||||||
|
#nr_prachsim is the last compile step
|
||||||
|
if 'nr_prachsim compiled' in f.read():
|
||||||
|
buildStatus=True
|
||||||
|
#update HTML based on build status
|
||||||
|
if buildStatus:
|
||||||
|
HTML.CreateHtmlTestRow(self.buildargs, 'OK', CONST.ALL_PROCESSES_OK, 'LDPC')
|
||||||
|
self.exitStatus=0
|
||||||
|
else:
|
||||||
|
logging.error('\u001B[1m Building Physical Simulators Failed\u001B[0m')
|
||||||
|
HTML.CreateHtmlTestRow(self.buildargs, 'KO', CONST.ALL_PROCESSES_OK, 'LDPC')
|
||||||
|
HTML.CreateHtmlTabFooter(False)
|
||||||
|
#exitStatus=1 will do a sys.exit in main
|
||||||
|
self.exitStatus=1
|
||||||
|
return HTML
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------$
|
||||||
|
#PUBLIC Methods$
|
||||||
|
#-----------------$
|
||||||
|
|
||||||
|
def Build_PhySim(self,htmlObj,constObj):
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
|
|
||||||
|
#create working dir
|
||||||
|
mySSH.command('mkdir -p ' + self.eNBSourceCodePath, '\$', 5)
|
||||||
|
mySSH.command('cd ' + self.eNBSourceCodePath, '\$', 5)
|
||||||
|
|
||||||
|
if not self.ranRepository.lower().endswith('.git'):
|
||||||
|
self.ranRepository+='.git'
|
||||||
|
|
||||||
|
#git clone
|
||||||
|
mySSH.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + self.ranRepository + ' .; else stdbuf -o0 git fetch --prune; fi', '\$', 600)
|
||||||
|
#git config
|
||||||
|
mySSH.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
|
||||||
|
mySSH.command('git config user.name "OAI Jenkins"', '\$', 5)
|
||||||
|
|
||||||
|
#git clean depending on self.forced_workspace_cleanup captured in xml
|
||||||
|
if self.forced_workspace_cleanup==True:
|
||||||
|
logging.info('Cleaning workspace ...')
|
||||||
|
mySSH.command('echo ' + self.eNBPassWord + ' | sudo -S git clean -x -d -ff', '\$', 30)
|
||||||
|
else:
|
||||||
|
logging.info('Workspace cleaning was disabled')
|
||||||
|
|
||||||
|
# if the commit ID is provided, use it to point to it
|
||||||
|
if self.ranCommitID != '':
|
||||||
|
mySSH.command('git checkout -f ' + self.ranCommitID, '\$', 5)
|
||||||
|
# if the branch is not develop, then it is a merge request and we need to do
|
||||||
|
# the potential merge. Note that merge conflicts should have already been checked earlier
|
||||||
|
if (self.ranAllowMerge):
|
||||||
|
if self.ranTargetBranch == '':
|
||||||
|
if (self.ranBranch != 'develop') and (self.ranBranch != 'origin/develop'):
|
||||||
|
mySSH.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5)
|
||||||
|
else:
|
||||||
|
logging.info('Merging with the target branch: ' + self.ranTargetBranch)
|
||||||
|
mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
|
||||||
|
|
||||||
|
#build
|
||||||
|
mySSH.command('source oaienv', '\$', 5)
|
||||||
|
mySSH.command('cd cmake_targets', '\$', 5)
|
||||||
|
mySSH.command('mkdir -p log', '\$', 5)
|
||||||
|
mySSH.command('chmod 777 log', '\$', 5)
|
||||||
|
mySSH.command('stdbuf -o0 ./build_oai ' + self.buildargs + ' 2>&1 | stdbuf -o0 tee ' + self.__buildLogFile, 'Bypassing the Tests|build have failed', 1500)
|
||||||
|
|
||||||
|
mySSH.close()
|
||||||
|
#check build status and update HTML object
|
||||||
|
lHTML = html.HTMLManagement()
|
||||||
|
lHTML=self.__CheckBuild_PhySim(htmlObj,constObj)
|
||||||
|
return lHTML
|
||||||
|
|
||||||
|
|
||||||
|
def Run_PhySim(self,htmlObj,constObj,testcase_id):
|
||||||
|
#create run logs folder locally
|
||||||
|
os.system('mkdir -p ./'+self.__runLogPath)
|
||||||
|
#log file is tc_<testcase_id>.log remotely
|
||||||
|
self.__runLogFile='physim_'+str(testcase_id)+'.log'
|
||||||
|
#open a session for test run
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
|
mySSH.command('cd '+self.__workSpacePath,'\$',5)
|
||||||
|
#run and redirect the results to a log file
|
||||||
|
mySSH.command(self.__workSpacePath+'phy_simulators/build/ldpctest ' + self.runargs + ' >> '+self.__runLogFile, '\$', 30)
|
||||||
|
mySSH.close()
|
||||||
|
#return updated HTML to main
|
||||||
|
lHTML = html.HTMLManagement()
|
||||||
|
lHTML=self.__CheckResults_PhySim(htmlObj,constObj,testcase_id)
|
||||||
|
return lHTML
|
||||||
@@ -105,6 +105,7 @@ eNBs =
|
|||||||
ue_TimersAndConstants_n310 = 20;
|
ue_TimersAndConstants_n310 = 20;
|
||||||
ue_TimersAndConstants_n311 = 1;
|
ue_TimersAndConstants_n311 = 1;
|
||||||
ue_TransmissionMode = 1;
|
ue_TransmissionMode = 1;
|
||||||
|
mbms_dedicated_serving_cell = "DISABLE"
|
||||||
|
|
||||||
//Parameters for SIB18
|
//Parameters for SIB18
|
||||||
rxPool_sc_CP_Len = "normal";
|
rxPool_sc_CP_Len = "normal";
|
||||||
|
|||||||
@@ -105,6 +105,8 @@ eNBs =
|
|||||||
ue_TimersAndConstants_n310 = 20;
|
ue_TimersAndConstants_n310 = 20;
|
||||||
ue_TimersAndConstants_n311 = 1;
|
ue_TimersAndConstants_n311 = 1;
|
||||||
ue_TransmissionMode = 1;
|
ue_TransmissionMode = 1;
|
||||||
|
mbms_dedicated_serving_cell = "DISABLE"
|
||||||
|
|
||||||
|
|
||||||
//Parameters for SIB18
|
//Parameters for SIB18
|
||||||
rxPool_sc_CP_Len = "normal";
|
rxPool_sc_CP_Len = "normal";
|
||||||
@@ -247,7 +249,6 @@ MCEs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
MCE_INTERFACE_NAME_FOR_M2_ENB = "lo";
|
MCE_INTERFACE_NAME_FOR_M2_ENB = "lo";
|
||||||
@@ -271,12 +272,12 @@ MCEs = (
|
|||||||
mcch_update_time = 10;
|
mcch_update_time = 10;
|
||||||
mbms_area_config_list = (
|
mbms_area_config_list = (
|
||||||
{
|
{
|
||||||
common_sf_allocation_period = 2; #rf4(0) rf8(1) rf16(2) rf32(3) rf64(4) rf128(5) rf256(6)
|
common_sf_allocation_period = 1; #rf4(0) rf8(1) rf16(2) rf32(3) rf64(4) rf128(5) rf256(6)
|
||||||
mbms_area_id = 0;
|
mbms_area_id = 0;
|
||||||
pmch_config_list = (
|
pmch_config_list = (
|
||||||
{
|
{
|
||||||
allocated_sf_end=64;
|
allocated_sf_end=40;
|
||||||
data_mcs=10;
|
data_mcs=20;
|
||||||
mch_scheduling_period = 0; #rf8(0)
|
mch_scheduling_period = 0; #rf8(0)
|
||||||
mbms_session_list = (
|
mbms_session_list = (
|
||||||
{
|
{
|
||||||
@@ -288,7 +289,7 @@ MCEs = (
|
|||||||
mnc_length = 2;
|
mnc_length = 2;
|
||||||
}
|
}
|
||||||
service_id=0;
|
service_id=0;
|
||||||
lcid=5; #this must be properly defined lcid:8+service:0 -> rab_id:5
|
lcid=5; #this must be properly defined lcid:8+service:0 -> rab_id:5 //with new RLC set lcid either 4 or 5
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -296,10 +297,10 @@ MCEs = (
|
|||||||
|
|
||||||
mbms_sf_config_list = (
|
mbms_sf_config_list = (
|
||||||
{
|
{
|
||||||
radioframe_allocation_period=1; #n1(0) n2(1) n4(2) n8(3) n16(4) n32(5)
|
radioframe_allocation_period=0; #n1(0) n2(1) n4(2) n8(3) n16(4) n32(5)
|
||||||
radioframe_alloocation_offset=0;
|
radioframe_alloocation_offset=0;
|
||||||
num_frame="oneFrame";
|
num_frame="oneFrame";
|
||||||
subframe_allocation=57; #xx100000
|
subframe_allocation=59; #xx111011 #57; #xx111001
|
||||||
//num_frame="fourFrame";
|
//num_frame="fourFrame";
|
||||||
//subframe_allocation=14548987; #
|
//subframe_allocation=14548987; #
|
||||||
}
|
}
|
||||||
|
|||||||
+284
@@ -0,0 +1,284 @@
|
|||||||
|
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
eNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
# real_time choice in {hard, rt-preempt, no}
|
||||||
|
real_time = "no";
|
||||||
|
////////// Identification parameters:
|
||||||
|
eNB_ID = 0xe01;
|
||||||
|
cell_type = "CELL_MACRO_ENB";
|
||||||
|
eNB_name = "eNB-Eurecom-LTEBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = (
|
||||||
|
{ mcc = 222; mnc = 01; mnc_length = 2; }
|
||||||
|
);
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "eNodeB_3GPP";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
nb_antenna_ports = 1;
|
||||||
|
ue_TransmissionMode = 1;
|
||||||
|
frame_type = "FDD";
|
||||||
|
tdd_config = 3;
|
||||||
|
tdd_config_s = 0;
|
||||||
|
prefix_type = "NORMAL";
|
||||||
|
eutra_band = 7;
|
||||||
|
downlink_frequency = 2680000000L;
|
||||||
|
uplink_frequency_offset = -120000000;
|
||||||
|
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 25;
|
||||||
|
Nid_cell_mbsfn = 0;
|
||||||
|
nb_antennas_tx = 1;
|
||||||
|
nb_antennas_rx = 1;
|
||||||
|
prach_root = 0;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 115;
|
||||||
|
pbch_repetition = "FALSE";
|
||||||
|
|
||||||
|
prach_config_index = 0;
|
||||||
|
prach_high_speed = "DISABLE";
|
||||||
|
prach_zero_correlation = 1;
|
||||||
|
prach_freq_offset = 2;
|
||||||
|
|
||||||
|
pucch_delta_shift = 1;
|
||||||
|
pucch_nRB_CQI = 0;
|
||||||
|
pucch_nCS_AN = 0;
|
||||||
|
pucch_n1_AN = 0;
|
||||||
|
pdsch_referenceSignalPower = -29;
|
||||||
|
pdsch_p_b = 0;
|
||||||
|
pusch_n_SB = 1;
|
||||||
|
pusch_enable64QAM = "DISABLE";
|
||||||
|
pusch_hoppingMode = "interSubFrame";
|
||||||
|
pusch_hoppingOffset = 0;
|
||||||
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
|
pusch_groupAssignment = 0;
|
||||||
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
|
pusch_nDMRS1 = 1;
|
||||||
|
phich_duration = "NORMAL";
|
||||||
|
phich_resource = "ONESIXTH";
|
||||||
|
srs_enable = "DISABLE";
|
||||||
|
/*
|
||||||
|
srs_BandwidthConfig =;
|
||||||
|
srs_SubframeConfig =;
|
||||||
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;
|
||||||
|
*/
|
||||||
|
|
||||||
|
pusch_p0_Nominal = -96;
|
||||||
|
pusch_alpha = "AL1";
|
||||||
|
pucch_p0_Nominal = -96;
|
||||||
|
msg3_delta_Preamble = 6;
|
||||||
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
|
||||||
|
//Parameters for SIB18
|
||||||
|
rxPool_sc_CP_Len = "normal";
|
||||||
|
rxPool_sc_Period = "sf40";
|
||||||
|
rxPool_data_CP_Len = "normal";
|
||||||
|
rxPool_ResourceConfig_prb_Num = 20;
|
||||||
|
rxPool_ResourceConfig_prb_Start = 5;
|
||||||
|
rxPool_ResourceConfig_prb_End = 44;
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
/*
|
||||||
|
rxPool_dataHoppingConfig_hoppingParameter = 0;
|
||||||
|
rxPool_dataHoppingConfig_numSubbands = "ns1";
|
||||||
|
rxPool_dataHoppingConfig_rbOffset = 0;
|
||||||
|
rxPool_commTxResourceUC-ReqAllowed = "TRUE";
|
||||||
|
*/
|
||||||
|
// Parameters for SIB19
|
||||||
|
discRxPool_cp_Len = "normal"
|
||||||
|
discRxPool_discPeriod = "rf32"
|
||||||
|
discRxPool_numRetx = 1;
|
||||||
|
discRxPool_numRepetition = 2;
|
||||||
|
discRxPool_ResourceConfig_prb_Num = 5;
|
||||||
|
discRxPool_ResourceConfig_prb_Start = 3;
|
||||||
|
discRxPool_ResourceConfig_prb_End = 21;
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
enable_measurement_reports = "yes";
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
///X2
|
||||||
|
enable_x2 = "yes";
|
||||||
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth1";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
|
||||||
|
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eth1";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="high";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="debug";
|
||||||
|
rlc_log_verbosity ="high";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="high";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
phy_test_mode = 0;
|
||||||
|
puSch10xSnr = 160;
|
||||||
|
puCch10xSnr = 160;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||||
|
worker_config = "ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 118;
|
||||||
|
eNB_instances = [0];
|
||||||
|
clock_src = "external";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="high";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="high";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="high";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
@@ -71,6 +71,12 @@ gNBs =
|
|||||||
initialDLBWPmappingType_2 = 0;
|
initialDLBWPmappingType_2 = 0;
|
||||||
#this is SS=1,L=12
|
#this is SS=1,L=12
|
||||||
initialDLBWPstartSymbolAndLength_2 = 54;
|
initialDLBWPstartSymbolAndLength_2 = 54;
|
||||||
|
|
||||||
|
initialDLBWPk0_3 = 0;
|
||||||
|
initialDLBWPmappingType_3 = 0;
|
||||||
|
#this is SS=1,L=4
|
||||||
|
initialDLBWPstartSymbolAndLength_3 = 57;
|
||||||
|
|
||||||
#uplinkConfigCommon
|
#uplinkConfigCommon
|
||||||
#frequencyInfoUL
|
#frequencyInfoUL
|
||||||
ul_frequencyBand = 78;
|
ul_frequencyBand = 78;
|
||||||
@@ -105,8 +111,8 @@ gNBs =
|
|||||||
#1,2,4,8,10,20,40,80
|
#1,2,4,8,10,20,40,80
|
||||||
ra_ResponseWindow = 4;
|
ra_ResponseWindow = 4;
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
#ra_ContentionResolutionTimer
|
#ra_ContentionResolutionTimer
|
||||||
@@ -114,8 +120,8 @@ gNBs =
|
|||||||
ra_ContentionResolutionTimer = 7;
|
ra_ContentionResolutionTimer = 7;
|
||||||
rsrp_ThresholdSSB = 19;
|
rsrp_ThresholdSSB = 19;
|
||||||
#prach-RootSequenceIndex_PR
|
#prach-RootSequenceIndex_PR
|
||||||
#0 = 839, 1 = 139
|
#1 = 839, 2 = 139
|
||||||
prach_RootSequenceIndex_PR = 1;
|
prach_RootSequenceIndex_PR = 2;
|
||||||
prach_RootSequenceIndex = 1;
|
prach_RootSequenceIndex = 1;
|
||||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
#
|
#
|
||||||
@@ -135,7 +141,11 @@ gNBs =
|
|||||||
# this is SS=0 L=12
|
# this is SS=0 L=12
|
||||||
initialULBWPstartSymbolAndLength_1 = 69;
|
initialULBWPstartSymbolAndLength_1 = 69;
|
||||||
|
|
||||||
|
initialULBWPk2_2 = 7;
|
||||||
|
initialULBWPmappingType_2 = 1;
|
||||||
|
# this is SS=10 L=4
|
||||||
|
initialULBWPstartSymbolAndLength_2 = 52;
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
msg3_DeltaPreamble = 1;
|
||||||
p0_NominalWithGrant =-90;
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
@@ -235,8 +245,10 @@ RUs = (
|
|||||||
att_rx = 0;
|
att_rx = 0;
|
||||||
bands = [7];
|
bands = [7];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 114;
|
max_rxgain = 75;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
|
#beamforming 1x4 matrix:
|
||||||
|
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||||
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
|
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
|
||||||
clock_src = "external";
|
clock_src = "external";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,291 @@
|
|||||||
|
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_GNB";
|
||||||
|
gNB_name = "gNB-Eurecom-5GNRBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = ({mcc = 222; mnc = 01; mnc_length = 2;});
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
ssb_SubcarrierOffset = 31; //0;
|
||||||
|
pdsch_AntennaPorts = 1;
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
#frequencyInfoDL
|
||||||
|
# this is 3600 MHz + 84 PRBs@30kHz SCS (same as initial BWP)
|
||||||
|
absoluteFrequencySSB = 641272; //641032; #641968; 641968=start of ssb at 3600MHz + 82 RBs 641032=center of SSB at center of cell
|
||||||
|
dl_frequencyBand = 78;
|
||||||
|
# this is 3600 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 640000;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 106;
|
||||||
|
#initialDownlinkBWP
|
||||||
|
#genericParameters
|
||||||
|
# this is RBstart=84,L=13 (275*(L-1))+RBstart
|
||||||
|
initialDLBWPlocationAndBandwidth = 6366; //28875; //6366; #6407; #3384;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
#pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 0;
|
||||||
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
#pdsch-ConfigCommon
|
||||||
|
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||||
|
initialDLBWPk0_0 = 0;
|
||||||
|
#initialULBWPmappingType
|
||||||
|
#0=typeA,1=typeB
|
||||||
|
initialDLBWPmappingType_0 = 0;
|
||||||
|
#this is SS=1,L=13
|
||||||
|
initialDLBWPstartSymbolAndLength_0 = 40;
|
||||||
|
|
||||||
|
initialDLBWPk0_1 = 0;
|
||||||
|
initialDLBWPmappingType_1 = 0;
|
||||||
|
#this is SS=2,L=12
|
||||||
|
initialDLBWPstartSymbolAndLength_1 = 53;
|
||||||
|
|
||||||
|
initialDLBWPk0_2 = 0;
|
||||||
|
initialDLBWPmappingType_2 = 0;
|
||||||
|
#this is SS=1,L=12
|
||||||
|
initialDLBWPstartSymbolAndLength_2 = 54;
|
||||||
|
|
||||||
|
initialDLBWPk0_3 = 0;
|
||||||
|
initialDLBWPmappingType_3 = 0;
|
||||||
|
#this is SS=1,L=4 //5 (4 is for 43, 5 is for 57)
|
||||||
|
initialDLBWPstartSymbolAndLength_3 = 57; //43; //57;
|
||||||
|
#uplinkConfigCommon
|
||||||
|
#frequencyInfoUL
|
||||||
|
ul_frequencyBand = 78;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
ul_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
ul_subcarrierSpacing = 1;
|
||||||
|
ul_carrierBandwidth = 106;
|
||||||
|
pMax = 20;
|
||||||
|
#initialUplinkBWP
|
||||||
|
#genericParameters
|
||||||
|
initialULBWPlocationAndBandwidth = 6366; //28875; //6366; #6407; #3384;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
|
#rach-ConfigCommon
|
||||||
|
#rach-ConfigGeneric
|
||||||
|
prach_ConfigurationIndex = 98;
|
||||||
|
#prach_msg1_FDM
|
||||||
|
#0 = one, 1=two, 2=four, 3=eight
|
||||||
|
prach_msg1_FDM = 0;
|
||||||
|
prach_msg1_FrequencyStart = 0;
|
||||||
|
zeroCorrelationZoneConfig = 13;
|
||||||
|
preambleReceivedTargetPower = -100;
|
||||||
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
#powerRampingStep
|
||||||
|
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||||
|
powerRampingStep = 1;
|
||||||
|
#ra_ReponseWindow
|
||||||
|
#1,2,4,8,10,20,40,80
|
||||||
|
ra_ResponseWindow = 5;
|
||||||
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14; //15;
|
||||||
|
#ra_ContentionResolutionTimer
|
||||||
|
#(0..7) 8,16,24,32,40,48,56,64
|
||||||
|
ra_ContentionResolutionTimer = 7;
|
||||||
|
rsrp_ThresholdSSB = 19;
|
||||||
|
#prach-RootSequenceIndex_PR
|
||||||
|
#1 = 839, 2 = 139
|
||||||
|
prach_RootSequenceIndex_PR = 2;
|
||||||
|
prach_RootSequenceIndex = 1;
|
||||||
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
|
#
|
||||||
|
msg1_SubcarrierSpacing = 1,
|
||||||
|
|
||||||
|
# restrictedSetConfig
|
||||||
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
|
restrictedSetConfig = 0,
|
||||||
|
# pusch-ConfigCommon (up to 16 elements)
|
||||||
|
initialULBWPk2_0 = 2;
|
||||||
|
initialULBWPmappingType_0 = 1
|
||||||
|
# this is SS=0 L=11
|
||||||
|
initialULBWPstartSymbolAndLength_0 = 55;
|
||||||
|
|
||||||
|
initialULBWPk2_1 = 2;
|
||||||
|
initialULBWPmappingType_1 = 1;
|
||||||
|
# this is SS=0 L=12
|
||||||
|
initialULBWPstartSymbolAndLength_1 = 69;
|
||||||
|
|
||||||
|
initialULBWPk2_2 = 7;
|
||||||
|
initialULBWPmappingType_2 = 1;
|
||||||
|
# this is SS=10 L=4
|
||||||
|
initialULBWPstartSymbolAndLength_2 = 52;
|
||||||
|
|
||||||
|
msg3_DeltaPreamble = 1;
|
||||||
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
|
# pucch-ConfigCommon setup :
|
||||||
|
# pucchGroupHopping
|
||||||
|
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||||
|
pucchGroupHopping = 0;
|
||||||
|
hoppingId = 40;
|
||||||
|
p0_nominal = -90;
|
||||||
|
# ssb_PositionsInBurs_BitmapPR
|
||||||
|
# 1=short, 2=medium, 3=long
|
||||||
|
ssb_PositionsInBurst_PR = 2;
|
||||||
|
ssb_PositionsInBurst_Bitmap = 1; #0x80;
|
||||||
|
|
||||||
|
# ssb_periodicityServingCell
|
||||||
|
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||||
|
ssb_periodicityServingCell = 2;
|
||||||
|
|
||||||
|
# dmrs_TypeA_position
|
||||||
|
# 0 = pos2, 1 = pos3
|
||||||
|
dmrs_TypeA_Position = 0;
|
||||||
|
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
|
||||||
|
#tdd-UL-DL-ConfigurationCommon
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
referenceSubcarrierSpacing = 1;
|
||||||
|
# pattern1
|
||||||
|
# dl_UL_TransmissionPeriodicity
|
||||||
|
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||||
|
dl_UL_TransmissionPeriodicity = 6;
|
||||||
|
nrofDownlinkSlots = 7; //8; //7;
|
||||||
|
nrofDownlinkSymbols = 6; //0; //6;
|
||||||
|
nrofUplinkSlots = 2;
|
||||||
|
nrofUplinkSymbols = 4; //0; //4;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = -25;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
///X2
|
||||||
|
enable_x2 = "yes";
|
||||||
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
target_enb_x2_ip_address = (
|
||||||
|
{ ipv4 = "CI_FR1_CTL_ENB_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1_MME = "CI_GNB_IP_ADDR";
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1U = "CI_GNB_IP_ADDR";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
GNB_IPV4_ADDRESS_FOR_X2C = "CI_GNB_IP_ADDR";
|
||||||
|
GNB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 114;
|
||||||
|
eNB_instances = [0];
|
||||||
|
clock_src = "external";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||||
|
//parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,426 @@
|
|||||||
|
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
eNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
eNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_ENB";
|
||||||
|
|
||||||
|
eNB_name = "eNB-Eurecom-LTEBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = ( { mcc = 208; mnc = 93; mnc_length = 2; } );
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "3GPP_eNODEB";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
frame_type = "FDD";
|
||||||
|
tdd_config = 3;
|
||||||
|
tdd_config_s = 0;
|
||||||
|
prefix_type = "NORMAL";
|
||||||
|
eutra_band = 7;
|
||||||
|
downlink_frequency = 2680000000L;
|
||||||
|
uplink_frequency_offset = -120000000;
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 25;
|
||||||
|
Nid_cell_mbsfn = 0;
|
||||||
|
nb_antenna_ports = 1;
|
||||||
|
nb_antennas_tx = 1;
|
||||||
|
nb_antennas_rx = 1;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 125;
|
||||||
|
pbch_repetition = "FALSE";
|
||||||
|
prach_root = 0;
|
||||||
|
prach_config_index = 0;
|
||||||
|
prach_high_speed = "DISABLE";
|
||||||
|
prach_zero_correlation = 1;
|
||||||
|
prach_freq_offset = 2;
|
||||||
|
pucch_delta_shift = 1;
|
||||||
|
pucch_nRB_CQI = 0;
|
||||||
|
pucch_nCS_AN = 0;
|
||||||
|
pucch_n1_AN = 0;
|
||||||
|
pdsch_referenceSignalPower = -27;
|
||||||
|
pdsch_p_b = 0;
|
||||||
|
pusch_n_SB = 1;
|
||||||
|
pusch_enable64QAM = "DISABLE";
|
||||||
|
pusch_hoppingMode = "interSubFrame";
|
||||||
|
pusch_hoppingOffset = 0;
|
||||||
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
|
pusch_groupAssignment = 0;
|
||||||
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
|
pusch_nDMRS1 = 1;
|
||||||
|
phich_duration = "NORMAL";
|
||||||
|
phich_resource = "ONESIXTH";
|
||||||
|
srs_enable = "DISABLE";
|
||||||
|
/* srs_BandwidthConfig =;
|
||||||
|
srs_SubframeConfig =;
|
||||||
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
|
pusch_p0_Nominal = -96;
|
||||||
|
pusch_alpha = "AL1";
|
||||||
|
pucch_p0_Nominal = -104;
|
||||||
|
msg3_delta_Preamble = 6;
|
||||||
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
ue_TransmissionMode = 1;
|
||||||
|
mbms_dedicated_serving_cell = "ENABLE"
|
||||||
|
|
||||||
|
//Parameters for SIB18
|
||||||
|
rxPool_sc_CP_Len = "normal";
|
||||||
|
rxPool_sc_Period = "sf40";
|
||||||
|
rxPool_data_CP_Len = "normal";
|
||||||
|
rxPool_ResourceConfig_prb_Num = 20;
|
||||||
|
rxPool_ResourceConfig_prb_Start = 5;
|
||||||
|
rxPool_ResourceConfig_prb_End = 44;
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
/* rxPool_dataHoppingConfig_hoppingParameter = 0;
|
||||||
|
rxPool_dataHoppingConfig_numSubbands = "ns1";
|
||||||
|
rxPool_dataHoppingConfig_rbOffset = 0;
|
||||||
|
rxPool_commTxResourceUC-ReqAllowed = "TRUE";
|
||||||
|
*/
|
||||||
|
// Parameters for SIB19
|
||||||
|
discRxPool_cp_Len = "normal"
|
||||||
|
discRxPool_discPeriod = "rf32"
|
||||||
|
discRxPool_numRetx = 1;
|
||||||
|
discRxPool_numRepetition = 2;
|
||||||
|
discRxPool_ResourceConfig_prb_Num = 5;
|
||||||
|
discRxPool_ResourceConfig_prb_Start = 3;
|
||||||
|
discRxPool_ResourceConfig_prb_End = 21;
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
enable_measurement_reports = "no";
|
||||||
|
|
||||||
|
///X2
|
||||||
|
enable_x2 = "no";
|
||||||
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
|
////////// MCE parameters:
|
||||||
|
target_mce_m2_ip_address = ( { ipv4 = "127.0.0.7";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
///M2
|
||||||
|
enable_enb_m2 = "yes";
|
||||||
|
|
||||||
|
|
||||||
|
mbms_configuration_data_list = (
|
||||||
|
{
|
||||||
|
mbsfn_sync_area = 0x0001;
|
||||||
|
mbms_service_area_list=(
|
||||||
|
{
|
||||||
|
mbms_service_area=0x0001;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_M2C = "127.0.0.2/24";
|
||||||
|
ENB_PORT_FOR_M2C = 36443; # Spec 36443
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
phy_test_mode = 0;
|
||||||
|
puSch10xSnr = 200;
|
||||||
|
puCch10xSnr = 200;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MCEs = (
|
||||||
|
{
|
||||||
|
MCE_ID = 0xe00;
|
||||||
|
|
||||||
|
MCE_name = "MCE-Vicomtech-LTEBox";
|
||||||
|
|
||||||
|
//M2
|
||||||
|
enable_mce_m2 = "yes";
|
||||||
|
|
||||||
|
//M3
|
||||||
|
enable_mce_m3 = "yes";
|
||||||
|
|
||||||
|
target_mme_m3_ip_address = ( { ipv4 = "127.0.0.18";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
MCE_INTERFACE_NAME_FOR_M2_ENB = "lo";
|
||||||
|
MCE_IPV4_ADDRESS_FOR_M2C = "127.0.0.7/24";
|
||||||
|
MCE_PORT_FOR_M2C = 36443; # Spec 36443
|
||||||
|
|
||||||
|
MCE_INTERFACE_NAME_FOR_M3_MME = "lo";
|
||||||
|
MCE_IPV4_ADDRESS_FOR_M3C = "127.0.0.3/24";
|
||||||
|
MCE_PORT_FOR_M3C = 36444; # Spec 36444
|
||||||
|
};
|
||||||
|
|
||||||
|
plnm:
|
||||||
|
{
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 93;
|
||||||
|
mnc_length = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
mbms_sched_info :
|
||||||
|
{
|
||||||
|
mcch_update_time = 10;
|
||||||
|
mbms_area_config_list = (
|
||||||
|
{
|
||||||
|
common_sf_allocation_period = 1; #rf4(0) rf8(1) rf16(2) rf32(3) rf64(4) rf128(5) rf256(6)
|
||||||
|
mbms_area_id = 0;
|
||||||
|
pmch_config_list = (
|
||||||
|
{
|
||||||
|
allocated_sf_end=512;
|
||||||
|
data_mcs=15;
|
||||||
|
mch_scheduling_period = 0; #rf8(0) rf16(1) rf32(2) rf64(3) rf128(4) rf256(5) rf512(6) rf1024(7)
|
||||||
|
mbms_session_list = (
|
||||||
|
{
|
||||||
|
#plnm + service_id ->tmgi
|
||||||
|
plnm:
|
||||||
|
{
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 93;
|
||||||
|
mnc_length = 2;
|
||||||
|
}
|
||||||
|
service_id=0; #keep this allways as 0 (workaround for TUN if)
|
||||||
|
lcid=5; #this must be properly defined lcid:6+service:0 -> rab_id:5 //with new RLC set lcid either 4 or 5
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
mbms_sf_config_list = (
|
||||||
|
{
|
||||||
|
radioframe_allocation_period=0; #n1(0) n2(1) n4(2) n8(3) n16(4) n32(5)
|
||||||
|
radioframe_alloocation_offset=0;
|
||||||
|
num_frame="oneFrame";
|
||||||
|
subframe_allocation=57; #xx111001
|
||||||
|
//num_frame="fourFrame";
|
||||||
|
//subframe_allocation=14548987; #
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
mcch_config_per_mbsfn_area = (
|
||||||
|
{
|
||||||
|
mbsfn_area = 0;
|
||||||
|
pdcch_length = 1; #s1(0), s2(1)
|
||||||
|
repetition_period = 0; #rf32(0), rf64(1), rf128(2), rf256(3)
|
||||||
|
offset = 0;
|
||||||
|
modification_period = 0; #rf512(0; rf1024(1)
|
||||||
|
subframe_allocation_info = 32; #BITSTRING (6bits -> one frame) xx100000
|
||||||
|
mcs = 0; #n2(0), n7(1), n13(2), n19(3)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
#); #end mbms_scheduling_info
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MMEs = (
|
||||||
|
{
|
||||||
|
MME_ID = 0xe00;
|
||||||
|
|
||||||
|
MME_name = "MME-MBMS-Vicomtech-LTEBox";
|
||||||
|
|
||||||
|
//M3
|
||||||
|
enable_mme_m3 = "yes";
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
MME_INTERFACE_NAME_FOR_M3_MCE = "lo";
|
||||||
|
MME_IPV4_ADDRESS_FOR_M3C = "127.0.0.18/24";
|
||||||
|
MME_PORT_FOR_M3C = 36444; # Spec 36444
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 125;
|
||||||
|
eNB_instances = [0];
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_CONTROLLER :
|
||||||
|
{
|
||||||
|
FLEXRAN_ENABLED = "no";
|
||||||
|
FLEXRAN_INTERFACE_NAME = "ens3";
|
||||||
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
|
FLEXRAN_PORT = 2210;
|
||||||
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
|
//rfsimulator :
|
||||||
|
//{
|
||||||
|
//options = ("chanmod");
|
||||||
|
//modelname = "AWGN";
|
||||||
|
//};
|
||||||
|
|
||||||
@@ -102,6 +102,7 @@ eNBs =
|
|||||||
ue_TimersAndConstants_n310 = 20;
|
ue_TimersAndConstants_n310 = 20;
|
||||||
ue_TimersAndConstants_n311 = 1;
|
ue_TimersAndConstants_n311 = 1;
|
||||||
ue_TransmissionMode = 1;
|
ue_TransmissionMode = 1;
|
||||||
|
mbms_dedicated_serving_cell = "DISABLE"
|
||||||
|
|
||||||
//Parameters for SIB18
|
//Parameters for SIB18
|
||||||
rxPool_sc_CP_Len = "normal";
|
rxPool_sc_CP_Len = "normal";
|
||||||
@@ -295,8 +296,8 @@ MCEs = (
|
|||||||
pmch_config_list = (
|
pmch_config_list = (
|
||||||
{
|
{
|
||||||
allocated_sf_end=32;
|
allocated_sf_end=32;
|
||||||
data_mcs=14;
|
data_mcs=15;
|
||||||
mch_scheduling_period = 0; #rf8(0)
|
mch_scheduling_period = 0; #rf8(0) rf16(1) rf32(2) rf64(3) rf128(4) rf256(5) rf512(6) rf1024(7)
|
||||||
mbms_session_list = (
|
mbms_session_list = (
|
||||||
{
|
{
|
||||||
#plnm + service_id ->tmgi
|
#plnm + service_id ->tmgi
|
||||||
@@ -337,7 +338,7 @@ MCEs = (
|
|||||||
offset = 0;
|
offset = 0;
|
||||||
modification_period = 0; #rf512(0; rf1024(1)
|
modification_period = 0; #rf512(0; rf1024(1)
|
||||||
subframe_allocation_info = 32; #BITSTRING (6bits -> one frame) xx100000
|
subframe_allocation_info = 32; #BITSTRING (6bits -> one frame) xx100000
|
||||||
mcs = 1; #n2(0), n7(1), n13(2), n19(3)
|
mcs = 0; #n2(0), n7(1), n13(2), n19(3)
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -416,3 +417,10 @@ NETWORK_CONTROLLER :
|
|||||||
rrc_log_level ="info";
|
rrc_log_level ="info";
|
||||||
rrc_log_verbosity ="medium";
|
rrc_log_verbosity ="medium";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//rfsimulator :
|
||||||
|
//{
|
||||||
|
//options = ("chanmod");
|
||||||
|
//modelname = "AWGN";
|
||||||
|
//};
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ memleak:openair2/UTIL/OMG/omg_hashtable.c
|
|||||||
// _emm_as_encode function creates the encoded buffer
|
// _emm_as_encode function creates the encoded buffer
|
||||||
//
|
//
|
||||||
memleak:openair3/NAS/UE/EMM/SAP/emm_as.c
|
memleak:openair3/NAS/UE/EMM/SAP/emm_as.c
|
||||||
|
memleak:openair1/PHY/INIT/nr_init_ue.c
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//*****************************************************************************
|
//*****************************************************************************
|
||||||
// section for files not used in oai exec's included in CI.
|
// section for files not used in oai exec's included in CI.
|
||||||
@@ -82,6 +83,10 @@ nullPointer:common/utils/T/tracer/multi.c:265
|
|||||||
// the tests
|
// the tests
|
||||||
arrayIndexOutOfBounds:openair2/LAYER2/rlc_v2/tests/test.c:401
|
arrayIndexOutOfBounds:openair2/LAYER2/rlc_v2/tests/test.c:401
|
||||||
//
|
//
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// cppcheck does not understand the different lengths of arrays
|
||||||
|
arrayIndexOutOfBounds:openair1/SIMULATION/TOOLS/random_channel.c:705
|
||||||
|
arrayIndexOutOfBounds:openair1/SIMULATION/TOOLS/random_channel.c:706
|
||||||
//*****************************************************************************
|
//*****************************************************************************
|
||||||
//
|
//
|
||||||
// True problems we don't know how to fix, Suppression is commented out,
|
// True problems we don't know how to fix, Suppression is commented out,
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ Last point, this documentation is valid for all CI-supported branches:
|
|||||||
|
|
||||||
* `master`
|
* `master`
|
||||||
* `develop`
|
* `develop`
|
||||||
* `develop-nr`
|
|
||||||
|
|
||||||
But the feature set may not be aligned. **The principles still apply.**
|
But the feature set may not be aligned. **The principles still apply.**
|
||||||
|
|
||||||
|
|||||||
@@ -66,38 +66,6 @@ class EPCManagement():
|
|||||||
self.MmeIPAddress = ''
|
self.MmeIPAddress = ''
|
||||||
self.containerPrefix = 'prod'
|
self.containerPrefix = 'prod'
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
# Setter and Getters on Public Members
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
|
|
||||||
def SetIPAddress(self, ipaddress):
|
|
||||||
self.IPAddress = ipaddress
|
|
||||||
def GetIPAddress(self):
|
|
||||||
return self.IPAddress
|
|
||||||
def SetUserName(self, username):
|
|
||||||
self.UserName = username
|
|
||||||
def GetUserName(self):
|
|
||||||
return self.UserName
|
|
||||||
def SetPassword(self, password):
|
|
||||||
self.Password = password
|
|
||||||
def GetPassword(self):
|
|
||||||
return self.Password
|
|
||||||
def SetSourceCodePath(self, sourcecodepath):
|
|
||||||
self.SourceCodePath = sourcecodepath
|
|
||||||
def GetSourceCodePath(self):
|
|
||||||
return self.SourceCodePath
|
|
||||||
def SetType(self, kind):
|
|
||||||
self.Type = kind
|
|
||||||
def GetType(self):
|
|
||||||
return self.Type
|
|
||||||
def SetHtmlObj(self, obj):
|
|
||||||
self.htmlObj = obj
|
|
||||||
def SetTestCase_id(self, idx):
|
|
||||||
self.testCase_id = idx
|
|
||||||
def GetMmeIPAddress(self):
|
|
||||||
return self.MmeIPAddress
|
|
||||||
def SetContainerPrefix(self, prefix):
|
|
||||||
self.containerPrefix = prefix
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# EPC management functions
|
# EPC management functions
|
||||||
|
|||||||
+3
-62
@@ -82,73 +82,14 @@ class HTMLManagement():
|
|||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# Setters and Getters
|
# Setters and Getters
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
def SethtmlUEFailureMsg(self,huefa):
|
|
||||||
self.htmlUEFailureMsg = huefa
|
|
||||||
def GethtmlUEFailureMsg(self):
|
|
||||||
return self.htmlUEFailureMsg
|
|
||||||
def SetHmleNBFailureMsg(self, msg):
|
|
||||||
self.htmleNBFailureMsg = msg
|
|
||||||
|
|
||||||
def Setdesc(self, dsc):
|
|
||||||
self.desc = dsc
|
|
||||||
|
|
||||||
def SetstartTime(self, sttime):
|
|
||||||
self.startTime = sttime
|
|
||||||
|
|
||||||
def SettestCase_id(self, tcid):
|
|
||||||
self.testCase_id = tcid
|
|
||||||
def GettestCase_id(self):
|
|
||||||
return self.testCase_id
|
|
||||||
|
|
||||||
def SetranRepository(self, repository):
|
|
||||||
self.ranRepository = repository
|
|
||||||
def SetranAllowMerge(self, merge):
|
|
||||||
self.ranAllowMerge = merge
|
|
||||||
def SetranBranch(self, branch):
|
|
||||||
self.ranBranch = branch
|
|
||||||
def SetranCommitID(self, commitid):
|
|
||||||
self.ranCommitID = commitid
|
|
||||||
def SetranTargetBranch(self, tbranch):
|
|
||||||
self.ranTargetBranch = tbranch
|
|
||||||
|
|
||||||
def SethtmlUEConnected(self, nbUEs):
|
def SethtmlUEConnected(self, nbUEs):
|
||||||
if nbUEs > 0:
|
if nbUEs > 0:
|
||||||
self.htmlUEConnected = nbUEs
|
self.htmlUEConnected = nbUEs
|
||||||
else:
|
else:
|
||||||
self.htmlUEConnected = 1
|
self.htmlUEConnected = 1
|
||||||
def SethtmlNb_Smartphones(self, nbUEs):
|
|
||||||
self.htmlNb_Smartphones = nbUEs
|
|
||||||
def SethtmlNb_CATM_Modules(self, nbUEs):
|
|
||||||
self.htmlNb_CATM_Modules = nbUEs
|
|
||||||
|
|
||||||
def SetnbTestXMLfiles(self, nb):
|
|
||||||
self.nbTestXMLfiles = nb
|
|
||||||
def GetnbTestXMLfiles(self):
|
|
||||||
return self.nbTestXMLfiles
|
|
||||||
|
|
||||||
def SettestXMLfiles(self, xmlFile):
|
|
||||||
self.testXMLfiles.append(xmlFile)
|
|
||||||
def SethtmlTabRefs(self, tabRef):
|
|
||||||
self.htmlTabRefs.append(tabRef)
|
|
||||||
def SethtmlTabNames(self, tabName):
|
|
||||||
self.htmlTabNames.append(tabName)
|
|
||||||
def SethtmlTabIcons(self, tabIcon):
|
|
||||||
self.htmlTabIcons.append(tabIcon)
|
|
||||||
|
|
||||||
def SetOsVersion(self, version, idx):
|
|
||||||
self.OsVersion[idx] = version
|
|
||||||
def SetKernelVersion(self, version, idx):
|
|
||||||
self.KernelVersion[idx] = version
|
|
||||||
def SetUhdVersion(self, version, idx):
|
|
||||||
self.UhdVersion[idx] = version
|
|
||||||
def SetUsrpBoard(self, version, idx):
|
|
||||||
self.UsrpBoard[idx] = version
|
|
||||||
def SetCpuNb(self, nb, idx):
|
|
||||||
self.CpuNb[idx] = nb
|
|
||||||
def SetCpuModel(self, model, idx):
|
|
||||||
self.CpuModel[idx] = model
|
|
||||||
def SetCpuMHz(self, freq, idx):
|
|
||||||
self.CpuMHz[idx] = freq
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# HTML structure creation functions
|
# HTML structure creation functions
|
||||||
@@ -326,7 +267,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')
|
||||||
|
|||||||
+482
-492
File diff suppressed because it is too large
Load Diff
@@ -186,7 +186,7 @@ function variant__v3__phy_sim {
|
|||||||
BUILD_OPTIONS="--phy_simulators"
|
BUILD_OPTIONS="--phy_simulators"
|
||||||
VM_MEMORY=8192
|
VM_MEMORY=8192
|
||||||
VM_DISK=20
|
VM_DISK=20
|
||||||
RUN_OPTIONS="./run_exec_autotests.bash -g \"01510* 015111\" -q -np -b"
|
RUN_OPTIONS="./run_exec_autotests.bash -g \"01510* 015111 015112\" -q -np -b"
|
||||||
}
|
}
|
||||||
|
|
||||||
function variant__v4__cppcheck {
|
function variant__v4__cppcheck {
|
||||||
@@ -197,7 +197,7 @@ function variant__v4__cppcheck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function variant__v5__gnb_usrp {
|
function variant__v5__gnb_usrp {
|
||||||
VM_MEMORY=8192
|
VM_MEMORY=10240
|
||||||
VM_CPU=8
|
VM_CPU=8
|
||||||
NB_PATTERN_FILES=9
|
NB_PATTERN_FILES=9
|
||||||
BUILD_OPTIONS="--gNB -w USRP"
|
BUILD_OPTIONS="--gNB -w USRP"
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
eNBRepository : b
|
||||||
|
ranRepository : c
|
||||||
|
eNB_AllowMerge :
|
||||||
|
ranAllowMerge :
|
||||||
|
eNBBranch : f
|
||||||
|
ranBranch : g
|
||||||
|
eNBCommitID :
|
||||||
|
ranCommitID : i
|
||||||
|
eNBTargetBranch : j
|
||||||
|
ranTargetBranch : k
|
||||||
|
|
||||||
|
nodes :
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 001.1.1
|
||||||
|
UserName : toto
|
||||||
|
Password : qwe
|
||||||
|
SourceCodePath : l
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 002.2.2
|
||||||
|
UserName : tata
|
||||||
|
Password : asd
|
||||||
|
SourceCodePath : m
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 003.3.3
|
||||||
|
UserName : titi
|
||||||
|
Password : zxc
|
||||||
|
SourceCodePath : n
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 004.4.4
|
||||||
|
UserName : caca
|
||||||
|
Password : pepe
|
||||||
|
SourceCodePath : o
|
||||||
|
|
||||||
|
EPCIPAddress : p
|
||||||
|
EPCUserName : q
|
||||||
|
EPCPassword : r
|
||||||
|
EPCSourceCodePath : s
|
||||||
|
EPCType : t
|
||||||
|
EPCContainerPrefix : u
|
||||||
|
|
||||||
|
ADBIPAddress : v
|
||||||
|
ADBUserName : w
|
||||||
|
ADBType : x
|
||||||
|
ADBPassword : y
|
||||||
|
|
||||||
|
XMLTestFile : z
|
||||||
|
|
||||||
|
UEIPAddress : qqq
|
||||||
|
UEUserName : www
|
||||||
|
UEPassword : eee
|
||||||
|
UESourceCodePath : yyy
|
||||||
|
|
||||||
|
finalStatus : bbb
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
eNBRepository : b
|
||||||
|
ranRepository : c
|
||||||
|
eNB_AllowMerge :
|
||||||
|
ranAllowMerge :
|
||||||
|
eNBBranch : f
|
||||||
|
ranBranch : g
|
||||||
|
eNBCommitID :
|
||||||
|
ranCommitID : i
|
||||||
|
eNBTargetBranch : j
|
||||||
|
ranTargetBranch : k
|
||||||
|
|
||||||
|
|
||||||
|
RAN:
|
||||||
|
RAN_inst_0:
|
||||||
|
name : RAN_1
|
||||||
|
nodes :
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 001.1.1
|
||||||
|
UserName : toto
|
||||||
|
Password : qwe
|
||||||
|
SourceCodePath : l
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 002.2.2
|
||||||
|
UserName : tata
|
||||||
|
Password : asd
|
||||||
|
SourceCodePath : m
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 003.3.3
|
||||||
|
UserName : titi
|
||||||
|
Password : zxc
|
||||||
|
SourceCodePath : n
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 004.4.4
|
||||||
|
UserName : caca
|
||||||
|
Password : pepe
|
||||||
|
SourceCodePath : o
|
||||||
|
RAN_inst_1:
|
||||||
|
name : RAN_2
|
||||||
|
nodes :
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 101.1.1
|
||||||
|
UserName : toto
|
||||||
|
Password : qwe
|
||||||
|
SourceCodePath : l
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 102.2.2
|
||||||
|
UserName : zaza
|
||||||
|
Password : asd
|
||||||
|
SourceCodePath : m
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 103.3.3
|
||||||
|
UserName : zizi
|
||||||
|
Password : zxc
|
||||||
|
SourceCodePath : n
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 104.4.4
|
||||||
|
UserName : aaaa
|
||||||
|
Password : pepe
|
||||||
|
SourceCodePath : o
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EPC:
|
||||||
|
EPC_inst_0:
|
||||||
|
EPCIPAddress : p
|
||||||
|
EPCUserName : q
|
||||||
|
EPCPassword : r
|
||||||
|
EPCSourceCodePath : s
|
||||||
|
EPCType : t
|
||||||
|
EPCContainerPrefix : u
|
||||||
|
|
||||||
|
ADB:
|
||||||
|
ADBIPAddress : v
|
||||||
|
ADBUserName : w
|
||||||
|
ADBType : x
|
||||||
|
ADBPassword : y
|
||||||
|
|
||||||
|
|
||||||
|
UE:
|
||||||
|
UE_inst_0:
|
||||||
|
name : UE_1
|
||||||
|
type :
|
||||||
|
UEIPAddress : qqq
|
||||||
|
UEUserName : www
|
||||||
|
UEPassword : eee
|
||||||
|
UESourceCodePath : yyy
|
||||||
|
UE_inst_1:
|
||||||
|
name : UE_2
|
||||||
|
type :
|
||||||
|
UEIPAddress : bloblob
|
||||||
|
UEUserName : gwou
|
||||||
|
UEPassword : zebu
|
||||||
|
UESourceCodePath : pop
|
||||||
|
|
||||||
|
|
||||||
|
XMLTestFile : z
|
||||||
|
finalStatus : bbb
|
||||||
+138
-209
@@ -77,8 +77,8 @@ 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 = 0
|
||||||
self.eNB_serverId = ''
|
self.eNB_serverId = ''
|
||||||
self.eNBLogFiles = ['', '', '']
|
self.eNBLogFiles = ['', '', '']
|
||||||
self.eNBOptions = ['', '', '']
|
self.eNBOptions = ['', '', '']
|
||||||
@@ -91,140 +91,7 @@ class RANManagement():
|
|||||||
self.htmlObj = None
|
self.htmlObj = None
|
||||||
self.epcObj = None
|
self.epcObj = None
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
# Setters and Getters on Public members
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
|
|
||||||
def SetHtmlObj(self, obj):
|
|
||||||
self.htmlObj = obj
|
|
||||||
def SetEpcObj(self, obj):
|
|
||||||
self.epcObj = obj
|
|
||||||
|
|
||||||
def SetflexranCtrlInstalled(self,fxrctin):
|
|
||||||
self.flexranCtrlInstalled = fxrctin
|
|
||||||
def GetflexranCtrlInstalled(self):
|
|
||||||
return self.flexranCtrlInstalled
|
|
||||||
def SetflexranCtrlStarted(self,fxrctst):
|
|
||||||
self.flexranCtrlStarted = fxrctst
|
|
||||||
def GetflexranCtrlStarted(self):
|
|
||||||
return self.flexranCtrlStarted
|
|
||||||
def SetpStatus(self, pSt):
|
|
||||||
self.pStatus = pSt
|
|
||||||
def SetranRepository(self, repository):
|
|
||||||
self.ranRepository = repository
|
|
||||||
def GetranRepository(self):
|
|
||||||
return self.ranRepository
|
|
||||||
def SetranBranch(self, branch):
|
|
||||||
self.ranBranch = branch
|
|
||||||
def GetranBranch(self):
|
|
||||||
return self.ranBranch
|
|
||||||
def SetranCommitID(self, commitid):
|
|
||||||
self.ranCommitID = commitid
|
|
||||||
def GetranCommitID(self):
|
|
||||||
return self.ranCommitID
|
|
||||||
def SeteNB_serverId(self, enbsrvid):
|
|
||||||
self.eNB_serverId = enbsrvid
|
|
||||||
def GeteNB_serverId(self):
|
|
||||||
return self.eNB_serverId
|
|
||||||
def SeteNBIPAddress(self, enbip):
|
|
||||||
self.eNBIPAddress = enbip
|
|
||||||
def GeteNBIPAddress(self):
|
|
||||||
return self.eNBIPAddress
|
|
||||||
def SeteNBUserName(self, enbusr):
|
|
||||||
self.eNBUserName = enbusr
|
|
||||||
def GeteNBUserName(self):
|
|
||||||
return self.eNBUserName
|
|
||||||
def SeteNBPassword(self, enbpw):
|
|
||||||
self.eNBPassword = enbpw
|
|
||||||
def GeteNBPassword(self):
|
|
||||||
return self.eNBPassword
|
|
||||||
def SeteNBSourceCodePath(self, enbcodepath):
|
|
||||||
self.eNBSourceCodePath = enbcodepath
|
|
||||||
def GeteNBSourceCodePath(self):
|
|
||||||
return self.eNBSourceCodePath
|
|
||||||
def SetranAllowMerge(self, merge):
|
|
||||||
self.ranAllowMerge = merge
|
|
||||||
def GetranAllowMerge(self):
|
|
||||||
return self.ranAllowMerge
|
|
||||||
def SetranTargetBranch(self, tbranch):
|
|
||||||
self.ranTargetBranch = tbranch
|
|
||||||
def GetranTargetBranch(self):
|
|
||||||
return self.ranTargetBranch
|
|
||||||
def SetBuild_eNB_args(self, enbbuildarg):
|
|
||||||
self.Build_eNB_args = enbbuildarg
|
|
||||||
def GetBuild_eNB_args(self):
|
|
||||||
return self.Build_eNB_args
|
|
||||||
def SetInitialize_eNB_args(self, initenbarg):
|
|
||||||
self.Initialize_eNB_args = initenbarg
|
|
||||||
def GetInitialize_eNB_args(self):
|
|
||||||
return self.Initialize_eNB_args
|
|
||||||
def SetbackgroundBuild(self, bkbuild):
|
|
||||||
self.backgroundBuild = bkbuild
|
|
||||||
def GetbackgroundBuild(self):
|
|
||||||
return self.backgroundBuild
|
|
||||||
def SetbackgroundBuildTestId(self, bkbuildid):
|
|
||||||
self.backgroundBuildTestId = bkbuildid
|
|
||||||
def GetbackgroundBuildTestId(self):
|
|
||||||
return self.backgroundBuildTestId
|
|
||||||
def SetBuild_eNB_forced_workspace_cleanup(self, fcdwspclean):
|
|
||||||
self.Build_eNB_forced_workspace_cleanup = fcdwspclean
|
|
||||||
def GetBuild_eNB_forced_workspace_cleanup(self):
|
|
||||||
return self.Build_eNB_forced_workspace_cleanup
|
|
||||||
def Setair_interface(self, airif):
|
|
||||||
self.air_interface = airif
|
|
||||||
def Getair_interface(self):
|
|
||||||
return self.air_interface
|
|
||||||
def SeteNB_instance(self, enbinst):
|
|
||||||
self.eNB_instance = enbinst
|
|
||||||
def GeteNB_instance(self):
|
|
||||||
return self.eNB_instance
|
|
||||||
|
|
||||||
def SeteNBLogFile(self, enblog, idx):
|
|
||||||
self.eNBLogFiles[idx] = enblog
|
|
||||||
def GeteNBLogFile(self, idx):
|
|
||||||
return self.eNBLogFiles[idx]
|
|
||||||
|
|
||||||
def GeteNBmbmsEnable(self, idx):
|
|
||||||
return self.eNBmbmsEnables[idx]
|
|
||||||
|
|
||||||
def SeteNB1IPAddress(self,enb1ip):
|
|
||||||
self.eNB1IPAddress = enb1ip
|
|
||||||
def GeteNB1IPAddress(self):
|
|
||||||
return self.eNB1IPAddress
|
|
||||||
def SeteNB1UserName(self, enb1usr):
|
|
||||||
self.eNB1UserName = enb1usr
|
|
||||||
def GeteNB1UserName(self):
|
|
||||||
return self.eNB1UserName
|
|
||||||
def SeteNB1Password(self, enb1pw):
|
|
||||||
self.eNB1Password = enb1pw
|
|
||||||
def GeteNB1Password(self):
|
|
||||||
return self.eNB1Password
|
|
||||||
def SeteNB1SourceCodePath(self, enb1codepath):
|
|
||||||
self.eNB1SourceCodePath = enb1codepath
|
|
||||||
def GeteNB1SourceCodePath(self):
|
|
||||||
return self.eNB1SourceCodePath
|
|
||||||
|
|
||||||
def SeteNB2IPAddress(self, enb2ip):
|
|
||||||
self.eNB2IPAddress = enb2ip
|
|
||||||
def GeteNB2IPAddress(self):
|
|
||||||
return self.eNB2IPAddress
|
|
||||||
def SeteNB2UserName(self, enb2usr):
|
|
||||||
self.eNB2UserName = enb2usr
|
|
||||||
def GeteNB2UserName(self):
|
|
||||||
return self.eNB2UserName
|
|
||||||
def SeteNB2Password(self, enb2pw):
|
|
||||||
self.eNB2Password = enb2pw
|
|
||||||
def GeteNB2Password(self):
|
|
||||||
return self.eNB2Password
|
|
||||||
def SeteNB2SourceCodePath(self, enb2codepath):
|
|
||||||
self.eNB2SourceCodePath = enb2codepath
|
|
||||||
def GeteNB2SourceCodePath(self):
|
|
||||||
return self.eNB2SourceCodePath
|
|
||||||
|
|
||||||
def SetprematureExit(self, premex):
|
|
||||||
self.prematureExit = premex
|
|
||||||
def GetprematureExit(self):
|
|
||||||
return self.prematureExit
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# RAN management functions
|
# RAN management functions
|
||||||
@@ -254,17 +121,23 @@ 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[self.eNB_instance] = 'ocp-enb'
|
||||||
else:
|
else:
|
||||||
self.air_interface = 'lte'
|
result = re.search('--gNB', self.Build_eNB_args)
|
||||||
|
if result is not None:
|
||||||
|
self.air_interface[self.eNB_instance] = 'nr-softmodem'
|
||||||
|
else:
|
||||||
|
self.air_interface[self.eNB_instance] = '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)
|
||||||
if self.htmlObj is not None:
|
if self.htmlObj is not None:
|
||||||
self.testCase_id = self.htmlObj.GettestCase_id()
|
self.testCase_id = self.htmlObj.testCase_id
|
||||||
else:
|
else:
|
||||||
self.testCase_id = '000000'
|
self.testCase_id = '000000'
|
||||||
# on RedHat/CentOS .git extension is mandatory
|
# on RedHat/CentOS .git extension is mandatory
|
||||||
@@ -332,7 +205,8 @@ class RANManagement():
|
|||||||
if self.backgroundBuild:
|
if self.backgroundBuild:
|
||||||
mySSH.command('echo "./build_oai ' + self.Build_eNB_args + '" > ./my-lte-softmodem-build.sh', '\$', 5)
|
mySSH.command('echo "./build_oai ' + self.Build_eNB_args + '" > ./my-lte-softmodem-build.sh', '\$', 5)
|
||||||
mySSH.command('chmod 775 ./my-lte-softmodem-build.sh', '\$', 5)
|
mySSH.command('chmod 775 ./my-lte-softmodem-build.sh', '\$', 5)
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S -E daemon --inherit --unsafe --name=build_enb_daemon --chdir=' + lSourcePath + '/cmake_targets -o ' + lSourcePath + '/cmake_targets/compile_oai_enb.log ./my-lte-softmodem-build.sh', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S ls', '\$', 5)
|
||||||
|
mySSH.command('echo $USER; nohup sudo -E ./my-lte-softmodem-build.sh' + ' > ' + lSourcePath + '/cmake_targets/compile_oai_enb.log ' + ' 2>&1 &', lUserName, 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
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)
|
||||||
@@ -366,7 +240,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
|
||||||
@@ -378,21 +252,21 @@ 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.testCase_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:
|
logging.info('CHECK Build with IP='+lIpAddr+' SourcePath='+lSourcePath)
|
||||||
nodeB_prefix = 'e'
|
result = re.search(self.air_interface[self.eNB_instance], mySSH.getBefore())
|
||||||
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 +278,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)
|
||||||
@@ -420,18 +296,20 @@ class RANManagement():
|
|||||||
os.remove('./tmp_build' + testcaseId + '.zip')
|
os.remove('./tmp_build' + testcaseId + '.zip')
|
||||||
mySSH.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
|
mySSH.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
|
||||||
mySSH.command('cd ' + self.eNBSourceCodePath + '/cmake_targets', '\$', 5)
|
mySSH.command('cd ' + self.eNBSourceCodePath + '/cmake_targets', '\$', 5)
|
||||||
mySSH.command('unzip -qq -DD tmp_build' + testcaseId + '.zip', '\$', 5)
|
#-qq quiet / -u update orcreate files
|
||||||
|
mySSH.command('unzip -u -qq -DD tmp_build' + testcaseId + '.zip', '\$', 5)
|
||||||
mySSH.command('rm -f tmp_build' + testcaseId + '.zip', '\$', 5)
|
mySSH.command('rm -f tmp_build' + testcaseId + '.zip', '\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
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[self.eNB_instance] + ' 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[self.eNB_instance] + ' 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)
|
||||||
@@ -458,22 +336,22 @@ class RANManagement():
|
|||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
|
|
||||||
if self.htmlObj is not None:
|
if self.htmlObj is not None:
|
||||||
self.testCase_id = self.htmlObj.GettestCase_id()
|
self.testCase_id = self.htmlObj.testCase_id
|
||||||
else:
|
else:
|
||||||
self.testCase_id = '000000'
|
self.testCase_id = '000000'
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
|
|
||||||
if (self.pStatus < 0):
|
if (self.pStatus < 0):
|
||||||
if self.htmlObj is not None:
|
if self.htmlObj is not None:
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Initialize_eNB_args, 'KO', self.pStatus)
|
self.htmlObj.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' ' + self.Initialize_eNB_args, 'KO', self.pStatus)
|
||||||
self.htmlObj.CreateHtmlTabFooter(False)
|
self.htmlObj.CreateHtmlTabFooter(False)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
# If tracer options is on, running tshark on EPC side and capture traffic b/ EPC and eNB
|
# If tracer options is on, running tshark on EPC side and capture traffic b/ EPC and eNB
|
||||||
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
||||||
if (result is not None) and (self.epcObj is not None):
|
if (result is not None) and (self.epcObj is not None):
|
||||||
localEpcIpAddr = self.epcObj.GetIPAddress()
|
localEpcIpAddr = self.epcObj.IPAddress
|
||||||
localEpcUserName = self.epcObj.GetUserName()
|
localEpcUserName = self.epcObj.UserName
|
||||||
localEpcPassword = self.epcObj.GetPassword()
|
localEpcPassword = self.epcObj.Password
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||||
mySSH.command('ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"', '\$', 5)
|
mySSH.command('ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"', '\$', 5)
|
||||||
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
|
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
|
||||||
@@ -522,12 +400,14 @@ class RANManagement():
|
|||||||
# Make a copy and adapt to EPC / eNB IP addresses
|
# Make a copy and adapt to EPC / eNB IP addresses
|
||||||
mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5)
|
mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5)
|
||||||
if self.epcObj is not None:
|
if self.epcObj is not None:
|
||||||
localMmeIpAddr = self.epcObj.GetMmeIPAddress()
|
localMmeIpAddr = self.epcObj.MmeIPAddress
|
||||||
mySSH.command('sed -i -e \'s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
mySSH.command('sed -i -e \'s/CI_ENB_IP_ADDR/' + lIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/CI_ENB_IP_ADDR/' + lIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
|
mySSH.command('sed -i -e \'s/CI_GNB_IP_ADDR/' + lIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
mySSH.command('sed -i -e \'s/CI_RCC_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/CI_RCC_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
mySSH.command('sed -i -e \'s/CI_RRU1_IP_ADDR/' + self.eNB1IPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/CI_RRU1_IP_ADDR/' + self.eNB1IPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
mySSH.command('sed -i -e \'s/CI_RRU2_IP_ADDR/' + self.eNB2IPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/CI_RRU2_IP_ADDR/' + self.eNB2IPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
|
mySSH.command('sed -i -e \'s/CI_FR1_CTL_ENB_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
if self.flexranCtrlInstalled and self.flexranCtrlStarted:
|
if self.flexranCtrlInstalled and self.flexranCtrlStarted:
|
||||||
mySSH.command('sed -i -e \'s/FLEXRAN_ENABLED.*;/FLEXRAN_ENABLED = "yes";/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/FLEXRAN_ENABLED.*;/FLEXRAN_ENABLED = "yes";/\' ' + ci_full_config_file, '\$', 2);
|
||||||
else:
|
else:
|
||||||
@@ -546,15 +426,14 @@ 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)
|
if self.air_interface == 'nr':
|
||||||
|
mySSH.command('if [ -e rbconfig.raw ]; then echo ' + lPassWord + ' | sudo -S rm rbconfig.raw; fi', '\$', 5)
|
||||||
|
mySSH.command('if [ -e reconfig.raw ]; then echo ' + lPassWord + ' | sudo -S rm reconfig.raw; fi', '\$', 5)
|
||||||
|
# NOTE: WE SHALL do a check if the executable is present (in case build went wrong)
|
||||||
|
mySSH.command('echo "ulimit -c unlimited && ./ran_build/build/' + self.air_interface[self.eNB_instance] + ' -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('echo $USER; nohup sudo -E ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh > ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log 2>&1 &', lUserName, 10)
|
||||||
result = re.search('CentOS Linux 7', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('echo $USER; nohup sudo ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh > ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log 2>&1 &', lUserName, 10)
|
|
||||||
else:
|
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S -E daemon --inherit --unsafe --name=enb' + str(self.eNB_instance) + '_daemon --chdir=' + lSourcePath + '/cmake_targets -o ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
|
||||||
self.eNBLogFiles[int(self.eNB_instance)] = 'enb_' + self.testCase_id + '.log'
|
self.eNBLogFiles[int(self.eNB_instance)] = 'enb_' + self.testCase_id + '.log'
|
||||||
if extra_options != '':
|
if extra_options != '':
|
||||||
self.eNBOptions[int(self.eNB_instance)] = extra_options
|
self.eNBOptions[int(self.eNB_instance)] = extra_options
|
||||||
@@ -571,15 +450,15 @@ class RANManagement():
|
|||||||
mySSH.command('killall --signal SIGKILL record', '\$', 5)
|
mySSH.command('killall --signal SIGKILL record', '\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
doLoop = False
|
doLoop = False
|
||||||
logging.error('\u001B[1;37;41m eNB logging system did not show got sync! \u001B[0m')
|
logging.error('\u001B[1;37;41m eNB/gNB/ocp-eNB logging system did not show got sync! \u001B[0m')
|
||||||
if self.htmlObj is not None:
|
if self.htmlObj is not None:
|
||||||
self.htmlObj.CreateHtmlTestRow('-O ' + config_file + extra_options, 'KO', CONST.ALL_PROCESSES_OK)
|
self.htmlObj.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
# In case of T tracer recording, we need to kill tshark on EPC side
|
# In case of T tracer recording, we need to kill tshark on EPC side
|
||||||
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
||||||
if (result is not None) and (self.epcObj is not None):
|
if (result is not None) and (self.epcObj is not None):
|
||||||
localEpcIpAddr = self.epcObj.GetIPAddress()
|
localEpcIpAddr = self.epcObj.IPAddress
|
||||||
localEpcUserName = self.epcObj.GetUserName()
|
localEpcUserName = self.epcObj.UserName
|
||||||
localEpcPassword = self.epcObj.GetPassword()
|
localEpcPassword = self.epcObj.Password
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||||
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
||||||
@@ -607,7 +486,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())
|
||||||
@@ -627,8 +510,8 @@ class RANManagement():
|
|||||||
|
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if self.htmlObj is not None:
|
if self.htmlObj is not None:
|
||||||
self.htmlObj.CreateHtmlTestRow('-O ' + config_file + extra_options, 'OK', CONST.ALL_PROCESSES_OK)
|
self.htmlObj.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
logging.debug('\u001B[1m Initialize eNB Completed\u001B[0m')
|
logging.debug('\u001B[1m Initialize eNB/gNB/ocp-eNB Completed\u001B[0m')
|
||||||
|
|
||||||
def CheckeNBProcess(self, status_queue):
|
def CheckeNBProcess(self, status_queue):
|
||||||
try:
|
try:
|
||||||
@@ -651,8 +534,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[self.eNB_instance] + ' | grep -v grep', '\$', 5)
|
||||||
result = re.search(self.air_interface + '-softmodem', mySSH.getBefore())
|
result = re.search(self.air_interface[self.eNB_instance], 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,29 +567,28 @@ 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[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == '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 killall --signal SIGINT -r .*-softmodem ocp-enb || true', '\$', 5)
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGINT -r .*-softmodem || 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()
|
||||||
# If tracer options is on, stopping tshark on EPC side
|
# If tracer options is on, stopping tshark on EPC side
|
||||||
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
||||||
if (result is not None) and (self.epcObj is not None):
|
if (result is not None) and (self.epcObj is not None):
|
||||||
localEpcIpAddr = self.epcObj.GetIPAddress()
|
localEpcIpAddr = self.epcObj.IPAddress
|
||||||
localEpcUserName = self.epcObj.GetUserName()
|
localEpcUserName = self.epcObj.UserName
|
||||||
localEpcPassword = self.epcObj.GetPassword()
|
localEpcPassword = self.epcObj.Password
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||||
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
||||||
@@ -745,7 +627,7 @@ class RANManagement():
|
|||||||
if (copyin_res == -1):
|
if (copyin_res == -1):
|
||||||
logging.debug('\u001B[1;37;41m Could not copy ' + nodeB_prefix + 'NB logfile to analyze it! \u001B[0m')
|
logging.debug('\u001B[1;37;41m Could not copy ' + nodeB_prefix + 'NB logfile to analyze it! \u001B[0m')
|
||||||
if self.htmlObj is not None:
|
if self.htmlObj is not None:
|
||||||
self.htmlObj.SetHmleNBFailureMsg('Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!')
|
self.htmlObj.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!'
|
||||||
self.htmlObj.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
|
self.htmlObj.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
|
||||||
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
||||||
return
|
return
|
||||||
@@ -774,7 +656,7 @@ class RANManagement():
|
|||||||
mySSH.command('cd ' + self.eNBSourceCodePath, '\$', 5)
|
mySSH.command('cd ' + self.eNBSourceCodePath, '\$', 5)
|
||||||
mySSH.command('cd cmake_targets', '\$', 5)
|
mySSH.command('cd cmake_targets', '\$', 5)
|
||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm -f enb.log.zip', '\$', 5)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm -f enb.log.zip', '\$', 5)
|
||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip enb*.log core* enb_*record.raw enb_*.pcap enb_*txt', '\$', 60)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip enb*.log core* enb_*record.raw enb_*.pcap enb_*txt physim_*.log', '\$', 60)
|
||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap enb_*txt', '\$', 5)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap enb_*txt', '\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|
||||||
@@ -800,8 +682,11 @@ class RANManagement():
|
|||||||
uciStatMsgCount = 0
|
uciStatMsgCount = 0
|
||||||
pdcpFailure = 0
|
pdcpFailure = 0
|
||||||
ulschFailure = 0
|
ulschFailure = 0
|
||||||
|
ulschAllocateCCEerror = 0
|
||||||
|
uplinkSegmentsAborted = 0
|
||||||
ulschReceiveOK = 0
|
ulschReceiveOK = 0
|
||||||
gnbRxTxWakeUpFailure = 0
|
gnbRxTxWakeUpFailure = 0
|
||||||
|
gnbTxWriteThreadEnabled = False
|
||||||
cdrxActivationMessageCount = 0
|
cdrxActivationMessageCount = 0
|
||||||
dropNotEnoughRBs = 0
|
dropNotEnoughRBs = 0
|
||||||
mbmsRequestMsg = 0
|
mbmsRequestMsg = 0
|
||||||
@@ -812,7 +697,31 @@ 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
|
||||||
|
# Runtime statistics
|
||||||
|
runTime = ''
|
||||||
|
userTime = ''
|
||||||
|
systemTime = ''
|
||||||
|
maxPhyMemUsage = ''
|
||||||
|
nbContextSwitches = ''
|
||||||
for line in enb_log_file.readlines():
|
for line in enb_log_file.readlines():
|
||||||
|
# Runtime statistics
|
||||||
|
result = re.search('Run time:' ,str(line))
|
||||||
|
if result is not None:
|
||||||
|
runTime = str(line).strip()
|
||||||
|
if runTime != '':
|
||||||
|
result = re.search('Time executing user inst', str(line))
|
||||||
|
if result is not None:
|
||||||
|
userTime = 'to be decoded - 1'
|
||||||
|
result = re.search('Time executing system inst', str(line))
|
||||||
|
if result is not None:
|
||||||
|
systemTime = 'to be decoded - 2'
|
||||||
|
result = re.search('Max. Phy. memory usage:', str(line))
|
||||||
|
if result is not None:
|
||||||
|
maxPhyMemUsage = 'to be decoded - 3'
|
||||||
|
result = re.search('Number of context switch.*process origin', str(line))
|
||||||
|
if result is not None:
|
||||||
|
nbContextSwitches = 'to be decoded - 4'
|
||||||
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))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
@@ -885,8 +794,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
|
||||||
@@ -914,9 +822,18 @@ class RANManagement():
|
|||||||
result = re.search('could not wakeup gNB rxtx process', str(line))
|
result = re.search('could not wakeup gNB rxtx process', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
gnbRxTxWakeUpFailure += 1
|
gnbRxTxWakeUpFailure += 1
|
||||||
|
result = re.search('tx write thread ready', str(line))
|
||||||
|
if result is not None:
|
||||||
|
gnbTxWriteThreadEnabled = True
|
||||||
result = re.search('ULSCH in error in round|ULSCH 0 in error', str(line))
|
result = re.search('ULSCH in error in round|ULSCH 0 in error', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
ulschFailure += 1
|
ulschFailure += 1
|
||||||
|
result = re.search('ERROR ALLOCATING CCEs', str(line))
|
||||||
|
if result is not None:
|
||||||
|
ulschAllocateCCEerror += 1
|
||||||
|
result = re.search('uplink segment error.*aborted [1-9] segments', str(line))
|
||||||
|
if result is not None:
|
||||||
|
uplinkSegmentsAborted += 1
|
||||||
result = re.search('ULSCH received ok', str(line))
|
result = re.search('ULSCH received ok', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
ulschReceiveOK += 1
|
ulschReceiveOK += 1
|
||||||
@@ -935,11 +852,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[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == '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[self.eNB_instance] == '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')
|
||||||
@@ -948,6 +865,10 @@ class RANManagement():
|
|||||||
statMsg = nodeB_prefix + 'NB showed ' + str(gnbRxTxWakeUpFailure) + ' "could not wakeup gNB rxtx process" message(s)'
|
statMsg = nodeB_prefix + 'NB showed ' + str(gnbRxTxWakeUpFailure) + ' "could not wakeup gNB rxtx process" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += statMsg + '\n'
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
|
if gnbTxWriteThreadEnabled:
|
||||||
|
statMsg = nodeB_prefix + 'NB ran with TX Write thread enabled'
|
||||||
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
if uciStatMsgCount > 0:
|
if uciStatMsgCount > 0:
|
||||||
statMsg = nodeB_prefix + 'NB showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
statMsg = nodeB_prefix + 'NB showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
@@ -960,6 +881,14 @@ class RANManagement():
|
|||||||
statMsg = nodeB_prefix + 'NB showed ' + str(ulschFailure) + ' "ULSCH in error in round" message(s)'
|
statMsg = nodeB_prefix + 'NB showed ' + str(ulschFailure) + ' "ULSCH in error in round" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += statMsg + '\n'
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
|
if ulschAllocateCCEerror > 0:
|
||||||
|
statMsg = nodeB_prefix + 'NB showed ' + str(ulschAllocateCCEerror) + ' "eNB_dlsch_ulsch_scheduler(); ERROR ALLOCATING CCEs" message(s)'
|
||||||
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
|
if uplinkSegmentsAborted > 0:
|
||||||
|
statMsg = nodeB_prefix + 'NB showed ' + str(uplinkSegmentsAborted) + ' "uplink segment error 0/2, aborted * segments" message(s)'
|
||||||
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
if dropNotEnoughRBs > 0:
|
if dropNotEnoughRBs > 0:
|
||||||
statMsg = 'eNB showed ' + str(dropNotEnoughRBs) + ' "dropping, not enough RBs" message(s)'
|
statMsg = 'eNB showed ' + str(dropNotEnoughRBs) + ' "dropping, not enough RBs" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
@@ -1030,30 +959,30 @@ 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.htmleNBFailureMsg=htmleNBFailureMsg
|
||||||
return 0
|
# Runtime statistics
|
||||||
|
if runTime != '':
|
||||||
|
logging.debug(runTime)
|
||||||
|
logging.debug('Time executing user inst : ' + userTime)
|
||||||
|
logging.debug('Time executing system inst : ' + systemTime)
|
||||||
|
logging.debug('Max Physical Memory Usage : ' + maxPhyMemUsage)
|
||||||
|
logging.debug('Nb Context Switches : ' + nbContextSwitches)
|
||||||
|
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
|
||||||
|
|||||||
@@ -620,6 +620,101 @@ function report_test {
|
|||||||
#IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_ul*client*txt | grep -v mbms 2> /dev/null`
|
#IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_ul*client*txt | grep -v mbms 2> /dev/null`
|
||||||
#analyzeIperfFiles
|
#analyzeIperfFiles
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# FeMBMS Case
|
||||||
|
CN_CONFIG="noS1"
|
||||||
|
TMODE="fdd"
|
||||||
|
BW_CASES=(05)
|
||||||
|
for BW in ${BW_CASES[@]}
|
||||||
|
do
|
||||||
|
echo " <tr bgcolor = \"#8FBC8F\" >" >> ./test_simulator_results.html
|
||||||
|
echo " <td align = \"center\" colspan = 4 >Test FeMBMS without EPC (aka noS1): ${TMODE} -- ${BW}MHz </td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_enb_fembms.log
|
||||||
|
UE_LOG=`echo $ENB_LOG | sed -e "s#enb#ue#"`
|
||||||
|
if [ -f $ENB_LOG ] && [ -f $UE_LOG ]
|
||||||
|
then
|
||||||
|
NAME_ENB=`echo $ENB_LOG | sed -e "s#$ARCHIVES_LOC/##"`
|
||||||
|
NAME_UE=`echo $UE_LOG | sed -e "s#$ARCHIVES_LOC/##"`
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$NAME_ENB --- $NAME_UE</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>N/A</td>" >> ./test_simulator_results.html
|
||||||
|
#NB_ENB_GOT_SYNC=`egrep -c "got sync" $ENB_LOG`
|
||||||
|
NB_ENB_TUNNEL_UP=`egrep -c "Interface oaitun_enb1 successfully configured" $ENB_LOG`
|
||||||
|
NB_ENB_MTUNNEL_UP=`egrep -c "Interface oaitun_enm1 successfully configured" $ENB_LOG`
|
||||||
|
#NB_UE_GOT_SYNC=`egrep -c "rfsimulator: Success" $UE_LOG`
|
||||||
|
#NB_ENB_SYNCED_WITH_UE=`egrep -c "Generating RRCConnectionReconfigurationComplete" $UE_LOG`
|
||||||
|
NB_UE_TUNNEL_UP=`egrep -c "Interface oaitun_ue1 successfully configured" $UE_LOG`
|
||||||
|
NB_UE_MTUNNEL_UP=`egrep -c "Interface oaitun_uem1 successfully configured" $UE_LOG`
|
||||||
|
NB_UE_MBMS_PUSH_MSG=`egrep -c "TRIED TO PUSH MBMS DATA TO" $UE_LOG`
|
||||||
|
#if [ $NB_ENB_GOT_SYNC -gt 0 ] && [ $NB_UE_GOT_SYNC -gt 0 ] && [ $NB_ENB_SYNCED_WITH_UE -gt 0 ] && [ $NB_UE_MBMS_PUSH_MSG -gt 0 ]
|
||||||
|
if [ $NB_UE_MBMS_PUSH_MSG -gt 0 ]
|
||||||
|
then
|
||||||
|
echo " <td bgcolor = \"green\" >OK</td>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo " <td bgcolor = \"red\" >KO</td>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
echo " <td><pre>" >> ./test_simulator_results.html
|
||||||
|
#if [ $NB_ENB_GOT_SYNC -gt 0 ]
|
||||||
|
#then
|
||||||
|
# echo "<font color = \"blue\">- eNB --> got sync</font>" >> ./test_simulator_results.html
|
||||||
|
#else
|
||||||
|
# echo "<font color = \"red\"><b>- eNB NEVER got sync</b></font>" >> ./test_simulator_results.html
|
||||||
|
#fi
|
||||||
|
if [ $NB_ENB_TUNNEL_UP -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- eNB mounted oaitun_enb1 interface</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- eNB NEVER mounted oaitun_enb1 interface</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
if [ $NB_ENB_MTUNNEL_UP -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- eNB mounted oaitun_enm1 interface</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- eNB NEVER mounted oaitun_enm1 interface</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
#if [ $NB_UE_GOT_SYNC -gt 0 ]
|
||||||
|
#then
|
||||||
|
# echo "<font color = \"blue\">- LTE UE --> got sync</font>" >> ./test_simulator_results.html
|
||||||
|
#else
|
||||||
|
# echo "<font color = \"red\"><b>- LTE UE NEVER got sync</b></font>" >> ./test_simulator_results.html
|
||||||
|
#fi
|
||||||
|
#if [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
|
||||||
|
#then
|
||||||
|
# echo "<font color = \"blue\">- LTE UE attached to eNB</font>" >> ./test_simulator_results.html
|
||||||
|
#else
|
||||||
|
# echo "<font color = \"red\"><b>- LTE UE NEVER attached to eNB</b></font>" >> ./test_simulator_results.html
|
||||||
|
#fi
|
||||||
|
if [ $NB_UE_TUNNEL_UP -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- LTE UE mounted oaitun_ue1 interface</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- LTE UE NEVER mounted oaitun_ue1 interface</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
if [ $NB_UE_MTUNNEL_UP -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- LTE UE mounted oaitun_uem1 interface</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- LTE UE NEVER mounted oaitun_uem1 interface</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
if [ $NB_UE_MBMS_PUSH_MSG -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- LTE UE tried to push ${NB_UE_MBMS_PUSH_MSG} MBMS DATA</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- LTE UE NEVER pushed MBMS DATA</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
echo " </pre></td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
#PING_LOGS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_ping*.log 2> /dev/null`
|
||||||
|
#analyzePingFiles
|
||||||
|
|
||||||
|
#IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_dl*client*txt | grep -v mbms 2> /dev/null`
|
||||||
|
#analyzeIperfFiles
|
||||||
|
|
||||||
|
#IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_ul*client*txt | grep -v mbms 2> /dev/null`
|
||||||
|
#analyzeIperfFiles
|
||||||
|
done
|
||||||
echo " </table>" >> ./test_simulator_results.html
|
echo " </table>" >> ./test_simulator_results.html
|
||||||
echo " </div>" >> ./test_simulator_results.html
|
echo " </div>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
@@ -724,8 +819,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
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
+137
-8
@@ -89,6 +89,9 @@ function start_basic_sim_enb {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
ENB_SYNC=0
|
ENB_SYNC=0
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
then
|
then
|
||||||
@@ -151,6 +154,9 @@ function start_basic_sim_ue {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
rm $1
|
rm $1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
then
|
then
|
||||||
@@ -523,9 +529,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 +594,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 +660,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
|
||||||
@@ -764,6 +766,9 @@ function start_l2_sim_enb {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_ENB_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
ENB_SYNC=1
|
ENB_SYNC=1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
@@ -872,6 +877,9 @@ function start_l2_sim_ue {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_UE_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
UE_SYNC=1
|
UE_SYNC=1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
@@ -985,6 +993,9 @@ function start_rf_sim_enb {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_ENB_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
then
|
then
|
||||||
@@ -1114,6 +1125,9 @@ function start_rf_sim_ue {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_UE_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
then
|
then
|
||||||
@@ -1158,6 +1172,10 @@ function start_rf_sim_gnb {
|
|||||||
local LOC_CONF_FILE=$5
|
local LOC_CONF_FILE=$5
|
||||||
# 1 is with S1 and 0 without S1 aka noS1
|
# 1 is with S1 and 0 without S1 aka noS1
|
||||||
local LOC_S1_CONFIGURATION=$6
|
local LOC_S1_CONFIGURATION=$6
|
||||||
|
|
||||||
|
if [ -e rbconfig.raw ]; then rm -f rbconfig.raw; fi
|
||||||
|
if [ -e reconfig.raw ]; then rm -f reconfig.raw; fi
|
||||||
|
|
||||||
echo "cd /home/ubuntu/tmp" > $1
|
echo "cd /home/ubuntu/tmp" > $1
|
||||||
echo "echo \"sudo apt-get --yes --quiet install daemon \"" >> $1
|
echo "echo \"sudo apt-get --yes --quiet install daemon \"" >> $1
|
||||||
echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
|
echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
|
||||||
@@ -1171,6 +1189,7 @@ function start_rf_sim_gnb {
|
|||||||
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/ran_build/build/\"" >> $1
|
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/ran_build/build/\"" >> $1
|
||||||
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
|
echo "sudo rm -f r*config.raw" >> $1
|
||||||
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "echo \"RFSIMULATOR=server ./nr-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --parallel-config PARALLEL_SINGLE_THREAD --noS1 --nokrnmod 1 --rfsim --phy-test\" > ./my-nr-softmodem-run.sh " >> $1
|
echo "echo \"RFSIMULATOR=server ./nr-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --parallel-config PARALLEL_SINGLE_THREAD --noS1 --nokrnmod 1 --rfsim --phy-test\" > ./my-nr-softmodem-run.sh " >> $1
|
||||||
@@ -1231,6 +1250,13 @@ function start_rf_sim_gnb {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
sleep 10
|
sleep 10
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR < $1
|
||||||
|
rm $1
|
||||||
|
# Copy the RAW files from the gNB run for the NR-UE
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/ran_build/build/rbconfig.raw .
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/ran_build/build/reconfig.raw .
|
||||||
}
|
}
|
||||||
|
|
||||||
function start_rf_sim_nr_ue {
|
function start_rf_sim_nr_ue {
|
||||||
@@ -1241,14 +1267,21 @@ function start_rf_sim_nr_ue {
|
|||||||
local LOC_FREQUENCY=$6
|
local LOC_FREQUENCY=$6
|
||||||
# 1 is with S1 and 0 without S1 aka noS1
|
# 1 is with S1 and 0 without S1 aka noS1
|
||||||
local LOC_S1_CONFIGURATION=$7
|
local LOC_S1_CONFIGURATION=$7
|
||||||
|
|
||||||
|
# Copy the RAW files from the gNB run
|
||||||
|
scp -o StrictHostKeyChecking=no rbconfig.raw ubuntu@$LOC_NR_UE_VM_IP_ADDR:/home/ubuntu/tmp
|
||||||
|
scp -o StrictHostKeyChecking=no reconfig.raw ubuntu@$LOC_NR_UE_VM_IP_ADDR:/home/ubuntu/tmp
|
||||||
|
|
||||||
echo "echo \"sudo apt-get --yes --quiet install daemon \"" > $1
|
echo "echo \"sudo apt-get --yes --quiet install daemon \"" > $1
|
||||||
echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
|
echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
|
||||||
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/ran_build/build/\"" >> $1
|
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/ran_build/build/\"" >> $1
|
||||||
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
|
echo "sudo cp /home/ubuntu/tmp/r*config.raw /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
|
echo "sudo chmod 666 /home/ubuntu/tmp/cmake_targets/ran_build/build/r*config.raw" >> $1
|
||||||
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "echo \"RFSIMULATOR=${LOC_GNB_VM_IP_ADDR} ./nr-uesoftmodem --nokrnmod 1 --rfsim --phy-test --rrc_config_path /home/ubuntu/tmp/ci-scripts/rrc-files --log_config.global_log_options level,nocolor --noS1\" > ./my-nr-softmodem-run.sh " >> $1
|
echo "echo \"RFSIMULATOR=${LOC_GNB_VM_IP_ADDR} ./nr-uesoftmodem --nokrnmod 1 --rfsim --phy-test --rrc_config_path /home/ubuntu/tmp/cmake_targets/ran_build/build/ --log_config.global_log_options level,nocolor --noS1\" > ./my-nr-softmodem-run.sh " >> $1
|
||||||
fi
|
fi
|
||||||
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
|
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
|
||||||
echo "cat ./my-nr-softmodem-run.sh" >> $1
|
echo "cat ./my-nr-softmodem-run.sh" >> $1
|
||||||
@@ -1295,6 +1328,9 @@ function start_rf_sim_nr_ue {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_NR_UE_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
then
|
then
|
||||||
@@ -2014,6 +2050,95 @@ function run_test_on_vm {
|
|||||||
echo "LTE RFSIM seems to FAIL"
|
echo "LTE RFSIM seems to FAIL"
|
||||||
echo "LTE: TEST_KO" > $ARCHIVES_LOC/test_final_status.log
|
echo "LTE: TEST_KO" > $ARCHIVES_LOC/test_final_status.log
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
####################
|
||||||
|
## FeMBMS CASE noS1 ##
|
||||||
|
####################
|
||||||
|
CONF_FILE=lte-fdd-fembms-basic-sim.conf
|
||||||
|
CN_CONFIG="noS1"
|
||||||
|
S1_NOS1_CFG=0
|
||||||
|
LTEBOX=0
|
||||||
|
TMODE="fdd"
|
||||||
|
FREQUENCY=2680
|
||||||
|
BW_CASES=(05)
|
||||||
|
FeMBMS_STATUS=0
|
||||||
|
|
||||||
|
for BW in ${BW_CASES[@]}
|
||||||
|
do
|
||||||
|
if [[ $BW =~ .*05.* ]]; then PRB=25; fi
|
||||||
|
if [[ $BW =~ .*10.* ]]; then PRB=50; fi
|
||||||
|
if [[ $BW =~ .*20.* ]]; then PRB=100; fi
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : Starting the eNB with MSMS in ${TMODE}-${BW}MHz mode"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_ENB_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_enb_fembms.log
|
||||||
|
start_rf_sim_enb $ENB_VM_CMDS "$ENB_VM_IP_ADDR" "$EPC_VM_IP_ADDR" $CURRENT_ENB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : Starting the UE"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_UE_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_ue_fembms.log
|
||||||
|
start_rf_sim_ue $UE_VM_CMDS $UE_VM_IP_ADDR $ENB_VM_IP_ADDR $CURRENT_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
|
||||||
|
if [ $UE_SYNC -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "Problem w/ eNB and UE not syncing"
|
||||||
|
terminate_enb_ue_basic_sim $ENB_VM_CMDS $ENB_VM_IP_ADDR 1
|
||||||
|
terminate_enb_ue_basic_sim $UE_VM_CMDS $UE_VM_IP_ADDR 2
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
STATUS=-1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : iperf DL -- UE is server and eNB is client"
|
||||||
|
echo "############################################################"
|
||||||
|
get_enb_mbms_noS1_ip_addr $ENB_VM_CMDS $ENB_VM_IP_ADDR
|
||||||
|
IPERF_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_dl_fembms
|
||||||
|
get_ue_mbms_ip_addr $UE_VM_CMDS $UE_VM_IP_ADDR 1
|
||||||
|
THROUGHPUT=2
|
||||||
|
generic_iperf $UE_VM_CMDS $UE_VM_IP_ADDR $UE_IP_ADDR $ENB_VM_CMDS $ENB_VM_IP_ADDR $ENB_IP_ADDR $THROUGHPUT $IPERF_LOG_FILE 1 0
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_server.txt $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_client.txt $ARCHIVES_LOC
|
||||||
|
#check_iperf $ARCHIVES_LOC/$IPERF_LOG_FILE $THROUGHPUT
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : Terminate enb/ue simulators"
|
||||||
|
echo "############################################################"
|
||||||
|
terminate_enb_ue_basic_sim $ENB_VM_CMDS $ENB_VM_IP_ADDR 1
|
||||||
|
terminate_enb_ue_basic_sim $UE_VM_CMDS $UE_VM_IP_ADDR 2
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
NB_UE_FeMBMS_MESSAGES=`egrep -c "TRIED TO PUSH MBMS DATA TO" $ARCHIVES_LOC/$CURRENT_UE_LOG_FILE`
|
||||||
|
if [ $NB_UE_FeMBMS_MESSAGES -eq 0 ]; then FeMBMS_STATUS=-1; fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
full_l2_sim_destroy
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Checking run status"
|
||||||
|
echo "############################################################"
|
||||||
|
|
||||||
|
if [ $PING_STATUS -ne 0 ]; then STATUS=-1; fi
|
||||||
|
if [ $IPERF_STATUS -ne 0 ]; then STATUS=-1; fi
|
||||||
|
if [ $FeMBMS_STATUS -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "LTE FeMBMS RFSIM seems OK"
|
||||||
|
else
|
||||||
|
echo "LTE FeMBMS RFSIM seems to FAIL"
|
||||||
|
STATUS=-1
|
||||||
|
fi
|
||||||
|
if [ $STATUS -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "LTE RFSIM seems OK"
|
||||||
|
echo "LTE: TEST_OK" > $ARCHIVES_LOC/test_final_status.log
|
||||||
|
else
|
||||||
|
echo "LTE RFSIM seems to FAIL"
|
||||||
|
echo "LTE: TEST_KO" > $ARCHIVES_LOC/test_final_status.log
|
||||||
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-rf-sim.* ]]
|
if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-rf-sim.* ]]
|
||||||
@@ -2028,7 +2153,7 @@ function run_test_on_vm {
|
|||||||
NR_STATUS=0
|
NR_STATUS=0
|
||||||
|
|
||||||
######### start of loop
|
######### start of loop
|
||||||
while [ $try_cnt -lt 5 ]
|
while [ $try_cnt -lt 1 ]
|
||||||
do
|
do
|
||||||
SYNC_STATUS=0
|
SYNC_STATUS=0
|
||||||
PING_STATUS=0
|
PING_STATUS=0
|
||||||
@@ -2050,6 +2175,8 @@ function run_test_on_vm {
|
|||||||
echo "Problem w/ gNB and NR-UE not syncing"
|
echo "Problem w/ gNB and NR-UE not syncing"
|
||||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||||
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
|
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
SYNC_STATUS=-1
|
SYNC_STATUS=-1
|
||||||
try_cnt=$[$try_cnt+1]
|
try_cnt=$[$try_cnt+1]
|
||||||
continue
|
continue
|
||||||
@@ -2089,6 +2216,8 @@ function run_test_on_vm {
|
|||||||
echo "DL test not OK"
|
echo "DL test not OK"
|
||||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||||
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
|
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
try_cnt=$[$try_cnt+1]
|
try_cnt=$[$try_cnt+1]
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -101,6 +101,18 @@ class SSHConnection():
|
|||||||
else:
|
else:
|
||||||
sys.exit('SSH Connection Failed')
|
sys.exit('SSH Connection Failed')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def cde_check_value(self, commandline, expected, timeout):
|
||||||
|
logging.debug(commandline)
|
||||||
|
self.ssh.timeout = timeout
|
||||||
|
self.ssh.sendline(commandline)
|
||||||
|
expected.append(pexpect.EOF)
|
||||||
|
expected.append(pexpect.TIMEOUT)
|
||||||
|
self.sshresponse = self.ssh.expect(expected)
|
||||||
|
return self.sshresponse
|
||||||
|
|
||||||
def command(self, commandline, expectedline, timeout):
|
def command(self, commandline, expectedline, timeout):
|
||||||
logging.debug(commandline)
|
logging.debug(commandline)
|
||||||
self.ssh.timeout = timeout
|
self.ssh.timeout = timeout
|
||||||
|
|||||||
Executable
+35
@@ -0,0 +1,35 @@
|
|||||||
|
- COTS_UE_Airplane
|
||||||
|
- Build_PhySim
|
||||||
|
- Run_PhySim
|
||||||
|
- Build_eNB
|
||||||
|
- WaitEndBuild_eNB
|
||||||
|
- Initialize_eNB
|
||||||
|
- Terminate_eNB
|
||||||
|
- Initialize_UE
|
||||||
|
- Terminate_UE
|
||||||
|
- Attach_UE
|
||||||
|
- Detach_UE
|
||||||
|
- Build_OAI_UE
|
||||||
|
- Initialize_OAI_UE
|
||||||
|
- Terminate_OAI_UE
|
||||||
|
- DataDisable_UE
|
||||||
|
- DataEnable_UE
|
||||||
|
- CheckStatusUE
|
||||||
|
- Ping
|
||||||
|
- Iperf
|
||||||
|
- Reboot_UE
|
||||||
|
- Initialize_FlexranCtrl
|
||||||
|
- Terminate_FlexranCtrl
|
||||||
|
- Initialize_HSS
|
||||||
|
- Terminate_HSS
|
||||||
|
- Initialize_MME
|
||||||
|
- Terminate_MME
|
||||||
|
- Initialize_SPGW
|
||||||
|
- Terminate_SPGW
|
||||||
|
- Initialize_CatM_module
|
||||||
|
- Terminate_CatM_module
|
||||||
|
- Attach_CatM_module
|
||||||
|
- Detach_CatM_module
|
||||||
|
- Ping_CatM_module
|
||||||
|
- IdleSleep
|
||||||
|
- Perform_X2_Handover
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>
|
||||||
|
<repeatCount>4</repeatCount>
|
||||||
|
<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 OCP-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 OCP-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>-w USRP -c --eNBocp --ninja</Build_eNB_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -25,23 +25,10 @@
|
|||||||
<htmlTabName>EPC-Start</htmlTabName>
|
<htmlTabName>EPC-Start</htmlTabName>
|
||||||
<htmlTabIcon>log-in</htmlTabIcon>
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
010101 090101
|
|
||||||
050101 060101 070101
|
050101 060101 070101
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="010101">
|
|
||||||
<class>Build_eNB</class>
|
|
||||||
<desc>Build eNB (USRP)</desc>
|
|
||||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="090101">
|
|
||||||
<class>Build_OAI_UE</class>
|
|
||||||
<desc>Build OAI UE</desc>
|
|
||||||
<Build_OAI_UE_args>-w USRP --UE</Build_OAI_UE_args>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="050101">
|
<testCase id="050101">
|
||||||
<class>Initialize_HSS</class>
|
<class>Initialize_HSS</class>
|
||||||
<desc>Initialize HSS</desc>
|
<desc>Initialize HSS</desc>
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-fembms-nos1-tunnel</htmlTabRef>
|
||||||
|
<htmlTabName>Test-05MHz-FEMBMS-TM1-noS1-tunnel</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
030201 090109
|
||||||
|
030104 000001 090104 000002 040605 000001 090109 030201
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>15</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000003">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030104">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB (FDD/Band7/5MHz/MBMS)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band17.tm1.mbms.25PRB.usrpb210.conf --noS1 --eNBs.[0].rrc_inactivity_threshold 0 --nokrnmod 1 --eNBs.[0].component_carriers.[0].eutra_band 7 --eNBs.[0].component_carriers.[0].downlink_frequency 2680000000 --eNBs.[0].component_carriers.[0].uplink_frequency_offset -120000000 --eNBs.[0].component_carriers.[0].mbms_dedicated_serving_cell ENABLE --MCEs.[0].mbms_sched_info.mbms_area_config_list.[0].pmch_config_list.[0].allocated_sf_end 512</Initialize_eNB_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030201">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate eNB</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090104">
|
||||||
|
<class>Initialize_OAI_UE</class>
|
||||||
|
<desc>Initialize OAI UE (FDD/Band7/5MHz/MBMS)</desc>
|
||||||
|
<Initialize_OAI_UE_args>-C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1 --noS1</Initialize_OAI_UE_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090109">
|
||||||
|
<class>Terminate_OAI_UE</class>
|
||||||
|
<desc>Terminate OAI UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040605">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/1.5Mbps/UDP/MBMS-sink)(20 sec)</desc>
|
||||||
|
<iperf_args>-c 10.0.2.2 -u -b 1.5M -t 20 -i 1 -fm -B 10.0.2.1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_options>sink</iperf_options>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
<htmlTabRef>test-05-tm1-rrc-no-flex</htmlTabRef>
|
<htmlTabRef>test-05-tm1-rrc-no-flex</htmlTabRef>
|
||||||
<htmlTabName>Test-05MHz-TM1-RRC-Inactivity</htmlTabName>
|
<htmlTabName>Test-05MHz-TM1-RRC-Inactivity</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201
|
030201
|
||||||
040101
|
040101
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>
|
||||||
|
000001 000002
|
||||||
|
000003 000004
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>Build_eNB</class>
|
||||||
|
<desc>Build eNB</desc>
|
||||||
|
<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<backgroundBuild>True</backgroundBuild>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000004">
|
||||||
|
<class>WaitEndBuild_eNB</class>
|
||||||
|
<desc>Wait for end of Build eNB</desc>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>Build_eNB</class>
|
||||||
|
<desc>Build gNB</desc>
|
||||||
|
<Build_eNB_args>-w USRP -c --gNB --ninja</Build_eNB_args>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
<backgroundBuild>True</backgroundBuild>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000003">
|
||||||
|
<class>WaitEndBuild_eNB</class>
|
||||||
|
<desc>Wait for end of Build gNB</desc>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-fr1-tm1</htmlTabRef>
|
||||||
|
<htmlTabName>Test-FR1-TM1</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
070001
|
||||||
|
070000
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList>
|
||||||
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="070000">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate eNB</desc>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070001">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate gNB</desc>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
|
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-fr1-tm1</htmlTabRef>
|
||||||
|
<htmlTabName>Test-FR1-TM1</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
030000
|
||||||
|
040000
|
||||||
|
000001
|
||||||
|
070001
|
||||||
|
070000
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList>
|
||||||
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="030000">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>lte</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040000">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize gNB (3/4 sampling rate)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf -E</Initialize_eNB_args>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
<air_interface>nr</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>30</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070000">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate eNB</desc>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070001">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate gNB</desc>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-airplane-mode</htmlTabRef>
|
||||||
|
<htmlTabName>AirplaneToggle</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
010000
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="010000">
|
||||||
|
<class>COTS_UE_Airplane</class>
|
||||||
|
<desc>Toggle COTS Airplane mode ON</desc>
|
||||||
|
<cots_ue_airplane_args>ON</cots_ue_airplane_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
<testCase id="090102">
|
<testCase id="090102">
|
||||||
<class>Initialize_OAI_UE</class>
|
<class>Initialize_OAI_UE</class>
|
||||||
<desc>Initialize NR UE USRP</desc>
|
<desc>Initialize NR UE USRP</desc>
|
||||||
<Initialize_OAI_UE_args>--phy-test --usrp-args "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=external,time_source=external" --threadoffset 16 --rrc_config_path ci-scripts/rrc-files</Initialize_OAI_UE_args>
|
<Initialize_OAI_UE_args>--phy-test --usrp-args "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=external,time_source=external" --ue-rxgain 75 --threadoffset 16 --rrc_config_path .</Initialize_OAI_UE_args>
|
||||||
<air_interface>NR</air_interface>
|
<air_interface>NR</air_interface>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>run-oai-gnb-nr-ue-tx-write-thread</htmlTabRef>
|
||||||
|
<htmlTabName>Run-gNB-and-NR-UE-TX-Write-Thread</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
090103 000001 090104 000002 090108 090109
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="090103">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize gNB USRP (Tx-Write-Threading enabled)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test --usrp-tx-thread-config 1</Initialize_eNB_args>
|
||||||
|
<air_interface>NR</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Waiting for NR UE to synchronize w/ gNB</desc>
|
||||||
|
<idle_sleep_time_in_sec>180</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090104">
|
||||||
|
<class>Initialize_OAI_UE</class>
|
||||||
|
<desc>Initialize NR UE USRP</desc>
|
||||||
|
<Initialize_OAI_UE_args>--phy-test --usrp-args "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=external,time_source=external" --ue-rxgain 75 --threadoffset 16 --rrc_config_path .</Initialize_OAI_UE_args>
|
||||||
|
<air_interface>NR</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090108">
|
||||||
|
<class>Terminate_OAI_UE</class>
|
||||||
|
<desc>Terminate NR UE</desc>
|
||||||
|
<air_interface>NR</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090109">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate gNB</desc>
|
||||||
|
<air_interface>NR</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
<htmlTabRef>gnb-build-tab</htmlTabRef>
|
<htmlTabRef>gnb-build-tab</htmlTabRef>
|
||||||
<htmlTabName>Build-gNB</htmlTabName>
|
<htmlTabName>Build-gNB</htmlTabName>
|
||||||
<htmlTabIcon>wrench</htmlTabIcon>
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<repeatCount>4</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
010101
|
010101
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
@@ -33,7 +34,7 @@
|
|||||||
<mode>TesteNB</mode>
|
<mode>TesteNB</mode>
|
||||||
<class>Build_eNB</class>
|
<class>Build_eNB</class>
|
||||||
<desc>Build gNB (USRP)</desc>
|
<desc>Build gNB (USRP)</desc>
|
||||||
<Build_eNB_args>--gNB -w USRP</Build_eNB_args>
|
<Build_eNB_args>--gNB -w USRP --ninja</Build_eNB_args>
|
||||||
<forced_workspace_cleanup>True</forced_workspace_cleanup>
|
<forced_workspace_cleanup>True</forced_workspace_cleanup>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
<htmlTabRef>test-10</htmlTabRef>
|
<htmlTabRef>test-10</htmlTabRef>
|
||||||
<htmlTabName>Test-10MHz</htmlTabName>
|
<htmlTabName>Test-10MHz</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201
|
030201
|
||||||
040101
|
040101
|
||||||
|
|||||||
@@ -0,0 +1,161 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
030105 040301 040502 040606 040601 040603 040608 040605 040646 040641 040643 040648 040645 040401 040201 030201
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>test-ldpc-gpu</htmlTabRef>
|
||||||
|
<htmlTabName>Test-ldpc-GPU</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>000001 000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000020 000021</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>Build_PhySim</class>
|
||||||
|
<desc>Build for physical simulator</desc>
|
||||||
|
<physim_build_args>--phy_simulators --ninja</physim_build_args>
|
||||||
|
<forced_workspace_cleanup>FALSE</forced_workspace_cleanup>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 3872 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000003">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 3872 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000004">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 4224 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000005">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 4224 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000006">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 4576 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000007">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 4576 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000008">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 4928 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000009">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 4928 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000010">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 5280 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000011">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 5280 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000012">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 5632 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000013">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 5632 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000014">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 6336 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000015">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 6336 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000016">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 7040 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000017">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 7040 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000018">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 7744 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000019">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 7744 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000020">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 8448 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000021">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 8448 -s10 -n100 -G 1</physim_run_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
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
<htmlTabRef>nr-ue-build-tab</htmlTabRef>
|
<htmlTabRef>nr-ue-build-tab</htmlTabRef>
|
||||||
<htmlTabName>Build-NR-UE</htmlTabName>
|
<htmlTabName>Build-NR-UE</htmlTabName>
|
||||||
<htmlTabIcon>wrench</htmlTabIcon>
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
010102
|
010102
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
@@ -33,7 +34,7 @@
|
|||||||
<mode>TestUE</mode>
|
<mode>TestUE</mode>
|
||||||
<class>Build_OAI_UE</class>
|
<class>Build_OAI_UE</class>
|
||||||
<desc>Build NR UE (USRP)</desc>
|
<desc>Build NR UE (USRP)</desc>
|
||||||
<Build_OAI_UE_args>--nrUE -w USRP</Build_OAI_UE_args>
|
<Build_OAI_UE_args>--nrUE -w USRP --ninja</Build_OAI_UE_args>
|
||||||
<clean_repository>false</clean_repository>
|
<clean_repository>false</clean_repository>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
+277
-107
@@ -27,6 +27,10 @@ cmake_minimum_required (VERSION 3.0)
|
|||||||
# Base directories, compatible with legacy OAI building #
|
# Base directories, compatible with legacy OAI building #
|
||||||
#########################################################
|
#########################################################
|
||||||
set (OPENAIR_DIR $ENV{OPENAIR_DIR})
|
set (OPENAIR_DIR $ENV{OPENAIR_DIR})
|
||||||
|
if("${OPENAIR_DIR}" STREQUAL "")
|
||||||
|
string(REGEX REPLACE "/cmake_targets.*$" "" OPENAIR_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
set (NFAPI_DIR ${OPENAIR_DIR}/nfapi/open-nFAPI)
|
set (NFAPI_DIR ${OPENAIR_DIR}/nfapi/open-nFAPI)
|
||||||
set (NFAPI_USER_DIR ${OPENAIR_DIR}/nfapi/oai_integration)
|
set (NFAPI_USER_DIR ${OPENAIR_DIR}/nfapi/oai_integration)
|
||||||
set (OPENAIR1_DIR ${OPENAIR_DIR}/openair1)
|
set (OPENAIR1_DIR ${OPENAIR_DIR}/openair1)
|
||||||
@@ -39,6 +43,33 @@ set (OPENAIR_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
|
|||||||
|
|
||||||
project (OpenAirInterface)
|
project (OpenAirInterface)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##############################################
|
||||||
|
# Base CUDA setting
|
||||||
|
##############################################
|
||||||
|
find_package(CUDA)
|
||||||
|
if (CUDA_FOUND)
|
||||||
|
message ("cuda include ${CUDA_INCLUDE_DIRS}")
|
||||||
|
message ("cuda library ${CUDA_LIBRARY_DIRS}")
|
||||||
|
|
||||||
|
add_definitions("-L/usr/local/cuda/lib64")
|
||||||
|
|
||||||
|
SET(CUDA_NVCC_FLAGS
|
||||||
|
"${CUDA_NVCC_FLAGS};-arch=sm_60;")
|
||||||
|
|
||||||
|
# Disable warnings for CUDA
|
||||||
|
SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-lpthread;-w;-O3;--default-stream;per-thread;-I/usr/local/cuda/inc;-L/usr/local/cuda/lib -lcutil;-rdc=true;-lcudadevrt")
|
||||||
|
SET(CUDA_VERBOSE_BUILD ON)
|
||||||
|
SET(CUDA_HOST_COMPILER "/usr/bin/g++")
|
||||||
|
|
||||||
|
SET(CUDA_SEPARABLE_COMPILATION ON)
|
||||||
|
|
||||||
|
else (CUDA_FOUND)
|
||||||
|
message ("No CUDA tool installed")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
###########################################
|
###########################################
|
||||||
# macros to define options as there is numerous options in oai
|
# macros to define options as there is numerous options in oai
|
||||||
################################################
|
################################################
|
||||||
@@ -169,13 +200,30 @@ endif()
|
|||||||
set(CMAKE_C_FLAGS
|
set(CMAKE_C_FLAGS
|
||||||
"${CMAKE_C_FLAGS} ${C_FLAGS_PROCESSOR} -pipe -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing -rdynamic -funroll-loops -Wno-packed-bitfield-compat -fPIC")
|
"${CMAKE_C_FLAGS} ${C_FLAGS_PROCESSOR} -pipe -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing -rdynamic -funroll-loops -Wno-packed-bitfield-compat -fPIC")
|
||||||
# add autotools definitions that were maybe used!
|
# add autotools definitions that were maybe used!
|
||||||
set(MKVER "'MAKE_VERSION(a,b,c)=((a)*256+(b)*16+c)'")
|
if (CUDA_FOUND)
|
||||||
set(CMAKE_C_FLAGS
|
set(MKVER "'MAKE_VERSION(a,b,c)=((a)*256+(b)*16+c)'")
|
||||||
"${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP -D${MKVER}"
|
set(CUDA_CMAKE_C_FLAGS
|
||||||
)
|
"${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP -D CUDA_FLAG"
|
||||||
set(CMAKE_CXX_FLAGS
|
)
|
||||||
|
set(CUDA_CMAKE_CXX_FLAGS
|
||||||
|
"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -fno-strict-aliasing -rdynamic -std=c++11 -D CUDA_FLAG"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(CMAKE_C_FLAGS
|
||||||
|
"${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP -D${MKVER} -D CUDA_FLAG"
|
||||||
|
)
|
||||||
|
set(CMAKE_CXX_FLAGS
|
||||||
|
"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -fno-strict-aliasing -rdynamic -std=c++11 -D${MKVER} -D CUDA_FLAG"
|
||||||
|
)
|
||||||
|
else (CUDA_FOUND)
|
||||||
|
set(MKVER "'MAKE_VERSION(a,b,c)=((a)*256+(b)*16+c)'")
|
||||||
|
set(CMAKE_C_FLAGS
|
||||||
|
"${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP -D${MKVER}"
|
||||||
|
)
|
||||||
|
set(CMAKE_CXX_FLAGS
|
||||||
"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -fno-strict-aliasing -rdynamic -std=c++11 -D${MKVER}"
|
"${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -fno-strict-aliasing -rdynamic -std=c++11 -D${MKVER}"
|
||||||
)
|
)
|
||||||
|
endif ()
|
||||||
|
|
||||||
add_definitions("-DASN_DISABLE_OER_SUPPORT")
|
add_definitions("-DASN_DISABLE_OER_SUPPORT")
|
||||||
|
|
||||||
@@ -715,6 +763,42 @@ set(HWLIB_TCP_BRIDGE_OAI_SOURCE
|
|||||||
add_library(tcp_bridge_oai MODULE ${HWLIB_TCP_BRIDGE_OAI_SOURCE} )
|
add_library(tcp_bridge_oai MODULE ${HWLIB_TCP_BRIDGE_OAI_SOURCE} )
|
||||||
set_target_properties(tcp_bridge_oai PROPERTIES COMPILE_FLAGS "-fvisibility=hidden")
|
set_target_properties(tcp_bridge_oai PROPERTIES COMPILE_FLAGS "-fvisibility=hidden")
|
||||||
|
|
||||||
|
# Benetel 4G library
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
set(HWLIB_BENETEL_4G_SOURCE
|
||||||
|
${OPENAIR_TARGETS}/ARCH/ETHERNET/benetel/4g/benetel.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/ETHERNET/benetel/4g/shared_buffers.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/ETHERNET/benetel/4g/low.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/ETHERNET/benetel/4g/low_dpdk.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/ETHERNET/benetel/4g/dpdk_driver.c
|
||||||
|
)
|
||||||
|
add_library(benetel_4g MODULE ${HWLIB_BENETEL_4G_SOURCE} )
|
||||||
|
|
||||||
|
set_target_properties(benetel_4g PROPERTIES COMPILE_FLAGS "-fvisibility=hidden -march=native -I$ENV{RTE_SDK}/$ENV{RTE_TARGET}/include")
|
||||||
|
|
||||||
|
SET(DPDK_LIBS "-Wl,-rpath,$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -Wl,--whole-archive -L$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -ldpdk -Wl,--no-whole-archive")
|
||||||
|
TARGET_LINK_LIBRARIES(benetel_4g ${DPDK_LIBS})
|
||||||
|
TARGET_LINK_LIBRARIES(benetel_4g pthread dl rt m numa)
|
||||||
|
|
||||||
|
# Benetel 5G library
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
set(HWLIB_BENETEL_5G_SOURCE
|
||||||
|
${OPENAIR_TARGETS}/ARCH/ETHERNET/benetel/5g/benetel.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/ETHERNET/benetel/5g/shared_buffers.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/ETHERNET/benetel/5g/low.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/ETHERNET/benetel/5g/low_dpdk.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/ETHERNET/benetel/5g/dpdk_driver.c
|
||||||
|
)
|
||||||
|
add_library(benetel_5g MODULE ${HWLIB_BENETEL_5G_SOURCE} )
|
||||||
|
|
||||||
|
set_target_properties(benetel_5g PROPERTIES COMPILE_FLAGS "-fvisibility=hidden -march=native -I$ENV{RTE_SDK}/$ENV{RTE_TARGET}/include")
|
||||||
|
|
||||||
|
SET(DPDK_LIBS "-Wl,-rpath,$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -Wl,--whole-archive -L$ENV{RTE_SDK}/$ENV{RTE_TARGET}/lib -ldpdk -Wl,--no-whole-archive")
|
||||||
|
TARGET_LINK_LIBRARIES(benetel_5g ${DPDK_LIBS})
|
||||||
|
TARGET_LINK_LIBRARIES(benetel_5g pthread dl rt m numa)
|
||||||
|
|
||||||
##########################################################
|
##########################################################
|
||||||
|
|
||||||
include_directories ("${OPENAIR_TARGETS}/ARCH/COMMON")
|
include_directories ("${OPENAIR_TARGETS}/ARCH/COMMON")
|
||||||
@@ -1208,7 +1292,7 @@ set(SCHED_SRC_NR_UE
|
|||||||
${OPENAIR1_DIR}/SCHED_NR_UE/phy_procedures_nr_ue.c
|
${OPENAIR1_DIR}/SCHED_NR_UE/phy_procedures_nr_ue.c
|
||||||
${OPENAIR1_DIR}/SCHED_NR/phy_procedures_nr_common.c
|
${OPENAIR1_DIR}/SCHED_NR/phy_procedures_nr_common.c
|
||||||
${OPENAIR1_DIR}/SCHED_NR_UE/fapi_nr_ue_l1.c
|
${OPENAIR1_DIR}/SCHED_NR_UE/fapi_nr_ue_l1.c
|
||||||
${OPENAIR1_DIR}/SCHED_NR/phy_frame_config_nr.c
|
${OPENAIR1_DIR}/SCHED_NR_UE/phy_frame_config_nr_ue.c
|
||||||
${OPENAIR1_DIR}/SCHED_NR_UE/harq_nr.c
|
${OPENAIR1_DIR}/SCHED_NR_UE/harq_nr.c
|
||||||
${OPENAIR1_DIR}/SCHED_NR_UE/pucch_uci_ue_nr.c
|
${OPENAIR1_DIR}/SCHED_NR_UE/pucch_uci_ue_nr.c
|
||||||
${OPENAIR1_DIR}/SCHED_NR_UE/pucch_power_control_ue_nr.c
|
${OPENAIR1_DIR}/SCHED_NR_UE/pucch_power_control_ue_nr.c
|
||||||
@@ -1499,11 +1583,12 @@ set(PHY_SRC_UE
|
|||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_dmrs_rx.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_dmrs_rx.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gold.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gold.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/scrambling_luts.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/scrambling_luts.c
|
||||||
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gen_mod_table.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/dmrs_nr.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/dmrs_nr.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/ptrs_nr.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/ptrs_nr.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_ESTIMATION/filt16a_32.c
|
${OPENAIR1_DIR}/PHY/NR_UE_ESTIMATION/filt16a_32.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
|
${OPENAIR1_DIR}/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_ESTIMATION/nr_adjust_sync_gNB.c
|
${OPENAIR1_DIR}/PHY/NR_ESTIMATION/nr_measurements_gNB.c
|
||||||
${OPENAIR1_DIR}/PHY/TOOLS/file_output.c
|
${OPENAIR1_DIR}/PHY/TOOLS/file_output.c
|
||||||
${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c
|
${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c
|
||||||
#${OPENAIR1_DIR}/PHY/TOOLS/lte_dfts.c
|
#${OPENAIR1_DIR}/PHY/TOOLS/lte_dfts.c
|
||||||
@@ -1551,6 +1636,7 @@ set(PHY_SRC_UE
|
|||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/dmrs_nr.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/dmrs_nr.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/ptrs_nr.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/ptrs_nr.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gold_ue.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gold_ue.c
|
||||||
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gen_mod_table.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_ESTIMATION/filt16a_32.c
|
${OPENAIR1_DIR}/PHY/NR_UE_ESTIMATION/filt16a_32.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
|
${OPENAIR1_DIR}/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c
|
${OPENAIR1_DIR}/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c
|
||||||
@@ -1630,7 +1716,7 @@ add_library(PHY_MEX ${PHY_MEX_UE} ${CONFIG_LIB})
|
|||||||
#Layer 2 library
|
#Layer 2 library
|
||||||
#####################
|
#####################
|
||||||
set(MAC_DIR ${OPENAIR2_DIR}/LAYER2/MAC)
|
set(MAC_DIR ${OPENAIR2_DIR}/LAYER2/MAC)
|
||||||
set(NR_MAC_DIR ${OPENAIR2_DIR}/LAYER2/NR_MAC_gNB)
|
set(NR_GNB_MAC_DIR ${OPENAIR2_DIR}/LAYER2/NR_MAC_gNB)
|
||||||
set(NR_UE_MAC_DIR ${OPENAIR2_DIR}/LAYER2/NR_MAC_UE)
|
set(NR_UE_MAC_DIR ${OPENAIR2_DIR}/LAYER2/NR_MAC_UE)
|
||||||
set(PHY_INTERFACE_DIR ${OPENAIR2_DIR}/PHY_INTERFACE)
|
set(PHY_INTERFACE_DIR ${OPENAIR2_DIR}/PHY_INTERFACE)
|
||||||
set(NR_PHY_INTERFACE_DIR ${OPENAIR2_DIR}/NR_PHY_INTERFACE)
|
set(NR_PHY_INTERFACE_DIR ${OPENAIR2_DIR}/NR_PHY_INTERFACE)
|
||||||
@@ -1696,9 +1782,15 @@ set(NR_RLC_SRC
|
|||||||
${OPENAIR2_DIR}/LAYER2/nr_rlc/nr_rlc_sdu.c
|
${OPENAIR2_DIR}/LAYER2/nr_rlc/nr_rlc_sdu.c
|
||||||
${OPENAIR2_DIR}/LAYER2/nr_rlc/nr_rlc_ue_manager.c
|
${OPENAIR2_DIR}/LAYER2/nr_rlc/nr_rlc_ue_manager.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(NR_PDCP_SRC
|
||||||
|
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
|
||||||
|
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c
|
||||||
|
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_entity.c
|
||||||
|
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c
|
||||||
|
)
|
||||||
|
|
||||||
set(L2_SRC
|
set(L2_SRC
|
||||||
${OPENAIR2_DIR}/LAYER2/openair2_proc.c
|
|
||||||
${PDCP_DIR}/pdcp.c
|
${PDCP_DIR}/pdcp.c
|
||||||
${PDCP_DIR}/pdcp_fifo.c
|
${PDCP_DIR}/pdcp_fifo.c
|
||||||
${PDCP_DIR}/pdcp_sequence_manager.c
|
${PDCP_DIR}/pdcp_sequence_manager.c
|
||||||
@@ -1706,6 +1798,7 @@ set(L2_SRC
|
|||||||
${PDCP_DIR}/pdcp_util.c
|
${PDCP_DIR}/pdcp_util.c
|
||||||
${PDCP_DIR}/pdcp_security.c
|
${PDCP_DIR}/pdcp_security.c
|
||||||
${PDCP_DIR}/pdcp_netlink.c
|
${PDCP_DIR}/pdcp_netlink.c
|
||||||
|
${OPENAIR2_DIR}/LAYER2/openair2_proc.c
|
||||||
# ${RRC_DIR}/rrc_UE.c
|
# ${RRC_DIR}/rrc_UE.c
|
||||||
${RRC_DIR}/rrc_eNB.c
|
${RRC_DIR}/rrc_eNB.c
|
||||||
${RRC_DIR}/rrc_eNB_endc.c
|
${RRC_DIR}/rrc_eNB_endc.c
|
||||||
@@ -1717,6 +1810,20 @@ set(L2_SRC
|
|||||||
${RRC_DIR}/L2_interface_common.c
|
${RRC_DIR}/L2_interface_common.c
|
||||||
${RRC_DIR}/L2_interface_ue.c
|
${RRC_DIR}/L2_interface_ue.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(L2_RRC_SRC
|
||||||
|
${OPENAIR2_DIR}/LAYER2/openair2_proc.c
|
||||||
|
# ${RRC_DIR}/rrc_UE.c
|
||||||
|
${RRC_DIR}/rrc_eNB.c
|
||||||
|
${RRC_DIR}/rrc_eNB_endc.c
|
||||||
|
${RRC_DIR}/rrc_eNB_S1AP.c
|
||||||
|
${RRC_DIR}/rrc_eNB_M2AP.c
|
||||||
|
${RRC_DIR}/rrc_eNB_UE_context.c
|
||||||
|
${RRC_DIR}/rrc_common.c
|
||||||
|
${RRC_DIR}/L2_interface.c
|
||||||
|
${RRC_DIR}/L2_interface_common.c
|
||||||
|
${RRC_DIR}/L2_interface_ue.c
|
||||||
|
)
|
||||||
|
|
||||||
set(L2_LTE_SRC
|
set(L2_LTE_SRC
|
||||||
${RLC_V2}
|
${RLC_V2}
|
||||||
@@ -1724,6 +1831,7 @@ set(L2_LTE_SRC
|
|||||||
|
|
||||||
set(L2_NR_SRC
|
set(L2_NR_SRC
|
||||||
${NR_RLC_SRC}
|
${NR_RLC_SRC}
|
||||||
|
${NR_PDCP_SRC}
|
||||||
${NR_RRC_DIR}/rrc_gNB.c
|
${NR_RRC_DIR}/rrc_gNB.c
|
||||||
${NR_RRC_DIR}/nr_rrc_common.c
|
${NR_RRC_DIR}/nr_rrc_common.c
|
||||||
${NR_RRC_DIR}/L2_nr_interface.c
|
${NR_RRC_DIR}/L2_nr_interface.c
|
||||||
@@ -1748,19 +1856,16 @@ set(L2_SRC_UE
|
|||||||
${RRC_DIR}/L2_interface_ue.c
|
${RRC_DIR}/L2_interface_ue.c
|
||||||
)
|
)
|
||||||
|
|
||||||
set(LTE_NR_L2_SRC_UE
|
set(L2_RRC_SRC_UE
|
||||||
${PDCP_DIR}/pdcp.c
|
${RRC_DIR}/rrc_UE.c
|
||||||
${PDCP_DIR}/pdcp_fifo.c
|
${RRC_DIR}/rrc_common.c
|
||||||
${PDCP_DIR}/pdcp_sequence_manager.c
|
${RRC_DIR}/L2_interface_common.c
|
||||||
${PDCP_DIR}/pdcp_primitives.c
|
${RRC_DIR}/L2_interface_ue.c
|
||||||
${PDCP_DIR}/pdcp_util.c
|
)
|
||||||
${PDCP_DIR}/pdcp_security.c
|
|
||||||
${PDCP_DIR}/pdcp_netlink.c
|
|
||||||
${RLC_V2}
|
|
||||||
)
|
|
||||||
|
|
||||||
set(NR_L2_SRC_UE
|
set(NR_L2_SRC_UE
|
||||||
${NR_RLC_SRC}
|
${NR_RLC_SRC}
|
||||||
|
${NR_PDCP_SRC}
|
||||||
${NR_UE_RRC_DIR}/L2_interface_ue.c
|
${NR_UE_RRC_DIR}/L2_interface_ue.c
|
||||||
${NR_UE_RRC_DIR}/main_ue.c
|
${NR_UE_RRC_DIR}/main_ue.c
|
||||||
${NR_UE_RRC_DIR}/rrc_UE.c
|
${NR_UE_RRC_DIR}/rrc_UE.c
|
||||||
@@ -1786,20 +1891,22 @@ set (MAC_SRC
|
|||||||
${MAC_DIR}/eNB_scheduler_fairRR.c
|
${MAC_DIR}/eNB_scheduler_fairRR.c
|
||||||
${MAC_DIR}/eNB_scheduler_phytest.c
|
${MAC_DIR}/eNB_scheduler_phytest.c
|
||||||
${MAC_DIR}/pre_processor.c
|
${MAC_DIR}/pre_processor.c
|
||||||
|
${MAC_DIR}/slicing/slicing.c
|
||||||
${MAC_DIR}/config.c
|
${MAC_DIR}/config.c
|
||||||
${MAC_DIR}/config_ue.c
|
${MAC_DIR}/config_ue.c
|
||||||
)
|
)
|
||||||
|
|
||||||
set (MAC_NR_SRC
|
set (MAC_NR_SRC
|
||||||
${NR_PHY_INTERFACE_DIR}/NR_IF_Module.c
|
${NR_PHY_INTERFACE_DIR}/NR_IF_Module.c
|
||||||
${NR_MAC_DIR}/main.c
|
${NR_GNB_MAC_DIR}/main.c
|
||||||
${NR_MAC_DIR}/config.c
|
${NR_GNB_MAC_DIR}/config.c
|
||||||
${NR_MAC_DIR}/gNB_scheduler.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler.c
|
||||||
${NR_MAC_DIR}/gNB_scheduler_bch.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_bch.c
|
||||||
${NR_MAC_DIR}/gNB_scheduler_dlsch.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_dlsch.c
|
||||||
${NR_MAC_DIR}/gNB_scheduler_ulsch.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_ulsch.c
|
||||||
${NR_MAC_DIR}/gNB_scheduler_primitives.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_primitives.c
|
||||||
${NR_MAC_DIR}/gNB_scheduler_phytest.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_phytest.c
|
||||||
|
${NR_GNB_MAC_DIR}/gNB_scheduler_RA.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -1811,7 +1918,6 @@ set (MAC_SRC_UE
|
|||||||
${MAC_DIR}/l1_helpers.c
|
${MAC_DIR}/l1_helpers.c
|
||||||
${MAC_DIR}/rar_tools_ue.c
|
${MAC_DIR}/rar_tools_ue.c
|
||||||
${MAC_DIR}/config_ue.c
|
${MAC_DIR}/config_ue.c
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set (MAC_NR_SRC_UE
|
set (MAC_NR_SRC_UE
|
||||||
@@ -1821,6 +1927,9 @@ set (MAC_NR_SRC_UE
|
|||||||
${NR_UE_MAC_DIR}/main_ue_nr.c
|
${NR_UE_MAC_DIR}/main_ue_nr.c
|
||||||
${NR_UE_MAC_DIR}/nr_ue_procedures.c
|
${NR_UE_MAC_DIR}/nr_ue_procedures.c
|
||||||
${NR_UE_MAC_DIR}/nr_ue_dci_configuration.c
|
${NR_UE_MAC_DIR}/nr_ue_dci_configuration.c
|
||||||
|
${NR_UE_MAC_DIR}/nr_l1_helpers.c
|
||||||
|
${NR_UE_MAC_DIR}/nr_ra_procedures.c
|
||||||
|
${NR_UE_MAC_DIR}/rar_tools_nrUE.c
|
||||||
)
|
)
|
||||||
|
|
||||||
set (ENB_APP_SRC
|
set (ENB_APP_SRC
|
||||||
@@ -1866,6 +1975,14 @@ add_library(L2_NR
|
|||||||
${MAC_NR_SRC}
|
${MAC_NR_SRC}
|
||||||
${GNB_APP_SRC}
|
${GNB_APP_SRC}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_library(L2_LTE_NR
|
||||||
|
${L2_RRC_SRC}
|
||||||
|
${MAC_SRC}
|
||||||
|
${ENB_APP_SRC}
|
||||||
|
${MCE_APP_SRC}
|
||||||
|
)
|
||||||
|
|
||||||
add_dependencies(L2_NR rrc_flag nr_rrc_flag s1ap_flag x2_flag)
|
add_dependencies(L2_NR rrc_flag nr_rrc_flag s1ap_flag x2_flag)
|
||||||
|
|
||||||
add_library(L2_UE
|
add_library(L2_UE
|
||||||
@@ -1873,6 +1990,11 @@ add_library(L2_UE
|
|||||||
${MAC_SRC_UE}
|
${MAC_SRC_UE}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_library(L2_UE_LTE_NR
|
||||||
|
${L2_RRC_SRC_UE}
|
||||||
|
${MAC_SRC_UE}
|
||||||
|
)
|
||||||
|
|
||||||
if (NOT ${NOS1})
|
if (NOT ${NOS1})
|
||||||
target_compile_definitions(L2_UE PUBLIC -DPDCP_USE_NETLINK)
|
target_compile_definitions(L2_UE PUBLIC -DPDCP_USE_NETLINK)
|
||||||
endif()
|
endif()
|
||||||
@@ -1884,7 +2006,7 @@ add_library( NR_L2_UE ${NR_L2_SRC_UE} ${MAC_NR_SRC_UE} )
|
|||||||
add_library( MAC_NR_COMMON ${OPENAIR2_DIR}/LAYER2/NR_MAC_COMMON/nr_mac_common.c ${OPENAIR2_DIR}/LAYER2/NR_MAC_gNB/nr_compute_tbs_common.c)
|
add_library( MAC_NR_COMMON ${OPENAIR2_DIR}/LAYER2/NR_MAC_COMMON/nr_mac_common.c ${OPENAIR2_DIR}/LAYER2/NR_MAC_gNB/nr_compute_tbs_common.c)
|
||||||
|
|
||||||
include_directories("${OPENAIR2_DIR}/NR_UE_PHY_INTERFACE")
|
include_directories("${OPENAIR2_DIR}/NR_UE_PHY_INTERFACE")
|
||||||
include_directories("${OPENAIR2_DIR}/LAYER2/NR_MAC_UE")
|
include_directories("${OPENAIR2_DIR}/LAYER2")
|
||||||
include_directories("${OPENAIR1_DIR}/SCHED_NR_UE")
|
include_directories("${OPENAIR1_DIR}/SCHED_NR_UE")
|
||||||
#include_directories("${NFAPI_USER_DIR}"")
|
#include_directories("${NFAPI_USER_DIR}"")
|
||||||
|
|
||||||
@@ -1912,6 +2034,19 @@ set (GTPV1U_SRC
|
|||||||
add_library(GTPV1U ${GTPV1U_SRC})
|
add_library(GTPV1U ${GTPV1U_SRC})
|
||||||
add_dependencies(GTPV1U rrc_flag)
|
add_dependencies(GTPV1U rrc_flag)
|
||||||
|
|
||||||
|
#NR case
|
||||||
|
set (NR_GTPV1U_SRC
|
||||||
|
${NR_RRC_DIR}/rrc_gNB_GTPV1U.c
|
||||||
|
${RRC_DIR}/rrc_eNB_GTPV1U.c
|
||||||
|
${GTPV1U_DIR}/nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c
|
||||||
|
${GTPV1U_DIR}/nw-gtpv1u/src/NwGtpv1uTrxn.c
|
||||||
|
${GTPV1U_DIR}/nw-gtpv1u/src/NwGtpv1uMsg.c
|
||||||
|
${GTPV1U_DIR}/nw-gtpv1u/src/NwGtpv1u.c
|
||||||
|
${GTPV1U_DIR}/gtpv1u_teid_pool.c
|
||||||
|
)
|
||||||
|
add_library(NR_GTPV1U ${NR_GTPV1U_SRC})
|
||||||
|
add_dependencies(NR_GTPV1U rrc_flag)
|
||||||
|
|
||||||
set (MME_APP_SRC
|
set (MME_APP_SRC
|
||||||
${OPENAIR3_DIR}/MME_APP/mme_app.c
|
${OPENAIR3_DIR}/MME_APP/mme_app.c
|
||||||
${OPENAIR3_DIR}/MME_APP/mme_config.c
|
${OPENAIR3_DIR}/MME_APP/mme_config.c
|
||||||
@@ -2239,26 +2374,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
|
||||||
@@ -2411,14 +2548,16 @@ add_library(uescope MODULE ${XFORMS_SOURCE} ${XFORMS_SOURCE_SOFTMODEM} ${XFORMS_
|
|||||||
target_link_libraries(enbscope ${XFORMS_LIBRARIES})
|
target_link_libraries(enbscope ${XFORMS_LIBRARIES})
|
||||||
target_link_libraries(uescope ${XFORMS_LIBRARIES})
|
target_link_libraries(uescope ${XFORMS_LIBRARIES})
|
||||||
|
|
||||||
add_library(gnbscope MODULE ${XFORMS_SOURCE_NR})
|
add_library(nrscope MODULE ${XFORMS_SOURCE_NR})
|
||||||
target_link_libraries(gnbscope ${XFORMS_LIBRARIES})
|
target_link_libraries(nrscope ${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
|
||||||
@@ -2441,7 +2580,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
|
||||||
@@ -2559,12 +2698,12 @@ add_executable(ocp-enb
|
|||||||
${CONFIG_SOURCES}
|
${CONFIG_SOURCES}
|
||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
add_dependencies(ocp-enb rrc_flag s1ap_flag x2_flag oai_iqplayer)
|
add_dependencies(ocp-enb rrc_flag s1ap_flag x2_flag oai_iqplayer coding params_libconfig rfsimulator)
|
||||||
|
|
||||||
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})
|
||||||
@@ -2634,7 +2773,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)
|
||||||
|
|
||||||
@@ -2660,12 +2799,13 @@ add_executable(nr-softmodem
|
|||||||
${OPENAIR_TARGETS}/ARCH/COMMON/record_player.c
|
${OPENAIR_TARGETS}/ARCH/COMMON/record_player.c
|
||||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||||
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||||
|
${OPENAIR3_DIR}/GTPV1-U/gtpv1u_gNB.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||||
${OPENAIR_DIR}/common/utils/utils.c
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
${GTPU_need_ITTI}
|
${GTPU_need_ITTI}
|
||||||
${XFORMS_SOURCE_NR}
|
${XFORMSINTERFACE_SOURCE}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${CONFIG_SOURCES}
|
${CONFIG_SOURCES}
|
||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
@@ -2673,9 +2813,9 @@ add_executable(nr-softmodem
|
|||||||
|
|
||||||
target_link_libraries (nr-softmodem
|
target_link_libraries (nr-softmodem
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS GTPV1U SECU_CN SECU_OSA
|
UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS NR_GTPV1U SECU_CN SECU_OSA
|
||||||
${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} RRC_LIB NR_RRC_LIB
|
${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} RRC_LIB NR_RRC_LIB
|
||||||
S1AP_LIB S1AP_ENB L2 L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
S1AP_LIB S1AP_ENB L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${PROTO_AGENT_LIB} ${FSPT_MSG_LIB}
|
X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${PROTO_AGENT_LIB} ${FSPT_MSG_LIB}
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
|
|
||||||
@@ -2707,7 +2847,7 @@ add_executable(nr-uesoftmodem
|
|||||||
${OPENAIR_DIR}/common/utils/utils.c
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
${XFORMS_SOURCE_NR}
|
${XFORMSINTERFACE_SOURCE}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${UTIL_SRC}
|
${UTIL_SRC}
|
||||||
${CONFIG_SOURCES}
|
${CONFIG_SOURCES}
|
||||||
@@ -2717,9 +2857,9 @@ add_executable(nr-uesoftmodem
|
|||||||
target_link_libraries (nr-uesoftmodem
|
target_link_libraries (nr-uesoftmodem
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB NR_RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB
|
RRC_LIB NR_RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB
|
||||||
|
PHY_COMMON PHY_NR_COMMON PHY_UE PHY_NR_UE PHY_RU LFDS NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB
|
||||||
|
NFAPI_USER_LIB S1AP_LIB S1AP_ENB
|
||||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
|
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
|
||||||
PHY_COMMON PHY_NR_COMMON PHY_UE PHY_NR_UE PHY_RU LFDS L2_UE NR_L2_UE MAC_NR_COMMON S1AP_LIB S1AP_ENB
|
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
|
|
||||||
target_link_libraries (nr-uesoftmodem ${LIBXML2_LIBRARIES})
|
target_link_libraries (nr-uesoftmodem ${LIBXML2_LIBRARIES})
|
||||||
@@ -2729,29 +2869,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
|
||||||
####################################
|
####################################
|
||||||
@@ -2768,7 +2885,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}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2781,7 +2898,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
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2796,44 +2913,90 @@ 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
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(ldpctest
|
|
||||||
${PHY_NR_CODINGIF}
|
# temp_C_flag = CMAKE_C_FLAGS
|
||||||
${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/ldpctest.c
|
#set(CMAKE_C_FLAGS " ")
|
||||||
${T_SOURCE}
|
set (TEMP_C_FLAG ${CMAKE_C_FLAGS})
|
||||||
${SHLIB_LOADER_SOURCES}
|
set (CMAKE_C_FLAGS ${CUDA_CMAKE_C_FLAGS})
|
||||||
)
|
|
||||||
|
set (TEMP_CXX_FLAG ${CMAKE_CXX_FLAGS})
|
||||||
|
set (CMAKE_CXX_FLAGS ${CUDA_CMAKE_CXX_FLAGS})
|
||||||
|
if (CUDA_FOUND)
|
||||||
|
###################################################
|
||||||
|
# For CUDA library
|
||||||
|
###################################################
|
||||||
|
|
||||||
|
CUDA_ADD_LIBRARY(LDPC_CU
|
||||||
|
${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.cu
|
||||||
|
)
|
||||||
|
CUDA_ADD_CUFFT_TO_TARGET(LDPC_CU)
|
||||||
|
cuda_add_executable(ldpctest
|
||||||
|
${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/ldpctest.c
|
||||||
|
${T_SOURCE}
|
||||||
|
${SHLIB_LOADER_SOURCES}
|
||||||
|
)
|
||||||
|
target_link_libraries(ldpctest -ldl
|
||||||
|
-Wl,--start-group
|
||||||
|
LDPC_CU UTIL SIMU PHY_NR CONFIG_LIB
|
||||||
|
-Wl,--end-group
|
||||||
|
m pthread ${ATLAS_LIBRARIES} dl
|
||||||
|
)
|
||||||
|
|
||||||
|
else (CUDA_FOUND)
|
||||||
|
add_executable(ldpctest
|
||||||
|
${PHY_NR_CODINGIF}
|
||||||
|
${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/ldpctest.c
|
||||||
|
${T_SOURCE}
|
||||||
|
${SHLIB_LOADER_SOURCES}
|
||||||
|
)
|
||||||
|
|
||||||
|
endif ()
|
||||||
|
set (CMAKE_C_FLAGS ${TEMP_C_FLAG})
|
||||||
|
set (CMAKE_CXX_FLAGS ${TEMP_CXX_FLAG})
|
||||||
|
|
||||||
|
|
||||||
|
# add_executable(ldpctest
|
||||||
|
# ${PHY_NR_CODINGIF}
|
||||||
|
# ${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/ldpctest.c
|
||||||
|
# ${T_SOURCE}
|
||||||
|
# ${SHLIB_LOADER_SOURCES}
|
||||||
|
# )
|
||||||
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
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(nr_dlschsim
|
add_executable(nr_dlschsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlschsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlschsim.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
${UTIL_SRC}
|
${UTIL_SRC}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${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
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(nr_pbchsim
|
add_executable(nr_pbchsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/pbchsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/pbchsim.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
${UTIL_SRC}
|
${UTIL_SRC}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${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
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2843,17 +3006,19 @@ add_executable(nr_pucchsim
|
|||||||
${OPENAIR_DIR}/common/utils/backtrace.c
|
${OPENAIR_DIR}/common/utils/backtrace.c
|
||||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
${UTIL_SRC}
|
${UTIL_SRC}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${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
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(nr_dlsim
|
add_executable(nr_dlsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlsim.c
|
||||||
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
${OPENAIR_DIR}/executables/softmodem-common.c
|
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||||
@@ -2862,13 +3027,14 @@ 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)
|
||||||
|
|
||||||
add_executable(nr_prachsim
|
add_executable(nr_prachsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/prachsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/prachsim.c
|
||||||
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
${OPENAIR1_DIR}/SCHED_NR/phy_procedures_nr_common.c
|
${OPENAIR1_DIR}/SCHED_NR/phy_procedures_nr_common.c
|
||||||
@@ -2876,22 +3042,25 @@ 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 MAC_UE_NR 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
|
||||||
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
${UTIL_SRC}
|
${UTIL_SRC}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${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
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(nr_ulsim
|
add_executable(nr_ulsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulsim.c
|
||||||
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
${OPENAIR_DIR}/executables/softmodem-common.c
|
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||||
@@ -2900,7 +3069,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)
|
||||||
@@ -2912,6 +3081,7 @@ foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim pr
|
|||||||
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||||
${OPENAIR_DIR}/common/utils/backtrace.c
|
${OPENAIR_DIR}/common/utils/backtrace.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
${XFORMS_SOURCE}
|
${XFORMS_SOURCE}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${CONFIG_SOURCES}
|
${CONFIG_SOURCES}
|
||||||
@@ -2919,7 +3089,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
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2998,9 +3168,9 @@ if (${T_TRACER})
|
|||||||
SECU_OSA SECU_CN SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB default_sched remote_sched RAL
|
SECU_OSA SECU_CN SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB default_sched remote_sched RAL
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_VNF_LIB NFAPI_USER_LIB
|
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_LTE_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 NR_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()
|
||||||
@@ -3043,7 +3213,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
|
||||||
|
|||||||
@@ -142,10 +142,14 @@ Obj.# Case# Test# Description
|
|||||||
(Test 11: 10 MHz, R7.FDD (MCS 25), EVA5, 17.7dB (70%))
|
(Test 11: 10 MHz, R7.FDD (MCS 25), EVA5, 17.7dB (70%))
|
||||||
(TM2 Test 1 10 MHz, R.11 FDD (MCS 14), EVA5, 6.8 dB (70%)),
|
(TM2 Test 1 10 MHz, R.11 FDD (MCS 14), EVA5, 6.8 dB (70%)),
|
||||||
(TM2 Test 1b 20 MHz, R.11-2 FDD (MCS 13), EVA5, 5.9 dB (70%)),
|
(TM2 Test 1b 20 MHz, R.11-2 FDD (MCS 13), EVA5, 5.9 dB (70%)),
|
||||||
01 51 11 nr_ulsim Test cases. (Test1: MCS 9),
|
01 51 11 nr_ulsim Test cases. (Test1: MCS 9 106 PRBs),
|
||||||
(Test2: MCS 16),
|
(Test2: MCS 16 50 PRBs),
|
||||||
(Test3: MCS 28)
|
(Test3: MCS 28 50 PRBs),
|
||||||
|
(Test4: MCS 9 217 PRBs),
|
||||||
|
(Test5: MCS 9 273 PRBs)
|
||||||
|
01 51 12 nr_prachsim Test cases.(Test1: 106 PRBs),
|
||||||
|
(Test2: 217 PRBs),
|
||||||
|
(Test3: 273 PRBs)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1036,7 +1036,9 @@
|
|||||||
<testCase id="015103">
|
<testCase id="015103">
|
||||||
<class>execution</class>
|
<class>execution</class>
|
||||||
<desc>polartest Test cases. (Test1: PBCH polar test),
|
<desc>polartest Test cases. (Test1: PBCH polar test),
|
||||||
(Test2: DCI polar test)</desc>
|
(Test2: DCI polar test),
|
||||||
|
(Test3: UCI polar test,6-bit CRC),
|
||||||
|
(Test4: UCI polar test,11-bit CRC)</desc>
|
||||||
<pre_compile_prog></pre_compile_prog>
|
<pre_compile_prog></pre_compile_prog>
|
||||||
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||||
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||||
@@ -1044,8 +1046,10 @@
|
|||||||
<pre_exec_args></pre_exec_args>
|
<pre_exec_args></pre_exec_args>
|
||||||
<main_exec> $OPENAIR_DIR/targets/bin/polartest.Rel15</main_exec>
|
<main_exec> $OPENAIR_DIR/targets/bin/polartest.Rel15</main_exec>
|
||||||
<main_exec_args>-q -s-10 -f0
|
<main_exec_args>-q -s-10 -f0
|
||||||
-q -s-10 -f0 -m1</main_exec_args>
|
-q -s-10 -f0 -m1
|
||||||
<tags>polartest.test1 polartest.test2</tags>
|
-q -s-2 -f2 -m2 -k12
|
||||||
|
-q -s-2 -f2 -m2 -k20</main_exec_args>
|
||||||
|
<tags>polartest.test1 polartest.test2 polartest.test3 polartest.test4</tags>
|
||||||
<search_expr_true>BLER= 0.000000</search_expr_true>
|
<search_expr_true>BLER= 0.000000</search_expr_true>
|
||||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||||
<nruns>3</nruns>
|
<nruns>3</nruns>
|
||||||
@@ -1067,9 +1071,9 @@
|
|||||||
<main_exec> $OPENAIR_DIR/targets/bin/nr_pbchsim.Rel15</main_exec>
|
<main_exec> $OPENAIR_DIR/targets/bin/nr_pbchsim.Rel15</main_exec>
|
||||||
<main_exec_args>-s0 -S1 -n1000 -R106
|
<main_exec_args>-s0 -S1 -n1000 -R106
|
||||||
-s0 -S1 -n10 -I -R106
|
-s0 -S1 -n10 -I -R106
|
||||||
-s0 -S1 -n1000 -R217
|
-s0 -S1 -n1000 -R217
|
||||||
-s0 -S1 -n10 -I -R217
|
-s0 -S1 -n10 -I -R217
|
||||||
-s0 -S1 -n1000 -R273
|
-s0 -S1 -n1000 -R273
|
||||||
-s0 -S1 -n10 -I -R273</main_exec_args>
|
-s0 -S1 -n10 -I -R273</main_exec_args>
|
||||||
<tags>nr_pbchsim.test1 nr_pbchsim.test2 nr_pbchsim.test3 nr_pbchsim.test4 nr_pbchsim.test5 nr_pbchsim.test6</tags>
|
<tags>nr_pbchsim.test1 nr_pbchsim.test2 nr_pbchsim.test3 nr_pbchsim.test4 nr_pbchsim.test5 nr_pbchsim.test6</tags>
|
||||||
<search_expr_true>PBCH test OK</search_expr_true>
|
<search_expr_true>PBCH test OK</search_expr_true>
|
||||||
@@ -1087,8 +1091,11 @@
|
|||||||
(Test6: 217 PRB 100 PDSCH-PRBs),
|
(Test6: 217 PRB 100 PDSCH-PRBs),
|
||||||
(Test7: 217 PRB 80 PDSCH-Offset),
|
(Test7: 217 PRB 80 PDSCH-Offset),
|
||||||
(Test8: 217 PRB 100 PDSCH-PRBs 110 PDSCH-Offset),
|
(Test8: 217 PRB 100 PDSCH-PRBs 110 PDSCH-Offset),
|
||||||
(Test9: 106 PRBs 50 PDSCH-PRBs MCS Index 27)
|
(Test9: 106 PRBs 50 PDSCH-PRBs MCS Index 27),
|
||||||
(Test10: 106 PRBs 50 PDSCH-PRBs MCS Index 16)</desc>
|
(Test10: 106 PRBs 50 PDSCH-PRBs MCS Index 16),
|
||||||
|
(Test11: HARQ test 25% TP (4 rounds),
|
||||||
|
(Test12: HARQ test 33% TP (3 rounds),
|
||||||
|
(Test13: HARQ test 50% TP (2 rounds)</desc>
|
||||||
<pre_compile_prog></pre_compile_prog>
|
<pre_compile_prog></pre_compile_prog>
|
||||||
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||||
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||||
@@ -1104,8 +1111,11 @@
|
|||||||
-n100 -R217 -a80 -s5
|
-n100 -R217 -a80 -s5
|
||||||
-n100 -R217 -a110 -s5 -b100
|
-n100 -R217 -a110 -s5 -b100
|
||||||
-n100 -e27 -s30
|
-n100 -e27 -s30
|
||||||
-n100 -e16 -s10</main_exec_args>
|
-n100 -e16 -s10
|
||||||
<tags>nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10</tags>
|
-n100 -s1 -t25
|
||||||
|
-n100 -s1 -t33
|
||||||
|
-n100 -s1 -t50</main_exec_args>
|
||||||
|
<tags>nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13</tags>
|
||||||
<search_expr_true>PDSCH test OK</search_expr_true>
|
<search_expr_true>PDSCH test OK</search_expr_true>
|
||||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||||
<nruns>3</nruns>
|
<nruns>3</nruns>
|
||||||
@@ -1179,15 +1189,20 @@
|
|||||||
<desc>nr_pucchsim Test cases. (Test1: Format 0 1-bit ACK miss 106 PRB),
|
<desc>nr_pucchsim Test cases. (Test1: Format 0 1-bit ACK miss 106 PRB),
|
||||||
(Test2: Format 0 2-bit ACK miss 106 PRB),
|
(Test2: Format 0 2-bit ACK miss 106 PRB),
|
||||||
(Test3: Format 0 2-bit ACK miss, 1-bit SR 106 PRB),
|
(Test3: Format 0 2-bit ACK miss, 1-bit SR 106 PRB),
|
||||||
(Test4: Format 2 3-bit 106 PRB),
|
(Test4: Format 2 3-bit 2/106 PRB),
|
||||||
(Test5: Format 2 4-bit 106 PRB),
|
(Test5: Format 2 4-bit 2/106 PRB),
|
||||||
(Test6: Format 2 5-bit 106 PRB),
|
(Test6: Format 2 5-bit 2/106 PRB),
|
||||||
(Test7: Format 2 6-bit 106 PRB),
|
(Test7: Format 2 6-bit 2/106 PRB),
|
||||||
(Test8: Format 2 7-bit 106 PRB),
|
(Test8: Format 2 7-bit 2/106 PRB),
|
||||||
(Test9: Format 2 8-bit 106 PRB),
|
(Test9: Format 2 8-bit 2/106 PRB),
|
||||||
(Test10: Format 2 9-bit 106 PRB),
|
(Test10: Format 2 9-bit 2/106 PRB),
|
||||||
(Test11: Format 2 10-bit 106 PRB),
|
(Test11: Format 2 10-bit 2/106 PRB),
|
||||||
(Test12: Format 2 11-bit 106 PRB)</desc>
|
(Test12: Format 2 11-bit 2/106 PRB),
|
||||||
|
(Test13: Format 2 12-bit 8/106 PRB),
|
||||||
|
(Test14: Format 2 19-bit 8/106 PRB),
|
||||||
|
(Test15: Format 2 32-bit 8/106 PRB),
|
||||||
|
(Test16: Format 2 32-bit 16/106 PRB),
|
||||||
|
(Test17: Format 2 64-bit 16/106 PRB)</desc>
|
||||||
<pre_compile_prog></pre_compile_prog>
|
<pre_compile_prog></pre_compile_prog>
|
||||||
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||||
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||||
@@ -1206,8 +1221,12 @@
|
|||||||
-R 106 -i 1 -P 2 -b 9 -s5 -n1000
|
-R 106 -i 1 -P 2 -b 9 -s5 -n1000
|
||||||
-R 106 -i 1 -P 2 -b 10 -s6 -n1000
|
-R 106 -i 1 -P 2 -b 10 -s6 -n1000
|
||||||
-R 106 -i 1 -P 2 -b 11 -s6 -n1000
|
-R 106 -i 1 -P 2 -b 11 -s6 -n1000
|
||||||
</main_exec_args>
|
-R 106 -i 1 -P 2 -q8 -b 12 -s-3 -n1000
|
||||||
<tags>nr_pucchsim.test1 nr_pucchsim.test2 nr_pucchsim.test3 nr_pucchsim.test4 nr_pucchsim.test5 nr_pucchsim.test6 nr_pucchsim.test7 nr_pucchsim.test8 nr_pucchsim.test9 nr_pucchsim.test10 nr_pucchsim.test11 nr_pucchsim.test12 </tags>
|
-R 106 -i 1 -P 2 -q8 -b 19 -s-3 -n1000
|
||||||
|
-R 106 -i 1 -P 2 -q8 -b 32 -s-3 -n1000
|
||||||
|
-R 106 -i 1 -P 2 -q16 -b 32 -s-3 -n1000
|
||||||
|
-R 106 -i 1 -P 2 -q16 -b 64 -s-3 -n1000</main_exec_args>
|
||||||
|
<tags>nr_pucchsim.test1 nr_pucchsim.test2 nr_pucchsim.test3 nr_pucchsim.test4 nr_pucchsim.test5 nr_pucchsim.test6 nr_pucchsim.test7 nr_pucchsim.test8 nr_pucchsim.test9 nr_pucchsim.test10 nr_pucchsim.test11 nr_pucchsim.test12 nr_pucchsim.test13 nr_pucchsim.test14 nr_pucchsim.test15 nr_pucchsim.test16 nr_pucchsim.test17</tags>
|
||||||
<search_expr_true>PUCCH test OK</search_expr_true>
|
<search_expr_true>PUCCH test OK</search_expr_true>
|
||||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||||
<nruns>3</nruns>
|
<nruns>3</nruns>
|
||||||
@@ -1275,6 +1294,28 @@
|
|||||||
<nruns>3</nruns>
|
<nruns>3</nruns>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="015112">
|
||||||
|
<class>execution</class>
|
||||||
|
<desc>nr_prachsim Test cases. (Test1: 106 PRBs - Prach format A2),
|
||||||
|
(Test2: 217 PRBs - Prach format A2),
|
||||||
|
(Test3: 273 PRBs - Prach format A2),
|
||||||
|
(Test4: 106 PRBs - Prach format 0)</desc>
|
||||||
|
<pre_compile_prog></pre_compile_prog>
|
||||||
|
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||||
|
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||||
|
<pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec>
|
||||||
|
<pre_exec_args></pre_exec_args>
|
||||||
|
<main_exec> $OPENAIR_DIR/targets/bin/nr_prachsim.Rel15</main_exec>
|
||||||
|
<main_exec_args>-a -s -30 -n 100 -p 63 -R 106
|
||||||
|
-a -s -30 -n 100 -p 63 -R 217
|
||||||
|
-a -s -30 -n 100 -p 63 -R 273
|
||||||
|
-a -s -30 -n 100 -p 63 -R 106 -c 4</main_exec_args>
|
||||||
|
<tags>nr_prachsim.test1 nr_prachsim.test2 nr_prachsim.test3 nr_prachsim.test4</tags>
|
||||||
|
<search_expr_true>PRACH test OK</search_expr_true>
|
||||||
|
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||||
|
<nruns>3</nruns>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="015500" >
|
<testCase id="015500" >
|
||||||
<class>lte-softmodem</class>
|
<class>lte-softmodem</class>
|
||||||
<desc></desc>
|
<desc></desc>
|
||||||
|
|||||||
+20
-8
@@ -67,7 +67,7 @@ UE_TIMING_TRACE="False"
|
|||||||
USRP_REC_PLAY="False"
|
USRP_REC_PLAY="False"
|
||||||
BUILD_ECLIPSE=0
|
BUILD_ECLIPSE=0
|
||||||
NR="False"
|
NR="False"
|
||||||
OPTIONAL_LIBRARIES="telnetsrv enbscope uescope msc"
|
OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope msc"
|
||||||
trap handle_ctrl_c INT
|
trap handle_ctrl_c INT
|
||||||
|
|
||||||
function print_help() {
|
function print_help() {
|
||||||
@@ -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,12 +580,13 @@ 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
|
||||||
|
|
||||||
cmake_file=$DIR/$build_dir/CMakeLists.txt
|
cmake_file=$DIR/$build_dir/CMakeLists.txt
|
||||||
echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
|
echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
|
||||||
|
echo "project (OpenAirInterface)" >> $cmake_file
|
||||||
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
||||||
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
||||||
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
|
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
|
||||||
@@ -606,6 +613,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
|
||||||
@@ -702,6 +712,7 @@ function main() {
|
|||||||
echo_info "Compiling physical unitary tests simulators"
|
echo_info "Compiling physical unitary tests simulators"
|
||||||
# TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
|
# TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
|
||||||
simlist="dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim"
|
simlist="dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim"
|
||||||
|
# simlist="ldpctest"
|
||||||
for f in $simlist ; do
|
for f in $simlist ; do
|
||||||
compilations \
|
compilations \
|
||||||
phy_simulators $f \
|
phy_simulators $f \
|
||||||
@@ -820,7 +831,7 @@ function main() {
|
|||||||
####################################################
|
####################################################
|
||||||
# Build RF device and transport protocol libraries #
|
# Build RF device and transport protocol libraries #
|
||||||
####################################################
|
####################################################
|
||||||
if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HWLAT" = "1" ] ; then
|
if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HWLAT" = "1" ] ; then
|
||||||
|
|
||||||
# build RF device libraries
|
# build RF device libraries
|
||||||
if [ "$HW" != "None" ] ; then
|
if [ "$HW" != "None" ] ; then
|
||||||
@@ -896,7 +907,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
|
||||||
@@ -958,6 +969,7 @@ function main() {
|
|||||||
wait
|
wait
|
||||||
else
|
else
|
||||||
echo_info "10. Bypassing the Tests ..."
|
echo_info "10. Bypassing the Tests ..."
|
||||||
|
echo_success "BUILD SHOULD BE SUCCESSFUL"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,17 +169,29 @@ 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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#check_errors:
|
||||||
|
# print error message if the compilation had errors
|
||||||
|
#argument:
|
||||||
|
# $1: log file
|
||||||
|
check_errors() {
|
||||||
|
#we look for 'warning:' in the compilation log file
|
||||||
|
error_count=`grep "error:" "$1" | wc -l`
|
||||||
|
if [ $error_count -gt 0 ]; then
|
||||||
|
echo_error "ERROR: $error_count error. See $1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
compilations() {
|
compilations() {
|
||||||
cd $OPENAIR_DIR/cmake_targets/$1/build
|
cd $OPENAIR_DIR/cmake_targets/$1/build
|
||||||
|
echo_info "Log file for compilation is being written to: $dlog/$2.$REL.txt"
|
||||||
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
|
||||||
@@ -192,15 +206,22 @@ compilations() {
|
|||||||
$COV_SCAN_PREFIX make -j`nproc` $2
|
$COV_SCAN_PREFIX make -j`nproc` $2
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
ret=$?
|
||||||
} > $dlog/$2.$REL.txt 2>&1
|
} > $dlog/$2.$REL.txt 2>&1
|
||||||
set -e
|
set -e
|
||||||
echo_info "Log file for compilation has been written to: $dlog/$2.$REL.txt"
|
if [[ $ret -ne 0 ]]; then
|
||||||
|
check_warnings "$dlog/$2.$REL.txt"
|
||||||
|
check_errors "$dlog/$2.$REL.txt"
|
||||||
|
echo_error "$2 compilation failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
if [ -s $3 ] ; then
|
if [ -s $3 ] ; then
|
||||||
cp $3 $4
|
cp $3 $4
|
||||||
echo_success "$2 compiled"
|
echo_success "$2 compiled"
|
||||||
check_warnings "$dlog/$2.$REL.txt"
|
check_warnings "$dlog/$2.$REL.txt"
|
||||||
else
|
else
|
||||||
|
check_warnings "$dlog/$2.$REL.txt"
|
||||||
|
check_errors "$dlog/$2.$REL.txt"
|
||||||
echo_error "$2 compilation failed"
|
echo_error "$2 compilation failed"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -179,8 +179,8 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) {
|
|||||||
*(cfgoptions[i].u64ptr) = (uint64_t)llu;
|
*(cfgoptions[i].u64ptr) = (uint64_t)llu;
|
||||||
printf_params("[LIBCONFIG] %s: %llu\n", cfgpath,(long long unsigned)(*(cfgoptions[i].u64ptr)) );
|
printf_params("[LIBCONFIG] %s: %llu\n", cfgpath,(long long unsigned)(*(cfgoptions[i].u64ptr)) );
|
||||||
} else {
|
} else {
|
||||||
*(cfgoptions[i].iptr) = llu;
|
*(cfgoptions[i].i64ptr) = llu;
|
||||||
printf_params("[LIBCONFIG] %s: %llu\n", cfgpath,(long long unsigned)(*(cfgoptions[i].i64ptr)) );
|
printf_params("[LIBCONFIG] %s: %lld\n", cfgpath,(long long)(*(cfgoptions[i].i64ptr)) );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
defval=config_setdefault_int64(&(cfgoptions[i]),prefix);
|
defval=config_setdefault_int64(&(cfgoptions[i]),prefix);
|
||||||
|
|||||||
@@ -518,7 +518,29 @@ const char* eurecomFunctionsNames[] = {
|
|||||||
"wakeup_txfh",
|
"wakeup_txfh",
|
||||||
"gNB_thread_rxtx0",
|
"gNB_thread_rxtx0",
|
||||||
"gNB_thread_rxtx1",
|
"gNB_thread_rxtx1",
|
||||||
"ru_thread_tx_wait"
|
"ru_thread_tx_wait",
|
||||||
|
"gNB_ulsch_decoding",
|
||||||
|
"gNB_pdsch_codeword_scrambling",
|
||||||
|
"gNB_dlsch_encoding",
|
||||||
|
"gNB_pdsch_modulation",
|
||||||
|
"gNB_pdcch_tx",
|
||||||
|
"phy_procedures_gNB_tx",
|
||||||
|
"phy_procedures_gNB_common_tx",
|
||||||
|
"phy_procedures_gNB_uespec_rx",
|
||||||
|
"nr_rx_pusch",
|
||||||
|
"nr_ulsch_procedures_rx",
|
||||||
|
"macxface_gNB_dlsch_ulsch_scheduler",
|
||||||
|
|
||||||
|
/*NR ue-softmodem signal*/
|
||||||
|
"nr_ue_ulsch_encoding",
|
||||||
|
"nr_segmentation",
|
||||||
|
"ldpc_encoder_optim",
|
||||||
|
"nr_rate_matching_ldpc",
|
||||||
|
"nr_interleaving_ldpc",
|
||||||
|
"pss_synchro_nr",
|
||||||
|
"pss_search_time_nr",
|
||||||
|
"nr_initial_ue_sync",
|
||||||
|
"beam_switching_gpio"
|
||||||
};
|
};
|
||||||
|
|
||||||
struct vcd_module_s vcd_modules[] = {
|
struct vcd_module_s vcd_modules[] = {
|
||||||
|
|||||||
@@ -511,6 +511,29 @@ typedef enum {
|
|||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX0,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX0,
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX1,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PROC_RXTX1,
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_RU_TX_WAIT,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_RU_TX_WAIT,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_ULSCH_DECODING,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_CODEWORD_SCRAMBLING,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ENCODING,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_MODULATION,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_COMMON_TX,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_UESPEC_RX,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_RX_PUSCH,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_ULSCH_PROCEDURES_RX,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ULSCH_SCHEDULER,
|
||||||
|
|
||||||
|
/* NR ue-softmodem signal*/
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_UE_ULSCH_ENCODING,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_SEGMENTATION,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_LDPC_ENCODER_OPTIM,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_RATE_MATCHING_LDPC,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_INTERLEAVING_LDPC,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_PSS_SYNCHRO_NR,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_PSS_SEARCH_TIME_NR,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_INITIAL_UE_SYNC,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_BEAM_SWITCHING_GPIO,
|
||||||
|
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_END
|
VCD_SIGNAL_DUMPER_FUNCTIONS_END
|
||||||
} vcd_signal_dump_functions;
|
} vcd_signal_dump_functions;
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ typedef struct {
|
|||||||
} T_cache_t;
|
} T_cache_t;
|
||||||
|
|
||||||
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
|
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
|
||||||
#define VCD_NUM_FUNCTIONS (249)
|
#define VCD_NUM_FUNCTIONS (269)
|
||||||
|
|
||||||
/* number of VCD variables (to be kept up to date! see in T_messages.txt) */
|
/* number of VCD variables (to be kept up to date! see in T_messages.txt) */
|
||||||
#define VCD_NUM_VARIABLES (187)
|
#define VCD_NUM_VARIABLES (187)
|
||||||
|
|||||||
@@ -3393,3 +3393,106 @@ ID = VCD_FUNCTION_RU_TX_WAIT
|
|||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
VCD_NAME = ru_thread_tx_wait
|
VCD_NAME = ru_thread_tx_wait
|
||||||
|
ID = VCD_FUNCTION_PHY_gNB_ULSCH_DECODING
|
||||||
|
DESC = VCD function PHY_gNB_ULSCH_DECODING
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = gNB_ulsch_decoding
|
||||||
|
ID = VCD_FUNCTION_gNB_PDSCH_CODEWORD_SCRAMBLING
|
||||||
|
DESC = VCD function gNB_PDSCH_CODEWORD_SCRAMBLING
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = gNB_pdsch_codeword_scrambling
|
||||||
|
ID = VCD_FUNCTION_gNB_DLSCH_ENCODING
|
||||||
|
DESC = VCD function gNB_DLSCH_ENCODING
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = gNB_dlsch_encoding
|
||||||
|
ID = VCD_FUNCTION_gNB_PDSCH_MODULATION
|
||||||
|
DESC = VCD function gNB_PDSCH_MODULATION
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = gNB_pdsch_modulation
|
||||||
|
ID = VCD_FUNCTION_PHY_gNB_PDCCH_TX
|
||||||
|
DESC = VCD function PHY_gNB_PDCCH_TX
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = gNB_pdcch_tx
|
||||||
|
ID = VCD_FUNCTION_PHY_PROCEDURES_gNB_TX
|
||||||
|
DESC = VCD function PHY_PROCEDURES_gNB_TX
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = phy_procedures_gNB_tx
|
||||||
|
ID = VCD_FUNCTION_PHY_PROCEDURES_gNB_COMMON_TX
|
||||||
|
DESC = VCD function PHY_PROCEDURES_gNB_COMMON_TX
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = phy_procedures_gNB_common_tx
|
||||||
|
ID = VCD_FUNCTION_PHY_PROCEDURES_gNB_UESPEC_RX
|
||||||
|
DESC = VCD function PHY_PROCEDURES_gNB_UESPEC_RX
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = phy_procedures_gNB_uespec_rx
|
||||||
|
ID = VCD_FUNCTION_NR_RX_PUSCH
|
||||||
|
DESC = VCD function NR_RX_PUSCH
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = nr_rx_pusch
|
||||||
|
ID = VCD_FUNCTION_NR_ULSCH_PROCEDURES_RX
|
||||||
|
DESC = VCD function NR_ULSCH_PROCEDURES_RX
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = nr_ulsch_procedures_rx
|
||||||
|
ID = VCD_FUNCTION_gNB_DLSCH_ULSCH_SCHEDULER
|
||||||
|
DESC = VCD function gNB_DLSCH_ULSCH_SCHEDULER
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = macxface_gNB_dlsch_ulsch_scheduler
|
||||||
|
|
||||||
|
#function for nrUE
|
||||||
|
ID = VCD_FUNCTION_NR_UE_ULSCH_ENCODING
|
||||||
|
DESC = VCD function NR_UE_ULSCH_ENCODING
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = nr_ue_ulsch_encoding
|
||||||
|
ID = VCD_FUNCTION_NR_SEGMENTATION
|
||||||
|
DESC = VCD function NR_SEGMENTATION
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = nr_segmentation
|
||||||
|
ID = VCD_FUNCTION_LDPC_ENCODER_OPTIM
|
||||||
|
DESC = VCD function LDPC_ENCODER_OPTIM
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = ldpc_encoder_optim
|
||||||
|
ID = VCD_FUNCTION_NR_RATE_MATCHING_LDPC
|
||||||
|
DESC = VCD function NR_RATE_MATCHING_LDPC
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = nr_rate_matching_ldpc
|
||||||
|
ID = VCD_FUNCTION_NR_INTERLEAVING_LDPC
|
||||||
|
DESC = VCD function NR_INTERLEAVING_LDPC
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = nr_interleaving_ldpc
|
||||||
|
ID = VCD_FUNCTION_PSS_SYNCHRO_NR
|
||||||
|
DESC = VCD function PSS_SYNCHRO_NR
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = pss_synchro_nr
|
||||||
|
ID = VCD_FUNCTION_PSS_SEARCH_TIME_NR
|
||||||
|
DESC = VCD function PSS_SEARCH_TIME_NR
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = pss_search_time_nr
|
||||||
|
ID = VCD_FUNCTION_NR_INITIAL_UE_SYNC
|
||||||
|
DESC = VCD function NR_INITIAL_UE_SYNC
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = nr_initial_ue_sync
|
||||||
|
ID = VCD_FUNCTION_BEAM_SWITCHING_GPIO
|
||||||
|
DESC = VCD function BEAM_SWITCHING_GPIO
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = beam_switching_gpio
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ int NRRIV2PRBOFFSET(int locationAndBandwidth,int N_RB) {
|
|||||||
else return(N_RB-1-tmp2);
|
else return(N_RB-1-tmp2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TS 38.214 ch. 6.1.2.2.2 - Resource allocation type 1 for DL and UL */
|
||||||
int PRBalloc_to_locationandbandwidth0(int NPRB,int RBstart,int BWPsize) {
|
int PRBalloc_to_locationandbandwidth0(int NPRB,int RBstart,int BWPsize) {
|
||||||
AssertFatal(NPRB>0 && (NPRB + RBstart <= BWPsize),"Illegal NPRB/RBstart Configuration (%d,%d) for BWPsize %d\n",NPRB,RBstart,BWPsize);
|
AssertFatal(NPRB>0 && (NPRB + RBstart <= BWPsize),"Illegal NPRB/RBstart Configuration (%d,%d) for BWPsize %d\n",NPRB,RBstart,BWPsize);
|
||||||
|
|
||||||
@@ -62,14 +63,21 @@ int PRBalloc_to_locationandbandwidth0(int NPRB,int RBstart,int BWPsize) {
|
|||||||
int PRBalloc_to_locationandbandwidth(int NPRB,int RBstart) {
|
int PRBalloc_to_locationandbandwidth(int NPRB,int RBstart) {
|
||||||
return(PRBalloc_to_locationandbandwidth0(NPRB,RBstart,275));
|
return(PRBalloc_to_locationandbandwidth0(NPRB,RBstart,275));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Target code rate tables indexed by Imcs
|
/// Target code rate tables indexed by Imcs
|
||||||
|
/* TS 38.214 table 5.1.3.1-1 - MCS index table 1 for PDSCH */
|
||||||
uint16_t nr_target_code_rate_table1[29] = {120, 157, 193, 251, 308, 379, 449, 526, 602, 679, 340, 378, 434, 490, 553, \
|
uint16_t nr_target_code_rate_table1[29] = {120, 157, 193, 251, 308, 379, 449, 526, 602, 679, 340, 378, 434, 490, 553, \
|
||||||
616, 658, 438, 466, 517, 567, 616, 666, 719, 772, 822, 873, 910, 948};
|
616, 658, 438, 466, 517, 567, 616, 666, 719, 772, 822, 873, 910, 948};
|
||||||
// Imcs values 20 and 26 have been multiplied by 2 to avoid the floating point
|
|
||||||
|
/* TS 38.214 table 5.1.3.1-2 - MCS index table 2 for PDSCH */
|
||||||
|
// Imcs values 20 and 26 have been multiplied by 2 to avoid the floating point
|
||||||
uint16_t nr_target_code_rate_table2[28] = {120, 193, 308, 449, 602, 378, 434, 490, 553, 616, 658, 466, 517, 567, \
|
uint16_t nr_target_code_rate_table2[28] = {120, 193, 308, 449, 602, 378, 434, 490, 553, 616, 658, 466, 517, 567, \
|
||||||
616, 666, 719, 772, 822, 873, 1365, 711, 754, 797, 841, 885, 1833, 948};
|
616, 666, 719, 772, 822, 873, 1365, 711, 754, 797, 841, 885, 1833, 948};
|
||||||
|
|
||||||
|
/* TS 38.214 table 5.1.3.1-3 - MCS index table 3 for PDSCH */
|
||||||
uint16_t nr_target_code_rate_table3[29] = {30, 40, 50, 64, 78, 99, 120, 157, 193, 251, 308, 379, 449, 526, 602, 340, \
|
uint16_t nr_target_code_rate_table3[29] = {30, 40, 50, 64, 78, 99, 120, 157, 193, 251, 308, 379, 449, 526, 602, 340, \
|
||||||
378, 434, 490, 553, 616, 438, 466, 517, 567, 616, 666, 719, 772};
|
378, 434, 490, 553, 616, 438, 466, 517, 567, 616, 666, 719, 772};
|
||||||
|
|
||||||
uint16_t nr_tbs_table[93] = {24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184, 192, 208, 224, 240, 256, 272, 288, 304, 320, \
|
uint16_t nr_tbs_table[93] = {24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184, 192, 208, 224, 240, 256, 272, 288, 304, 320, \
|
||||||
336, 352, 368, 384, 408, 432, 456, 480, 504, 528, 552, 576, 608, 640, 672, 704, 736, 768, 808, 848, 888, 928, 984, 1032, 1064, 1128, 1160, 1192, 1224, 1256, \
|
336, 352, 368, 384, 408, 432, 456, 480, 504, 528, 552, 576, 608, 640, 672, 704, 736, 768, 808, 848, 888, 928, 984, 1032, 1064, 1128, 1160, 1192, 1224, 1256, \
|
||||||
1288, 1320, 1352, 1416, 1480, 1544, 1608, 1672, 1736, 1800, 1864, 1928, 2024, 2088, 2152, 2216, 2280, 2408, 2472, 2536, 2600, 2664, 2728, 2792, 2856, 2976, \
|
1288, 1320, 1352, 1416, 1480, 1544, 1608, 1672, 1736, 1800, 1864, 1928, 2024, 2088, 2152, 2216, 2280, 2408, 2472, 2536, 2600, 2664, 2728, 2792, 2856, 2976, \
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ task_list_t tasks[TASK_MAX];
|
|||||||
|
|
||||||
void *itti_malloc(task_id_t origin_task_id, task_id_t destination_task_id, ssize_t size) {
|
void *itti_malloc(task_id_t origin_task_id, task_id_t destination_task_id, ssize_t size) {
|
||||||
void *ptr = NULL;
|
void *ptr = NULL;
|
||||||
AssertFatal ((ptr=malloc (size)) != NULL, "Memory allocation of %zu bytes failed (%d -> %d)!\n",
|
AssertFatal ((ptr=calloc (size, 1)) != NULL, "Memory allocation of %zu bytes failed (%d -> %d)!\n",
|
||||||
size, origin_task_id, destination_task_id);
|
size, origin_task_id, destination_task_id);
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
@@ -91,8 +91,16 @@ task_list_t tasks[TASK_MAX];
|
|||||||
return (EXIT_SUCCESS);
|
return (EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// in the two following functions, the +32 in malloc is there to deal with gcc memory alignment
|
||||||
|
// because a struct size can be larger than sum(sizeof(struct components))
|
||||||
|
// We should remove the itti principle of a huge union for all types of messages in paramter "msg_t ittiMsg"
|
||||||
|
// to use a more C classical pointer casting "void * ittiMsg", later casted in the right struct
|
||||||
|
// but we would have to change all legacy macros, as per this example
|
||||||
|
// #define S1AP_REGISTER_ENB_REQ(mSGpTR) (mSGpTR)->ittiMsg.s1ap_register_enb_req
|
||||||
|
// would become
|
||||||
|
// #define S1AP_REGISTER_ENB_REQ(mSGpTR) (s1ap_register_enb_req) mSGpTR)->ittiMsg
|
||||||
MessageDef *itti_alloc_new_message_sized(task_id_t origin_task_id, MessagesIds message_id, MessageHeaderSize size) {
|
MessageDef *itti_alloc_new_message_sized(task_id_t origin_task_id, MessagesIds message_id, MessageHeaderSize size) {
|
||||||
MessageDef *temp = (MessageDef *)itti_malloc (origin_task_id, TASK_UNKNOWN, sizeof(MessageHeader) + size);
|
MessageDef *temp = (MessageDef *)itti_malloc (origin_task_id, TASK_UNKNOWN, sizeof(MessageHeader) +32 + size);
|
||||||
temp->ittiMsgHeader.messageId = message_id;
|
temp->ittiMsgHeader.messageId = message_id;
|
||||||
temp->ittiMsgHeader.originTaskId = origin_task_id;
|
temp->ittiMsgHeader.originTaskId = origin_task_id;
|
||||||
temp->ittiMsgHeader.ittiMsgSize = size;
|
temp->ittiMsgHeader.ittiMsgSize = size;
|
||||||
@@ -100,7 +108,7 @@ task_list_t tasks[TASK_MAX];
|
|||||||
}
|
}
|
||||||
|
|
||||||
MessageDef *itti_alloc_new_message(task_id_t origin_task_id, MessagesIds message_id) {
|
MessageDef *itti_alloc_new_message(task_id_t origin_task_id, MessagesIds message_id) {
|
||||||
int size=sizeof(MessageHeader) + messages_info[message_id].size;
|
int size=sizeof(MessageHeader) + 32 + messages_info[message_id].size;
|
||||||
MessageDef *temp = (MessageDef *)itti_malloc (origin_task_id, TASK_UNKNOWN, size);
|
MessageDef *temp = (MessageDef *)itti_malloc (origin_task_id, TASK_UNKNOWN, size);
|
||||||
temp->ittiMsgHeader.messageId = message_id;
|
temp->ittiMsgHeader.messageId = message_id;
|
||||||
temp->ittiMsgHeader.originTaskId = origin_task_id;
|
temp->ittiMsgHeader.originTaskId = origin_task_id;
|
||||||
|
|||||||
@@ -256,6 +256,7 @@ typedef struct IttiMsgText_s {
|
|||||||
//#include <proto.h>
|
//#include <proto.h>
|
||||||
|
|
||||||
#include <openair3/GTPV1-U/gtpv1u_eNB_task.h>
|
#include <openair3/GTPV1-U/gtpv1u_eNB_task.h>
|
||||||
|
#include <openair3/GTPV1-U/gtpv1u_gNB_task.h>
|
||||||
void *rrc_enb_process_itti_msg(void *);
|
void *rrc_enb_process_itti_msg(void *);
|
||||||
#include <openair3/SCTP/sctp_eNB_task.h>
|
#include <openair3/SCTP/sctp_eNB_task.h>
|
||||||
#include <openair3/S1AP/s1ap_eNB.h>
|
#include <openair3/S1AP/s1ap_eNB.h>
|
||||||
@@ -414,7 +415,7 @@ static const message_info_t messages_info[] = {
|
|||||||
#undef MESSAGE_DEF
|
#undef MESSAGE_DEF
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct __attribute__ ((__packed__)) MessageDef_s {
|
typedef struct MessageDef_s {
|
||||||
MessageHeader ittiMsgHeader; /**< Message header */
|
MessageHeader ittiMsgHeader; /**< Message header */
|
||||||
msg_t ittiMsg;
|
msg_t ittiMsg;
|
||||||
} MessageDef;
|
} MessageDef;
|
||||||
|
|||||||
@@ -53,6 +53,7 @@
|
|||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include "common/utils/load_module_shlib.h"
|
#include "common/utils/load_module_shlib.h"
|
||||||
#include "common/config/config_userapi.h"
|
#include "common/config/config_userapi.h"
|
||||||
|
#include "common/utils/threadPool/thread-pool.h"
|
||||||
#include "executables/softmodem-common.h"
|
#include "executables/softmodem-common.h"
|
||||||
#include <readline/history.h>
|
#include <readline/history.h>
|
||||||
|
|
||||||
@@ -507,12 +508,22 @@ int process_command(char *buf) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rt= CMDSTATUS_FOUND;
|
rt= CMDSTATUS_FOUND;
|
||||||
} else if (strncasecmp(cmd,"get",3) == 0 || strncasecmp(cmd,"set",3) == 0) {
|
} else if (strcasecmp(cmd,"get") == 0 || strcasecmp(cmd,"set") == 0) {
|
||||||
rt= setgetvar(i,cmd[0],cmdb);
|
rt= setgetvar(i,cmd[0],cmdb);
|
||||||
} else {
|
} else {
|
||||||
for (k=0 ; telnetparams.CmdParsers[i].cmd[k].cmdfunc != NULL ; k++) {
|
for (k=0 ; telnetparams.CmdParsers[i].cmd[k].cmdfunc != NULL ; k++) {
|
||||||
if (strncasecmp(cmd, telnetparams.CmdParsers[i].cmd[k].cmdname,sizeof(telnetparams.CmdParsers[i].cmd[k].cmdname)) == 0) {
|
if (strncasecmp(cmd, telnetparams.CmdParsers[i].cmd[k].cmdname,sizeof(telnetparams.CmdParsers[i].cmd[k].cmdname)) == 0) {
|
||||||
telnetparams.CmdParsers[i].cmd[k].cmdfunc(cmdb, telnetparams.telnetdbg, client_printf);
|
if (telnetparams.CmdParsers[i].cmd[k].qptr != NULL) {
|
||||||
|
notifiedFIFO_elt_t *msg =newNotifiedFIFO_elt(sizeof(telnetsrv_qmsg_t),0,NULL,NULL);
|
||||||
|
telnetsrv_qmsg_t *cmddata=NotifiedFifoData(msg);
|
||||||
|
cmddata->cmdfunc=(qcmdfunc_t)telnetparams.CmdParsers[i].cmd[k].cmdfunc;
|
||||||
|
cmddata->prnt=client_printf;
|
||||||
|
cmddata->debug=telnetparams.telnetdbg;
|
||||||
|
cmddata->cmdbuff=strdup(cmdb);
|
||||||
|
pushNotifiedFIFO(telnetparams.CmdParsers[i].cmd[k].qptr, msg);
|
||||||
|
} else {
|
||||||
|
telnetparams.CmdParsers[i].cmd[k].cmdfunc(cmdb, telnetparams.telnetdbg, client_printf);
|
||||||
|
}
|
||||||
rt= CMDSTATUS_FOUND;
|
rt= CMDSTATUS_FOUND;
|
||||||
}
|
}
|
||||||
} /* for k */
|
} /* for k */
|
||||||
@@ -673,6 +684,16 @@ void run_telnetsrv(void) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void poll_telnetcmdq(void *qid, void *arg) {
|
||||||
|
notifiedFIFO_elt_t *msg = pollNotifiedFIFO((notifiedFIFO_t *)qid);
|
||||||
|
|
||||||
|
if (msg != NULL) {
|
||||||
|
telnetsrv_qmsg_t *msgdata=NotifiedFifoData(msg);
|
||||||
|
msgdata->cmdfunc(msgdata->cmdbuff,msgdata->debug,msgdata->prnt,arg);
|
||||||
|
free(msgdata->cmdbuff);
|
||||||
|
delNotifiedFIFO_elt(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
/*------------------------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------------------------*/
|
||||||
/* load the commands delivered with the telnet server
|
/* load the commands delivered with the telnet server
|
||||||
*
|
*
|
||||||
@@ -758,6 +779,7 @@ int telnetsrv_autoinit(void) {
|
|||||||
*/
|
*/
|
||||||
int add_telnetcmd(char *modulename, telnetshell_vardef_t *var, telnetshell_cmddef_t *cmd) {
|
int add_telnetcmd(char *modulename, telnetshell_vardef_t *var, telnetshell_cmddef_t *cmd) {
|
||||||
int i;
|
int i;
|
||||||
|
notifiedFIFO_t *afifo=NULL;
|
||||||
|
|
||||||
if( modulename == NULL || var == NULL || cmd == NULL) {
|
if( modulename == NULL || var == NULL || cmd == NULL) {
|
||||||
fprintf(stderr,"[TELNETSRV] Telnet server, add_telnetcmd: invalid parameters\n");
|
fprintf(stderr,"[TELNETSRV] Telnet server, add_telnetcmd: invalid parameters\n");
|
||||||
@@ -769,6 +791,13 @@ int add_telnetcmd(char *modulename, telnetshell_vardef_t *var, telnetshell_cmdde
|
|||||||
strncpy(telnetparams.CmdParsers[i].module,modulename,sizeof(telnetparams.CmdParsers[i].module)-1);
|
strncpy(telnetparams.CmdParsers[i].module,modulename,sizeof(telnetparams.CmdParsers[i].module)-1);
|
||||||
telnetparams.CmdParsers[i].cmd = cmd;
|
telnetparams.CmdParsers[i].cmd = cmd;
|
||||||
telnetparams.CmdParsers[i].var = var;
|
telnetparams.CmdParsers[i].var = var;
|
||||||
|
if (cmd->cmdflags & TELNETSRV_CMDFLAG_PUSHINTPOOLQ) {
|
||||||
|
if (afifo == NULL) {
|
||||||
|
afifo = malloc(sizeof(notifiedFIFO_t));
|
||||||
|
initNotifiedFIFO(afifo);
|
||||||
|
}
|
||||||
|
cmd->qptr = afifo;
|
||||||
|
}
|
||||||
printf("[TELNETSRV] Telnet server: module %i = %s added to shell\n",
|
printf("[TELNETSRV] Telnet server: module %i = %s added to shell\n",
|
||||||
i,telnetparams.CmdParsers[i].module);
|
i,telnetparams.CmdParsers[i].module);
|
||||||
break;
|
break;
|
||||||
@@ -797,8 +826,10 @@ int telnetsrv_checkbuildver(char *mainexec_buildversion, char **shlib_buildvers
|
|||||||
}
|
}
|
||||||
|
|
||||||
int telnetsrv_getfarray(loader_shlibfunc_t **farray) {
|
int telnetsrv_getfarray(loader_shlibfunc_t **farray) {
|
||||||
*farray=malloc(sizeof(loader_shlibfunc_t));
|
*farray=malloc(sizeof(loader_shlibfunc_t)*2);
|
||||||
(*farray)[0].fname=TELNET_ADDCMD_FNAME;
|
(*farray)[0].fname=TELNET_ADDCMD_FNAME;
|
||||||
(*farray)[0].fptr=(int (*)(void) )add_telnetcmd;
|
(*farray)[0].fptr=(int (*)(void) )add_telnetcmd;
|
||||||
return 1;
|
(*farray)[1].fname=TELNET_POLLCMDQ_FNAME;
|
||||||
|
(*farray)[1].fptr=(int (*)(void) )poll_telnetcmdq;
|
||||||
|
return ( 2);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,13 +53,26 @@
|
|||||||
/* to add a set of new command to the telnet server shell */
|
/* to add a set of new command to the telnet server shell */
|
||||||
typedef void(*telnet_printfunc_t)(const char* format, ...);
|
typedef void(*telnet_printfunc_t)(const char* format, ...);
|
||||||
typedef int(*cmdfunc_t)(char*, int, telnet_printfunc_t prnt);
|
typedef int(*cmdfunc_t)(char*, int, telnet_printfunc_t prnt);
|
||||||
|
typedef int(*qcmdfunc_t)(char*, int, telnet_printfunc_t prnt,void *arg);
|
||||||
|
|
||||||
|
#define TELNETSRV_CMDFLAG_PUSHINTPOOLQ (1<<0) // ask the telnet server to push the command in a thread pool queue
|
||||||
typedef struct cmddef {
|
typedef struct cmddef {
|
||||||
char cmdname[TELNET_CMD_MAXSIZE];
|
char cmdname[TELNET_CMD_MAXSIZE];
|
||||||
char helpstr[TELNET_HELPSTR_SIZE];
|
char helpstr[TELNET_HELPSTR_SIZE];
|
||||||
cmdfunc_t cmdfunc;
|
cmdfunc_t cmdfunc;
|
||||||
|
unsigned int cmdflags;
|
||||||
|
void *qptr;
|
||||||
} telnetshell_cmddef_t;
|
} telnetshell_cmddef_t;
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* structure used to send a command via a message queue to enable */
|
||||||
|
/* executing a command in a thread different from the telnet server thread */
|
||||||
|
typedef struct telnetsrv_qmsg {
|
||||||
|
qcmdfunc_t cmdfunc;
|
||||||
|
telnet_printfunc_t prnt;
|
||||||
|
int debug;
|
||||||
|
char *cmdbuff;
|
||||||
|
} telnetsrv_qmsg_t;
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
/*structure to be used when adding a module to the telnet server */
|
/*structure to be used when adding a module to the telnet server */
|
||||||
/* This is the first parameter of the add_telnetcmd function, which can be used */
|
/* This is the first parameter of the add_telnetcmd function, which can be used */
|
||||||
@@ -111,9 +124,6 @@ typedef struct {
|
|||||||
} telnetsrv_params_t;
|
} telnetsrv_params_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef int(*addcmdfunc_t)(char*, telnetshell_vardef_t*, telnetshell_cmddef_t*);
|
|
||||||
|
|
||||||
typedef void(*settelnetmodule_t)(char *name, void *ptr);
|
typedef void(*settelnetmodule_t)(char *name, void *ptr);
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------------------*/
|
||||||
@@ -133,7 +143,9 @@ VT escape sequence definition, for smarter display....
|
|||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------------------*/
|
||||||
#define TELNET_ADDCMD_FNAME "add_telnetcmd"
|
#define TELNET_ADDCMD_FNAME "add_telnetcmd"
|
||||||
|
#define TELNET_POLLCMDQ_FNAME "poll_telnetcmdq"
|
||||||
typedef int(*add_telnetcmd_func_t)(char *, telnetshell_vardef_t *, telnetshell_cmddef_t *);
|
typedef int(*add_telnetcmd_func_t)(char *, telnetshell_vardef_t *, telnetshell_cmddef_t *);
|
||||||
|
typedef void(*poll_telnetcmdq_func_t)(void *qid,void *arg);
|
||||||
#ifdef TELNETSERVERCODE
|
#ifdef TELNETSERVERCODE
|
||||||
int add_telnetcmd(char *modulename, telnetshell_vardef_t *var, telnetshell_cmddef_t *cmd);
|
int add_telnetcmd(char *modulename, telnetshell_vardef_t *var, telnetshell_cmddef_t *cmd);
|
||||||
void set_sched(pthread_t tid, int pid,int priority);
|
void set_sched(pthread_t tid, int pid,int priority);
|
||||||
|
|||||||
@@ -111,9 +111,10 @@ void initTpool(char *params,tpool_t *pool, bool performanceMeas) {
|
|||||||
pool->activated=true;
|
pool->activated=true;
|
||||||
initNotifiedFIFO(&pool->incomingFifo);
|
initNotifiedFIFO(&pool->incomingFifo);
|
||||||
char *saveptr, * curptr;
|
char *saveptr, * curptr;
|
||||||
|
char *parms_cpy=strdup(params);
|
||||||
pool->nbThreads=0;
|
pool->nbThreads=0;
|
||||||
pool->restrictRNTI=false;
|
pool->restrictRNTI=false;
|
||||||
curptr=strtok_r(params,",",&saveptr);
|
curptr=strtok_r(parms_cpy,",",&saveptr);
|
||||||
struct one_thread * ptr;
|
struct one_thread * ptr;
|
||||||
while ( curptr!=NULL ) {
|
while ( curptr!=NULL ) {
|
||||||
int c=toupper(curptr[0]);
|
int c=toupper(curptr[0]);
|
||||||
@@ -145,7 +146,7 @@ void initTpool(char *params,tpool_t *pool, bool performanceMeas) {
|
|||||||
|
|
||||||
curptr=strtok_r(NULL,",",&saveptr);
|
curptr=strtok_r(NULL,",",&saveptr);
|
||||||
}
|
}
|
||||||
|
free(parms_cpy);
|
||||||
if (pool->activated && pool->nbThreads==0) {
|
if (pool->activated && pool->nbThreads==0) {
|
||||||
printf("No servers created in the thread pool, exit\n");
|
printf("No servers created in the thread pool, exit\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|||||||
@@ -105,3 +105,9 @@ char *itoa(int i) {
|
|||||||
return strdup(buffer);
|
return strdup(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *memcpy1(void *dst,const void *src,size_t n) {
|
||||||
|
|
||||||
|
void *ret=dst;
|
||||||
|
asm volatile("rep movsb" : "+D" (dst) : "c"(n), "S"(src) : "cc","memory");
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ int hex_char_to_hex_value (char c);
|
|||||||
// Converts an hexadecimal ASCII coded string into its value.**
|
// Converts an hexadecimal ASCII coded string into its value.**
|
||||||
int hex_string_to_hex_value (uint8_t *hex_value, const char *hex_string, int size);
|
int hex_string_to_hex_value (uint8_t *hex_value, const char *hex_string, int size);
|
||||||
|
|
||||||
|
void *memcpy1(void *dst,const void *src,size_t n);
|
||||||
|
|
||||||
|
|
||||||
char *itoa(int i);
|
char *itoa(int i);
|
||||||
|
|
||||||
#define findInList(keY, result, list, element_type) {\
|
#define findInList(keY, result, list, element_type) {\
|
||||||
|
|||||||
+1
-2
@@ -16,7 +16,6 @@ This page is valid on tags starting from **`2019.w09`**.
|
|||||||
|
|
||||||
# Soft Modem Build Script
|
# Soft Modem Build Script
|
||||||
|
|
||||||
oai EPC is developed in a distinct project with it's own [documentation](https://github.com/OPENAIRINTERFACE/openair-cn/wiki) , it is not described here.
|
|
||||||
|
|
||||||
OAI softmodem sources, which aim to implement 3GPP compliant UEs, eNodeB and gNodeB can be downloaded from the Eurecom [gitlab repository](./GET_SOURCES.md).
|
OAI softmodem sources, which aim to implement 3GPP compliant UEs, eNodeB and gNodeB can be downloaded from the Eurecom [gitlab repository](./GET_SOURCES.md).
|
||||||
|
|
||||||
@@ -34,7 +33,7 @@ The main oai binaries, which are tested by the Continuous Integration process ar
|
|||||||
|
|
||||||
Running the [build_oai](../cmake_targets/build_oai) script also generates some utilities required to build and/or run the oai softmodem binaries:
|
Running the [build_oai](../cmake_targets/build_oai) script also generates some utilities required to build and/or run the oai softmodem binaries:
|
||||||
|
|
||||||
- `con2uedata`: a binary used to build the UE data from a configuration file. The created file emulates the sim card of a 3GPP compliant phone.
|
- `conf2uedata`: a binary used to build the UE data from a configuration file. The created file emulates the sim card of a 3GPP compliant phone.
|
||||||
- `nvram`: a binary used to build UE (IMEI...) and EMM (IMSI, registered PLMN) non volatile data.
|
- `nvram`: a binary used to build UE (IMEI...) and EMM (IMSI, registered PLMN) non volatile data.
|
||||||
- `rb_tool`: radio bearer utility
|
- `rb_tool`: radio bearer utility
|
||||||
- `genids` T Tracer utility, used at build time to generate T_IDs.h include file. This binary is located in the [T Tracer source file directory](../common/utils/T) .
|
- `genids` T Tracer utility, used at build time to generate T_IDs.h include file. This binary is located in the [T Tracer source file directory](../common/utils/T) .
|
||||||
|
|||||||
+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 ###
|
# OpenAirInterface 5G-NR UE Feature Set #
|
||||||
|
|
||||||
- initial synchronization
|
**as of May 2020** only supporting "noS1" mode (DL):
|
||||||
- Time tracking based on PDCCH DMRS
|
- Creates TUN interface to PDCP to inject and receive user-place traffic
|
||||||
- Frequency offset estimation
|
- Will only work with OAI gNB configured in the same mode
|
||||||
- PBCH RX
|
|
||||||
- PDCCH RX
|
## UE PHY Layer ##
|
||||||
- PDSCH RX
|
|
||||||
- including first version of dual stream receiver for PDSCH
|
* 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 access 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)
|
||||||
|
|
||||||
|
|||||||
@@ -56,9 +56,56 @@ oai supports [number of deployment](FEATURE_SET.md) model, the following are tes
|
|||||||
1. [Monolithic eNodeB](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/HowToConnectCOTSUEwithOAIeNBNew) where the whole signal processing is performed in a single process
|
1. [Monolithic eNodeB](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/HowToConnectCOTSUEwithOAIeNBNew) where the whole signal processing is performed in a single process
|
||||||
2. if4p5 mode, where frequency domain samples are carried over ethernet, from the RRU which implement part of L1(FFT,IFFT,part of PRACH), to a RAU
|
2. if4p5 mode, where frequency domain samples are carried over ethernet, from the RRU which implement part of L1(FFT,IFFT,part of PRACH), to a RAU
|
||||||
|
|
||||||
|
# 5G NR
|
||||||
|
|
||||||
|
As of February 2020, all 5G NR development is part of the develop branch (the branch develop-nr is no longer maintained). This also means that all new development will be merged into there once it passes all the CI.
|
||||||
|
|
||||||
|
## NSA setup with COTS UE
|
||||||
|
|
||||||
|
This setup requires an EPC, an OAI eNB and gNB, and a COTS Phone. A dedicated page describe the setup can be found [here](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home/gNB-COTS-UE-testing).
|
||||||
|
|
||||||
|
### Launch gNB
|
||||||
|
|
||||||
|
```bash sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf```
|
||||||
|
|
||||||
|
### Launch eNB
|
||||||
|
|
||||||
|
```bash sudo ./lte-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## phy-test setup with OAI UE
|
||||||
|
|
||||||
|
The OAI UE can also be used in front of a OAI gNB without the support of eNB or EPC. In this case both gNB and eNB need to be run with the --phy-test flag. At the gNB this flag does the following
|
||||||
|
- it reads the RRC configuration from the configuration file
|
||||||
|
- it encodes the RRCConfiguration and the RBconfig message and stores them in the binary files rbconfig.raw and reconfig.raw
|
||||||
|
- the MAC uses a pre-configured allocation of PDSCH and PUSCH with randomly generated payload
|
||||||
|
|
||||||
|
At the UE the --phy-test flag will
|
||||||
|
- read the binary files rbconfig.raw and reconfig.raw from the current directory (a different directory can be specified with the flag --rrc_config_path) and process them.
|
||||||
|
|
||||||
|
|
||||||
|
### Launch gNB
|
||||||
|
|
||||||
|
```bash sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test```
|
||||||
|
|
||||||
|
### Launch UE in another window
|
||||||
|
|
||||||
|
```bash sudo ./nr-uesoftmodem --phy-test [--rrc_config_path ../../../ci-scripts/rrc-files]```
|
||||||
|
|
||||||
|
Some other useful paramters of the UE are
|
||||||
|
|
||||||
|
- --ue-fo-compensation: enables the frequency offset compenstation at the UE. This is useful when running over the air and/or without an external clock/time source
|
||||||
|
- --usrp-args: this is the equivalend paramter of sdr_addrs field in the gNB config file and can be used to identify the USRP and set some basic paramters (like the clock source)
|
||||||
|
- --clock-source: sets the clock-source (internal or external).
|
||||||
|
- --time-source: sets the time-source (internal or external).
|
||||||
|
|
||||||
|
|
||||||
|
## noS1 setup with OAI UE
|
||||||
|
|
||||||
|
Instead of randomly generated payload, in the phy-test mode we can also inject/receive user-plane traffic over a TUN interface. This is the so-called noS1 mode.
|
||||||
|
|
||||||
|
This setup is described in the [rfsimulator page](../targets/ARCH/rfsimulator/README.md#5g-case). In theory this should also work with the real hardware target although this has yet to be tested.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,389 @@
|
|||||||
|
STATUS 2020/07/30 : under continuous improvement ; updated the configuration files links with CI approved reference files
|
||||||
|
|
||||||
|
|
||||||
|
## Table of Contents ##
|
||||||
|
|
||||||
|
1. [Configuration Overview](#configuration-overview)
|
||||||
|
2. [SW Repository / Branch](#repository)
|
||||||
|
3. [Architecture Setup](#architecture-setup)
|
||||||
|
4. [Build / Install](#build-and-install)
|
||||||
|
5. [Run / Test](#run-and-test)
|
||||||
|
6. [Test case](#test-case)
|
||||||
|
7. [Log file monitoring](#log-file-monitoring)
|
||||||
|
6. [Required tools for debug](#required-tools-for-debug)
|
||||||
|
7. [Status of interoperability](#status-of-interoperability)
|
||||||
|
|
||||||
|
## Configuration Overview
|
||||||
|
|
||||||
|
* Non Standalone (NSA) configuration : initial Control Plane established between UE and RAN eNB, then User Plane established between UE and gNB, Core network is 4G based supporting rel 15
|
||||||
|
|
||||||
|
* Commercial UE: Oppo Reno 5G
|
||||||
|
* OAI Software Defined gNB and eNB
|
||||||
|
* eNB RF front end: USRP (ETTUS) B200 Mini or B210
|
||||||
|
* gNB RF front end: USRP (ETTUS) B200 Mini or B210 (N310 will be needed for MIMO and wider BW's)
|
||||||
|
* 5G TDD duplexing mode
|
||||||
|
* 5G FR1 Band n78 (3.5 GHz)
|
||||||
|
* BW: 40MHz
|
||||||
|
* Antenna scheme: SISO
|
||||||
|
|
||||||
|
## Repository
|
||||||
|
|
||||||
|
https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop
|
||||||
|
|
||||||
|
## Architecture Setup
|
||||||
|
|
||||||
|
The scheme below depicts our typical setup:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The photo depicts the FR1 setup part of the scheme above:
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Build and Install
|
||||||
|
|
||||||
|
General guidelines to build eNB and gNB :
|
||||||
|
See https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/doc/BUILD.md#building-ues-enodeb-and-gnodeb-executables
|
||||||
|
|
||||||
|
|
||||||
|
- **eNB**
|
||||||
|
|
||||||
|
```
|
||||||
|
cd <your oai installation directory>/openairinterface5g/
|
||||||
|
source oaienv
|
||||||
|
cd cmake_targets/
|
||||||
|
./build_oai -I -w USRP --eNB
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
- **gNB**
|
||||||
|
|
||||||
|
```
|
||||||
|
cd <your oai installation directory>/openairinterface5g/
|
||||||
|
source oaienv
|
||||||
|
cd cmake_targets/
|
||||||
|
./build_oai -I -w USRP --gNB
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
- **EPC**
|
||||||
|
|
||||||
|
for reference:
|
||||||
|
https://github.com/OPENAIRINTERFACE/openair-epc-fed/blob/master-documentation/docs/DEPLOY_HOME.md
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Configuration Files
|
||||||
|
|
||||||
|
Each component (EPC, eNB, gNB) has its own configuration file.
|
||||||
|
These config files are passed as arguments of the run command line, using the option -O \<conf file\>
|
||||||
|
|
||||||
|
The **REFERENCE** files for eNB and gNB, **used by the CI**, can be found here:
|
||||||
|
[enb conf file](../ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf)
|
||||||
|
[gnb conf file](../ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf)
|
||||||
|
|
||||||
|
These files have to be updated manually to set the IP addresses and frequency.
|
||||||
|
|
||||||
|
|
||||||
|
**ATTENTION** : an **EXTERNAL** clock is used to sync the eNB and gNB,
|
||||||
|
whether the clock is internal or external is defined in the configuration files (!! details needed !!)
|
||||||
|
|
||||||
|
|
||||||
|
1- In the **eNB configuration file** :
|
||||||
|
- look for MME IP address, and update the **ipv4 field** with the IP address of the **EPC** server
|
||||||
|
```
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "**YOUR_EPC_IP_ADDR**";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
- look for S1 IP address, and update the **3 fields below** with the IP address of the **eNB** server
|
||||||
|
```
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "**YOUR_ENB_IP_ADDR**";
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "**YOUR_ENB_IP_ADDR**";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "**YOUR_ENB_IP_ADDR**";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
2- In the **gNB configuration file** :
|
||||||
|
- look for MME IP address, and update the **ipv4 field** with the IP address of the **EPC** server
|
||||||
|
```
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "**YOUR_EPC_IP_ADDR**";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
- look for X2 IP address, and update the **4 fields** with the IP address of the **eNB** server / **gNB** server as below (notice : even if -in principle- S1 MME is not required for gNB setting)
|
||||||
|
```
|
||||||
|
|
||||||
|
///X2
|
||||||
|
enable_x2 = "yes";
|
||||||
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
target_enb_x2_ip_address = (
|
||||||
|
{ ipv4 = "**YOUR_ENB_IP_ADDR**";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1_MME = "**YOUR_GNB_IP_ADDR**";
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1U = "**YOUR_GNB_IP_ADDR**";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
GNB_IPV4_ADDRESS_FOR_X2C = "**YOUR_GNB_IP_ADDR**";
|
||||||
|
GNB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
3- The frequency setting requires a manual update in the .C and in the gNB conf file:
|
||||||
|
|
||||||
|
|
||||||
|
In the C file **openair2/RRC/LTE/rrc_eNB.c:3217**
|
||||||
|
set the nrarfcn to the same value as absoluteFrequencySSB in the **gNB config file**, that is **641272** in the example below
|
||||||
|
|
||||||
|
C file :
|
||||||
|
```
|
||||||
|
MeasObj2->measObject.choice.measObjectNR_r15.carrierFreq_r15 =641272;
|
||||||
|
```
|
||||||
|
|
||||||
|
gNB config file :
|
||||||
|
|
||||||
|
```
|
||||||
|
# absoluteFrequencySSB is the central frequency of SSB
|
||||||
|
absoluteFrequencySSB = 641272;
|
||||||
|
dl_frequencyBand = 78;
|
||||||
|
# the carrier frequency is assumed to be in the middle of the carrier, i.e. dl_absoluteFrequencyPointA_kHz + dl_carrierBandwidth*12*SCS_kHz/2
|
||||||
|
dl_absoluteFrequencyPointA = 640000;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 106;
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Run and Test
|
||||||
|
|
||||||
|
The order to run the different components is important:
|
||||||
|
1- first, CN
|
||||||
|
2- then, eNB
|
||||||
|
3- then, gNB
|
||||||
|
4- finally, switch UE from airplane mode ON to OFF (ie Radio from OFF to ON)
|
||||||
|
|
||||||
|
It is recommended to redirect the run commands to the same log file (fur further analysis and debug), using ```| tee **YOUR_LOG_FILE**``` especially for eNB and gNB.
|
||||||
|
It is not very useful for the CN.
|
||||||
|
|
||||||
|
The test takes typically a few seconds, max 10-15 seconds. If it takes more than 30 seconds, there is a problem.
|
||||||
|
|
||||||
|
- **EPC** (on EPC host):
|
||||||
|
|
||||||
|
for reference:
|
||||||
|
https://github.com/OPENAIRINTERFACE/openair-epc-fed/blob/master-documentation/docs/DEPLOY_HOME.md
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- **eNB** (on the eNB host):
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
```
|
||||||
|
~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./lte-softmodem -O **YOUR_ENB_CONF_FILE** | tee **YOUR_LOG_FILE**
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
- **gNB** (on the gNB host)
|
||||||
|
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
```
|
||||||
|
~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-softmodem -O **YOUR_GNB_CONF_FILE** -E | tee **YOUR_LOG_FILE**
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
**ATTENTION** : for the gNB execution,
|
||||||
|
The -E option is required to enable the tri-quarter sampling rate when using a B2xx serie USRP
|
||||||
|
The -E opton is not needed when using a a N300 USRP
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Test Case
|
||||||
|
|
||||||
|
The test case corresponds to the UE attachement, that is the UE connection and its initial access in 5G, as depicted below:
|
||||||
|
|
||||||
|
**Source** : https://www.sharetechnote.com/html/5G/5G_LTE_Interworking.html
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The test reaches step **12. E-RAB modifcation confirmation** , eventhough not all the messages will appear in the log file.
|
||||||
|
|
||||||
|
## Log file monitoring
|
||||||
|
|
||||||
|
From the log file that is generated, we can monitor several important steps, to assess that the test was successful.
|
||||||
|
Log files examples can be found here:
|
||||||
|
[enb log file](https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/rh_doc_update_3/doc/testing_gnb_w_cots_ue_resources/oai_enb.log)
|
||||||
|
[gnb log file](https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/rh_doc_update_3/doc/testing_gnb_w_cots_ue_resources/oai_gnb.log)
|
||||||
|
|
||||||
|
|
||||||
|
- eNB receives UE capabilities information, including its NR capabilites, and triggers sGNB Addition Request message:
|
||||||
|
|
||||||
|
***eNBlog.1315 :***
|
||||||
|
```
|
||||||
|
[RRC] [FRAME 00000][eNB][MOD 00][RNTI 43eb] received ueCapabilityInformation on UL-DCCH 1 from UE
|
||||||
|
...
|
||||||
|
[RRC] [eNB 0] frame 0 subframe 0: UE rnti 43eb switching to NSA mode
|
||||||
|
...
|
||||||
|
<X2AP-PDU>
|
||||||
|
<initiatingMessage>
|
||||||
|
<procedureCode>27</procedureCode>
|
||||||
|
<criticality><reject/></criticality>
|
||||||
|
<value>
|
||||||
|
<SgNBAdditionRequest>
|
||||||
|
<protocolIEs>
|
||||||
|
<SgNBAdditionRequest-IEs>
|
||||||
|
<id>111</id>
|
||||||
|
<criticality><reject/></criticality>
|
||||||
|
<value>
|
||||||
|
<UE-X2AP-ID>0</UE-X2AP-ID>
|
||||||
|
</value>
|
||||||
|
</SgNBAdditionRequest-IEs>
|
||||||
|
```
|
||||||
|
|
||||||
|
- gNB receives sGNB Addition request, processes UE capabilities for the corresponding UE and triggers sGNB Addition Request ACK, carrying NR RRC Reconfiguration message:
|
||||||
|
|
||||||
|
|
||||||
|
***gNBlog.2291 :***
|
||||||
|
```
|
||||||
|
<X2AP-PDU>
|
||||||
|
<successfulOutcome>
|
||||||
|
<procedureCode>27</procedureCode>
|
||||||
|
<criticality><reject/></criticality>
|
||||||
|
<value>
|
||||||
|
<SgNBAdditionRequestAcknowledge>
|
||||||
|
<protocolIEs>
|
||||||
|
<SgNBAdditionRequestAcknowledge-IEs>
|
||||||
|
<id>111</id>
|
||||||
|
<criticality><reject/></criticality>
|
||||||
|
<value>
|
||||||
|
<UE-X2AP-ID>0</UE-X2AP-ID>
|
||||||
|
</value>
|
||||||
|
</SgNBAdditionRequestAcknowledge-IEs>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
- Upon reception of the sGNB Addition Request ACK, the eNB sends a new RRCConnectionReconfiguration message containing the NR Reconfiguration.
|
||||||
|
The UE replies with a Reconfiguration Complete message:
|
||||||
|
|
||||||
|
***eNBlog.1686 :***
|
||||||
|
```
|
||||||
|
[RRC] [FRAME 00000][eNB][MOD 00][RNTI 43eb] UE State = RRC_RECONFIGURED (default DRB, xid 1)
|
||||||
|
```
|
||||||
|
|
||||||
|
- The Random Access procedure of the UE to the gNB takes place:
|
||||||
|
|
||||||
|
***gNBlog.2382 :***
|
||||||
|
```
|
||||||
|
[PHY] [gNB 0][RAPROC] Frame 751, slot 19 Initiating RA procedure with
|
||||||
|
preamble 63, energy 35.7 dB, delay 6
|
||||||
|
[0m [0m[MAC] [gNB 0][RAPROC] CC_id 0 Frame 751, Slot 19 Initiating RA
|
||||||
|
procedure for preamble index 63
|
||||||
|
[0m [0m[MAC] [gNB 0][RAPROC] CC_id 0 Frame 751 Activating Msg2
|
||||||
|
generation in frame 752, slot 7 using RA rnti 10b
|
||||||
|
[0m [0m[MAC] [gNB 0] [RAPROC] CC_id 0 Frame 752, slotP 7: Generating
|
||||||
|
RAR DCI, state 1
|
||||||
|
[0m [0m[MAC] [RAPROC] DCI type 1 payload: freq_alloc 120 (0,6,24),
|
||||||
|
time_alloc 3, vrb to prb 0, mcs 0 tb_scaling 0
|
||||||
|
[0m [0m[MAC] Frame 752: Subframe 7 : Adding common DL DCI for RA_RNTI 10b
|
||||||
|
[0m [0m[MAC] Frame 752, Subframe 7: Setting Msg3 reception for Frame
|
||||||
|
752 Subframe 17
|
||||||
|
[0m [0m[PHY] ULSCH received ok
|
||||||
|
```
|
||||||
|
|
||||||
|
- The eNB triggers the path switch procedure towards the MME, so that
|
||||||
|
the traffic can be routed now from the SGW towards the gNB on the S1-U
|
||||||
|
plane.
|
||||||
|
|
||||||
|
***eNBlog.1691 :***
|
||||||
|
```
|
||||||
|
<S1AP-PDU>
|
||||||
|
<initiatingMessage>
|
||||||
|
<procedureCode>50</procedureCode>
|
||||||
|
<criticality><reject/></criticality>
|
||||||
|
<value>
|
||||||
|
<E-RABModificationIndication>
|
||||||
|
<protocolIEs>
|
||||||
|
<E-RABModificationIndicationIEs>
|
||||||
|
<id>0</id>
|
||||||
|
<criticality><reject/></criticality>
|
||||||
|
<value>
|
||||||
|
<MME-UE-S1AP-ID>553648130</MME-UE-S1AP-ID>
|
||||||
|
</value>
|
||||||
|
</E-RABModificationIndicationIEs>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Eventually, step **12. E-RAB Modification Confirmation** is successfully reached
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Required tools for debug
|
||||||
|
|
||||||
|
- **Wireshark** to trace X2AP and S1AP protocols
|
||||||
|
- **Ttracer** for 5G messages
|
||||||
|
- **GDB debugger** to check function calls
|
||||||
|
|
||||||
|
|
||||||
|
## Status of interoperability
|
||||||
|
|
||||||
|
The following parts have been validated with FR1 COTS UE:
|
||||||
|
|
||||||
|
- Phone accepts the configurtion provided by OAI eNB:
|
||||||
|
this validates RRC and X2AP
|
||||||
|
|
||||||
|
- Successful Random Access Procedure:
|
||||||
|
PRACH is correctly decoded at gNB
|
||||||
|
Phone correctly receives and decodes msg2 (NR PDCCH Format 1_0 and NR PDSCH)
|
||||||
|
msg3 is transmitted to gNB according to the configuration sent in msg2, and received correctly at gNB
|
||||||
|
|
||||||
|
- Successful path switch of user plane traffic from 4G to 5G cell (E-RAB modification message):
|
||||||
|
this validates S1AP
|
||||||
|
|
||||||
|
- Downlink traffic:
|
||||||
|
PDCCH DCI format 1_1 and correponding PDSCH are decoded correctlyby the phone
|
||||||
|
ACK/NACK (PUCCH format 0) are successfully received at gNB
|
||||||
|
|
||||||
|
- On going:
|
||||||
|
validation of HARQ procedures
|
||||||
|
Integration with higher layers to replace dummy data with real traffic
|
||||||
|
|
||||||
|
- Known limitations as of May 2020:
|
||||||
|
only dummy DL traffic
|
||||||
|
no UL traffic
|
||||||
|
no end-to-end traffic possible
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 47 KiB |
Executable
+281
@@ -0,0 +1,281 @@
|
|||||||
|
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
eNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
# real_time choice in {hard, rt-preempt, no}
|
||||||
|
real_time = "no";
|
||||||
|
////////// Identification parameters:
|
||||||
|
eNB_ID = 0xe01;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_ENB";
|
||||||
|
|
||||||
|
eNB_name = "eNB-Eurecom-LTEBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = (
|
||||||
|
{ mcc = 222; mnc = 01; mnc_length = 2; }
|
||||||
|
);
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "eNodeB_3GPP";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
nb_antenna_ports = 1;
|
||||||
|
ue_TransmissionMode = 1;
|
||||||
|
frame_type = "FDD";
|
||||||
|
tdd_config = 3;
|
||||||
|
tdd_config_s = 0;
|
||||||
|
prefix_type = "NORMAL";
|
||||||
|
eutra_band = 7;
|
||||||
|
downlink_frequency = 2680000000L; //2655000000L;
|
||||||
|
uplink_frequency_offset = -120000000;
|
||||||
|
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 25; //100;
|
||||||
|
Nid_cell_mbsfn = 0;
|
||||||
|
nb_antennas_tx = 1;
|
||||||
|
nb_antennas_rx = 1;
|
||||||
|
prach_root = 0;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 115;
|
||||||
|
pbch_repetition = "FALSE";
|
||||||
|
prach_config_index = 0;
|
||||||
|
prach_high_speed = "DISABLE";
|
||||||
|
prach_zero_correlation = 1;
|
||||||
|
prach_freq_offset = 2;
|
||||||
|
pucch_delta_shift = 1;
|
||||||
|
pucch_nRB_CQI = 0;
|
||||||
|
pucch_nCS_AN = 0;
|
||||||
|
pucch_n1_AN = 0;
|
||||||
|
pdsch_referenceSignalPower = -29;
|
||||||
|
pdsch_p_b = 0;
|
||||||
|
pusch_n_SB = 1;
|
||||||
|
pusch_enable64QAM = "DISABLE";
|
||||||
|
pusch_hoppingMode = "interSubFrame";
|
||||||
|
pusch_hoppingOffset = 0;
|
||||||
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
|
pusch_groupAssignment = 0;
|
||||||
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
|
pusch_nDMRS1 = 1;
|
||||||
|
phich_duration = "NORMAL";
|
||||||
|
phich_resource = "ONESIXTH";
|
||||||
|
srs_enable = "DISABLE";
|
||||||
|
/* srs_BandwidthConfig =;
|
||||||
|
srs_SubframeConfig =;
|
||||||
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
|
pusch_p0_Nominal = -96;
|
||||||
|
pusch_alpha = "AL1";
|
||||||
|
pucch_p0_Nominal = -96;
|
||||||
|
msg3_delta_Preamble = 6;
|
||||||
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
|
||||||
|
//Parameters for SIB18
|
||||||
|
rxPool_sc_CP_Len = "normal";
|
||||||
|
rxPool_sc_Period = "sf40";
|
||||||
|
rxPool_data_CP_Len = "normal";
|
||||||
|
rxPool_ResourceConfig_prb_Num = 20;
|
||||||
|
rxPool_ResourceConfig_prb_Start = 5;
|
||||||
|
rxPool_ResourceConfig_prb_End = 44;
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
/* rxPool_dataHoppingConfig_hoppingParameter = 0;
|
||||||
|
rxPool_dataHoppingConfig_numSubbands = "ns1";
|
||||||
|
rxPool_dataHoppingConfig_rbOffset = 0;
|
||||||
|
rxPool_commTxResourceUC-ReqAllowed = "TRUE";
|
||||||
|
*/
|
||||||
|
// Parameters for SIB19
|
||||||
|
discRxPool_cp_Len = "normal"
|
||||||
|
discRxPool_discPeriod = "rf32"
|
||||||
|
discRxPool_numRetx = 1;
|
||||||
|
discRxPool_numRepetition = 2;
|
||||||
|
discRxPool_ResourceConfig_prb_Num = 5;
|
||||||
|
discRxPool_ResourceConfig_prb_Start = 3;
|
||||||
|
discRxPool_ResourceConfig_prb_End = 21;
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
enable_measurement_reports = "yes";
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "192.168.18.99";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
///X2
|
||||||
|
enable_x2 = "yes";
|
||||||
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth1";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.18.199/24";
|
||||||
|
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eth1";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.18.199/24";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.18.199/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="high";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="debug";
|
||||||
|
rlc_log_verbosity ="high";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="high";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
phy_test_mode = 0;
|
||||||
|
puSch10xSnr = 160;
|
||||||
|
puCch10xSnr = 160;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
parallel_config = "PARALLEL_RU_L1_TRX_SPLITaaaaaa";
|
||||||
|
worker_config = "ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 118;
|
||||||
|
eNB_instances = [0];
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="high";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="high";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="high";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
Executable
+293
@@ -0,0 +1,293 @@
|
|||||||
|
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_GNB";
|
||||||
|
|
||||||
|
gNB_name = "gNB-Eurecom-5GNRBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
|
||||||
|
plmn_list = ({mcc = 222; mnc = 01; mnc_length = 2;});
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
ssb_SubcarrierOffset = 31; //0;
|
||||||
|
pdsch_AntennaPorts = 1;
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
#frequencyInfoDL
|
||||||
|
# this is 3600 MHz + 84 PRBs@30kHz SCS (same as initial BWP)
|
||||||
|
absoluteFrequencySSB = 641272; //641032; #641968; 641968=start of ssb at 3600MHz + 82 RBs 641032=center of SSB at center of cell
|
||||||
|
dl_frequencyBand = 78;
|
||||||
|
# this is 3600 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 640000;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 106;
|
||||||
|
#initialDownlinkBWP
|
||||||
|
#genericParameters
|
||||||
|
# this is RBstart=84,L=13 (275*(L-1))+RBstart
|
||||||
|
initialDLBWPlocationAndBandwidth = 6366; //28875; //6366; #6407; #3384;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
#pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 0;
|
||||||
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
#pdsch-ConfigCommon
|
||||||
|
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||||
|
initialDLBWPk0_0 = 0;
|
||||||
|
#initialULBWPmappingType
|
||||||
|
#0=typeA,1=typeB
|
||||||
|
initialDLBWPmappingType_0 = 0;
|
||||||
|
#this is SS=1,L=13
|
||||||
|
initialDLBWPstartSymbolAndLength_0 = 40;
|
||||||
|
|
||||||
|
initialDLBWPk0_1 = 0;
|
||||||
|
initialDLBWPmappingType_1 = 0;
|
||||||
|
#this is SS=2,L=12
|
||||||
|
initialDLBWPstartSymbolAndLength_1 = 53;
|
||||||
|
|
||||||
|
initialDLBWPk0_2 = 0;
|
||||||
|
initialDLBWPmappingType_2 = 0;
|
||||||
|
#this is SS=1,L=12
|
||||||
|
initialDLBWPstartSymbolAndLength_2 = 54;
|
||||||
|
|
||||||
|
initialDLBWPk0_3 = 0;
|
||||||
|
initialDLBWPmappingType_3 = 0;
|
||||||
|
#this is SS=1,L=4 //5 (4 is for 43, 5 is for 57)
|
||||||
|
initialDLBWPstartSymbolAndLength_3 = 57; //43; //57;
|
||||||
|
#uplinkConfigCommon
|
||||||
|
#frequencyInfoUL
|
||||||
|
ul_frequencyBand = 78;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
ul_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
ul_subcarrierSpacing = 1;
|
||||||
|
ul_carrierBandwidth = 106;
|
||||||
|
pMax = 20;
|
||||||
|
#initialUplinkBWP
|
||||||
|
#genericParameters
|
||||||
|
initialULBWPlocationAndBandwidth = 6366; //28875; //6366; #6407; #3384;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
|
#rach-ConfigCommon
|
||||||
|
#rach-ConfigGeneric
|
||||||
|
prach_ConfigurationIndex = 98;
|
||||||
|
#prach_msg1_FDM
|
||||||
|
#0 = one, 1=two, 2=four, 3=eight
|
||||||
|
prach_msg1_FDM = 0;
|
||||||
|
prach_msg1_FrequencyStart = 0;
|
||||||
|
zeroCorrelationZoneConfig = 13;
|
||||||
|
preambleReceivedTargetPower = -118;
|
||||||
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
#powerRampingStep
|
||||||
|
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||||
|
powerRampingStep = 1;
|
||||||
|
#ra_ReponseWindow
|
||||||
|
#1,2,4,8,10,20,40,80
|
||||||
|
ra_ResponseWindow = 5;
|
||||||
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14; //15;
|
||||||
|
#ra_ContentionResolutionTimer
|
||||||
|
#(0..7) 8,16,24,32,40,48,56,64
|
||||||
|
ra_ContentionResolutionTimer = 7;
|
||||||
|
rsrp_ThresholdSSB = 19;
|
||||||
|
#prach-RootSequenceIndex_PR
|
||||||
|
#1 = 839, 2 = 139
|
||||||
|
prach_RootSequenceIndex_PR = 2;
|
||||||
|
prach_RootSequenceIndex = 1;
|
||||||
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
|
#
|
||||||
|
msg1_SubcarrierSpacing = 1,
|
||||||
|
|
||||||
|
# restrictedSetConfig
|
||||||
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
|
restrictedSetConfig = 0,
|
||||||
|
# pusch-ConfigCommon (up to 16 elements)
|
||||||
|
initialULBWPk2_0 = 2;
|
||||||
|
initialULBWPmappingType_0 = 1
|
||||||
|
# this is SS=0 L=11
|
||||||
|
initialULBWPstartSymbolAndLength_0 = 55;
|
||||||
|
|
||||||
|
initialULBWPk2_1 = 2;
|
||||||
|
initialULBWPmappingType_1 = 1;
|
||||||
|
# this is SS=0 L=12
|
||||||
|
initialULBWPstartSymbolAndLength_1 = 69;
|
||||||
|
|
||||||
|
initialULBWPk2_2 = 7;
|
||||||
|
initialULBWPmappingType_2 = 1;
|
||||||
|
# this is SS=10 L=4
|
||||||
|
initialULBWPstartSymbolAndLength_2 = 52;
|
||||||
|
|
||||||
|
msg3_DeltaPreamble = 1;
|
||||||
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
|
# pucch-ConfigCommon setup :
|
||||||
|
# pucchGroupHopping
|
||||||
|
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||||
|
pucchGroupHopping = 0;
|
||||||
|
hoppingId = 40;
|
||||||
|
p0_nominal = -90;
|
||||||
|
# ssb_PositionsInBurs_BitmapPR
|
||||||
|
# 1=short, 2=medium, 3=long
|
||||||
|
ssb_PositionsInBurst_PR = 2;
|
||||||
|
ssb_PositionsInBurst_Bitmap = 1; #0x80;
|
||||||
|
|
||||||
|
# ssb_periodicityServingCell
|
||||||
|
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||||
|
ssb_periodicityServingCell = 2;
|
||||||
|
|
||||||
|
# dmrs_TypeA_position
|
||||||
|
# 0 = pos2, 1 = pos3
|
||||||
|
dmrs_TypeA_Position = 0;
|
||||||
|
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
|
||||||
|
#tdd-UL-DL-ConfigurationCommon
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
referenceSubcarrierSpacing = 1;
|
||||||
|
# pattern1
|
||||||
|
# dl_UL_TransmissionPeriodicity
|
||||||
|
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||||
|
dl_UL_TransmissionPeriodicity = 6;
|
||||||
|
nrofDownlinkSlots = 7; //8; //7;
|
||||||
|
nrofDownlinkSymbols = 6; //0; //6;
|
||||||
|
nrofUplinkSlots = 2;
|
||||||
|
nrofUplinkSymbols = 4; //0; //4;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "192.168.18.99";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
///X2
|
||||||
|
enable_x2 = "yes";
|
||||||
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
target_enb_x2_ip_address = (
|
||||||
|
{ ipv4 = "192.168.18.199";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.18.198/24";
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.18.198/24";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
GNB_IPV4_ADDRESS_FOR_X2C = "192.168.18.198/24";
|
||||||
|
GNB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 114;
|
||||||
|
eNB_instances = [0];
|
||||||
|
clock_src = "internal";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
//parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||||
|
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
+1912
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
|
After Width: | Height: | Size: 91 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 247 KiB |
BIN
Binary file not shown.
+38680
File diff suppressed because it is too large
Load Diff
@@ -401,7 +401,7 @@ void sendFs6Ul(PHY_VARS_eNB *eNB, int UE_id, int harq_pid, int segmentID, int16_
|
|||||||
hULUE(newUDPheader)->O_ACK=eNB->ulsch[UE_id]->harq_processes[harq_pid]->O_ACK;
|
hULUE(newUDPheader)->O_ACK=eNB->ulsch[UE_id]->harq_processes[harq_pid]->O_ACK;
|
||||||
memcpy(hULUE(newUDPheader)->o_ACK, eNB->ulsch[UE_id]->harq_processes[harq_pid]->o_ACK,
|
memcpy(hULUE(newUDPheader)->o_ACK, eNB->ulsch[UE_id]->harq_processes[harq_pid]->o_ACK,
|
||||||
sizeof(eNB->ulsch[UE_id]->harq_processes[harq_pid]->o_ACK));
|
sizeof(eNB->ulsch[UE_id]->harq_processes[harq_pid]->o_ACK));
|
||||||
hULUE(newUDPheader)->ta=lte_est_timing_advance_pusch(eNB, UE_id);
|
hULUE(newUDPheader)->ta=lte_est_timing_advance_pusch(&eNB->frame_parms, eNB->pusch_vars[UE_id]->drs_ch_estimates_time);
|
||||||
hULUE(newUDPheader)->segment=segmentID;
|
hULUE(newUDPheader)->segment=segmentID;
|
||||||
memcpy(hULUE(newUDPheader)->o, eNB->ulsch[UE_id]->harq_processes[harq_pid]->o,
|
memcpy(hULUE(newUDPheader)->o, eNB->ulsch[UE_id]->harq_processes[harq_pid]->o,
|
||||||
sizeof(eNB->ulsch[UE_id]->harq_processes[harq_pid]->o));
|
sizeof(eNB->ulsch[UE_id]->harq_processes[harq_pid]->o));
|
||||||
@@ -917,7 +917,7 @@ void phy_procedures_eNB_TX_fromsplit(uint8_t *bufferZone, int nbBlocks, PHY_VARS
|
|||||||
|
|
||||||
if (NFAPI_MODE==NFAPI_MONOLITHIC || NFAPI_MODE==NFAPI_MODE_PNF) {
|
if (NFAPI_MODE==NFAPI_MONOLITHIC || NFAPI_MODE==NFAPI_MODE_PNF) {
|
||||||
if (is_pmch_subframe(frame,subframe,fp)) {
|
if (is_pmch_subframe(frame,subframe,fp)) {
|
||||||
pmch_procedures(eNB,proc);
|
pmch_procedures(eNB,proc,0);
|
||||||
} else {
|
} else {
|
||||||
// this is not a pmch subframe, so generate PSS/SSS/PBCH
|
// this is not a pmch subframe, so generate PSS/SSS/PBCH
|
||||||
common_signal_procedures(eNB,frame, subframe);
|
common_signal_procedures(eNB,frame, subframe);
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
|
|||||||
int split73;
|
int split73;
|
||||||
char * split73_config;
|
char * split73_config;
|
||||||
int split73;
|
int split73;
|
||||||
|
int usrp_tx_thread = 0;
|
||||||
|
|
||||||
static void *ru_thread( void *param );
|
static void *ru_thread( void *param );
|
||||||
void kill_RU_proc(RU_t *ru) {
|
void kill_RU_proc(RU_t *ru) {
|
||||||
@@ -1123,9 +1124,6 @@ int restart_L1L2(module_id_t enb_id) {
|
|||||||
sync_var = -1;
|
sync_var = -1;
|
||||||
pthread_mutex_unlock(&sync_mutex);
|
pthread_mutex_unlock(&sync_mutex);
|
||||||
RC.ru_mask |= (1 << ru->idx);
|
RC.ru_mask |= (1 << ru->idx);
|
||||||
/* copy the changed frame parameters to the RU */
|
|
||||||
/* TODO this should be done for all RUs associated to this eNB */
|
|
||||||
memcpy(&ru->frame_parms, &RC.eNB[enb_id][0]->frame_parms, sizeof(LTE_DL_FRAME_PARMS));
|
|
||||||
/* reset the list of connected UEs in the MAC, since in this process with
|
/* reset the list of connected UEs in the MAC, since in this process with
|
||||||
* loose all UEs (have to reconnect) */
|
* loose all UEs (have to reconnect) */
|
||||||
init_UE_info(&RC.mac[enb_id]->UE_info);
|
init_UE_info(&RC.mac[enb_id]->UE_info);
|
||||||
@@ -1153,6 +1151,7 @@ int restart_L1L2(module_id_t enb_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main ( int argc, char **argv ) {
|
int main ( int argc, char **argv ) {
|
||||||
|
//mtrace();
|
||||||
int i;
|
int i;
|
||||||
int CC_id = 0;
|
int CC_id = 0;
|
||||||
int node_type = ngran_eNB;
|
int node_type = ngran_eNB;
|
||||||
@@ -1166,6 +1165,7 @@ int main ( int argc, char **argv ) {
|
|||||||
T_Config_Init();
|
T_Config_Init();
|
||||||
#endif
|
#endif
|
||||||
configure_linux();
|
configure_linux();
|
||||||
|
set_softmodem_sighandler();
|
||||||
cpuf=get_cpu_freq_GHz();
|
cpuf=get_cpu_freq_GHz();
|
||||||
set_taus_seed (0);
|
set_taus_seed (0);
|
||||||
|
|
||||||
@@ -1346,7 +1346,7 @@ int main ( int argc, char **argv ) {
|
|||||||
// end of CI modifications
|
// end of CI modifications
|
||||||
//getchar();
|
//getchar();
|
||||||
if(IS_SOFTMODEM_DOFORMS)
|
if(IS_SOFTMODEM_DOFORMS)
|
||||||
load_softscope("enb");
|
load_softscope("enb", NULL);
|
||||||
|
|
||||||
itti_wait_tasks_end();
|
itti_wait_tasks_end();
|
||||||
oai_exit=1;
|
oai_exit=1;
|
||||||
|
|||||||
+13
-5
@@ -47,7 +47,7 @@
|
|||||||
#include "SCHED/sched_eNB.h"
|
#include "SCHED/sched_eNB.h"
|
||||||
#include "SCHED_NR/sched_nr.h"
|
#include "SCHED_NR/sched_nr.h"
|
||||||
#include "SCHED_NR/fapi_nr_l1.h"
|
#include "SCHED_NR/fapi_nr_l1.h"
|
||||||
#include "PHY/LTE_TRANSPORT/transport_proto.h"
|
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
|
||||||
|
|
||||||
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
|
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
|
||||||
//#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
|
//#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
|
||||||
@@ -61,7 +61,6 @@
|
|||||||
|
|
||||||
#include "PHY/phy_extern.h"
|
#include "PHY/phy_extern.h"
|
||||||
|
|
||||||
|
|
||||||
#include "LAYER2/NR_MAC_COMMON/nr_mac_extern.h"
|
#include "LAYER2/NR_MAC_COMMON/nr_mac_extern.h"
|
||||||
#include "RRC/LTE/rrc_extern.h"
|
#include "RRC/LTE/rrc_extern.h"
|
||||||
#include "PHY_INTERFACE/phy_interface.h"
|
#include "PHY_INTERFACE/phy_interface.h"
|
||||||
@@ -164,14 +163,14 @@ static inline int rxtx(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int frame_t
|
|||||||
/*if (gNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus||
|
/*if (gNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus||
|
||||||
gNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs ||
|
gNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs ||
|
||||||
gNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs ||
|
gNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs ||
|
||||||
gNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles ||
|
gNB->UL_INFO.rach_ind.number_of_pdus ||
|
||||||
gNB->UL_INFO.cqi_ind.number_of_cqis
|
gNB->UL_INFO.cqi_ind.number_of_cqis
|
||||||
) {
|
) {
|
||||||
LOG_D(PHY, "UL_info[rx_ind:%05d:%d harqs:%05d:%d crcs:%05d:%d preambles:%05d:%d cqis:%d] RX:%04d%d TX:%04d%d \n",
|
LOG_D(PHY, "UL_info[rx_ind:%05d:%d harqs:%05d:%d crcs:%05d:%d rach_pdus:%0d.%d:%d cqis:%d] RX:%04d%d TX:%04d%d \n",
|
||||||
NFAPI_SFNSF2DEC(gNB->UL_INFO.rx_ind.sfn_sf), gNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus,
|
NFAPI_SFNSF2DEC(gNB->UL_INFO.rx_ind.sfn_sf), gNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus,
|
||||||
NFAPI_SFNSF2DEC(gNB->UL_INFO.harq_ind.sfn_sf), gNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs,
|
NFAPI_SFNSF2DEC(gNB->UL_INFO.harq_ind.sfn_sf), gNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs,
|
||||||
NFAPI_SFNSF2DEC(gNB->UL_INFO.crc_ind.sfn_sf), gNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs,
|
NFAPI_SFNSF2DEC(gNB->UL_INFO.crc_ind.sfn_sf), gNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs,
|
||||||
NFAPI_SFNSF2DEC(gNB->UL_INFO.rach_ind.sfn_sf), gNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles,
|
gNB->UL_INFO.rach_ind.sfn, gNB->UL_INFO.rach_ind.slot,gNB->UL_INFO.rach_ind.number_of_pdus,
|
||||||
gNB->UL_INFO.cqi_ind.number_of_cqis,
|
gNB->UL_INFO.cqi_ind.number_of_cqis,
|
||||||
frame_rx, slot_rx,
|
frame_rx, slot_rx,
|
||||||
frame_tx, slot_tx);
|
frame_tx, slot_tx);
|
||||||
@@ -204,6 +203,13 @@ static inline int rxtx(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int frame_t
|
|||||||
if (rx_slot_type == NR_UPLINK_SLOT || rx_slot_type == NR_MIXED_SLOT) {
|
if (rx_slot_type == NR_UPLINK_SLOT || rx_slot_type == NR_MIXED_SLOT) {
|
||||||
// UE-specific RX processing for subframe n
|
// UE-specific RX processing for subframe n
|
||||||
// TODO: check if this is correct for PARALLEL_RU_L1_TRX_SPLIT
|
// TODO: check if this is correct for PARALLEL_RU_L1_TRX_SPLIT
|
||||||
|
|
||||||
|
// Do PRACH RU processing
|
||||||
|
int prach_id=find_nr_prach(gNB,frame_rx,slot_rx,0,SEARCH_EXIST);
|
||||||
|
if (prach_id>=0) {
|
||||||
|
L1_nr_prach_procedures(gNB,frame_rx,slot_rx,&gNB->prach_vars.list[prach_id].pdu);
|
||||||
|
gNB->prach_vars.list[prach_id].frame=-1;
|
||||||
|
}
|
||||||
phy_procedures_gNB_uespec_RX(gNB, frame_rx, slot_rx);
|
phy_procedures_gNB_uespec_RX(gNB, frame_rx, slot_rx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -959,12 +965,14 @@ void init_gNB(int single_thread_flag,int wait_for_sync) {
|
|||||||
gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
|
gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
|
||||||
memset((void *)&gNB->UL_INFO,0,sizeof(gNB->UL_INFO));
|
memset((void *)&gNB->UL_INFO,0,sizeof(gNB->UL_INFO));
|
||||||
LOG_I(PHY,"Setting indication lists\n");
|
LOG_I(PHY,"Setting indication lists\n");
|
||||||
|
|
||||||
gNB->UL_INFO.rx_ind.pdu_list = gNB->rx_pdu_list;
|
gNB->UL_INFO.rx_ind.pdu_list = gNB->rx_pdu_list;
|
||||||
gNB->UL_INFO.crc_ind.crc_list = gNB->crc_pdu_list;
|
gNB->UL_INFO.crc_ind.crc_list = gNB->crc_pdu_list;
|
||||||
/*gNB->UL_INFO.sr_ind.sr_indication_body.sr_pdu_list = gNB->sr_pdu_list;
|
/*gNB->UL_INFO.sr_ind.sr_indication_body.sr_pdu_list = gNB->sr_pdu_list;
|
||||||
gNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list = gNB->harq_pdu_list;
|
gNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list = gNB->harq_pdu_list;
|
||||||
gNB->UL_INFO.cqi_ind.cqi_pdu_list = gNB->cqi_pdu_list;
|
gNB->UL_INFO.cqi_ind.cqi_pdu_list = gNB->cqi_pdu_list;
|
||||||
gNB->UL_INFO.cqi_ind.cqi_raw_pdu_list = gNB->cqi_raw_pdu_list;*/
|
gNB->UL_INFO.cqi_ind.cqi_raw_pdu_list = gNB->cqi_raw_pdu_list;*/
|
||||||
|
|
||||||
gNB->prach_energy_counter = 0;
|
gNB->prach_energy_counter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+138
-54
@@ -51,6 +51,7 @@
|
|||||||
#include "PHY/defs_nr_common.h"
|
#include "PHY/defs_nr_common.h"
|
||||||
#include "PHY/phy_extern.h"
|
#include "PHY/phy_extern.h"
|
||||||
#include "PHY/LTE_TRANSPORT/transport_proto.h"
|
#include "PHY/LTE_TRANSPORT/transport_proto.h"
|
||||||
|
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
|
||||||
#include "PHY/INIT/phy_init.h"
|
#include "PHY/INIT/phy_init.h"
|
||||||
#include "SCHED/sched_eNB.h"
|
#include "SCHED/sched_eNB.h"
|
||||||
#include "SCHED_NR/sched_nr.h"
|
#include "SCHED_NR/sched_nr.h"
|
||||||
@@ -118,6 +119,7 @@ uint16_t sl_ahead;
|
|||||||
|
|
||||||
extern int emulate_rf;
|
extern int emulate_rf;
|
||||||
extern int numerology;
|
extern int numerology;
|
||||||
|
extern int usrp_tx_thread;
|
||||||
|
|
||||||
/*************************************************************/
|
/*************************************************************/
|
||||||
/* Functions to attach and configure RRU */
|
/* Functions to attach and configure RRU */
|
||||||
@@ -179,6 +181,17 @@ int attach_rru(RU_t *ru)
|
|||||||
((RRU_config_t *)&rru_config_msg.msg[0])->prach_ConfigIndex[0]);
|
((RRU_config_t *)&rru_config_msg.msg[0])->prach_ConfigIndex[0]);
|
||||||
AssertFatal((ru->ifdevice.trx_ctlsend_func(&ru->ifdevice,&rru_config_msg,rru_config_msg.len)!=-1),
|
AssertFatal((ru->ifdevice.trx_ctlsend_func(&ru->ifdevice,&rru_config_msg,rru_config_msg.len)!=-1),
|
||||||
"RU %d failed send configuration to remote radio\n",ru->idx);
|
"RU %d failed send configuration to remote radio\n",ru->idx);
|
||||||
|
|
||||||
|
if ((len = ru->ifdevice.trx_ctlrecv_func(&ru->ifdevice,
|
||||||
|
&rru_config_msg,
|
||||||
|
msg_len))<0) {
|
||||||
|
LOG_I(PHY,"Waiting for RRU %d\n",ru->idx);
|
||||||
|
} else if (rru_config_msg.type == RRU_config_ok) {
|
||||||
|
LOG_I(PHY, "RRU_config_ok received\n");
|
||||||
|
} else {
|
||||||
|
LOG_E(PHY,"Received incorrect message %d from RRU %d\n",rru_config_msg.type,ru->idx);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -290,7 +303,7 @@ void fh_if5_south_out(RU_t *ru, int frame, int slot, uint64_t timestamp)
|
|||||||
// southbound IF4p5 fronthaul
|
// southbound IF4p5 fronthaul
|
||||||
void fh_if4p5_south_out(RU_t *ru, int frame, int slot, uint64_t timestamp)
|
void fh_if4p5_south_out(RU_t *ru, int frame, int slot, uint64_t timestamp)
|
||||||
{
|
{
|
||||||
nfapi_nr_config_request_scf_t *cfg = &ru->gNB_list[0]->gNB_config;
|
nfapi_nr_config_request_scf_t *cfg = &ru->config;
|
||||||
if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
|
if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
|
||||||
|
|
||||||
LOG_D(PHY,"Sending IF4p5 for frame %d subframe %d\n",ru->proc.frame_tx,ru->proc.tti_tx);
|
LOG_D(PHY,"Sending IF4p5 for frame %d subframe %d\n",ru->proc.frame_tx,ru->proc.tti_tx);
|
||||||
@@ -501,7 +514,7 @@ void fh_if5_north_asynch_in(RU_t *ru,int *frame,int *slot) {
|
|||||||
|
|
||||||
void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *slot) {
|
void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *slot) {
|
||||||
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
|
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
|
||||||
nfapi_nr_config_request_scf_t *cfg = &ru->gNB_list[0]->gNB_config;
|
nfapi_nr_config_request_scf_t *cfg = &ru->config;
|
||||||
RU_proc_t *proc = &ru->proc;
|
RU_proc_t *proc = &ru->proc;
|
||||||
uint16_t packet_type;
|
uint16_t packet_type;
|
||||||
uint32_t symbol_number,symbol_mask,symbol_mask_full=0;
|
uint32_t symbol_number,symbol_mask,symbol_mask_full=0;
|
||||||
@@ -698,7 +711,7 @@ void rx_rf(RU_t *ru,int *frame,int *slot) {
|
|||||||
void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
|
void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
|
||||||
RU_proc_t *proc = &ru->proc;
|
RU_proc_t *proc = &ru->proc;
|
||||||
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
|
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
|
||||||
nfapi_nr_config_request_scf_t *cfg = &ru->gNB_list[0]->gNB_config;
|
nfapi_nr_config_request_scf_t *cfg = &ru->config;
|
||||||
void *txp[ru->nb_tx];
|
void *txp[ru->nb_tx];
|
||||||
unsigned int txs;
|
unsigned int txs;
|
||||||
int i,txsymb;
|
int i,txsymb;
|
||||||
@@ -771,8 +784,8 @@ void tx_rf(RU_t *ru,int frame,int slot, uint64_t timestamp) {
|
|||||||
siglen+sf_extension,
|
siglen+sf_extension,
|
||||||
ru->nb_tx,
|
ru->nb_tx,
|
||||||
flags);
|
flags);
|
||||||
LOG_D(PHY,"[TXPATH] RU %d tx_rf, writing to TS %llu, frame %d, unwrapped_frame %d, slot %d\n",ru->idx,
|
LOG_D(PHY,"[TXPATH] RU %d tx_rf, writing to TS %llu, frame %d, unwrapped_frame %d, slot %di, returned %d\n",ru->idx,
|
||||||
(long long unsigned int)timestamp,frame,proc->frame_tx_unwrap,slot);
|
(long long unsigned int)timestamp,frame,proc->frame_tx_unwrap,slot, txs);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 );
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 );
|
||||||
//AssertFatal(txs == 0,"trx write function error %d\n", txs);
|
//AssertFatal(txs == 0,"trx write function error %d\n", txs);
|
||||||
}
|
}
|
||||||
@@ -790,7 +803,7 @@ void *ru_thread_asynch_rxtx( void *param ) {
|
|||||||
static int ru_thread_asynch_rxtx_status;
|
static int ru_thread_asynch_rxtx_status;
|
||||||
RU_t *ru = (RU_t *)param;
|
RU_t *ru = (RU_t *)param;
|
||||||
RU_proc_t *proc = &ru->proc;
|
RU_proc_t *proc = &ru->proc;
|
||||||
nfapi_nr_config_request_scf_t *cfg = &ru->gNB_list[0]->gNB_config;
|
nfapi_nr_config_request_scf_t *cfg = &ru->config;
|
||||||
int slot=0, frame=0;
|
int slot=0, frame=0;
|
||||||
// wait for top-level synchronization and do one acquisition to get timestamp for setting frame/subframe
|
// wait for top-level synchronization and do one acquisition to get timestamp for setting frame/subframe
|
||||||
wait_sync("ru_thread_asynch_rxtx");
|
wait_sync("ru_thread_asynch_rxtx");
|
||||||
@@ -1035,11 +1048,11 @@ int wakeup_prach_ru(RU_t *ru) {
|
|||||||
void fill_rf_config(RU_t *ru, char *rf_config_file) {
|
void fill_rf_config(RU_t *ru, char *rf_config_file) {
|
||||||
int i;
|
int i;
|
||||||
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
|
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
|
||||||
nfapi_nr_config_request_scf_t *gNB_config = &ru->gNB_list[0]->gNB_config; //tmp index
|
nfapi_nr_config_request_scf_t *config = &ru->config; //tmp index
|
||||||
openair0_config_t *cfg = &ru->openair0_cfg;
|
openair0_config_t *cfg = &ru->openair0_cfg;
|
||||||
int mu = gNB_config->ssb_config.scs_common.value;
|
int mu = config->ssb_config.scs_common.value;
|
||||||
int N_RB = gNB_config->carrier_config.dl_grid_size[gNB_config->ssb_config.scs_common.value].value;
|
int N_RB = config->carrier_config.dl_grid_size[config->ssb_config.scs_common.value].value;
|
||||||
N_RB = 106; // TODO: hard coding (change later)
|
|
||||||
if (mu == NR_MU_0) { //or if LTE
|
if (mu == NR_MU_0) { //or if LTE
|
||||||
if(N_RB == 100) {
|
if(N_RB == 100) {
|
||||||
if (fp->threequarter_fs) {
|
if (fp->threequarter_fs) {
|
||||||
@@ -1123,7 +1136,7 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) {
|
|||||||
AssertFatal(0 == 1,"Numerology %d not supported for the moment\n",mu);
|
AssertFatal(0 == 1,"Numerology %d not supported for the moment\n",mu);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gNB_config->cell_config.frame_duplex_type.value==TDD)
|
if (config->cell_config.frame_duplex_type.value==TDD)
|
||||||
cfg->duplex_mode = duplex_mode_TDD;
|
cfg->duplex_mode = duplex_mode_TDD;
|
||||||
else //FDD
|
else //FDD
|
||||||
cfg->duplex_mode = duplex_mode_FDD;
|
cfg->duplex_mode = duplex_mode_FDD;
|
||||||
@@ -1162,7 +1175,7 @@ int setup_RU_buffers(RU_t *ru) {
|
|||||||
int card,ant;
|
int card,ant;
|
||||||
//uint16_t N_TA_offset = 0;
|
//uint16_t N_TA_offset = 0;
|
||||||
NR_DL_FRAME_PARMS *frame_parms;
|
NR_DL_FRAME_PARMS *frame_parms;
|
||||||
//nfapi_nr_config_request_t *gNB_config = ru->gNB_list[0]->gNB_config; //tmp index
|
nfapi_nr_config_request_scf_t *config = &ru->config;
|
||||||
|
|
||||||
if (ru) {
|
if (ru) {
|
||||||
frame_parms = ru->nr_frame_parms;
|
frame_parms = ru->nr_frame_parms;
|
||||||
@@ -1171,12 +1184,54 @@ int setup_RU_buffers(RU_t *ru) {
|
|||||||
printf("ru pointer is NULL\n");
|
printf("ru pointer is NULL\n");
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
int mu = config->ssb_config.scs_common.value;
|
||||||
|
int N_RB = config->carrier_config.dl_grid_size[config->ssb_config.scs_common.value].value;
|
||||||
|
|
||||||
/* if (frame_parms->frame_type == TDD) {
|
|
||||||
if (frame_parms->N_RB_DL == 100) ru->N_TA_offset = 624;
|
if (config->cell_config.frame_duplex_type.value == TDD) {
|
||||||
else if (frame_parms->N_RB_DL == 50) ru->N_TA_offset = 624/2;
|
int N_TA_offset = config->carrier_config.uplink_frequency.value < 6000000 ? 400 : 431; // reference samples for 25600Tc @ 30.72 Ms/s for FR1, same @ 61.44 Ms/s for FR2
|
||||||
else if (frame_parms->N_RB_DL == 25) ru->N_TA_offset = 624/4;
|
|
||||||
} */
|
double factor=1;
|
||||||
|
|
||||||
|
switch (mu) {
|
||||||
|
case 0: //15 kHz scs
|
||||||
|
AssertFatal(N_TA_offset == 400,"scs_common 15kHz only for FR1\n");
|
||||||
|
if (N_RB <= 25) factor = .25; // 7.68 Ms/s
|
||||||
|
else if (N_RB <=50) factor = .5; // 15.36 Ms/s
|
||||||
|
else if (N_RB <=75) factor = 1.0; // 30.72 Ms/s
|
||||||
|
else if (N_RB <=100) factor = 1.0; // 30.72 Ms/s
|
||||||
|
else AssertFatal(1==0,"Too many PRBS for mu=0\n");
|
||||||
|
break;
|
||||||
|
case 1: //30 kHz sc
|
||||||
|
AssertFatal(N_TA_offset == 400,"scs_common 30kHz only for FR1\n");
|
||||||
|
if (N_RB <= 106) factor = 2.0; // 61.44 Ms/s
|
||||||
|
else if (N_RB <= 275) factor = 4.0; // 122.88 Ms/s
|
||||||
|
break;
|
||||||
|
case 2: //60 kHz scs
|
||||||
|
AssertFatal(1==0,"scs_common should not be 60 kHz\n");
|
||||||
|
break;
|
||||||
|
case 3: //120 kHz scs
|
||||||
|
AssertFatal(N_TA_offset == 431,"scs_common 120kHz only for FR2\n");
|
||||||
|
break;
|
||||||
|
case 4: //240 kHz scs
|
||||||
|
AssertFatal(1==0,"scs_common should not be 60 kHz\n");
|
||||||
|
if (N_RB <= 32) factor = 1.0; // 61.44 Ms/s
|
||||||
|
else if (N_RB <= 66) factor = 2.0; // 122.88 Ms/s
|
||||||
|
else AssertFatal(1==0,"N_RB %d is too big for curretn FR2 implementation\n",N_RB);
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (N_RB == 100) ru->N_TA_offset = 624;
|
||||||
|
else if (N_RB == 50) ru->N_TA_offset = 624/2;
|
||||||
|
else if (N_RB == 25) ru->N_TA_offset = 624/4;
|
||||||
|
}
|
||||||
|
if (frame_parms->threequarter_fs == 1) factor = factor*.75;
|
||||||
|
ru->N_TA_offset = (int)(N_TA_offset * factor);
|
||||||
|
LOG_I(PHY,"RU %d Setting N_TA_offset to %d samples (factor %f, UL Freq %d, N_RB %d)\n",ru->idx,ru->N_TA_offset,factor,
|
||||||
|
config->carrier_config.uplink_frequency.value, N_RB);
|
||||||
|
}
|
||||||
|
else ru->N_TA_offset = 0;
|
||||||
|
|
||||||
|
|
||||||
if (ru->openair0_cfg.mmapped_dma == 1) {
|
if (ru->openair0_cfg.mmapped_dma == 1) {
|
||||||
// replace RX signal buffers with mmaped HW versions
|
// replace RX signal buffers with mmaped HW versions
|
||||||
for (i=0; i<ru->nb_rx; i++) {
|
for (i=0; i<ru->nb_rx; i++) {
|
||||||
@@ -1389,7 +1444,7 @@ void *ru_thread( void *param ) {
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
int aa;
|
int aa;
|
||||||
|
|
||||||
nfapi_nr_config_request_scf_t *cfg = &ru->gNB_list[0]->gNB_config;
|
nfapi_nr_config_request_scf_t *cfg = &ru->config;
|
||||||
|
|
||||||
// set default return value
|
// set default return value
|
||||||
ru_thread_status = 0;
|
ru_thread_status = 0;
|
||||||
@@ -1399,9 +1454,11 @@ void *ru_thread( void *param ) {
|
|||||||
|
|
||||||
LOG_I(PHY,"Starting RU %d (%s,%s),\n",ru->idx,NB_functions[ru->function],NB_timing[ru->if_timing]);
|
LOG_I(PHY,"Starting RU %d (%s,%s),\n",ru->idx,NB_functions[ru->function],NB_timing[ru->if_timing]);
|
||||||
|
|
||||||
|
memcpy((void*)&ru->config,(void*)&RC.gNB[0]->gNB_config,sizeof(ru->config));
|
||||||
|
|
||||||
if(emulate_rf) {
|
if(emulate_rf) {
|
||||||
fill_rf_config(ru,ru->rf_config_file);
|
fill_rf_config(ru,ru->rf_config_file);
|
||||||
nr_init_frame_parms(&ru->gNB_list[0]->gNB_config, fp);
|
nr_init_frame_parms(&ru->config, fp);
|
||||||
nr_dump_frame_parms(fp);
|
nr_dump_frame_parms(fp);
|
||||||
nr_phy_init_RU(ru);
|
nr_phy_init_RU(ru);
|
||||||
|
|
||||||
@@ -1422,7 +1479,7 @@ void *ru_thread( void *param ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ru->if_south == LOCAL_RF) { // configure RF parameters only
|
if (ru->if_south == LOCAL_RF) { // configure RF parameters only
|
||||||
nr_init_frame_parms(&ru->gNB_list[0]->gNB_config, fp);
|
nr_init_frame_parms(&ru->config, fp);
|
||||||
nr_dump_frame_parms(fp);
|
nr_dump_frame_parms(fp);
|
||||||
fill_rf_config(ru,ru->rf_config_file);
|
fill_rf_config(ru,ru->rf_config_file);
|
||||||
nr_phy_init_RU(ru);
|
nr_phy_init_RU(ru);
|
||||||
@@ -1466,12 +1523,14 @@ void *ru_thread( void *param ) {
|
|||||||
if ((ru->is_slave) && (ru->if_south == LOCAL_RF)) do_ru_synch(ru);
|
if ((ru->is_slave) && (ru->if_south == LOCAL_RF)) do_ru_synch(ru);
|
||||||
|
|
||||||
// start trx write thread
|
// start trx write thread
|
||||||
if (ru->start_write_thread){
|
if(usrp_tx_thread == 1){
|
||||||
if(ru->start_write_thread(ru) != 0){
|
if (ru->start_write_thread){
|
||||||
LOG_E(HW,"Could not start tx write thread\n");
|
if(ru->start_write_thread(ru) != 0){
|
||||||
}
|
LOG_E(HW,"Could not start tx write thread\n");
|
||||||
else{
|
}
|
||||||
LOG_I(PHY,"tx write thread ready\n");
|
else{
|
||||||
|
LOG_I(PHY,"tx write thread ready\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1524,7 +1583,8 @@ void *ru_thread( void *param ) {
|
|||||||
if (slot_type == NR_UPLINK_SLOT || slot_type == NR_MIXED_SLOT) {
|
if (slot_type == NR_UPLINK_SLOT || slot_type == NR_MIXED_SLOT) {
|
||||||
//if (proc->tti_rx==8) {
|
//if (proc->tti_rx==8) {
|
||||||
|
|
||||||
if (ru->feprx) ru->feprx(ru,proc->tti_rx);
|
if (ru->feprx) {
|
||||||
|
ru->feprx(ru,proc->tti_rx);
|
||||||
//LOG_M("rxdata.m","rxs",ru->common.rxdata[0],1228800,1,1);
|
//LOG_M("rxdata.m","rxs",ru->common.rxdata[0],1228800,1,1);
|
||||||
|
|
||||||
LOG_D(PHY,"RU proc: frame_rx = %d, tti_rx = %d\n", proc->frame_rx, proc->tti_rx);
|
LOG_D(PHY,"RU proc: frame_rx = %d, tti_rx = %d\n", proc->frame_rx, proc->tti_rx);
|
||||||
@@ -1533,6 +1593,18 @@ void *ru_thread( void *param ) {
|
|||||||
for (aa=0;aa<ru->nb_rx;aa++)
|
for (aa=0;aa<ru->nb_rx;aa++)
|
||||||
memcpy((void*)RC.gNB[0]->common_vars.rxdataF[aa],
|
memcpy((void*)RC.gNB[0]->common_vars.rxdataF[aa],
|
||||||
(void*)ru->common.rxdataF[aa], fp->symbols_per_slot*fp->ofdm_symbol_size*sizeof(int32_t));
|
(void*)ru->common.rxdataF[aa], fp->symbols_per_slot*fp->ofdm_symbol_size*sizeof(int32_t));
|
||||||
|
|
||||||
|
// Do PRACH RU processing
|
||||||
|
int prach_id=find_nr_prach_ru(ru,proc->frame_rx,proc->tti_rx,SEARCH_EXIST);
|
||||||
|
if (prach_id>=0) {
|
||||||
|
rx_nr_prach_ru(ru,
|
||||||
|
ru->prach_list[prach_id].fmt,
|
||||||
|
ru->prach_list[prach_id].numRA,
|
||||||
|
ru->prach_list[prach_id].prachStartSymbol,
|
||||||
|
proc->frame_rx,proc->tti_rx);
|
||||||
|
free_nr_ru_prach_entry(ru,prach_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// At this point, all information for subframe has been received on FH interface
|
// At this point, all information for subframe has been received on FH interface
|
||||||
@@ -1904,7 +1976,7 @@ void configure_ru(int idx,
|
|||||||
RU_t *ru = RC.ru[idx];
|
RU_t *ru = RC.ru[idx];
|
||||||
RRU_config_t *config = (RRU_config_t *)arg;
|
RRU_config_t *config = (RRU_config_t *)arg;
|
||||||
RRU_capabilities_t *capabilities = (RRU_capabilities_t *)arg;
|
RRU_capabilities_t *capabilities = (RRU_capabilities_t *)arg;
|
||||||
nfapi_nr_config_request_scf_t *gNB_config = &ru->gNB_list[0]->gNB_config;
|
nfapi_nr_config_request_scf_t *cfg = &ru->config;
|
||||||
int ret;
|
int ret;
|
||||||
LOG_I(PHY, "Received capabilities from RRU %d\n",idx);
|
LOG_I(PHY, "Received capabilities from RRU %d\n",idx);
|
||||||
|
|
||||||
@@ -1927,15 +1999,15 @@ void configure_ru(int idx,
|
|||||||
//config->tdd_config_S[0] = ru->nr_frame_parms->tdd_config_S;
|
//config->tdd_config_S[0] = ru->nr_frame_parms->tdd_config_S;
|
||||||
config->att_tx[0] = ru->att_tx;
|
config->att_tx[0] = ru->att_tx;
|
||||||
config->att_rx[0] = ru->att_rx;
|
config->att_rx[0] = ru->att_rx;
|
||||||
config->N_RB_DL[0] = gNB_config->carrier_config.dl_grid_size[gNB_config->ssb_config.scs_common.value].value;
|
config->N_RB_DL[0] = cfg->carrier_config.dl_grid_size[cfg->ssb_config.scs_common.value].value;
|
||||||
config->N_RB_UL[0] = gNB_config->carrier_config.dl_grid_size[gNB_config->ssb_config.scs_common.value].value;
|
config->N_RB_UL[0] = cfg->carrier_config.dl_grid_size[cfg->ssb_config.scs_common.value].value;
|
||||||
config->threequarter_fs[0] = ru->nr_frame_parms->threequarter_fs;
|
config->threequarter_fs[0] = ru->nr_frame_parms->threequarter_fs;
|
||||||
/* if (ru->if_south==REMOTE_IF4p5) {
|
/* if (ru->if_south==REMOTE_IF4p5) {
|
||||||
config->prach_FreqOffset[0] = ru->nr_frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset;
|
config->prach_FreqOffset[0] = ru->nr_frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset;
|
||||||
config->prach_ConfigIndex[0] = ru->nr_frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
|
config->prach_ConfigIndex[0] = ru->nr_frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
|
||||||
LOG_I(PHY,"REMOTE_IF4p5: prach_FrequOffset %d, prach_ConfigIndex %d\n",
|
LOG_I(PHY,"REMOTE_IF4p5: prach_FrequOffset %d, prach_ConfigIndex %d\n",
|
||||||
config->prach_FreqOffset[0],config->prach_ConfigIndex[0]);*/
|
config->prach_FreqOffset[0],config->prach_ConfigIndex[0]);*/
|
||||||
nr_init_frame_parms(&ru->gNB_list[0]->gNB_config, ru->nr_frame_parms);
|
nr_init_frame_parms(&ru->config, ru->nr_frame_parms);
|
||||||
nr_phy_init_RU(ru);
|
nr_phy_init_RU(ru);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1943,23 +2015,23 @@ void configure_rru(int idx,
|
|||||||
void *arg) {
|
void *arg) {
|
||||||
RRU_config_t *config = (RRU_config_t *)arg;
|
RRU_config_t *config = (RRU_config_t *)arg;
|
||||||
RU_t *ru = RC.ru[idx];
|
RU_t *ru = RC.ru[idx];
|
||||||
nfapi_nr_config_request_scf_t *gNB_config = &ru->gNB_list[0]->gNB_config;
|
nfapi_nr_config_request_scf_t *cfg = &ru->config;
|
||||||
ru->nr_frame_parms->nr_band = config->band_list[0];
|
ru->nr_frame_parms->nr_band = config->band_list[0];
|
||||||
ru->nr_frame_parms->dl_CarrierFreq = config->tx_freq[0];
|
ru->nr_frame_parms->dl_CarrierFreq = config->tx_freq[0];
|
||||||
ru->nr_frame_parms->ul_CarrierFreq = config->rx_freq[0];
|
ru->nr_frame_parms->ul_CarrierFreq = config->rx_freq[0];
|
||||||
|
|
||||||
if (ru->nr_frame_parms->dl_CarrierFreq == ru->nr_frame_parms->ul_CarrierFreq) {
|
if (ru->nr_frame_parms->dl_CarrierFreq == ru->nr_frame_parms->ul_CarrierFreq) {
|
||||||
gNB_config->cell_config.frame_duplex_type.value = TDD;
|
cfg->cell_config.frame_duplex_type.value = TDD;
|
||||||
//ru->nr_frame_parms->tdd_config = config->tdd_config[0];
|
//ru->nr_frame_parms->tdd_config = config->tdd_config[0];
|
||||||
//ru->nr_frame_parms->tdd_config_S = config->tdd_config_S[0];
|
//ru->nr_frame_parms->tdd_config_S = config->tdd_config_S[0];
|
||||||
} else
|
} else
|
||||||
gNB_config->cell_config.frame_duplex_type.value = FDD;
|
cfg->cell_config.frame_duplex_type.value = FDD;
|
||||||
|
|
||||||
ru->att_tx = config->att_tx[0];
|
ru->att_tx = config->att_tx[0];
|
||||||
ru->att_rx = config->att_rx[0];
|
ru->att_rx = config->att_rx[0];
|
||||||
int mu = gNB_config->ssb_config.scs_common.value;
|
int mu = cfg->ssb_config.scs_common.value;
|
||||||
gNB_config->carrier_config.dl_grid_size[mu].value = config->N_RB_DL[0];
|
cfg->carrier_config.dl_grid_size[mu].value = config->N_RB_DL[0];
|
||||||
gNB_config->carrier_config.dl_grid_size[mu].value = config->N_RB_UL[0];
|
cfg->carrier_config.dl_grid_size[mu].value = config->N_RB_UL[0];
|
||||||
ru->nr_frame_parms->threequarter_fs = config->threequarter_fs[0];
|
ru->nr_frame_parms->threequarter_fs = config->threequarter_fs[0];
|
||||||
|
|
||||||
//ru->nr_frame_parms->pdsch_config_common.referenceSignalPower = ru->max_pdschReferenceSignalPower-config->att_tx[0];
|
//ru->nr_frame_parms->pdsch_config_common.referenceSignalPower = ru->max_pdschReferenceSignalPower-config->att_tx[0];
|
||||||
@@ -1974,7 +2046,7 @@ void configure_rru(int idx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
fill_rf_config(ru,ru->rf_config_file);
|
fill_rf_config(ru,ru->rf_config_file);
|
||||||
nr_init_frame_parms(&ru->gNB_list[0]->gNB_config, ru->nr_frame_parms);
|
nr_init_frame_parms(&ru->config, ru->nr_frame_parms);
|
||||||
nr_phy_init_RU(ru);
|
nr_phy_init_RU(ru);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2073,26 +2145,29 @@ void set_function_spec_param(RU_t *ru) {
|
|||||||
ru->fh_north_out = NULL; // no outgoing fronthaul to north
|
ru->fh_north_out = NULL; // no outgoing fronthaul to north
|
||||||
ru->nr_start_if = NULL; // no if interface
|
ru->nr_start_if = NULL; // no if interface
|
||||||
ru->rfdevice.host_type = RAU_HOST;
|
ru->rfdevice.host_type = RAU_HOST;
|
||||||
|
|
||||||
|
// FK this here looks messed up. The following lines should be part of the if (ru->function == gNodeB_3GPP), shouldn't they?
|
||||||
|
|
||||||
|
ru->fh_south_in = rx_rf; // local synchronous RF RX
|
||||||
|
ru->fh_south_out = tx_rf; // local synchronous RF TX
|
||||||
|
ru->start_rf = start_rf; // need to start the local RF interface
|
||||||
|
ru->stop_rf = stop_rf;
|
||||||
|
ru->start_write_thread = start_write_thread; // starting RF TX in different thread
|
||||||
|
printf("configuring ru_id %u (start_rf %p)\n", ru->idx, start_rf);
|
||||||
}
|
}
|
||||||
|
|
||||||
ru->fh_south_in = rx_rf; // local synchronous RF RX
|
|
||||||
ru->fh_south_out = tx_rf; // local synchronous RF TX
|
|
||||||
ru->start_rf = start_rf; // need to start the local RF interface
|
|
||||||
ru->stop_rf = stop_rf;
|
|
||||||
ru->start_write_thread = start_write_thread; // starting RF TX in different thread
|
|
||||||
printf("configuring ru_id %u (start_rf %p)\n", ru->idx, start_rf);
|
|
||||||
/*
|
/*
|
||||||
if (ru->function == gNodeB_3GPP) { // configure RF parameters only for 3GPP eNodeB, we need to get them from RAU otherwise
|
printf("configuring ru_id %u (start_rf %p)\n", ru->idx, start_rf);
|
||||||
fill_rf_config(ru,rf_config_file);
|
fill_rf_config(ru,rf_config_file);
|
||||||
init_frame_parms(&ru->frame_parms,1);
|
init_frame_parms(&ru->frame_parms,1);
|
||||||
nr_phy_init_RU(ru);
|
nr_phy_init_RU(ru);
|
||||||
}
|
|
||||||
|
|
||||||
ret = openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
|
ret = openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
|
||||||
if (setup_RU_buffers(ru)!=0) {
|
if (setup_RU_buffers(ru)!=0) {
|
||||||
printf("Exiting, cannot initialize RU Buffers\n");
|
printf("Exiting, cannot initialize RU Buffers\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}*/
|
}
|
||||||
|
*/
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case REMOTE_IF5: // the remote unit is IF5 RRU
|
case REMOTE_IF5: // the remote unit is IF5 RRU
|
||||||
@@ -2145,6 +2220,15 @@ void set_function_spec_param(RU_t *ru) {
|
|||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ru->ifdevice.get_internal_parameter != NULL) {
|
||||||
|
void *t = ru->ifdevice.get_internal_parameter("fh_if4p5_south_in");
|
||||||
|
if (t != NULL)
|
||||||
|
ru->fh_south_in = t;
|
||||||
|
t = ru->ifdevice.get_internal_parameter("fh_if4p5_south_out");
|
||||||
|
if (t != NULL)
|
||||||
|
ru->fh_south_out = t;
|
||||||
|
}
|
||||||
|
|
||||||
malloc_IF4p5_buffer(ru);
|
malloc_IF4p5_buffer(ru);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -57,6 +57,7 @@
|
|||||||
#define CONFIG_HLP_DLSHIFT "dynamic shift for LLR compuation for TM3/4 (default 0)\n"
|
#define CONFIG_HLP_DLSHIFT "dynamic shift for LLR compuation for TM3/4 (default 0)\n"
|
||||||
#define CONFIG_HLP_UELOOP "get softmodem (UE) to loop through memory instead of acquiring from HW\n"
|
#define CONFIG_HLP_UELOOP "get softmodem (UE) to loop through memory instead of acquiring from HW\n"
|
||||||
#define CONFIG_HLP_PHYTST "test UE phy layer, mac disabled\n"
|
#define CONFIG_HLP_PHYTST "test UE phy layer, mac disabled\n"
|
||||||
|
#define CONFIG_HLP_DORA "test gNB and UE with RA procedures\n"
|
||||||
#define CONFIG_HLP_DMAMAP "sets flag for improved EXMIMO UE performance\n"
|
#define CONFIG_HLP_DMAMAP "sets flag for improved EXMIMO UE performance\n"
|
||||||
#define CONFIG_HLP_EXCCLK "tells hardware to use a clock reference (0:internal(default), 1:external, 2:gpsdo)\n"
|
#define CONFIG_HLP_EXCCLK "tells hardware to use a clock reference (0:internal(default), 1:external, 2:gpsdo)\n"
|
||||||
#define CONFIG_HLP_USIM "use XOR autentication algo in case of test usim mode\n"
|
#define CONFIG_HLP_USIM "use XOR autentication algo in case of test usim mode\n"
|
||||||
@@ -89,6 +90,7 @@
|
|||||||
#define CONFIG_HLP_EMULATE_RF "Emulated RF enabled(disable by defult)\n"
|
#define CONFIG_HLP_EMULATE_RF "Emulated RF enabled(disable by defult)\n"
|
||||||
#define CONFIG_HLP_PARALLEL_CMD "three config for level of parallelism 'PARALLEL_SINGLE_THREAD', 'PARALLEL_RU_L1_SPLIT', or 'PARALLEL_RU_L1_TRX_SPLIT'\n"
|
#define CONFIG_HLP_PARALLEL_CMD "three config for level of parallelism 'PARALLEL_SINGLE_THREAD', 'PARALLEL_RU_L1_SPLIT', or 'PARALLEL_RU_L1_TRX_SPLIT'\n"
|
||||||
#define CONFIG_HLP_WORKER_CMD "two option for worker 'WORKER_DISABLE' or 'WORKER_ENABLE'\n"
|
#define CONFIG_HLP_WORKER_CMD "two option for worker 'WORKER_DISABLE' or 'WORKER_ENABLE'\n"
|
||||||
|
#define CONFIG_HLP_USRP_THREAD "having extra thead for usrp tx\n"
|
||||||
#define CONFIG_HLP_DISABLNBIOT "disable nb-iot, even if defined in config\n"
|
#define CONFIG_HLP_DISABLNBIOT "disable nb-iot, even if defined in config\n"
|
||||||
|
|
||||||
#define CONFIG_HLP_USRP_ARGS "set the arguments to identify USRP (same syntax as in UHD)\n"
|
#define CONFIG_HLP_USRP_ARGS "set the arguments to identify USRP (same syntax as in UHD)\n"
|
||||||
@@ -143,6 +145,10 @@ extern int sync_var;
|
|||||||
extern int transmission_mode;
|
extern int transmission_mode;
|
||||||
extern double cpuf;
|
extern double cpuf;
|
||||||
|
|
||||||
|
extern int emulate_rf;
|
||||||
|
extern int numerology;
|
||||||
|
extern int usrp_tx_thread;
|
||||||
|
|
||||||
extern volatile int start_eNB;
|
extern volatile int start_eNB;
|
||||||
extern volatile int start_UE;
|
extern volatile int start_UE;
|
||||||
|
|
||||||
|
|||||||
+44
-36
@@ -75,7 +75,7 @@ unsigned short config_frames[4] = {2,9,11,13};
|
|||||||
|
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
#include <openair2/GNB_APP/gnb_app.h>
|
#include <openair2/GNB_APP/gnb_app.h>
|
||||||
|
#include "PHY/TOOLS/phy_scope_interface.h"
|
||||||
#include "PHY/TOOLS/nr_phy_scope.h"
|
#include "PHY/TOOLS/nr_phy_scope.h"
|
||||||
#include "stats.h"
|
#include "stats.h"
|
||||||
#include "nr-softmodem.h"
|
#include "nr-softmodem.h"
|
||||||
@@ -84,9 +84,6 @@ unsigned short config_frames[4] = {2,9,11,13};
|
|||||||
#include "NB_IoT_interface.h"
|
#include "NB_IoT_interface.h"
|
||||||
#include "x2ap_eNB.h"
|
#include "x2ap_eNB.h"
|
||||||
|
|
||||||
short nr_mod_table[NR_MOD_TABLE_SIZE_SHORT] = {0,0,16384,16384,-16384,-16384,16384,16384,16384,-16384,-16384,16384,-16384,-16384,7327,7327,7327,21981,21981,7327,21981,21981,7327,-7327,7327,-21981,21981,-7327,21981,-21981,-7327,7327,-7327,21981,-21981,7327,-21981,21981,-7327,-7327,-7327,-21981,-21981,-7327,-21981,-21981,10726,10726,10726,3576,3576,10726,3576,3576,10726,17876,10726,25027,3576,17876,3576,25027,17876,10726,17876,3576,25027,10726,25027,3576,17876,17876,17876,25027,25027,17876,25027,25027,10726,-10726,10726,-3576,3576,-10726,3576,-3576,10726,-17876,10726,-25027,3576,-17876,3576,-25027,17876,-10726,17876,-3576,25027,-10726,25027,-3576,17876,-17876,17876,-25027,25027,-17876,25027,-25027,-10726,10726,-10726,3576,-3576,10726,-3576,3576,-10726,17876,-10726,25027,-3576,17876,-3576,25027,-17876,10726,-17876,3576,-25027,10726,-25027,3576,-17876,17876,-17876,25027,-25027,17876,-25027,25027,-10726,-10726,-10726,-3576,-3576,-10726,-3576,-3576,-10726,-17876,-10726,-25027,-3576,-17876,-3576,-25027,-17876,-10726,-17876,-3576,-25027,-10726,-25027,-3576,-17876,-17876,-17876,-25027,-25027,-17876,-25027,-25027,8886,8886,8886,12439,12439,8886,12439,12439,8886,5332,8886,1778,12439,5332,12439,1778,5332,8886,5332,12439,1778,8886,1778,12439,5332,5332,5332,1778,1778,5332,1778,1778,8886,19547,8886,15993,12439,19547,12439,15993,8886,23101,8886,26655,12439,23101,12439,26655,5332,19547,5332,15993,1778,19547,1778,15993,5332,23101,5332,26655,1778,23101,1778,26655,19547,8886,19547,12439,15993,8886,15993,12439,19547,5332,19547,1778,15993,5332,15993,1778,23101,8886,23101,12439,26655,8886,26655,12439,23101,5332,23101,1778,26655,5332,26655,1778,19547,19547,19547,15993,15993,19547,15993,15993,19547,23101,19547,26655,15993,23101,15993,26655,23101,19547,23101,15993,26655,19547,26655,15993,23101,23101,23101,26655,26655,23101,26655,26655,8886,-8886,8886,-12439,12439,-8886,12439,-12439,8886,-5332,8886,-1778,12439,-5332,12439,-1778,5332,-8886,5332,-12439,1778,-8886,1778,-12439,5332,-5332,5332,-1778,1778,-5332,1778,-1778,8886,-19547,8886,-15993,12439,-19547,12439,-15993,8886,-23101,8886,-26655,12439,-23101,12439,-26655,5332,-19547,5332,-15993,1778,-19547,1778,-15993,5332,-23101,5332,-26655,1778,-23101,1778,-26655,19547,-8886,19547,-12439,15993,-8886,15993,-12439,19547,-5332,19547,-1778,15993,-5332,15993,-1778,23101,-8886,23101,-12439,26655,-8886,26655,-12439,23101,-5332,23101,-1778,26655,-5332,26655,-1778,19547,-19547,19547,-15993,15993,-19547,15993,-15993,19547,-23101,19547,-26655,15993,-23101,15993,-26655,23101,-19547,23101,-15993,26655,-19547,26655,-15993,23101,-23101,23101,-26655,26655,-23101,26655,-26655,-8886,8886,-8886,12439,-12439,8886,-12439,12439,-8886,5332,-8886,1778,-12439,5332,-12439,1778,-5332,8886,-5332,12439,-1778,8886,-1778,12439,-5332,5332,-5332,1778,-1778,5332,-1778,1778,-8886,19547,-8886,15993,-12439,19547,-12439,15993,-8886,23101,-8886,26655,-12439,23101,-12439,26655,-5332,19547,-5332,15993,-1778,19547,-1778,15993,-5332,23101,-5332,26655,-1778,23101,-1778,26655,-19547,8886,-19547,12439,-15993,8886,-15993,12439,-19547,5332,-19547,1778,-15993,5332,-15993,1778,-23101,8886,-23101,12439,-26655,8886,-26655,12439,-23101,5332,-23101,1778,-26655,5332,-26655,1778,-19547,19547,-19547,15993,-15993,19547,-15993,15993,-19547,23101,-19547,26655,-15993,23101,-15993,26655,-23101,19547,-23101,15993,-26655,19547,-26655,15993,-23101,23101,-23101,26655,-26655,23101,-26655,26655,-8886,-8886,-8886,-12439,-12439,-8886,-12439,-12439,-8886,-5332,-8886,-1778,-12439,-5332,-12439,-1778,-5332,-8886,-5332,-12439,-1778,-8886,-1778,-12439,-5332,-5332,-5332,-1778,-1778,-5332,-1778,-1778,-8886,-19547,-8886,-15993,-12439,-19547,-12439,-15993,-8886,-23101,-8886,-26655,-12439,-23101,-12439,-26655,-5332,-19547,-5332,-15993,-1778,-19547,-1778,-15993,-5332,-23101,-5332,-26655,-1778,-23101,-1778,-26655,-19547,-8886,-19547,-12439,-15993,-8886,-15993,-12439,-19547,-5332,-19547,-1778,-15993,-5332,-15993,-1778,-23101,-8886,-23101,-12439,-26655,-8886,-26655,-12439,-23101,-5332,-23101,-1778,-26655,-5332,-26655,-1778,-19547,-19547,-19547,-15993,-15993,-19547,-15993,-15993,-19547,-23101,-19547,-26655,-15993,-23101,-15993,-26655,-23101,-19547,-23101,-15993,-26655,-19547,-26655,-15993,-23101,-23101,-23101,-26655,-26655,-23101,-26655,-26655};
|
|
||||||
|
|
||||||
|
|
||||||
pthread_cond_t nfapi_sync_cond;
|
pthread_cond_t nfapi_sync_cond;
|
||||||
pthread_mutex_t nfapi_sync_mutex;
|
pthread_mutex_t nfapi_sync_mutex;
|
||||||
int nfapi_sync_var=-1; //!< protected by mutex \ref nfapi_sync_mutex
|
int nfapi_sync_var=-1; //!< protected by mutex \ref nfapi_sync_mutex
|
||||||
@@ -156,7 +153,6 @@ char channels[128] = "0";
|
|||||||
|
|
||||||
int rx_input_level_dBm;
|
int rx_input_level_dBm;
|
||||||
|
|
||||||
uint32_t do_forms=0;
|
|
||||||
int otg_enabled;
|
int otg_enabled;
|
||||||
|
|
||||||
//int number_of_cards = 1;
|
//int number_of_cards = 1;
|
||||||
@@ -178,10 +174,12 @@ extern void reset_opp_meas(void);
|
|||||||
extern void print_opp_meas(void);
|
extern void print_opp_meas(void);
|
||||||
|
|
||||||
extern void init_eNB_afterRU(void);
|
extern void init_eNB_afterRU(void);
|
||||||
|
extern void *udp_eNB_task(void *args_p);
|
||||||
|
|
||||||
int transmission_mode=1;
|
int transmission_mode=1;
|
||||||
int emulate_rf = 0;
|
int emulate_rf = 0;
|
||||||
int numerology = 0;
|
int numerology = 0;
|
||||||
|
int usrp_tx_thread = 0;
|
||||||
|
|
||||||
|
|
||||||
static char *parallel_config = NULL;
|
static char *parallel_config = NULL;
|
||||||
@@ -384,10 +382,10 @@ int create_gNB_tasks(uint32_t gnb_nb) {
|
|||||||
|
|
||||||
if (gnb_nb > 0) {
|
if (gnb_nb > 0) {
|
||||||
/* Last task to create, others task must be ready before its start */
|
/* Last task to create, others task must be ready before its start */
|
||||||
if (itti_create_task (TASK_GNB_APP, gNB_app_task, NULL) < 0) {
|
/*if (itti_create_task (TASK_GNB_APP, gNB_app_task, NULL) < 0) {
|
||||||
LOG_E(GNB_APP, "Create task for gNB APP failed\n");
|
LOG_E(GNB_APP, "Create task for gNB APP failed\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}*/
|
||||||
if(itti_create_task(TASK_SCTP, sctp_eNB_task, NULL) < 0){
|
if(itti_create_task(TASK_SCTP, sctp_eNB_task, NULL) < 0){
|
||||||
LOG_E(SCTP, "Create task for SCTP failed\n");
|
LOG_E(SCTP, "Create task for SCTP failed\n");
|
||||||
return -1;
|
return -1;
|
||||||
@@ -402,35 +400,39 @@ int create_gNB_tasks(uint32_t gnb_nb) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (EPC_MODE_ENABLED && (get_softmodem_params()->phy_test==0 && get_softmodem_params()->do_ra==0)) {
|
||||||
if (EPC_MODE_ENABLED) {
|
if (gnb_nb > 0) {
|
||||||
if (gnb_nb > 0) {
|
/*if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) {
|
||||||
if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) {
|
LOG_E(SCTP, "Create task for SCTP failed\n");
|
||||||
LOG_E(SCTP, "Create task for SCTP failed\n");
|
return -1;
|
||||||
return -1;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (itti_create_task (TASK_S1AP, s1ap_eNB_task, NULL) < 0) {
|
if (itti_create_task (TASK_S1AP, s1ap_eNB_task, NULL) < 0) {
|
||||||
LOG_E(S1AP, "Create task for S1AP failed\n");
|
LOG_E(S1AP, "Create task for S1AP failed\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}*/
|
||||||
if(!emulate_rf){
|
|
||||||
if (itti_create_task (TASK_UDP, udp_eNB_task, NULL) < 0) {
|
|
||||||
LOG_E(UDP_, "Create task for UDP failed\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (itti_create_task (TASK_GTPV1_U, >pv1u_eNB_task, NULL) < 0) {
|
|
||||||
LOG_E(GTPU, "Create task for GTPV1U failed\n");
|
if(!emulate_rf){
|
||||||
return -1;
|
if (itti_create_task (TASK_UDP, udp_eNB_task, NULL) < 0) {
|
||||||
}
|
LOG_E(UDP_, "Create task for UDP failed\n");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itti_create_task (TASK_GTPV1_U, >pv1u_gNB_task, NULL) < 0) {
|
||||||
|
LOG_E(GTPU, "Create task for GTPV1U failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*/
|
}
|
||||||
|
|
||||||
|
|
||||||
if (gnb_nb > 0) {
|
if (gnb_nb > 0) {
|
||||||
|
if (itti_create_task (TASK_GNB_APP, gNB_app_task, NULL) < 0) {
|
||||||
|
LOG_E(GNB_APP, "Create task for gNB APP failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
LOG_I(NR_RRC,"Creating NR RRC gNB Task\n");
|
LOG_I(NR_RRC,"Creating NR RRC gNB Task\n");
|
||||||
|
|
||||||
if (itti_create_task (TASK_RRC_GNB, rrc_gnb_task, NULL) < 0) {
|
if (itti_create_task (TASK_RRC_GNB, rrc_gnb_task, NULL) < 0) {
|
||||||
@@ -448,7 +450,11 @@ static void get_options(void) {
|
|||||||
|
|
||||||
paramdef_t cmdline_params[] = CMDLINE_PARAMS_DESC_GNB ;
|
paramdef_t cmdline_params[] = CMDLINE_PARAMS_DESC_GNB ;
|
||||||
|
|
||||||
|
CONFIG_SETRTFLAG(CONFIG_NOEXITONHELP);
|
||||||
|
get_common_options(SOFTMODEM_GNB_BIT );
|
||||||
config_process_cmdline( cmdline_params,sizeof(cmdline_params)/sizeof(paramdef_t),NULL);
|
config_process_cmdline( cmdline_params,sizeof(cmdline_params)/sizeof(paramdef_t),NULL);
|
||||||
|
CONFIG_CLEARRTFLAG(CONFIG_NOEXITONHELP);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -717,9 +723,6 @@ int restart_L1L2(module_id_t gnb_id) {
|
|||||||
|
|
||||||
|
|
||||||
RC.ru_mask |= (1 << ru->idx);
|
RC.ru_mask |= (1 << ru->idx);
|
||||||
/* copy the changed frame parameters to the RU */
|
|
||||||
/* TODO this should be done for all RUs associated to this gNB */
|
|
||||||
memcpy(&ru->nr_frame_parms, &RC.gNB[gnb_id]->frame_parms, sizeof(NR_DL_FRAME_PARMS));
|
|
||||||
set_function_spec_param(RC.ru[gnb_id]);
|
set_function_spec_param(RC.ru[gnb_id]);
|
||||||
LOG_I(GNB_APP, "attempting to create ITTI tasks\n");
|
LOG_I(GNB_APP, "attempting to create ITTI tasks\n");
|
||||||
// No more rrc thread, as many race conditions are hidden behind
|
// No more rrc thread, as many race conditions are hidden behind
|
||||||
@@ -812,7 +815,6 @@ int main( int argc, char **argv )
|
|||||||
configure_linux();
|
configure_linux();
|
||||||
printf("Reading in command-line options\n");
|
printf("Reading in command-line options\n");
|
||||||
get_options ();
|
get_options ();
|
||||||
get_common_options(SOFTMODEM_GNB_BIT );
|
|
||||||
|
|
||||||
if (CONFIG_ISFLAGSET(CONFIG_ABORT) ) {
|
if (CONFIG_ISFLAGSET(CONFIG_ABORT) ) {
|
||||||
fprintf(stderr,"Getting configuration failed\n");
|
fprintf(stderr,"Getting configuration failed\n");
|
||||||
@@ -820,6 +822,10 @@ int main( int argc, char **argv )
|
|||||||
}
|
}
|
||||||
|
|
||||||
openair0_cfg[0].threequarter_fs = threequarter_fs;
|
openair0_cfg[0].threequarter_fs = threequarter_fs;
|
||||||
|
EPC_MODE_ENABLED = !IS_SOFTMODEM_NOS1; //!get_softmodem_params()->phy_test;
|
||||||
|
|
||||||
|
if (get_softmodem_params()->do_ra)
|
||||||
|
AssertFatal(get_softmodem_params()->phy_test == 0,"RA and phy_test are mutually exclusive\n");
|
||||||
|
|
||||||
#if T_TRACER
|
#if T_TRACER
|
||||||
T_Config_Init();
|
T_Config_Init();
|
||||||
@@ -950,12 +956,14 @@ if(!IS_SOFTMODEM_NOS1)
|
|||||||
printf("RC.nb_RU:%d\n", RC.nb_RU);
|
printf("RC.nb_RU:%d\n", RC.nb_RU);
|
||||||
// once all RUs are ready initialize the rest of the gNBs ((dependence on final RU parameters after configuration)
|
// once all RUs are ready initialize the rest of the gNBs ((dependence on final RU parameters after configuration)
|
||||||
printf("ALL RUs ready - init gNBs\n");
|
printf("ALL RUs ready - init gNBs\n");
|
||||||
|
if(IS_SOFTMODEM_DOFORMS) {
|
||||||
if (do_forms==1) {
|
|
||||||
scopeParms_t p;
|
scopeParms_t p;
|
||||||
p.argc=&argc;
|
p.argc=&argc;
|
||||||
p.argv=argv;
|
p.argv=argv;
|
||||||
startScope(&p);
|
p.gNB=RC.gNB[0];
|
||||||
|
p.ru=RC.ru[0];
|
||||||
|
load_softscope("nr",&p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nfapi_mode != 1 && nfapi_mode != 2) {
|
if (nfapi_mode != 1 && nfapi_mode != 2) {
|
||||||
|
|||||||
@@ -19,21 +19,13 @@
|
|||||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
#define CMDLINE_PARAMS_DESC_GNB { \
|
#define CMDLINE_PARAMS_DESC_GNB { \
|
||||||
{"mmapped-dma", CONFIG_HLP_DMAMAP, PARAMFLAG_BOOL, uptr:&mmapped_dma, defintval:0, TYPE_INT, 0}, \
|
{"mmapped-dma", CONFIG_HLP_DMAMAP, PARAMFLAG_BOOL, uptr:&mmapped_dma, defintval:0, TYPE_INT, 0}, \
|
||||||
{"wait-for-sync", NULL, PARAMFLAG_BOOL, iptr:&wait_for_sync, defintval:0, TYPE_INT, 0}, \
|
|
||||||
{"single-thread-disable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&single_thread_flag, defintval:1, TYPE_INT, 0}, \
|
{"single-thread-disable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&single_thread_flag, defintval:1, TYPE_INT, 0}, \
|
||||||
{"A" , CONFIG_HLP_TADV, 0, uptr:&timing_advance, defintval:0, TYPE_UINT, 0}, \
|
{"A" , CONFIG_HLP_TADV, 0, uptr:&timing_advance, defintval:0, TYPE_UINT, 0}, \
|
||||||
{"C" , CONFIG_HLP_DLF, 0, u64ptr:&(downlink_frequency[0][0]), defuintval:DEFAULT_DLF, TYPE_UINT64, 0}, \
|
|
||||||
{"a" , CONFIG_HLP_CHOFF, 0, iptr:&chain_offset, defintval:0, TYPE_INT, 0}, \
|
|
||||||
{"d" , CONFIG_HLP_SOFTS, PARAMFLAG_BOOL, uptr:(uint32_t *)&do_forms, defintval:0, TYPE_INT8, 0}, \
|
|
||||||
{"E" , CONFIG_HLP_TQFS, PARAMFLAG_BOOL, i8ptr:&threequarter_fs, defintval:0, TYPE_INT8, 0}, \
|
{"E" , CONFIG_HLP_TQFS, PARAMFLAG_BOOL, i8ptr:&threequarter_fs, defintval:0, TYPE_INT8, 0}, \
|
||||||
{"K" , CONFIG_HLP_ITTIL, PARAMFLAG_NOFREE, strptr:&itti_dump_file, defstrval:"/tmp/itti.dump", TYPE_STRING, 0}, \
|
{"K" , CONFIG_HLP_ITTIL, PARAMFLAG_NOFREE, strptr:&itti_dump_file, defstrval:"/tmp/itti.dump", TYPE_STRING, 0}, \
|
||||||
{"m" , CONFIG_HLP_DLMCS, 0, uptr:&target_dl_mcs, defintval:0, TYPE_UINT, 0}, \
|
{"m" , CONFIG_HLP_DLMCS, 0, uptr:&target_dl_mcs, defintval:0, TYPE_UINT, 0}, \
|
||||||
{"t" , CONFIG_HLP_ULMCS, 0, uptr:&target_ul_mcs, defintval:0, TYPE_UINT, 0}, \
|
{"t" , CONFIG_HLP_ULMCS, 0, uptr:&target_ul_mcs, defintval:0, TYPE_UINT, 0}, \
|
||||||
{"q" , CONFIG_HLP_STMON, PARAMFLAG_BOOL, iptr:&opp_enabled, defintval:0, TYPE_INT, 0}, \
|
{"usrp-tx-thread-config", CONFIG_HLP_USRP_THREAD, 0, iptr:&usrp_tx_thread, defstrval:0, TYPE_INT, 0}, \
|
||||||
{"numerology" , CONFIG_HLP_NUMEROLOGY, PARAMFLAG_BOOL, iptr:&numerology, defintval:0, TYPE_INT, 0}, \
|
|
||||||
{"emulate-rf" , CONFIG_HLP_EMULATE_RF, PARAMFLAG_BOOL, iptr:&emulate_rf, defintval:0, TYPE_INT, 0}, \
|
|
||||||
{"parallel-config", CONFIG_HLP_PARALLEL_CMD,0, strptr:(char **)¶llel_config, defstrval:NULL, TYPE_STRING, 0}, \
|
|
||||||
{"worker-config", CONFIG_HLP_WORKER_CMD, 0, strptr:(char **)&worker_config, defstrval:NULL, TYPE_STRING, 0}, \
|
|
||||||
{"s" , CONFIG_HLP_SNR, 0, dblptr:&snr_dB, defdblval:25, TYPE_DOUBLE, 0}, \
|
{"s" , CONFIG_HLP_SNR, 0, dblptr:&snr_dB, defdblval:25, TYPE_DOUBLE, 0}, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+106
-161
@@ -21,7 +21,7 @@
|
|||||||
#include "executables/thread-common.h"
|
#include "executables/thread-common.h"
|
||||||
#include "executables/nr-uesoftmodem.h"
|
#include "executables/nr-uesoftmodem.h"
|
||||||
|
|
||||||
#include "LAYER2/NR_MAC_UE/mac.h"
|
#include "NR_MAC_UE/mac.h"
|
||||||
//#include "RRC/LTE/rrc_extern.h"
|
//#include "RRC/LTE/rrc_extern.h"
|
||||||
#include "PHY_INTERFACE/phy_interface_extern.h"
|
#include "PHY_INTERFACE/phy_interface_extern.h"
|
||||||
|
|
||||||
@@ -32,12 +32,10 @@
|
|||||||
#include "PHY/phy_extern_nr_ue.h"
|
#include "PHY/phy_extern_nr_ue.h"
|
||||||
#include "PHY/INIT/phy_init.h"
|
#include "PHY/INIT/phy_init.h"
|
||||||
#include "PHY/MODULATION/modulation_UE.h"
|
#include "PHY/MODULATION/modulation_UE.h"
|
||||||
#include "LAYER2/NR_MAC_UE/mac_proto.h"
|
#include "NR_MAC_UE/mac_proto.h"
|
||||||
#include "RRC/NR_UE/rrc_proto.h"
|
#include "RRC/NR_UE/rrc_proto.h"
|
||||||
|
|
||||||
//#ifndef NO_RAT_NR
|
#include "SCHED_NR_UE/phy_frame_config_nr.h"
|
||||||
#include "SCHED_NR/phy_frame_config_nr.h"
|
|
||||||
//#endif
|
|
||||||
#include "SCHED_NR_UE/defs.h"
|
#include "SCHED_NR_UE/defs.h"
|
||||||
|
|
||||||
#include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h"
|
#include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h"
|
||||||
@@ -123,7 +121,7 @@ extern double cpuf;
|
|||||||
#ifndef NO_RAT_NR
|
#ifndef NO_RAT_NR
|
||||||
#define DURATION_RX_TO_TX (NR_UE_CAPABILITY_SLOT_RX_TO_TX) /* for NR this will certainly depends to such UE capability which is not yet defined */
|
#define DURATION_RX_TO_TX (NR_UE_CAPABILITY_SLOT_RX_TO_TX) /* for NR this will certainly depends to such UE capability which is not yet defined */
|
||||||
#else
|
#else
|
||||||
#define DURATION_RX_TO_TX (4) /* For LTE, this duration is fixed to 4 and it is linked to LTE standard for both modes FDD/TDD */
|
#define DURATION_RX_TO_TX (6) /* For LTE, this duration is fixed to 4 and it is linked to LTE standard for both modes FDD/TDD */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define FRAME_PERIOD 100000000ULL
|
#define FRAME_PERIOD 100000000ULL
|
||||||
@@ -142,15 +140,24 @@ void init_nr_ue_vars(PHY_VARS_NR_UE *ue,
|
|||||||
uint8_t abstraction_flag)
|
uint8_t abstraction_flag)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
int nb_connected_gNB = 1, gNB_id;
|
||||||
|
|
||||||
memcpy(&(ue->frame_parms), frame_parms, sizeof(NR_DL_FRAME_PARMS));
|
memcpy(&(ue->frame_parms), frame_parms, sizeof(NR_DL_FRAME_PARMS));
|
||||||
|
|
||||||
ue->Mod_id = UE_id;
|
ue->Mod_id = UE_id;
|
||||||
ue->mac_enabled = 1;
|
ue->mac_enabled = 1;
|
||||||
|
|
||||||
|
// Setting UE mode to NOT_SYNCHED by default
|
||||||
|
for (gNB_id = 0; gNB_id < nb_connected_gNB; gNB_id++){
|
||||||
|
ue->UE_mode[gNB_id] = NOT_SYNCHED;
|
||||||
|
ue->prach_resources[gNB_id] = (NR_PRACH_RESOURCES_t *)malloc16_clear(sizeof(NR_PRACH_RESOURCES_t));
|
||||||
|
}
|
||||||
|
|
||||||
// initialize all signal buffers
|
// initialize all signal buffers
|
||||||
init_nr_ue_signal(ue,1,abstraction_flag);
|
init_nr_ue_signal(ue, nb_connected_gNB, abstraction_flag);
|
||||||
|
|
||||||
// intialize transport
|
// intialize transport
|
||||||
init_nr_ue_transport(ue,abstraction_flag);
|
init_nr_ue_transport(ue, abstraction_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -357,83 +364,31 @@ static void UE_synch(void *arg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void processSlotTX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
|
void processSlotTX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
|
||||||
|
fapi_nr_config_request_t *cfg = &UE->nrUE_config;
|
||||||
|
int tx_slot_type = nr_ue_slot_select(cfg, proc->frame_tx, proc->nr_tti_tx);
|
||||||
|
uint8_t gNB_id = 0;
|
||||||
|
|
||||||
uint32_t rb_size, rb_start;
|
if (tx_slot_type == NR_UPLINK_SLOT || tx_slot_type == NR_MIXED_SLOT){
|
||||||
uint16_t rnti, l_prime_mask, n_rb0, n_rb1, pdu_bit_map;
|
|
||||||
uint8_t nr_of_symbols, start_symbol_index, mcs_index, mcs_table, nrOfLayers, harq_process_id, rv_index, dmrs_config_type;
|
|
||||||
uint8_t ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, ptrs_time_density, ptrs_freq_density;
|
|
||||||
nr_dcireq_t dcireq;
|
|
||||||
nr_scheduled_response_t scheduled_response;
|
|
||||||
|
|
||||||
// program PUSCH. this should actually be done by the MAC upon reception of an UL DCI
|
// trigger L2 to run ue_scheduler thru IF module
|
||||||
if (proc->nr_tti_tx == 8 || UE->frame_parms.frame_type == FDD){
|
// [TODO] mapping right after NR initial sync
|
||||||
|
if(UE->if_inst != NULL && UE->if_inst->ul_indication != NULL) {
|
||||||
|
nr_uplink_indication_t ul_indication;
|
||||||
|
memset((void*)&ul_indication, 0, sizeof(ul_indication));
|
||||||
|
|
||||||
dcireq.module_id = UE->Mod_id;
|
ul_indication.module_id = UE->Mod_id;
|
||||||
dcireq.gNB_index = 0;
|
ul_indication.gNB_index = gNB_id;
|
||||||
dcireq.cc_id = 0;
|
ul_indication.cc_id = UE->CC_id;
|
||||||
dcireq.frame = proc->frame_rx;
|
ul_indication.frame_rx = proc->frame_rx;
|
||||||
dcireq.slot = proc->nr_tti_rx;
|
ul_indication.slot_rx = proc->nr_tti_rx;
|
||||||
|
ul_indication.frame_tx = proc->frame_tx;
|
||||||
|
ul_indication.slot_tx = proc->nr_tti_tx;
|
||||||
|
|
||||||
scheduled_response.dl_config = NULL;
|
UE->if_inst->ul_indication(&ul_indication);
|
||||||
scheduled_response.ul_config = &dcireq.ul_config_req;
|
|
||||||
scheduled_response.tx_request = NULL;
|
|
||||||
scheduled_response.module_id = UE->Mod_id;
|
|
||||||
scheduled_response.CC_id = 0;
|
|
||||||
scheduled_response.frame = proc->frame_rx;
|
|
||||||
scheduled_response.slot = proc->nr_tti_rx;
|
|
||||||
//--------------------------Temporary configuration-----------------------------//
|
|
||||||
rnti = 0x1234;
|
|
||||||
rb_size = 50;
|
|
||||||
rb_start = 0;
|
|
||||||
nr_of_symbols = 12;
|
|
||||||
start_symbol_index = 2;
|
|
||||||
nrOfLayers = 1;
|
|
||||||
mcs_index = 9;
|
|
||||||
mcs_table = 0;
|
|
||||||
harq_process_id = 0;
|
|
||||||
rv_index = 0;
|
|
||||||
l_prime_mask = get_l_prime(nr_of_symbols, typeB, pusch_dmrs_pos0, pusch_len1);
|
|
||||||
dmrs_config_type = 0;
|
|
||||||
ptrs_mcs1 = 2;
|
|
||||||
ptrs_mcs2 = 4;
|
|
||||||
ptrs_mcs3 = 10;
|
|
||||||
n_rb0 = 25;
|
|
||||||
n_rb1 = 75;
|
|
||||||
pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA;
|
|
||||||
ptrs_time_density = get_L_ptrs(ptrs_mcs1, ptrs_mcs2, ptrs_mcs3, mcs_index, mcs_table);
|
|
||||||
ptrs_freq_density = get_K_ptrs(n_rb0, n_rb1, rb_size);
|
|
||||||
//------------------------------------------------------------------------------//
|
|
||||||
|
|
||||||
scheduled_response.ul_config->slot = 8;
|
|
||||||
scheduled_response.ul_config->number_pdus = 1;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pdu_type = FAPI_NR_UL_CONFIG_TYPE_PUSCH;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.rnti = rnti;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.rb_size = rb_size;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.rb_start = rb_start;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.nr_of_symbols = nr_of_symbols;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.start_symbol_index = start_symbol_index;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.ul_dmrs_symb_pos = l_prime_mask << start_symbol_index;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.dmrs_config_type = dmrs_config_type;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.mcs_index = mcs_index;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.mcs_table = mcs_table;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.pusch_data.new_data_indicator = 0;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.pusch_data.rv_index = rv_index;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.nrOfLayers = nrOfLayers;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.pusch_data.harq_process_id = harq_process_id;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.pdu_bit_map = pdu_bit_map;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.pusch_ptrs.ptrs_time_density = ptrs_time_density;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.pusch_ptrs.ptrs_freq_density = ptrs_freq_density;
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.pusch_ptrs.ptrs_ports_list = (nfapi_nr_ue_ptrs_ports_t *) malloc(2*sizeof(nfapi_nr_ue_ptrs_ports_t));
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.pusch_ptrs.ptrs_ports_list[0].ptrs_re_offset = 0;
|
|
||||||
|
|
||||||
if (1 << ptrs_time_density >= nr_of_symbols) {
|
|
||||||
scheduled_response.ul_config->ul_config_list[0].pusch_config_pdu.pdu_bit_map &= ~PUSCH_PDU_BITMAP_PUSCH_PTRS; // disable PUSCH PTRS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nr_ue_scheduled_response(&scheduled_response);
|
|
||||||
|
|
||||||
if (UE->mode != loop_through_memory) {
|
if (UE->mode != loop_through_memory) {
|
||||||
uint8_t thread_id = PHY_vars_UE_g[UE->Mod_id][0]->current_thread_id[proc->nr_tti_tx];
|
uint8_t thread_id = PHY_vars_UE_g[UE->Mod_id][0]->current_thread_id[proc->nr_tti_rx];
|
||||||
phy_procedures_nrUE_TX(UE,proc,0,thread_id);
|
phy_procedures_nrUE_TX(UE,proc,0,thread_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -441,41 +396,26 @@ void processSlotTX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
|
|||||||
|
|
||||||
void processSlotRX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
|
void processSlotRX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
|
||||||
|
|
||||||
nr_dcireq_t dcireq;
|
fapi_nr_config_request_t *cfg = &UE->nrUE_config;
|
||||||
nr_scheduled_response_t scheduled_response;
|
int rx_slot_type = nr_ue_slot_select(cfg, proc->frame_rx, proc->nr_tti_rx);
|
||||||
uint8_t ssb_period = UE->nrUE_config.ssb_table.ssb_period;
|
uint8_t gNB_id = 0;
|
||||||
|
|
||||||
//program DCI for slot 1
|
if (rx_slot_type == NR_DOWNLINK_SLOT || rx_slot_type == NR_MIXED_SLOT){
|
||||||
//TODO: all of this has to be moved to the MAC!!!
|
|
||||||
if (proc->nr_tti_rx == NR_DOWNLINK_SLOT || UE->frame_parms.frame_type == FDD){
|
|
||||||
dcireq.module_id = UE->Mod_id;
|
|
||||||
dcireq.gNB_index = 0;
|
|
||||||
dcireq.cc_id = 0;
|
|
||||||
dcireq.frame = proc->frame_rx;
|
|
||||||
dcireq.slot = proc->nr_tti_rx;
|
|
||||||
nr_ue_dcireq(&dcireq); //to be replaced with function pointer later
|
|
||||||
|
|
||||||
// we should have received a DL DCI here, so configure DL accordingly
|
if(UE->if_inst != NULL && UE->if_inst->dl_indication != NULL) {
|
||||||
scheduled_response.dl_config = &dcireq.dl_config_req;
|
nr_downlink_indication_t dl_indication;
|
||||||
scheduled_response.ul_config = NULL;
|
memset((void*)&dl_indication, 0, sizeof(dl_indication));
|
||||||
scheduled_response.tx_request = NULL;
|
|
||||||
scheduled_response.module_id = UE->Mod_id;
|
dl_indication.module_id = UE->Mod_id;
|
||||||
scheduled_response.CC_id = 0;
|
dl_indication.gNB_index = gNB_id;
|
||||||
if (!((proc->frame_rx)%(1<<(ssb_period-1)))) {
|
dl_indication.cc_id = UE->CC_id;
|
||||||
if(proc->frame_rx > dcireq.dl_config_req.sfn)
|
dl_indication.frame = proc->frame_rx;
|
||||||
UE->frame_gap = proc->frame_rx - dcireq.dl_config_req.sfn;
|
dl_indication.slot = proc->nr_tti_rx;
|
||||||
if(proc->frame_rx < dcireq.dl_config_req.sfn)
|
|
||||||
UE->frame_gap = dcireq.dl_config_req.sfn - proc->frame_rx;
|
UE->if_inst->dl_indication(&dl_indication, NULL);
|
||||||
proc->frame_rx = dcireq.dl_config_req.sfn;
|
|
||||||
}
|
}
|
||||||
scheduled_response.frame = proc->frame_rx;
|
|
||||||
scheduled_response.slot = proc->nr_tti_rx;
|
|
||||||
|
|
||||||
nr_ue_scheduled_response(&scheduled_response);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process Rx data for one sub-frame
|
// Process Rx data for one sub-frame
|
||||||
if ( proc->nr_tti_rx >=0 && proc->nr_tti_rx <= 1 ) {
|
|
||||||
#ifdef UE_SLOT_PARALLELISATION
|
#ifdef UE_SLOT_PARALLELISATION
|
||||||
phy_procedures_slot_parallelization_nrUE_RX( UE, proc, 0, 0, 1, UE->mode, no_relay, NULL );
|
phy_procedures_slot_parallelization_nrUE_RX( UE, proc, 0, 0, 1, UE->mode, no_relay, NULL );
|
||||||
#else
|
#else
|
||||||
@@ -510,6 +450,7 @@ void processSlotRX( PHY_VARS_NR_UE *UE, UE_nr_rxtx_proc_t *proc) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -526,25 +467,26 @@ typedef struct processingData_s {
|
|||||||
} processingData_t;
|
} processingData_t;
|
||||||
|
|
||||||
void UE_processing(void *arg) {
|
void UE_processing(void *arg) {
|
||||||
processingData_t *rxtxD=(processingData_t *) arg;
|
processingData_t *rxtxD = (processingData_t *) arg;
|
||||||
UE_nr_rxtx_proc_t *proc = &rxtxD->proc;
|
UE_nr_rxtx_proc_t *proc = &rxtxD->proc;
|
||||||
PHY_VARS_NR_UE *UE = rxtxD->UE;
|
PHY_VARS_NR_UE *UE = rxtxD->UE;
|
||||||
|
|
||||||
uint8_t gNB_id = 0;
|
processSlotRX(UE, proc);
|
||||||
|
processSlotTX(UE, proc);
|
||||||
// params for UL time alignment procedure
|
|
||||||
NR_UL_TIME_ALIGNMENT_t *ul_time_alignment = &UE->ul_time_alignment[gNB_id];
|
|
||||||
uint8_t numerology = UE->frame_parms.numerology_index;
|
|
||||||
uint16_t bwp_ul_NB_RB = UE->frame_parms.N_RB_UL;
|
|
||||||
int slot_tx = proc->nr_tti_tx;
|
|
||||||
int frame_tx = proc->frame_tx;
|
|
||||||
|
|
||||||
/* UL time alignment
|
/* UL time alignment
|
||||||
// If the current tx frame and slot match the TA configuration in ul_time_alignment
|
// If the current tx frame and slot match the TA configuration in ul_time_alignment
|
||||||
// then timing advance is processed and set to be applied in the next UL transmission */
|
// then timing advance is processed and set to be applied in the next UL transmission */
|
||||||
if (UE->mac_enabled == 1) {
|
if (UE->mac_enabled == 1) {
|
||||||
|
uint8_t gNB_id = 0;
|
||||||
|
NR_UL_TIME_ALIGNMENT_t *ul_time_alignment = &UE->ul_time_alignment[gNB_id];
|
||||||
|
int slot_tx = proc->nr_tti_tx;
|
||||||
|
int frame_tx = proc->frame_tx;
|
||||||
|
|
||||||
if (frame_tx == ul_time_alignment->ta_frame && slot_tx == ul_time_alignment->ta_slot) {
|
if (frame_tx == ul_time_alignment->ta_frame && slot_tx == ul_time_alignment->ta_slot) {
|
||||||
|
uint8_t numerology = UE->frame_parms.numerology_index;
|
||||||
|
uint16_t bwp_ul_NB_RB = UE->frame_parms.N_RB_UL;
|
||||||
|
|
||||||
LOG_D(PHY,"Applying timing advance -- frame %d -- slot %d\n", frame_tx, slot_tx);
|
LOG_D(PHY,"Applying timing advance -- frame %d -- slot %d\n", frame_tx, slot_tx);
|
||||||
|
|
||||||
//if (nfapi_mode!=3){
|
//if (nfapi_mode!=3){
|
||||||
@@ -554,11 +496,6 @@ void UE_processing(void *arg) {
|
|||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
processSlotRX(UE, proc);
|
|
||||||
|
|
||||||
processSlotTX(UE, proc);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dummyWrite(PHY_VARS_NR_UE *UE,openair0_timestamp timestamp, int writeBlockSize) {
|
void dummyWrite(PHY_VARS_NR_UE *UE,openair0_timestamp timestamp, int writeBlockSize) {
|
||||||
@@ -633,11 +570,6 @@ 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) {
|
|
||||||
LOG_E(PHY,"SET rx_offset %d \n",UE->rx_offset);
|
|
||||||
//UE->rx_offset_diff=0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// compute TO compensation that should be applied for this frame
|
// compute TO compensation that should be applied for this frame
|
||||||
if ( UE->rx_offset < UE->frame_parms.samples_per_frame/2 &&
|
if ( UE->rx_offset < UE->frame_parms.samples_per_frame/2 &&
|
||||||
@@ -688,6 +620,7 @@ void *UE_thread(void *arg) {
|
|||||||
notifiedFIFO_t freeBlocks;
|
notifiedFIFO_t freeBlocks;
|
||||||
initNotifiedFIFO_nothreadSafe(&freeBlocks);
|
initNotifiedFIFO_nothreadSafe(&freeBlocks);
|
||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
NR_UE_MAC_INST_t *mac = get_mac_inst(0);
|
||||||
|
int timing_advance = UE->timing_advance;
|
||||||
|
|
||||||
for (int i=0; i<RX_NB_TH+1; i++) // RX_NB_TH working + 1 we are making to be pushed
|
for (int i=0; i<RX_NB_TH+1; i++) // RX_NB_TH working + 1 we are making to be pushed
|
||||||
pushNotifiedFIFO_nothreadSafe(&freeBlocks,
|
pushNotifiedFIFO_nothreadSafe(&freeBlocks,
|
||||||
@@ -704,8 +637,11 @@ void *UE_thread(void *arg) {
|
|||||||
if (res) {
|
if (res) {
|
||||||
syncRunning=false;
|
syncRunning=false;
|
||||||
syncData_t *tmp=(syncData_t *)NotifiedFifoData(res);
|
syncData_t *tmp=(syncData_t *)NotifiedFifoData(res);
|
||||||
// shift the frame index with all the frames we trashed meanwhile we perform the synch search
|
if (UE->is_synchronized) {
|
||||||
decoded_frame_rx=(tmp->proc.decoded_frame_rx + (!UE->init_sync_frame) + trashed_frames) % MAX_FRAME_NUMBER;
|
decoded_frame_rx=(((mac->mib->systemFrameNumber.buf[0] >> mac->mib->systemFrameNumber.bits_unused)<<4) | tmp->proc.decoded_frame_rx);
|
||||||
|
// shift the frame index with all the frames we trashed meanwhile we perform the synch search
|
||||||
|
decoded_frame_rx=(decoded_frame_rx + (!UE->init_sync_frame) + trashed_frames) % MAX_FRAME_NUMBER;
|
||||||
|
}
|
||||||
delNotifiedFIFO_elt(res);
|
delNotifiedFIFO_elt(res);
|
||||||
} else {
|
} else {
|
||||||
readFrame(UE, ×tamp, true);
|
readFrame(UE, ×tamp, true);
|
||||||
@@ -750,6 +686,7 @@ void *UE_thread(void *arg) {
|
|||||||
|
|
||||||
|
|
||||||
absolute_slot++;
|
absolute_slot++;
|
||||||
|
|
||||||
// whatever means thread_idx
|
// whatever means thread_idx
|
||||||
// Fix me: will be wrong when slot 1 is slow, as slot 2 finishes
|
// Fix me: will be wrong when slot 1 is slow, as slot 2 finishes
|
||||||
// Slot 3 will overlap if RX_NB_TH is 2
|
// Slot 3 will overlap if RX_NB_TH is 2
|
||||||
@@ -762,13 +699,13 @@ void *UE_thread(void *arg) {
|
|||||||
curMsg->UE=UE;
|
curMsg->UE=UE;
|
||||||
// update thread index for received subframe
|
// update thread index for received subframe
|
||||||
curMsg->UE->current_thread_id[slot_nr] = thread_idx;
|
curMsg->UE->current_thread_id[slot_nr] = thread_idx;
|
||||||
curMsg->proc.CC_id = 0;
|
curMsg->proc.CC_id = UE->CC_id;
|
||||||
curMsg->proc.nr_tti_rx= slot_nr;
|
curMsg->proc.nr_tti_rx= slot_nr;
|
||||||
curMsg->proc.subframe_rx=slot_nr/(nb_slot_frame/10);
|
curMsg->proc.subframe_rx=slot_nr/(nb_slot_frame/10);
|
||||||
curMsg->proc.nr_tti_tx = (absolute_slot + DURATION_RX_TO_TX) % nb_slot_frame;
|
curMsg->proc.nr_tti_tx = (absolute_slot + DURATION_RX_TO_TX) % nb_slot_frame;
|
||||||
curMsg->proc.subframe_tx=curMsg->proc.nr_tti_rx;
|
curMsg->proc.subframe_tx=curMsg->proc.nr_tti_rx;
|
||||||
curMsg->proc.frame_rx = ((absolute_slot/nb_slot_frame)+UE->frame_gap) % MAX_FRAME_NUMBER;
|
curMsg->proc.frame_rx = (absolute_slot/nb_slot_frame) % MAX_FRAME_NUMBER;
|
||||||
curMsg->proc.frame_tx = (((absolute_slot+DURATION_RX_TO_TX)/nb_slot_frame)+UE->frame_gap) % MAX_FRAME_NUMBER;
|
curMsg->proc.frame_tx = ((absolute_slot+DURATION_RX_TO_TX)/nb_slot_frame) % MAX_FRAME_NUMBER;
|
||||||
curMsg->proc.decoded_frame_rx=-1;
|
curMsg->proc.decoded_frame_rx=-1;
|
||||||
//LOG_I(PHY,"Process slot %d thread Idx %d total gain %d\n", slot_nr, thread_idx, UE->rx_total_gain_dB);
|
//LOG_I(PHY,"Process slot %d thread Idx %d total gain %d\n", slot_nr, thread_idx, UE->rx_total_gain_dB);
|
||||||
|
|
||||||
@@ -788,21 +725,26 @@ void *UE_thread(void *arg) {
|
|||||||
|
|
||||||
for (int i=0; i<UE->frame_parms.nb_antennas_tx; i++)
|
for (int i=0; i<UE->frame_parms.nb_antennas_tx; i++)
|
||||||
txp[i] = (void *)&UE->common_vars.txdata[i][UE->frame_parms.get_samples_slot_timestamp(
|
txp[i] = (void *)&UE->common_vars.txdata[i][UE->frame_parms.get_samples_slot_timestamp(
|
||||||
((curMsg->proc.nr_tti_rx + DURATION_RX_TO_TX)%nb_slot_frame),&UE->frame_parms,0)];
|
((slot_nr + DURATION_RX_TO_TX - RX_NB_TH)%nb_slot_frame),&UE->frame_parms,0)];
|
||||||
|
|
||||||
int readBlockSize, writeBlockSize;
|
int readBlockSize, writeBlockSize;
|
||||||
|
|
||||||
if (slot_nr<(nb_slot_frame - 1)) {
|
if (slot_nr<(nb_slot_frame - 1)) {
|
||||||
readBlockSize=get_readBlockSize(slot_nr, &UE->frame_parms);
|
readBlockSize=get_readBlockSize(slot_nr, &UE->frame_parms);
|
||||||
writeBlockSize=UE->frame_parms.get_samples_per_slot(curMsg->proc.nr_tti_tx,&UE->frame_parms);
|
writeBlockSize=UE->frame_parms.get_samples_per_slot((slot_nr + DURATION_RX_TO_TX - RX_NB_TH) % nb_slot_frame, &UE->frame_parms);
|
||||||
} else {
|
} else {
|
||||||
UE->rx_offset_diff = computeSamplesShift(UE);
|
UE->rx_offset_diff = computeSamplesShift(UE);
|
||||||
readBlockSize=get_readBlockSize(slot_nr, &UE->frame_parms) -
|
readBlockSize=get_readBlockSize(slot_nr, &UE->frame_parms) -
|
||||||
UE->rx_offset_diff;
|
UE->rx_offset_diff;
|
||||||
writeBlockSize=UE->frame_parms.get_samples_per_slot(curMsg->proc.nr_tti_tx,&UE->frame_parms) -
|
writeBlockSize=UE->frame_parms.get_samples_per_slot((slot_nr + DURATION_RX_TO_TX - RX_NB_TH) % nb_slot_frame, &UE->frame_parms)-
|
||||||
UE->rx_offset_diff;
|
UE->rx_offset_diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (UE->timing_advance != timing_advance) {
|
||||||
|
writeBlockSize -= UE->timing_advance - timing_advance;
|
||||||
|
timing_advance = UE->timing_advance;
|
||||||
|
}
|
||||||
|
|
||||||
AssertFatal(readBlockSize ==
|
AssertFatal(readBlockSize ==
|
||||||
UE->rfdevice.trx_read_func(&UE->rfdevice,
|
UE->rfdevice.trx_read_func(&UE->rfdevice,
|
||||||
×tamp,
|
×tamp,
|
||||||
@@ -810,29 +752,19 @@ void *UE_thread(void *arg) {
|
|||||||
readBlockSize,
|
readBlockSize,
|
||||||
UE->frame_parms.nb_antennas_rx),"");
|
UE->frame_parms.nb_antennas_rx),"");
|
||||||
|
|
||||||
AssertFatal( writeBlockSize ==
|
|
||||||
UE->rfdevice.trx_write_func(&UE->rfdevice,
|
|
||||||
timestamp+
|
|
||||||
UE->frame_parms.get_samples_slot_timestamp(slot_nr,
|
|
||||||
&UE->frame_parms,DURATION_RX_TO_TX) - firstSymSamp -
|
|
||||||
openair0_cfg[0].tx_sample_advance,
|
|
||||||
txp,
|
|
||||||
writeBlockSize,
|
|
||||||
UE->frame_parms.nb_antennas_tx,
|
|
||||||
1),"");
|
|
||||||
|
|
||||||
if( slot_nr==(nb_slot_frame-1)) {
|
if( slot_nr==(nb_slot_frame-1)) {
|
||||||
// read in first symbol of next frame and adjust for timing drift
|
// read in first symbol of next frame and adjust for timing drift
|
||||||
int first_symbols=UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0; // first symbol of every frames
|
int first_symbols=UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0; // first symbol of every frames
|
||||||
|
|
||||||
if ( first_symbols > 0 )
|
if ( first_symbols > 0 ) {
|
||||||
|
openair0_timestamp ignore_timestamp;
|
||||||
AssertFatal(first_symbols ==
|
AssertFatal(first_symbols ==
|
||||||
UE->rfdevice.trx_read_func(&UE->rfdevice,
|
UE->rfdevice.trx_read_func(&UE->rfdevice,
|
||||||
×tamp,
|
&ignore_timestamp,
|
||||||
(void **)UE->common_vars.rxdata,
|
(void **)UE->common_vars.rxdata,
|
||||||
first_symbols,
|
first_symbols,
|
||||||
UE->frame_parms.nb_antennas_rx),"");
|
UE->frame_parms.nb_antennas_rx),"");
|
||||||
else
|
} else
|
||||||
LOG_E(PHY,"can't compensate: diff =%d\n", first_symbols);
|
LOG_E(PHY,"can't compensate: diff =%d\n", first_symbols);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -843,25 +775,37 @@ void *UE_thread(void *arg) {
|
|||||||
notifiedFIFO_elt_t *res;
|
notifiedFIFO_elt_t *res;
|
||||||
|
|
||||||
while (nbSlotProcessing >= RX_NB_TH) {
|
while (nbSlotProcessing >= RX_NB_TH) {
|
||||||
if ( (res=tryPullTpool(&nf, Tpool)) != NULL ) {
|
res=pullTpool(&nf, Tpool);
|
||||||
nbSlotProcessing--;
|
nbSlotProcessing--;
|
||||||
processingData_t *tmp=(processingData_t *)res->msgData;
|
processingData_t *tmp=(processingData_t *)res->msgData;
|
||||||
|
|
||||||
if (tmp->proc.decoded_frame_rx != -1)
|
if (tmp->proc.decoded_frame_rx != -1)
|
||||||
decoded_frame_rx=(((mac->mib->systemFrameNumber.buf[0] >> mac->mib->systemFrameNumber.bits_unused)<<4) | tmp->proc.decoded_frame_rx);
|
decoded_frame_rx=(((mac->mib->systemFrameNumber.buf[0] >> mac->mib->systemFrameNumber.bits_unused)<<4) | tmp->proc.decoded_frame_rx);
|
||||||
//decoded_frame_rx=tmp->proc.decoded_frame_rx;
|
//decoded_frame_rx=tmp->proc.decoded_frame_rx;
|
||||||
|
|
||||||
pushNotifiedFIFO_nothreadSafe(&freeBlocks,res);
|
pushNotifiedFIFO_nothreadSafe(&freeBlocks,res);
|
||||||
}
|
|
||||||
|
|
||||||
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 );
|
||||||
|
|
||||||
|
AssertFatal( writeBlockSize ==
|
||||||
|
UE->rfdevice.trx_write_func(&UE->rfdevice,
|
||||||
|
timestamp+
|
||||||
|
UE->frame_parms.get_samples_slot_timestamp(slot_nr,
|
||||||
|
&UE->frame_parms,DURATION_RX_TO_TX - RX_NB_TH) - firstSymSamp -
|
||||||
|
openair0_cfg[0].tx_sample_advance - UE->N_TA_offset - UE->timing_advance,
|
||||||
|
txp,
|
||||||
|
writeBlockSize,
|
||||||
|
UE->frame_parms.nb_antennas_tx,
|
||||||
|
1),"");
|
||||||
|
|
||||||
|
for (int i=0; i<UE->frame_parms.nb_antennas_tx; i++)
|
||||||
|
memset(txp[i], 0, writeBlockSize);
|
||||||
|
|
||||||
nbSlotProcessing++;
|
nbSlotProcessing++;
|
||||||
msgToPush->key=slot_nr;
|
msgToPush->key=slot_nr;
|
||||||
pushTpool(Tpool, msgToPush);
|
pushTpool(Tpool, msgToPush);
|
||||||
@@ -880,6 +824,7 @@ void *UE_thread(void *arg) {
|
|||||||
|
|
||||||
pushNotifiedFIFO_nothreadSafe(&freeBlocks,res);
|
pushNotifiedFIFO_nothreadSafe(&freeBlocks,res);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // while !oai_exit
|
} // while !oai_exit
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@@ -38,13 +38,12 @@
|
|||||||
#include "../../ARCH/ETHERNET/USERSPACE/LIB/if_defs.h"
|
#include "../../ARCH/ETHERNET/USERSPACE/LIB/if_defs.h"
|
||||||
|
|
||||||
//#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
|
//#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
|
||||||
|
#include "openair1/PHY/MODULATION/nr_modulation.h"
|
||||||
#include "PHY/phy_vars_nr_ue.h"
|
#include "PHY/phy_vars_nr_ue.h"
|
||||||
#include "PHY/LTE_TRANSPORT/transport_vars.h"
|
#include "PHY/LTE_TRANSPORT/transport_vars.h"
|
||||||
#include "SCHED/sched_common_vars.h"
|
#include "SCHED/sched_common_vars.h"
|
||||||
#include "PHY/MODULATION/modulation_vars.h"
|
#include "PHY/MODULATION/modulation_vars.h"
|
||||||
//#include "../../SIMU/USER/init_lte.h"
|
//#include "../../SIMU/USER/init_lte.h"
|
||||||
#include "PHY/NR_REFSIG/nr_mod_table.h"
|
|
||||||
|
|
||||||
#include "LAYER2/MAC/mac_vars.h"
|
#include "LAYER2/MAC/mac_vars.h"
|
||||||
#include "RRC/LTE/rrc_vars.h"
|
#include "RRC/LTE/rrc_vars.h"
|
||||||
@@ -76,37 +75,12 @@ unsigned short config_frames[4] = {2,9,11,13};
|
|||||||
#include <openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h>
|
#include <openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h>
|
||||||
#include <openair1/SCHED_NR_UE/fapi_nr_ue_l1.h>
|
#include <openair1/SCHED_NR_UE/fapi_nr_ue_l1.h>
|
||||||
|
|
||||||
#include <forms.h>
|
|
||||||
|
|
||||||
|
|
||||||
/* Callbacks, globals and object handlers */
|
/* Callbacks, globals and object handlers */
|
||||||
|
|
||||||
extern void reset_stats( FL_OBJECT *, long );
|
|
||||||
//extern void initTpool(char *params, tpool_t *pool, bool performanceMeas);
|
|
||||||
|
|
||||||
/* Forms and Objects */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
FL_FORM *stats_form;
|
|
||||||
void *vdata;
|
|
||||||
char *cdata;
|
|
||||||
long ldata;
|
|
||||||
FL_OBJECT *stats_text;
|
|
||||||
FL_OBJECT *stats_button;
|
|
||||||
} FD_stats_form;
|
|
||||||
|
|
||||||
extern FD_stats_form *create_form_stats_form( void );
|
|
||||||
|
|
||||||
#include "PHY/TOOLS/nr_phy_scope.h"
|
|
||||||
//#include "stats.h"
|
//#include "stats.h"
|
||||||
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
|
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
|
||||||
// at eNB 0, an UL scope for every UE
|
#include "PHY/TOOLS/phy_scope_interface.h"
|
||||||
FD_phy_scope_nrue *form_nrue[NUMBER_OF_UE_MAX];
|
#include "PHY/TOOLS/nr_phy_scope.h"
|
||||||
//FD_lte_phy_scope_enb *form_enb[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
|
|
||||||
//FD_stats_form *form_stats=NULL,*form_stats_l2=NULL;
|
|
||||||
char title[255];
|
|
||||||
static pthread_t forms_thread; //xforms
|
|
||||||
|
|
||||||
#include <executables/nr-uesoftmodem.h>
|
#include <executables/nr-uesoftmodem.h>
|
||||||
#include "executables/softmodem-common.h"
|
#include "executables/softmodem-common.h"
|
||||||
#include "executables/thread-common.h"
|
#include "executables/thread-common.h"
|
||||||
@@ -177,14 +151,11 @@ char ref[128] = "internal";
|
|||||||
char channels[128] = "0";
|
char channels[128] = "0";
|
||||||
|
|
||||||
|
|
||||||
static char *parallel_config = NULL;
|
|
||||||
static char *worker_config = NULL;
|
|
||||||
|
|
||||||
int rx_input_level_dBm;
|
int rx_input_level_dBm;
|
||||||
|
|
||||||
//static int online_log_messages=0;
|
//static int online_log_messages=0;
|
||||||
|
|
||||||
uint32_t do_forms=0;
|
|
||||||
int otg_enabled;
|
int otg_enabled;
|
||||||
//int number_of_cards = 1;
|
//int number_of_cards = 1;
|
||||||
|
|
||||||
@@ -199,6 +170,7 @@ uint64_t num_missed_slots=0; // counter for the number of missed slots
|
|||||||
|
|
||||||
int transmission_mode=1;
|
int transmission_mode=1;
|
||||||
int numerology = 0;
|
int numerology = 0;
|
||||||
|
int usrp_tx_thread = 0;
|
||||||
|
|
||||||
/* flag set by eNB conf file to specify if the radio head is local or remote (default option is local) */
|
/* flag set by eNB conf file to specify if the radio head is local or remote (default option is local) */
|
||||||
//uint8_t local_remote_radio = BBU_LOCAL_RADIO_HEAD;
|
//uint8_t local_remote_radio = BBU_LOCAL_RADIO_HEAD;
|
||||||
@@ -275,7 +247,7 @@ void exit_function(const char *file, const char *function, const int line, const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void reset_stats(FL_OBJECT *button, long arg) {
|
void reset_stats(long arg) {
|
||||||
//int i,j,k;
|
//int i,j,k;
|
||||||
/*PHY_VARS_eNB *phy_vars_eNB = PHY_vars_eNB_g[0][0];
|
/*PHY_VARS_eNB *phy_vars_eNB = PHY_vars_eNB_g[0][0];
|
||||||
|
|
||||||
@@ -305,35 +277,6 @@ void reset_stats(FL_OBJECT *button, long arg) {
|
|||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *scope_thread(void *arg) {
|
|
||||||
sleep(5);
|
|
||||||
|
|
||||||
while (!oai_exit) {
|
|
||||||
phy_scope_nrUE(form_nrue[0],
|
|
||||||
PHY_vars_UE_g[0][0],
|
|
||||||
0,0,1);
|
|
||||||
usleep(100*1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_exit((void *)arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void init_scope(void) {
|
|
||||||
int fl_argc=1;
|
|
||||||
|
|
||||||
if (do_forms==1) {
|
|
||||||
char *name="5G-UE-scope";
|
|
||||||
fl_initialize (&fl_argc, &name, NULL, 0, 0);
|
|
||||||
int UE_id = 0;
|
|
||||||
form_nrue[UE_id] = create_phy_scope_nrue();
|
|
||||||
sprintf (title, "NR DL SCOPE UE");
|
|
||||||
fl_show_form (form_nrue[UE_id]->phy_scope_nrue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
|
||||||
threadCreate(&forms_thread, scope_thread, NULL, "scope", -1, OAI_PRIORITY_RT_LOW);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void *l2l1_task(void *arg) {
|
void *l2l1_task(void *arg) {
|
||||||
MessageDef *message_p = NULL;
|
MessageDef *message_p = NULL;
|
||||||
int result;
|
int result;
|
||||||
@@ -642,7 +585,7 @@ void init_pdcp(void) {
|
|||||||
LOG_I(RLC, "Problem at RLC initiation \n");
|
LOG_I(RLC, "Problem at RLC initiation \n");
|
||||||
}
|
}
|
||||||
pdcp_layer_init();
|
pdcp_layer_init();
|
||||||
nr_ip_over_LTE_DRB_preconfiguration();*/
|
nr_DRB_preconfiguration();*/
|
||||||
pdcp_module_init(pdcp_initmask);
|
pdcp_module_init(pdcp_initmask);
|
||||||
pdcp_set_rlc_data_req_func((send_rlc_data_req_func_t) rlc_data_req);
|
pdcp_set_rlc_data_req_func((send_rlc_data_req_func_t) rlc_data_req);
|
||||||
pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) pdcp_data_ind);
|
pdcp_set_pdcp_data_ind_func((pdcp_data_ind_func_t) pdcp_data_ind);
|
||||||
@@ -721,6 +664,9 @@ int main( int argc, char **argv ) {
|
|||||||
PHY_vars_UE_g = malloc(sizeof(PHY_VARS_NR_UE **));
|
PHY_vars_UE_g = malloc(sizeof(PHY_VARS_NR_UE **));
|
||||||
PHY_vars_UE_g[0] = malloc(sizeof(PHY_VARS_NR_UE *)*MAX_NUM_CCs);
|
PHY_vars_UE_g[0] = malloc(sizeof(PHY_VARS_NR_UE *)*MAX_NUM_CCs);
|
||||||
|
|
||||||
|
if (get_softmodem_params()->do_ra)
|
||||||
|
AssertFatal(get_softmodem_params()->phy_test == 0,"RA and phy_test are mutually exclusive\n");
|
||||||
|
|
||||||
for (int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
for (int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||||
printf("frame_parms %d\n",frame_parms[CC_id]->ofdm_symbol_size);
|
printf("frame_parms %d\n",frame_parms[CC_id]->ofdm_symbol_size);
|
||||||
frame_parms[CC_id]->nb_antennas_tx = nb_antenna_tx;
|
frame_parms[CC_id]->nb_antennas_tx = nb_antenna_tx;
|
||||||
@@ -740,17 +686,15 @@ int main( int argc, char **argv ) {
|
|||||||
|
|
||||||
fapi_nr_config_request_t *nrUE_config = &UE[CC_id]->nrUE_config;
|
fapi_nr_config_request_t *nrUE_config = &UE[CC_id]->nrUE_config;
|
||||||
nr_init_frame_parms_ue(frame_parms[CC_id],nrUE_config,NORMAL);
|
nr_init_frame_parms_ue(frame_parms[CC_id],nrUE_config,NORMAL);
|
||||||
|
|
||||||
// Overwrite DL frequency (for FR2 testing)
|
|
||||||
if (downlink_frequency[0][0]!=0)
|
|
||||||
frame_parms[CC_id]->dl_CarrierFreq = downlink_frequency[0][0];
|
|
||||||
|
|
||||||
init_nr_ue_vars(UE[CC_id],frame_parms[CC_id],0,abstraction_flag);
|
|
||||||
|
|
||||||
if (get_softmodem_params()->phy_test==1)
|
// Overwrite DL frequency (for FR2 testing)
|
||||||
UE[CC_id]->mac_enabled = 0;
|
if (downlink_frequency[0][0]!=0) {
|
||||||
else
|
frame_parms[CC_id]->dl_CarrierFreq = downlink_frequency[0][0];
|
||||||
UE[CC_id]->mac_enabled = 1;
|
frame_parms[CC_id]->ul_CarrierFreq = downlink_frequency[0][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
init_symbol_rotation(frame_parms[CC_id],frame_parms[CC_id]->dl_CarrierFreq);
|
||||||
|
init_nr_ue_vars(UE[CC_id],frame_parms[CC_id],0,abstraction_flag);
|
||||||
|
|
||||||
UE[CC_id]->mac_enabled = 1;
|
UE[CC_id]->mac_enabled = 1;
|
||||||
UE[CC_id]->if_inst = nr_ue_if_module_init(0);
|
UE[CC_id]->if_inst = nr_ue_if_module_init(0);
|
||||||
@@ -764,15 +708,49 @@ int main( int argc, char **argv ) {
|
|||||||
UE[CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0] + rx_gain_off;
|
UE[CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0] + rx_gain_off;
|
||||||
UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
|
UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
|
||||||
|
|
||||||
if (frame_parms[CC_id]->frame_type==FDD) {
|
if (UE[CC_id]->frame_parms.frame_type == FDD) {
|
||||||
UE[CC_id]->N_TA_offset = 0;
|
UE[CC_id]->N_TA_offset = 0;
|
||||||
} else {
|
} else {
|
||||||
if (frame_parms[CC_id]->N_RB_DL == 100)
|
int N_RB = UE[CC_id]->frame_parms.N_RB_DL;
|
||||||
UE[CC_id]->N_TA_offset = 624;
|
int N_TA_offset = UE[CC_id]->frame_parms.ul_CarrierFreq < 6e9 ? 400 : 431; // reference samples for 25600Tc @ 30.72 Ms/s for FR1, same @ 61.44 Ms/s for FR2
|
||||||
else if (frame_parms[CC_id]->N_RB_DL == 50)
|
double factor=1;
|
||||||
UE[CC_id]->N_TA_offset = 624/2;
|
switch (UE[CC_id]->frame_parms.numerology_index) {
|
||||||
else if (frame_parms[CC_id]->N_RB_DL == 25)
|
case 0: //15 kHz scs
|
||||||
UE[CC_id]->N_TA_offset = 624/4;
|
AssertFatal(N_TA_offset == 400, "scs_common 15kHz only for FR1\n");
|
||||||
|
if (N_RB <= 25) factor = .25; // 7.68 Ms/s
|
||||||
|
else if (N_RB <=50) factor = .5; // 15.36 Ms/s
|
||||||
|
else if (N_RB <=75) factor = 1.0; // 30.72 Ms/s
|
||||||
|
else if (N_RB <=100) factor = 1.0; // 30.72 Ms/s
|
||||||
|
else AssertFatal(1==0,"Too many PRBS for mu=0\n");
|
||||||
|
break;
|
||||||
|
case 1: //30 kHz sc
|
||||||
|
AssertFatal(N_TA_offset == 400, "scs_common 30kHz only for FR1\n");
|
||||||
|
if (N_RB <= 106) factor = 2.0; // 61.44 Ms/s
|
||||||
|
else if (N_RB <= 275) factor = 4.0; // 122.88 Ms/s
|
||||||
|
break;
|
||||||
|
case 2: //60 kHz scs
|
||||||
|
AssertFatal(1==0,"scs_common should not be 60 kHz\n");
|
||||||
|
break;
|
||||||
|
case 3: //120 kHz scs
|
||||||
|
AssertFatal(N_TA_offset == 431, "scs_common 120kHz only for FR2\n");
|
||||||
|
break;
|
||||||
|
case 4: //240 kHz scs
|
||||||
|
AssertFatal(1==0,"scs_common should not be 60 kHz\n");
|
||||||
|
if (N_RB <= 32) factor = 1.0; // 61.44 Ms/s
|
||||||
|
else if (N_RB <= 66) factor = 2.0; // 122.88 Ms/s
|
||||||
|
else AssertFatal(1==0,"N_RB %d is too big for curretn FR2 implementation\n",N_RB);
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (N_RB == 100)
|
||||||
|
UE[CC_id]->N_TA_offset = 624;
|
||||||
|
else if (N_RB == 50)
|
||||||
|
UE[CC_id]->N_TA_offset = 624/2;
|
||||||
|
else if (N_RB == 25)
|
||||||
|
UE[CC_id]->N_TA_offset = 624/4;
|
||||||
|
}
|
||||||
|
if (UE[CC_id]->frame_parms.threequarter_fs == 1) factor = factor*.75;
|
||||||
|
UE[CC_id]->N_TA_offset = (int)(N_TA_offset * factor);
|
||||||
|
LOG_I(PHY,"UE %d Setting N_TA_offset to %d samples (factor %f, UL Freq %lu, N_RB %d)\n", UE[CC_id]->Mod_id, UE[CC_id]->N_TA_offset, factor, UE[CC_id]->frame_parms.ul_CarrierFreq, N_RB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -783,19 +761,16 @@ int main( int argc, char **argv ) {
|
|||||||
memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*NUMBER_OF_UE_MAX*MAX_NUM_CCs);
|
memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*NUMBER_OF_UE_MAX*MAX_NUM_CCs);
|
||||||
configure_linux();
|
configure_linux();
|
||||||
mlockall(MCL_CURRENT | MCL_FUTURE);
|
mlockall(MCL_CURRENT | MCL_FUTURE);
|
||||||
init_scope();
|
|
||||||
|
if(IS_SOFTMODEM_DOFORMS) {
|
||||||
|
load_softscope("nr",PHY_vars_UE_g[0][0]);
|
||||||
|
}
|
||||||
number_of_cards = 1;
|
number_of_cards = 1;
|
||||||
|
|
||||||
for(int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
for(int CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||||
PHY_vars_UE_g[0][CC_id]->rf_map.card=0;
|
PHY_vars_UE_g[0][CC_id]->rf_map.card=0;
|
||||||
PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset;
|
PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset;
|
||||||
#if defined(OAI_USRP) || defined(OAI_ADRV9371_ZC706)
|
|
||||||
PHY_vars_UE_g[0][CC_id]->hw_timing_advance = timing_advance;
|
|
||||||
PHY_vars_UE_g[0][CC_id]->timing_advance = timing_advance;
|
PHY_vars_UE_g[0][CC_id]->timing_advance = timing_advance;
|
||||||
#else
|
|
||||||
PHY_vars_UE_g[0][CC_id]->hw_timing_advance = 160;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
init_NR_UE_threads(1);
|
init_NR_UE_threads(1);
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#include <executables/softmodem-common.h>
|
#include <executables/softmodem-common.h>
|
||||||
#include "PHY/defs_nr_UE.h"
|
#include "PHY/defs_nr_UE.h"
|
||||||
#include "SIMULATION/ETH_TRANSPORT/proto.h"
|
#include "SIMULATION/ETH_TRANSPORT/proto.h"
|
||||||
#include <openair2/LAYER2/NR_MAC_gNB/mac_proto.h>
|
|
||||||
|
|
||||||
/***************************************************************************************************************************************/
|
/***************************************************************************************************************************************/
|
||||||
/* command line options definitions, CMDLINE_XXXX_DESC macros are used to initialize paramdef_t arrays which are then used as argument
|
/* command line options definitions, CMDLINE_XXXX_DESC macros are used to initialize paramdef_t arrays which are then used as argument
|
||||||
@@ -62,19 +61,11 @@
|
|||||||
{"single-thread-disable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&single_thread_flag, defintval:1, TYPE_INT, 0}, \
|
{"single-thread-disable", CONFIG_HLP_NOSNGLT, PARAMFLAG_BOOL, iptr:&single_thread_flag, defintval:1, TYPE_INT, 0}, \
|
||||||
{"nr-dlsch-demod-shift", CONFIG_HLP_DLSHIFT, 0, iptr:(int32_t *)&nr_dlsch_demod_shift, defintval:0, TYPE_INT, 0}, \
|
{"nr-dlsch-demod-shift", CONFIG_HLP_DLSHIFT, 0, iptr:(int32_t *)&nr_dlsch_demod_shift, defintval:0, TYPE_INT, 0}, \
|
||||||
{"A" , CONFIG_HLP_TADV, 0, uptr:&timing_advance, defintval:0, TYPE_UINT, 0}, \
|
{"A" , CONFIG_HLP_TADV, 0, uptr:&timing_advance, defintval:0, TYPE_UINT, 0}, \
|
||||||
{"C" , CONFIG_HLP_DLF, 0, u64ptr:&(downlink_frequency[0][0]), defuintval:0,TYPE_UINT64, 0}, \
|
|
||||||
{"a" , CONFIG_HLP_CHOFF, 0, iptr:&chain_offset, defintval:0, TYPE_INT, 0}, \
|
|
||||||
{"d" , CONFIG_HLP_SOFTS, PARAMFLAG_BOOL, uptr:&do_forms, defintval:0, TYPE_INT, 0}, \
|
|
||||||
{"E" , CONFIG_HLP_TQFS, PARAMFLAG_BOOL, iptr:&threequarter_fs, defintval:0, TYPE_INT, 0}, \
|
{"E" , CONFIG_HLP_TQFS, PARAMFLAG_BOOL, iptr:&threequarter_fs, defintval:0, TYPE_INT, 0}, \
|
||||||
{"m" , CONFIG_HLP_DLMCS, 0, uptr:&target_dl_mcs, defintval:0, TYPE_UINT, 0}, \
|
{"m" , CONFIG_HLP_DLMCS, 0, uptr:&target_dl_mcs, defintval:0, TYPE_UINT, 0}, \
|
||||||
{"t" , CONFIG_HLP_ULMCS, 0, uptr:&target_ul_mcs, defintval:0, TYPE_UINT, 0}, \
|
{"t" , CONFIG_HLP_ULMCS, 0, uptr:&target_ul_mcs, defintval:0, TYPE_UINT, 0}, \
|
||||||
{"q" , CONFIG_HLP_STMON, PARAMFLAG_BOOL, iptr:&opp_enabled, defintval:0, TYPE_INT, 0}, \
|
|
||||||
{"T" , CONFIG_HLP_TDD, PARAMFLAG_BOOL, iptr:&tddflag, defintval:0, TYPE_INT, 0}, \
|
{"T" , CONFIG_HLP_TDD, PARAMFLAG_BOOL, iptr:&tddflag, defintval:0, TYPE_INT, 0}, \
|
||||||
{"V" , CONFIG_HLP_VCD, PARAMFLAG_BOOL, iptr:&vcdflag, defintval:0, TYPE_INT, 0}, \
|
{"V" , CONFIG_HLP_VCD, PARAMFLAG_BOOL, iptr:&vcdflag, defintval:0, TYPE_INT, 0}, \
|
||||||
{"numerology" , CONFIG_HLP_NUMEROLOGY, 0, iptr:&numerology, defintval:0, TYPE_INT, 0}, \
|
|
||||||
{"emulate-rf" , CONFIG_HLP_EMULATE_RF, PARAMFLAG_BOOL, iptr:&emulate_rf, defintval:0, TYPE_INT, 0}, \
|
|
||||||
{"parallel-config", CONFIG_HLP_PARALLEL_CMD,0, strptr:(char **)¶llel_config, defstrval:NULL, TYPE_STRING, 0}, \
|
|
||||||
{"worker-config", CONFIG_HLP_WORKER_CMD, 0, strptr:(char **)&worker_config, defstrval:NULL, TYPE_STRING, 0}, \
|
|
||||||
{"s" , CONFIG_HLP_SNR, 0, dblptr:&snr_dB, defdblval:25, TYPE_DOUBLE, 0}, \
|
{"s" , CONFIG_HLP_SNR, 0, dblptr:&snr_dB, defdblval:25, TYPE_DOUBLE, 0}, \
|
||||||
{"nbiot-disable", CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL, iptr:&nonbiotflag, defintval:0, TYPE_INT, 0}, \
|
{"nbiot-disable", CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL, iptr:&nonbiotflag, defintval:0, TYPE_INT, 0}, \
|
||||||
{"ue-timing-correction-disable", CONFIG_HLP_DISABLETIMECORR, PARAMFLAG_BOOL, iptr:&UE_no_timing_correction, defintval:0, TYPE_INT, 0}, \
|
{"ue-timing-correction-disable", CONFIG_HLP_DISABLETIMECORR, PARAMFLAG_BOOL, iptr:&UE_no_timing_correction, defintval:0, TYPE_INT, 0}, \
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ extern "C"
|
|||||||
#define CONFIG_HLP_DUMPFRAME "dump UE received frame to rxsig_frame0.dat and exit\n"
|
#define CONFIG_HLP_DUMPFRAME "dump UE received frame to rxsig_frame0.dat and exit\n"
|
||||||
#define CONFIG_HLP_UELOOP "get softmodem (UE) to loop through memory instead of acquiring from HW\n"
|
#define CONFIG_HLP_UELOOP "get softmodem (UE) to loop through memory instead of acquiring from HW\n"
|
||||||
#define CONFIG_HLP_PHYTST "test UE phy layer, mac disabled\n"
|
#define CONFIG_HLP_PHYTST "test UE phy layer, mac disabled\n"
|
||||||
|
#define CONFIG_HLP_DORA "test gNB and UE with RA procedures\n"
|
||||||
#define CONFIG_HLP_EXTS "tells hardware to use an external timing reference\n"
|
#define CONFIG_HLP_EXTS "tells hardware to use an external timing reference\n"
|
||||||
#define CONFIG_HLP_DMRSSYNC "tells RU to insert DMRS in subframe 1 slot 0"
|
#define CONFIG_HLP_DMRSSYNC "tells RU to insert DMRS in subframe 1 slot 0"
|
||||||
#define CONFIG_HLP_CLK "tells hardware to use a clock reference (0:internal, 1:external, 2:gpsdo)\n"
|
#define CONFIG_HLP_CLK "tells hardware to use a clock reference (0:internal, 1:external, 2:gpsdo)\n"
|
||||||
@@ -97,6 +98,7 @@ extern "C"
|
|||||||
#define SPLIT73 softmodem_params.split73
|
#define SPLIT73 softmodem_params.split73
|
||||||
#define TP_CONFIG softmodem_params.threadPoolConfig
|
#define TP_CONFIG softmodem_params.threadPoolConfig
|
||||||
#define PHY_TEST softmodem_params.phy_test
|
#define PHY_TEST softmodem_params.phy_test
|
||||||
|
#define DO_RA softmodem_params.do_ra
|
||||||
#define WAIT_FOR_SYNC softmodem_params.wait_for_sync
|
#define WAIT_FOR_SYNC softmodem_params.wait_for_sync
|
||||||
#define SINGLE_THREAD_FLAG softmodem_params.single_thread_flag
|
#define SINGLE_THREAD_FLAG softmodem_params.single_thread_flag
|
||||||
#define CHAIN_OFFSET softmodem_params.chain_offset
|
#define CHAIN_OFFSET softmodem_params.chain_offset
|
||||||
@@ -114,6 +116,7 @@ extern "C"
|
|||||||
{"split73", CONFIG_HLP_SPLIT73, 0, strptr:(char **)&SPLIT73, defstrval:NULL, TYPE_STRING, sizeof(SPLIT73)},\
|
{"split73", CONFIG_HLP_SPLIT73, 0, strptr:(char **)&SPLIT73, defstrval:NULL, TYPE_STRING, sizeof(SPLIT73)},\
|
||||||
{"thread-pool", CONFIG_HLP_TPOOL, 0, strptr:(char **)&TP_CONFIG, defstrval:"n", TYPE_STRING, sizeof(TP_CONFIG)}, \
|
{"thread-pool", CONFIG_HLP_TPOOL, 0, strptr:(char **)&TP_CONFIG, defstrval:"n", TYPE_STRING, sizeof(TP_CONFIG)}, \
|
||||||
{"phy-test", CONFIG_HLP_PHYTST, PARAMFLAG_BOOL, iptr:&PHY_TEST, defintval:0, TYPE_INT, 0}, \
|
{"phy-test", CONFIG_HLP_PHYTST, PARAMFLAG_BOOL, iptr:&PHY_TEST, defintval:0, TYPE_INT, 0}, \
|
||||||
|
{"do-ra", CONFIG_HLP_DORA, PARAMFLAG_BOOL, iptr:&DO_RA, defintval:0, TYPE_INT, 0}, \
|
||||||
{"usim-test", CONFIG_HLP_USIM, PARAMFLAG_BOOL, u8ptr:&USIM_TEST, defintval:0, TYPE_UINT8, 0}, \
|
{"usim-test", CONFIG_HLP_USIM, PARAMFLAG_BOOL, u8ptr:&USIM_TEST, defintval:0, TYPE_UINT8, 0}, \
|
||||||
{"clock-source", CONFIG_HLP_CLK, 0, uptr:&CLOCK_SOURCE, defintval:0, TYPE_UINT, 0}, \
|
{"clock-source", CONFIG_HLP_CLK, 0, uptr:&CLOCK_SOURCE, defintval:0, TYPE_UINT, 0}, \
|
||||||
{"time-source", CONFIG_HLP_TME, 0, uptr:&TIMING_SOURCE, defintval:0, TYPE_UINT, 0}, \
|
{"time-source", CONFIG_HLP_TME, 0, uptr:&TIMING_SOURCE, defintval:0, TYPE_UINT, 0}, \
|
||||||
@@ -205,6 +208,7 @@ typedef struct {
|
|||||||
char split73[1024];
|
char split73[1024];
|
||||||
char threadPoolConfig[1024];
|
char threadPoolConfig[1024];
|
||||||
int phy_test;
|
int phy_test;
|
||||||
|
int do_ra;
|
||||||
uint8_t usim_test;
|
uint8_t usim_test;
|
||||||
int emulate_rf;
|
int emulate_rf;
|
||||||
int wait_for_sync; //eNodeB only
|
int wait_for_sync; //eNodeB only
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <openair1/PHY/defs_eNB.h>
|
#include <openair1/PHY/defs_eNB.h>
|
||||||
|
#include <common/utils/telnetsrv/telnetsrv_proccmd.h>
|
||||||
|
|
||||||
#define CU_PORT "7878"
|
#define CU_PORT "7878"
|
||||||
#define DU_PORT "8787"
|
#define DU_PORT "8787"
|
||||||
@@ -279,7 +280,7 @@ int init_rf(RU_t *ru);
|
|||||||
void rx_rf(RU_t *ru, L1_rxtx_proc_t *proc);
|
void rx_rf(RU_t *ru, L1_rxtx_proc_t *proc);
|
||||||
void tx_rf(RU_t *ru, L1_rxtx_proc_t *proc);
|
void tx_rf(RU_t *ru, L1_rxtx_proc_t *proc);
|
||||||
void common_signal_procedures (PHY_VARS_eNB *eNB,int frame, int subframe);
|
void common_signal_procedures (PHY_VARS_eNB *eNB,int frame, int subframe);
|
||||||
void pmch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc);
|
void pmch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc, int fembms_flag);
|
||||||
bool dlsch_procedures(PHY_VARS_eNB *eNB,
|
bool dlsch_procedures(PHY_VARS_eNB *eNB,
|
||||||
L1_rxtx_proc_t *proc,
|
L1_rxtx_proc_t *proc,
|
||||||
int harq_pid,
|
int harq_pid,
|
||||||
@@ -325,5 +326,6 @@ void fep_full(RU_t *ru, int subframe);
|
|||||||
void feptx_prec(RU_t *ru,int frame,int subframe);
|
void feptx_prec(RU_t *ru,int frame,int subframe);
|
||||||
void feptx_ofdm(RU_t *ru, int frame, int subframe);
|
void feptx_ofdm(RU_t *ru, int frame, int subframe);
|
||||||
void oai_subframe_ind(uint16_t sfn, uint16_t sf);
|
void oai_subframe_ind(uint16_t sfn, uint16_t sf);
|
||||||
|
void softmodem_printresources(int sig, telnet_printfunc_t pf);
|
||||||
extern uint16_t sf_ahead;
|
extern uint16_t sf_ahead;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#define FAPI_NR_RX_PDU_TYPE_SIB 0x02
|
#define FAPI_NR_RX_PDU_TYPE_SIB 0x02
|
||||||
#define FAPI_NR_RX_PDU_TYPE_DLSCH 0x03
|
#define FAPI_NR_RX_PDU_TYPE_DLSCH 0x03
|
||||||
#define FAPI_NR_DCI_IND 0x04
|
#define FAPI_NR_DCI_IND 0x04
|
||||||
|
#define FAPI_NR_RX_PDU_TYPE_RAR 0x05
|
||||||
|
|
||||||
#define FAPI_NR_SIBS_MASK_SIB1 0x1
|
#define FAPI_NR_SIBS_MASK_SIB1 0x1
|
||||||
|
|
||||||
@@ -42,6 +43,7 @@
|
|||||||
|
|
||||||
#define FAPI_NR_DL_CONFIG_TYPE_DCI 0x01
|
#define FAPI_NR_DL_CONFIG_TYPE_DCI 0x01
|
||||||
#define FAPI_NR_DL_CONFIG_TYPE_DLSCH 0x02
|
#define FAPI_NR_DL_CONFIG_TYPE_DLSCH 0x02
|
||||||
|
#define FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH 0x03
|
||||||
|
|
||||||
|
|
||||||
#define FAPI_NR_CCE_REG_MAPPING_TYPE_INTERLEAVED 0x01
|
#define FAPI_NR_CCE_REG_MAPPING_TYPE_INTERLEAVED 0x01
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ typedef struct {
|
|||||||
uint8_t CoreSetType;
|
uint8_t CoreSetType;
|
||||||
uint8_t precoder_granularity;
|
uint8_t precoder_granularity;
|
||||||
uint16_t pdcch_dmrs_scrambling_id;
|
uint16_t pdcch_dmrs_scrambling_id;
|
||||||
|
uint16_t scrambling_rnti;
|
||||||
uint8_t tci_state_pdcch;
|
uint8_t tci_state_pdcch;
|
||||||
uint8_t tci_present_in_dci;
|
uint8_t tci_present_in_dci;
|
||||||
} fapi_nr_coreset_t;
|
} fapi_nr_coreset_t;
|
||||||
@@ -158,22 +158,29 @@ typedef struct {
|
|||||||
fapi_nr_tx_request_body_t *tx_request_body;
|
fapi_nr_tx_request_body_t *tx_request_body;
|
||||||
} fapi_nr_tx_request_t;
|
} fapi_nr_tx_request_t;
|
||||||
|
|
||||||
typedef struct {
|
/// This struct replaces:
|
||||||
uint8_t preamble_index;
|
/// PRACH-ConfigInfo from 38.331 RRC spec
|
||||||
uint8_t prach_configuration_index;
|
/// PRACH-ConfigSIB or PRACH-Config
|
||||||
uint16_t preamble_length;
|
typedef struct {
|
||||||
uint8_t power_ramping_step;
|
/// PHY cell ID
|
||||||
uint16_t preamble_received_target_power;
|
uint16_t phys_cell_id;
|
||||||
uint8_t msg1_fdm;
|
/// Num PRACH occasions
|
||||||
uint8_t msg1_frequency_start;
|
uint8_t num_prach_ocas;
|
||||||
uint8_t zero_correlation_zone_config;
|
/// PRACH format
|
||||||
uint8_t subcarrier_spacing;
|
uint8_t prach_format;
|
||||||
uint8_t restrictedset_config;
|
/// Num RA
|
||||||
uint16_t root_sequence_index;
|
uint8_t num_ra;
|
||||||
uint16_t rsrp_threshold_ssb;
|
uint8_t prach_start_symbol;
|
||||||
uint16_t rsrp_threshold_sul;
|
/// 38.211 (NCS 38.211 6.3.3.1).
|
||||||
uint16_t prach_freq_offset;
|
uint16_t num_cs;
|
||||||
} fapi_nr_ul_config_prach_pdu;
|
/// Parameter: prach-rootSequenceIndex, see TS 38.211 (6.3.3.2).
|
||||||
|
uint16_t root_seq_id;
|
||||||
|
/// Parameter: High-speed-flag, see TS 38.211 (6.3.3.1). 1 corresponds to Restricted set and 0 to Unrestricted set.
|
||||||
|
uint8_t restricted_set;
|
||||||
|
/// see TS 38.211 (6.3.3.2).
|
||||||
|
uint16_t freq_msg1;
|
||||||
|
// nfapi_nr_ul_beamforming_t beamforming;
|
||||||
|
} fapi_nr_ul_config_prach_pdu;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ typedef enum {
|
|||||||
NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION= 0X86,
|
NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION= 0X86,
|
||||||
NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION= 0X87,
|
NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION= 0X87,
|
||||||
NFAPI_NR_PHY_MSG_TYPE_SRS_INDICATION= 0X88,
|
NFAPI_NR_PHY_MSG_TYPE_SRS_INDICATION= 0X88,
|
||||||
NFAPI_NR_PHY_MSG_TYPE_PACH_INDICATION= 0X89
|
NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION= 0X89
|
||||||
//RESERVED 0X8a ~ 0xff
|
//RESERVED 0X8a ~ 0xff
|
||||||
} nfapi_nr_phy_msg_type_e;
|
} nfapi_nr_phy_msg_type_e;
|
||||||
|
|
||||||
@@ -338,7 +338,7 @@ typedef struct
|
|||||||
//table 3-22
|
//table 3-22
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
nfapi_uint8_tlv_t phy_cell_id;//Physical Cell ID, 𝑁_{𝐼𝐷}^{𝑐𝑒𝑙𝑙} [38.211, sec 7.4.2.1] Value: 0 ->1007
|
nfapi_uint16_tlv_t phy_cell_id;//Physical Cell ID, 𝑁_{𝐼𝐷}^{𝑐𝑒𝑙𝑙} [38.211, sec 7.4.2.1] Value: 0 ->1007
|
||||||
nfapi_uint8_tlv_t frame_duplex_type;//Frame duplex type Value: 0 = FDD 1 = TDD
|
nfapi_uint8_tlv_t frame_duplex_type;//Frame duplex type Value: 0 = FDD 1 = TDD
|
||||||
|
|
||||||
} nfapi_nr_cell_config_t;
|
} nfapi_nr_cell_config_t;
|
||||||
@@ -662,22 +662,35 @@ typedef struct {
|
|||||||
|
|
||||||
//table 3-37
|
//table 3-37
|
||||||
|
|
||||||
#define DCI_PAYLOAD_BTYE_LEN 12 //? TS38.212 sec 7.3.1
|
#define DCI_PAYLOAD_BYTE_LEN 8 // 12 ? TS38.212 sec 7.3.1
|
||||||
|
#define MAX_DCI_CORESET 8
|
||||||
|
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
// The RNTI used for identifying the UE when receiving the PDU Value: 1 -> 65535.
|
||||||
uint16_t rnti;//
|
uint16_t RNTI[MAX_DCI_CORESET];
|
||||||
uint16_t scrambling_id;//
|
// For a UE-specific search space it equals the higher-layer parameter PDCCH-DMRSScrambling-ID if configured,
|
||||||
uint16_t scrambling_rnti;/* */
|
// otherwise it should be set to the phy cell ID. [TS38.211, sec 7.3.2.3] Value: 0->65535
|
||||||
uint8_t cce_index;//
|
uint16_t ScramblingId[MAX_DCI_CORESET];
|
||||||
uint8_t aggregation_level;//
|
// For a UE-specific search space where PDCCH-DMRSScrambling- ID is configured This param equals the CRNTI.
|
||||||
nfapi_nr_tx_precoding_and_beamforming_t* precoding_and_beamforming_list;
|
// Otherwise, it should be set to 0. [TS38.211, sec 7.3.2.3] Value: 0 -> 65535
|
||||||
//tx power info
|
uint16_t ScramblingRNTI[MAX_DCI_CORESET];
|
||||||
uint8_t beta_pdcch_1_0;/*PDCCH power value used for PDCCH Format 1_0 with CRC scrambled by SI-RNTI, PI-RNTI or RA-RNTI. This is ratio of
|
// CCE start Index used to send the DCI Value: 0->135
|
||||||
SSB/PBCH EPRE to PDCCH and PDCCH DMRS EPRE [TS38.213, sec 4.1] Value :0->17 */
|
uint8_t CceIndex[MAX_DCI_CORESET];
|
||||||
uint8_t power_control_offset_ss;//PDCCH power value used for all other PDCCH Formats. This is ratio of SSB/PBCH block EPRE to PDCCH and PDCCH DMRS EPRE [TS38.214, sec 4.1] Values: 0: -3dB, 1: 0dB, 2: 3dB, 3: 6dB
|
// Aggregation level used [TS38.211, sec 7.3.2.1] Value: 1,2,4,8,16
|
||||||
uint16_t payload_size_bits;//The total DCI length (in bits) including padding bits [TS38.212 sec 7.3.1] Range 0-> DCI_PAYLOAD_BTYE_LEN*8
|
uint8_t AggregationLevel[MAX_DCI_CORESET];
|
||||||
uint8_t payload[DCI_PAYLOAD_BTYE_LEN];//DCI payload, where the actual size is defined by PayloadSizeBits. The bit order is as following bit0-bit7 are mapped to first byte of MSB - LSB
|
// Precoding and Beamforming structure See Table 3-43
|
||||||
|
nfapi_nr_tx_precoding_and_beamforming_t precodingAndBeamforming[MAX_DCI_CORESET];
|
||||||
|
// PDCCH power value used for PDCCH Format 1_0 with CRC scrambled by SI-RNTI, PI-RNTI or RA-RNTI.
|
||||||
|
// This is ratio of SSB/PBCH EPRE to PDCCH and PDCCH DMRS EPRE [TS38.213, sec 4.1]
|
||||||
|
// Value :0->17 Report title: 5G FAPI: PHY API Specification Issue date: 29 June 2019 Version: 222.10.17 68 Field Type Description representing -8 to 8 dB in 1dB steps
|
||||||
|
uint8_t beta_PDCCH_1_0[MAX_DCI_CORESET];
|
||||||
|
// PDCCH power value used for all other PDCCH Formats.
|
||||||
|
// This is ratio of SSB/PBCH block EPRE to PDCCH and PDCCH DMRS EPRE [TS38.214, sec 4.1] Values: 0: -3dB,1: 0dB,2: 3dB,3: 6dB
|
||||||
|
uint8_t powerControlOffsetSS[MAX_DCI_CORESET];
|
||||||
|
// The total DCI length (in bits) including padding bits [TS38.212 sec 7.3.1] Range 0->DCI_PAYLOAD_BYTE_LEN*8
|
||||||
|
uint16_t PayloadSizeBits[MAX_DCI_CORESET];
|
||||||
|
// DCI payload, where the actual size is defined by PayloadSizeBits. The bit order is as following bit0-bit7 are mapped to first byte of MSB - LSB
|
||||||
|
uint8_t Payload[MAX_DCI_CORESET][DCI_PAYLOAD_BYTE_LEN];
|
||||||
|
|
||||||
} nfapi_nr_dl_dci_pdu_t;
|
} nfapi_nr_dl_dci_pdu_t;
|
||||||
|
|
||||||
@@ -692,9 +705,6 @@ typedef struct {
|
|||||||
uint16_t *beamIdx[275];
|
uint16_t *beamIdx[275];
|
||||||
} nr_beamforming_t;
|
} nr_beamforming_t;
|
||||||
|
|
||||||
#define MAX_DCI_CORESET 8
|
|
||||||
#define DCI_PAYLOAD_BYTE_LEN 8
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
///Bandwidth part size [TS38.213 sec12]. Number of contiguous PRBs allocated to the BWP,Value: 1->275
|
///Bandwidth part size [TS38.213 sec12]. Number of contiguous PRBs allocated to the BWP,Value: 1->275
|
||||||
uint16_t BWPSize;
|
uint16_t BWPSize;
|
||||||
@@ -723,27 +733,9 @@ typedef struct {
|
|||||||
///Granularity of precoding [TS38.211 sec 7.3.2.2] Field Type Description 0: sameAsRegBundle 1: allContiguousRBs
|
///Granularity of precoding [TS38.211 sec 7.3.2.2] Field Type Description 0: sameAsRegBundle 1: allContiguousRBs
|
||||||
uint8_t precoderGranularity;
|
uint8_t precoderGranularity;
|
||||||
///Number of DCIs in this CORESET.Value: 0->MaxDciPerSlot
|
///Number of DCIs in this CORESET.Value: 0->MaxDciPerSlot
|
||||||
volatile uint16_t numDlDci;
|
uint16_t numDlDci;
|
||||||
///The RNTI used for identifying the UE when receiving the PDU Value: 1 -> 65535.
|
///DL DCI PDU
|
||||||
uint16_t RNTI[MAX_DCI_CORESET];
|
nfapi_nr_dl_dci_pdu_t dci_pdu;
|
||||||
///For a UE-specific search space it equals the higher-layer parameter PDCCH-DMRSScrambling-ID if configured, otherwise it should be set to the phy cell ID. [TS38.211, sec 7.3.2.3] Value: 0->65535
|
|
||||||
uint16_t ScramblingId[MAX_DCI_CORESET];
|
|
||||||
///For a UE-specific search space where PDCCH-DMRSScrambling- ID is configured This param equals the CRNTI. Otherwise, it should be set to 0. [TS38.211, sec 7.3.2.3] Value: 0 -> 65535
|
|
||||||
uint16_t ScramblingRNTI[MAX_DCI_CORESET];
|
|
||||||
///CCE start Index used to send the DCI Value: 0->135
|
|
||||||
uint8_t CceIndex[MAX_DCI_CORESET];
|
|
||||||
///Aggregation level used [TS38.211, sec 7.3.2.1] Value: 1,2,4,8,16
|
|
||||||
uint8_t AggregationLevel[MAX_DCI_CORESET];
|
|
||||||
///Precoding and Beamforming structure See Table 3-43
|
|
||||||
nfapi_nr_tx_precoding_and_beamforming_t precodingAndBeamforming[MAX_DCI_CORESET];
|
|
||||||
///PDCCH power value used for PDCCH Format 1_0 with CRC scrambled by SI-RNTI, PI-RNTI or RA-RNTI. This is ratio of SSB/PBCH EPRE to PDCCH and PDCCH DMRS EPRE [TS38.213, sec 4.1] Value :0->17 Report title: 5G FAPI: PHY API Specification Issue date: 29 June 2019 Version: 222.10.17 68 Field Type Description representing -8 to 8 dB in 1dB steps
|
|
||||||
uint8_t beta_PDCCH_1_0[MAX_DCI_CORESET];
|
|
||||||
///PDCCH power value used for all other PDCCH Formats. This is ratio of SSB/PBCH block EPRE to PDCCH and PDCCH DMRS EPRE [TS38.214, sec 4.1] Values: 0: -3dB,1: 0dB,2: 3dB,3: 6dB
|
|
||||||
uint8_t powerControlOffsetSS[MAX_DCI_CORESET];
|
|
||||||
///The total DCI length (in bits) including padding bits [TS38.212 sec 7.3.1] Range 0->DCI_PAYLOAD_BTYE_LEN*8
|
|
||||||
uint16_t PayloadSizeBits[MAX_DCI_CORESET];
|
|
||||||
///DCI payload, where the actual size is defined by PayloadSizeBits. The bit order is as following bit0-bit7 are mapped to first byte of MSB - LSB
|
|
||||||
uint8_t Payload[MAX_DCI_CORESET][DCI_PAYLOAD_BYTE_LEN];
|
|
||||||
} nfapi_nr_dl_tti_pdcch_pdu_rel15_t;
|
} nfapi_nr_dl_tti_pdcch_pdu_rel15_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -1088,10 +1080,12 @@ typedef struct
|
|||||||
{
|
{
|
||||||
uint16_t phys_cell_id;
|
uint16_t phys_cell_id;
|
||||||
uint8_t num_prach_ocas;
|
uint8_t num_prach_ocas;
|
||||||
|
// SCF PRACH PDU format field does not consider A1/B1 etc. possibilities
|
||||||
|
// We added 9 = A1/B1 10 = A2/B2 11 A3/B3
|
||||||
uint8_t prach_format;
|
uint8_t prach_format;
|
||||||
uint8_t num_ra;
|
uint8_t num_ra;
|
||||||
uint8_t prach_start_symbol;
|
uint8_t prach_start_symbol;
|
||||||
uint16_t num_cs;//
|
uint16_t num_cs;
|
||||||
nfapi_nr_ul_beamforming_t beamforming;
|
nfapi_nr_ul_beamforming_t beamforming;
|
||||||
|
|
||||||
} nfapi_nr_prach_pdu_t;
|
} nfapi_nr_prach_pdu_t;
|
||||||
@@ -1177,6 +1171,7 @@ typedef struct
|
|||||||
uint16_t ul_dmrs_symb_pos;
|
uint16_t ul_dmrs_symb_pos;
|
||||||
uint8_t dmrs_config_type;
|
uint8_t dmrs_config_type;
|
||||||
uint16_t ul_dmrs_scrambling_id;
|
uint16_t ul_dmrs_scrambling_id;
|
||||||
|
uint16_t pusch_identity;
|
||||||
uint8_t scid;
|
uint8_t scid;
|
||||||
uint8_t num_dmrs_cdm_grps_no_data;
|
uint8_t num_dmrs_cdm_grps_no_data;
|
||||||
uint16_t dmrs_ports;//DMRS ports. [TS38.212 7.3.1.1.2] provides description between DCI 0-1 content and DMRS ports. Bitmap occupying the 11 LSBs with: bit 0: antenna port 1000 bit 11: antenna port 1011 and for each bit 0: DMRS port not used 1: DMRS port used
|
uint16_t dmrs_ports;//DMRS ports. [TS38.212 7.3.1.1.2] provides description between DCI 0-1 content and DMRS ports. Bitmap occupying the 11 LSBs with: bit 0: antenna port 1000 bit 11: antenna port 1011 and for each bit 0: DMRS port not used 1: DMRS port used
|
||||||
@@ -1552,7 +1547,7 @@ typedef struct
|
|||||||
//for dci_pusch_pdu
|
//for dci_pusch_pdu
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint8_t pdu_bit_map;
|
uint8_t pduBitmap;
|
||||||
uint32_t handle;
|
uint32_t handle;
|
||||||
uint16_t rnti;
|
uint16_t rnti;
|
||||||
uint8_t ul_cqi;
|
uint8_t ul_cqi;
|
||||||
@@ -1567,7 +1562,7 @@ typedef struct
|
|||||||
//for PUCCH PDU Format 0/1
|
//for PUCCH PDU Format 0/1
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint8_t pdu_bit_map;
|
uint8_t pduBitmap;
|
||||||
uint32_t handle;
|
uint32_t handle;
|
||||||
uint16_t rnti;
|
uint16_t rnti;
|
||||||
uint8_t pucch_format;//PUCCH format Value: 0 -> 1 0: PUCCH Format0 1: PUCCH Format1
|
uint8_t pucch_format;//PUCCH format Value: 0 -> 1 0: PUCCH Format0 1: PUCCH Format1
|
||||||
@@ -1583,7 +1578,7 @@ typedef struct
|
|||||||
//PUCCH PDU Format 2/3/4
|
//PUCCH PDU Format 2/3/4
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint8_t pdu_bit_map;
|
uint8_t pduBitmap;
|
||||||
uint32_t handle;
|
uint32_t handle;
|
||||||
uint16_t rnti;
|
uint16_t rnti;
|
||||||
uint8_t pucch_format;//PUCCH format Value: 0 -> 2 0: PUCCH Format2 1: PUCCH Format3 2: PUCCH Format4
|
uint8_t pucch_format;//PUCCH format Value: 0 -> 2 0: PUCCH Format2 1: PUCCH Format3 2: PUCCH Format4
|
||||||
@@ -1620,7 +1615,7 @@ typedef struct
|
|||||||
uint16_t sfn;
|
uint16_t sfn;
|
||||||
uint16_t slot;
|
uint16_t slot;
|
||||||
uint16_t num_ucis;
|
uint16_t num_ucis;
|
||||||
nfapi_nr_uci_t uci_list[NFAPI_MAX_NUM_UCI_INDICATION];
|
nfapi_nr_uci_t *uci_list;
|
||||||
|
|
||||||
} nfapi_nr_uci_indication_t;
|
} nfapi_nr_uci_indication_t;
|
||||||
|
|
||||||
|
|||||||
@@ -526,7 +526,7 @@ uint32_t pullarray8(uint8_t **in, uint8_t out[], uint32_t max_len, uint32_t len,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((end - out) >= sizeof(uint8_t) * len)
|
if((end - (*in)) >= sizeof(uint8_t) * len)
|
||||||
{
|
{
|
||||||
memcpy(out, (*in), len);
|
memcpy(out, (*in), len);
|
||||||
(*in)+=len;
|
(*in)+=len;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
#include "SIMULATION/TOOLS/sim.h"
|
#include "SIMULATION/TOOLS/sim.h"
|
||||||
#include "PHY/CODING/nrLDPC_extern.h"
|
#include "PHY/CODING/nrLDPC_extern.h"
|
||||||
#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
|
#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
|
||||||
|
#include "openair1/PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.h"
|
||||||
#define MAX_NUM_DLSCH_SEGMENTS 16
|
#define MAX_NUM_DLSCH_SEGMENTS 16
|
||||||
#define MAX_BLOCK_LENGTH 8448
|
#define MAX_BLOCK_LENGTH 8448
|
||||||
|
|
||||||
@@ -102,7 +102,8 @@ int test_ldpc(short No_iteration,
|
|||||||
unsigned int *crc_misses,
|
unsigned int *crc_misses,
|
||||||
time_stats_t *time_optim,
|
time_stats_t *time_optim,
|
||||||
time_stats_t *time_decoder,
|
time_stats_t *time_decoder,
|
||||||
n_iter_stats_t *dec_iter)
|
n_iter_stats_t *dec_iter,
|
||||||
|
short run_cuda)
|
||||||
{
|
{
|
||||||
//clock initiate
|
//clock initiate
|
||||||
//time_stats_t time,time_optim,tinput,tprep,tparity,toutput, time_decoder;
|
//time_stats_t time,time_optim,tinput,tprep,tparity,toutput, time_decoder;
|
||||||
@@ -114,7 +115,6 @@ int test_ldpc(short No_iteration,
|
|||||||
|
|
||||||
double sigma;
|
double sigma;
|
||||||
sigma = 1.0/sqrt(2*SNR);
|
sigma = 1.0/sqrt(2*SNR);
|
||||||
|
|
||||||
opp_enabled=1;
|
opp_enabled=1;
|
||||||
cpu_freq_GHz = get_cpu_freq_GHz();
|
cpu_freq_GHz = get_cpu_freq_GHz();
|
||||||
//short test_input[block_length];
|
//short test_input[block_length];
|
||||||
@@ -396,16 +396,26 @@ int test_ldpc(short No_iteration,
|
|||||||
decParams.numMaxIter=No_iteration;
|
decParams.numMaxIter=No_iteration;
|
||||||
decParams.outMode = nrLDPC_outMode_BIT;
|
decParams.outMode = nrLDPC_outMode_BIT;
|
||||||
//decParams.outMode =nrLDPC_outMode_LLRINT8;
|
//decParams.outMode =nrLDPC_outMode_LLRINT8;
|
||||||
|
#ifdef CUDA_FLAG
|
||||||
|
set_compact_BG(Zc,BG);
|
||||||
for(j=0;j<n_segments;j++) {
|
init_LLR_DMA_for_CUDA(&decParams, (int8_t*)channel_output_fixed[j], (int8_t*)estimated_output[j], block_length);
|
||||||
|
#endif
|
||||||
|
for(j=0;j<n_segments;j++) {
|
||||||
start_meas(time_decoder);
|
start_meas(time_decoder);
|
||||||
// decode the sequence
|
#ifdef CUDA_FLAG
|
||||||
// decoder supports BG2, Z=128 & 256
|
if(run_cuda){
|
||||||
//esimated_output=ldpc_decoder(channel_output_fixed, block_length, No_iteration, (double)((float)nom_rate/(float)denom_rate));
|
n_iter = nrLDPC_decoder_LYC(&decParams, (int8_t*)channel_output_fixed[j], (int8_t*)estimated_output[j], block_length, time_decoder);
|
||||||
///nrLDPC_decoder(&decParams, channel_output_fixed, estimated_output, NULL);
|
}
|
||||||
|
else{
|
||||||
|
// decode the sequence
|
||||||
|
// decoder supports BG2, Z=128 & 256
|
||||||
|
//esimated_output=ldpc_decoder(channel_output_fixed, block_length, No_iteration, (double)((float)nom_rate/(float)denom_rate));
|
||||||
|
///nrLDPC_decoder(&decParams, channel_output_fixed, estimated_output, NULL);
|
||||||
n_iter = nrLDPC_decoder(&decParams, (int8_t*)channel_output_fixed[j], (int8_t*)estimated_output[j], p_nrLDPC_procBuf, p_decoder_profiler);
|
n_iter = nrLDPC_decoder(&decParams, (int8_t*)channel_output_fixed[j], (int8_t*)estimated_output[j], p_nrLDPC_procBuf, p_decoder_profiler);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
n_iter = nrLDPC_decoder(&decParams, (int8_t*)channel_output_fixed[j], (int8_t*)estimated_output[j], p_nrLDPC_procBuf, p_decoder_profiler);
|
||||||
|
#endif
|
||||||
stop_meas(time_decoder);
|
stop_meas(time_decoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -506,6 +516,9 @@ int test_ldpc(short No_iteration,
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
#ifdef CUDA_FLAG
|
||||||
|
warmup_for_GPU();
|
||||||
|
#endif
|
||||||
unsigned int errors, errors_bit, crc_misses;
|
unsigned int errors, errors_bit, crc_misses;
|
||||||
double errors_bit_uncoded;
|
double errors_bit_uncoded;
|
||||||
short block_length=8448; // decoder supports length: 1201 -> 1280, 2401 -> 2560
|
short block_length=8448; // decoder supports length: 1201 -> 1280, 2401 -> 2560
|
||||||
@@ -513,6 +526,8 @@ int main(int argc, char *argv[])
|
|||||||
short No_iteration=5;
|
short No_iteration=5;
|
||||||
int n_segments=1;
|
int n_segments=1;
|
||||||
//double rate=0.333;
|
//double rate=0.333;
|
||||||
|
short run_cuda = 0;
|
||||||
|
|
||||||
int nom_rate=1;
|
int nom_rate=1;
|
||||||
int denom_rate=3;
|
int denom_rate=3;
|
||||||
double SNR0=-2.0,SNR,SNR_lin;
|
double SNR0=-2.0,SNR,SNR_lin;
|
||||||
@@ -531,7 +546,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
short BG=0,Zc,Kb=0;
|
short BG=0,Zc,Kb=0;
|
||||||
|
|
||||||
while ((c = getopt (argc, argv, "q:r:s:S:l:n:d:i:t:u:h")) != -1)
|
while ((c = getopt (argc, argv, "q:r:s:S:l:G:n:d:i:t:u:h")) != -1)
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case 'q':
|
case 'q':
|
||||||
@@ -549,6 +564,10 @@ int main(int argc, char *argv[])
|
|||||||
case 'l':
|
case 'l':
|
||||||
block_length = atoi(optarg);
|
block_length = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'G':
|
||||||
|
run_cuda = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'n':
|
case 'n':
|
||||||
n_trials = atoi(optarg);
|
n_trials = atoi(optarg);
|
||||||
@@ -584,6 +603,7 @@ int main(int argc, char *argv[])
|
|||||||
printf("-r Nominator rate, (1, 2, 22), Default: 1\n");
|
printf("-r Nominator rate, (1, 2, 22), Default: 1\n");
|
||||||
printf("-d Denominator rate, (3, 5, 25), Default: 1\n");
|
printf("-d Denominator rate, (3, 5, 25), Default: 1\n");
|
||||||
printf("-l Block length (l > 3840 -> BG1, rest BG2 ), Default: 8448\n");
|
printf("-l Block length (l > 3840 -> BG1, rest BG2 ), Default: 8448\n");
|
||||||
|
printf("-G give 1 to run cuda for LDPC, Default: 0\n");
|
||||||
printf("-n Number of simulation trials, Default: 1\n");
|
printf("-n Number of simulation trials, Default: 1\n");
|
||||||
//printf("-M MCS2 for TB 2\n");
|
//printf("-M MCS2 for TB 2\n");
|
||||||
printf("-s SNR per information bit (EbNo) in dB, Default: -2\n");
|
printf("-s SNR per information bit (EbNo) in dB, Default: -2\n");
|
||||||
@@ -674,7 +694,8 @@ int main(int argc, char *argv[])
|
|||||||
&crc_misses,
|
&crc_misses,
|
||||||
time_optim,
|
time_optim,
|
||||||
time_decoder,
|
time_decoder,
|
||||||
dec_iter);
|
dec_iter,
|
||||||
|
run_cuda);
|
||||||
|
|
||||||
printf("SNR %f, BLER %f (%u/%d)\n", SNR, (float)decoded_errors[i]/(float)n_trials, decoded_errors[i], n_trials);
|
printf("SNR %f, BLER %f (%u/%d)\n", SNR, (float)decoded_errors[i]/(float)n_trials, decoded_errors[i], n_trials);
|
||||||
printf("SNR %f, BER %f (%u/%d)\n", SNR, (float)errors_bit/(float)n_trials/(float)block_length/(double)n_segments, decoded_errors[i], n_trials);
|
printf("SNR %f, BER %f (%u/%d)\n", SNR, (float)errors_bit/(float)n_trials/(float)block_length/(double)n_segments, decoded_errors[i], n_trials);
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
#include "PHY/CODING/coding_defs.h"
|
#include "PHY/CODING/coding_defs.h"
|
||||||
#include "SIMULATION/TOOLS/sim.h"
|
#include "SIMULATION/TOOLS/sim.h"
|
||||||
#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
|
#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
|
||||||
//#include "PHY/NR_TRANSPORT/nr_transport.h"
|
|
||||||
//#include "common/utils/LOG/log.h"
|
//#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
//#define DEBUG_DCI_POLAR_PARAMS
|
//#define DEBUG_DCI_POLAR_PARAMS
|
||||||
@@ -27,7 +26,7 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
//Default simulation values (Aim for iterations = 1000000.)
|
//Default simulation values (Aim for iterations = 1000000.)
|
||||||
int decoder_int16=0;
|
int decoder_int16=0;
|
||||||
int itr, iterations = 1000, arguments, polarMessageType = 0; //0=PBCH, 1=DCI, -1=UCI
|
int itr, iterations = 1000, arguments, polarMessageType = 0; //0=PBCH, 1=DCI, 2=UCI
|
||||||
double SNRstart = -20.0, SNRstop = 0.0, SNRinc= 0.5; //dB
|
double SNRstart = -20.0, SNRstop = 0.0, SNRinc= 0.5; //dB
|
||||||
double SNR, SNR_lin;
|
double SNR, SNR_lin;
|
||||||
int16_t nBitError = 0; // -1 = Decoding failed (All list entries have failed the CRC checks).
|
int16_t nBitError = 0; // -1 = Decoding failed (All list entries have failed the CRC checks).
|
||||||
@@ -42,6 +41,7 @@ int main(int argc, char *argv[])
|
|||||||
switch (arguments) {
|
switch (arguments) {
|
||||||
case 's':
|
case 's':
|
||||||
SNRstart = atof(optarg);
|
SNRstart = atof(optarg);
|
||||||
|
SNRstop = SNRstart + 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'd':
|
case 'd':
|
||||||
@@ -91,7 +91,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
case 'k':
|
case 'k':
|
||||||
testLength=atoi(optarg);
|
testLength=atoi(optarg);
|
||||||
if (testLength < 12 || testLength > 60) {
|
if (testLength < 12 || testLength > 127) {
|
||||||
printf("Illegal packet bitlength %d \n",testLength);
|
printf("Illegal packet bitlength %d \n",testLength);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
@@ -120,12 +120,13 @@ int main(int argc, char *argv[])
|
|||||||
crcTableInit();
|
crcTableInit();
|
||||||
|
|
||||||
if (polarMessageType == 0) { //PBCH
|
if (polarMessageType == 0) { //PBCH
|
||||||
aggregation_level = NR_POLAR_PBCH_AGGREGATION_LEVEL;
|
aggregation_level = NR_POLAR_PBCH_AGGREGATION_LEVEL;
|
||||||
} else if (polarMessageType == 1) { //DCI
|
} else if (polarMessageType == 1) { //DCI
|
||||||
coderLength = 108*aggregation_level;
|
coderLength = 108*aggregation_level;
|
||||||
} else if (polarMessageType == -1) { //UCI
|
} else if (polarMessageType == 2) { //UCI
|
||||||
printf("UCI testing not supported yet\n");
|
//pucch2 parameters, 1 symbol, aggregation_level = NPRB
|
||||||
exit(-1);
|
AssertFatal(aggregation_level>2,"For UCI formats, aggregation (N_RB) should be > 2\n");
|
||||||
|
coderLength = 16*aggregation_level;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Logging
|
//Logging
|
||||||
|
|||||||
@@ -382,12 +382,24 @@ unsigned int crc16 (unsigned char * inptr, int bitlen);
|
|||||||
@param bitlen length of inputs in bits*/
|
@param bitlen length of inputs in bits*/
|
||||||
unsigned int crc12 (unsigned char * inptr, int bitlen);
|
unsigned int crc12 (unsigned char * inptr, int bitlen);
|
||||||
|
|
||||||
|
/*!\fn uint32_t crc12(uint8_t *inPtr, int32_t bitlen)
|
||||||
|
\brief This computes an 11-bit crc based on 3GPP NR specifications.
|
||||||
|
@param inPtr Pointer to input byte stream
|
||||||
|
@param bitlen length of inputs in bits*/
|
||||||
|
unsigned int crc11 (unsigned char * inptr, int bitlen);
|
||||||
|
|
||||||
/*!\fn uint32_t crc8(uint8_t *inPtr, int32_t bitlen)
|
/*!\fn uint32_t crc8(uint8_t *inPtr, int32_t bitlen)
|
||||||
\brief This computes a 8-bit crc based on 3GPP UMTS specifications.
|
\brief This computes a 8-bit crc based on 3GPP UMTS specifications.
|
||||||
@param inPtr Pointer to input byte stream
|
@param inPtr Pointer to input byte stream
|
||||||
@param bitlen length of inputs in bits*/
|
@param bitlen length of inputs in bits*/
|
||||||
unsigned int crc8 (unsigned char * inptr, int bitlen);
|
unsigned int crc8 (unsigned char * inptr, int bitlen);
|
||||||
|
|
||||||
|
/*!\fn uint32_t crc8(uint8_t *inPtr, int32_t bitlen)
|
||||||
|
\brief This computes a 6-bit crc based on 3GPP NR specifications.
|
||||||
|
@param inPtr Pointer to input byte stream
|
||||||
|
@param bitlen length of inputs in bits*/
|
||||||
|
unsigned int crc6 (unsigned char * inptr, int bitlen);
|
||||||
|
|
||||||
int check_crc(uint8_t* decoded_bytes, uint32_t n, uint32_t F, uint8_t crc_type);
|
int check_crc(uint8_t* decoded_bytes, uint32_t n, uint32_t F, uint8_t crc_type);
|
||||||
|
|
||||||
/*!\fn void phy_viterbi_dot11_sse2(int8_t *y, uint8_t *decoded_bytes, uint16_t n,int offset,int traceback)
|
/*!\fn void phy_viterbi_dot11_sse2(int8_t *y, uint8_t *decoded_bytes, uint16_t n,int offset,int traceback)
|
||||||
@@ -463,6 +475,7 @@ uint32_t nr_compute_tbs(uint16_t Qm,
|
|||||||
uint16_t nb_symb_sch,
|
uint16_t nb_symb_sch,
|
||||||
uint16_t nb_dmrs_prb,
|
uint16_t nb_dmrs_prb,
|
||||||
uint16_t nb_rb_oh,
|
uint16_t nb_rb_oh,
|
||||||
|
uint8_t tb_scaling,
|
||||||
uint8_t Nl);
|
uint8_t Nl);
|
||||||
|
|
||||||
uint32_t nr_compute_tbslbrm(uint16_t table,
|
uint32_t nr_compute_tbslbrm(uint16_t table,
|
||||||
|
|||||||
@@ -90,7 +90,9 @@ static unsigned int crc24bTable[256];
|
|||||||
static unsigned int crc24cTable[256];
|
static unsigned int crc24cTable[256];
|
||||||
static unsigned short crc16Table[256];
|
static unsigned short crc16Table[256];
|
||||||
static unsigned short crc12Table[256];
|
static unsigned short crc12Table[256];
|
||||||
|
static unsigned short crc11Table[256];
|
||||||
static unsigned char crc8Table[256];
|
static unsigned char crc8Table[256];
|
||||||
|
static unsigned char crc6Table[256];
|
||||||
|
|
||||||
void crcTableInit (void)
|
void crcTableInit (void)
|
||||||
{
|
{
|
||||||
@@ -102,7 +104,9 @@ void crcTableInit (void)
|
|||||||
crc24cTable[c] = crcbit (&c, 1, poly24c);
|
crc24cTable[c] = crcbit (&c, 1, poly24c);
|
||||||
crc16Table[c] = (unsigned short) (crcbit (&c, 1, poly16) >> 16);
|
crc16Table[c] = (unsigned short) (crcbit (&c, 1, poly16) >> 16);
|
||||||
crc12Table[c] = (unsigned short) (crcbit (&c, 1, poly12) >> 16);
|
crc12Table[c] = (unsigned short) (crcbit (&c, 1, poly12) >> 16);
|
||||||
|
crc11Table[c] = (unsigned short) (crcbit (&c, 1, poly11) >> 16);
|
||||||
crc8Table[c] = (unsigned char) (crcbit (&c, 1, poly8) >> 24);
|
crc8Table[c] = (unsigned char) (crcbit (&c, 1, poly8) >> 24);
|
||||||
|
crc6Table[c] = (unsigned char) (crcbit (&c, 1, poly6) >> 24);
|
||||||
} while (++c);
|
} while (++c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,6 +211,24 @@ crc12 (unsigned char * inptr, int bitlen)
|
|||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int
|
||||||
|
crc11 (unsigned char * inptr, int bitlen)
|
||||||
|
{
|
||||||
|
int octetlen, resbit;
|
||||||
|
unsigned int crc = 0;
|
||||||
|
octetlen = bitlen / 8; /* Change in octets */
|
||||||
|
resbit = (bitlen % 8);
|
||||||
|
|
||||||
|
while (octetlen-- > 0) {
|
||||||
|
crc = (crc << 8) ^ (crc11Table[(*inptr++) ^ (crc >> 24)] << 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resbit > 0)
|
||||||
|
crc = (crc << resbit) ^ (crc11Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))] << 16);
|
||||||
|
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int
|
unsigned int
|
||||||
crc8 (unsigned char * inptr, int bitlen)
|
crc8 (unsigned char * inptr, int bitlen)
|
||||||
{
|
{
|
||||||
@@ -225,6 +247,24 @@ crc8 (unsigned char * inptr, int bitlen)
|
|||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int
|
||||||
|
crc6 (unsigned char * inptr, int bitlen)
|
||||||
|
{
|
||||||
|
int octetlen, resbit;
|
||||||
|
unsigned int crc = 0;
|
||||||
|
octetlen = bitlen / 8; /* Change in octets */
|
||||||
|
resbit = (bitlen % 8);
|
||||||
|
|
||||||
|
while (octetlen-- > 0) {
|
||||||
|
crc = crc6Table[(*inptr++) ^ (crc >> 24)] << 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resbit > 0)
|
||||||
|
crc = (crc << resbit) ^ (crc8Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))] << 24);
|
||||||
|
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
int check_crc(uint8_t* decoded_bytes, uint32_t n, uint32_t F, uint8_t crc_type)
|
int check_crc(uint8_t* decoded_bytes, uint32_t n, uint32_t F, uint8_t crc_type)
|
||||||
{
|
{
|
||||||
uint32_t crc=0,oldcrc=0;
|
uint32_t crc=0,oldcrc=0;
|
||||||
@@ -284,6 +324,7 @@ int check_crc(uint8_t* decoded_bytes, uint32_t n, uint32_t F, uint8_t crc_type)
|
|||||||
AssertFatal(1,"Invalid crc_type \n");
|
AssertFatal(1,"Invalid crc_type \n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (crc == oldcrc)
|
if (crc == oldcrc)
|
||||||
return(1);
|
return(1);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
int h_base_0 [46*68] = {
|
||||||
|
250, 69, 226, 159, -1, 100, 10, -1, -1, 59, 229, 110, 191, 9, -1, 195, 23, -1, 190, 35, 239, 31, 1, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
2, -1, 239, 117, 124, 71, -1, 222, 104, 173, -1, 220, 102, -1, 109, 132, 142, 155, -1, 255, -1, 28, 0, 0, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
106, 111, 185, -1, 63, 117, 93, 229, 177, 95, 39, -1, -1, 142, 225, 225, -1, 245, 205, 251, 117, -1, -1, -1, 0, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
121, 89, -1, 84, 20, -1, 150, 131, 243, -1, 136, 86, 246, 219, 211, -1, 240, 76, 244, -1, 144, 12, 1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
157, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
205, 236, -1, 194, -1, -1, -1, -1, -1, -1, -1, -1, 231, -1, -1, -1, 28, -1, -1, -1, -1, 123, 115, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
183, -1, -1, -1, -1, -1, 22, -1, -1, -1, 28, 67, -1, 244, -1, -1, -1, 11, 157, -1, 211, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
220, 44, -1, -1, 159, -1, -1, 31, 167, -1, -1, -1, -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1,
|
||||||
|
112, 4, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, 211, -1, -1, -1, 102, -1, -1, 164, -1, 109, 241, -1, 90, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1,
|
||||||
|
103, 182, -1, -1, -1, -1, -1, -1, -1, -1, 109, 21, -1, 142, -1, -1, -1, 14, 61, -1, 216, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1,
|
||||||
|
-1, 98, 149, -1, 167, -1, -1, 160, 49, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1,
|
||||||
|
77, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, -1, -1, -1, 182, -1, -1, -1, -1, 78, 252, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1,
|
||||||
|
160, 42, -1, -1, -1, -1, -1, -1, -1, -1, 21, 32, -1, 234, -1, -1, -1, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1,
|
||||||
|
177, -1, -1, 248, -1, -1, -1, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 185, -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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,
|
||||||
|
206, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, -1, -1, 206, 127, 16, -1, -1, -1, 229, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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,
|
||||||
|
40, 96, -1, -1, -1, -1, -1, -1, -1, -1, 65, -1, -1, 63, -1, -1, -1, -1, 75, -1, -1, -1, -1, -1, -1, 179, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, 64, -1, 49, -1, -1, -1, -1, -1, -1, -1, 49, -1, -1, -1, -1, -1, -1, -1, -1, 51, -1, 154, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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,
|
||||||
|
7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 164, -1, 59, 1, -1, -1, -1, 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 233, 8, -1, -1, -1, -1, 155, 147, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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,
|
||||||
|
60, 73, -1, -1, -1, -1, -1, 72, 127, -1, 224, -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, 0, -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,
|
||||||
|
151, -1, -1, 186, -1, -1, -1, -1, -1, 217, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, 249, -1, -1, -1, 121, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, -1, -1, 131, 171, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 142, 188, -1, -1, -1, 158, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 156, 147, -1, -1, -1, -1, -1, -1, -1, 170, -1, -1, -1, -1, -1, -1, -1, 152, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
112, -1, -1, 86, 236, -1, -1, -1, -1, -1, -1, 116, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 222, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 23, -1, -1, -1, -1, 136, 116, -1, -1, -1, -1, -1, -1, 182, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
195, -1, 243, -1, 215, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 25, -1, -1, -1, -1, 104, -1, 194, -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, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
128, -1, -1, -1, 165, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 181, -1, 63, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 86, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 236, -1, -1, -1, 84, -1, -1, -1, -1, -1, -1, 6, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
216, -1, -1, -1, -1, -1, -1, -1, -1, -1, 73, -1, -1, 120, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 95, -1, -1, -1, -1, -1, 177, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 172, -1, -1, 61, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
221, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 112, -1, 199, -1, -1, -1, -1, -1, -1, -1, -1, -1, 121, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 2, 187, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, 211, -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, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
127, -1, -1, -1, -1, -1, -1, 167, -1, -1, -1, -1, -1, -1, -1, 164, -1, 159, -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, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 161, -1, -1, -1, -1, 197, -1, -1, -1, -1, -1, 207, -1, -1, -1, -1, -1, -1, -1, -1, -1, 103, -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, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 105, 51, -1, -1, 120, -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, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 198, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 220, -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, -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, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
167, -1, -1, -1, -1, -1, -1, -1, -1, 151, 157, -1, 163, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 173, -1, 139, -1, -1, -1, 149, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
|
||||||
|
157, -1, -1, -1, -1, -1, -1, -1, 137, -1, -1, -1, -1, -1, -1, -1, -1, 149, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1,
|
||||||
|
-1, 167, -1, 173, -1, -1, -1, -1, -1, 139, -1, -1, -1, -1, -1, -1, -1, -1, 151, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1,
|
||||||
|
149, -1, -1, -1, 157, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 137, -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, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
|
||||||
|
-1, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 163, -1, 173, -1, -1, -1, -1, -1, -1, 139, -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, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1,
|
||||||
|
139, -1, -1, -1, -1, -1, -1, 157, -1, 163, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 173, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
|
||||||
|
-1, 149, -1, -1, -1, -1, 151, -1, -1, -1, 167, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
|
||||||
|
};
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
int h_base_1 [46*68] = {
|
||||||
|
307, 19, 50, 369, -1, 181, 216, -1, -1, 317, 288, 109, 17, 357, -1, 215, 106, -1, 242, 180, 330, 346, 1, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
76, -1, 76, 73, 288, 144, -1, 331, 331, 178, -1, 295, 342, -1, 217, 99, 354, 114, -1, 331, -1, 112, 0, 0, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
205, 250, 328, -1, 332, 256, 161, 267, 160, 63, 129, -1, -1, 200, 88, 53, -1, 131, 240, 205, 13, -1, -1, -1, 0, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
276, 87, -1, 0, 275, -1, 199, 153, 56, -1, 132, 305, 231, 341, 212, -1, 304, 300, 271, -1, 39, 357, 1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
332, 181, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
195, 14, -1, 115, -1, -1, -1, -1, -1, -1, -1, -1, 166, -1, -1, -1, 241, -1, -1, -1, -1, 51, 157, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
278, -1, -1, -1, -1, -1, 257, -1, -1, -1, 1, 351, -1, 92, -1, -1, -1, 253, 18, -1, 225, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
9, 62, -1, -1, 316, -1, -1, 333, 290, -1, -1, -1, -1, -1, 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1, -1,
|
||||||
|
307, 179, -1, 165, -1, -1, -1, -1, -1, -1, -1, -1, 18, -1, -1, -1, 39, -1, -1, 224, -1, 368, 67, -1, 170, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1, -1,
|
||||||
|
366, 232, -1, -1, -1, -1, -1, -1, -1, -1, 321, 133, -1, 57, -1, -1, -1, 303, 63, -1, 82, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1, -1,
|
||||||
|
-1, 101, 339, -1, 274, -1, -1, 111, 383, -1, -1, -1, -1, -1, 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1, -1,
|
||||||
|
48, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, -1, -1, -1, 47, -1, -1, -1, -1, 188, 334, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1, -1,
|
||||||
|
77, 186, -1, -1, -1, -1, -1, -1, -1, -1, 174, 232, -1, 50, -1, -1, -1, -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, -1,
|
||||||
|
313, -1, -1, 177, -1, -1, -1, 266, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, -1, -1, 370, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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,
|
||||||
|
142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 248, -1, -1, 137, 89, 347, -1, -1, -1, 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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,
|
||||||
|
241, 2, -1, -1, -1, -1, -1, -1, -1, -1, 210, -1, -1, 318, -1, -1, -1, -1, 55, -1, -1, -1, -1, -1, -1, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, 13, -1, 338, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, -1, -1, -1, -1, -1, -1, 289, -1, 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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,
|
||||||
|
260, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 303, -1, 81, 358, -1, -1, -1, 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, 130, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 163, 280, -1, -1, -1, -1, 132, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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,
|
||||||
|
145, 213, -1, -1, -1, -1, -1, 344, 242, -1, 197, -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, 0, -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,
|
||||||
|
187, -1, -1, 206, -1, -1, -1, -1, -1, 264, -1, 341, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -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, 205, -1, -1, -1, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 328, -1, -1, -1, 213, 97, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
30, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 233, -1, -1, -1, 22, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 24, 89, -1, -1, -1, -1, -1, -1, -1, 61, -1, -1, -1, -1, -1, -1, -1, 27, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
298, -1, -1, 158, 235, -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 234, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 72, -1, -1, -1, -1, 17, 383, -1, -1, -1, -1, -1, -1, 312, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
71, -1, 81, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 136, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 194, -1, -1, -1, -1, 194, -1, 101, -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, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
222, -1, -1, -1, 19, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 244, -1, 274, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 252, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, 147, -1, -1, -1, -1, -1, -1, 78, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
159, -1, -1, -1, -1, -1, -1, -1, -1, -1, 229, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 100, -1, -1, -1, -1, -1, 215, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, -1, -1, 256, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 201, -1, 175, -1, -1, -1, -1, -1, -1, -1, -1, -1, 287, -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, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 323, 8, -1, -1, -1, -1, -1, -1, -1, -1, 361, -1, -1, -1, -1, -1, -1, -1, -1, -1, 105, -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, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
230, -1, -1, -1, -1, -1, -1, 148, -1, -1, -1, -1, -1, -1, -1, 202, -1, 312, -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, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 320, -1, -1, -1, -1, 335, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, 266, -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, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
210, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, 297, -1, -1, 21, -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, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 82, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, -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, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
185, -1, -1, -1, -1, -1, -1, -1, -1, 177, 289, -1, 214, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 258, -1, 93, -1, -1, -1, 346, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 297, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
|
||||||
|
175, -1, -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, -1, -1, -1, 312, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1,
|
||||||
|
-1, 52, -1, 314, -1, -1, -1, -1, -1, 139, -1, -1, -1, -1, -1, -1, -1, -1, 288, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1,
|
||||||
|
113, -1, -1, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 218, -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, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
|
||||||
|
-1, 113, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, -1, 114, -1, -1, -1, -1, -1, -1, 168, -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, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1,
|
||||||
|
80, -1, -1, -1, -1, -1, -1, 78, -1, 163, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 274, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
|
||||||
|
-1, 135, -1, -1, -1, -1, 149, -1, -1, -1, 15, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
|
||||||
|
};
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user