作者:柒号华仔
个人主页:欢迎访问我的主页
个人信条:星光不问赶路人,岁月不负有心人。
个人方向:主要方向为5G,同时兼顾其他网络协议,编解码协议,C/C++,linux,云原生等,感兴趣的小伙伴可以关注我,一起交流。

目录

  • 1. RRC Reject描述
  • 2. UE接收RRCReject处理流程
  • 3. 消息定义
  • 4. OAI RRC Reject发送判断
  • 5. OAI RRC Reject编码

1. RRC Reject描述

触发条件:基站收到来自UE的RRC Connection Request,根据接纳控制算法,不允许UE接入。
发送内容:wait time,定时器T302的时长

2. UE接收RRCReject处理流程

当UE收到RRC Reject后,按如下流程处理:

  1. 停止计时器T300,T319,T302

  2. 重置MAC并释放默认的MAC Cell Group配置;

  3. 如果在RRCReject中配置了waitTime,则启动定时器T302,将定时器值设置为waitTime;

  4. 如果收到的RRCReject是为了响应上层的请求,通知上层访问受限;

  5. 如果收到的RRCReject是用来回复RRCSetupRequest,通知上层RRC连接失败,程序结束;

  6. 如果收到RRCReject是用来响应RRCResumeRequest:

  • 如果上层触发resume,告知上层RRC连接失败;
  • 如果由于RNA更新而触发恢复,将变量pendingRnaUpdate设置为true,丢弃当前的KgNB密钥,KRRCenc密钥,KRRCint密钥,KUPint密钥和根据5.3.13.3导出的KUPenc密钥;
  • 暂停SRB1,程序结束;

当定时器T302运行时,RRC_INACTIVE状态的UE将继续监视寻呼。

3. 消息定义

RRCReject消息用于拒绝RRC连接建立或RRC连接重建。

信令无线承载:SRB0
传输模式: TM
逻辑信道:CCCH
方向:网络到UE

RRCReject 消息

-- ASN1START
-- TAG-RRCREJECT-STARTRRCReject ::=                       SEQUENCE {criticalExtensions                  CHOICE {rrcReject                           RRCReject-IEs,criticalExtensionsFuture            SEQUENCE {}}
}RRCReject-IEs ::=                   SEQUENCE {waitTime                            RejectWaitTime                                                          OPTIONAL,   -- Need NlateNonCriticalExtension            OCTET STRING                                                            OPTIONAL,nonCriticalExtension                SEQUENCE{}                                                              OPTIONAL
}-- TAG-RRCREJECT-STOP
-- ASN1STOP

RejectWaitTime用于为计时器T302提供以秒为单位的值,取值范围1~16。

RejectWaitTime信息内容

-- ASN1START
-- TAG-REJECTWAITTIME-STARTRejectWaitTime ::=                  INTEGER (1..16)-- TAG-REJECTWAITTIME-STOP
-- ASN1STOP

4. OAI RRC Reject发送判断

在开源OAI代码中,基站收到rrcSetupRequest后,会对其携带的UE Identity类型进行判断,如果既不是随机值也不是TMSI,则会向UE发送RRC Reject。

if (NR_InitialUE_Identity_PR_randomValue == rrcSetupRequest->ue_Identity.present) {......
} else if (NR_InitialUE_Identity_PR_ng_5G_S_TMSI_Part1 == rrcSetupRequest->ue_Identity.present) {......
} else {rrc_gNB_generate_RRCReject(ctxt_pP,rrc_gNB_get_ue_context(gnb_rrc_inst, ctxt_pP->rnti),CC_id);
}

5. OAI RRC Reject编码

熟悉ASN用法的都清楚,option选项比较多,为了适配灵活多变的数据结构,需要大量在结构体中使用指针。在实际赋值前,需要使用malloc或者calloc给指针变量申请内存。RRC Reject承载于CCCH信道,因此编码时外层需要进行DL_CCCH编码。

uint8_t do_RRCReject(uint8_t Mod_id,uint8_t *const buffer)
{asn_enc_rval_t                                   enc_rval;;NR_DL_CCCH_Message_t                             dl_ccch_msg;NR_RRCReject_t                                   *rrcReject;NR_RejectWaitTime_t                              waitTime = 1;memset((void *)&dl_ccch_msg, 0, sizeof(NR_DL_CCCH_Message_t));dl_ccch_msg.message.present = NR_DL_CCCH_MessageType_PR_c1; //指定逻辑信道消息类型为CCCHdl_ccch_msg.message.choice.c1   = CALLOC(1, sizeof(struct NR_DL_CCCH_MessageType__c1));dl_ccch_msg.message.choice.c1->present = NR_RRCReject__criticalExtensions_PR_rrcReject; //指定dl_ccch消息类型为rrcRejectdl_ccch_msg.message.choice.c1->choice.rrcReject = CALLOC(1,sizeof(NR_RRCReject_t));rrcReject = dl_ccch_msg.message.choice.c1->choice.rrcReject;rrcReject->criticalExtensions.choice.rrcReject           = CALLOC(1, sizeof(struct NR_RRCReject_IEs));rrcReject->criticalExtensions.choice.rrcReject->waitTime = CALLOC(1, sizeof(NR_RejectWaitTime_t)); //为waitTime申请内存rrcReject->criticalExtensions.present = NR_RRCReject__criticalExtensions_PR_rrcReject; //设置rrcReject内部present为rrcRejectrrcReject->criticalExtensions.choice.rrcReject->waitTime = &waitTime; //waitTime赋值if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {xer_fprint(stdout, &asn_DEF_NR_DL_CCCH_Message, (void *)&dl_ccch_msg);}//消息体进行per编码enc_rval = uper_encode_to_buffer(&asn_DEF_NR_DL_CCCH_Message,NULL,(void *)&dl_ccch_msg,buffer,100);if(enc_rval.encoded == -1) {LOG_E(NR_RRC, "[gNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",enc_rval.failed_type->name, enc_rval.encoded);return -1;}LOG_D(NR_RRC,"RRCReject Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);return((enc_rval.encoded+7)/8);
}

