openLTE中的RRC层

RRC层的输入输出的结构是LTE_fdd_enb_msgq。LTE_fdd_enb_msgq 结构里面的private包含一个criculat_buffer,circuar_buffer里面有100个LTE_FDD_ENB_MESSAGE_STRUCT,LTE_FDD_ENB_MESSAGE_STRUCT中又包含有dest_layer,type,msg(携带的信息,类型是LTE_FDD_ENB_MESSAGE_UNION,RLC,MAC, PDCP, RRC, MME,GW之间通信的msg都包含rb和user的信息(CMD除外),MAC和PHY之间通信的msg包含tti,rnti等信息。)三种信息。

handle_pdcp_msg()函数的输入信息是 LTE_FDD_ENB_MESSAGE_STRUCT类型的,首先判断要处理的信息的dest_layer是不是RRC或者ANY,如果是,就看信息的type是不是RRC_PDU_READY,如果是就调用handle_pdu_ready()函数对输入信息中的msg进行处理。

handle_pdu_ready()函数的输入信息是LTE_FDD_ENB_MESSAGE_UNION中的LTE_FDD_ENB_RRC_PDU_READY_MSG_STRUCT,里面包含的数据是rb和user。首先从rb中获得需要处理的pdu,然后再从rb中取得该rb的id,如果id是SRB0,则该信息属于CCCH信道,用ccch_sm()函数进行处理,如果id是SRB1或者SRB2,则该信息属于DCCH信道,用dcch_sm()函数进行处理。

ccch_sm()函数的输入是rrc_pdu,和该rrc_pdu的rb和user,首先,通过parse_ul_ccch_message()函数确认输入的rb和user是否相符。由于ccch信道是处理SRB0的,所以该函数处理的rb是SRB0,获取输入SRB0的rrc_state,如果是LTE_FDD_ENB_RRC_STATE_IDLE,就为user 新建SRB1,然后把SRB0的rrc_state改成LTE_FDD_ENB_RRC_STATE_SRB1_SETUP,如果SRB0的rrc_procedure是Connection require,就把SRB1的rrc_procedure和rrc_state分别改成LTE_FDD_ENB_RRC_PROC_RRC_CON_REQ和LTE_FDD_ENB_RRC_STATE_WAIT_FOR_CON_SETUP_COMPLETE。如果SRB0的rrc_procedure是Connection reestablish require就把SRB1的rrc_procedure和rrc_state分别改成LTE_FDD_ENB_RRC_PROC_RRC_CON_REEST_REQ和LTE_FDD_ENB_RRC_STATE_WAIT_FOR_CON_REEST_COMPLETE。

parse_ul_ccch_message()函数的输入是rrc_pdu,和该rrc_pdurbuser,首先用liblte_rrc_unpack_ul_ccch_msg()函数将rrc_pdu中的有效信息提取出来到ul_ccch_msg中,根据ul_ccch_msgid的信息来判断携带该rrc_pdurb是不是属于这个user(看与userid是否一致),如果不一样,就把user替换成这个rbuser。最后更改rb中的rrc_procedurerrc_state

parse_ul_dcch_message()函数的输入是rrc_pdu,和该rrc_pdu的rb和user。里面调用liblte_rrc_unpack_ul_dcch_msg()函数得到包含有msg_type和msg的ul_dcch_msg。

若msg_type是RRC_CON_REEST_COMPLETE ,那么把rrc_state改成RRC_CONNECTED。

若msg_type是RRC_CON_SETUP_COMPLETE,那么把rrc_state改成RRC_CONNECTED,并且向mme发送msg中的dedicated_info_nas信息。

若msg_type是UL_INFO_TRANSFER,就向mme发送msg的dedicated_info信息。

若msg_type是SECURITY_MODE_COMPLETE,把cmd_resp改成LTE_FDD_ENB_MME_RRC_CMD_RESP_SECURITY,然后把信息传递给mme。

handle_mme_msg()函数的输入信息是 LTE_FDD_ENB_MESSAGE_STRUCT类型的,首先判断要处理的信息的dest_layer是不是RRC或者ANY,如果是,就看信息的type是不是RRC_NAS_MSG_READY或者RRC_CMD_READY,如果是RRC_NAS_MSG_READY就调用handle_nas_msg ()函数对输入信息中的msg进行处理。如果是RRC_CMD_READY就调用handle_cmd ()函数对输入信息中的msg进行处理。

send_dl_info_transfer()函数的输入是rrc_sdu,该sdu的rb和user。

将rb的dl_dcch_msg.msg_type改成DL_INFO_TRANSFER。

给rb中的dl_dcch_msg.msg.dl_info_transfer.rrc_transaction_id赋值。

将rb中的dl_dcch_msg.msg.dl_info_transfer.dedicated_info_type改成NAS。

将输入的rrc_sdu中的信息复制到rb中的dl_dcch_msg.msg.dl_info_transfer.dedicated_info。

调用liblte_rrc_pack_dl_dcch_msg()函数将dl_dcch_msg打包成pdcp_sdu。

把处理好的信息发送给PDCP。

handle_nas_msg()函数输入是LTE_FDD_ENB_RRC_NAS_MSG_READY_MSG_STRUCT,从输入信息的rb中的rrc_nas_msg_queue提取出需要处理的rrc_sdu,接着调用send_dl_info_transfer()函数处理该sdu。最后删除掉rrc_nas_msg_queue中的刚刚处理过的rrc_sdu。

handle_cmd()函数的输入是LTE_FDD_ENB_RRC_CMD_READY_MSG_STRUCT,这个结构里面包含着user,rb,cmd,其中cmd可以分成RELEASE,SECURITY,SETUP_DEF_DRB,SETUP_DED_DRB四种。

若cmd是RELEASE:

将rb的dl_dcch_msg.msg_type改成RRC_CON_RELEASE。

给rb中的dl_dcch_msg.msg.dl_info_transfer.rrc_transaction_id赋值。

将rb中的dl_dcch_msg.msg.rrc_con_release.release_cause改成OTHER。

调用liblte_rrc_pack_dl_dcch_msg()函数将dl_dcch_msg打包成pdcp_sdu。

把处理好的信息发送给PDCP。

若cmd是SECURITY:

调用send_ue_capability_enquiry()。

将rb的dl_dcch_msg.msg_type改成UE_CAPABILITY_ENQUIRY。

给rb中的dl_dcch_msg.msg.dl_info_transfer.rrc_transaction_id赋值。

设置rb中的dl_dcch_msg.msg.ue_cap_enquiry。

调用liblte_rrc_pack_dl_dcch_msg()函数将dl_dcch_msg打包成pdcp_sdu。

把处理好的信息发送给PDCP。

调用send_security_mode_command()。

将rb的dl_dcch_msg.msg_type改成SECURITY_MODE_COMMAND。

给rb中的dl_dcch_msg.msg.security_mode.rrc_transaction_id赋值。

将rb中的dl_dcch_msg.msg.security_mode_cmd.sec_algs.cipher_alg设置为EEA0。

将rb中的dl_dcch_msg.msg.security_mode_cmd.sec_algs.int_alg设置为EIA2。

调用liblte_rrc_pack_dl_dcch_msg()函数将dl_dcch_msg打包成pdcp_sdu。

把处理好的信息发送给PDCP。

若cmd是SETUP_DEF_DRB:

新建srb2,drb1和QoS,重新配置rrcconnection.



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值