【OAI】UERANSIM容器与OAI核心网分立部署及测试

    • 说明
    • 启动核心网:
    • 启动基站:
    • 功能测试
      • ueransim测试1:通过12.1.1.x ping192.168.70.1
      • ueransim测试2: 通过nr-binder绑定自定义TCP程序传数据到核心网
      • ueransim测试3:多ueransim启动
    • 结论
    • 附录
      • 基站配置文件:
      • TCP通信程序代码

说明

内容:
在服务器A运行OAI核心网,版本v1.5.0,启动的yaml文件为:docker-compose-basic-vpp-nrf.yaml
在主机B运行容器版ueransim,image版本为ueransim:latest,使ueranism接入核心网,创建uesimtun接口,并使用该接口成功传输数据

前提:
服务器A与主机B通过·一根网线连接,在linux虚拟机Ubuntu(18.04.6)上配置好网络使两端可以·互相ping通,服务器A上安装并测试成功运行OAI核心网,主机B上下载安装并成功测试本机ueransim接入本机核心网
详情参照:
DEPLOY_SA5G_WITH_UERANSIM

启动核心网:

sudo sysctl net.ipv4.conf.all.forwarding=1
sudo iptables -P FORWARD ACCEPT
docker-compose -f docker-compose-basic-vpp-nrf.yaml up -d

在这里插入图片描述

启动基站:

#添加路由
gNB-host$: sudo ip route add  192.168.70.0/24 via 192.168.12.3 dev ens40
gNB-host$: sudo ip route add  192.168.72.0/24 via 192.168.12.3 dev ens40

在这里插入图片描述

#启动基站
lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose/ueransim yz$ docker-compose -f docker-compose-ueransim-vpp1.yaml up

在这里插入图片描述
在这里插入图片描述

#进入容器内部
lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose/ueransim yz$ docker exec -it ae6df94b7b3d /bin/bash

在这里插入图片描述

功能测试

ueransim测试1:通过12.1.1.x ping192.168.70.1

root@lab-virtual-machine:/ueransim/bin# ping -I 12.1.1.2 192.168.70.1

在这里插入图片描述

ueransim测试2: 通过nr-binder绑定自定义TCP程序传数据到核心网

## 在容器内部安装运行所需软件
root@lab-virtual-machine:/ueransim/bin# apt-get update
root@lab-virtual-machine:/ueransim/bin# apt-get install python3 
#将TCPclient代码复制到容器内部
lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose/ueransim yz$ sudo docker cp  TCPclient.py   ueransim:/ueransim/bin

在这里插入图片描述
核心网侧启动TCPsever代码

lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose$ python3 TCPserve.py 

在这里插入图片描述
基站侧ueransim容器内部启动TCPclient代码

#修改nr-binder可执行权限
root@lab-virtual-machine:/ueransim/bin# chmod 777 nr-binder

在这里插入图片描述

root@lab-virtual-machine:/ueransim/bin# ./nr-binder 12.1.1.2 python3 TCPclient.py

成功进行TCP通信
在这里插入图片描述
在这里插入图片描述

ueransim测试3:多ueransim启动

#启动第二个ueransim
lab@lab-virtual-machine:~/oai-cn5g-fed/docker-compose/ueransim yz$ docker-compose -f docker-compose-ueransim-vpp2.yaml up

启动了成功建立PDU session ,但在分配uesimtun0时出错
在这里插入图片描述
不过可以看见生成了接口:
在这里插入图片描述
OAI核心网看见接入了两个ue:
在这里插入图片描述

测试第二个接口是否可用:

在这里插入图片描述
发现第二个接口在使用上存在问题

结论

部署完成,可以实现单ueransim容器分立部署接入OAI核心网,并测试传输数据
存在问题:多ueransim在uesimtun接口的创建与数据传输不能正常进行,需要解决

解决思路:修改ueransim配置文件
1.对于多基站接入,不同基站配置不同网口进行数据传输,其中NGAP_IP和GTP_IP修改为对应的网口地址:
在这里插入图片描述

附录

基站配置文件:

相比于官方原始ueransim配置文件,将网络模式由external修改为host

基站1:

