Merge remote-tracking branch 'origin/develop' into develop-SRS-feedback
# Conflicts: # nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h # openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
This commit is contained in:
@@ -579,9 +579,17 @@ class Containerize():
|
|||||||
lUserName = self.eNB2UserName
|
lUserName = self.eNB2UserName
|
||||||
lPassWord = self.eNB2Password
|
lPassWord = self.eNB2Password
|
||||||
lSsh.open(lIpAddr, lUserName, lPassWord)
|
lSsh.open(lIpAddr, lUserName, lPassWord)
|
||||||
lSsh.command('docker save ' + self.imageToCopy + ':' + imageTag + ' | gzip > ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
lSsh.command('docker save ' + self.imageToCopy + ':' + imageTag + ' | gzip --fast > ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
||||||
lSsh.copyin(lIpAddr, lUserName, lPassWord, '~/' + self.imageToCopy + '-' + imageTag + '.tar.gz', '.')
|
ret = lSsh.copyin(lIpAddr, lUserName, lPassWord, '~/' + self.imageToCopy + '-' + imageTag + '.tar.gz', '.')
|
||||||
|
if ret != 0:
|
||||||
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
|
self.exitStatus = 1
|
||||||
|
return False
|
||||||
lSsh.command('rm ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
lSsh.command('rm ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
||||||
|
if lSsh.getBefore().count('cannot remove'):
|
||||||
|
HTML.CreateHtmlTestRow('file not created by docker save', 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
|
self.exitStatus = 1
|
||||||
|
return False
|
||||||
lSsh.close()
|
lSsh.close()
|
||||||
|
|
||||||
# Going to the Test Server
|
# Going to the Test Server
|
||||||
@@ -599,15 +607,26 @@ class Containerize():
|
|||||||
lPassWord = self.eNB2Password
|
lPassWord = self.eNB2Password
|
||||||
lSsh.open(lIpAddr, lUserName, lPassWord)
|
lSsh.open(lIpAddr, lUserName, lPassWord)
|
||||||
lSsh.copyout(lIpAddr, lUserName, lPassWord, './' + self.imageToCopy + '-' + imageTag + '.tar.gz', '~')
|
lSsh.copyout(lIpAddr, lUserName, lPassWord, './' + self.imageToCopy + '-' + imageTag + '.tar.gz', '~')
|
||||||
|
# copyout has no return code and will quit if something fails
|
||||||
lSsh.command('docker rmi ' + self.imageToCopy + ':' + imageTag, '\$', 10)
|
lSsh.command('docker rmi ' + self.imageToCopy + ':' + imageTag, '\$', 10)
|
||||||
lSsh.command('docker load < ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
lSsh.command('docker load < ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
||||||
|
if lSsh.getBefore().count('o such file') or lSsh.getBefore().count('invalid tar header'):
|
||||||
|
logging.debug(lSsh.getBefore())
|
||||||
|
HTML.CreateHtmlTestRow('problem during docker load', 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
|
self.exitStatus = 1
|
||||||
|
return False
|
||||||
lSsh.command('rm ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
lSsh.command('rm ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
||||||
|
if lSsh.getBefore().count('cannot remove'):
|
||||||
|
HTML.CreateHtmlTestRow('file not copied during scp?', 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
|
self.exitStatus = 1
|
||||||
|
return False
|
||||||
lSsh.close()
|
lSsh.close()
|
||||||
|
|
||||||
if os.path.isfile('./' + self.imageToCopy + '-' + imageTag + '.tar.gz'):
|
if os.path.isfile('./' + self.imageToCopy + '-' + imageTag + '.tar.gz'):
|
||||||
os.remove('./' + self.imageToCopy + '-' + imageTag + '.tar.gz')
|
os.remove('./' + self.imageToCopy + '-' + imageTag + '.tar.gz')
|
||||||
|
|
||||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
return True
|
||||||
|
|
||||||
def DeployObject(self, HTML, EPC):
|
def DeployObject(self, HTML, EPC):
|
||||||
if self.eNB_serverId[self.eNB_instance] == '0':
|
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||||
@@ -683,6 +702,9 @@ class Containerize():
|
|||||||
logging.debug(' -- ' + str(unhealthyNb) + ' unhealthy container(s)')
|
logging.debug(' -- ' + str(unhealthyNb) + ' unhealthy container(s)')
|
||||||
logging.debug(' -- ' + str(startingNb) + ' still starting container(s)')
|
logging.debug(' -- ' + str(startingNb) + ' still starting container(s)')
|
||||||
|
|
||||||
|
self.testCase_id = HTML.testCase_id
|
||||||
|
self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
|
||||||
|
|
||||||
status = False
|
status = False
|
||||||
if healthyNb == 1:
|
if healthyNb == 1:
|
||||||
cnt = 0
|
cnt = 0
|
||||||
@@ -697,11 +719,12 @@ class Containerize():
|
|||||||
status = True
|
status = True
|
||||||
logging.info('\u001B[1m Deploying OAI object Pass\u001B[0m')
|
logging.info('\u001B[1m Deploying OAI object Pass\u001B[0m')
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
|
else:
|
||||||
|
# containers are unhealthy, so we won't start. However, logs are stored at the end
|
||||||
|
# in UndeployObject so we here store the logs of the unhealthy container to report it
|
||||||
|
mySSH.command('docker logs ' + containerName + ' > ' + lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '\$', 30)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|
||||||
self.testCase_id = HTML.testCase_id
|
|
||||||
self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
|
|
||||||
|
|
||||||
if status:
|
if status:
|
||||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ class PhySim:
|
|||||||
logging.debug('oai-physim size is unknown')
|
logging.debug('oai-physim size is unknown')
|
||||||
|
|
||||||
# logging to OC Cluster and then switch to corresponding project
|
# logging to OC Cluster and then switch to corresponding project
|
||||||
mySSH.command(f'oc login -u {ocUserName} -p {ocPassword}', '\$', 30)
|
mySSH.command(f'oc login -u {ocUserName} -p {ocPassword} --server https://api.oai.cs.eurecom.fr:6443', '\$', 30)
|
||||||
if mySSH.getBefore().count('Login successful.') == 0:
|
if mySSH.getBefore().count('Login successful.') == 0:
|
||||||
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
|
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|||||||
+2
-2
@@ -253,7 +253,7 @@ class EPCManagement():
|
|||||||
logging.debug('Starting OAI CN5G')
|
logging.debug('Starting OAI CN5G')
|
||||||
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
||||||
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
|
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
|
mySSH.command('cd /opt/oai-cn5g-fed-v1.4/docker-compose', '\$', 5)
|
||||||
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
|
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
|
||||||
if re.search('start-mini-as-ue', self.cfgDeploy):
|
if re.search('start-mini-as-ue', self.cfgDeploy):
|
||||||
dFile = 'docker-compose-mini-nrf-asue.yaml'
|
dFile = 'docker-compose-mini-nrf-asue.yaml'
|
||||||
@@ -537,7 +537,7 @@ class EPCManagement():
|
|||||||
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
|
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
|
||||||
|
|
||||||
logging.debug('Terminating OAI CN5G')
|
logging.debug('Terminating OAI CN5G')
|
||||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
|
mySSH.command('cd /opt/oai-cn5g-fed-v1.4/docker-compose', '\$', 5)
|
||||||
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
|
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
|
||||||
mySSH.command('docker volume prune --force || true', '\$', 60)
|
mySSH.command('docker volume prune --force || true', '\$', 60)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|||||||
+3
-1
@@ -921,7 +921,9 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
elif action == 'Build_Proxy':
|
elif action == 'Build_Proxy':
|
||||||
CONTAINERS.BuildProxy(HTML)
|
CONTAINERS.BuildProxy(HTML)
|
||||||
elif action == 'Copy_Image_to_Test':
|
elif action == 'Copy_Image_to_Test':
|
||||||
CONTAINERS.Copy_Image_to_Test_Server(HTML)
|
success = CONTAINERS.Copy_Image_to_Test_Server(HTML)
|
||||||
|
if not success:
|
||||||
|
RAN.prematureExit = True
|
||||||
elif action == 'Deploy_Object':
|
elif action == 'Deploy_Object':
|
||||||
CONTAINERS.DeployObject(HTML, EPC)
|
CONTAINERS.DeployObject(HTML, EPC)
|
||||||
if CONTAINERS.exitStatus==1:
|
if CONTAINERS.exitStatus==1:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ version: '3.8'
|
|||||||
services:
|
services:
|
||||||
oai-nrf:
|
oai-nrf:
|
||||||
container_name: "l2sim-oai-nrf"
|
container_name: "l2sim-oai-nrf"
|
||||||
image: oai-nrf:latest
|
image: oai-nrf:august-dev
|
||||||
environment:
|
environment:
|
||||||
- NRF_INTERFACE_NAME_FOR_SBI=eth0
|
- NRF_INTERFACE_NAME_FOR_SBI=eth0
|
||||||
- NRF_INTERFACE_PORT_FOR_SBI=80
|
- NRF_INTERFACE_PORT_FOR_SBI=80
|
||||||
@@ -42,7 +42,7 @@ services:
|
|||||||
ipv4_address: 192.168.71.131
|
ipv4_address: 192.168.71.131
|
||||||
oai-amf:
|
oai-amf:
|
||||||
container_name: "l2sim-oai-amf"
|
container_name: "l2sim-oai-amf"
|
||||||
image: oai-amf:latest
|
image: oai-amf:august-dev
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/paris
|
- TZ=Europe/paris
|
||||||
- INSTANCE=0
|
- INSTANCE=0
|
||||||
@@ -110,7 +110,7 @@ services:
|
|||||||
ipv4_address: 192.168.71.132
|
ipv4_address: 192.168.71.132
|
||||||
oai-smf:
|
oai-smf:
|
||||||
container_name: "l2sim-oai-smf"
|
container_name: "l2sim-oai-smf"
|
||||||
image: oai-smf:latest
|
image: oai-smf:august-dev
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
- INSTANCE=0
|
- INSTANCE=0
|
||||||
@@ -156,7 +156,7 @@ services:
|
|||||||
ipv4_address: 192.168.71.133
|
ipv4_address: 192.168.71.133
|
||||||
oai-spgwu:
|
oai-spgwu:
|
||||||
container_name: "l2sim-oai-spgwu"
|
container_name: "l2sim-oai-spgwu"
|
||||||
image: oai-spgwu-tiny:latest
|
image: oai-spgwu-tiny:august-dev
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
- PID_DIRECTORY=/var/run
|
- PID_DIRECTORY=/var/run
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ version: '3.8'
|
|||||||
services:
|
services:
|
||||||
oai-nrf:
|
oai-nrf:
|
||||||
container_name: "rfsim5g-oai-nrf"
|
container_name: "rfsim5g-oai-nrf"
|
||||||
image: oai-nrf:latest
|
image: oai-nrf:august-dev
|
||||||
environment:
|
environment:
|
||||||
- NRF_INTERFACE_NAME_FOR_SBI=eth0
|
- NRF_INTERFACE_NAME_FOR_SBI=eth0
|
||||||
- NRF_INTERFACE_PORT_FOR_SBI=80
|
- NRF_INTERFACE_PORT_FOR_SBI=80
|
||||||
@@ -42,7 +42,7 @@ services:
|
|||||||
ipv4_address: 192.168.71.131
|
ipv4_address: 192.168.71.131
|
||||||
oai-amf:
|
oai-amf:
|
||||||
container_name: "rfsim5g-oai-amf"
|
container_name: "rfsim5g-oai-amf"
|
||||||
image: oai-amf:latest
|
image: oai-amf:august-dev
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/paris
|
- TZ=Europe/paris
|
||||||
- INSTANCE=0
|
- INSTANCE=0
|
||||||
@@ -110,7 +110,7 @@ services:
|
|||||||
ipv4_address: 192.168.71.132
|
ipv4_address: 192.168.71.132
|
||||||
oai-smf:
|
oai-smf:
|
||||||
container_name: "rfsim5g-oai-smf"
|
container_name: "rfsim5g-oai-smf"
|
||||||
image: oai-smf:latest
|
image: oai-smf:august-dev
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
- INSTANCE=0
|
- INSTANCE=0
|
||||||
@@ -156,7 +156,7 @@ services:
|
|||||||
ipv4_address: 192.168.71.133
|
ipv4_address: 192.168.71.133
|
||||||
oai-spgwu:
|
oai-spgwu:
|
||||||
container_name: "rfsim5g-oai-spgwu"
|
container_name: "rfsim5g-oai-spgwu"
|
||||||
image: oai-spgwu-tiny:latest
|
image: oai-spgwu-tiny:august-dev
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
- PID_DIRECTORY=/var/run
|
- PID_DIRECTORY=/var/run
|
||||||
|
|||||||
@@ -237,8 +237,9 @@ compilations() {
|
|||||||
echo_error "$2 compilation failed"
|
echo_error "$2 compilation failed"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [ -s $3 ] ; then
|
if [ -s "$3" ] ; then
|
||||||
cp $3 $4
|
rm -f "$4"
|
||||||
|
ln -s "$PWD/$3" "$4"
|
||||||
echo_success "$2 compiled"
|
echo_success "$2 compiled"
|
||||||
check_warnings "$dlog/$2.$REL.txt"
|
check_warnings "$dlog/$2.$REL.txt"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ RUN yum update -y && \
|
|||||||
tzdata \
|
tzdata \
|
||||||
procps-ng \
|
procps-ng \
|
||||||
atlas \
|
atlas \
|
||||||
|
gdb \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
net-tools \
|
net-tools \
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ RUN apt-get update && \
|
|||||||
iputils-ping \
|
iputils-ping \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
iperf \
|
iperf \
|
||||||
|
gdb \
|
||||||
python \
|
python \
|
||||||
python3 \
|
python3 \
|
||||||
python3-six \
|
python3-six \
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ RUN yum repolist --disablerepo=* && \
|
|||||||
lksctp-tools \
|
lksctp-tools \
|
||||||
nettle \
|
nettle \
|
||||||
tzdata \
|
tzdata \
|
||||||
|
gdb \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
net-tools \
|
net-tools \
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ RUN apt-get update && \
|
|||||||
net-tools \
|
net-tools \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
iputils-ping \
|
iputils-ping \
|
||||||
|
gdb \
|
||||||
python \
|
python \
|
||||||
python3 \
|
python3 \
|
||||||
python3-six \
|
python3-six \
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ RUN yum update -y && \
|
|||||||
tzdata \
|
tzdata \
|
||||||
procps-ng \
|
procps-ng \
|
||||||
atlas \
|
atlas \
|
||||||
|
gdb \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
net-tools \
|
net-tools \
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ RUN apt-get update && \
|
|||||||
libatlas3-base \
|
libatlas3-base \
|
||||||
libconfig9 \
|
libconfig9 \
|
||||||
net-tools \
|
net-tools \
|
||||||
|
gdb \
|
||||||
python \
|
python \
|
||||||
python3 \
|
python3 \
|
||||||
python3-six \
|
python3-six \
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ RUN yum update -y && \
|
|||||||
nettle \
|
nettle \
|
||||||
tzdata \
|
tzdata \
|
||||||
atlas \
|
atlas \
|
||||||
|
gdb \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
iproute \
|
iproute \
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ RUN yum update -y && \
|
|||||||
iputils \
|
iputils \
|
||||||
iproute \
|
iproute \
|
||||||
atlas \
|
atlas \
|
||||||
|
gdb \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
libXpm \
|
libXpm \
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ RUN apt-get update && \
|
|||||||
libconfig9 \
|
libconfig9 \
|
||||||
openssl \
|
openssl \
|
||||||
net-tools \
|
net-tools \
|
||||||
|
gdb \
|
||||||
python \
|
python \
|
||||||
python3 \
|
python3 \
|
||||||
python3-six \
|
python3-six \
|
||||||
|
|||||||
@@ -51,9 +51,15 @@ for c in ${CONFIG_FILES}; do
|
|||||||
|
|
||||||
# render template and inline replace config file
|
# render template and inline replace config file
|
||||||
sed -i "${EXPRESSIONS}" ${c}
|
sed -i "${EXPRESSIONS}" ${c}
|
||||||
|
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Configuration file: ${c}"
|
||||||
|
cat ${c}
|
||||||
done
|
done
|
||||||
|
|
||||||
# Load the USRP binaries
|
# Load the USRP binaries
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Load USRP binaries"
|
||||||
if [[ -v USE_B2XX ]]; then
|
if [[ -v USE_B2XX ]]; then
|
||||||
$PREFIX/bin/uhd_images_downloader.py -t b2xx
|
$PREFIX/bin/uhd_images_downloader.py -t b2xx
|
||||||
elif [[ -v USE_X3XX ]]; then
|
elif [[ -v USE_X3XX ]]; then
|
||||||
@@ -62,6 +68,9 @@ elif [[ -v USE_N3XX ]]; then
|
|||||||
$PREFIX/bin/uhd_images_downloader.py -t n3xx
|
$PREFIX/bin/uhd_images_downloader.py -t n3xx
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# enable printing of stack traces on assert
|
||||||
|
export gdbStacks=1
|
||||||
|
|
||||||
echo "=================================="
|
echo "=================================="
|
||||||
echo "== Starting eNB soft modem"
|
echo "== Starting eNB soft modem"
|
||||||
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
||||||
|
|||||||
@@ -51,9 +51,15 @@ for c in ${CONFIG_FILES}; do
|
|||||||
|
|
||||||
# render template and inline replace config file
|
# render template and inline replace config file
|
||||||
sed -i "${EXPRESSIONS}" ${c}
|
sed -i "${EXPRESSIONS}" ${c}
|
||||||
|
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Configuration file: ${c}"
|
||||||
|
cat ${c}
|
||||||
done
|
done
|
||||||
|
|
||||||
# Load the USRP binaries
|
# Load the USRP binaries
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Load USRP binaries"
|
||||||
if [[ -v USE_B2XX ]]; then
|
if [[ -v USE_B2XX ]]; then
|
||||||
$PREFIX/bin/uhd_images_downloader.py -t b2xx
|
$PREFIX/bin/uhd_images_downloader.py -t b2xx
|
||||||
elif [[ -v USE_X3XX ]]; then
|
elif [[ -v USE_X3XX ]]; then
|
||||||
@@ -62,6 +68,9 @@ elif [[ -v USE_N3XX ]]; then
|
|||||||
$PREFIX/bin/uhd_images_downloader.py -t n3xx
|
$PREFIX/bin/uhd_images_downloader.py -t n3xx
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# enable printing of stack traces on assert
|
||||||
|
export gdbStacks=1
|
||||||
|
|
||||||
echo "=================================="
|
echo "=================================="
|
||||||
echo "== Starting gNB soft modem"
|
echo "== Starting gNB soft modem"
|
||||||
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
||||||
|
|||||||
@@ -31,9 +31,15 @@ for c in ${CONFIG_FILES}; do
|
|||||||
|
|
||||||
# render template and inline replace config file
|
# render template and inline replace config file
|
||||||
sed -i "${EXPRESSIONS}" ${c}
|
sed -i "${EXPRESSIONS}" ${c}
|
||||||
|
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Configuration file: ${c}"
|
||||||
|
cat ${c}
|
||||||
done
|
done
|
||||||
|
|
||||||
# Load the USRP binaries
|
# Load the USRP binaries
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Load USRP binaries"
|
||||||
if [[ -v USE_B2XX ]]; then
|
if [[ -v USE_B2XX ]]; then
|
||||||
$PREFIX/bin/uhd_images_downloader.py -t b2xx
|
$PREFIX/bin/uhd_images_downloader.py -t b2xx
|
||||||
elif [[ -v USE_X3XX ]]; then
|
elif [[ -v USE_X3XX ]]; then
|
||||||
@@ -42,6 +48,9 @@ elif [[ -v USE_N3XX ]]; then
|
|||||||
$PREFIX/bin/uhd_images_downloader.py -t n3xx
|
$PREFIX/bin/uhd_images_downloader.py -t n3xx
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# enable printing of stack traces on assert
|
||||||
|
export gdbStacks=1
|
||||||
|
|
||||||
echo "=================================="
|
echo "=================================="
|
||||||
echo "== Starting eNB soft modem"
|
echo "== Starting eNB soft modem"
|
||||||
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ for c in ${CONFIG_FILES}; do
|
|||||||
|
|
||||||
# render template and inline replace config file
|
# render template and inline replace config file
|
||||||
sed -i "${EXPRESSIONS}" ${c}
|
sed -i "${EXPRESSIONS}" ${c}
|
||||||
|
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Configuration file: ${c}"
|
||||||
|
cat ${c}
|
||||||
done
|
done
|
||||||
|
|
||||||
#now generate USIM files
|
#now generate USIM files
|
||||||
@@ -38,6 +42,8 @@ cd $PREFIX
|
|||||||
$PREFIX/bin/conf2uedata -c $PREFIX/etc/ue_usim.conf -o $PREFIX
|
$PREFIX/bin/conf2uedata -c $PREFIX/etc/ue_usim.conf -o $PREFIX
|
||||||
|
|
||||||
# Load the USRP binaries
|
# Load the USRP binaries
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Load USRP binaries"
|
||||||
if [[ -v USE_B2XX ]]; then
|
if [[ -v USE_B2XX ]]; then
|
||||||
$PREFIX/bin/uhd_images_downloader.py -t b2xx
|
$PREFIX/bin/uhd_images_downloader.py -t b2xx
|
||||||
elif [[ -v USE_X3XX ]]; then
|
elif [[ -v USE_X3XX ]]; then
|
||||||
@@ -57,6 +63,9 @@ if [[ -v USE_NFAPI ]]; then
|
|||||||
new_args+=("$PREFIX/etc/ue.conf")
|
new_args+=("$PREFIX/etc/ue.conf")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# enable printing of stack traces on assert
|
||||||
|
export gdbStacks=1
|
||||||
|
|
||||||
echo "=================================="
|
echo "=================================="
|
||||||
echo "== Starting LTE UE soft modem"
|
echo "== Starting LTE UE soft modem"
|
||||||
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
||||||
|
|||||||
@@ -40,9 +40,15 @@ for c in ${CONFIG_FILES}; do
|
|||||||
|
|
||||||
# render template and inline replace config file
|
# render template and inline replace config file
|
||||||
sed -i "${EXPRESSIONS}" ${c}
|
sed -i "${EXPRESSIONS}" ${c}
|
||||||
|
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Configuration file: ${c}"
|
||||||
|
cat ${c}
|
||||||
done
|
done
|
||||||
|
|
||||||
# Load the USRP binaries
|
# Load the USRP binaries
|
||||||
|
echo "=================================="
|
||||||
|
echo "== Load USRP binaries"
|
||||||
if [[ -v USE_B2XX ]]; then
|
if [[ -v USE_B2XX ]]; then
|
||||||
$PREFIX/bin/uhd_images_downloader.py -t b2xx
|
$PREFIX/bin/uhd_images_downloader.py -t b2xx
|
||||||
elif [[ -v USE_X3XX ]]; then
|
elif [[ -v USE_X3XX ]]; then
|
||||||
@@ -58,6 +64,9 @@ while [[ $# -gt 0 ]]; do
|
|||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# enable printing of stack traces on assert
|
||||||
|
export gdbStacks=1
|
||||||
|
|
||||||
echo "=================================="
|
echo "=================================="
|
||||||
echo "== Starting NR UE soft modem"
|
echo "== Starting NR UE soft modem"
|
||||||
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
|
||||||
|
|||||||
@@ -1311,30 +1311,30 @@ typedef struct {
|
|||||||
} nfapi_v4_srs_parameters_t;
|
} nfapi_v4_srs_parameters_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t rnti; // UE RNTI, Value: 1->65535
|
uint16_t rnti; // UE RNTI, Value: 1->65535
|
||||||
uint32_t handle; // An opaque handling returned in the SRS.indication
|
uint32_t handle; // An opaque handling returned in the SRS.indication
|
||||||
uint16_t bwp_size; // Bandwidth part size [3GPP TS 38.213, sec 12]. Number of contiguous PRBs allocated to the BWP, Value: 1->275
|
uint16_t bwp_size; // Bandwidth part size [3GPP TS 38.213, sec 12]. Number of contiguous PRBs allocated to the BWP, Value: 1->275
|
||||||
uint16_t bwp_start; // Bandwidth part start RB index from reference CRB [3GPP TS 38.213, sec 12], Value: 0->274
|
uint16_t bwp_start; // Bandwidth part start RB index from reference CRB [3GPP TS 38.213, sec 12], Value: 0->274
|
||||||
uint8_t subcarrier_spacing; // subcarrierSpacing [3GPP TS 38.211, sec 4.2], Value:0->4
|
uint8_t subcarrier_spacing; // subcarrierSpacing [3GPP TS 38.211, sec 4.2], Value:0->4
|
||||||
uint8_t cyclic_prefix; // Cyclic prefix type [3GPP TS 38.211, sec 4.2], 0: Normal; 1: Extended
|
uint8_t cyclic_prefix; // Cyclic prefix type [3GPP TS 38.211, sec 4.2], 0: Normal; 1: Extended
|
||||||
uint8_t num_ant_ports; // Number of antenna ports N_SRS_ap [3GPP TS 38.211, Sec 6.4.1.4.1], Value: 0 = 1 port, 1 = 2 ports, 2 = 4 ports
|
uint8_t num_ant_ports; // Number of antenna ports N_SRS_ap [3GPP TS 38.211, Sec 6.4.1.4.1], Value: 0 = 1 port, 1 = 2 ports, 2 = 4 ports
|
||||||
uint8_t num_symbols; // Number of symbols N_SRS_symb [3GPP TS 38.211, Sec 6.4.1.4.1], Value: 0 = 1 symbol, 1 = 2 symbols, 2 = 4 symbols
|
uint8_t num_symbols; // Number of symbols N_SRS_symb [3GPP TS 38.211, Sec 6.4.1.4.1], Value: 0 = 1 symbol, 1 = 2 symbols, 2 = 4 symbols
|
||||||
uint8_t num_repetitions; // Repetition factor R [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 = 1, 1 = 2, 2 = 4
|
uint8_t num_repetitions; // Repetition factor R [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 = 1, 1 = 2, 2 = 4
|
||||||
uint8_t time_start_position; // Starting position in the time domain l_0 [3GPP TS 38.211, Sec 6.4.1.4.1], Note: the MAC undertakes the translation from startPosition to l_0, Value: 0 --> 13
|
uint8_t time_start_position; // Starting position in the time domain l_0 [3GPP TS 38.211, Sec 6.4.1.4.1], Note: the MAC undertakes the translation from startPosition to l_0, Value: 0 --> 13
|
||||||
uint8_t config_index; // SRS bandwidth config index C_SRS [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 63
|
uint8_t config_index; // SRS bandwidth config index C_SRS [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 63
|
||||||
uint16_t sequence_id; // SRS sequence ID n_SRS_ID [3GPP TS 38.211, Sec 6.4.1.4.2], Value: 0 --> 1023
|
uint16_t sequence_id; // SRS sequence ID n_SRS_ID [3GPP TS 38.211, Sec 6.4.1.4.2], Value: 0 --> 1023
|
||||||
uint8_t bandwidth_index; // SRS bandwidth index B_SRS [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 3
|
uint8_t bandwidth_index; // SRS bandwidth index B_SRS [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 3
|
||||||
uint8_t comb_size; // Transmission comb size K_TC [3GPP TS 38.211, Sec 6.4.1.4.2], Value: 0 = comb size 2, 1 = comb size 4, 2 = comb size 8 (Rel16)
|
uint8_t comb_size; // Transmission comb size K_TC [3GPP TS 38.211, Sec 6.4.1.4.2], Value: 0 = comb size 2, 1 = comb size 4, 2 = comb size 8 (Rel16)
|
||||||
uint8_t comb_offset; // Transmission comb offset K'_TC[3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 1 (combSize = 0), Value: 0 --> 3 (combSize = 1), Value: 0 --> 7 (combSize = 2)
|
uint8_t comb_offset; // Transmission comb offset K'_TC[3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 1 (combSize = 0), Value: 0 --> 3 (combSize = 1), Value: 0 --> 7 (combSize = 2)
|
||||||
uint8_t cyclic_shift; // Cyclic shift n_CS_SRS [3GPP TS 38.211, Sec 6.4.1.4.2], Value: 0 --> 7 (combSize = 0), Value: 0 --> 11 (combSize = 1), Value: 0 --> 5 (combSize = 2)
|
uint8_t cyclic_shift; // Cyclic shift n_CS_SRS [3GPP TS 38.211, Sec 6.4.1.4.2], Value: 0 --> 7 (combSize = 0), Value: 0 --> 11 (combSize = 1), Value: 0 --> 5 (combSize = 2)
|
||||||
uint8_t frequency_position; // Frequency domain position n_RRC [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 67
|
uint8_t frequency_position; // Frequency domain position n_RRC [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 67
|
||||||
uint16_t frequency_shift; // Frequency domain shift n_shift [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 268
|
uint16_t frequency_shift; // Frequency domain shift n_shift [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 268
|
||||||
uint8_t frequency_hopping; // Frequency hopping b_hop [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 3
|
uint8_t frequency_hopping; // Frequency hopping b_hop [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0 --> 3
|
||||||
uint8_t group_or_sequence_hopping; // Group or sequence hopping configuration (RRC parameter groupOrSequenceHopping in SRSResource IE), Value: 0 = No hopping, 1 = Group hopping groupOrSequenceHopping, 2 = Sequence hopping
|
uint8_t group_or_sequence_hopping; // Group or sequence hopping configuration (RRC parameter groupOrSequenceHopping in SRSResource IE), Value: 0 = No hopping, 1 = Group hopping groupOrSequenceHopping, 2 = Sequence hopping
|
||||||
uint8_t resource_type; // Type of SRS resource allocation [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0: aperiodic, 1: semi-persistent, 2: periodic
|
uint8_t resource_type; // Type of SRS resource allocation [3GPP TS 38.211, Sec 6.4.1.4.3], Value: 0: aperiodic, 1: semi-persistent, 2: periodic
|
||||||
uint16_t t_srs; // SRS-Periodicity in slots [3GPP TS 38.211, Sec 6.4.1.4.4], Value: 1,2,3,4,5,8,10,16,20,32,40,64,80,160,320,640,1280,2560
|
uint16_t t_srs; // SRS-Periodicity in slots [3GPP TS 38.211, Sec 6.4.1.4.4], Value: 1,2,3,4,5,8,10,16,20,32,40,64,80,160,320,640,1280,2560
|
||||||
uint16_t t_offset; // Slot offset value [3GPP TS 38.211, Sec 6.4.1.4.3], Value:0->2559
|
uint16_t t_offset; // Slot offset value [3GPP TS 38.211, Sec 6.4.1.4.3], Value:0->2559
|
||||||
nfapi_nr_ul_beamforming_t beamforming;
|
nfapi_nr_ul_beamforming_t beamforming;
|
||||||
nfapi_v4_srs_parameters_t srs_parameters_v4;
|
nfapi_v4_srs_parameters_t srs_parameters_v4;
|
||||||
} nfapi_nr_srs_pdu_t;
|
} nfapi_nr_srs_pdu_t;
|
||||||
|
|
||||||
|
|||||||
@@ -998,7 +998,12 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
|||||||
int16_t ls_estimated[2];
|
int16_t ls_estimated[2];
|
||||||
|
|
||||||
uint8_t mem_offset = ((16 - ((long)&srs_estimated_channel_freq[0][0][subcarrier_offset + nr_srs_info->k_0_p[0][0]])) & 0xF) >> 2; // >> 2 <=> /sizeof(int32_t)
|
uint8_t mem_offset = ((16 - ((long)&srs_estimated_channel_freq[0][0][subcarrier_offset + nr_srs_info->k_0_p[0][0]])) & 0xF) >> 2; // >> 2 <=> /sizeof(int32_t)
|
||||||
int32_t srs_est[frame_parms->ofdm_symbol_size*(1<<srs_pdu->num_symbols) + mem_offset] __attribute__ ((aligned(32)));
|
|
||||||
|
// filt16_end is {4096,8192,8192,8192,12288,16384,16384,16384,0,0,0,0,0,0,0,0}
|
||||||
|
// The End of OFDM symbol corresponds to the position of last 16384 in the filter
|
||||||
|
// The multadd_real_vector_complex_scalar applies the remaining 8 zeros of filter, therefore, to avoid a buffer overflow,
|
||||||
|
// we added 8 in the array size
|
||||||
|
int32_t srs_est[frame_parms->ofdm_symbol_size*(1<<srs_pdu->num_symbols) + mem_offset + 8] __attribute__ ((aligned(32)));
|
||||||
|
|
||||||
for (int ant = 0; ant < frame_parms->nb_antennas_rx; ant++) {
|
for (int ant = 0; ant < frame_parms->nb_antennas_rx; ant++) {
|
||||||
|
|
||||||
@@ -1242,8 +1247,8 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
} // for (int rb = 0; rb < m_SRS_b; rb++)
|
} // for (int rb = 0; rb < m_SRS_b; rb++)
|
||||||
|
|
||||||
uint32_t noise_power = calc_power(noise_real,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS)
|
uint32_t noise_power = max(calc_power(noise_real,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS)
|
||||||
+ calc_power(noise_imag,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS);
|
+ calc_power(noise_imag,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS), 1);
|
||||||
|
|
||||||
*snr = dB_fixed((int32_t)((signal_power<<factor_bits)/(noise_power))) - factor_dB;
|
*snr = dB_fixed((int32_t)((signal_power<<factor_bits)/(noise_power))) - factor_dB;
|
||||||
|
|
||||||
|
|||||||
@@ -85,38 +85,30 @@ void multadd_real_vector_complex_scalar(int16_t *x,
|
|||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
// do 8 multiplications at a time
|
// do 8 multiplications at a time
|
||||||
simd_q15_t alpha_r_128,alpha_i_128,yr,yi,*x_128=(simd_q15_t*)x,*y_128=(simd_q15_t*)y;
|
simd_q15_t alpha_r_128, alpha_i_128, yr, yi, *x_128 = (simd_q15_t *)x, *y_128 = (simd_q15_t *)y;
|
||||||
int j;
|
|
||||||
|
|
||||||
// printf("alpha = %d,%d\n",alpha[0],alpha[1]);
|
// printf("alpha = %d,%d\n",alpha[0],alpha[1]);
|
||||||
alpha_r_128 = set1_int16(alpha[0]);
|
alpha_r_128 = set1_int16(alpha[0]);
|
||||||
alpha_i_128 = set1_int16(alpha[1]);
|
alpha_i_128 = set1_int16(alpha[1]);
|
||||||
|
|
||||||
j=0;
|
|
||||||
|
|
||||||
for (i=0; i<N>>3; i++) {
|
for (i=0; i<N>>3; i++) {
|
||||||
|
|
||||||
yr = mulhi_s1_int16(alpha_r_128,x_128[i]);
|
yr = mulhi_s1_int16(alpha_r_128,x_128[i]);
|
||||||
yi = mulhi_s1_int16(alpha_i_128,x_128[i]);
|
yi = mulhi_s1_int16(alpha_i_128,x_128[i]);
|
||||||
#if defined(__x86_64__) || defined(__i386__)
|
#if defined(__x86_64__) || defined(__i386__)
|
||||||
y_128[j] = _mm_adds_epi16(y_128[j],_mm_unpacklo_epi16(yr,yi));
|
const simd_q15_t tmp = _mm_loadu_si128(y_128);
|
||||||
j++;
|
_mm_storeu_si128(y_128++, _mm_adds_epi16(tmp, _mm_unpacklo_epi16(yr, yi)));
|
||||||
y_128[j] = _mm_adds_epi16(y_128[j],_mm_unpackhi_epi16(yr,yi));
|
const simd_q15_t tmp2 = _mm_loadu_si128(y_128);
|
||||||
j++;
|
_mm_storeu_si128(y_128++, _mm_adds_epi16(tmp2, _mm_unpackhi_epi16(yr, yi)));
|
||||||
#elif defined(__arm__)
|
#elif defined(__arm__)
|
||||||
int16x8x2_t yint;
|
int16x8x2_t yint;
|
||||||
yint = vzipq_s16(yr,yi);
|
yint = vzipq_s16(yr,yi);
|
||||||
y_128[j] = adds_int16(y_128[j],yint.val[0]);
|
*y_128 = adds_int16(*y_128, yint.val[0]);
|
||||||
j++;
|
j++;
|
||||||
y_128[j] = adds_int16(y_128[j],yint.val[1]);
|
*y_128 = adds_int16(*y_128, yint.val[1]);
|
||||||
|
|
||||||
j++;
|
j++;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
_mm_empty();
|
|
||||||
_m_empty();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void multadd_real_four_symbols_vector_complex_scalar(int16_t *x,
|
void multadd_real_four_symbols_vector_complex_scalar(int16_t *x,
|
||||||
|
|||||||
@@ -1260,8 +1260,8 @@ void nr_configure_pucch(nfapi_nr_pucch_pdu_t* pucch_pdu,
|
|||||||
pucch_pdu->format_type = default_pucch_fmt[rsetindex];
|
pucch_pdu->format_type = default_pucch_fmt[rsetindex];
|
||||||
pucch_pdu->initial_cyclic_shift = r_pucch%default_pucch_csset[rsetindex];
|
pucch_pdu->initial_cyclic_shift = r_pucch%default_pucch_csset[rsetindex];
|
||||||
if (rsetindex==3||rsetindex==7||rsetindex==11) pucch_pdu->initial_cyclic_shift*=6;
|
if (rsetindex==3||rsetindex==7||rsetindex==11) pucch_pdu->initial_cyclic_shift*=6;
|
||||||
else if (rsetindex==1||rsetindex==2) pucch_pdu->initial_cyclic_shift*=3;
|
else if (rsetindex==1||rsetindex==2) pucch_pdu->initial_cyclic_shift*=4;
|
||||||
else pucch_pdu->initial_cyclic_shift*=4;
|
else pucch_pdu->initial_cyclic_shift*=3;
|
||||||
pucch_pdu->nr_of_symbols = nr_of_symb;
|
pucch_pdu->nr_of_symbols = nr_of_symb;
|
||||||
pucch_pdu->start_symbol_index = start_symb;
|
pucch_pdu->start_symbol_index = start_symb;
|
||||||
if (pucch_pdu->format_type == 1) pucch_pdu->time_domain_occ_idx = 0; // check this!!
|
if (pucch_pdu->format_type == 1) pucch_pdu->time_domain_occ_idx = 0; // check this!!
|
||||||
|
|||||||
@@ -0,0 +1,321 @@
|
|||||||
|
Active_gNBs = ( "gNB-OAI");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
gNBs = (
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_ID = 0xe00;
|
||||||
|
gNB_name = "gNB-OAI";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = (
|
||||||
|
{
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 99;
|
||||||
|
mnc_length = 2;
|
||||||
|
snssaiList = ({
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x1; // 0 false, else true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
nr_cellid = 12345678L;
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
pdsch_AntennaPorts_XP = 2;
|
||||||
|
pusch_AntennaPorts = 2;
|
||||||
|
do_CSIRS = 1;
|
||||||
|
do_SRS = 0;
|
||||||
|
ul_prbblacklist = "135,136,137,138"
|
||||||
|
|
||||||
|
pdcch_ConfigSIB1 = ({
|
||||||
|
controlResourceSetZero = 12;
|
||||||
|
searchSpaceZero = 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
# spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
# frequencyInfoDL
|
||||||
|
# this is 3900.60 MHz + (134 PRBs + 4 SCs)@30kHz SCS (GSCN: 8158)
|
||||||
|
absoluteFrequencySSB = 663264;
|
||||||
|
dl_frequencyBand = 77;
|
||||||
|
# this is 3900.60 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 660040;
|
||||||
|
|
||||||
|
# scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 273;
|
||||||
|
|
||||||
|
# initialDownlinkBWP
|
||||||
|
# genericParameters
|
||||||
|
# this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
|
||||||
|
initialDLBWPlocationAndBandwidth = 31624;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
|
||||||
|
# pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 12;
|
||||||
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
|
||||||
|
# uplinkConfigCommon
|
||||||
|
# frequencyInfoUL
|
||||||
|
ul_frequencyBand = 77;
|
||||||
|
# scs-SpecificCarrierList
|
||||||
|
ul_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
ul_subcarrierSpacing = 1;
|
||||||
|
ul_carrierBandwidth = 273;
|
||||||
|
pMax = 20;
|
||||||
|
|
||||||
|
# initialUplinkBWP
|
||||||
|
# genericParameters
|
||||||
|
initialULBWPlocationAndBandwidth = 31624;
|
||||||
|
# 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 = 12;
|
||||||
|
preambleReceivedTargetPower = -90;
|
||||||
|
# preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
# powerRampingStep
|
||||||
|
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||||
|
powerRampingStep = 1;
|
||||||
|
# ra_ReponseWindow
|
||||||
|
# 1,2,4,8,10,20,40,80
|
||||||
|
ra_ResponseWindow = 4;
|
||||||
|
# ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
|
# 1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||||
|
# oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
|
# ra_ContentionResolutionTimer
|
||||||
|
# (0..7) 8,16,24,32,40,48,56,64
|
||||||
|
ra_ContentionResolutionTimer = 7;
|
||||||
|
rsrp_ThresholdSSB = 19;
|
||||||
|
# prach-RootSequenceIndex_PR
|
||||||
|
# 1 = 839, 2 = 139
|
||||||
|
prach_RootSequenceIndex_PR = 2;
|
||||||
|
prach_RootSequenceIndex = 1;
|
||||||
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
|
msg1_SubcarrierSpacing = 1,
|
||||||
|
# restrictedSetConfig
|
||||||
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
|
restrictedSetConfig = 0,
|
||||||
|
msg3_DeltaPreamble = 1;
|
||||||
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
|
# pucch-ConfigCommon
|
||||||
|
# pucchGroupHopping
|
||||||
|
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||||
|
pucchGroupHopping = 0;
|
||||||
|
hoppingId = 40;
|
||||||
|
p0_nominal = -70;
|
||||||
|
|
||||||
|
# dmrs_TypeA_position
|
||||||
|
# 0 = pos2, 1 = pos3
|
||||||
|
dmrs_TypeA_Position = 0;
|
||||||
|
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
|
||||||
|
# ssb_PositionsInBurs_BitmapPR
|
||||||
|
# 1=short, 2=medium, 3=long
|
||||||
|
ssb_PositionsInBurst_PR = 2;
|
||||||
|
ssb_PositionsInBurst_Bitmap = 1;
|
||||||
|
# ssb_periodicityServingCell
|
||||||
|
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||||
|
ssb_periodicityServingCell = 2;
|
||||||
|
|
||||||
|
#tdd-UL-DL-ConfigurationCommon
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
referenceSubcarrierSpacing = 1;
|
||||||
|
# pattern1
|
||||||
|
# dl_UL_TransmissionPeriodicity
|
||||||
|
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||||
|
dl_UL_TransmissionPeriodicity = 6;
|
||||||
|
nrofDownlinkSlots = 7;
|
||||||
|
nrofDownlinkSymbols = 6;
|
||||||
|
nrofUplinkSlots = 2;
|
||||||
|
nrofUplinkSymbols = 4;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = -25;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# Dedicated Serving Cell Configuration
|
||||||
|
servingCellConfigDedicated = (
|
||||||
|
{
|
||||||
|
# BWP-Downlink
|
||||||
|
# BWP 1 Configuration
|
||||||
|
dl_bwp-Id_1 = 1;
|
||||||
|
dl_bwp1_locationAndBandwidth = 1099; // RBstart=0, L=273 (100 MHz BW)
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_bwp1_subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
firstActiveDownlinkBWP-Id = 1; #BWP-Id
|
||||||
|
defaultDownlinkBWP-Id = 1; #BWP-Id
|
||||||
|
|
||||||
|
# bwp-InactivityTimer ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30,
|
||||||
|
# ms40,ms50, ms60, ms80,ms100, ms200,ms300, ms500,
|
||||||
|
# ms750, ms1280, ms1920, ms2560, spare10, spare9, spare8,
|
||||||
|
# spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
|
||||||
|
|
||||||
|
# UplinkConfig
|
||||||
|
# BWP-Uplink
|
||||||
|
# BWP 1 Configuration
|
||||||
|
ul_bwp-Id_1 = 1;
|
||||||
|
ul_bwp1_locationAndBandwidth = 1099; // RBstart=0, L=273 (100 MHz BW)
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
ul_bwp1_subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
firstActiveUplinkBWP-Id = 1; #BWP-Id
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// AMF parameters:
|
||||||
|
amf_ip_address = (
|
||||||
|
{
|
||||||
|
ipv4 = "192.168.70.132";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
|
||||||
|
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
pusch_TargetSNRx10 = 300;
|
||||||
|
pucch_TargetSNRx10 = 200;
|
||||||
|
pusch_FailureThres = 1000;
|
||||||
|
ulsch_max_frame_inactivity = 0;
|
||||||
|
ul_max_mcs = 28;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
prach_dtx_threshold = 120;
|
||||||
|
pucch0_dtx_threshold = 80;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 2;
|
||||||
|
nb_rx = 2;
|
||||||
|
att_tx = 0;
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [77];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 75;
|
||||||
|
eNB_instances = [0];
|
||||||
|
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||||
|
bf_weights = [0x00007fff, 0x0000];
|
||||||
|
#clock_src = "internal";
|
||||||
|
sdr_addrs = "mgmt_addr=192.168.10.2,addr=192.168.10.2,clock_source=internal,time_source=internal"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
rfsimulator :
|
||||||
|
{
|
||||||
|
serveraddr = "server";
|
||||||
|
serverport = "4043";
|
||||||
|
options = (); #("saviq"); or/and "chanmod"
|
||||||
|
modelname = "AWGN";
|
||||||
|
IQfile = "/tmp/rfsimulator.iqs";
|
||||||
|
};
|
||||||
|
|
||||||
|
security = {
|
||||||
|
# preferred ciphering algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nea0, nea1, nea2, nea3
|
||||||
|
ciphering_algorithms = ( "nea0" );
|
||||||
|
|
||||||
|
# preferred integrity algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nia0, nia1, nia2, nia3
|
||||||
|
integrity_algorithms = ( "nia2", "nia0" );
|
||||||
|
|
||||||
|
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||||
|
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||||
|
drb_ciphering = "yes";
|
||||||
|
drb_integrity = "no";
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
hw_log_level ="info";
|
||||||
|
phy_log_level ="info";
|
||||||
|
mac_log_level ="info";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
ngap_log_level ="debug";
|
||||||
|
f1ap_log_level ="debug";
|
||||||
|
};
|
||||||
@@ -28,7 +28,6 @@ gNBs =
|
|||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
min_rxtxtime = 2;
|
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 1;
|
do_SRS = 1;
|
||||||
|
|
||||||
@@ -283,8 +282,8 @@ RUs = (
|
|||||||
local_rf = "yes"
|
local_rf = "yes"
|
||||||
nb_tx = 1
|
nb_tx = 1
|
||||||
nb_rx = 1
|
nb_rx = 1
|
||||||
att_tx = 6;
|
att_tx = 12;
|
||||||
att_rx = 6;
|
att_rx = 12;
|
||||||
bands = [78];
|
bands = [78];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 114;
|
max_rxgain = 114;
|
||||||
|
|||||||
@@ -27,15 +27,14 @@ gNBs =
|
|||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
pdsch_AntennaPorts_XP = 1;
|
pdsch_AntennaPorts_XP = 2;
|
||||||
pusch_AntennaPorts = 2;
|
pusch_AntennaPorts = 2;
|
||||||
do_CSIRS = 0;
|
do_CSIRS = 1;
|
||||||
ul_prbblacklist = "79,80,81,82"
|
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
{
|
{
|
||||||
controlResourceSetZero = 12;
|
controlResourceSetZero = 12;
|
||||||
searchSpaceZero = 10;
|
searchSpaceZero = 0;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -67,7 +66,7 @@ gNBs =
|
|||||||
initialDLBWPsubcarrierSpacing = 1;
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
#pdcch-ConfigCommon
|
#pdcch-ConfigCommon
|
||||||
initialDLBWPcontrolResourceSetZero = 12;
|
initialDLBWPcontrolResourceSetZero = 12;
|
||||||
initialDLBWPsearchSpaceZero = 10;
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
|
||||||
#uplinkConfigCommon
|
#uplinkConfigCommon
|
||||||
#frequencyInfoUL
|
#frequencyInfoUL
|
||||||
@@ -203,9 +202,11 @@ MACRLCs = (
|
|||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_s_preference = "local_L1";
|
tr_s_preference = "local_L1";
|
||||||
tr_n_preference = "local_RRC";
|
tr_n_preference = "local_RRC";
|
||||||
pusch_TargetSNRx10 = 150;
|
pusch_TargetSNRx10 = 300;
|
||||||
pucch_TargetSNRx10 = 200;
|
pucch_TargetSNRx10 = 200;
|
||||||
|
pusch_FailureThres = 1000;
|
||||||
ulsch_max_frame_inactivity = 0;
|
ulsch_max_frame_inactivity = 0;
|
||||||
|
ul_max_mcs = 28;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,320 +0,0 @@
|
|||||||
Active_gNBs = ( "gNB-OAI");
|
|
||||||
# Asn1_verbosity, choice in: none, info, annoying
|
|
||||||
Asn1_verbosity = "none";
|
|
||||||
|
|
||||||
gNBs =
|
|
||||||
(
|
|
||||||
{
|
|
||||||
////////// Identification parameters:
|
|
||||||
gNB_ID = 0xe00;
|
|
||||||
gNB_name = "gNB-OAI";
|
|
||||||
|
|
||||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
|
||||||
tracking_area_code = 1;
|
|
||||||
plmn_list = ({
|
|
||||||
mcc = 208;
|
|
||||||
mnc = 99;
|
|
||||||
mnc_length = 2;
|
|
||||||
snssaiList = (
|
|
||||||
{
|
|
||||||
sst = 1;
|
|
||||||
sd = 0x1; // 0 false, else true
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
nr_cellid = 12345678L;
|
|
||||||
|
|
||||||
////////// Physical parameters:
|
|
||||||
|
|
||||||
pdsch_AntennaPorts_XP = 1;
|
|
||||||
pusch_AntennaPorts = 2;
|
|
||||||
do_CSIRS = 0;
|
|
||||||
ul_prbblacklist = "135,136,137,138"
|
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
|
||||||
{
|
|
||||||
controlResourceSetZero = 12;
|
|
||||||
searchSpaceZero = 10;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
|
||||||
{
|
|
||||||
#spCellConfigCommon
|
|
||||||
|
|
||||||
physCellId = 0;
|
|
||||||
|
|
||||||
# downlinkConfigCommon
|
|
||||||
#frequencyInfoDL
|
|
||||||
# this is 3300.24 + 134*12*30e3 = 3348.48 MHz (5G NR GSCN: 7741)
|
|
||||||
absoluteFrequencySSB = 623232;
|
|
||||||
dl_frequencyBand = 78;
|
|
||||||
# this is 3300.24 MHz
|
|
||||||
dl_absoluteFrequencyPointA = 620016;
|
|
||||||
#scs-SpecificCarrierList
|
|
||||||
dl_offstToCarrier = 0;
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
dl_subcarrierSpacing = 1;
|
|
||||||
dl_carrierBandwidth = 273;
|
|
||||||
#initialDownlinkBWP
|
|
||||||
#genericParameters
|
|
||||||
# this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
|
|
||||||
initialDLBWPlocationAndBandwidth = 31624;
|
|
||||||
#
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
initialDLBWPsubcarrierSpacing = 1;
|
|
||||||
#pdcch-ConfigCommon
|
|
||||||
initialDLBWPcontrolResourceSetZero = 12;
|
|
||||||
initialDLBWPsearchSpaceZero = 10;
|
|
||||||
|
|
||||||
#uplinkConfigCommon
|
|
||||||
#frequencyInfoUL
|
|
||||||
ul_frequencyBand = 78;
|
|
||||||
#scs-SpecificCarrierList
|
|
||||||
ul_offstToCarrier = 0;
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
ul_subcarrierSpacing = 1;
|
|
||||||
ul_carrierBandwidth = 273;
|
|
||||||
pMax = 20;
|
|
||||||
#initialUplinkBWP
|
|
||||||
#genericParameters
|
|
||||||
initialULBWPlocationAndBandwidth = 31624;
|
|
||||||
# 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 = 12;
|
|
||||||
preambleReceivedTargetPower = -90;
|
|
||||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
|
||||||
preambleTransMax = 6;
|
|
||||||
#powerRampingStep
|
|
||||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
|
||||||
powerRampingStep = 1;
|
|
||||||
#ra_ReponseWindow
|
|
||||||
#1,2,4,8,10,20,40,80
|
|
||||||
ra_ResponseWindow = 4;
|
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
|
||||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
|
||||||
#ra_ContentionResolutionTimer
|
|
||||||
#(0..7) 8,16,24,32,40,48,56,64
|
|
||||||
ra_ContentionResolutionTimer = 7;
|
|
||||||
rsrp_ThresholdSSB = 19;
|
|
||||||
#prach-RootSequenceIndex_PR
|
|
||||||
#1 = 839, 2 = 139
|
|
||||||
prach_RootSequenceIndex_PR = 2;
|
|
||||||
prach_RootSequenceIndex = 1;
|
|
||||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
|
||||||
#
|
|
||||||
msg1_SubcarrierSpacing = 1,
|
|
||||||
# restrictedSetConfig
|
|
||||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
|
||||||
restrictedSetConfig = 0,
|
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
|
||||||
p0_NominalWithGrant =-90;
|
|
||||||
|
|
||||||
# pucch-ConfigCommon setup :
|
|
||||||
# pucchGroupHopping
|
|
||||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
|
||||||
pucchGroupHopping = 0;
|
|
||||||
hoppingId = 40;
|
|
||||||
p0_nominal = -70;
|
|
||||||
# ssb_PositionsInBurs_BitmapPR
|
|
||||||
# 1=short, 2=medium, 3=long
|
|
||||||
ssb_PositionsInBurst_PR = 2;
|
|
||||||
ssb_PositionsInBurst_Bitmap = 1;
|
|
||||||
|
|
||||||
# ssb_periodicityServingCell
|
|
||||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
|
||||||
ssb_periodicityServingCell = 2;
|
|
||||||
|
|
||||||
# dmrs_TypeA_position
|
|
||||||
# 0 = pos2, 1 = pos3
|
|
||||||
dmrs_TypeA_Position = 0;
|
|
||||||
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
subcarrierSpacing = 1;
|
|
||||||
|
|
||||||
|
|
||||||
#tdd-UL-DL-ConfigurationCommon
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
referenceSubcarrierSpacing = 1;
|
|
||||||
# pattern1
|
|
||||||
# dl_UL_TransmissionPeriodicity
|
|
||||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
|
||||||
dl_UL_TransmissionPeriodicity = 6;
|
|
||||||
nrofDownlinkSlots = 7;
|
|
||||||
nrofDownlinkSymbols = 6;
|
|
||||||
nrofUplinkSlots = 2;
|
|
||||||
nrofUplinkSymbols = 4;
|
|
||||||
|
|
||||||
ssPBCH_BlockPower = -25;
|
|
||||||
}
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
# Dedicated Serving Cell Configuration
|
|
||||||
servingCellConfigDedicated = ({
|
|
||||||
# BWP-Downlink
|
|
||||||
# BWP 1 Configuration
|
|
||||||
dl_bwp-Id_1 = 1;
|
|
||||||
dl_bwp1_locationAndBandwidth = 1099; // RBstart=0, L=273 (100 MHz BW)
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
dl_bwp1_subcarrierSpacing = 1;
|
|
||||||
|
|
||||||
firstActiveDownlinkBWP-Id = 1; #BWP-Id
|
|
||||||
defaultDownlinkBWP-Id = 1; #BWP-Id
|
|
||||||
|
|
||||||
# bwp-InactivityTimer ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30,
|
|
||||||
# ms40,ms50, ms60, ms80,ms100, ms200,ms300, ms500,
|
|
||||||
# ms750, ms1280, ms1920, ms2560, spare10, spare9, spare8,
|
|
||||||
# spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
|
|
||||||
|
|
||||||
# UplinkConfig
|
|
||||||
# BWP-Uplink
|
|
||||||
# BWP 1 Configuration
|
|
||||||
ul_bwp-Id_1 = 1;
|
|
||||||
ul_bwp1_locationAndBandwidth = 1099; // RBstart=0, L=273 (100 MHz BW)
|
|
||||||
# subcarrierSpacing
|
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
|
||||||
ul_bwp1_subcarrierSpacing = 1;
|
|
||||||
|
|
||||||
firstActiveUplinkBWP-Id = 1; #BWP-Id
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ------- SCTP definitions
|
|
||||||
SCTP :
|
|
||||||
{
|
|
||||||
# Number of streams to use in input/output
|
|
||||||
SCTP_INSTREAMS = 2;
|
|
||||||
SCTP_OUTSTREAMS = 2;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
////////// AMF parameters:
|
|
||||||
amf_ip_address = ( { ipv4 = "192.168.70.132";
|
|
||||||
ipv6 = "192:168:30::17";
|
|
||||||
active = "yes";
|
|
||||||
preference = "ipv4";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
|
||||||
{
|
|
||||||
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
|
|
||||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
|
|
||||||
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
|
|
||||||
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
|
|
||||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
MACRLCs = (
|
|
||||||
{
|
|
||||||
num_cc = 1;
|
|
||||||
tr_s_preference = "local_L1";
|
|
||||||
tr_n_preference = "local_RRC";
|
|
||||||
pusch_TargetSNRx10 = 150;
|
|
||||||
pucch_TargetSNRx10 = 200;
|
|
||||||
pusch_FailureThres = 1000;
|
|
||||||
ulsch_max_frame_inactivity = 0;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
L1s = (
|
|
||||||
{
|
|
||||||
num_cc = 1;
|
|
||||||
tr_n_preference = "local_mac";
|
|
||||||
prach_dtx_threshold = 120;
|
|
||||||
pucch0_dtx_threshold = 80;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
RUs = (
|
|
||||||
{
|
|
||||||
local_rf = "yes"
|
|
||||||
nb_tx = 2;
|
|
||||||
nb_rx = 2;
|
|
||||||
att_tx = 0;
|
|
||||||
att_rx = 0;
|
|
||||||
bands = [78];
|
|
||||||
max_pdschReferenceSignalPower = -27;
|
|
||||||
max_rxgain = 75;
|
|
||||||
eNB_instances = [0];
|
|
||||||
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
|
||||||
bf_weights = [0x00007fff, 0x0000];
|
|
||||||
#clock_src = "internal";
|
|
||||||
sdr_addrs = "mgmt_addr=192.168.10.2,addr=192.168.10.2,clock_source=internal,time_source=internal"
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
THREAD_STRUCT = (
|
|
||||||
{
|
|
||||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
|
||||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
|
||||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
|
||||||
worker_config = "WORKER_ENABLE";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
rfsimulator :
|
|
||||||
{
|
|
||||||
serveraddr = "server";
|
|
||||||
serverport = "4043";
|
|
||||||
options = (); #("saviq"); or/and "chanmod"
|
|
||||||
modelname = "AWGN";
|
|
||||||
IQfile = "/tmp/rfsimulator.iqs";
|
|
||||||
};
|
|
||||||
|
|
||||||
security = {
|
|
||||||
# preferred ciphering algorithms
|
|
||||||
# the first one of the list that an UE supports in chosen
|
|
||||||
# valid values: nea0, nea1, nea2, nea3
|
|
||||||
ciphering_algorithms = ( "nea0" );
|
|
||||||
|
|
||||||
# preferred integrity algorithms
|
|
||||||
# the first one of the list that an UE supports in chosen
|
|
||||||
# valid values: nia0, nia1, nia2, nia3
|
|
||||||
integrity_algorithms = ( "nia2", "nia0" );
|
|
||||||
|
|
||||||
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
|
||||||
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
|
||||||
drb_ciphering = "yes";
|
|
||||||
drb_integrity = "no";
|
|
||||||
};
|
|
||||||
|
|
||||||
log_config :
|
|
||||||
{
|
|
||||||
global_log_level ="info";
|
|
||||||
hw_log_level ="info";
|
|
||||||
phy_log_level ="info";
|
|
||||||
mac_log_level ="info";
|
|
||||||
rlc_log_level ="info";
|
|
||||||
pdcp_log_level ="info";
|
|
||||||
rrc_log_level ="info";
|
|
||||||
ngap_log_level ="debug";
|
|
||||||
f1ap_log_level ="debug";
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user