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

news2025/2/23 10:15:48

    • 说明
    • 启动核心网:
    • 启动基站:
    • 功能测试
      • 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

在这里插入图片描述
核心网侧启动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: ueransim1
        image: ueransim:latest
        privileged: true
        environment:
            # 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=123
        network_mode: "host"
           
        healthcheck:
            test: /bin/bash -c "ifconfig uesimtun0"
            interval: 10s
            timeout: 5s
            retries: 5
#networks:
#    hostnet:
#     external: true
#    name: host

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

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

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

version: '3.8'
services:
    ueransim2:
        container_name: ueransim2
        image: ueransim:latest
        privileged: true
        environment:
            # 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=123
        network_mode: "host"
           
        healthcheck:
            test: /bin/bash -c "ifconfig uesimtun0"
            interval: 10s
            timeout: 5s
            retries: 5
#networks:
#    hostnet:
#     external: true
#    name: host

TCP通信程序代码

核心网侧TCPsever.py

import socket
from threading import Thread


def 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)

    # 绑定端口和ip
    tcp_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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/470287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIA-RS实验-路由配置-静态路由缺省路由

在计算机网络中,路由器是实现数据包转发的重要设备。它通过查找路由表中的路由信息,将数据包从源地址转发到目标地址。而静态路由和缺省路由则是路由表中的两种重要信息,下面我们来详细了解一下它们的概念、特点和应用。 目录 简述 一、静态…

Let‘s Learn .NET|通过 Semantic Kernel .NET SDK 管理你的 OpenAI 项目

编辑:Alan Wang 排版:Rani Sun Lets Learn .NET 系列 “Lets Learn .NET” 是面向全球的 .NET 初学者学习系列,旨在通过不同语言,帮助不同地区的开发者掌握最新的 .NET 开发知识与技能。 在 ChatGPT 与 OpenAI 火热的当下&#x…

雪花算法

雪花算法(SnowFlake),是Twitter开源 的分布式ID生成算法 主要是由 64bit 的 long 型生成的全局 ID, 其中分为四个部分: ① 最高1位固定值 0,因为生成的 id 是正整数 ② 后面的41位存储毫秒级时间戳 ③ 第三部分的10位存储机器码…

tp6.1 bingher/ueditor(百度编辑器)(七牛、阿里OSS第三方云)详情图文教程(第二版)

之前做过一版:tp6 bingher/ueditor(百度编辑器)(七牛、阿里OSS第三方云)详情图文教程_我是高手高手高高手的博客-CSDN博客 登录权限是Session,现在系统是Cookie加jwt的Token方式验证 一、修改验证登录权限 修改文件: vendor\bingher\uedito…

R语言 | 向量对象运算

目录 一、数值型的向量对象 1.1 建立规则型的数值向量对象使用序列符号 1.2 简单向量对象的运算 1.3 建立向量对象:seq()函数 1.4 连接向量对象:c()函数 1.5 重复向量对象:rep()函数 1.6 numeric()函数 1.7 程序语句短语跨行的处理 …

阶段式软件研发项目管理工具

下面这个场景是是阶段式软件研发场景,适用于采用瀑布模式开展软件研发的企业或者团队。 创建项目 新建项目时,使用“阶段式软件开发项目”项目模板创建项目。 系统会自动创建10个阶段看板(一个阶段一个看板),1个缺陷…

libgo 流程分析(1)

libgo 基础模块 libgo逻辑结构 libgo主要的功能模块主要包括:调度器( Scheduler )、处理器( Processer )、协程( Task )和一个FastSteadyClock。 其中 Scheduler -> Processer -> Task 三层逻辑结构实现了对协程( Task )的生命周期管理和调度和运行。 sch…

【好书分享】数字信号处理入门宝典(Digital Signal Processing-A Student Guide)

简介 该书作为初学者的入门书籍,葵花宝典级的存在,发行量很少,在市面上很难见到,仅此一本,想要的私信! Digital signal processing (DSP) systems have developed at a rapid pace over the past two dec…

基于DSP+FPGA+ADS1282支持31Bit高精度数据采集方案(二)模拟电路设计

