【5G NR】RRC Reject解析

简介: RRCReject消息用于拒绝RRC连接建立或RRC连接重建。信令无线承载SRB0传输模式TM逻辑信道CCCH方向网络到UERRCReject消息RRCRejectRejectWaitTime用于为计时器T302提供以秒为单位的值,取值范围1~16。

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连接失败,程序结束;

在这里插入图片描述

  1. 如果收到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-START

RRCReject ::=                       SEQUENCE {
    criticalExtensions                  CHOICE {
        rrcReject                           RRCReject-IEs,
        criticalExtensionsFuture            SEQUENCE {}
    }
}

RRCReject-IEs ::=                   SEQUENCE {
    waitTime                            RejectWaitTime                                                          OPTIONAL,   -- Need N
    lateNonCriticalExtension            OCTET STRING                                                            OPTIONAL,
    nonCriticalExtension                SEQUENCE{}                                                              OPTIONAL
}

-- TAG-RRCREJECT-STOP
-- ASN1STOP

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

RejectWaitTime信息内容

-- ASN1START
-- TAG-REJECTWAITTIME-START

RejectWaitTime ::=                  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; //指定逻辑信道消息类型为CCCH
    dl_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消息类型为rrcReject

    dl_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为rrcReject
    rrcReject->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);
}
相关文章
|
2月前
|
网络协议 物联网 5G
K3S 系列文章 -5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout' 分析与解决
K3S 系列文章 -5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout' 分析与解决
|
11月前
|
安全 5G 网络性能优化
【5G NR】无线承载SRB和DRB
无线承载RB(Radio Bearer)是基站为UE分配不同层协议实体及配置的总称,包括PDCP协议实体、RLC协议实体、MAC协议实体和PHY分配的一系列资源等。RB是无线接口连接eNodeB和UE的通道(包括PHY、MAC、RLC和PDCP),任何在无线接口上传输的数据都要经过RB。 无线承载有两种,一种是信令承载称为SRB,一种是数据承载称为DRB,两者各有分工,分层保证了无线传输的有效性。
927 0
|
编解码 安全 算法
【5G NR】UE注册流程
UE注册流程整体解析,包括RRC连接建立,UE身份信息获取,鉴权,加密完保和上下文建立。
1110 2
【5G NR】UE注册流程
|
存储 编解码 网络协议
【5G NR】RRC连接释放
当UE与基站出现RRC重配置失败、切换失败、无线链路失败和完整性保护失败等失败时,将发起RRC Release过程,将UE转为RRC_IDLE或RRC_INACTIVE状态。
847 0
【5G NR】RRC连接释放
|
人工智能 大数据 5G
直播回顾 | 第二期直播课堂:5G消息在文旅场景的应用探讨(含有多个案例解析)
2021年10月12日上午,由【中国移动5G消息开发者社区】举办的第二期【5G消息学院主题沙龙】顺利举行!
直播回顾 | 第二期直播课堂:5G消息在文旅场景的应用探讨(含有多个案例解析)
|
数据可视化 5G 开发者
直播回顾 | 第7期5G消息云课堂:“南山政务服务”绽放杯获奖案例解析 | 文末有回放
2021年11月16日,由【中国移动5G消息开发者社区】举办的第七期【5G消息云课堂】顺利举行。本期课堂以“绽放杯”-一等奖南山政务服务获奖案例作为主题分享,特别邀请了梦网科技5G战略合作中心副总经理饶冠旗,产品总监许红波做客直播间,围绕当下5G消息在政务领域的通用解决方案以及南山政务服务5G消息案例解析进行了分享与探讨。
直播回顾 | 第7期5G消息云课堂:“南山政务服务”绽放杯获奖案例解析 | 文末有回放
|
2天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
11天前
yolo-world 源码解析(六)(2)
yolo-world 源码解析(六)
22 0
|
11天前
yolo-world 源码解析(六)(1)
yolo-world 源码解析(六)
15 0

推荐镜像

更多