当前位置: 首页 > news >正文

OAI openair3代码结构整理

openair3代码框架结构

OAI(OpenAirInterface)是一个开源的5G网络软件平台,用于研究和开发5G网络技术。OpenAir3是OAI项目中的一个子项目,专注于5G核心网络的功能实现。

一、OpenAir3的代码主要包括以下几个部分:

  1. NAS(Non-Access Stratum)层:这一层主要处理UE(用户设备)与核心网之间的信令交互,包括注册、认证、会话管理等。NAS层的代码主要位于D:\openairinterface5g\openair3\NAS\UE目录下,包括EMM(EPS安全上下文管理)和ESM(EPS安全上下文管理)两个模块。
  2. GTPV1-U(GPRS Tunnelling Protocol Version 1 Userplane)层:这一层主要处理GTP协议的信令交互,包括用户数据的传输、会话管理等。GTPV1-U层的代码主要位于D:\openairinterface5g\openair3\GTPV1-U目录下。
  3. S1AP(S1 Application Protocol)层:这一层主要处理eNB与核心网之间的信令交互,包括UE上下文管理、数据传输等。S1AP层的代码主要位于D:\openairinterface5g\openair3\S1AP目录下。
  4. SCTP(Stream Control Transmission Protocol)层:这一层主要提供信令传输服务,保证信令的可靠传输。SCTP层的代码主要位于D:\openairinterface5g\openair3\SCTP目录下。

此外,OpenAir3还包含了一些其他模块和工具,如网络驱动模块、编译工具等。这些模块和工具的代码位于不同的目录下,如D:\openairinterface5g\openair2\NETWORK_DRIVER\LITE目录下是网络驱动模块的代码。

总体来说,OpenAir3的代码结构比较清晰,各个层次的代码都相对独立,方便开发和维护。同时,OAI项目也提供了详细的文档和测试工具,方便开发者理解和测试代码。

\openairinterface5g\openair3\NAS\UE\EMM
\openairinterface5g\openair3\NAS\UE\ESM
\openairinterface5g\openair3\GTPV1-U
\openairinterface5g\openair3\S1AP
\openairinterface5g\openair3\SCTP
\openairinterface5g\openair3\SECU
\openairinterface5g\openair3\UDP

1.OpenAir3的NAS层代码主要负责处理UE(用户设备)与核心网之间的信令交互,包括注册、认证、会话管理等。下面是对NAS层代码的简要解析:

  1. EMM(EPS安全上下文管理)模块:

    • EMM模块主要处理UE的注册、认证和安全上下文管理相关的信令。
    • 在UE注册过程中,EMM模块会与UE进行NAS安全上下文的协商,完成UE的安全认证和授权。
    • EMM模块还负责管理UE的安全上下文,包括密钥、证书等。
  2. ESM(EPS安全上下文管理)模块:

    • ESM模块主要处理EPS安全上下文的修改、删除等操作。
    • 当UE的安全上下文需要更新时,ESM模块会与UE进行信令交互,完成安全上下文的修改。
    • ESM模块还负责处理UE的安全上下文的删除操作。

在NAS层的代码中,主要使用了C++语言进行编写,使用了面向对象的设计思想,将各个功能封装在不同的类中。例如,EMM模块和ESM模块都有自己的类,类中包含了相应的成员函数,用于处理不同的信令交互过程。

此外,NAS层的代码还与其他层次的代码进行交互,如GTPV1-U层和S1AP层。在UE注册过程中,NAS层会与S1AP层交互,建立UE与核心网之间的通信隧道;在数据传输过程中,NAS层会与GTPV1-U层交互,完成用户数据的传输。

总体来说,OpenAir3的NAS层代码结构清晰,易于理解和维护。通过对NAS层代码的解析,可以帮助开发者深入理解5G网络中的NAS协议,为后续的网络开发和优化提供有力支持。

1.1在OpenAir3的NAS层下UE(用户设备)的代码主要包括以下几个部分:

  1. UE类:这是UE的主要类,它包含了UE的初始化和配置过程,以及与核心网进行信令交互的方法。这个类中,你可以找到如注册、注销、安全上下文管理等相关方法的实现。
  2. NAS消息处理:这部分代码主要处理来自UE的NAS消息,如NAS安全上下文请求、NAS安全上下文响应等。这些消息通常会被封装在特定的数据结构中,然后传递给相应的处理函数。
  3. NAS协议栈与底层交互:这部分代码主要负责NAS协议栈与底层(如RRC、RLC等)之间的交互。它通常会定义一些回调函数,用于处理底层的数据传输和状态变化。
  4. NAS状态机:这是一个重要的部分,它定义了UE的各种状态(如空闲状态、连接状态等)以及状态之间的转换条件。状态机的实现通常会与NAS消息处理和NAS协议栈与底层交互紧密相关。

