Merge branch 'integration_2025_w44' into 'develop'
Integration `2025.w44` * !3721 improvements in formatting and LOGs in DMRS common functions at MAC * !3725 Handle GTP receiver errors, fix memory leaks, add CU-UP test * !3726 fix for CSI payload sizes in PUCCH structure at UE * CI: Adjust attenutation for HO setup * !3728 Fix for scenario with no CSI report configured for CSI-RS * !3731 CI: ensure clean iperf3 server startup * !3592 Refactor PRACH handling at the gNB * !3682 Refactor DLSCH scheduler * !3733 Clarify whitespace * !3706 Change registry name env var content Closes #1015 and #1014 See merge request oai/openairinterface5g!3727
This commit is contained in:
@@ -119,7 +119,7 @@ def ExistEnvFilePrint(ssh, wd, prompt='env vars in existing'):
|
||||
|
||||
def WriteEnvFile(ssh, services, wd, tag, flexric_tag):
|
||||
ret = ssh.run(f'cat {wd}/.env', silent=True, reportNonZero=False)
|
||||
registry = "oai-ci" # pull_images() gives us this registry path
|
||||
registry = "oai-ci/" # pull_images() gives us this registry path
|
||||
envs = {"REGISTRY":registry, "TAG": tag, "FLEXRIC_TAG": flexric_tag}
|
||||
if ret.returncode == 0: # it exists, we have to update
|
||||
# transforms env file to dictionary
|
||||
@@ -134,7 +134,8 @@ def WriteEnvFile(ssh, services, wd, tag, flexric_tag):
|
||||
# or -asan images. We need to detect which kind we did pull.
|
||||
fullImageName = GetImageName(ssh, svc, f"{wd}/docker-compose.y*ml")
|
||||
image = fullImageName.split("/")[-1].split(":")[0]
|
||||
checkimg = f"{registry}/{image}-asan:{tag}"
|
||||
# registry now includes the trailing slash ("oai-ci/")
|
||||
checkimg = f"{registry}{image}-asan:{tag}"
|
||||
ret = ssh.run(f'docker image inspect {checkimg}', reportNonZero=False)
|
||||
if ret.returncode == 0:
|
||||
logging.info(f"detected pulled image {checkimg}")
|
||||
|
||||
@@ -503,6 +503,11 @@ class OaiCiTest():
|
||||
t = iperf_time * 2.5
|
||||
cmd_ue.run(f'rm {client_filename}', reportNonZero=False, silent=True)
|
||||
if cn.runIperf3Server():
|
||||
# Clean up any existing iperf3 server processes on this port.
|
||||
ret = cmd_svr.run(f"{cn.getCmdPrefix()} pkill -f '.*iperf3.*{port}'", reportNonZero=False)
|
||||
# If pkill succeeds, it means there was a leftover iperf3 server.
|
||||
if ret.returncode == 0:
|
||||
logging.warning(f'Iperf3 server on port {port} detected and terminated')
|
||||
cmd_svr.run(f'{cn.getCmdPrefix()} timeout -vk3 {t} iperf3 -s -B {svrIP} -p {port} -1 {jsonReport} >> /dev/null &', timeout=t)
|
||||
cmd_ue.run(f'{ue.getCmdPrefix()} timeout -vk3 {t} {iperf_ue} -B {ueIP} -c {svrIP} -p {port} {iperf_opt} {jsonReport} {serverReport} -O 5 >> {client_filename}', timeout=t)
|
||||
dest_filename = archiveArtifact(cmd_ue, ctx, client_filename)
|
||||
|
||||
@@ -23,7 +23,6 @@ gNBs =
|
||||
////////// Physical parameters:
|
||||
|
||||
min_rxtxtime = 2;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = 1;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
|
||||
@@ -18,8 +18,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
do_CSIRS = 0;
|
||||
do_SRS = 0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
|
||||
@@ -146,6 +146,7 @@ MACRLCs:
|
||||
tr_n_preference: local_RRC
|
||||
pusch_TargetSNRx10: 200
|
||||
pucch_TargetSNRx10: 200
|
||||
stats_max_ue: 17
|
||||
|
||||
L1s:
|
||||
- num_cc: 1
|
||||
|
||||
@@ -196,6 +196,7 @@ RUs = (
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [78];
|
||||
sl_ahead=3;
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
sf_extension = 0;
|
||||
|
||||
@@ -21,10 +21,6 @@ gNBs =
|
||||
nr_cellid = 12345678L
|
||||
|
||||
////////// Physical parameters:
|
||||
pdsch_AntennaPorts_XP = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = 0;
|
||||
uess_agg_levels = [2, 2, 2, 0, 0];
|
||||
|
||||
servingCellConfigCommon = (
|
||||
@@ -186,6 +182,7 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
stats_max_ue = 17;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -17,9 +17,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
do_CSIRS = 0;
|
||||
do_SRS = 0;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
|
||||
<testCase id="030021">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (DL/3Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
@@ -150,7 +150,7 @@
|
||||
|
||||
<testCase id="030022">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (UL/3Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (UL/3Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 3M -t 20</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
|
||||
<testCase id="030001">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (DL/3Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
@@ -208,7 +208,7 @@
|
||||
|
||||
<testCase id="030002">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (UL/1Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 1M -t 20</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
|
||||
<testCase id="030001">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (DL/3Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
<testCase id="030002">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (UL/1Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 1M -t 20</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
<testCase id="030001">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (DL/10Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (DL/10Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 10M -t 20 -R</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
@@ -109,7 +109,7 @@
|
||||
|
||||
<testCase id="030002">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (UL/3Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (UL/3Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 3M -t 20</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
<testCase id="030011">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (DL/30kbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (DL/30kbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 0.03M -t 20 -R -c 10.0.1.1</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
@@ -109,7 +109,7 @@
|
||||
|
||||
<testCase id="030012">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (UL/30kbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (UL/30kbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 0.03M -t 20 -c 10.0.1.1</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
|
||||
<testCase id="030001">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (DL/3Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
|
||||
<id>rfsim5g_multiue1</id>
|
||||
<nodes>localhost</nodes>
|
||||
@@ -167,7 +167,7 @@
|
||||
|
||||
<testCase id="030002">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (UL/1Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 1M -t 20</iperf_args>
|
||||
<id>rfsim5g_multiue1</id>
|
||||
<nodes>localhost</nodes>
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
|
||||
<testCase id="030001">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (DL/10Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (DL/10Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
@@ -132,7 +132,7 @@
|
||||
|
||||
<testCase id="030002">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (UL/4Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (UL/4Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 1M -t 20</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
<testCase id="030001">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (DL/3Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (DL/3Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 3M -t 20 -R</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
@@ -129,7 +129,7 @@
|
||||
|
||||
<testCase id="030002">
|
||||
<class>Iperf</class>
|
||||
<desc>Iperf (UL/1Mbps/UDP)(30 sec)</desc>
|
||||
<desc>Iperf (UL/1Mbps/UDP)(20 sec)</desc>
|
||||
<iperf_args>-u -b 1M -t 20</iperf_args>
|
||||
<id>rfsim5g_ue</id>
|
||||
<nodes>localhost</nodes>
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
<class>Custom_Command</class>
|
||||
<desc>Set attenuator to 0 for DU0 and 17 for DU1</desc>
|
||||
<node>rocket</node>
|
||||
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 0 -r 3,4 17 -d 5</command>
|
||||
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1,2 0 -s 3,4 25</command>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000007">
|
||||
@@ -168,7 +168,7 @@
|
||||
<class>Custom_Command</class>
|
||||
<desc>Attenuate DU1 by 17dB and remove attenuation on DU0 to trigger Handover</desc>
|
||||
<node>rocket</node>
|
||||
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 0 -r 3,4 17 -d 5</command>
|
||||
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 0 -r 3,4 25 -d 5</command>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000017">
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
<class>Custom_Command</class>
|
||||
<desc>Set initial attenuation on target gNB</desc>
|
||||
<node>rocket</node>
|
||||
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1,2 0 -s 3,4 15</command>
|
||||
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -s 1,2 0 -s 3,4 25</command>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000005">
|
||||
@@ -154,7 +154,7 @@
|
||||
<class>Custom_Command</class>
|
||||
<desc>Gradually attenuate gNB-PCI0 (ch1-2=0dB) and gNB-PCI1 (ch3-4=15dB) over 5s to trigger N2 Handover back to gNB-PCI0</desc>
|
||||
<node>rocket</node>
|
||||
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 0 -r 3,4 15 -d 5</command>
|
||||
<command>python3 %%workspace%%/ci-scripts/attenuatorctl.py -r 1,2 0 -r 3,4 25 -d 5</command>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000014">
|
||||
|
||||
@@ -178,7 +178,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_enb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: l2sim4g-oai-enb
|
||||
network_mode: "host"
|
||||
@@ -210,7 +210,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_ue1:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: l2sim4g-oai-lte-ue1
|
||||
network_mode: "host"
|
||||
@@ -229,7 +229,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_ue2:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: l2sim4g-oai-lte-ue2
|
||||
network_mode: "host"
|
||||
|
||||
@@ -178,7 +178,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_enb0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-enb
|
||||
networks:
|
||||
@@ -197,7 +197,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_ue0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-lte-ue0
|
||||
networks:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai_enb0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-enb
|
||||
networks:
|
||||
@@ -19,7 +19,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_ue0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-lte-ue0
|
||||
networks:
|
||||
|
||||
@@ -178,7 +178,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_enb0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-enb
|
||||
networks:
|
||||
@@ -197,7 +197,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_ue0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-lte-ue0
|
||||
networks:
|
||||
|
||||
@@ -178,7 +178,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_enb0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-enb
|
||||
networks:
|
||||
@@ -197,7 +197,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_ue0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-lte-ue0
|
||||
networks:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai_enb0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-enb
|
||||
networks:
|
||||
@@ -19,7 +19,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_ue0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-lte-ue0
|
||||
networks:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai_enb0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-enb
|
||||
networks:
|
||||
@@ -19,7 +19,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_ue0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-lte-ue0
|
||||
networks:
|
||||
|
||||
@@ -178,7 +178,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_enb0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${ENB_IMG:-oai-enb}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-enb
|
||||
networks:
|
||||
@@ -197,7 +197,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai_ue0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${LTEUE_IMG:-oai-lte-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim4g-oai-lte-ue0
|
||||
networks:
|
||||
|
||||
@@ -92,7 +92,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-cu:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-cu
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -121,7 +121,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-du-pci0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-du-pci0
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -152,7 +152,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-du-pci1:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-du-pci1
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -187,7 +187,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -90,7 +90,7 @@ services:
|
||||
start_period: 10s
|
||||
start_interval: 500ms
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -113,7 +113,7 @@ services:
|
||||
retries: 5
|
||||
ipc: host
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -90,7 +90,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_add:
|
||||
- SYS_NICE
|
||||
@@ -114,7 +114,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -141,7 +141,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue2:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue2
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -168,7 +168,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue3:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue3
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -195,7 +195,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue4:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue4
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -222,7 +222,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue5:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue5
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -249,7 +249,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue6:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue6
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -276,7 +276,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue7:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue7
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -303,7 +303,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue8:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue8
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -330,7 +330,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue9:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue9
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -357,7 +357,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue10:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue10
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -90,7 +90,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -112,7 +112,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -90,7 +90,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -115,7 +115,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -71,7 +71,7 @@ services:
|
||||
interface_name: eth1
|
||||
|
||||
oai-cucp:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-cucp
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -100,7 +100,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-cuup:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-cuup
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -131,7 +131,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-cuup2:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-cuup2
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -165,7 +165,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-cuup3:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-cuup3
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -199,7 +199,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-du:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-du
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -230,7 +230,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-du2:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-du2
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -264,7 +264,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-du3:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-du3
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -298,7 +298,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -328,7 +328,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue2:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue2
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -358,7 +358,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue3:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue3
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -25,7 +25,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-flexric:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-flexric:${FLEXRIC_TAG:-develop}
|
||||
container_name: oai-flexric
|
||||
networks:
|
||||
public_net:
|
||||
@@ -13,7 +13,7 @@ services:
|
||||
timeout: 5s
|
||||
|
||||
xapp-rc-moni:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-flexric:${FLEXRIC_TAG:-develop}
|
||||
command: "stdbuf -o0 /usr/local/flexric/xApp/c/monitor/xapp_rc_moni"
|
||||
container_name: xapp-rc-moni
|
||||
depends_on:
|
||||
@@ -30,7 +30,7 @@ services:
|
||||
timeout: 5s
|
||||
|
||||
xapp-kpm-moni:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-flexric:${FLEXRIC_TAG:-develop}
|
||||
command: "stdbuf -o0 /usr/local/flexric/xApp/c/monitor/xapp_kpm_moni"
|
||||
container_name: xapp-kpm-moni
|
||||
depends_on:
|
||||
@@ -47,7 +47,7 @@ services:
|
||||
timeout: 5s
|
||||
|
||||
xapp-kpm-rc:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-flexric:${FLEXRIC_TAG:-develop}
|
||||
command: "stdbuf -o0 /usr/local/flexric/xApp/c/kpm_rc/xapp_kpm_rc"
|
||||
container_name: xapp-kpm-rc
|
||||
depends_on:
|
||||
@@ -64,7 +64,7 @@ services:
|
||||
timeout: 5s
|
||||
|
||||
xapp-gtp-mac-rlc-pdcp-moni:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-flexric:${FLEXRIC_TAG:-develop}
|
||||
command: "stdbuf -o0 /usr/local/flexric/xApp/c/monitor/xapp_gtp_mac_rlc_pdcp_moni"
|
||||
container_name: xapp-gtp-mac-rlc-pdcp-moni
|
||||
depends_on:
|
||||
@@ -81,7 +81,7 @@ services:
|
||||
timeout: 5s
|
||||
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim5g-oai-gnb
|
||||
environment:
|
||||
@@ -101,7 +101,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
environment:
|
||||
@@ -120,7 +120,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue2:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: rfsim5g-oai-nr-ue2
|
||||
environment:
|
||||
|
||||
@@ -91,7 +91,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -112,7 +112,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -83,7 +83,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -103,7 +103,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -84,7 +84,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-cucp-0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-cucp-0
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -111,7 +111,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-cuup-0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-cuup-0
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -139,7 +139,7 @@ services:
|
||||
|
||||
|
||||
oai-du-0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-du-0
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -168,7 +168,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -194,7 +194,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-cucp-1:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-cucp-1
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -226,7 +226,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-cuup-1:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-cuup-1
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -253,7 +253,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-du-1:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-du-1
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -90,7 +90,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -115,7 +115,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -87,7 +87,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -110,7 +110,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-nr-ue-1:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue-1
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -25,7 +25,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue-2:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue-2
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -25,7 +25,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -91,7 +91,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-vnf:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-vnf
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -115,7 +115,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-pnf:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-pnf
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -139,7 +139,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-cu:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: oai-cu
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -26,7 +26,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-du0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: oai-du0
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -58,7 +58,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-du1:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: oai-du1
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb-pci0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: oai-gnb-pci0
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -28,7 +28,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
oai-gnb-pci1:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: oai-gnb-pci1
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
network_mode: "host"
|
||||
container_name: oai-gnb
|
||||
cap_drop:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
network_mode: "host"
|
||||
container_name: oai-gnb
|
||||
cap_drop:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-vnf:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
network_mode: "host"
|
||||
container_name: oai-vnf
|
||||
cap_drop:
|
||||
@@ -20,7 +20,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-pnf:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
network_mode: "host"
|
||||
container_name: oai-pnf
|
||||
cap_drop:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
network_mode: "host"
|
||||
container_name: oai-gnb
|
||||
cap_drop:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-nr-ue:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
|
||||
network_mode: host
|
||||
container_name: oai-nr-ue
|
||||
cap_drop:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: prod-enb-mono-fdd
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
rru_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-rru-fdd-05Mhz-tm1
|
||||
network_mode: "host"
|
||||
@@ -17,7 +17,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
rcc_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-rcc-fdd-05Mhz-tm1
|
||||
network_mode: "host"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-fdd-05Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-fdd-05Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
lte_ue0:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-lte-ue:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-lte-ue:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-ue-fdd-10Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-fdd-10Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-fdd-10Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-fdd-10Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-fdd-20Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
rru_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-rru-tdd-05Mhz-tm1
|
||||
network_mode: "host"
|
||||
@@ -17,7 +17,7 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
rcc_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-rcc-tdd-05Mhz-tm1
|
||||
network_mode: "host"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-tdd-05Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-tdd-05Mhz-tm2
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-tdd-10Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-tdd-20Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: lte-b200-enb-tdd-20Mhz-tm1
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-enb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: oai-enb
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-enb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: oai-enb
|
||||
environment:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
enb_mono_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-enb:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-enb:${TAG:-develop}
|
||||
privileged: true
|
||||
container_name: nsa-b200-enb
|
||||
ulimits:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
gnb_mono_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: nsa-b200-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-gnb-aw2s:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-gnb-aw2s:${TAG:-develop}
|
||||
network_mode: "host"
|
||||
container_name: oai-gnb-aw2s
|
||||
cap_drop:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-gnb-aw2s:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-gnb-aw2s:${TAG:-develop}
|
||||
network_mode: "host"
|
||||
container_name: oai-gnb-aw2s
|
||||
cap_drop:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
gnb_mono_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: sa-b200-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
gnb_cucp:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: sa-cucp-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -25,7 +25,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
gnb_cuup:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${NRCUUP_IMG:-oai-nr-cuup}:${TAG:-develop}
|
||||
container_name: sa-cuup-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -51,7 +51,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
gnb_du_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: sa-du-b200-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
gnb_cu:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: sa-cu-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
@@ -25,7 +25,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
gnb_du_fdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: sa-du-b200-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-gnb-fhi72:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-gnb-fhi72:${TAG:-develop}
|
||||
cap_add:
|
||||
- SYS_ADMIN
|
||||
- IPC_LOCK
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-gnb-fhi72:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-gnb-fhi72:${TAG:-develop}
|
||||
cap_add:
|
||||
- IPC_LOCK
|
||||
- SYS_NICE
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
oai-gnb:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-gnb-fhi72:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}oai-gnb-fhi72:${TAG:-develop}
|
||||
cap_add:
|
||||
- IPC_LOCK
|
||||
- SYS_NICE
|
||||
|
||||
@@ -34,7 +34,7 @@ services:
|
||||
retries: 5
|
||||
oai-gnb-aerial:
|
||||
cpuset: "13-14"
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-gnb-aerial:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb-aerial}:${TAG:-develop}
|
||||
depends_on:
|
||||
nv-cubb:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -34,7 +34,7 @@ services:
|
||||
retries: 5
|
||||
oai-gnb-aerial:
|
||||
cpuset: "13-16"
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/oai-gnb-aerial:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb-aerial}:${TAG:-develop}
|
||||
depends_on:
|
||||
nv-cubb:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
gnb_mono_tdd:
|
||||
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
|
||||
container_name: sa-b200-gnb
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
@@ -240,6 +240,7 @@ configmodule_interface_t *load_configmodule(int argc,
|
||||
for (int i=0; i<argc; i++)
|
||||
printf("\"%s\" ", argv[i]);
|
||||
printf("\n");
|
||||
fflush(stdout);
|
||||
|
||||
/* first parse the command line to look for the -O option */
|
||||
for (i = 0; i<argc; i++) {
|
||||
|
||||
@@ -145,7 +145,13 @@ static const char *const log_level_highlight_end[] =
|
||||
{LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
|
||||
static void log_output_memory(log_component_t *c, const char *file, const char *func, int line, int comp, int level, const char* format,va_list args);
|
||||
|
||||
int write_file_matlab(const char *fname, const char *vname, void *data, int length, int dec, unsigned int format, int multiVec)
|
||||
int write_file_matlab(const char *fname,
|
||||
const char *vname,
|
||||
const void *data,
|
||||
int length,
|
||||
int dec,
|
||||
unsigned int format,
|
||||
int multiVec)
|
||||
{
|
||||
FILE *fp=NULL;
|
||||
int i;
|
||||
|
||||
+11
-4
@@ -168,8 +168,9 @@ static const char *const flag_name[] = {FOREACH_FLAG(FLAG_TEXT) ""};
|
||||
COMP_DEF(GNB_APP, log) \
|
||||
COMP_DEF(NR_RRC, log) \
|
||||
COMP_DEF(NR_MAC, log) \
|
||||
COMP_DEF(NR_MAC_DCI, log) \
|
||||
COMP_DEF(NR_PHY_DCI, log) \
|
||||
COMP_DEF(NR_MAC_DCI, log) \
|
||||
COMP_DEF(NR_PHY_DCI, log) \
|
||||
COMP_DEF(NR_PHY_RACH, log) \
|
||||
COMP_DEF(NR_PHY, log) \
|
||||
COMP_DEF(LOADER, log) \
|
||||
COMP_DEF(ASN1, log) \
|
||||
@@ -316,8 +317,14 @@ void close_log_mem(void);
|
||||
#define MATLAB_CSHORT_BRACKET1 13
|
||||
#define MATLAB_CSHORT_BRACKET2 14
|
||||
#define MATLAB_CSHORT_BRACKET3 15
|
||||
|
||||
int32_t write_file_matlab(const char *fname, const char *vname, void *data, int length, int dec, unsigned int format, int multiVec);
|
||||
|
||||
int32_t write_file_matlab(const char *fname,
|
||||
const char *vname,
|
||||
const void *data,
|
||||
int length,
|
||||
int dec,
|
||||
unsigned int format,
|
||||
int multiVec);
|
||||
#define write_output(a, b, c, d, e, f) write_file_matlab(a, b, c, d, e, f, 0)
|
||||
|
||||
/*----------------macro definitions for reading log configuration from the config module */
|
||||
|
||||
@@ -519,6 +519,27 @@ ID = LEGACY_NR_PHY_TRACE
|
||||
GROUP = ALL:LEGACY_NR_PHY:LEGACY_GROUP_TRACE:LEGACY
|
||||
FORMAT = string,log
|
||||
|
||||
ID = LEGACY_NR_PHY_RACH_INFO
|
||||
DESC = NR_PHY_RACH legacy logs - info level
|
||||
GROUP = ALL:LEGACY_NR_PHY_RACH:LEGACY_GROUP_INFO:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_NR_PHY_RACH_ERROR
|
||||
DESC = NR_PHY_RACH legacy logs - error level
|
||||
GROUP = ALL:LEGACY_NR_PHY_RACH:LEGACY_GROUP_ERROR:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_NR_PHY_RACH_WARNING
|
||||
DESC = NR_PHY_RACH legacy logs - warning level
|
||||
GROUP = ALL:LEGACY_NR_PHY_RACH:LEGACY_GROUP_WARNING:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_NR_PHY_RACH_DEBUG
|
||||
DESC = NR_PHY_RACH legacy logs - debug level
|
||||
GROUP = ALL:LEGACY_NR_PHY_RACH:LEGACY_GROUP_DEBUG:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_NR_PHY_RACH_TRACE
|
||||
DESC = NR_PHY_RACH legacy logs - trace level
|
||||
GROUP = ALL:LEGACY_NR_PHY_RACH:LEGACY_GROUP_TRACE:LEGACY
|
||||
FORMAT = string,log
|
||||
|
||||
ID = LEGACY_S1AP_INFO
|
||||
DESC = S1AP legacy logs - info level
|
||||
GROUP = ALL:LEGACY_S1AP:LEGACY_GROUP_INFO:LEGACY
|
||||
|
||||
@@ -236,6 +236,9 @@ In the `MACRLCs` section of the gNB/DU configuration file:
|
||||
case RSSI reaches the threshold and prevents ADC railing. Unit depends on
|
||||
RSSI reporting config.
|
||||
* `pucch_RSSI_Threshold`: Same as above but for PUCCH
|
||||
* `stats_max_ue` (default 8): maximum number of UEs to show in periodical
|
||||
stats; beyond this number, periodical statistics will be disabled (it can
|
||||
still be seen in `nrMAC_stats.log`. Use `0` to disable periodical stats.
|
||||
|
||||
In the `gNBs` section of the gNB/DU configuration file: some of the parameters
|
||||
affect RRC configuration (CellGroupConfig) of a UE, and are therefore listed
|
||||
|
||||
@@ -39,7 +39,7 @@ rx_func_implem[rx_func]
|
||||
--> handle_nr_nfapi_xxx_pdu
|
||||
--> sendTxFilled((L1_tx_filled))
|
||||
--> nr_fill_ul_xxx
|
||||
--> nr_fill_prach
|
||||
--> nr_schedule_rx_prach()
|
||||
end
|
||||
gNB_dlsch_ulsch_scheduler --> NR_Schedule_response
|
||||
end
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
The gNB RACH processing
|
||||
|
||||
1. Collect I/Q samples
|
||||
The gNB/ru main loop, in ru_thread()
|
||||
If there is rach occasions in this slot
|
||||
this main loop calls rx_nr_prach_ru() that stores the I/Q samples in the prach_item_t context
|
||||
|
||||
2.process the samples
|
||||
L1_rx_thread() has received slot indication by msg on queue resp_L1, it calls rx_func() => L1_nr_prach_procedures()
|
||||
L1_nr_prach_procedures() fills nfapi_nr_rach_indication_t structure from result of rx_nr_prach() that process the content of rxsigF[prachOccasion][aa]
|
||||
rx_func() sends the decoded rach to upper processing by call to NR_UL_indication() that calls handle_nr_rach() => nr_initiate_ra_proc()
|
||||
|
||||
nr_initiate_ra_proc() creates a UE context if it needs, then sets UE.ra.ra_state to what it should do
|
||||
|
||||
3. send the RACH DL
|
||||
tx_func() that is launched by L1_tx_thread() as it gets L1_tx_out msg (from main loop in 1.)
|
||||
tx_func()=>run_scheduler_monolithic()=>gNB_dlsch_ulsch_scheduler()=>nr_scheduler_RA()
|
||||
nr_scheduler_RA() process all existing UE contexts, to see it it has to schedule a RACH DL
|
||||
|
||||
4. global synchronisation
|
||||
resp_L1 msg for (2.) is created in tx_func() that is launched by L1_tx_thread() (see3.) when it receives slot indication as it gets L1_tx_out msg
|
||||
this msg is sent by the main loop (see 1.)
|
||||
tx_func()=>run_scheduler_monolithic()=>nr_schedule_response ()=>nr_schedule_ul_tti_req ()=> nr_schedule_rx_prach()
|
||||
writes in the triggering structure to (1.) that it will have to run rx_nr_prach_ru() in a given future slot
|
||||
@@ -150,7 +150,8 @@ int main(int argc, char **argv)
|
||||
time_manager_start(tick_functions, tick_functions_count, TIME_SOURCE_REALTIME);
|
||||
|
||||
// strdup to put the sring in the core file for post mortem identification
|
||||
LOG_I(HW, "Version: %s\n", strdup(OAI_PACKAGE_VERSION));
|
||||
char *v = strdup(OAI_PACKAGE_VERSION);
|
||||
LOG_I(HW, "Version: %s\n", v);
|
||||
set_softmodem_sighandler();
|
||||
itti_init(TASK_MAX, tasks_info);
|
||||
int rc;
|
||||
@@ -189,6 +190,8 @@ int main(int argc, char **argv)
|
||||
|
||||
time_manager_finish();
|
||||
|
||||
free(v);
|
||||
|
||||
logClean();
|
||||
printf("Bye.\n");
|
||||
return 0;
|
||||
|
||||
+13
-4
@@ -150,7 +150,9 @@ void *L1_rx_thread(void *arg)
|
||||
if (res == NULL)
|
||||
break;
|
||||
processingData_L1_t *info = (processingData_L1_t *)NotifiedFifoData(res);
|
||||
start_meas(&gNB->l1_rx_proc);
|
||||
rx_func(info);
|
||||
stop_meas(&gNB->l1_rx_proc);
|
||||
delNotifiedFIFO_elt(res);
|
||||
}
|
||||
return NULL;
|
||||
@@ -164,7 +166,9 @@ void *L1_tx_thread(void *arg) {
|
||||
if (res == NULL) // stopping condition, happens only when queue is freed
|
||||
break;
|
||||
processingData_L1tx_t *info = (processingData_L1tx_t *)NotifiedFifoData(res);
|
||||
start_meas(&gNB->l1_tx_proc);
|
||||
tx_func(info);
|
||||
stop_meas(&gNB->l1_tx_proc);
|
||||
delNotifiedFIFO_elt(res);
|
||||
}
|
||||
return NULL;
|
||||
@@ -229,6 +233,8 @@ static void rx_func(processingData_L1_t *info)
|
||||
static size_t dump_L1_meas_stats(PHY_VARS_gNB *gNB, RU_t *ru, char *output, size_t outputlen) {
|
||||
const char *begin = output;
|
||||
const char *end = output + outputlen;
|
||||
output += print_meas_log(&gNB->l1_tx_proc, "L1 Tx job", NULL, NULL, output, end - output);
|
||||
output += print_meas_log(&gNB->l1_rx_proc, "L1 Rx job", NULL, NULL, output, end - output);
|
||||
output += print_meas_log(&gNB->phy_proc_tx, "L1 Tx processing", NULL, NULL, output, end - output);
|
||||
output += print_meas_log(&gNB->dlsch_encoding_stats, "DLSCH encoding", NULL, NULL, output, end - output);
|
||||
output += print_meas_log(&gNB->dlsch_scrambling_stats, "DLSCH scrambling", NULL, NULL, output, end-output);
|
||||
@@ -293,6 +299,8 @@ void *nrL1_stats_thread(void *param) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
reset_meas(&gNB->l1_tx_proc);
|
||||
reset_meas(&gNB->l1_rx_proc);
|
||||
reset_meas(&gNB->phy_proc_tx);
|
||||
reset_meas(&gNB->dlsch_encoding_stats);
|
||||
reset_meas(&gNB->phy_proc_rx);
|
||||
@@ -309,13 +317,16 @@ void *nrL1_stats_thread(void *param) {
|
||||
reset_meas(&gNB->dlsch_precoding_stats);
|
||||
while (!oai_exit) {
|
||||
sleep(1);
|
||||
if (ftruncate(fileno(fd), 0) != 0 || fseek(fd, 0, SEEK_SET) != 0) {
|
||||
LOG_E(NR_MAC, "error while writing nrL1_stats.log: %d, %s\n", errno, strerror(errno));
|
||||
break;
|
||||
}
|
||||
dump_nr_I0_stats(fd,gNB);
|
||||
dump_pdsch_stats(fd,gNB);
|
||||
dump_pusch_stats(fd,gNB);
|
||||
dump_L1_meas_stats(gNB, ru, output, L1STATSSTRLEN);
|
||||
fprintf(fd,"%s\n",output);
|
||||
fflush(fd);
|
||||
fseek(fd,0,SEEK_SET);
|
||||
}
|
||||
fclose(fd);
|
||||
return(NULL);
|
||||
@@ -387,10 +398,8 @@ void init_eNB_afterRU(void)
|
||||
int aa = 0;
|
||||
for (int ru_id = 0; ru_id < gNB->num_RU; ru_id++) {
|
||||
AssertFatal(gNB->RU_list[ru_id]->common.rxdataF != NULL, "RU %d : common.rxdataF is NULL\n", gNB->RU_list[ru_id]->idx);
|
||||
AssertFatal(gNB->RU_list[ru_id]->prach_rxsigF != NULL, "RU %d : prach_rxsigF is NULL\n", gNB->RU_list[ru_id]->idx);
|
||||
for (int i = 0; i < gNB->RU_list[ru_id]->nb_rx; aa++, i++) {
|
||||
LOG_I(PHY,"Attaching RU %d antenna %d to gNB antenna %d\n", gNB->RU_list[ru_id]->idx, i, aa);
|
||||
gNB->prach_vars.rxsigF[aa] = gNB->RU_list[ru_id]->prach_rxsigF[0][i];
|
||||
LOG_I(PHY, "Attaching RU %d antenna %d to gNB antenna %d\n", gNB->RU_list[ru_id]->idx, i, aa);
|
||||
for (int b = 0; b < gNB->RU_list[ru_id]->num_beams_period; b++) {
|
||||
int idx = i + b * gNB->RU_list[ru_id]->nb_rx;
|
||||
gNB->common_vars.rxdataF[b][aa] = (c16_t *)gNB->RU_list[ru_id]->common.rxdataF[idx];
|
||||
|
||||
+18
-36
@@ -1034,7 +1034,7 @@ void *ru_thread(void *param)
|
||||
RU_t *ru = (RU_t *)param;
|
||||
RU_proc_t *proc = &ru->proc;
|
||||
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
|
||||
PHY_VARS_gNB *gNB = RC.gNB[0];
|
||||
PHY_VARS_gNB *gNB = RC.gNB[0]; // this RU main loop handes only one RU
|
||||
int ret;
|
||||
int slot = fp->slots_per_frame-1;
|
||||
int frame = 1023;
|
||||
@@ -1047,7 +1047,7 @@ void *ru_thread(void *param)
|
||||
// set default return value
|
||||
sprintf(threadname,"ru_thread %u",ru->idx);
|
||||
LOG_I(PHY,"Starting RU %d (%s,%s) on cpu %d\n",ru->idx,NB_functions[ru->function],NB_timing[ru->if_timing],sched_getcpu());
|
||||
ru->config = RC.gNB[0]->gNB_config;
|
||||
ru->config = gNB->gNB_config;
|
||||
|
||||
nr_init_frame_parms(&ru->config, fp);
|
||||
nr_dump_frame_parms(fp);
|
||||
@@ -1179,12 +1179,17 @@ void *ru_thread(void *param)
|
||||
proc->timestamp_tx += fp->get_samples_per_slot(i % fp->slots_per_frame, fp);
|
||||
proc->tti_tx = (proc->tti_rx + ru->sl_ahead) % fp->slots_per_frame;
|
||||
proc->frame_tx = proc->tti_rx > proc->tti_tx ? (proc->frame_rx + 1) & 1023 : proc->frame_rx;
|
||||
LOG_D(PHY,"AFTER fh_south_in - SFN/SL:%d%d RU->proc[RX:%d.%d TX:%d.%d] RC.gNB[0]:[RX:%d%d TX(SFN):%d]\n",
|
||||
frame,slot,
|
||||
proc->frame_rx,proc->tti_rx,
|
||||
proc->frame_tx,proc->tti_tx,
|
||||
RC.gNB[0]->proc.frame_rx,RC.gNB[0]->proc.slot_rx,
|
||||
RC.gNB[0]->proc.frame_tx);
|
||||
LOG_D(PHY,
|
||||
"AFTER fh_south_in - SFN/SL:%d%d RU->proc[RX:%d.%d TX:%d.%d] RC.gNB[0]:[RX:%d%d TX(SFN):%d]\n",
|
||||
frame,
|
||||
slot,
|
||||
proc->frame_rx,
|
||||
proc->tti_rx,
|
||||
proc->frame_tx,
|
||||
proc->tti_tx,
|
||||
gNB->proc.frame_rx,
|
||||
gNB->proc.slot_rx,
|
||||
gNB->proc.frame_tx);
|
||||
|
||||
if (ru->idx != 0)
|
||||
proc->frame_tx = (proc->frame_tx + proc->frame_offset) & 1023;
|
||||
@@ -1199,7 +1204,7 @@ void *ru_thread(void *param)
|
||||
LOG_D(NR_PHY, "Setting %d.%d (%d) to busy\n", proc->frame_rx, proc->tti_rx, proc->tti_rx % RU_RX_SLOT_DEPTH);
|
||||
//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);
|
||||
gNBscopeCopy(RC.gNB[0],
|
||||
gNBscopeCopy(gNB,
|
||||
gNBRxdataF,
|
||||
ru->common.rxdataF[0],
|
||||
sizeof(c16_t),
|
||||
@@ -1208,34 +1213,11 @@ void *ru_thread(void *param)
|
||||
proc->tti_rx * gNB->frame_parms.samples_per_slot_wCP);
|
||||
|
||||
// Do PRACH RU processing
|
||||
int prach_id = find_nr_prach_ru(ru, proc->frame_rx, proc->tti_rx, SEARCH_EXIST);
|
||||
if (prach_id >= 0) {
|
||||
prach_item_t *p = find_nr_prach(&gNB->prach_list, proc->frame_rx, proc->tti_rx, SEARCH_EXIST);
|
||||
if (p) {
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_RU_PRACH_RX, 1 );
|
||||
|
||||
T(T_GNB_PHY_PRACH_INPUT_SIGNAL,
|
||||
T_INT(proc->frame_rx),
|
||||
T_INT(proc->tti_rx),
|
||||
T_INT(0),
|
||||
T_BUFFER(&ru->common.rxdata[0][fp->get_samples_slot_timestamp(proc->tti_rx - 1, fp, 0) /*-ru->N_TA_offset*/],
|
||||
(fp->get_samples_per_slot(proc->tti_rx - 1, fp) + fp->get_samples_per_slot(proc->tti_rx, fp)) * 4));
|
||||
RU_PRACH_list_t *p = ru->prach_list + prach_id;
|
||||
int N_dur = get_nr_prach_duration(p->fmt);
|
||||
|
||||
for (int prach_oc = 0; prach_oc < p->num_prach_ocas; prach_oc++) {
|
||||
int prachStartSymbol = p->prachStartSymbol + prach_oc * N_dur;
|
||||
int beam_id = ru->prach_list[prach_id].beam ? ru->prach_list[prach_id].beam[prach_oc] : 0;
|
||||
//comment FK: the standard 38.211 section 5.3.2 has one extra term +14*N_RA_slot. This is because there prachStartSymbol is given wrt to start of the 15kHz slot or 60kHz slot. Here we work slot based, so this function is anyway only called in slots where there is PRACH. Its up to the MAC to schedule another PRACH PDU in the case there are there N_RA_slot \in {0,1}.
|
||||
rx_nr_prach_ru(ru,
|
||||
p->fmt, // could also use format
|
||||
p->numRA,
|
||||
beam_id,
|
||||
prachStartSymbol,
|
||||
p->slot,
|
||||
prach_oc,
|
||||
proc->frame_rx,
|
||||
proc->tti_rx);
|
||||
}
|
||||
free_nr_ru_prach_entry(ru,prach_id);
|
||||
// need to extract RACH data for lqter processing by rx_nr_prach()
|
||||
rx_nr_prach_ru(p, ru->common.rxdata, ru->nr_frame_parms, ru->N_TA_offset);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_RU_PRACH_RX, 0);
|
||||
} // end if (prach_id >= 0)
|
||||
} // end if (ru->feprx)
|
||||
|
||||
+1
-1
@@ -1091,7 +1091,7 @@ void *UE_thread(void *arg)
|
||||
stream_status = STREAM_STATUS_SYNCED;
|
||||
tx_wait_for_dlsch[slot] = 0;
|
||||
}
|
||||
|
||||
LOG_W(NR_PHY, "UE main thread is ending\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -139,10 +139,7 @@ int create_tasks_nrue(uint32_t ue_nb) {
|
||||
void exit_function(const char *file, const char *function, const int line, const char *s, const int assert)
|
||||
{
|
||||
int CC_id;
|
||||
|
||||
if (s != NULL) {
|
||||
printf("%s:%d %s() Exiting OAI softmodem: %s\n",file,line, function, s);
|
||||
}
|
||||
LOG_W(NR_PHY, "called by: %s:%d %s() Exiting OAI softmodem: %s\n", file, line, function, s ? s : "no msg");
|
||||
|
||||
oai_exit = 1;
|
||||
|
||||
@@ -496,9 +493,8 @@ int main(int argc, char **argv)
|
||||
printf("Entering ITTI signals handler\n");
|
||||
printf("TYPE <CTRL-C> TO TERMINATE\n");
|
||||
itti_wait_tasks_end(trigger_deregistration);
|
||||
printf("Returned from ITTI signal handler\n");
|
||||
oai_exit=1;
|
||||
printf("oai_exit=%d\n",oai_exit);
|
||||
LOG_W(NR_PHY, "Returned from ITTI signal handler\n");
|
||||
oai_exit = 1;
|
||||
|
||||
if (ouput_vcd)
|
||||
vcd_signal_dumper_close();
|
||||
|
||||
@@ -1481,7 +1481,10 @@ typedef enum {
|
||||
NFAPI_NR_UL_CONFIG_PUCCH_PDU_TYPE,
|
||||
NFAPI_NR_UL_CONFIG_SRS_PDU_TYPE,
|
||||
} nfapi_nr_ul_config_pdu_type_e;
|
||||
|
||||
static const char* const txt_nfapi_nr_ul_config_pdu_type[] = {"NFAPI_NR_UL_CONFIG_PRACH_PDU_TYPE",
|
||||
"NFAPI_NR_UL_CONFIG_PUSCH_PDU_TYPE",
|
||||
"NFAPI_NR_UL_CONFIG_PUCCH_PDU_TYPE",
|
||||
"NFAPI_NR_UL_CONFIG_SRS_PDU_TYPE"};
|
||||
typedef struct
|
||||
{
|
||||
uint16_t pdu_type;//0: PRACH PDU, 1: PUSCH PDU, 2: PUCCH PDU, 3: SRS PDU
|
||||
|
||||
@@ -104,9 +104,7 @@ void phy_init_nr_gNB(PHY_VARS_gNB *gNB)
|
||||
// shortcuts
|
||||
NR_DL_FRAME_PARMS *const fp = &gNB->frame_parms;
|
||||
nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
|
||||
NR_gNB_COMMON *const common_vars = &gNB->common_vars;
|
||||
NR_gNB_PRACH *const prach_vars = &gNB->prach_vars;
|
||||
|
||||
NR_gNB_COMMON *const common_vars = &gNB->common_vars;
|
||||
common_vars->analog_bf = cfg->analog_beamforming_ve.analog_bf_vendor_ext.value;
|
||||
LOG_I(PHY, "L1 configured with%s analog beamforming\n", common_vars->analog_bf ? "" : "out");
|
||||
if (common_vars->analog_bf) {
|
||||
@@ -190,10 +188,7 @@ void phy_init_nr_gNB(PHY_VARS_gNB *gNB)
|
||||
common_vars->debugBuff_sample_offset = 0;
|
||||
|
||||
// PRACH
|
||||
prach_vars->rxsigF = (int16_t **)malloc16_clear(Prx*sizeof(int16_t*));
|
||||
prach_vars->prach_ifft = (int32_t *)malloc16_clear(1024*2*sizeof(int32_t));
|
||||
|
||||
init_prach_list(gNB);
|
||||
init_prach_list(&gNB->prach_list);
|
||||
|
||||
int N_RB_UL = cfg->carrier_config.ul_grid_size[cfg->ssb_config.scs_common.value].value;
|
||||
int n_buf = Prx*max_ul_mimo_layers;
|
||||
@@ -266,10 +261,6 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
|
||||
|
||||
free_and_zero(common_vars->debugBuff);
|
||||
|
||||
NR_gNB_PRACH* prach_vars = &gNB->prach_vars;
|
||||
free_and_zero(prach_vars->rxsigF);
|
||||
free_and_zero(prach_vars->prach_ifft);
|
||||
|
||||
for (int ULSCH_id = 0; ULSCH_id < gNB->max_nb_pusch; ULSCH_id++) {
|
||||
NR_gNB_PUSCH *pusch_vars = &gNB->pusch_vars[ULSCH_id];
|
||||
for (int i = 0; i < n_buf; i++) {
|
||||
|
||||
@@ -27,8 +27,6 @@
|
||||
#include <math.h>
|
||||
#include "openair1/PHY/defs_RU.h"
|
||||
|
||||
void init_prach_ru_list(RU_t *ru);
|
||||
|
||||
void nr_phy_init_RU(RU_t *ru)
|
||||
{
|
||||
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
|
||||
@@ -114,25 +112,10 @@ void nr_phy_init_RU(RU_t *ru)
|
||||
LOG_D(PHY, "rxdataF[%d] %p for RU %d\n", i, ru->common.rxdataF[i], ru->idx);
|
||||
}
|
||||
|
||||
/* number of elements of an array X is computed as sizeof(X) / sizeof(X[0]) */
|
||||
// AssertFatal(ru->nb_rx <= sizeof(ru->prach_rxsigF) / sizeof(ru->prach_rxsigF[0]),
|
||||
// "nb_antennas_rx too large");
|
||||
for (int j = 0; j < NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX; j++) {
|
||||
ru->prach_rxsigF[j] = (int16_t**)malloc(nb_rx_streams * sizeof(int16_t*));
|
||||
|
||||
for (int i = 0; i < nb_rx_streams; i++) {
|
||||
// largest size for PRACH FFT is 4x98304 (16*24576)
|
||||
ru->prach_rxsigF[j][i] = (int16_t*)malloc16_clear(4 * 98304 * 2 * sizeof(int16_t));
|
||||
LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n", i, ru->prach_rxsigF[j][i]);
|
||||
}
|
||||
}
|
||||
|
||||
AssertFatal(ru->num_gNB <= NUMBER_OF_gNB_MAX, "gNB instances %d > %d\n", ru->num_gNB,NUMBER_OF_gNB_MAX);
|
||||
|
||||
LOG_D(PHY, "[INIT] %s() ru->num_gNB:%d \n", __FUNCTION__, ru->num_gNB);
|
||||
} // !=IF5
|
||||
|
||||
init_prach_ru_list(ru);
|
||||
}
|
||||
|
||||
void nr_phy_free_RU(RU_t *ru)
|
||||
@@ -174,11 +157,6 @@ void nr_phy_free_RU(RU_t *ru)
|
||||
free_and_zero(ru->common.rxdataF[i]);
|
||||
free_and_zero(ru->common.rxdataF);
|
||||
|
||||
for (int j = 0; j < NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX; j++) {
|
||||
for (int i = 0; i < nb_rx_streams; i++)
|
||||
free_and_zero(ru->prach_rxsigF[j][i]);
|
||||
free_and_zero(ru->prach_rxsigF[j]);
|
||||
}
|
||||
for(int i = 0; i < ru->num_beams_period; ++i)
|
||||
free_and_zero(ru->common.beam_id[i]);
|
||||
free_and_zero(ru->common.beam_id);
|
||||
|
||||
@@ -36,286 +36,230 @@
|
||||
#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h"
|
||||
#include "openair1/PHY/NR_TRANSPORT/nr_prach.h"
|
||||
|
||||
void init_prach_list(PHY_VARS_gNB *gNB)
|
||||
void init_prach_list(prach_list_t *l)
|
||||
{
|
||||
AssertFatal(gNB != NULL, "gNB is null\n");
|
||||
for (int i = 0; i < NUMBER_OF_NR_PRACH_MAX; i++){
|
||||
gNB->prach_vars.list[i].frame = -1;
|
||||
gNB->prach_vars.list[i].slot = -1;
|
||||
gNB->prach_vars.list[i].num_slots = -1;
|
||||
}
|
||||
pthread_mutex_init(&l->prach_list_mutex, NULL);
|
||||
for (prach_item_t *p = l->list; p < l->list + NUMBER_OF_NR_PRACH_MAX; p++)
|
||||
*p = (prach_item_t){.frame = -1, .slot = -1};
|
||||
}
|
||||
|
||||
void free_nr_prach_entry(PHY_VARS_gNB *gNB, int prach_id)
|
||||
void free_nr_prach_entry(prach_list_t *l, prach_item_t *p)
|
||||
{
|
||||
gNB->prach_vars.list[prach_id].frame = -1;
|
||||
gNB->prach_vars.list[prach_id].slot = -1;
|
||||
gNB->prach_vars.list[prach_id].num_slots = -1;
|
||||
free_and_zero(gNB->prach_vars.list[prach_id].beam_nb);
|
||||
pthread_mutex_lock(&l->prach_list_mutex);
|
||||
if (p->frame == -1)
|
||||
LOG_E(NR_PHY_RACH, "Freeing a not allocated prach entry\n");
|
||||
*p = (prach_item_t){.frame = -1, .slot = -1, .num_slots = -1};
|
||||
pthread_mutex_unlock(&l->prach_list_mutex);
|
||||
}
|
||||
|
||||
int16_t find_nr_prach(PHY_VARS_gNB *gNB,int frame, int slot, find_type_t type) {
|
||||
|
||||
AssertFatal(gNB!=NULL,"gNB is null\n");
|
||||
for (uint16_t i=0; i<NUMBER_OF_NR_PRACH_MAX; i++) {
|
||||
gNB_PRACH_list_t *p = gNB->prach_vars.list + i;
|
||||
LOG_D(PHY, "searching for PRACH in %d.%d prach_index %d=> %d.%d\n", frame, slot, i, p->frame, p->slot);
|
||||
if ((type == SEARCH_EXIST_OR_FREE) && (p->frame == -1) && (p->slot == -1)) {
|
||||
return i;
|
||||
} else if ((type == SEARCH_EXIST) && (p->frame == frame) && (p->slot + p->num_slots - 1 == slot)) {
|
||||
return i;
|
||||
prach_item_t *find_nr_prach(prach_list_t *l, int frame, int slot, find_type_t type)
|
||||
{
|
||||
pthread_mutex_lock(&l->prach_list_mutex);
|
||||
prach_item_t *p = l->list;
|
||||
prach_item_t *end = p + NUMBER_OF_NR_PRACH_MAX;
|
||||
for (; p < end; p++)
|
||||
if (p->frame == frame && (p->slot + p->num_slots - 1) == slot)
|
||||
break;
|
||||
if (p == end) {
|
||||
if (type == SEARCH_EXIST) {
|
||||
pthread_mutex_unlock(&l->prach_list_mutex);
|
||||
return NULL;
|
||||
}
|
||||
for (p = l->list; p < end; p++)
|
||||
if (p->frame == -1 && p->slot == -1)
|
||||
break;
|
||||
}
|
||||
return -1;
|
||||
if (p == end) {
|
||||
pthread_mutex_unlock(&l->prach_list_mutex);
|
||||
return NULL;
|
||||
}
|
||||
// mark it used, it will be filled later
|
||||
p->frame = frame;
|
||||
pthread_mutex_unlock(&l->prach_list_mutex);
|
||||
return p;
|
||||
}
|
||||
|
||||
int nr_fill_prach(PHY_VARS_gNB *gNB, int SFN, int Slot, nfapi_nr_prach_pdu_t *prach_pdu)
|
||||
prach_item_t *nr_schedule_rx_prach(PHY_VARS_gNB *gNB, int SFN, int Slot, nfapi_nr_prach_pdu_t *prach_pdu)
|
||||
{
|
||||
int prach_id = find_nr_prach(gNB, SFN, Slot, SEARCH_EXIST_OR_FREE);
|
||||
AssertFatal(((prach_id >= 0) && (prach_id < NUMBER_OF_NR_PRACH_MAX)), "illegal or no prach_id found!!! prach_id %d\n", prach_id);
|
||||
gNB_PRACH_list_t *prach = &gNB->prach_vars.list[prach_id];
|
||||
prach_item_t *prach = find_nr_prach(&gNB->prach_list, SFN, Slot, SEARCH_EXIST_OR_FREE);
|
||||
if (!prach) {
|
||||
LOG_W(PHY, "no free space for a new detected rach, discarding\n");
|
||||
return NULL;
|
||||
}
|
||||
const int fmt = prach_pdu->prach_format;
|
||||
NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
|
||||
// we set only elements as the whole structure has been cleaned when we release it
|
||||
prach->frame = SFN;
|
||||
prach->slot = Slot;
|
||||
const int format = prach_pdu->prach_format;
|
||||
prach->num_slots = (format < 4) ? get_long_prach_dur(format, gNB->frame_parms.numerology_index) : 1;
|
||||
prach->num_slots = fmt < 4 ? get_long_prach_dur(fmt, fp->numerology_index) : 1;
|
||||
if (gNB->common_vars.beam_id) {
|
||||
int n_symb = get_nr_prach_duration(prach_pdu->prach_format);
|
||||
prach->beam_nb = calloc(prach_pdu->beamforming.dig_bf_interface, sizeof(*prach->beam_nb));
|
||||
AssertFatal(prach_pdu->beamforming.dig_bf_interface < NFAPI_MAX_NUM_BG_IF,
|
||||
"impossible beams size %d\n",
|
||||
prach_pdu->beamforming.dig_bf_interface);
|
||||
for (int i = 0; i < prach_pdu->beamforming.dig_bf_interface; i++) {
|
||||
int fapi_beam_idx = prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list[i].beam_idx;
|
||||
int start_symb = prach_pdu->prach_start_symbol + i * n_symb;
|
||||
int bitmap = SL_to_bitmap(start_symb, n_symb);
|
||||
prach->beam_nb[i] = beam_index_allocation(gNB->enable_analog_das,
|
||||
fapi_beam_idx,
|
||||
&gNB->gNB_config.analog_beamforming_ve,
|
||||
&gNB->common_vars,
|
||||
Slot,
|
||||
NR_NUMBER_OF_SYMBOLS_PER_SLOT,
|
||||
bitmap);
|
||||
prach->beams[i] = beam_index_allocation(gNB->enable_analog_das,
|
||||
fapi_beam_idx,
|
||||
&gNB->gNB_config.analog_beamforming_ve,
|
||||
&gNB->common_vars,
|
||||
Slot,
|
||||
NR_NUMBER_OF_SYMBOLS_PER_SLOT,
|
||||
bitmap);
|
||||
}
|
||||
}
|
||||
LOG_D(NR_PHY,"Copying prach pdu %d bytes to index %d\n", (int)sizeof(*prach_pdu), prach_id);
|
||||
memcpy(&prach->pdu, prach_pdu, sizeof(*prach_pdu));
|
||||
return prach_id;
|
||||
prach->pdu = *prach_pdu;
|
||||
nfapi_nr_prach_config_t *cfg = &gNB->gNB_config.prach_config;
|
||||
nfapi_nr_num_prach_fd_occasions_t *occ = &cfg->num_prach_fd_occasions_list[prach_pdu->num_ra];
|
||||
prach->rootSequenceIndex = occ->prach_root_sequence_index.value;
|
||||
prach->numrootSequenceIndex = occ->num_root_sequences.value;
|
||||
prach->msg1_frequencystart = occ->k1.value;
|
||||
prach->mu = cfg->prach_sub_c_spacing.value;
|
||||
prach->prach_sequence_length = cfg->prach_sequence_length.value;
|
||||
prach->restricted_set = cfg->restricted_set_config.value;
|
||||
prach->numerology_index = fp->numerology_index;
|
||||
prach->nb_rx = gNB->gNB_config.carrier_config.num_rx_ant.value;
|
||||
prach->Xu = gNB->X_u;
|
||||
prach->rx_prach = &gNB->rx_prach;
|
||||
return prach;
|
||||
}
|
||||
|
||||
void init_prach_ru_list(RU_t *ru)
|
||||
static void rx_nr_prach_ru_internal(prach_item_t *p,
|
||||
int beam_id,
|
||||
int prachStartSymbol,
|
||||
int prachOccasion,
|
||||
int32_t **rxdata,
|
||||
NR_DL_FRAME_PARMS *fp,
|
||||
int N_TA_offset)
|
||||
{
|
||||
AssertFatal(ru != NULL, "ru is null\n");
|
||||
for (int i = 0; i < NUMBER_OF_NR_RU_PRACH_MAX; i++) {
|
||||
ru->prach_list[i].frame = -1;
|
||||
ru->prach_list[i].slot = -1;
|
||||
ru->prach_list[i].num_slots = -1;
|
||||
}
|
||||
pthread_mutex_init(&ru->prach_list_mutex, NULL);
|
||||
}
|
||||
|
||||
int16_t find_nr_prach_ru(RU_t *ru,int frame,int slot, find_type_t type)
|
||||
{
|
||||
AssertFatal(ru != NULL, "ru is null\n");
|
||||
pthread_mutex_lock(&ru->prach_list_mutex);
|
||||
for (int i = 0; i < NUMBER_OF_NR_RU_PRACH_MAX; i++) {
|
||||
RU_PRACH_list_t *p = ru->prach_list + i;
|
||||
LOG_D(PHY, "searching for PRACH in %d.%d : prach_index %d=> %d.%d\n", frame, slot, i, p->frame, p->slot);
|
||||
if ((type == SEARCH_EXIST_OR_FREE) && (p->frame == -1) && (p->slot == -1)) {
|
||||
pthread_mutex_unlock(&ru->prach_list_mutex);
|
||||
return i;
|
||||
} else if ((type == SEARCH_EXIST) && (p->frame == frame) && (p->slot + p->num_slots - 1 == slot)) {
|
||||
pthread_mutex_unlock(&ru->prach_list_mutex);
|
||||
return i;
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&ru->prach_list_mutex);
|
||||
return -1;
|
||||
}
|
||||
|
||||
void nr_fill_prach_ru(RU_t *ru, int SFN, int Slot, nfapi_nr_prach_pdu_t *prach_pdu, int *beam_id)
|
||||
{
|
||||
int prach_id = find_nr_prach_ru(ru, SFN, Slot, SEARCH_EXIST_OR_FREE);
|
||||
AssertFatal((prach_id >= 0) && (prach_id < NUMBER_OF_NR_PRACH_MAX),
|
||||
"illegal or no prach_id found!!! prach_id %d\n",
|
||||
prach_id);
|
||||
|
||||
pthread_mutex_lock(&ru->prach_list_mutex);
|
||||
ru->prach_list[prach_id].frame = SFN;
|
||||
ru->prach_list[prach_id].slot = Slot;
|
||||
const int fmt = prach_pdu->prach_format;
|
||||
ru->prach_list[prach_id].num_slots = (fmt < 4) ? get_long_prach_dur(fmt, ru->nr_frame_parms->numerology_index) : 1;
|
||||
ru->prach_list[prach_id].fmt = fmt;
|
||||
ru->prach_list[prach_id].numRA = prach_pdu->num_ra;
|
||||
ru->prach_list[prach_id].beam = beam_id;
|
||||
ru->prach_list[prach_id].prachStartSymbol = prach_pdu->prach_start_symbol;
|
||||
ru->prach_list[prach_id].num_prach_ocas = prach_pdu->num_prach_ocas;
|
||||
pthread_mutex_unlock(&ru->prach_list_mutex);
|
||||
}
|
||||
|
||||
void free_nr_ru_prach_entry(RU_t *ru, int prach_id)
|
||||
{
|
||||
pthread_mutex_lock(&ru->prach_list_mutex);
|
||||
ru->prach_list[prach_id].frame = -1;
|
||||
ru->prach_list[prach_id].slot = -1;
|
||||
pthread_mutex_unlock(&ru->prach_list_mutex);
|
||||
}
|
||||
|
||||
void rx_nr_prach_ru(RU_t *ru,
|
||||
int prachFormat,
|
||||
int numRA,
|
||||
int beam,
|
||||
int prachStartSymbol,
|
||||
int prachStartSlot,
|
||||
int prachOccasion,
|
||||
int frame,
|
||||
int slot)
|
||||
{
|
||||
AssertFatal(ru != NULL,"ru is null\n");
|
||||
|
||||
NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
|
||||
int slot2 = slot;
|
||||
int16_t *prach[ru->nb_rx];
|
||||
int prach_sequence_length = ru->config.prach_config.prach_sequence_length.value;
|
||||
int msg1_frequencystart = ru->config.prach_config.num_prach_fd_occasions_list[numRA].k1.value;
|
||||
const uint8_t prach_mu = ru->config.prach_config.prach_sub_c_spacing.value;
|
||||
|
||||
int sample_offset_slot;
|
||||
const int sum = fp->ofdm_symbol_size + fp->nb_prefix_samples;
|
||||
const int sum0 = fp->ofdm_symbol_size + fp->nb_prefix_samples0;
|
||||
if (prachStartSymbol == 0) {
|
||||
sample_offset_slot = 0;
|
||||
} else if (fp->slots_per_subframe == 1) {
|
||||
if (prachStartSymbol <= 7)
|
||||
sample_offset_slot = (fp->ofdm_symbol_size + fp->nb_prefix_samples) * (prachStartSymbol - 1) + (fp->ofdm_symbol_size + fp->nb_prefix_samples0);
|
||||
sample_offset_slot = sum * (prachStartSymbol - 1) + sum0;
|
||||
else
|
||||
sample_offset_slot = (fp->ofdm_symbol_size + fp->nb_prefix_samples) * (prachStartSymbol - 2) + (fp->ofdm_symbol_size + fp->nb_prefix_samples0) * 2;
|
||||
sample_offset_slot = sum * (prachStartSymbol - 2) + sum0 * 2;
|
||||
} else {
|
||||
if (!(slot%(fp->slots_per_subframe/2)))
|
||||
sample_offset_slot = (fp->ofdm_symbol_size + fp->nb_prefix_samples) * (prachStartSymbol - 1) + (fp->ofdm_symbol_size + fp->nb_prefix_samples0);
|
||||
if (!(p->slot % (fp->slots_per_subframe / 2)))
|
||||
sample_offset_slot = sum * (prachStartSymbol - 1) + sum0;
|
||||
else
|
||||
sample_offset_slot = (fp->ofdm_symbol_size + fp->nb_prefix_samples) * prachStartSymbol;
|
||||
sample_offset_slot = sum * prachStartSymbol;
|
||||
}
|
||||
|
||||
LOG_D(PHY,
|
||||
"frame %d, slot %d: doing rx_nr_prach_ru for format %d, numRA %d, prachStartSymbol %d, prachOccasion %d\n",
|
||||
frame,
|
||||
slot,
|
||||
prachFormat,
|
||||
numRA,
|
||||
p->frame,
|
||||
p->slot,
|
||||
p->pdu.prach_format,
|
||||
p->pdu.num_ra,
|
||||
prachStartSymbol,
|
||||
prachOccasion);
|
||||
|
||||
int16_t **rxsigF = ru->prach_rxsigF[prachOccasion];
|
||||
|
||||
AssertFatal(ru->if_south == LOCAL_RF || ru->if_south == REMOTE_IF5,
|
||||
"we shouldn't call this if if_south != LOCAL_RF or REMOTE_IF5\n");
|
||||
|
||||
for (int aa = 0; aa < ru->nb_rx; aa++) {
|
||||
if (prach_sequence_length == 0)
|
||||
slot2 = prachStartSlot;
|
||||
int idx = aa + beam * ru->nb_rx;
|
||||
prach[aa] = (int16_t*)&ru->common.rxdata[idx][fp->get_samples_slot_timestamp(slot2, fp, 0) + sample_offset_slot - ru->N_TA_offset];
|
||||
}
|
||||
|
||||
int reps;
|
||||
int Ncp;
|
||||
int dftlen;
|
||||
int mu = fp->numerology_index;
|
||||
int mu = p->numerology_index;
|
||||
|
||||
if (prach_sequence_length == 0) {
|
||||
if (p->prach_sequence_length == 0) {
|
||||
LOG_D(PHY,
|
||||
"PRACH (ru %d) in %d.%d, format %d, msg1_frequencyStart %d\n",
|
||||
ru->idx,
|
||||
frame,
|
||||
slot2,
|
||||
prachFormat,
|
||||
msg1_frequencystart);
|
||||
switch (prachFormat) {
|
||||
case 0:
|
||||
reps = 1;
|
||||
Ncp = 3168;
|
||||
dftlen = 24576;
|
||||
break;
|
||||
"PRACH in %d.%d, format %d, msg1_frequencyStart %d\n",
|
||||
p->frame,
|
||||
p->slot,
|
||||
p->pdu.prach_format,
|
||||
p->msg1_frequencystart);
|
||||
switch (p->pdu.prach_format) {
|
||||
case 0:
|
||||
reps = 1;
|
||||
Ncp = 3168;
|
||||
dftlen = 24576;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
reps = 2;
|
||||
Ncp = 21024;
|
||||
dftlen = 24576;
|
||||
break;
|
||||
case 1:
|
||||
reps = 2;
|
||||
Ncp = 21024;
|
||||
dftlen = 24576;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
reps = 4;
|
||||
Ncp = 4688;
|
||||
dftlen = 24576;
|
||||
break;
|
||||
case 2:
|
||||
reps = 4;
|
||||
Ncp = 4688;
|
||||
dftlen = 24576;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
reps = 4;
|
||||
Ncp = 3168;
|
||||
dftlen = 6144;
|
||||
break;
|
||||
case 3:
|
||||
reps = 4;
|
||||
Ncp = 3168;
|
||||
dftlen = 6144;
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0, "Illegal prach format %d for length 839\n", prachFormat);
|
||||
break;
|
||||
default:
|
||||
AssertFatal(1 == 0, "Illegal prach format %d for length 839\n", p->pdu.prach_format);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
LOG_D(PHY,
|
||||
"PRACH (ru %d) in %d.%d, format %s, msg1_frequencyStart %d,startSymbol %d\n",
|
||||
ru->idx,
|
||||
frame,
|
||||
slot,
|
||||
prachfmt[prachFormat],
|
||||
msg1_frequencystart,
|
||||
prachStartSymbol);
|
||||
switch (prachFormat) {
|
||||
case 4: //A1
|
||||
reps = 2;
|
||||
Ncp = 288 >> mu;
|
||||
break;
|
||||
"PRACH in %d.%d, format %s, msg1_frequencyStart %d,startSymbol %d\n",
|
||||
p->frame,
|
||||
p->slot,
|
||||
prachfmt[p->pdu.prach_format],
|
||||
p->msg1_frequencystart,
|
||||
prachStartSymbol);
|
||||
switch (p->pdu.prach_format) {
|
||||
case 4: // A1
|
||||
reps = 2;
|
||||
Ncp = 288 >> mu;
|
||||
break;
|
||||
|
||||
case 5: //A2
|
||||
reps = 4;
|
||||
Ncp = 576 >> mu;
|
||||
break;
|
||||
case 5: // A2
|
||||
reps = 4;
|
||||
Ncp = 576 >> mu;
|
||||
break;
|
||||
|
||||
case 6: //A3
|
||||
reps = 6;
|
||||
Ncp = 864 >> mu;
|
||||
break;
|
||||
case 6: // A3
|
||||
reps = 6;
|
||||
Ncp = 864 >> mu;
|
||||
break;
|
||||
|
||||
case 7: //B1
|
||||
reps = 2;
|
||||
Ncp = 216 >> mu;
|
||||
break;
|
||||
case 7: // B1
|
||||
reps = 2;
|
||||
Ncp = 216 >> mu;
|
||||
break;
|
||||
|
||||
/*
|
||||
// B2 and B3 do not exist in FAPI
|
||||
case 4: //B2
|
||||
reps = 4;
|
||||
Ncp = 360 >> mu;
|
||||
break;
|
||||
/*
|
||||
// B2 and B3 do not exist in FAPI
|
||||
case 4: //B2
|
||||
reps = 4;
|
||||
Ncp = 360 >> mu;
|
||||
break;
|
||||
|
||||
case 5: //B3
|
||||
reps = 6;
|
||||
Ncp = 504 >> mu;
|
||||
break;
|
||||
*/
|
||||
case 5: //B3
|
||||
reps = 6;
|
||||
Ncp = 504 >> mu;
|
||||
break;
|
||||
*/
|
||||
|
||||
case 8: //B4
|
||||
reps = 12;
|
||||
Ncp = 936 >> mu;
|
||||
break;
|
||||
case 8: // B4
|
||||
reps = 12;
|
||||
Ncp = 936 >> mu;
|
||||
break;
|
||||
|
||||
case 9: //C0
|
||||
reps = 1;
|
||||
Ncp = 1240 >> mu;
|
||||
break;
|
||||
case 9: // C0
|
||||
reps = 1;
|
||||
Ncp = 1240 >> mu;
|
||||
break;
|
||||
|
||||
case 10: //C2
|
||||
reps = 4;
|
||||
Ncp = 2048 >> mu;
|
||||
break;
|
||||
case 10: // C2
|
||||
reps = 4;
|
||||
Ncp = 2048 >> mu;
|
||||
break;
|
||||
|
||||
default:
|
||||
AssertFatal(1==0,"unknown prach format %x\n",prachFormat);
|
||||
break;
|
||||
default:
|
||||
AssertFatal(1 == 0, "unknown prach format %x\n", p->pdu.prach_format);
|
||||
break;
|
||||
}
|
||||
dftlen = 2048 >> mu;
|
||||
}
|
||||
@@ -323,12 +267,11 @@ void rx_nr_prach_ru(RU_t *ru,
|
||||
//actually what we should be checking here is how often the current prach crosses a 0.5ms boundary.
|
||||
//I am not quite sure for which paramter set this would be the case,
|
||||
//so I will ignore it for now and just check if the prach starts on a 0.5ms boundary
|
||||
if(fp->numerology_index == 0) {
|
||||
if (p->numerology_index == 0) {
|
||||
if (prachStartSymbol == 0 || prachStartSymbol == 7)
|
||||
Ncp += 16;
|
||||
}
|
||||
else {
|
||||
if (slot%(fp->slots_per_subframe/2)==0 && prachStartSymbol == 0)
|
||||
} else {
|
||||
if (p->slot % (fp->slots_per_subframe / 2) == 0 && prachStartSymbol == 0)
|
||||
Ncp += 16;
|
||||
}
|
||||
|
||||
@@ -399,183 +342,156 @@ void rx_nr_prach_ru(RU_t *ru,
|
||||
|
||||
// Do forward transform
|
||||
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
|
||||
LOG_D(PHY, "rx_prach: Doing PRACH FFT for nb_rx:%d Ncp:%d dftlen:%d\n", ru->nb_rx, Ncp, dftlen);
|
||||
LOG_D(PHY, "rx_prach: Doing PRACH FFT for nb_rx:%d Ncp:%d dftlen:%d\n", p->nb_rx, Ncp, dftlen);
|
||||
}
|
||||
|
||||
const unsigned int K = get_prach_K(prach_sequence_length, prachFormat, fp->numerology_index, prach_mu);
|
||||
const uint8_t kbar = get_PRACH_k_bar(prach_mu, fp->numerology_index);
|
||||
const unsigned int K = get_prach_K(p->prach_sequence_length, p->pdu.prach_format, p->numerology_index, p->mu);
|
||||
const uint8_t kbar = get_PRACH_k_bar(p->mu, p->numerology_index);
|
||||
|
||||
int n_ra_prb = msg1_frequencystart;
|
||||
int n_ra_prb = p->msg1_frequencystart;
|
||||
int k = (12*n_ra_prb) - 6*fp->N_RB_UL;
|
||||
|
||||
int N_ZC = (prach_sequence_length==0)?839:139;
|
||||
int N_ZC = (p->prach_sequence_length == 0) ? 839 : 139;
|
||||
|
||||
if (k<0) k+=(fp->ofdm_symbol_size);
|
||||
|
||||
k*=K;
|
||||
k+=kbar;
|
||||
|
||||
for (int aa=0; aa<ru->nb_rx; aa++) {
|
||||
AssertFatal(prach[aa]!=NULL,"prach[%d] is null\n",aa);
|
||||
for (int aa = 0; aa < p->nb_rx; aa++) {
|
||||
// Fixme: slot or slot makes no sense ???
|
||||
int slot2 = p->prach_sequence_length ? p->slot : p->slot;
|
||||
int idx = aa + beam_id * p->nb_rx;
|
||||
c16_t *prach = (c16_t *)&rxdata[idx][fp->get_samples_slot_timestamp(slot2, fp, 0) + sample_offset_slot - N_TA_offset];
|
||||
|
||||
// do DFT
|
||||
int16_t *prach2 = prach[aa] + (2*Ncp); // times 2 for complex samples
|
||||
for (int i = 0; i < reps; i++)
|
||||
dft(dftsize, prach2 + 2*dftlen*i, rxsigF[aa] + 2*dftlen*i, 1);
|
||||
|
||||
//LOG_M("ru_rxsigF_tmp.m","rxsFtmp", rxsigF[aa], dftlen*2*reps, 1, 1);
|
||||
|
||||
//Coherent combining of PRACH repetitions (assumes channel does not change, to be revisted for "long" PRACH)
|
||||
LOG_D(PHY,"Doing PRACH combining of %d reptitions N_ZC %d\n",reps,N_ZC);
|
||||
int16_t rxsigF_tmp[N_ZC<<1];
|
||||
// if (k+N_ZC > dftlen) { // PRACH signal is split around DC
|
||||
int16_t *rxsigF2=rxsigF[aa];
|
||||
int k2=k<<1;
|
||||
|
||||
for (int j=0;j<N_ZC<<1;j++,k2++) {
|
||||
if (k2==(dftlen<<1)) k2=0;
|
||||
rxsigF_tmp[j] = rxsigF2[k2];
|
||||
for (int i=1;i<reps;i++) rxsigF_tmp[j] += rxsigF2[k2+(i*dftlen<<1)];
|
||||
c16_t *prach2 = prach + Ncp;
|
||||
c16_t rxsigF_tmp[N_ZC];
|
||||
memset(rxsigF_tmp, 0, sizeof(rxsigF_tmp));
|
||||
for (int i = 0; i < reps; i++, prach2 += dftlen) {
|
||||
c16_t tmp[dftlen] __attribute__((aligned(32)));
|
||||
dft(dftsize, (int16_t *)prach2, (int16_t *)tmp, 1);
|
||||
// Coherent combining of PRACH repetitions (assumes channel does not change, to be revisted for "long" PRACH)
|
||||
LOG_D(PHY, "Doing PRACH combining of %d reptitions N_ZC %d\n", reps, N_ZC);
|
||||
// if (k+N_ZC > dftlen) { // PRACH signal is split around DC
|
||||
int k2 = k;
|
||||
for (int j = 0; j < N_ZC; j++, k2++) {
|
||||
if (k2 == dftlen)
|
||||
k2 = 0;
|
||||
rxsigF_tmp[j] = c16add(rxsigF_tmp[j], tmp[k2]);
|
||||
}
|
||||
}
|
||||
memcpy((void*)rxsigF2,(void *)rxsigF_tmp,N_ZC<<2);
|
||||
memcpy(p->rxsigF[prachOccasion][aa], rxsigF_tmp, sizeof(rxsigF_tmp));
|
||||
}
|
||||
}
|
||||
|
||||
void rx_nr_prach(PHY_VARS_gNB *gNB,
|
||||
nfapi_nr_prach_pdu_t *prach_pdu,
|
||||
int prachOccasion,
|
||||
int frame,
|
||||
int slot,
|
||||
uint16_t *max_preamble,
|
||||
uint16_t *max_preamble_energy,
|
||||
uint16_t *max_preamble_delay)
|
||||
void rx_nr_prach_ru(prach_item_t *p, int32_t **rxdata, NR_DL_FRAME_PARMS *fp, int N_TA_offset)
|
||||
{
|
||||
AssertFatal(gNB != NULL, "Can only be called from gNB\n");
|
||||
nfapi_nr_prach_config_t *cfg = &gNB->gNB_config.prach_config;
|
||||
NR_DL_FRAME_PARMS *fp;
|
||||
int N_dur = get_nr_prach_duration(p->pdu.prach_format);
|
||||
LOG_D(NR_PHY_RACH, "%d.%d try to decode %d occasions \n", p->frame, p->slot, p->pdu.num_prach_ocas);
|
||||
for (int prach_oc = 0; prach_oc < p->pdu.num_prach_ocas; prach_oc++) {
|
||||
int prachStartSymbol = p->pdu.prach_start_symbol + prach_oc * N_dur;
|
||||
int beam_id = p->beams[prach_oc];
|
||||
// comment FK: the standard 38.211 section 5.3.2 has one extra term +14*N_RA_slot. This is because there prachStartSymbol is
|
||||
// given wrt to start of the 15kHz slot or 60kHz slot. Here we work slot based, so this function is anyway only called in slots
|
||||
// where there is PRACH. Its up to the MAC to schedule another PRACH PDU in the case there are there N_RA_slot \in {0,1}.
|
||||
rx_nr_prach_ru_internal(p, beam_id, prachStartSymbol, prach_oc, rxdata, fp, N_TA_offset);
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t rootSequenceIndex;
|
||||
int numrootSequenceIndex;
|
||||
uint8_t restricted_set;
|
||||
uint8_t n_ra_prb=0xFF;
|
||||
int nb_rx;
|
||||
rx_prach_out_t rx_nr_prach(const prach_item_t *in, int occasion)
|
||||
{
|
||||
rx_prach_out_t out = {};
|
||||
uint16_t preamble_index0 = 0;
|
||||
uint16_t numshift = 0;
|
||||
int first_nonzero_root_idx = 0;
|
||||
bool new_dft = false;
|
||||
int log2_ifft_size = 10;
|
||||
|
||||
int16_t **rxsigF = gNB->prach_vars.rxsigF;
|
||||
const int nb_rx = in->nb_rx;
|
||||
const int NCS = in->pdu.num_cs;
|
||||
const int prach_fmt = in->pdu.prach_format;
|
||||
const int N_ZC = in->prach_sequence_length == 0 ? 839 : 139;
|
||||
|
||||
uint8_t preamble_index;
|
||||
uint16_t NCS=99,NCS2;
|
||||
uint16_t preamble_offset=0,preamble_offset_old;
|
||||
int16_t preamble_shift=0;
|
||||
uint32_t preamble_shift2;
|
||||
uint16_t preamble_index0=0,n_shift_ra=0,n_shift_ra_bar;
|
||||
uint16_t d_start=0;
|
||||
uint16_t numshift=0;
|
||||
const uint16_t *prach_root_sequence_map;
|
||||
uint8_t not_found;
|
||||
uint16_t u;
|
||||
int16_t *Xu=0;
|
||||
uint16_t first_nonzero_root_idx=0;
|
||||
uint8_t new_dft=0;
|
||||
int32_t lev;
|
||||
int16_t levdB;
|
||||
int log2_ifft_size=10;
|
||||
int16_t prach_ifft_tmp[2048*2] __attribute__((aligned(32)));
|
||||
int32_t *prach_ifft=(int32_t*)NULL;
|
||||
|
||||
fp = &gNB->frame_parms;
|
||||
LOG_D(NR_PHY_RACH,
|
||||
"L1 PRACH RX: rooSequenceIndex %d, numRootSeqeuences %d, NCS %d, N_ZC %d, format %d \n",
|
||||
in->rootSequenceIndex,
|
||||
in->numrootSequenceIndex,
|
||||
NCS,
|
||||
N_ZC,
|
||||
prach_fmt);
|
||||
|
||||
nb_rx = gNB->gNB_config.carrier_config.num_rx_ant.value;
|
||||
rootSequenceIndex = cfg->num_prach_fd_occasions_list[prach_pdu->num_ra].prach_root_sequence_index.value;
|
||||
numrootSequenceIndex = cfg->num_prach_fd_occasions_list[prach_pdu->num_ra].num_root_sequences.value;
|
||||
NCS = prach_pdu->num_cs;//cfg->num_prach_fd_occasions_list[0].prach_zero_corr_conf.value;
|
||||
int prach_sequence_length = cfg->prach_sequence_length.value;
|
||||
int msg1_frequencystart = cfg->num_prach_fd_occasions_list[prach_pdu->num_ra].k1.value;
|
||||
// int num_unused_root_sequences = cfg->num_prach_fd_occasions_list[0].num_unused_root_sequences.value;
|
||||
// cfg->num_prach_fd_occasions_list[0].unused_root_sequences_list
|
||||
|
||||
restricted_set = cfg->restricted_set_config.value;
|
||||
|
||||
uint8_t prach_fmt = prach_pdu->prach_format;
|
||||
uint16_t N_ZC = (prach_sequence_length==0)?839:139;
|
||||
|
||||
LOG_D(PHY,"L1 PRACH RX: rooSequenceIndex %d, numRootSeqeuences %d, NCS %d, N_ZC %d, format %d \n",rootSequenceIndex,numrootSequenceIndex,NCS,N_ZC,prach_fmt);
|
||||
|
||||
prach_ifft = gNB->prach_vars.prach_ifft;
|
||||
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
|
||||
if ((frame&1023) < 20) LOG_D(PHY,"PRACH (gNB) : running rx_prach for slot %d, msg1_frequencystart %d, rootSequenceIndex %d\n", slot, msg1_frequencystart, rootSequenceIndex);
|
||||
if ((in->frame & 1023) < 20)
|
||||
LOG_D(PHY, "PRACH (gNB) : running rx_prach for slot %d, rootSequenceIndex %d\n", in->slot, in->rootSequenceIndex);
|
||||
}
|
||||
|
||||
start_meas(&gNB->rx_prach);
|
||||
start_meas(in->rx_prach);
|
||||
|
||||
prach_root_sequence_map = (cfg->prach_sequence_length.value==0) ? prach_root_sequence_map_0_3 : prach_root_sequence_map_abc;
|
||||
const uint16_t *prach_root_sequence_map =
|
||||
in->prach_sequence_length == 0 ? prach_root_sequence_map_0_3 : prach_root_sequence_map_abc;
|
||||
|
||||
// PDP is oversampled, e.g. 1024 sample instead of 839
|
||||
// Adapt the NCS (zero-correlation zones) with oversampling factor e.g. 1024/839
|
||||
NCS2 = (N_ZC==839) ? ((NCS<<10)/839) : ((NCS<<8)/139);
|
||||
int NCS2 = N_ZC == 839 ? (NCS << 10) / 839 : (NCS << 8) / 139;
|
||||
|
||||
if (NCS2==0) NCS2 = N_ZC;
|
||||
if (NCS2 == 0)
|
||||
NCS2 = N_ZC;
|
||||
|
||||
int preamble_offset = 0, preamble_offset_old = 99;
|
||||
|
||||
preamble_offset_old = 99;
|
||||
|
||||
|
||||
*max_preamble_energy = 0;
|
||||
*max_preamble_delay = 0;
|
||||
*max_preamble = 0;
|
||||
int16_t prachF[2 * 1024];
|
||||
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
|
||||
int16_t preamble_shift = 0;
|
||||
const int dft_sz = N_ZC == 839 ? 1024 : 256;
|
||||
int32_t prach_ifft[dft_sz] __attribute__((aligned(32)));
|
||||
for (int preamble_index = 0; preamble_index < 64; preamble_index++) {
|
||||
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
|
||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],(N_ZC==839) ? 840: 140));
|
||||
if (en>60) LOG_D(PHY,"frame %d, slot %d : Trying preamble %d \n",frame,slot,preamble_index);
|
||||
int en = dB_fixed(signal_energy((int32_t *)in->rxsigF[occasion][0], N_ZC == 839 ? 840 : 140));
|
||||
if (en > 60)
|
||||
LOG_D(PHY, "frame %d, slot %d : Trying preamble %d \n", in->frame, in->slot, preamble_index);
|
||||
}
|
||||
if (restricted_set == 0) {
|
||||
if (in->restricted_set == 0) {
|
||||
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
|
||||
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
|
||||
|
||||
if (preamble_offset != preamble_offset_old) {
|
||||
preamble_offset_old = preamble_offset;
|
||||
new_dft = 1;
|
||||
new_dft = true;
|
||||
// This is the \nu corresponding to the preamble index
|
||||
preamble_shift = 0;
|
||||
}
|
||||
|
||||
else {
|
||||
preamble_shift -= NCS;
|
||||
} else {
|
||||
preamble_shift -= NCS;
|
||||
|
||||
if (preamble_shift < 0)
|
||||
preamble_shift+=N_ZC;
|
||||
preamble_shift += N_ZC;
|
||||
}
|
||||
} else { // This is the high-speed case
|
||||
new_dft = 0;
|
||||
new_dft = false;
|
||||
uint16_t nr_du[NR_PRACH_SEQ_LEN_L - 1];
|
||||
nr_fill_du(N_ZC, prach_root_sequence_map, nr_du);
|
||||
// set preamble_offset to initial rootSequenceIndex and look if we need more root sequences for this
|
||||
// preamble index and find the corresponding cyclic shift
|
||||
// Check if all shifts for that root have been processed
|
||||
int n_shift_ra = 0, n_shift_ra_bar, d_start = 0;
|
||||
if (preamble_index0 == numshift) {
|
||||
not_found = 1;
|
||||
new_dft = 1;
|
||||
bool not_found = true;
|
||||
new_dft = true;
|
||||
preamble_index0 -= numshift;
|
||||
//(preamble_offset==0 && numshift==0) ? (preamble_offset) : (preamble_offset++);
|
||||
|
||||
while (not_found == 1) {
|
||||
while (not_found) {
|
||||
// current root depending on rootSequenceIndex
|
||||
int index = (rootSequenceIndex + preamble_offset) % N_ZC;
|
||||
|
||||
u = prach_root_sequence_map[index];
|
||||
|
||||
int index = (in->rootSequenceIndex + preamble_offset) % N_ZC;
|
||||
int u = nr_du[prach_root_sequence_map[index]];
|
||||
uint16_t n_group_ra = 0;
|
||||
|
||||
if ((nr_du[u] < (N_ZC / 3)) && (nr_du[u] >= NCS) ) {
|
||||
n_shift_ra = nr_du[u] / NCS;
|
||||
d_start = (nr_du[u] << 1) + (n_shift_ra * NCS);
|
||||
|
||||
if (u < (N_ZC / 3) && u >= NCS) {
|
||||
n_shift_ra = u / NCS;
|
||||
d_start = (u << 1) + (n_shift_ra * NCS);
|
||||
n_group_ra = N_ZC / d_start;
|
||||
n_shift_ra_bar = max(0, (N_ZC-(nr_du[u] << 1) - (n_group_ra * d_start)) / N_ZC);
|
||||
} else if ((nr_du[u] >= (N_ZC / 3)) && (nr_du[u] <= ((N_ZC - NCS) >> 1))) {
|
||||
n_shift_ra = (N_ZC - (nr_du[u] << 1)) / NCS;
|
||||
d_start = N_ZC - (nr_du[u] << 1) + (n_shift_ra * NCS);
|
||||
n_group_ra = nr_du[u] / d_start;
|
||||
n_shift_ra_bar = min(n_shift_ra, max(0, (nr_du[u]- (n_group_ra * d_start)) / NCS));
|
||||
n_shift_ra_bar = max(0, (N_ZC - (u << 1) - (n_group_ra * d_start)) / N_ZC);
|
||||
} else if (u >= (N_ZC / 3) && u <= ((N_ZC - NCS) >> 1)) {
|
||||
n_shift_ra = (N_ZC - (u << 1)) / NCS;
|
||||
d_start = N_ZC - (u << 1) + (n_shift_ra * NCS);
|
||||
n_group_ra = u / d_start;
|
||||
n_shift_ra_bar = min(n_shift_ra, max(0, (u - (n_group_ra * d_start)) / NCS));
|
||||
} else {
|
||||
n_shift_ra = 0;
|
||||
n_shift_ra_bar = 0;
|
||||
@@ -584,12 +500,13 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
||||
// This is the number of cyclic shifts for the current root u
|
||||
numshift = (n_shift_ra * n_group_ra) + n_shift_ra_bar;
|
||||
// skip to next root and recompute parameters if numshift==0
|
||||
(numshift>0) ? (not_found = 0) : (preamble_offset++);
|
||||
numshift > 0 ? not_found = false : preamble_offset++;
|
||||
}
|
||||
}
|
||||
|
||||
if (n_shift_ra>0)
|
||||
preamble_shift = -((d_start * (preamble_index0/n_shift_ra)) + ((preamble_index0%n_shift_ra)*NCS)); // minus because the channel is h(t -\tau + Cv)
|
||||
preamble_shift = -(d_start * (preamble_index0 / n_shift_ra)
|
||||
+ (preamble_index0 % n_shift_ra) * NCS); // minus because the channel is h(t -\tau + Cv)
|
||||
else
|
||||
preamble_shift = 0;
|
||||
|
||||
@@ -602,14 +519,14 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
||||
first_nonzero_root_idx = preamble_offset;
|
||||
}
|
||||
|
||||
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
|
||||
// Compute DFT of RX signal (conjugate in->rxsigF[occasion], results in conjugate output) for each new rootSequenceIndex
|
||||
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
|
||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||
int en = dB_fixed(signal_energy((int32_t *)in->rxsigF[occasion][0], 840));
|
||||
if (en>60)
|
||||
LOG_D(PHY,
|
||||
"frame %d, slot %d : preamble index %d, NCS %d, N_ZC/NCS %d: offset %d, preamble shift %d , en %d)\n",
|
||||
frame,
|
||||
slot,
|
||||
in->frame,
|
||||
in->slot,
|
||||
preamble_index,
|
||||
NCS,
|
||||
N_ZC / NCS,
|
||||
@@ -618,44 +535,37 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
||||
en);
|
||||
}
|
||||
|
||||
LOG_D(PHY,"PRACH RX preamble_index %d, preamble_offset %d\n",preamble_index,preamble_offset);
|
||||
LOG_D(NR_PHY_RACH,
|
||||
"PRACH RX preamble_index %d, preamble_offset %d, preamb shift %d new dft %d\n",
|
||||
preamble_index,
|
||||
preamble_offset,
|
||||
preamble_shift,
|
||||
new_dft);
|
||||
|
||||
if (new_dft) {
|
||||
new_dft = false;
|
||||
|
||||
if (new_dft == 1) {
|
||||
new_dft = 0;
|
||||
|
||||
Xu = (int16_t*)gNB->X_u[preamble_offset-first_nonzero_root_idx];
|
||||
|
||||
c16_t *Xu = in->Xu[preamble_offset - first_nonzero_root_idx];
|
||||
LOG_D(PHY,"PRACH RX new dft preamble_offset-first_nonzero_root_idx %d\n",preamble_offset-first_nonzero_root_idx);
|
||||
|
||||
memset(prach_ifft,0,((N_ZC==839) ? 2048 : 256)*sizeof(int32_t));
|
||||
memset(prachF, 0, sizeof(int16_t) * 2 * 1024);
|
||||
memset(prach_ifft, 0, sizeof(prach_ifft));
|
||||
if (LOG_DUMPFLAG(DEBUG_PRACH)) {
|
||||
LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],N_ZC,1,1);
|
||||
LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
|
||||
LOG_M("prach_rxF0.m", "prach_rxF0", in->rxsigF[occasion][0], N_ZC, 1, 1);
|
||||
LOG_M("prach_rxF1.m", "prach_rxF1", in->rxsigF[occasion][1], 6144, 1, 1);
|
||||
}
|
||||
|
||||
c16_t prachF[dft_sz] __attribute__((aligned(32)));
|
||||
for (int aa = 0; aa < nb_rx; aa++) {
|
||||
// Do componentwise product with Xu* on each antenna
|
||||
|
||||
for (int offset = 0; offset < (N_ZC << 1); offset += 2) {
|
||||
prachF[offset] = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][offset] + (int32_t)Xu[offset+1]*rxsigF[aa][offset+1])>>15);
|
||||
prachF[offset+1] = (int16_t)(((int32_t)Xu[offset]*rxsigF[aa][offset+1] - (int32_t)Xu[offset+1]*rxsigF[aa][offset])>>15);
|
||||
// Do componentwise product with Xu* on each antenna
|
||||
for (int offset = 0; offset < N_ZC; offset++) {
|
||||
prachF[offset] = c16MulConjShift(Xu[offset], in->rxsigF[occasion][aa][offset], 15);
|
||||
}
|
||||
|
||||
memset(prachF + N_ZC, 0, sizeof(*prachF) * (dft_sz - N_ZC));
|
||||
// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
|
||||
if (N_ZC == 839) {
|
||||
idft(IDFT_1024, prachF, prach_ifft_tmp, 1);
|
||||
// compute energy and accumulate over receive antennas
|
||||
for (int i = 0; i < 1024; i++)
|
||||
prach_ifft[i] += (int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[i<<1] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)];
|
||||
} else {
|
||||
idft(IDFT_256, prachF, prach_ifft_tmp, 1);
|
||||
log2_ifft_size = 8;
|
||||
// compute energy and accumulate over receive antennas and repetitions for BR
|
||||
for (int i = 0; i < 256; i++)
|
||||
prach_ifft[i] += (int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[(i<<1)] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)];
|
||||
}
|
||||
c16_t prach_ifft_tmp[dft_sz] __attribute__((aligned(32)));
|
||||
idft(get_idft(dft_sz), (int16_t *)prachF, (int16_t *)prach_ifft_tmp, 1);
|
||||
// compute energy and accumulate over receive antennas
|
||||
for (int i = 0; i < dft_sz; i++)
|
||||
prach_ifft[i] += squaredMod(prach_ifft_tmp[i]);
|
||||
|
||||
if (LOG_DUMPFLAG(DEBUG_PRACH)) {
|
||||
if (aa == 0)
|
||||
@@ -678,23 +588,22 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
||||
}
|
||||
|
||||
} // new dft
|
||||
|
||||
// check energy in nth time shift, for
|
||||
|
||||
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
|
||||
// check energy in nth time shift, for
|
||||
|
||||
int preamble_shift2 = preamble_shift == 0 ? 0 : (preamble_shift << log2_ifft_size) / N_ZC;
|
||||
|
||||
for (int i = 0; i < NCS2; i++) {
|
||||
lev = (int32_t)prach_ifft[(preamble_shift2+i)];
|
||||
levdB = dB_fixed_times10(lev);
|
||||
if (levdB>*max_preamble_energy) {
|
||||
LOG_D(PHY,"preamble_index %d, delay %d en %d dB > %d dB\n",preamble_index,i,levdB,*max_preamble_energy);
|
||||
*max_preamble_energy = levdB;
|
||||
*max_preamble_delay = i; // Note: This has to be normalized to the 30.72 Ms/s sampling rate
|
||||
*max_preamble = preamble_index;
|
||||
int lev = prach_ifft[preamble_shift2 + i];
|
||||
int levdB = dB_fixed_times10(lev);
|
||||
if (levdB > out.max_preamble_energy || (levdB == out.max_preamble_energy && out.max_preamble_delay > i)) {
|
||||
LOG_D(NR_PHY_RACH, "preamble_index %d, delay %d en %d dB > %d dB\n", preamble_index, i, levdB, out.max_preamble_energy);
|
||||
out.max_preamble_energy = levdB;
|
||||
out.max_preamble_delay = i; // Note: This has to be normalized to the 30.72 Ms/s sampling rate
|
||||
out.max_preamble = preamble_index;
|
||||
}
|
||||
}
|
||||
}// preamble_index
|
||||
|
||||
} // preamble_index
|
||||
|
||||
// The conversion from *max_preamble_delay from TA value is done here.
|
||||
// It is normalized to the 30.72 Ms/s, considering the numerology, N_RB and the sampling rate
|
||||
@@ -711,34 +620,15 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
|
||||
// Format >3: 2048/2^mu samples @ 30.72 Ms/s, 2048/2^mu * 4 samples @ 122.88 Ms/s
|
||||
// By solving:
|
||||
// max_preamble_delay * ( (2048/2^mu*(fs/30.72M)) / 256 ) / fs = TA * 16 * 64 / 2^mu * Tc
|
||||
uint16_t *TA = max_preamble_delay;
|
||||
int mu = fp->numerology_index;
|
||||
if (cfg->prach_sequence_length.value == 0) {
|
||||
int mu = in->numerology_index;
|
||||
if (in->prach_sequence_length == 0) {
|
||||
if (prach_fmt == 0 || prach_fmt == 1 || prach_fmt == 2)
|
||||
*TA = *TA * 3 * (1 << mu) / 2;
|
||||
out.max_preamble_delay *= 3 * (1 << mu) / 2;
|
||||
else if (prach_fmt == 3)
|
||||
*TA = *TA * 3 * (1 << mu) / 8;
|
||||
}
|
||||
else *TA = *TA/2;
|
||||
|
||||
if (LOG_DUMPFLAG(DEBUG_PRACH)) {
|
||||
//int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||
// if (en>60) {
|
||||
int k = (12 * n_ra_prb) - 6 * fp->N_RB_UL;
|
||||
if (k < 0)
|
||||
k += fp->ofdm_symbol_size;
|
||||
|
||||
k*=12;
|
||||
k+=13;
|
||||
k*=2;
|
||||
|
||||
LOG_M("rxsigF.m","prach_rxF", &rxsigF[0][0], 12288, 1, 1);
|
||||
LOG_M("prach_rxF_comp0.m","prach_rxF_comp0", prachF, 1024, 1, 1);
|
||||
LOG_M("Xu.m","xu", Xu, N_ZC, 1, 1);
|
||||
LOG_M("prach_ifft0.m","prach_t0", prach_ifft, 1024, 1, 1);
|
||||
// }
|
||||
}
|
||||
stop_meas(&gNB->rx_prach);
|
||||
out.max_preamble_delay *= 3 * (1 << mu) / 8;
|
||||
} else
|
||||
out.max_preamble_delay /= 2;
|
||||
|
||||
stop_meas(in->rx_prach);
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
@@ -200,32 +200,18 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB,
|
||||
int slot,
|
||||
nfapi_nr_pusch_pdu_t *ulsch_pdu);
|
||||
|
||||
int nr_fill_prach(PHY_VARS_gNB *gNB, int SFN, int Slot, nfapi_nr_prach_pdu_t *prach_pdu);
|
||||
prach_item_t *nr_schedule_rx_prach(PHY_VARS_gNB *gNB, int SFN, int Slot, nfapi_nr_prach_pdu_t *prach_pdu);
|
||||
|
||||
void rx_nr_prach(PHY_VARS_gNB *gNB,
|
||||
nfapi_nr_prach_pdu_t *prach_pdu,
|
||||
int prachOccasion,
|
||||
int frame,
|
||||
int subframe,
|
||||
uint16_t *max_preamble,
|
||||
uint16_t *max_preamble_energy,
|
||||
uint16_t *max_preamble_delay);
|
||||
typedef struct rx_prach_out {
|
||||
uint16_t max_preamble;
|
||||
uint16_t max_preamble_energy;
|
||||
uint16_t max_preamble_delay;
|
||||
} rx_prach_out_t;
|
||||
rx_prach_out_t rx_nr_prach(const prach_item_t *, int occasion);
|
||||
|
||||
void rx_nr_prach_ru(RU_t *ru,
|
||||
int prach_fmt,
|
||||
int numRA,
|
||||
int beam,
|
||||
int prachStartSymbol,
|
||||
int prachStartSlot,
|
||||
int prachOccasion,
|
||||
int frame,
|
||||
int subframe);
|
||||
|
||||
void nr_fill_prach_ru(RU_t *ru,int SFN, int Slot, nfapi_nr_prach_pdu_t *prach_pdu, int *beam_nb);
|
||||
|
||||
int16_t find_nr_prach(PHY_VARS_gNB *gNB,int frame,int slot, find_type_t type);
|
||||
int16_t find_nr_prach_ru(RU_t *ru,int frame,int slot, find_type_t type);
|
||||
void rx_nr_prach_ru(prach_item_t *, int32_t **, NR_DL_FRAME_PARMS *frame_parms, int N_TA_offset);
|
||||
|
||||
prach_item_t *find_nr_prach(prach_list_t *, int frame, int slot, find_type_t type);
|
||||
void nr_fill_pucch(PHY_VARS_gNB *gNB,
|
||||
int frame,
|
||||
int slot,
|
||||
@@ -245,12 +231,9 @@ int nr_get_srs_signal(PHY_VARS_gNB *gNB,
|
||||
c16_t srs_received_signal[][gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)],
|
||||
c16_t srs_received_noise[][gNB->frame_parms.ofdm_symbol_size * (1 << srs_pdu->num_symbols)]);
|
||||
|
||||
void init_prach_list(PHY_VARS_gNB *gNB);
|
||||
void init_prach_ru_list(RU_t *ru);
|
||||
void free_nr_ru_prach_entry(RU_t *ru, int prach_id);
|
||||
int get_nr_prach_duration(uint8_t prach_format);
|
||||
|
||||
void free_nr_prach_entry(PHY_VARS_gNB *gNB, int prach_id);
|
||||
void free_nr_prach_entry(prach_list_t *, prach_item_t *);
|
||||
|
||||
void nr_decode_pucch1(c16_t **rxdataF,
|
||||
pucch_GroupHopping_t pucch_GroupHopping,
|
||||
|
||||
@@ -905,6 +905,11 @@ void nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue,
|
||||
rxdataF);
|
||||
|
||||
|
||||
if (csirs_config_pdu->measurement_bitmap == 0) {
|
||||
LOG_D(NR_PHY, "No CSI-RS measurements configured\n");
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t noise_power = 0;
|
||||
int16_t log2_re = 0;
|
||||
int16_t log2_maxh = 0;
|
||||
|
||||
+1
-18
@@ -190,19 +190,6 @@ typedef struct {
|
||||
task_ans_t *ans;
|
||||
} feptx_cmd_t;
|
||||
|
||||
typedef struct {
|
||||
int frame;
|
||||
int slot;
|
||||
int fmt;
|
||||
int numRA;
|
||||
int prachStartSymbol;
|
||||
int num_prach_ocas;
|
||||
int num_slots;
|
||||
int *beam;
|
||||
} RU_PRACH_list_t;
|
||||
|
||||
#define NUMBER_OF_NR_RU_PRACH_MAX 8
|
||||
#define NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX 12
|
||||
#define RU_RX_SLOT_DEPTH 4
|
||||
typedef struct RU_proc_t_s {
|
||||
/// Pointer to associated RU descriptor
|
||||
@@ -604,11 +591,7 @@ typedef struct RU_t_s {
|
||||
int32_t *bw_list[NUMBER_OF_eNB_MAX+1];
|
||||
/// beamforming weight vectors
|
||||
int32_t **beam_weights[NUMBER_OF_eNB_MAX+1][15];
|
||||
/// prach commands
|
||||
RU_PRACH_list_t prach_list[NUMBER_OF_NR_RU_PRACH_MAX];
|
||||
/// mutex for prach_list access
|
||||
pthread_mutex_t prach_list_mutex;
|
||||
/// received frequency-domain signal for PRACH (IF4p5 RRU)
|
||||
/// received frequency-domain signal for PRACH (IF4p5 RRU)
|
||||
int16_t **prach_rxsigF[NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX];
|
||||
/// received frequency-domain signal for PRACH BR (IF4p5 RRU)
|
||||
int16_t **prach_rxsigF_br[4];
|
||||
|
||||
@@ -993,6 +993,9 @@ extern int sync_var;
|
||||
#define MBSFN_FDD_SF6 0x10
|
||||
#define MBSFN_FDD_SF7 0x08
|
||||
#define MBSFN_FDD_SF8 0x04
|
||||
|
||||
#define NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX 12
|
||||
|
||||
typedef struct {
|
||||
pthread_mutex_t mutex_failure;
|
||||
bool failed;
|
||||
|
||||
+4
-23
@@ -134,28 +134,6 @@ typedef struct {
|
||||
nfapi_nr_dl_tti_ssb_pdu ssb_pdu;
|
||||
} NR_gNB_SSB_t;
|
||||
|
||||
typedef struct {
|
||||
int frame;
|
||||
int slot;
|
||||
// identifier for concurrent beams
|
||||
// prach duration in slots
|
||||
int num_slots;
|
||||
int *beam_nb;
|
||||
nfapi_nr_prach_pdu_t pdu;
|
||||
} gNB_PRACH_list_t;
|
||||
|
||||
#define NUMBER_OF_NR_PRACH_MAX 8
|
||||
|
||||
typedef struct {
|
||||
/// \brief ?.
|
||||
/// second index: rx antenna [0..63] (hard coded) \note Hard coded array size indexed by \c nb_antennas_rx.
|
||||
/// third index: frequency-domain sample [0..ofdm_symbol_size*12[
|
||||
int16_t **rxsigF;
|
||||
/// \brief local buffer to compute prach_ifft
|
||||
int32_t *prach_ifft;
|
||||
gNB_PRACH_list_t list[NUMBER_OF_NR_PRACH_MAX];
|
||||
} NR_gNB_PRACH;
|
||||
|
||||
typedef struct {
|
||||
uint8_t NumPRSResources;
|
||||
prs_config_t prs_cfg[NR_MAX_PRS_RESOURCES_PER_SET];
|
||||
@@ -430,7 +408,7 @@ typedef struct PHY_VARS_gNB_s {
|
||||
int max_nb_pusch;
|
||||
|
||||
NR_gNB_COMMON common_vars;
|
||||
NR_gNB_PRACH prach_vars;
|
||||
prach_list_t prach_list;
|
||||
NR_gNB_PRS prs_vars;
|
||||
NR_gNB_PUSCH *pusch_vars;
|
||||
NR_gNB_PUCCH_t *pucch;
|
||||
@@ -486,6 +464,9 @@ typedef struct PHY_VARS_gNB_s {
|
||||
|
||||
bool enable_analog_das;
|
||||
|
||||
time_stats_t l1_tx_proc;
|
||||
time_stats_t l1_rx_proc;
|
||||
|
||||
time_stats_t phy_proc_tx;
|
||||
time_stats_t phy_proc_rx;
|
||||
time_stats_t rx_prach;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user