D~DIDI~DIDIDI!!!!

0%

srsRAN

概述

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.hsched_result.hsf_cch_allocator.h
  • UE 调度控制(sched_ue_ctrl/):sched_harq.hsched_lch.hsched_ue_cell.htpc.h
  • 调度算法(schedulers/):sched_base.hsched_time_pf.h(比例公平)、sched_time_rr.h(轮询)
  • MAC 主模块:mac.hmac_nr.hmac_metrics.h
  • 调度器:sched.hsched_carrier.hsched_common.hsched_grid.hsched_helpers.hsched_ue.h
  • 其他:ta.h(时间提前量)、ue.h(UE 上下文)

RRC 层(stack/rrc/):

  • rrc.h — RRC 主模块
  • rrc_nr.h — NR RRC
  • rrc_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(独立组网)模式

相关文章

  • srsLTE — srsRAN 的前身,包含详细的部署和使用指南
  • OpenLTE — 另一个开源 LTE 实现
  • LTE — LTE 协议栈基础知识
  • 5G — 5G NR 技术概述
  • OAI — OpenAirInterface,另一个主流开源 LTE/5G 项目