概述
srsRAN(原名 srsLTE)是由 Software Radio Systems (SRS) 开发的开源 4G/5G 软件无线电套件。它提供了完整的 LTE 和 5G NR 协议栈实现,包括 UE(用户设备)、eNodeB/gNodeB(基站)以及 EPC/5GC(核心网)组件。
srsRAN 是目前最为活跃和功能完善的开源蜂窝网络实现之一,广泛用于学术研究、安全测试和原型开发。
本文主要分析 srsRAN 项目的 代码结构与模块功能,帮助开发者快速理解项目架构。
项目代码结构
srsRAN 项目主要包含以下顶层目录:
| 目录 | 说明 |
|---|---|
lib/ |
公共库,包含协议栈底层实现 |
srsenb/ |
eNodeB / gNodeB 基站实现 |
srsue/ |
UE 用户设备实现 |
srsepc/ |
EPC 核心网实现 |
test/ |
测试代码 |
以下重点分析 srsenb(基站端) 的代码结构。
srsenb 模块详解
头文件目录(hdr/)
1. common — 公共定义
common_enb.h— eNB 公共定义rnti_pool.h— RNTI 资源池管理
2. phy — 物理层
物理层分为 LTE 和 NR 两套实现,结构对称:
| 子模块 | LTE | NR | 说明 |
|---|---|---|---|
| CC Worker | cc_worker.h |
cc_worker.h |
分量载波工作线程 |
| SF Worker | sf_worker.h |
sf_worker.h |
子帧工作线程 |
| Worker Pool | worker_pool.h |
worker_pool.h |
工作线程池 |
物理层公共头文件:
enb_phy_base.h— PHY 基类phy_common.h— PHY 公共定义phy_interfaces.h— PHY 接口定义phy_metrics.h— PHY 性能指标phy_ue_db.h— UE 数据库(PHY 层)phy.h— PHY 主模块prach_worker.h— PRACH(物理随机接入信道)处理txrx.h— 收发处理vnf_phy_nr.h— VNF(虚拟网络功能)NR PHY
3. stack — 协议栈
协议栈是 srsenb 的核心,包含 MAC、RRC 和上层协议:
MAC 层(stack/mac/):
- 调度 PHY 信道(
sched_phy_ch/):sched_dci.h、sched_result.h、sf_cch_allocator.h - UE 调度控制(
sched_ue_ctrl/):sched_harq.h、sched_lch.h、sched_ue_cell.h、tpc.h - 调度算法(
schedulers/):sched_base.h、sched_time_pf.h(比例公平)、sched_time_rr.h(轮询) - MAC 主模块:
mac.h、mac_nr.h、mac_metrics.h - 调度器:
sched.h、sched_carrier.h、sched_common.h、sched_grid.h、sched_helpers.h、sched_ue.h - 其他:
ta.h(时间提前量)、ue.h(UE 上下文)
RRC 层(stack/rrc/):
rrc.h— RRC 主模块rrc_nr.h— NR RRCrrc_ue.h— UE 上下文管理rrc_config.h/rrc_config_common.h— RRC 配置rrc_cell_cfg.h— 小区配置rrc_mobility.h— 移动性管理rrc_metrics.h— RRC 性能指标mac_controller.h— MAC 控制器rr_bearer_cfg.h— 无线承载配置ue_meas_cfg.h/ue_rr_cfg.h— UE 测量与无线资源配置
上层协议(stack/upper/):
gtpu.h— GTP-U 隧道协议pdcp.h/pdcp_nr.h— PDCP(分组数据汇聚协议)rlc.h/rlc_nr.h— RLC(无线链路控制)s1ap.h/s1ap_metrics.h— S1-AP(S1 应用协议)sdap.h— SDAP(服务数据适配协议,5G NR)
协议栈框架:
enb_stack_base.h— 协议栈基类enb_stack_lte.h— LTE 协议栈gnb_stack_nr.h— NR 协议栈
4. 顶层模块
enb.h— eNB 主程序cfg_parser.h/parser.h— 配置解析器metrics_csv.h/metrics_json.h/metrics_stdout.h— 性能指标输出
源文件目录(src/)
源文件与头文件一一对应,以下注释关键模块的功能:
PHY 层源码
phy_ue_db.cc— 设定 PHY 层数据库的栈空间,并对 UE 进行配置phy.cc— 物理随机接入过程信道配置、调节参考信号phy_common.cc— PHY 公共功能prach_worker.cc— PRACH 处理线程txrx.cc— 基带信号收发vnf_phy_nr.cc— NR VNF PHY 实现
MAC 层源码
mac.cc— MAC 层初始化、停止、数据调度
RRC 层源码
rrc.cc— RRC 协议栈的初始化/停止,用户添加与管理
上层协议源码
pdcp.cc— PDCP 协议层的启动/停止,添加/移除/清除用户,添加/删除承载,获取承载状态,重建,发送状态报告rlc.cc— RLC 初始化/停止,添加/移除 RLC 用户,缓冲区清理,检查/添加/删除/暂停/继续承载,RLC 重建s1ap.cc— S1-AP 接口实现sdap.cc— SDAP 协议实现
协议栈框架源码
enb_stack_lte.cc— 初始化 RNTI 和承载的内存空间,启用相关日志,开启 pcap 抓包和 trace 追踪,调用 MAC / RLC / PDCP / RRC / S1AP / GTP-U 的初始化
顶层模块源码
enb.cc— 无线设备加载与启动,PHY 层启动,LTE 协议栈启动/停止,数据流打印main.cc— 设定配置默认值,加载配置文件enb.conf,检查配置格式,设置日志等级,处理输入(t启停监控,q退出),处理信号及图形化界面输出enb_cfg_parser.cc/gnb_cfg_parser.h— 配置文件解析metrics_csv.cc/metrics_json.cc/metrics_stdout.cc/parser.cc— 性能指标与配置解析
与 srsLTE 的关系
srsRAN 是 srsLTE 项目的演进版本。2021 年,SRS 团队将项目更名为 srsRAN,以反映其对 5G NR 的支持。主要变化包括:
- 添加了 gNodeB(5G 基站)支持
- 引入了 NR 协议栈(MAC NR、RRC NR、PDCP NR、RLC NR、SDAP)
- 支持 NSA(非独立组网)和 SA(独立组网)模式