在具体实现上,UE的代码通常会使用C++语言编写,并采用面向对象的设计方式。例如,每一个状态都会有一个对应的类,这些类会继承自一个通用的状态基类,以实现状态机的通用逻辑。

为了更好地理解这部分代码,你需要对3GPP的NAS协议有一定的了解,特别是对UE的行为和信令流程要有清晰的认识。此外,深入理解LTE/SAE网络架构和协议也是非常重要的,因为OpenAir3是在这个基础上进行开发的。

总体来说,OpenAir3的NAS层UE代码是一个高度模块化和结构化的代码库,它为开发者提供了一个很好的学习5G NAS协议和网络行为的机会。通过深入研究这部分代码,你可以对5G网络的运行机制有更深入的理解。

1.1.1在OpenAir3的NAS层下common代码通常指的是一些通用的函数、数据结构和工具,这些代码可以被NAS层以及其他层次的代码所共享和复用。下面是对NAS层中common代码的简要解析:

  1. 数据结构和函数:common代码中定义了一些通用的数据结构,如消息结构体、参数结构体等,这些数据结构用于存储和管理信令消息的各个组成部分。此外,common代码还提供了一些通用的函数,如内存分配、释放、字符串处理等,这些函数为其他代码提供了基本的操作支持。
  2. 日志和调试工具:common代码中还包含了一些日志和调试工具,用于记录和输出NAS层中的状态和信息。这些工具可以帮助开发者进行故障排查和性能分析,从而更好地理解NAS层的运行情况。
  3. 配置文件解析:NAS层中的common代码通常还包含了一些配置文件解析的模块,用于读取和解析NAS层的配置文件。这些配置文件定义了NAS层的行为和参数设置,通过解析配置文件,NAS层可以根据不同的配置进行相应的处理。
  4. 接口定义:common代码中还定义了一些接口,用于NAS层与其他层次之间的交互。这些接口包括回调函数、事件处理函数等,它们使得NAS层能够与其他层次的代码进行有效的通信和协作。

总体来说,OpenAir3的NAS层中common代码是整个NAS层的重要组成部分,它为其他代码提供了通用的功能和服务。通过对common代码的解析和理解,可以帮助开发者更好地掌握NAS层的实现细节,并为后续的开发和优化提供支持。

1.1.1.1在OpenAir3的NAS层下EMM(EPS安全上下文管理)模块是负责处理UE(用户设备)的注册、认证和安全上下文管理的模块。下面是关于EMM模块代码的简要解析:

  1. UE的注册过程:EMM模块中包含了对UE注册过程的处理代码。当UE首次接入网络或重新注册时,它会发送一个NAS安全上下文请求消息给核心网。EMM模块会接收到这个消息,然后与UE进行NAS安全上下文的协商,完成UE的安全认证和授权。在这个过程中,EMM模块会使用预共享密钥(Preshared Key,PSK)或公钥加密算法进行密钥交换,建立起安全通信的通道。
  2. 安全上下文的管理:EMM模块负责管理UE的安全上下文,包括NAS安全上下文和NAS安全上下文会话。在UE注册成功后,EMM模块会为UE创建一个安全上下文,并存储在核心网的数据库中。同时,EMM模块还会管理UE的安全上下文会话,确保UE在每次通信时使用正确的安全上下文。
  3. NAS安全上下文的修改和删除:当UE的安全上下文需要更新时,如密钥更换,EMM模块会与UE进行信令交互,完成安全上下文的修改。此外,当UE注销或离开网络时,EMM模块会负责删除相应的安全上下文。
  4. 与其他模块的交互:EMM模块与其他模块如GTPV1-U(GPRS Tunnelling Protocol Version 1 Userplane)和S1AP(S1 Application Protocol)有密切的交互。在UE注册过程中,EMM模块会与S1AP模块交互,建立UE与核心网之间的通信隧道;在数据传输过程中,EMM模块会与GTPV1-U模块交互,完成用户数据的传输。

总体来说,EMM模块是OpenAir3 NAS层中的核心模块之一,它处理UE的注册、认证和安全上下文管理相关的信令。通过对EMM模块代码的解析,可以帮助开发者深入理解5G网络中的NAS协议和安全机制,为后续的网络开发和优化提供有力支持。

