Pre-ci test passed git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4000 818b1a75-f10b-46b9-bf7c-635c3b92a50f
655 lines
28 KiB
C
Executable File
655 lines
28 KiB
C
Executable File
/***************************************************************************
|
|
rrc_ue_msg_peer.c - description
|
|
-------------------
|
|
begin : Jan 6, 2003
|
|
copyright : (C) 2003, 2010 by Eurecom
|
|
email : Michelle.Wetterwald@eurecom.fr
|
|
**************************************************************************
|
|
Procedures to perform encoding/decoding of RRC messages in UE
|
|
***************************************************************************/
|
|
/********************
|
|
//OpenAir definitions
|
|
********************/
|
|
#include "LAYER2/MAC/extern.h"
|
|
#include "UTIL/MEM/mem_block.h"
|
|
|
|
/********************
|
|
// RRC definitions
|
|
********************/
|
|
#include "rrc_ue_vars.h"
|
|
#include "rrc_msg_class.h"
|
|
// A verifier
|
|
// #include "rrc_msg_pdus.h"
|
|
// #include "rrc_msg_constant.h"
|
|
//-----------------------------------------------------------------------------
|
|
#include "rrc_proto_msg.h"
|
|
#include "rrc_proto_int.h"
|
|
|
|
/**************************************************************/
|
|
/* Uplink CCCH messages - Encode */
|
|
/**************************************************************/
|
|
//-----------------------------------------------------------------------------
|
|
/* RRC Connection Request */
|
|
void rrc_ue_msg_connreq(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_CCCH_Message * ul_ccch_msg;
|
|
mem_block_t *p;
|
|
|
|
if (!protocol_ms->rrc.establishment_cause)
|
|
protocol_ms->rrc.establishment_cause = registration;
|
|
else
|
|
protocol_ms->rrc.establishment_cause = callRe_establishment;
|
|
protocol_ms->rrc.prot_error_indicator = noError;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(RRCConnectionRequest);
|
|
// Temp - Test/Messages
|
|
// ul_ccch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// memset (ul_ccch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// //
|
|
// protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_ccch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_ccch_msg = (struct UL_CCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_ccch_msg;
|
|
// Encode
|
|
ul_ccch_msg->integrityCheckInfo = 0; // No check with RRC Connection Request
|
|
ul_ccch_msg->message.type = UL_CCCH_rrcConnectionRequest;
|
|
status = rrc_PEREnc_RRCConnectionRequest((RRCConnectionRequest*) &(ul_ccch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Connection Request - status : %d\n", status);
|
|
msg("\n[RRC_MSG] Connection Request - length : %d\n", protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/* Cell Update */
|
|
void rrc_ue_msg_cellUpdate(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_CCCH_Message * ul_ccch_msg;
|
|
mem_block_t *p;
|
|
|
|
// Temp : Hard coded values
|
|
protocol_ms->rrc.am_RLC_ErrorIndicationRb2_3or4 = FALSE;
|
|
protocol_ms->rrc.am_RLC_ErrorIndicationRb5orAbove = FALSE;
|
|
protocol_ms->rrc.cellUpdateCause = re_enteredServiceArea;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(CellUpdate);
|
|
// Temp - Test/Messages
|
|
//ul_ccch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
//memset (ul_ccch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
//
|
|
//protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_ccch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_ccch_msg = (struct UL_CCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_ccch_msg;
|
|
// Encode
|
|
ul_ccch_msg->integrityCheckInfo = 123;
|
|
ul_ccch_msg->message.type = UL_CCCH_cellUpdate;
|
|
status = rrc_PEREnc_CellUpdate ((CellUpdate*) &(ul_ccch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Cell Update - status : %d\n", status);
|
|
msg("\n[RRC_MSG] Cell Update - length : %d\n", protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* Uplink DCCH messages - Encode */
|
|
/**************************************************************/
|
|
//-----------------------------------------------------------------------------
|
|
/* RRC Connection Setup Complete */
|
|
void rrc_ue_msg_connsucompl(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_DCCH_Message * ul_dcch_msg;
|
|
mem_block_t *p;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(RRCConnectionSetupComplete);
|
|
// Temp - Test/Messages
|
|
// ul_dcch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// memset (ul_dcch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// //
|
|
// protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_dcch_msg = (struct UL_DCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
// Encode
|
|
ul_dcch_msg->integrityCheckInfo = 0; // No check with RRC Connection Setup Complete
|
|
ul_dcch_msg->message.type = UL_DCCH_rrcConnectionSetupComplete;
|
|
status = rrc_PEREnc_RRCConnectionSetupComplete((RRCConnectionSetupComplete*) &(ul_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Connection Setup Compl - status : %d - length : %d\n", status, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/* RRC Connection Release MD */
|
|
void rrc_ue_msg_connrelUL(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_DCCH_Message * ul_dcch_msg;
|
|
mem_block_t *p;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(RRCConnectionRelease_UL);
|
|
// Temp - Test/Messages
|
|
// ul_dcch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// memset (ul_dcch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// //
|
|
// protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_dcch_msg = (struct UL_DCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
// Encode
|
|
ul_dcch_msg->integrityCheckInfo = 123;
|
|
ul_dcch_msg->message.type = UL_DCCH_rrcConnectionReleaseUL;
|
|
status = rrc_PEREnc_RRCConnectionRelease_UL((RRCConnectionRelease_UL*) &(ul_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Connection Release Uplink - status : %d - length : %d\n", status, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/* InitialDirectTransfer */
|
|
void rrc_ue_msg_initXfer(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_DCCH_Message * ul_dcch_msg;
|
|
mem_block_t *p;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(InitialDirectTransfer);
|
|
// Temp - Test/Messages
|
|
// ul_dcch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// memset (ul_dcch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// //
|
|
// protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_dcch_msg = (struct UL_DCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
|
|
// Encode
|
|
ul_dcch_msg->integrityCheckInfo = 123;
|
|
ul_dcch_msg->message.type = UL_DCCH_initialDirectTransfer;
|
|
status = rrc_PEREnc_InitialDirectTransfer((InitialDirectTransfer*) &(ul_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Initial Direct Transfer - status : %d - length : %d\n", status, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/* Uplink Direct Transfer */
|
|
void rrc_ue_msg_ulXfer(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_DCCH_Message * ul_dcch_msg;
|
|
mem_block_t *p;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(UplinkDirectTransfer);
|
|
// Temp - Test/Messages
|
|
// ul_dcch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// memset (ul_dcch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// //
|
|
// protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_dcch_msg = (struct UL_DCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
|
|
// Encode
|
|
ul_dcch_msg->integrityCheckInfo = 123;
|
|
ul_dcch_msg->message.type = UL_DCCH_uplinkDirectTransfer;
|
|
status = rrc_PEREnc_UplinkDirectTransfer((UplinkDirectTransfer*) &(ul_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Uplink Direct Transfer - status : %d - length : %d\n", status, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/* Radio Bearer Setup Complete */
|
|
void rrc_ue_msg_rbsetupcompl(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_DCCH_Message * ul_dcch_msg;
|
|
mem_block_t *p;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(RadioBearerSetupComplete);
|
|
// Temp - Test/Messages
|
|
// ul_dcch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// memset (ul_dcch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// //
|
|
// protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_dcch_msg = (struct UL_DCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
// Encode
|
|
ul_dcch_msg->integrityCheckInfo = 123;
|
|
ul_dcch_msg->message.type = UL_DCCH_radioBearerSetupComplete;
|
|
status = rrc_PEREnc_RadioBearerSetupComplete((RadioBearerSetupComplete*) &(ul_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Radio Bearer Setup Complete - status : %d - length : %d\n", status, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/* Radio Bearer Setup Failure */
|
|
void rrc_ue_msg_rbsetupfail(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_DCCH_Message * ul_dcch_msg;
|
|
mem_block_t *p;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(RadioBearerSetupFailure);
|
|
// Temp - Test/Messages
|
|
// ul_dcch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// memset (ul_dcch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// //
|
|
// protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_dcch_msg = (struct UL_DCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
// Encode
|
|
ul_dcch_msg->integrityCheckInfo = 123;
|
|
ul_dcch_msg->message.type = UL_DCCH_radioBearerSetupFailure;
|
|
status = rrc_PEREnc_RadioBearerSetupFailure((RadioBearerSetupFailure*) &(ul_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Radio Bearer Setup Failure - status : %d - length : %d\n", status, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/* Radio Bearer Release Complete */
|
|
void rrc_ue_msg_rbreleasecompl(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_DCCH_Message * ul_dcch_msg;
|
|
mem_block_t *p;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(RadioBearerReleaseComplete);
|
|
// Temp - Test/Messages
|
|
// ul_dcch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// memset (ul_dcch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// //
|
|
// protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_dcch_msg = (struct UL_DCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
// Encode
|
|
ul_dcch_msg->integrityCheckInfo = 123;
|
|
ul_dcch_msg->message.type = UL_DCCH_radioBearerReleaseComplete;
|
|
status = rrc_PEREnc_RadioBearerReleaseComplete((RadioBearerReleaseComplete*) &(ul_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Radio Bearer Release Complete - status : %d - length : %d\n", status, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/* Radio Bearer Release Failure */
|
|
void rrc_ue_msg_rbreleasefail(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_DCCH_Message * ul_dcch_msg;
|
|
mem_block_t *p;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(RadioBearerReleaseFailure);
|
|
// Temp - Test/Messages
|
|
// ul_dcch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// memset (ul_dcch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// //
|
|
// protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_dcch_msg = (struct UL_DCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
// Encode
|
|
ul_dcch_msg->integrityCheckInfo = 123;
|
|
ul_dcch_msg->message.type = UL_DCCH_radioBearerReleaseFailure;
|
|
status = rrc_PEREnc_RadioBearerReleaseFailure((RadioBearerReleaseFailure*) &(ul_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Radio Bearer Release Failure - status : %d - length : %d\n", status, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
/* Measurement Report */
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_ue_msg_measrep(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_DCCH_Message * ul_dcch_msg;
|
|
mem_block_t *p;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(MeasurementReport);
|
|
// Temp - Test/Messages
|
|
// ul_dcch_msg = malloc (protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
// memset (ul_dcch_msg, 0, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
//
|
|
// protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_dcch_msg = (struct UL_DCCH_Message *)p->data;
|
|
//
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
// Encode
|
|
ul_dcch_msg->integrityCheckInfo = 123;
|
|
ul_dcch_msg->message.type = UL_DCCH_measurementReport;
|
|
status = rrc_PEREnc_MeasurementReport((MeasurementReport*) &(ul_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Measurement Report - status : %d - length : %d\n", status, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* Downlink CCCH messages - Decode */
|
|
/**************************************************************/
|
|
/* RRC Connection Setup */
|
|
//-----------------------------------------------------------------------------
|
|
int rrc_ue_msg_connsetup(DL_CCCH_Message * dl_ccch_msg){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
|
|
status = rrc_PERDec_RRCConnectionSetup((RRCConnectionSetup*) &(dl_ccch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] RRC Connection Setup Received - status : %d\n", status);
|
|
msg("\n[RRC_MSG] Transaction Identifier %d, Activation Time %d\n",
|
|
protocol_ms->rrc.rcved_trans.transaction_Id,
|
|
protocol_ms->rrc.nextActivationTime );
|
|
msg("[RRC_MSG] U-RNTI %d, New_State %d\n",
|
|
protocol_ms->rrc.u_rnti,
|
|
protocol_ms->rrc.next_state );
|
|
#endif
|
|
return status;
|
|
}
|
|
|
|
/* RRCConnectionReject */
|
|
//-----------------------------------------------------------------------------
|
|
int rrc_ue_msg_connreject(DL_CCCH_Message * dl_ccch_msg){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
|
|
status = rrc_PERDec_RRCConnectionReject((RRCConnectionReject*) &(dl_ccch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] RRC Connection Reject Received - status : %d\n", status);
|
|
msg("\n[RRC_MSG] Transaction Identifier %d, Wait Time %d\n",
|
|
protocol_ms->rrc.rcved_trans.transaction_Id,
|
|
protocol_ms->rrc.rejectWaitTime );
|
|
#endif
|
|
return status;
|
|
}
|
|
|
|
/* CellUpdateConfirm_CCCH */
|
|
//-----------------------------------------------------------------------------
|
|
int rrc_ue_msg_cellupdatecnfccch(DL_CCCH_Message * dl_ccch_msg){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
|
|
if (dl_ccch_msg->integrityCheckInfo != 123)
|
|
return P_INVINTEGRITY;
|
|
|
|
status = rrc_PERDec_CellUpdateConfirm_CCCH((CellUpdateConfirm_CCCH*) &(dl_ccch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] CellUpdateConfirm_CCCH Received - status : %d\n", status);
|
|
msg("\n[RRC_MSG] Transaction Identifier %d, Activation Time %d\n",
|
|
protocol_ms->rrc.rcved_trans.transaction_Id,
|
|
protocol_ms->rrc.nextActivationTime );
|
|
msg("[RRC_MSG] U-RNTI %d, New_State %d\n",
|
|
protocol_ms->rrc.u_rnti,
|
|
protocol_ms->rrc.next_state );
|
|
msg("[RRC_MSG] SRB2-3-4 %d, RB5+ %d\n",
|
|
protocol_ms->rrc.rlc_Re_establishIndicatorRb2_3or4,
|
|
protocol_ms->rrc.rlc_Re_establishIndicatorRb5orAbove );
|
|
#endif
|
|
return status;
|
|
}
|
|
|
|
/* UE Capability Information */
|
|
//-----------------------------------------------------------------------------
|
|
void rrc_ue_msg_ueCapInfo(int *Message_Id){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
UL_DCCH_Message * ul_dcch_msg;
|
|
mem_block_t *p;
|
|
|
|
// prepare encoding
|
|
*Message_Id = ++ protocol_ms->rrc.ue_msg_infos.msg_Id;
|
|
protocol_ms->rrc.ue_msg_infos.msg_length = MSG_HEAD_LGTH + sizeof(UECapabilityInformation);
|
|
p = get_free_mem_block(protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
ul_dcch_msg = (struct UL_DCCH_Message *)p->data;
|
|
|
|
//Reference to the memory block
|
|
protocol_ms->rrc.ue_msg_infos.mem_block_ptr = p;
|
|
protocol_ms->rrc.ue_msg_infos.msg_ptr = ul_dcch_msg;
|
|
|
|
// Encode
|
|
ul_dcch_msg->integrityCheckInfo = 123;
|
|
ul_dcch_msg->message.type = UL_DCCH_ueCapabilityInformation;
|
|
status = rrc_PEREnc_UECapabilityInformation ((UECapabilityInformation*) &(ul_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] UE Capability Information - status : %d - length : %d\n",
|
|
status, protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
msg("[RRC_MSG] Kernel Release = %d, ", EURECOM_KERNEL_RELEASE_INDICATOR_DEFAULT);
|
|
msg("Access Stratum Release = ");
|
|
switch(ACCESS_STRATUM_RELEASE_INDICATOR_DEFAULT){
|
|
case ACCESS_STRATUM_RELEASE_INDICATOR_REL_4: msg("REL-4\n"); break;
|
|
case ACCESS_STRATUM_RELEASE_INDICATOR_REL_5: msg("REL-5\n"); break;
|
|
case ACCESS_STRATUM_RELEASE_INDICATOR_REL_6: msg("REL-6\n"); break;
|
|
default: msg("Unrecognized!\n");
|
|
}
|
|
|
|
rrc_print_buffer((char*)protocol_ms->rrc.ue_msg_infos.msg_ptr,protocol_ms->rrc.ue_msg_infos.msg_length);
|
|
#endif
|
|
}
|
|
|
|
/**************************************************************/
|
|
/* Downlink DCCH messages - Decode */
|
|
/**************************************************************/
|
|
/* RadioBearerSetup */
|
|
//-----------------------------------------------------------------------------
|
|
int rrc_ue_msg_rbsetup(DL_DCCH_Message * dl_dcch_msg){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
|
|
if (dl_dcch_msg->integrityCheckInfo != 123)
|
|
return P_INVINTEGRITY;
|
|
|
|
status = rrc_PERDec_RadioBearerSetup((RadioBearerSetup*) &(dl_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Radio Bearer Setup Received - status : %d\n", status);
|
|
msg("\n[RRC_MSG] Transaction Identifier %d, Activation Time %d,",
|
|
protocol_ms->rrc.rcved_trans.transaction_Id,
|
|
protocol_ms->rrc.nextActivationTime );
|
|
msg(" U-RNTI %d, New_State %d\n",
|
|
protocol_ms->rrc.u_rnti,
|
|
protocol_ms->rrc.next_state );
|
|
msg("[RRC_MSG] RB information: ");
|
|
msg("RB_Id: %d, Radio QoS: %d, IP DSCP: %d, SAP Id: %d. \n",
|
|
protocol_ms->rrc.requested_rbId, protocol_ms->rrc.requested_QoSclass,
|
|
protocol_ms->rrc.requested_dscp, protocol_ms->rrc.requested_sapid);
|
|
#endif
|
|
return status;
|
|
}
|
|
|
|
/* RadioBearerRelease */
|
|
//-----------------------------------------------------------------------------
|
|
int rrc_ue_msg_rbrelease(DL_DCCH_Message * dl_dcch_msg){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
|
|
if (dl_dcch_msg->integrityCheckInfo != 123)
|
|
return P_INVINTEGRITY;
|
|
|
|
status = rrc_PERDec_RadioBearerRelease((RadioBearerRelease*) &(dl_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Radio Bearer Release Received - status : %d\n", status);
|
|
msg("\n[RRC_MSG] Transaction Identifier %d, Activation Time %d, U-RNTI %d, New_State %d\n",
|
|
protocol_ms->rrc.rcved_trans.transaction_Id,
|
|
protocol_ms->rrc.nextActivationTime,
|
|
protocol_ms->rrc.u_rnti,
|
|
protocol_ms->rrc.next_state);
|
|
msg("[RRC_MSG] RB information : RB_Id : %d\n", protocol_ms->rrc.requested_rbId);
|
|
#endif
|
|
return status;
|
|
}
|
|
|
|
/* DownlinkDirectTransfer */
|
|
//-----------------------------------------------------------------------------
|
|
int rrc_ue_msg_dlXfer(DL_DCCH_Message * dl_dcch_msg){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
|
|
if (dl_dcch_msg->integrityCheckInfo != 123)
|
|
return P_INVINTEGRITY;
|
|
|
|
status = rrc_PERDec_DownlinkDirectTransfer((DownlinkDirectTransfer*) &(dl_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Downlink Direct Transfer Received - status : %d\n", status);
|
|
msg("\n[RRC_MSG] Transaction Identifier %d\n",
|
|
protocol_ms->rrc.rcved_trans.transaction_Id);
|
|
#endif
|
|
return status;
|
|
}
|
|
|
|
/* PagingType2 */
|
|
//-----------------------------------------------------------------------------
|
|
int rrc_ue_msg_pagingt2(DL_DCCH_Message * dl_dcch_msg){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
|
|
if (dl_dcch_msg->integrityCheckInfo != 123)
|
|
return P_INVINTEGRITY;
|
|
|
|
status = rrc_PERDec_PagingType2((PagingType2*) &(dl_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Paging Type 2 Received - status : %d\n", status);
|
|
msg("\n[RRC_MSG] Transaction Identifier %d\n",
|
|
protocol_ms->rrc.rcved_trans.transaction_Id);
|
|
#endif
|
|
return status;
|
|
}
|
|
|
|
/* MeasurementControl */
|
|
//-----------------------------------------------------------------------------
|
|
int rrc_ue_msg_measctl(DL_DCCH_Message * dl_dcch_msg){
|
|
//-----------------------------------------------------------------------------
|
|
|
|
int status = P_SUCCESS;
|
|
|
|
if (dl_dcch_msg->integrityCheckInfo != 123)
|
|
return P_INVINTEGRITY;
|
|
|
|
status = rrc_PERDec_MeasurementControl((MeasurementControl *) &(dl_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] Measurement Control message Received - status : %d\n", status);
|
|
msg("\n[RRC_MSG] Transaction Identifier %d\n",
|
|
protocol_ms->rrc.rcved_trans.transaction_Id);
|
|
#endif
|
|
return (status);
|
|
}
|
|
|
|
// /* Uplink Physical Channel Control */
|
|
// //-----------------------------------------------------------------------------
|
|
// int rrc_ue_msg_ULPCHctl(DL_DCCH_Message * dl_dcch_msg){
|
|
// //-----------------------------------------------------------------------------
|
|
//
|
|
// int status = P_SUCCESS;
|
|
//
|
|
// if (dl_dcch_msg->integrityCheckInfo != 123)
|
|
// return P_INVINTEGRITY;
|
|
//
|
|
// status = rrc_PERDec_ULPCHControl((MeasurementControl *) &(dl_dcch_msg->message.content));
|
|
//
|
|
// #ifdef DEBUG_RRC_STATE
|
|
// msg("\n[RRC_MSG] Uplink Physical Channel Control message Received - status : %d\n", status);
|
|
// msg("\n[RRC_MSG] Transaction Identifier %d\n",
|
|
// protocol_ms->rrc.rcved_trans.transaction_Id);
|
|
// #endif
|
|
// return (status);
|
|
// }
|
|
|
|
|
|
/* UE Capability Information Confirm*/
|
|
//-----------------------------------------------------------------------------
|
|
int rrc_ue_msg_ueCapInfoCnf(DL_DCCH_Message * dl_dcch_msg){
|
|
//-----------------------------------------------------------------------------
|
|
int status = P_SUCCESS;
|
|
|
|
if (dl_dcch_msg->integrityCheckInfo != 123)
|
|
return P_INVINTEGRITY;
|
|
|
|
status = rrc_PERDec_UECapabilityInformationConfirm((UECapabilityInformationConfirm*) &(dl_dcch_msg->message.content));
|
|
|
|
#ifdef DEBUG_RRC_STATE
|
|
msg("\n[RRC_MSG] UE Capability Information Confirm Received - status : %d\n", status);
|
|
#endif
|
|
return status;
|
|
}
|
|
|