version: '3.8'
services:ueransim1:container_name: ueransim1image: ueransim:latestprivileged: trueenvironment:# GNB Congig Parameters- MCC=208- MNC=95- NCI=0x000000010- TAC=0xa000- LINK_IP=127.0.0.1- NGAP_IP=192.168.12.33- GTP_IP=192.168.12.33- NGAP_PEER_IP=192.168.70.132- SST=222- SD=123- IGNORE_STREAM_IDS=true# UE Config Parameters- NUMBER_OF_UE=1- IMSI=208950000000031- KEY=0C0A34601D4F07677303652C0462535B- OP=63bfa50ee6523365ff14c1f45f88737d- OP_TYPE=OPC- AMF_VALUE=8000- IMEI=356938035643803- IMEI_SV=0035609204079514- GNB_IP_ADDRESS=127.0.0.1- PDU_TYPE=IPv4- APN=default- SST_0=222- SD_0=123- SST_C=222- SD_C=123- SST_D=222- SD_D=123network_mode: "host"healthcheck:test: /bin/bash -c "ifconfig uesimtun0"interval: 10stimeout: 5sretries: 5
#networks:
#    hostnet:
#     external: true
#    name: host

基站2:
相对基站1修改了:

项目原始名字修改名字
服务名称ueransim1ueransim2
容器名称 container_nameueransim1ueransim2
NCI0x0000000100x000000020

NCI标识了不同基站代码,通过此项在核心网侧可以看见多基站接入:
在这里插入图片描述

version: '3.8'
services:ueransim2:container_name: ueransim2image: ueransim:latestprivileged: trueenvironment:# GNB Congig Parameters- MCC=208- MNC=95- NCI=0x000000020- TAC=0xa000- LINK_IP=127.0.0.1- NGAP_IP=192.168.12.33- GTP_IP=192.168.12.33- NGAP_PEER_IP=192.168.70.132- SST=222- SD=123- IGNORE_STREAM_IDS=true# UE Config Parameters- NUMBER_OF_UE=1- IMSI=208950000000041- KEY=0C0A34601D4F07677303652C0462535B- OP=63bfa50ee6523365ff14c1f45f88737d- OP_TYPE=OPC- AMF_VALUE=8000- IMEI=356938035643803- IMEI_SV=0035609204079514- GNB_IP_ADDRESS=127.0.0.1- PDU_TYPE=IPv4- APN=default- SST_0=222- SD_0=123- SST_C=222- SD_C=123- SST_D=222- SD_D=123network_mode: "host"healthcheck:test: /bin/bash -c "ifconfig uesimtun0"interval: 10stimeout: 5sretries: 5
#networks:
#    hostnet:
#     external: true
#    name: host

TCP通信程序代码

核心网侧TCPsever.py

import socket
from threading import Threaddef new_client_connect(new_client_socket, client_ip_port):while True:# 收发数据recv_data = new_client_socket.recv(1024)if len(recv_data) != 0:recv_text = recv_data.decode("gb2312")print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text))else:print("客户端断开连接")break# # 关闭连接# new_client_socket.close()  # 表示断开与当前的客户端的通信def main():# 创建套接字tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口和iptcp_server_socket.bind(("192.168.70.1", 8088))# 设置套接字为被动监听模式,不能主动发送数据,128为允许接收的最大连接数tcp_server_socket.listen(128)while True:# 接收客户端连接new_client_socket, client_ip_port = tcp_server_socket.accept()t1 = Thread(target=new_client_connect, args=(new_client_socket, client_ip_port))t1.start()# tcp_server_socket.close()  # 表示不再接受新客户端的连接,已经连接的可以继续服务if __name__ == '__main__':main()

基站侧TCPclient.py代码:

import socket
import time
# 创建套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Waitting for connecting...")
# 建立连接
tcp_client_socket.connect(("192.168.70.1", 8088))
print("Connected!")# 发送数据
print("Sending message...")
while 1:tcp_client_socket.send("你好".encode("gb2312"))time.sleep(5)
# 接收数据
recv_data = tcp_client_socket.recv(1024).decode("gb2312")
print(recv_data)# 关闭套接字
tcp_client_socket.close()


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部