1. RRC源码位置
RRC(Radio Resource Control)称为无线资源控制,是5G系统的核心模块,其主要作用是给下层(PHY,MAC,RLC,PDCP)控制或配置所有无线资源,从而保证UE与基站之间进行通信。
OAI RRC模块位于openair2\RRC下,其下有NR,LTE,NR UE等几个源码目录,我们只分析NR。
2. 文件功能
RRC模块主要文件如下:
文件名 | 功能 |
---|---|
rrc_gNB.c | RRC核心程序,包括RRC消息接收和处理 |
rrc_gNB_NGAP.c | NGAP消息生成和发送 |
rrc_gNB_UE_context.c | UE上下文生成,获取和删除等 |
rrc_gNB_reconfig.c | Coreset0,搜索空间,BWP,rb等参数配置 |
rrc_gNB_GTPV1U.c | GTPV1U相关 |
nr_rrc_config.c | Rlc,mac cellgroup等一些参数初始化为0 |
nr_rrc_common.c | 一些全局参数初始化 |
3. 函数功能
rrc_gNB.c是RRC模块的核心源码文件,所有RRC消息由这里接收,所有处理流程也从这里发起,rrc_gnb_task()相当于RRC模块的Main主函数。
函数 | 描述 |
---|---|
rrc_gnb_task | 接收其他模块传给RRC模块的msg,根据消息ID进入不同的处理分支 |
rrc_gNB_decode_dcch | dcch解码 |
nr_rrc_gNB_decode_ccch | ccch解码 |
rrc_gNB_generate_RRCSetup | 生成RRC Setup |
rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest | 生成对于RRC重建的RRC SETUP |
rrc_gNB_generate_RRCReject | 生成RRC Reject |
rrc_gNB_process_RRCSetupComplete | 处理RRC setupComplete |
rrc_gNB_generate_defaultRRCReconfiguration | 生成RRC重配命令 |
rrc_gNB_process_RRCReconfigurationComplete | 处理RRC重配完成命令 |
rrc_gNB_generate_RRCReestablishment | 生成RRC重建命令 |
rrc_gNB_process_RRCConnectionReestablishmentComplete | 处理RRC重建完成命令 |
rrc_gNB_generate_SecurityModeCommand | 生成加密模式命令 |
rrc_gNB_generate_UECapabilityEnquiry | 生成UE能力查询 |
rrc_gNB_generate_RRCRelease | 生成RRCRelease |
init_NR_SI | MIB,SIB1编码 |
4. 主函数流程
itti_receive_msg()为主接收函数,上一篇已讲过。通过ITTI_MSG_ID(msg_p)获取消息ID,由switch转入各个处理分支流程,对数据进行解码。
nr_rrc_gNB_decode_ccch():负责CCCH解码,传入的数据调用uper_decode()进行per解码,得到消息ID,主要消息包括rrcSetupRequest和rrcReestablishmentRequest两条。
rrc_gNB_decode_dcch():负责DCCH解码,传入的数据调用uper_decode()进行per解码,得到消息ID,包括rrcSetupComplete,rrcReconfigurationComplete,ulInformationTransfer,securityModeComplete,securityModeFailure,ueCapabilityInformation,rrcReestablishmentComplete。
其他几条分支主要是NGAP相关的消息,包括下行NAS,PDU会话建立和释放,UE上下文建立和释放。