openair-cn-cups descriptions
openair-cn-cups是在openair-cn的基础上将spgw控制面与用户面分离,实现从LTE EPC向5G Core的演进。CUPS就是控制面与用户面分离的意思。
代码目录结构解析
整体代码结构
(1) gtpv1u: 实现的GTPU协议层内容
(2) gtpv2c: 实现的GTPC协议层内容
(3) itti: 消息中间件ITTI库
(4) oai_spgwc: 分离后spgw控制面功能(main()),将是5G SMF中的一部分功能
(5) oai_spgwu: 分离后spgw用户面功能(main()),将是5G UPF中的一部分功能
(6) pfcp: 实现pfcp协议层内容
(7) pgwc: 实现pgw控制面功能部分
(8) sgwc: 实现sgw控制面功能部分
(9) spgwu: spgw用户面功能部分
(10) udp: UDP服务器功能实现
sgwc文件解析
(1) sgwc_app.*: 实现的sgw-c应用层功能
(2) sgwc_config.*: 实现的是sgwc应用中配置文件管理的类
(3) sgwc_eps_bearer_context.*: sgwc中eps bearer context的管理类实现
(4) sgwc_pdn_connection.cpp: sgwc中pdn connection的管理类实现
(5) sgwc_procedure.*: 实现sgwc中具备的消息流程
(6) sgwc_s11.*: 实现sgwc中s11接口协议栈
(7) sgwc_s5s8.*: 实现sgwc中s5s8接口协议栈
代码理解方式
根据实际的系统流程消息定位代码执行位置。比如spgw的功能就是创建管理会话功能,所以以MME通过s11接口发送CREATE SESSION REQUEST消息为例讲解如何理解代码。
For Example:
因为消息源来自MME,所以第一步就是SGW-C从s11(协议栈为gtpv2c/udp)接收数据,从sgw-c角度来看就是udp接收数据buffer,从gtpv2c层解析IE数据并触发sgw-c相关callback。在文件代码中位置为 openair-cn-cups/src/sgwc/sgwc_s11.cpp(这个cpp/hpp文件就是实现的s11接口协议栈),其中有个函数sgw_s11::handle_receive_create_session_request就是处理从gtpv2c接口协议栈中接收到的CREATE SESSION REQUEST消息并处理。找到消息源之后就可以根据代码流程往后理解分析。