From 0e8acc022b19134ba69d6259ddb6f9e92ed175e9 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Tue, 14 Oct 2014 12:56:55 +0000 Subject: [PATCH] git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5883 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair2/RRC/LITE/MESSAGES/asn1_msg.c | 34 +++++++++++++++++++++++++++ openair2/RRC/LITE/MESSAGES/asn1_msg.h | 10 ++++++++ openair2/RRC/LITE/defs.h | 6 +++++ openair2/RRC/LITE/rrc_eNB.c | 32 +++++++++++++++++++++---- 4 files changed, 77 insertions(+), 5 deletions(-) diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c index fc645d93a1..cbaa1ac23d 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c @@ -1794,8 +1794,42 @@ uint16_t do_RRCConnectionReconfiguration(uint8_t Mod return((enc_rval.encoded+7)/8); } +uint8_t do_RRCConnectionRelease(uint8_t Mod_id, + uint8_t *buffer, + uint8_t Transaction_id) { + + asn_enc_rval_t enc_rval; + + DL_DCCH_Message_t dl_dcch_msg; + RRCConnectionRelease_t *rrcConnectionRelease; + + + memset(&dl_dcch_msg,0,sizeof(DL_DCCH_Message_t)); + + dl_dcch_msg.message.present = DL_DCCH_MessageType_PR_c1; + dl_dcch_msg.message.choice.c1.present = DL_DCCH_MessageType__c1_PR_rrcConnectionReconfiguration; + rrcConnectionRelease = &dl_dcch_msg.message.choice.c1.choice.rrcConnectionRelease; + + // RRCConnectionRelease + rrcConnectionRelease->rrc_TransactionIdentifier = Transaction_id; + rrcConnectionRelease->criticalExtensions.present = RRCConnectionRelease__criticalExtensions_PR_c1; + rrcConnectionRelease->criticalExtensions.choice.c1.present =RRCConnectionRelease__criticalExtensions__c1_PR_rrcConnectionRelease_r8 ; + + rrcConnectionRelease->criticalExtensions.choice.c1.choice.rrcConnectionRelease_r8.releaseCause = ReleaseCause_other; + rrcConnectionRelease->criticalExtensions.choice.c1.choice.rrcConnectionRelease_r8.redirectedCarrierInfo = NULL; + rrcConnectionRelease->criticalExtensions.choice.c1.choice.rrcConnectionRelease_r8.idleModeMobilityControlInfo = NULL; + + rrcConnectionRelease->criticalExtensions.choice.c1.choice.rrcConnectionRelease_r8.nonCriticalExtension=CALLOC(1,sizeof(*rrcConnectionRelease->criticalExtensions.choice.c1.choice.rrcConnectionRelease_r8.nonCriticalExtension)); + + enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message, + (void*)&dl_dcch_msg, + buffer, + RRC_BUF_SIZE); +} + uint8_t TMGI[5] = {4,3,2,1,0};//TMGI is a string of octet, ref. TS 24.008 fig. 10.5.4a + #ifdef Rel10 uint8_t do_MBSFNAreaConfig(uint8_t Mod_id, LTE_DL_FRAME_PARMS *frame_parms, diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.h b/openair2/RRC/LITE/MESSAGES/asn1_msg.h index 683ff95c50..13244bbb95 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.h +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.h @@ -196,6 +196,16 @@ uint16_t do_RRCConnectionReconfiguration(uint8_t Mod #endif ); +/** +\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI. This +routine only generates an mo-data establishment cause. +@param Mod_id Module ID of eNB +@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU +@param transaction_id Transaction index +@returns Size of encoded bit stream in bytes*/ + +uint8_t do_RRCConnectionRelease(uint8_t Mod_id, uint8_t *buffer,int Transaction_id); + /*** * \brief Generate an MCCH-Message (eNB). This routine configures MBSFNAreaConfiguration (PMCH-InfoList and Subframe Allocation for MBMS data) * @param buffer Pointer to PER-encoded ASN.1 description of MCCH-Message PDU diff --git a/openair2/RRC/LITE/defs.h b/openair2/RRC/LITE/defs.h index 3372122828..b79431d7a0 100644 --- a/openair2/RRC/LITE/defs.h +++ b/openair2/RRC/LITE/defs.h @@ -604,6 +604,12 @@ void rrc_eNB_process_RRCConnectionSetupComplete(module_id_t module_idP, frame_t \param rrcConnectionReconfigurationComplete Pointer to RRCConnectionReconfigurationComplete message*/ void rrc_eNB_process_RRCConnectionReconfigurationComplete(module_id_t module_idP,frame_t frameP,module_id_t ue_module_idP,RRCConnectionReconfigurationComplete_r8_IEs_t *rrcConnectionReconfigurationComplete); +/**\brief Generate the RRCConnectionRelease + \param module_idP Instance ID for eNB + \param frame Frame index + \param ue_module_idP Index of UE receiving the message*/ +void rrc_eNB_generate_RRCConnectionRelease(module_id_t module_idP,frame_t frameP, ue_id_t ue_idP); + #if defined(ENABLE_ITTI) /**\brief RRC eNB task. \param void *args_p Pointer on arguments to start the task. */ diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 101001f8b1..dacd0a85a1 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -618,14 +618,36 @@ void rrc_eNB_generate_UECapabilityEnquiry( } +void rrc_eNB_generate_RRCConnectionRelease(module_id_t enb_mod_idP, + frame_t frameP, + ue_id_t ue_idP) { + + uint8_t buffer[RRC_BUF_SIZE]; + uint16_t size; + + memset(buffer, 0, RRC_BUF_SIZE); + + size = do_RRCConnectionRelease(enb_mod_idP, buffer,rrc_eNB_get_next_transaction_identifier(enb_mod_idP)); + + LOG_I(RRC, + "[eNB %d] Frame %d Logical Channel DL-DCCH, Generate RRCConnectionRelease (bytes %d, UE id %d)\n", + enb_mod_idP, frameP, size, ue_idP); + + LOG_D(RRC, + "[FRAME %05d][RRC_eNB][MOD %u/%u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionRelease to UE %d MUI %d) --->][PDCP][MOD %u/%u][RB %u]\n", + frameP, enb_mod_idP, ue_idP, size, ue_idP, rrc_eNB_mui, enb_mod_idP, ue_idP, DCCH); + //rrc_rlc_data_req(enb_mod_idP,frameP, 1,(ue_idP*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); + pdcp_rrc_data_req(enb_mod_idP, ue_idP, frameP, 1, DCCH, rrc_eNB_mui++, 0, size, buffer, 1); +} + /*------------------------------------------------------------------------------*/ static void rrc_eNB_generate_defaultRRCConnectionReconfiguration( - module_id_t enb_mod_idP, - frame_t frameP, - module_id_t ue_mod_idP, - uint8_t ho_state) { + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP, + uint8_t ho_state) { #if defined(ENABLE_ITTI) - eNB_RRC_UE_INFO *UE_info = &eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP]; + eNB_RRC_UE_INFO *UE_info = &eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP]; #endif uint8_t buffer[RRC_BUF_SIZE]; uint16_t size;