1.1.1.2在OpenAir3的NAS层下ESM(EPS安全上下文管理)模块是负责处理EPS安全上下文的修改和删除等操作的模块。下面是关于ESM模块代码的简要解析:

  1. EPS安全上下文的修改:当UE的安全上下文需要更新时,如密钥更换,ESM模块会与UE进行信令交互,完成安全上下文的修改。这通常涉及到协商新的密钥和证书等安全参数。
  2. EPS安全上下文的删除:当UE注销或离开网络时,ESM模块负责删除相应的安全上下文。这包括清除与UE相关的密钥、证书等信息,以确保UE的安全上下文不再被使用。
  3. 与其他模块的交互:ESM模块与其他模块如NAS层中的EMM模块和S1AP模块有密切的交互。在安全上下文修改过程中,ESM模块会与EMM模块进行信令交互,协调安全上下文的更新。同时,ESM模块还会与S1AP模块交互,确保安全上下文的修改能够正确地应用到核心网中。
  4. 状态管理:ESM模块中包含了对安全上下文状态的管理代码。它会跟踪EPS安全上下文的当前状态,如有效、过期或删除等,并根据状态进行相应的处理。

总体来说,ESM模块是OpenAir3 NAS层中用于处理EPS安全上下文操作的模块。通过对ESM模块代码的解析,可以帮助开发者深入理解5G网络中EPS安全上下文的修改和删除机制,以及与其他模块的交互方式。这有助于进一步理解5G网络中的安全机制和NAS协议的行为。

相关文章:

OAI openair3代码结构整理

openair3代码框架结构 OAI(OpenAirInterface)是一个开源的5G网络软件平台,用于研究和开发5G网络技术。OpenAir3是OAI项目中的一个子项目,专注于5G核心网络的功能实现。 一、OpenAir3的代码主要包括以下几个部分: NAS…...

Kubernets(K8S)启动和运行 01-01 Kubernetes简介

Kubernets(K8S)启动和运行 01-01 Kubernetes简介 Kubernetes is an open source orchestrator for deploying containerized applications. It was originally developed by Google, inspired by a decade of experience deploying scalable, reliable systems in containers …...

PHP特性知识点扫盲 - 下篇

概述 在实际的生产环境中遇到了实际需要解决的问题,需要把服务部署的方式梳理出来,在同一个服务器中部署多个PHP环境,架构图如下: 架构方案 在工作实践中遇到的很多问题的普遍性都是相通的,公司运行的可新项目都是版…...

HarmonyOS应用开发之DevEco Studio安装与初次使用

1、DevEco Studio介绍 DevEco Studio是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用/服务的开发工具。…...

记录第一次在GitHub上面提交Issue