如图 4.1 所示是系统硬件系统的信号框图,数字信号处理板上的主要核心是 两个处理芯片,即 FPGA 和 DSP ,其中 FPGA 主要作用是做 DSP 和外围接口的 桥梁及数据预处理, DSP 做为数据解算核心。 FPGA 通过各种的数据总…

AJAX和JSON

1、什么是AJAX? AJAX(ASynchronous JavaScript And XML)异步的JavaScript 和 XML; 由Jesse James Garrett 在他的文章AJAX:A New Approoch to Web Applications中首次提出。 ajax(Web数据交互方式)_百…

[深度学习][CenterFusion]关于centerfusion训练注意的要点

我参考博客CenterFusion 项目超详细环境搭建步骤及可视化操作_centernet可视化_上班摸不了鱼的博客-CSDN博客本文引用 CenterFusion: Center-based Radar and Camera Fusion for 3D Object Detection,复现此论文中的代码,互相学习。注意:由于…

电影元素主题:《黑客帝国》中的js加密与解密

在《黑客帝国》中,加密和解密是非常重要的概念。加密是将信息转换为看起来毫无意义的数据,以确保只有拥有解密密钥的人才能读取和理解它。在这篇文章中,我们将探讨如何使用JavaScript进行加密和解密,就像黑客们在电影中所做的那样…

2023-04-27:用go语言重写ffmpeg的remuxing.c示例。

2023-04-27:用go语言重写ffmpeg的remuxing.c示例。 答案2023-04-27: ffmpeg的remuxing.c是一个用于将多媒体文件从一种容器格式转换为另一种容器格式的命令行工具。它可以将音频、视频和字幕等元素从源文件中提取出来,并按照用户指定的方式…

Windows 11 本地 php 开发环境搭建:PHP + Apache + MySQL +VSCode 安装和环境配置

目录 前言1. PHP 的下载、安装和配置1.1 下载 php1.2 安装 php1.3 配置 php 系统变量1.4 配置 php.ini 2. Apache 的下载、安装和配置2.1 下载 Apache2.2 安装 Apache2.3 修改配置 Apache2.4 指定服务端口(非必须)2.5 配置系统变量2.6 安装服务2.7 启动服…

在Docker上部署SpringBoot项目(纯步骤)

在Docker上部署SpringBoot项目 在学习中发现了部署的时候总是有各种问题,此文章只有操作步骤没有原理解释,只是用来提醒自己部署步骤 部署总共可以分为五步! 第一步:将SpringBoot项目打包成jar包 这里使用idea的上maven选项打包,点一下就行。…

seata 1.4.2 安装部署(Linux环境)

Linux安装部署 seata server 1.4.2 下载安装包上传至服务器 1.首先从GitHub拉取seata压缩包 https://github.com/seata/seata/releases/download/v1.4.2/seata-server-1.4.2.zip 下载到本地后上传至服务器 或使用命令拉取 wget https://github.com/seata/seata/release…

java调用百度的接口获取起-止位置的距离

需求:校验收货地址是否超出配送范围 重要: 做该需求的思路就是通过卖家和卖家具体的地址信息,来获取到二者的经纬度, 此时可以使用百度的 "地理编码服务",即可获取对应的经纬度 第二步,就是通过二者的经纬度,按照百度接口的要求,发送,即可获取到包含二者距离的JSON串…

SQL Father - 模拟数据生成器(后端)

SQL Father - 模拟数据生成器(后端) SQL 之父项目:快速生成 SQL 和模拟数据,大幅提高开发测试效率! 前后端全栈项目 By 程序员鱼皮 制作不易,请勿商用和二次售卖!!! 在线…

HAProxy搭建web集群

目录 一、HAProxy简介1.Haproxy应用分析2.HAProxy的主要特性3.HAProxy常用的负载均衡策略4.LVS、Nginx、HAproxy的区别 二、Haproxy搭建 Web 群集1.haproxy 服务器部署2.编译安装 Haproxy3.Haproxy服务器配置4.添加haproxy 系统服务5.节点服务器部署6.启动haproxy服务7.日志定义…

在KylinV10安装DM8、卸载DM8

前言 因为近期,业外和几个朋友想搞点有趣的项目玩玩,既然不以盈利为主,就> 主推国产化,所以这篇记录一下,我在KylinV10安装dm8.写的博客可能有所披露,希望指正。 注意 dm8试用版只有一年试用期&#xff…