目录
本教程介绍如何配置OAI 5GC,根据终端订阅数据提供静态终端ip地址。在SMF配置中,有一个参数强制SMF使用本地订阅信息。例如使用配置文件中定义的DNN参数(名称、类型和ip-address范围)。但是所有这些信息都可以移动到mysql数据库,SMF可以通过与UDM <——> UDR <——> mysql通信来获取它。USE_LOCAL_SUBSCRIPTION_INFO
在本教程中,您将学习如何更改此参数并为特定的UE-IMSI配置ip地址。私有5G网络需要这种静态ip地址分配。
要遵循本教程,用户应该知道如何部署基本OAI-5GC网络。
本教程使用的RAN模拟器是gNBSIM
阅读器还可以用真正的RAN替换RAN模拟器。
请按照本教程一步一步创建一个稳定工作的试验台。
注意:
- 文档中提到的命令假设您当前的工作目录为。请确保在复制粘贴命令或编写教程命令的终端中使用 ./docker-compose pwd ./docker-compose
- 用你最喜欢的编辑器或在gitlab上在线打开这个markdown文件,并单独打开一个终端
- 在阅读本教程之前,先阅读这篇教程
1. 必备条件
阅读关于如何部署基本OAI-5G核心网络的教程,您可以选择使用或不使用NRF进行部署。在本教程中,我们将选择nrf场景。
创建一个文件夹,您可以在其中存储本教程的所有结果文件,然后将它们与我们提供的结果文件进行比较,我们建议创建完全相同的文件夹,以免随后破坏命令流。
docker-compose-host $: mkdir -p /tmp/oai/static-ue-ip
docker-compose-host $: chmod 777 /tmp/oai/static-ue-ip
2. 配置OAI-5G核心网功能
编辑正确的Basic OAI 5G核心网docker-compose文件,在docker-compose文件的smf服务配置中将USE_LOCAL_SUBSCRIPTION_INFO参数设置为no。
- 如果使用包含nrf的docker-compose文件
docker-compose-host $: sed -i 's/USE_LOCAL_SUBSCRIPTION_INFO=yes/USE_LOCAL_SUBSCRIPTION_INFO=no/g' docker-compose-basic-nrf.yaml
docker-compose-host $: sed -i 's/SMF_SELECTION=yes/SMF_SELECTION=no/g' docker-compose-basic-nrf.yaml
- 使用不包含nrf的docker-compose文件
docker-compose-host $: sed -i 's/USE_LOCAL_SUBSCRIPTION_INFO=yes/USE_LOCAL_SUBSCRIPTION_INFO=no/g' docker-compose-basic-nonrf.yaml
然后使用IMSI和DNN信息映射配置用户订阅数据库sql文件。在表中添加下面的全部信息SessionManagementSubscriptionData
- 静态UE ip
INSERT INTO `SessionManagementSubscriptionData` (`ueid`, `servingPlmnid`, `singleNssai`, `dnnConfigurations`) VALUES
('208950000000031', '20895', '{\"sst\": 222, \"sd\": \"123\"}','{\"default\":{\"pduSessionTypes\":{ \"defaultSessionType\": \"IPV4\"},\"sscModes\": {\"defaultSscMode\": \"SSC_MODE_1\"},\"5gQosProfile\": {\"5qi\": 6,\"arp\":{\"priorityLevel\": 1,\"preemptCap\": \"NOT_PREEMPT\",\"preemptVuln\":\"NOT_PREEMPTABLE\"},\"priorityLevel\":1},\"sessionAmbr\":{\"uplink\":\"100Mbps\", \"downlink\":\"100Mbps\"},\"staticIpAddress\":[{\"ipv4Addr\": \"12.1.1.4\"}]}}');
- 动态 UE ip
INSERT INTO `SessionManagementSubscriptionData` (`ueid`, `servingPlmnid`, `singleNssai`, `dnnConfigurations`) VALUES
('208950000000032', '20895', '{\"sst\": 222, \"sd\": \"123\"}','{\"default\":{\"pduSessionTypes\":{ \"defaultSessionType\": \"IPV4\"},\"sscModes\": {\"defaultSscMode\": \"SSC_MODE_1\"},\"5gQosProfile\": {\"5qi\": 6,\"arp\":{\"priorityLevel\": 1,\"preemptCap\": \"NOT_PREEMPT\",\"preemptVuln\":\"NOT_PREEMPTABLE\"},\"priorityLevel\":1},\"sessionAmbr\":{\"uplink\":\"100Mbps\", \"downlink\":\"100Mbps\"}}}');
确保对所有终端执行此操作,如果AuthenticationSubscription表中存在用户信息,那么该终端在SessionManagementSubscriptionData表中也应该有一个条目(一一对应)。目前,这两个条目存在于数据库文件中
3. 基于python脚本部署基础核心网
在之前的教程中,我们解释了如何使用python部署器部署核心网络。这里我们将只提供部署核心网络所需的快速命令,要学习如何使用python部署器,请遵循此页。启动核心网络组件,检查使用nrf或不使用nrf的场景
作为新手,我们建议第一次运行时不使用任何PCAP捕获。出于CI目的,我们在docker网络上部署了一个自动化的PCAP捕获。
请记住: 如果您计划长时间运行CN5G部署,PCAP文件可能会变得很大!
- 有nrf
docker-compose-host $: python3 core-network.py --type start-basic --scenario 1
- 无nrf
docker-compose-host $: python3 core-network.py --type start-basic --scenario 2
4. 部署仿真基站
- 场景执行:
- 在ran仿真器主机上实例化您选择的ran仿真器,这里我们将使用gnbsim演示它。我们在一个主机上运行所有东西,因此ran- simulator -host和docker-compose-host暂时是一样的。
docker-compose-host $: docker-compose -f docker-compose-gnbsim.yaml up -d gnbsim
Found orphan containers (oai-ext-dn, oai-smf, oai-udr, oai-amf, oai-nrf, oai-udm, oai-spgwu, mysql, oai-ausf) for this project.
Creating gnbsim ... done
(可选)如果需要,您还可以运行另一个 gnbsim 实例来检查动态 IP 地址分配是否正常工作
docker-compose-host $: docker-compose -f docker-compose-gnbsim.yaml up -d gnbsim2
我们可以看一下正在运行的容器
root@lab-virtual-machine:/home/lab/oai-cn5g-fed/docker-compose# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72234bff2558 gnbsim:latest "/gnbsim/bin/entrypo…" 5 seconds ago Up 4 seconds (health: starting) gnbsim3
c1800ed3cd51 gnbsim:latest "/gnbsim/bin/entrypo…" 7 minutes ago Up 7 minutes (healthy) gnbsim2
23aacf3deadb gnbsim:latest "/gnbsim/bin/entrypo…" 8 minutes ago Up 8 minutes (healthy) gnbsim
44a8d47f03f3 oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 "python3 /openair-sp…" 13 minutes ago Up 13 minutes (healthy) 2152/udp, 8805/udp oai-spgwu
a722bbf0fcef oaisoftwarealliance/oai-smf:v1.5.0 "python3 /openair-sm…" 13 minutes ago Up 13 minutes (healthy) 80/tcp, 8080/tcp, 8805/udp oai-smf
a9363ec899b5 oaisoftwarealliance/oai-amf:v1.5.0 "python3 /openair-am…" 13 minutes ago Up 13 minutes (healthy) 80/tcp, 9090/tcp, 38412/sctp oai-amf
f506553d63f2 oaisoftwarealliance/oai-ausf:v1.5.0 "python3 /openair-au…" 13 minutes ago Up 13 minutes (healthy) 80/tcp oai-ausf
a3aad13f29da oaisoftwarealliance/oai-udm:v1.5.0 "python3 /openair-ud…" 13 minutes ago Up 13 minutes (healthy) 80/tcp oai-udm
a49465707de5 oaisoftwarealliance/oai-udr:v1.5.0 "python3 /openair-ud…" 13 minutes ago Up 13 minutes (healthy) 80/tcp oai-udr
2d00eae8548b oaisoftwarealliance/oai-nrf:v1.5.0 "python3 /openair-nr…" 13 minutes ago Up 13 minutes (healthy) 80/tcp, 9090/tcp oai-nrf
0ff03e2005b3 oaisoftwarealliance/trf-gen-cn5g:latest "/bin/bash -c ' ip r…" 13 minutes ago Up 13 minutes (healthy) oai-ext-dn
8a4c948eab6b mysql:8.0 "docker-entrypoint.s…" 13 minutes ago Up 13 minutes (healthy) 3306/tcp, 33060/tcp mysql
可以发现我们运行了三个gnbsim容器
- 如果您想在另一台主机上运行ran-emulator,那么请确保两台机器能够正常通信,并且能够从主机ping到docker-compose-host 192.168.70.128的网桥
验证PDN会话建立: 为了检查PDN会话是否正确建立,有一个额外的外部数据网络容器仅用于演示目的。使用此容器可以到达已运行的仿真器UE,以验证PDN会话的建立。要了解数据包流,请阅读下一个分析部分。为第一个gnbsim分配的UE ip地址应该是12.1.1.4,因为我们在前面的步骤中修复了它,对于另一个gnbsim实例,您需要检查。
- gnbsim
#当我们要查看一个docker 容器的日志时,可以直接 docker logs 容器名字或者 ID
#如果需要找其中包含某些内容(如 xxx)的所有行,可以docker logs 容器名字或者 ID 2>&1 | grep xxx
docker-compose-host $: docker logs gnbsim 2>&1 | grep "UE address:"
[gnbsim]2022/02/08 14:50:40.584271 example.go:329: UE address: 12.1.1.4
- gnbsim2
docker-compose-host $: docker logs gnbsim2 2>&1 | grep "UE address:"
- gnbsim3
5. 数据流测试
docker-compose-host $: docker exec oai-ext-dn ping 12.1.1.4 -c4
#ping -c<完成次数> 因此-c4表示ping4次
PING 12.1.1.4 (12.1.1.4) 56(84) bytes of data.
64 bytes from 12.1.1.4: icmp_seq=1 ttl=63 time=0.297 ms
64 bytes from 12.1.1.4: icmp_seq=2 ttl=63 time=0.824 ms
64 bytes from 12.1.1.4: icmp_seq=3 ttl=63 time=0.723 ms
64 bytes from 12.1.1.4: icmp_seq=4 ttl=63 time=0.849 ms
--- 12.1.1.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3072ms
rtt min/avg/max/mdev = 0.297/0.673/0.849/0.223 ms
6. 日志收集
停止PCAP收集:停止docker-compose-host上的wireshark或tshark进程。
docker-compose-host $: pkill tshark
收集所有容器的日志
docker-compose-host $: docker logs oai-amf > /tmp/oai/static-ue-ip/amf.log 2>&1
docker-compose-host $: docker logs oai-smf > /tmp/oai/static-ue-ip/smf.log 2>&1
docker-compose-host $: docker logs oai-nrf > /tmp/oai/static-ue-ip/nrf.log 2>&1
docker-compose-host $: docker logs oai-spgwu > /tmp/oai/static-ue-ip/spgwu.log 2>&1
docker-compose-host $: docker logs oai-udr > /tmp/oai/static-ue-ip/udr.log 2>&1
docker-compose-host $: docker logs oai-udm > /tmp/oai/static-ue-ip/udm.log 2>&1
docker-compose-host $: docker logs oai-ausf > /tmp/oai/static-ue-ip/ausf.log 2>&1
docker-compose-host $: docker logs gnbsim > /tmp/oai/static-ue-ip/gnbsim.log 2>&1
7. 取消部署
7.1 取消部署仿真基站
docker-compose-host $: docker-compose -f docker-compose-gnbsim.yaml down -t 0
Stopping gnbsim ... done
Found orphan containers (oai-nrf, oai-ausf, oai-smf, oai-udr, oai-spgwu, mysql, oai-amf, oai-udm, oai-ext-dn) for this project.
Removing gnbsim ... done
Network demo-oai-public-net is external, skipping
7.2 取消部署核心网
docker-compose-host $: python3 core-network.py --type stop-basic --scenario 1
[2022-02-08 15:51:06,388] root:DEBUG: UnDeploying OAI 5G core components....
[2022-02-08 15:51:06,389] root:DEBUG: docker-compose -f docker-compose-basic-nrf.yaml down
Stopping oai-ext-dn ... done
Stopping oai-spgwu ... done
Stopping oai-smf ... done
Stopping oai-amf ... done
Stopping oai-ausf ... done
Stopping oai-udm ... done
Stopping oai-udr ... done
Stopping oai-nrf ... done
Stopping mysql ... done
Removing oai-ext-dn ... done
Removing oai-spgwu ... done
Removing oai-smf ... done
Removing oai-amf ... done
Removing oai-ausf ... done
Removing oai-udm ... done
Removing oai-udr ... done
Removing oai-nrf ... done
Removing mysql ... done
Removing network demo-oai-public-net
[2022-02-08 15:53:33,332] root:DEBUG: OAI 5G core components are UnDeployed....
如果复制,那么日志文件和pcap文件将出现在/tmp/oai/static-ue-ip/目录下。如果您想将其与我们提供的日志和pcap进行比较,那么请参考下一节
8. 注意事项
- oai-ext-dn容器是可选的,只有当用户想从UE ping时才需要它。一般情况下,除了测试目的,不需要这个容器。
- 使用上面的python脚本,您可以执行最小AMF, SMF, UPF (SPGWU), NRF, MYSQL和基本AMF, SMF, UPF (SPGWU), NRF, UDM, UDR, AUSF, MYSQL 5g核心功能测试,基于FQDN/IP的特性以及NRF/noNRF。使用docker撰写文件前请检查配置。
- 本教程可作为使用COTS终端测试OAI 5G核心的参考。配置文件必须根据gNB和COTS UE信息在mysql数据库中进行更改。
- 如果您有兴趣在网络函数之间使用HTTP V2而不是HTTP V1进行SBI,那么您必须使用docker-compose-basic-nrf-http2.yaml
- 通常,在一个COTS UE中默认创建两个PDN会话,因此在SMF中正确配置IMS。目前一些参数不能通过docker-compose-basic-nrf.yaml配置。我们建议您直接在conf文件中配置它们,并在运行时将文件挂载到docker中。
- 不需要使用core-network.py Python脚本,可以使用docker-compose命令直接部署
- 如果你想要部署更多日志的调试器/开发人员核心网络环境,请遵循本教程
参考:docs/DEPLOY_SA5G_BASIC_STATIC_UE_IP.md · master · oai / cn5g / oai-cn5g-fed · GitLab (eurecom.fr)