【5G NR】RRC Reject解析相关推荐

  1. 5G NR—— RRC状态

    5G NR下RRC有三种状态:IDLE.INACTIVE.CONNECTED,每种状态的特征如下: RRC_IDLE: -PLMN选择 -系统信息广播 -小区重选 -被叫寻呼由5GC发起 -被叫寻呼区 ...

  2. 5G NR RRC协议总体介绍

    1. 开机入网流程 UE入网过程包括几个子过程: 小区搜索与选择 UE开机选网,小区搜索并完成下行同步. 系统消息广播 UE读取广播信息,选择合适小区进行驻留. 随机接入 UE与gNB建立上行同步. ...

  3. 5G NR 频率计算解析

    网上关于NR 频率介绍的文章不少,但多为直接的规范翻译,而且对于一些关键概念理解都有偏差:下面我会结合实际配置例子来解释下关键概念: 5G在sub6Ghz下有很多band可用,具体到每个band,又可 ...

  4. 5G NR RRC连接控制

    1. UE三种状态 UE分为三种状态:空闲态,连接态和非活动态.处于空闲态的UE需要发起业务时,首先需要发起RRC建立请求.触发空闲态到连接态的过程,就是RRC建立过程.非活动态到连接态的过程,就是R ...

  5. 5G/NR中RRC的三种状态(idle, active, inactive)

    一.RRC_INACTIVE 状态的引入 在RRC_INACTIVE mode引入前,LTE原来只有RRC_IDLE和RRC_CONNECTED两种RRC状态, R13之后,LTE RRC新引入了一个 ...

  6. 5G/NR 为什么RRC新增RRC_INACTIVE态?

    如果大家了解过LTE中的NB-IoT,那么就会明白新增RRC_INACTIVE态的目的.RRC_INACTIVE态在LTE中的NB-IoT就已经引用,由于NB-IoT属于部署低功耗场景,因此在NB-I ...

  7. 5G NR协议学习--TS38.211主要参数解读

    1 OFDM 正交频分复用(Orthogonal Frequency Division Multiplexing)技术,实际上OFDM是MCM(Multi Carrier Modulation,多载波 ...

  8. 5G NR双激活协议栈(DAPS)~导入

    名词解释 3GPP在TS38.300 R16(Stage2)中定义了支持"双激活协议栈(DAPS-Dual Active Protocol Stack)"切换. 在双激活协议栈切换 ...

  9. 5G/NR 学习笔记 - RAR随机接入过程

    5G/NR 学习笔记 - RAR随机接入过程 随机接入的目的 在小区搜索过程之后,UE已经与小区取得了下行同步,因此UE能够接收下行数据.但UE只有与小区取得上行同步,才能进行上行传输.UE通过随机接 ...

  10. 5G(7)---5G NR协议栈及功能2 - MAC RLC PDCP SDAP

    5G NR协议栈及功能2 - MAC RLC PDCP SDAP 备注:本文所有图片均来自3GPP标准,包括3GPP TS 38.300 V15.0.0 (2017-12)和3GPP TS 38.20 ...

最新文章

  1. 在Ubuntu 12.04 64bit上搭建Crtmpserver视频直播服务
  2. 【目标检测基础积累】常用的评价指标
  3. 第二次结对编程作业——毕设导师智能匹配
  4. [渝粤教育] 武汉大学 数字图像处理 参考 资料
  5. Javascript判断object还是list/array的类型(包含javascript的数据类型研究)
  6. 主键字母自动生成函数
  7. (转)十分钟搞定你自己的多图片/文件服务器
  8. Axure导入元件库和使用
  9. 宿舍管理系统 php,基于php的大学生宿舍管理系统
  10. java 格式化日期 星期_java 日期格式化
  11. 语音合成(TTS)论文优选:HIERARCHICAL PROSODY MODELING FOR NON-AUTOREGRESSIVE SPEECH SYNTHESIS
  12. USDP使用笔记(二) 部署免费的USDP大数据双集群替代CDH CDP与HDP
  13. Python文件操作错误:OSError: [Errno 22] Invalid argument(关于Windows下文件名中的敏感字符)
  14. mac 固态硬盘 格式化_您可以格式化硬盘或固态硬盘多少次?
  15. MacOS 开发 - isFlipped(坐标系)
  16. 软件工程实践寒假作业
  17. WES分析2-分析流程
  18. uni-app 快速发送短信
  19. CSS文本超过两行用省略号代替(兼容所有浏览器)
  20. 初中生也能看懂的狭义相对论(1.世界是什么?)(原子,质子和分子)(看不懂算我输)

热门文章

  1. Matlab 图像处理
  2. TMS320F28035 中断中使用DINT,无法关闭中断的原因
  3. gitlab上fork别人的代码,如何更新主分支最新代码
  4. 那些年的广告语【持续更】
  5. 关闭Typora拼写检查功能
  6. 表格列宽怎么设置?(excel表格)
  7. bzoj2037 创世纪
  8. c 文件中调用 cpp 中函数
  9. k8s pod删不掉
  10. excel取末尾数字_excel提取数字的方法步骤详解