第一次在GitHub上面提交Issue,记录一下。 对着源码调了好久才发现,问题并不在程序而在模型(虽然只是一个很小的问题,但是能够解决问题,并且做出了自己的一点小小贡献,还是很开心。嘻嘻,发博客记…...

【数据库设计和SQL基础语法】--用户权限管理--数据备份和恢复策略

一、引言 数据备份和恢复是数据库管理中至关重要的任务,对于确保数据安全性和业务连续性具有重大的意义。以下是一些关键的重要性方面: 防止数据丢失: 数据备份是防止因硬件故障、人为错误、恶意攻击或其他意外事件导致数据丢失的主要手段。…...

java数据结构与算法刷题-----LeetCode70. 爬楼梯

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只…...

【Unity入门】UGUI之Slider(滑动条)

目录 一、什么是Slider?二、Slider属性与功能 一、什么是Slider? Slider控件允许用户可以通过鼠标来在预先确定的范围调节数值 我们可以在Hierarchy视图右键 -> UI ->Slider来创建滑动条 通过上图可以发现Unity内置的Slider主要有3部分&#x…...

MySQL中UNION和UNION ALL的区别有哪些?

在MySQL中如何想要对两个结果集进行合并操作,可以使用UNION和UNION ALL,如果只是想要去除掉重复的记录,属于UNION ALL 即可,但是如何想要除掉没有重复行数据,就要使用Union。本文详细向大家介绍MySQL中UNION和UNION AL…...

Android kotlin build.gradle.kts配置

1. 添加 maven 仓库 1. 1. settings配置 1. 1.1. settings.gradle repositories {maven {url https://maven.aliyun.com/repository/public/}mavenCentral() }1. 1.2. settings.gradle.kts repositories {maven {setUrl("https://maven.aliyun.com/repository/public/…...

css、js、vue常考部分面试题

css css盒子水平垂直居中方法 方法一:定位 .child{height: 100px;position: absolute;//父元素相对定位top:50%;left:50%;transform: translate(-50%,-50%); } 方法二:定位 .child{width: 100px;height: 100px;position: absolute;top:50%;left:50%…...

OpenAI ChatGPT-4开发笔记2024-03:Chat之Function Calling/Function/Tool/Tool_Choice

Updates on Function Calling were a major highlight at OpenAI DevDay. In another world,原来的function call都不再正常工作了,必须全部重写。 function和function call全部由tool和tool_choice取代。2023年11月之前关于function call的代码都准备翘翘。 干嘛…...

二叉搜索树与双向链表

解题思路一: /** public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeNode(int val) {this.val val;} } */ // 一定要用自己的理解真正弄出来才行,否则没有用! // 再次提醒,计算机这种工科…...

uniapp中组件库的Checkbox 复选框 的丰富使用方法

目录 #平台差异说明 #基本使用 #自定义形状 #禁用checkbox #自定义形状 #自定义颜色 #横向排列形式 #横向两端排列形式 API #Checkbox Props #CheckboxGroup Props #CheckboxGroup Event 复选框组件一般用于需要多个选择的场景,该组件功能完整&#xff…...

Spring Cloud + Vue前后端分离-第10章 基于阿里云OSS的文件上传

源代码在GitHub - 629y/course: Spring Cloud Vue前后端分离-在线课程 Spring Cloud Vue前后端分离-第10章 基于阿里云OSS的文件上传 前面介绍的文件上传是基于本地文件服务器的文件上传,但是自己搭文件服务器会有很多运维的问题,比如磁盘满了要扩容…...

C++ 中的耗时计算函数

#include <time.h>int clock_gettime (clockid_t clock_id, struct timespec *tp) 获取当前 clock_id 的时钟值并存储在 tp 中。 其中 tp 是一个 timespec 结构体&#xff0c;在 time.h 头文件中定义&#xff1a; #include <time.h>:struct timespec {time_t t…...

【Element】el-form和el-table嵌套实现表格编辑并提交表单校验

一、背景 页面需要用到表格采集用户数据&#xff0c;提交时进行表单校验&#xff1b;即表格中嵌套着表单&#xff0c;保存时进行表单校验 二、功能实现 2.1、el-form和el-table嵌套说明 ① :model"formData" 给表单绑定数据&#xff0c;formData是表单的数据对象 …...

初识Winform

什么是winform&#xff1f; WinForms&#xff08;Windows Forms&#xff09;是Microsoft .NET框架中的一个用户界面&#xff08;UI&#xff09;技术&#xff0c;用于创建Windows应用程序。它提供了一组用于构建图形用户界面的类和控件&#xff0c;以及与用户交互的事件模型。 …...

Redis:原理速成+项目实战——Redis实战5(互斥锁、逻辑过期解决缓存击穿问题)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis实战4&#xff08;解决Redis缓存穿透、雪崩、击穿&#xff09; &#x1f4da;订阅专…...

前端优化之一:dns预获取 dns-prefetch 提升页面载入速度

问题&#xff1a;怎么做到dns域解析&#xff1f; 用于优化网站页面的图片 问题&#xff1a;怎么提升网站性能&#xff1f; dns域解析&#xff0c;是提升网站的一个办法。 DNS Prefetch&#xff0c;即DNS预获取&#xff0c;是前端优化的一部分。 一般来说&#xff0c;在前端…...

C语言中一些基本数据类型的典型大小

char&#xff1a;通常是1字节。表示一个字符。int&#xff1a;通常在现代系统中是4字节&#xff08;但这取决于编译器和架构&#xff0c;有时可能是2字节&#xff09;。float&#xff1a;通常是4字节。double&#xff1a;通常是8字节。short 和 short int&#xff1a;通常是2字…...

[C/C++]排序算法 快速排序 (递归与非递归)

目录 &#x1f6a9;概念: &#x1f6a9;实现: ⚡1.hoare ⚡2.挖坑法 ⚡3.双指针法 &#x1f6a9;快速排序递归实现 &#x1f6a9;快速排序非递归实现 &#x1f6a9;概念: 通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据比另一部分的所有…...

『年度总结』逐梦编程之始:我的2023学习回顾与展望

目录 前言 我与Python 我与C语言 第一篇正式博客&#xff1a; 第二篇正式博客&#xff08;扫雷&#xff09;&#xff1a; 指针学习笔记: C语言学习笔记&#xff1a; 我与数据结构&#xff1a; yuan 这篇博客&#xff0c;我将回顾2023年编程之旅的起点&#xff0c;同时展…...

MyBatis学习二:Mapper代理开发、配置文件完成增删改查、注解开发

前言 公司要求没办法&#xff0c;前端也要了解一下后端知识&#xff0c;这里记录一下自己的学习 学习教程&#xff1a;黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 文档&#xff1a; https://mybatis.net.cn/index.html Mapper代理开发 目的 解决…...

【React系列】受控非受控组件

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. refs 的使用 在React的开发模式中&#xff0c;通常情况下不需要、也不建议直接操作DOM原生&#xff0c;但是某些…...

OpenCV-Python(22):2D直方图

目标 了解图像的2D直方图绘制2D直方图 介绍 在前面的部分我们介绍了如何绘制一维直方图&#xff0c;之所以称为一维&#xff0c;是因为我们只考虑了图像的一个特征&#xff1a;灰度值。但是在2D 直方图中我们就需要考虑两个图像特征。对于彩色图像的直方图通常情况下我们需要…...

Kubernetes 100个常用命令

本文简单总结关于使用 Kubectl 进行 Kubernetes 诊断的指南。列出了 100 个 Kubectl 命令&#xff0c;这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于&#xff1a; 集群信息 Pod 诊断 服务诊断 部署诊断 网络诊断 持久卷和持久卷声明诊断 资源…...

labuladong日常刷题-差分数组 | LeetCode 1109航班预定统计 | 花式遍历 151反转字符串里的单词

差分数组–前缀和数组的升级 LeetCode 1109 航班预定统计 2024.1.1 题目链接labuladong讲解[链接] class Solution { public:vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {//构建航班人数数组&#xff0c;数组大小为n,初…...

HbuilderX中的git的使用

原文链接https://blog.csdn.net/Aom_yt/article/details/119924356...

LeetCode每日一题 | 1944. 队列中可以看到的人数

文章目录 队列中可以看到的人数题目描述问题分析程序代码&#xff08;Golang 版本&#xff09; 队列中可以看到的人数 题目描述 原题链接 有 n 个人排成一个队列&#xff0c;从左到右 编号为 0 到 n - 1 。给你以一个整数数组 heights &#xff0c;每个整数 互不相同&#xff…...

上海高端网站建设公/外贸网站搭建

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;linux除了正常的rwx权限外&#xff0c;还有一类附加权限。即&#xff1a;SET位权限(suid、sgid)&粘滞位权限(sticky)SET位权限set位权限(suid、sgid)是为了使“…...

wordpress 访问优化/百度关键词排名十大排名

一&#xff1a;概述 什么是数据库引擎&#xff1f; MySQL提供了多种存储引擎&#xff0c;存储引擎一定程度上决定了表的能力。数据库引擎包括处理事务安全表的引擎和处理非事务安全表的的引擎。通俗点讲&#xff0c;所谓数据库引擎其实也就是存储数据到文件的技术。不同的技术…...

商城网站哪个公司做的好处/民生热点新闻

过去&#xff0c;我们的电脑只限于一个操作系统&#xff0c;如果我们不想从头开始安装另一个操作系统(冒着丢失我们所有宝贵数据的风险)&#xff0c;那么我们无能为力。由于资金限制或物理空间限制&#xff0c;我们并非所有人都能买得起多台电脑&#xff0c;在这种情况下&#…...

有没有教如何做衣服的网站/互联网营销师证书有用吗

EPUB to PDF Converter Mac特别版是专为Mac用户设计的一款PDF转EPUB转换器&#xff0c;尽管PDF是使用最广泛的电子文档格式&#xff0c;并且具有很多优点&#xff0c;但由于PDF不可重排&#xff0c;因此无法很好地适应小屏幕。这个时候你就可以通过将PDF转换为EPUB来增强您的阅…...

网站开发人员如何写工作日志/有什么推广的平台

背景七年级数学上册第三章“一元一次方程”中&#xff0c;通过一些实际问题&#xff0c;研究了最基本的方程形式——一元一次方程&#xff0c;对求解一元一次方程采用了“去分母”、“去括号”、“移项”、“合并同类项”、“系数化1”等方法&#xff1b;学生在熟悉这些方法的同…...

静态营销网站代码/重庆网站搜索排名

解法一&#xff1a;http://siukwan.sinaapp.com/?p189 https://www.cnblogs.com/TonyYPZhang/p/5123058.html 1.这道题目主要是求一个无向图中&#xff0c;以哪个节点为根节点的树的高度最小&#xff1b; 2.常规方法可以使用BFS或者DFS&#xff0c;对每个点都遍历一遍&…...