网络拓扑:
[free5gc核心网] --网线-- [OAI gNB/eNB ---- 127.0.0.1::4043 ---- OAI UE]
一台Ubuntu运行free5gc充当核心网,另一台Ubuntu主机运行OAI gNB和模拟UE。在Ubuntu 20.04.6LTS版本可行。
Free5GC安装见 free5gc+ueransim文章
OAI基站与射频仿真的安装与使用
下载编译源码
cd ~
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
cd ~/openairinterface5g/cmake_targets
./build_oai -I --gNB --nrUE -w SIMU --ninja
- -I: 安装所有的必需库,一般来说只需要安装一次。
- -w: 用于选择射频设备前端。可选USRP或者SIMU,后者是单独构建RFSimulator,前者是除了USRP外也同时构建RFSimulator,所以一般我们选择USRP。
- –gNB: 用于构建nr-softmodem和nr-cuup的可执行文件以及其所需的库。
- –nrUE: 用于构建nr-uesoftmodem的可执行文件以及其所需的库。
- –ninja: 使用ninja构建工具,可以加速编译过程。
- -c: 清空工作区,并强制进行一个完全的构建。
RF Simulator
RF Simulator测试是指,在没有真实的RF板的情况下,使用RF Simulator替代真实的RF板子,进进行OAI功能性测试。当然,性能可能要比有真实的RF板时差很多。
在RF Simulator的情况下有,:
-
“noS1” mode:在这种模式下,没有核心网,形成基站和UE之间的传输通道,在两侧进行数据传输数据。通过TUN接口注入/接收用户平面流量,而不是随机生成
-
“phy-test” mode:在这种模式下,在每个MAC层调度周期内,基站随机的发送一些DL下行数据,而UE随机地发送一些UL上行数据。
系统架构说明:
-
如果Linx-1(UE)和Linux-2(基站)是同一个服务器,则IP数据包不会通过oaitun_enb1和oaitun_ue1这两个物理接口的驱动,直接被IP层间直接路由,从而导致数据包不会经过空口协议栈。
-
网络接口oaitun_ue1,是UE可执行程序nr-uesoftmodem创建的接口驱动,它调用UE的空口协议栈进行数据包的收发。
-
网络接口oaitun_enb1,是基站可执行程序nr-softmodem创建的接口驱动,它调用基站的空口协议栈进行数据包的收发。
无核心网仿真测试
配置文件名称说明
- cu/du/gnb/enb:指明设备的部署类型
- sa:5G独立部署,接入核心网时使用
- bandxx:频段
- fr1 or fr2:5G 频谱区间
- tmx:传输模式
- PRB: 分配给SCH信道的PRB个数
- usrpbxxx:OAI支持的实际RF硬件的型号。
运行基站
cd cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpn300.conf --parallel-config PARALLEL_SINGLE_THREAD --rfsim --phy-test --noS1 --nokrnmod 1
-
RFSIMULATOR=server:设定基站的RFSIMULATOR为TCP server
-
./nr-softmodem:NR 基站可执行程序
-
–parallel-config PARALLEL_SINGLE_THREAD:创建独立的并行线程
-
–rfsim:采用RFSIMULATOR,而不是正式的RF硬件
-
–phy-test:启动基站的phy test功能,这种功能,每一次调度周期,基站会随机产生一些DL下行数据进行发送。
-
–nokrnmod 1:没有核心网时设置该flag
-
-d:图形显示星座图或其他结果 (Window端需要使用MobaXterm这样的远程终端)
-
-O选项指明配置文件的全路径
-
在 gNB 中,–sa 标志执行以下操作:RRC根据配置文件对SIB1进行编码,通过NR-BCCH-DL-SCH传输。
-
do-ra 用于在无竞争模式下运行NR随机访问过程,为了运行RA, gNB和UE都需要——do-ra标志。
sudo ./nr-uesoftmodem --rfsim --phy-test --noS1 --nokrnmod 1 --rfsimulator.serveraddr 127.0.0.1
基站RFSIMULATOR的IP地址,如果在同一个Linux服务器上,可以使用127.0.0.1。
UE 在 --sa 模式下的命令行参数:
- -C:下行链路载波频率,单位 Hz(默认值 0)
- –CO:上行链路 FDD 频率偏移,单位 Hz(默认值 0)
- –numerology:数字索引(默认值 1)
- -r:以 RB 表示的带宽(默认值 106)
- –band:NR 波段编号(默认值 78)
- –ssb:SSB 起始子载波(默认值 512)
-E: 降低采用频率(3/4的采样率),只有在20M带宽时有效。
在 UE 处,–sa 标志将解码 SIB1 并启动 SA 的 5G NR 初始接入程序:
- 5G-NR RRC 连接设置
- NAS 认证和安全
- 5G-NR AS 安全程序
- 5G-NR RRC 重配置
- 开始下行和上行数据传输
- 基站可以与核心网连接
运行结果
ping包收到相应数据,因为Linx-1(UE)和Linux-2(基站)是同一个服务器,IP数据包不会通过oaitun_enb1和oaitun_ue1这两个物理接口的驱动,直接被IP层间直接路由,从而导致数据包不会经过空口协议栈。通过netstat -tulnp 查看端口状态。
free5gc核心网+OAI仿真
核心网配置
修改对应的AMF,SMF,UPF网元里的plmn与IP地址(与free5gc+ueransim中类似)
配置ue和gNB
OAI tag:2023.w20
可参考官方文档TESTING_5GSA_setup.md
gNB的一般配置文件格式参照targets/PROJECTS/GENERIC-NR-5GC/CONF/*.conf
中的格式修改,修改内容有如下几个关键点:plmn
中的mmc
和mnc
;以及amf
对应的ip地址和gNB和amf之间的接口地址
和网卡名称
。
plmn_list = ({ mcc = 466; mnc = 92; mnc_length = 2; snssaiList = ({ sst = 1 }) });
...
mf_ip_address = ( { ipv4 = "192.168.202.128"; //核心网的ip地址
ipv6 = "192:168:30::17";
active = "yes"; //这个不用管
preference = "ipv4";
}
);
NETWORK_INTERFACES :
{
GNB_INTERFACE_NAME_FOR_NG_AMF = "ens33"; //gNB主机上网的网卡名称
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.202.130"; //gNB主机上网的IP地址
GNB_INTERFACE_NAME_FOR_NGU = "ens33"; //gNB主机上网的网卡名称
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.202.130"; /gNB主机上网的IP地址
GNB_PORT_FOR_S1U = 2152; # Spec 2152
};
UE的配置比较简单,只要和WebConsole中对应起来即可:
#define UICC_PARAMS_DESC { \
{"imsi", "USIM IMSI\n", 0, .strptr=&uicc->imsiStr, .defstrval="466920000000003", TYPE_STRING, 0 }, \
{"nmc_size" "number of digits in NMC", 0, .iptr=&uicc->nmc_size, .defintval=2, TYPE_INT, 0 }, \
{"key", "USIM Ki\n", 0, .strptr=&uicc->keyStr, .defstrval="8baf473f2f8fd09487cccbd7097c6862", TYPE_STRING, 0 }, \
{"opc", "USIM OPc\n", 0, .strptr=&uicc->opcStr, .defstrval="8e27b6af0e692e750f32667a3b14605d", TYPE_STRING, 0 }, \
{"amf", "USIM amf\n", 0, .strptr=&uicc->amfStr, .defstrval="8000", TYPE_STRING, 0 }, \
{"sqn", "USIM sqn\n", 0, .strptr=&uicc->sqnStr, .defstrval="16f3b3f70fc9", TYPE_STRING, 0 }, \
{"dnn", "UE dnn (apn)\n", 0, .strptr=&uicc->dnnStr, .defstrval="internet", TYPE_STRING, 0 }, \
{"nssai_sst", "UE nssai\n", 0, .iptr=&uicc->nssai_sst, .defintval=1, TYPE_INT, 0 }, \
{"nssai_sd", "UE nssai\n", 0, .iptr=&uicc->nssai_sd, .defintval=0x010203, TYPE_INT, 0 }, \
{"imeisv", "IMEISV\n", 0, .strptr=&uicc->imeisvStr, .defstrval="6754567890123413", TYPE_STRING, 0 }, \
};000000
需要注意的是nssai_sd
使用的是十六进制数,修改完成后需要重新编译nrUE,./build_oai --nrUE --ninja
。
运行基站
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --rfsim --sa
运行UE仿真
cd ~/openairinterface5g
source oaienv
cd cmake_targets/ran_build/build
sudo RFSIMULATOR=127.0.0.1 ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa
-
RSRP:Reference Signal Receiving Power,参考信号接收功率。
它是在某个Symbol(符号)内承载参考信号的所有RE(资源元素)上接收到的信号功率的平均值。范围在-44与-140之间,越大越好。 -
RSSI:Received Signal Strength Indication,接收的信号强度指示。它随距离的增大而衰减,通常为负值,该值越接近零说明信号强度越高。RSSI持续过低,说明基站收到的上行信号太弱,可能导致解调失败。RSSI持续过高,说明收到的上行信号太强,相互之间的干扰太大,也影响信号解调。
-
RSRQ:Reference Signal Receiving Quality,参考信号接收质量。它是RSRP和RSSI的比值,范围在-3于-19.5之间,越大越好。它主要是根据信号质量来对不同LTE候选小区进行排序。这种测量用作切换和小区重选决定的输入。
-
SINR:Signal to Interference plus Noise Ratio,信号与干扰加噪声比。它表示接收到的有用信号的强度与接收到的干扰信号(噪声和干扰)的强度的比值。
-
CQI-Channel Quality Indication,信道质量指示,指示意味着CQI信息来自于终端的测量,然后汇报给基站,因此,CQI一般指的是下行信道质量。基站MAC层调度器,会根据UE反馈的CQI信息,选择合适的调度算法和下行数据块大小,以保证UE在不同的无线环境下获取最佳的下行性能。
遇到的问题
可能与版本有关,更换更早版本后能够正常运行。
以上是在虚拟机下基于两个主机的组网流程;在双系统单台电脑下进行组网,会出现IP接口被占用等问题,猜测需要使用docker搭建核心网,再进行相关配置才能成功组网。