第 5 部分。验证设置#
在本节中,您将使用双向 UDP 验证 ARC-OTA 设置。
步骤 1:添加 SIM 用户配置文件#
修改以下文件
oai_db.sql
此文件中预配置了 3 个 UE。要查找它们,请搜索
001010000000001
并根据需要添加或编辑它们。./targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-vnf.sa.band78.273prb.aerial.conf
如果您想更改 gNB 配置文件中的 MCC 和 MNC,请在 gNB 服务器上修改此文件。
步骤 2:设置 UE 和 SIM 卡#
作为参考,请使用以下链接:SIM 卡 – 4G 和 5G 参考软件 (open-cells.com)
使用 Open Cells Project 应用程序 “uicc-v2.6” 编程 SIM 卡,该应用程序可以从此处下载。
使用特定于 SIM 卡的 ADM 代码。如果错误的 ADM 使用了 8 次,SIM 卡将被永久锁定。
sudo ./program_uicc --adm 12345678 --imsi 001010000000001 --isdn 00000001 --acc 0001 --key fec86ba6eb707ed08905757b1bb44b8f --opc C42449363BBAD02B66D16BC975D77CC1 -spn "OpenAirInterface" --authenticate
Existing values in USIM
ICCID: 89860061100000000191
WARNING: iccid luhn encoding of last digit not done
USIM IMSI: 208920100001191
USIM MSISDN: 00000191
USIM Service Provider Name: OpenCells191
Setting new values
Reading UICC values after uploading new values
ICCID: 89860061100000000191
WARNING: iccid luhn encoding of last digit not done
USIM IMSI: 001010000000001
USIM MSISDN: 00000001
USIM Service Provider Name: OpenAirInterface
Succeeded to authentify with SQN: 64
set HSS SQN value as: 96
CUE 配置设置#
在 UE 上安装 “Magic IPERF” 应用程序
为了使用 CUE 进行测试,需要支持 Milenage 的测试 SIM 卡。以下内容必须在 SIM 卡上配置,并且必须与核心网络设置匹配:mcc、mnc、IMSI、Ki、OPc。
CUE 上的 APN 应根据核心网络设置进行配置。
启动 DNS。核心网络应分配移动 IP 地址和 DNS。如果未分配 DNS,请使用其他 Android 应用程序设置 DNS。
步骤 3. 运行端到端 OTA#
本节介绍如何运行从 UE 到边缘核心网络的端到端流量。
注意
UE 可以连接到近至 2-3 米的距离,最大范围为 10-15 米。建筑物外部的连接距离尚未验证。
启动 CN5G 核心网络#
使用以下命令启动 CN5G 核心网络。
sudo sysctl net.ipv4.conf.all.forwarding=1
sudo iptables -P FORWARD ACCEPT
cd ~/oai-cn5g
docker compose up -d
启动 CN5G 边缘应用程序#
CN5G 启动后,使用 oai-ext-dn
容器运行 IPERF。
docker exec -it oai-ext-dn /bin/bash
在 gNB 上启动 Aerial cuBB#
执行以下命令以设置 cuBB 容器。
# Run on host: start a docker terminal
docker exec -it $AERIAL_CUBB_CONTAINER /bin/bash
按照 Aerial cuBB 文档 构建和运行 cuphycontroller。以下说明用于构建和设置运行 cuphycontroller 的环境。以下命令必须在 cuBB 容器内运行。
cd /opt/nvidia/cuBB
export cuBB_SDK=$(pwd)
mkdir build && cd build
cmake ..
make -j
Aerial cuPHY 配置文件位于 /opt/nvidia/cuBB/cuPHY-CP/cuphycontroller/config
目录中。对于 ARC-OTA 1.5,已使用 cuphycontroller_P5G_FXN.yaml
针对 Gigabyte 服务器和 cuphycontroller_P5G_FXN_R750.yaml
针对 Dell R750 服务器验证了设置。
在运行 cuphycontroller 之前,编辑 cuphycontroller_<xyz>.yaml
配置文件以指向 ORU 的正确 MAC 地址和 gNB 上 FH 接口的正确 PCIe 地址(以下示例适用于 Gigabyte 服务器)。
sed -i "s/ nic:.*/ nic: 0000:b5:00.0/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_<xyz>.yaml
sed -i "s/ dst_mac_addr:.*/ dst_mac_addr: 6c:ad:ad:00:02:02/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_<xyz>.yaml
构建完成后并且配置文件更新后,退出容器。运行以下命令将更改提交到新镜像。镜像的名称将在稍后的 Docker Compose 配置中使用。
docker commit $AERIAL_CUBB_CONTAINER cubb-build:24-1
创建 NVIPC 源代码包#
在最新版本中,OAI 存储库中不再包含 NVIPC。您必须从 Aerial cuBB 容器复制源代码包,并将其添加到 OAI 构建文件中。执行以下命令以创建 nvipc_src.<data>.tar.gz
文件。
docker exec -it $AERIAL_CUBB_CONTAINER ./cuPHY-CP/gt_common_libs/pack_nvipc.sh
docker cp $AERIAL_CUBB_CONTAINER:/opt/nvidia/cuBB/cuPHY-CP/gt_common_libs/nvipc_src.<date>.tar.gz ~/openairinterface5g
这将创建并复制构建 Aerial 的 OAI L2+ 所需的 nvipc_src.<data>.tar.gz
存档。说明也可以在 Aerial FAPI 中找到。
构建 gNB Docker 镜像#
在 ARC-OTA 中,OAI 镜像分两步构建。说明可以在 Aerial FAPI 中找到。
注意
构建 Docker 镜像时,文件从文件系统复制到镜像中。构建镜像后,您必须在容器内更改配置。
OAI L2 的预构建步骤#
在为 Aerial 24-1 构建 OAI L2 时,请在构建之前删除
docker/Dockerfile.gNB.aerial.ubuntu20
文件中的第 50 行和第 51 行。(ARC-OTA 1.5 包括OAI 2024.w21
标签和 Aerial CUDA 加速 RAN(Layer 1)24-1)。这将在未来合并到 OAIdevelop
分支中。在同一文件中,在第 79 行添加
moreutils
。
moreutils \
删除 OAI FAPI 集成中 (
nfapi/oai_integration/aerial/fapi_vnf_p5.c
) 的p7_thread
的绑定。为此,请删除第 59-64 行(此更改将在未来合并到 OAIdevelop
分支中)。在 Gigabyte 服务器上,核心 8 被 L1 占用。在 Dell R750 上,此核心是空闲的,但 gNB 通常在 numa 0 上以奇数核心启动。//CPU_SET(8, &cpuset); //s = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset); //if (s != 0) // printf("failed to set afinity\n");
通过修改
nfapi/oai_integration/aerial/fapi_nvIPC.c
文件的第 609 行,确保 FAPI 轮询线程在隔离的核心上运行。在 Gigabyte 服务器和 Dell R750 服务器上,使用核心 21
stick_this_thread_to_core(21)
在 ARC 1.5 中使用的
OAI 2024.w21
标签中,还存在关于 PDU 长度截断的错误。这已在 OAI 的develop
分支上修复。当前的 ARC 版本已通过在 2024.w21OAI 2024.w21
标签之上应用 此 MR 进行了验证。cd ~/openairinterface5g/ wget https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/2797.patch git apply -3 2797.patch
使用以下命令构建 OAI L2 代码
cd ~/openairinterface5g/
docker build . -f docker/Dockerfile.base.ubuntu20 --tag ran-base:latest
docker build . -f docker/Dockerfile.gNB.aerial.ubuntu20 --tag oai-gnb-aerial:latest
这将创建两个镜像
ran-base:latest
包含构建 OAI 源代码的环境。这将用于构建oai-gnb-aerial:latest
镜像。oai-gnb-aerial:latest
将在稍后的 Docker Compose 脚本中用于创建 OAI L2 容器。
使用 Docker Compose 运行 gNB#
ARC-OTA 包括用于运行 gNB 软件的 Docker Compose 配置。有关如何使用 Docker Compose 运行的信息,请参阅 OAI 说明。Docker Compose 配置位于以下文件路径
~/openairinterface5g/ci-scripts/yaml_files/sa_gnb_aerial/docker-compose.yaml
在启动 gNB 之前,您需要更新 docker-compose.yaml
文件。
在第 27 行,将 cuBB 镜像切换为在前几个步骤中构建、提交和标记的镜像。
image: cubb-build:24-1
在第 30 行,向命令添加
sudo
。command: bash -c "sudo rm -rf /tmp/phy.log && sudo chmod +x /opt/nvidia/cuBB/aerial_l1_entrypoint.sh && /opt/nvidia/cuBB/aerial_l1_entrypoint.sh"
在第 37 行,如果您按照指南操作,请按如下方式更改 OAI 容器的
cpu_set
。Gigabyte 服务器
cpu_set: "13-20"
Dell R750 服务器
cpu_set: "23,25,27,29,31,33,35,37"
SMC-GH 服务器
cpuset: "11-18"
在第 60 行,为
oai.log
文件添加卷。- /var/log/aerial:/var/log/aerial
在第 61 行(卷之后),添加一个用于执行
nr-softmodem
的命令。这将替换 Docker 镜像中集成的默认命令。此新命令将设置优先级并创建一个带有时间戳的oai.log
文件。command: bash -c "chrt -f 99 /opt/oai-gnb/bin/nr-softmodem -O /opt/oai-gnb/etc/gnb.conf | ts | tee /var/log/aerial/oai.log"
按照说明操作后,您应该具有以下镜像
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
cubb-build 24-1 be7a5a94f2d3 10 seconds ago 26GB
nvcr.io/qhrjhjrvlsbu/aerial-cuda-accelerated-ran 24-1-cubb a66cf2a45fad 2 months ago 25.5GB
oai-gnb-aerial latest 0856b9969f42 3 weeks ago 4.88GB
ran-base latest c5d060d23529 3 weeks ago 2.42GB
Docker Compose 将启动运行 cuBB 和 OAI L2+ 的容器。Docker Compose 脚本包含 cuBB 的入口点脚本,您需要在运行之前修改该脚本。该脚本指向您要运行的 cuphycontroller_xxx.yaml
配置。此脚本位于以下文件路径
~/openairinterface5g/ci-scripts/yaml_files/sa_gnb_aerial/aerial_l1_entrypoint.sh
在运行 Docker Compose 之前,更新 aerial_l1_entrypoint.sh
文件。
最新的 ARC-OTA 版本不必构建
gdrcopy
。# cd "$cuBB_Path"/cuPHY-CP/external/gdrcopy/ || exit 1 # ./insmod.sh
在最新的 ARC-OTA 版本中,默认情况下您不是 root 用户。在以下命令中添加
sudo
,如果您使用的是 Dell R750,则包括P5G_FXN_R750
,如果您使用的是,则包括 P5G_FXN。sudo -E "$cuBB_Path"/build/cuPHY-CP/cuphycontroller/examples/cuphycontroller_scf P5G_FXN_R750
在运行 Docker Compose 脚本之前,您还需要为在启动 Aerial cuPHY Layer 1 之前运行的一些命令添加 root 权限。为此,请编辑
ci-scripts/yaml_files/sa_gnb_aerial/docker-compose.yaml
文件。command: bash -c " sudo rm -rf /tmp/phy.log && sudo chmod +x /opt/nvidia/cuBB/aerial_l1_entrypoint.sh && /opt/nvidia/cuBB/aerial_l1_entrypoint.sh"
此外,OAI L2 必须指向正确的配置,方法是编辑
ci-scripts/yaml_files/sa_gnb_aerial/docker-compose.yaml
文件中的以下行。所有 L2 配置都可以在targets/PROJECTS/GENERIC-NR-5GC/CONF
中找到。- ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-vnf.sa.band78.273prb.aerial.conf:/opt/oai-gnb/etc/gnb.conf
在
ci-scripts/yaml_files/sa_gnb_aerial/docker-compose.yaml
的第 37 行中,指定要用于 OAI l2 的核心。Gigabyte 服务器
cpuset: "13-20"
Dell R750 服务器
cpuset: "23,25,27,29,31,33,35,37"
SMC-GH 服务器
cpuset: "11-18"
现在您可以使用以下命令运行 ARC-OTA。
cd ~/openairinterface5g/ci-scripts/yaml_files/sa_gnb_aerial
docker compose up -d
// console of cuBB
docker logs -f nv-cubb
// console of oai
docker logs -f oai-gnb-aerial
// tail -f /var/log/aerial/oai.log
CUE 连接到 5G 网络#
将 CUE 退出飞行模式以开始将 UE 连接到网络。在启动 OAI L2 堆栈之前,请确保 CUE 处于飞行模式。
观察 5G 连接状态#
参考 cuphycontroller 控制台输出中的 Preamble 日志。
检查核心网络日志或 CUE 日志,以查看 NAS 身份验证和 PDU 会话是否成功。
运行 E2E IPERF 流量#
在 PDU 会话成功连接后,启动 ping
、iperf
或其他网络应用程序测试。
您可以在 CUE 上安装并运行 “Magic IPerf” Android 应用程序以达到此目的。
Ping 测试#
从 CN Ping UE
docker exec -it oai-ext-dn ping 10.0.0.2
从 UE Ping CN
ping -I 10.0.0.2 192.168.70.135
Iperf 下行链路测试#
在 UE 侧执行 Iperf 下行链路测试
iperf3 -s
在 CN5G 侧执行 Iperf 下行链路测试
# Test UDP DL
docker exec -it oai-ext-dn iperf3 -u -P 13 -b 80M -t 60 -c 10.0.0.2
#Test UDP bidirectional
docker exec -it oai-ext-dn iperf3 -u --bidir -P 13 -b 80M -t 60 -c 10.0.0.2
# Test TCP DL
docker exec -it oai-ext-dn iperf3 -P 13 -b 80M -t 60 -c 10.0.0.2
#Test TCP bidirectional
docker exec -it oai-ext-dn iperf3 --bidir -P 13 -b 80M -t 60 -c 10.0.0.2
IPERF 上行链路测试#
在 UE 侧执行 Iperf 上行链路测试
iperf3 -s
在 CN5G 侧执行 Iperf 上行链路测试
#UDP
docker exec -it oai-ext-dn iperf3 -u -R -b 130M -t 60 -c 10.0.0.2
#TCP
docker exec -it oai-ext-dn iperf3 -R -b 130M -t 60 -c 10.0.0.2
要停止容器,请使用以下命令
docker stop $OAI_GNB_CONTAINER
docker rm $OAI_GNB_CONTAINER
注意
ARC-OTA 是一个 P5G 蜂窝网络;特定的企业交换/路由/防火墙/策略可能需要集成支持才能访问万维网。