第 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” 应用程序

  1. 为了使用 CUE 进行测试,需要支持 Milenage 的测试 SIM 卡。以下内容必须在 SIM 卡上配置,并且必须与核心网络设置匹配:mcc、mnc、IMSI、Ki、OPc。

  2. CUE 上的 APN 应根据核心网络设置进行配置。

  3. 启动 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 的预构建步骤#

  1. 在为 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)。这将在未来合并到 OAI develop 分支中。

  2. 在同一文件中,在第 79 行添加 moreutils

moreutils \
  1. 删除 OAI FAPI 集成中 (nfapi/oai_integration/aerial/fapi_vnf_p5.c) 的 p7_thread 的绑定。为此,请删除第 59-64 行(此更改将在未来合并到 OAI develop 分支中)。在 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");
    
  2. 通过修改 nfapi/oai_integration/aerial/fapi_nvIPC.c 文件的第 609 行,确保 FAPI 轮询线程在隔离的核心上运行。

    在 Gigabyte 服务器和 Dell R750 服务器上,使用核心 21

    stick_this_thread_to_core(21)
    
  3. 在 ARC 1.5 中使用的 OAI 2024.w21 标签中,还存在关于 PDU 长度截断的错误。这已在 OAI 的 develop 分支上修复。当前的 ARC 版本已通过在 2024.w21 OAI 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 文件。

  1. 在第 27 行,将 cuBB 镜像切换为在前几个步骤中构建、提交和标记的镜像。

    image: cubb-build:24-1
    
  2. 在第 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"
    
  3. 在第 37 行,如果您按照指南操作,请按如下方式更改 OAI 容器的 cpu_set

    1. Gigabyte 服务器

      cpu_set: "13-20"
      
    2. Dell R750 服务器

      cpu_set: "23,25,27,29,31,33,35,37"
      
    3. SMC-GH 服务器

      cpuset: "11-18"
      
  4. 在第 60 行,为 oai.log 文件添加卷。

    - /var/log/aerial:/var/log/aerial
    
  5. 在第 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 文件。

  1. 最新的 ARC-OTA 版本不必构建 gdrcopy

    # cd "$cuBB_Path"/cuPHY-CP/external/gdrcopy/ || exit 1
    # ./insmod.sh
    
  2. 在最新的 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
    
  3. 在运行 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
    
  4. ci-scripts/yaml_files/sa_gnb_aerial/docker-compose.yaml 的第 37 行中,指定要用于 OAI l2 的核心。

    1. Gigabyte 服务器

      cpuset: "13-20"
      
    2. Dell R750 服务器

      cpuset: "23,25,27,29,31,33,35,37"
      
    3. 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 会话成功连接后,启动 pingiperf 或其他网络应用程序测试。

您可以在 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