From 61f7b836f8e93512871d090978f0d34e0029cf10 Mon Sep 17 00:00:00 2001 From: Lionel Gauthier <lionel.gauthier@eurecom.fr> Date: Wed, 4 Dec 2013 17:01:22 +0000 Subject: [PATCH] Updated for integration as tasks in oaisim executable. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4596 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C.c | 4 +- .../C/MIH_C_F1_basic_data_types_codec.c | 26 +- .../C/MIH_C_F3_data_types_for_address_codec.c | 4 +- .../C/MIH_C_F4_data_types_for_links_codec.c | 44 +- .../C/MIH_C_F9_data_types_for_qos_codec.c | 4 +- .../C/MIH_C_Medieval_extensions.c | 42 +- .../INTERFACE-802.21/C/MIH_C_bit_buffer.c | 13 +- .../INTERFACE-802.21/C/MIH_C_header_codec.c | 8 +- .../RAL-LTE/INTERFACE-802.21/C/MIH_C_log.c | 5 +- .../INTERFACE-802.21/C/MIH_C_msg_codec.c | 36 +- .../C/MIH_C_primitive_codec.c | 16 +- .../RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C.h | 4 +- .../INTERFACE-802.21/INCLUDE/MIH_C_Types.h | 102 +- .../INTERFACE-802.21/INCLUDE/MIH_C_log.h | 2 +- .../RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb.h | 39 + .../LTE_RAL_ENB/INCLUDE/lteRALenb_action.h | 71 +- .../LTE_RAL_ENB/INCLUDE/lteRALenb_constants.h | 33 +- .../LTE_RAL_ENB/INCLUDE/lteRALenb_main.h | 216 +++ .../LTE_RAL_ENB/INCLUDE/lteRALenb_mih_msg.h | 167 +-- .../INCLUDE/lteRALenb_parameters.h | 30 +- .../LTE_RAL_ENB/INCLUDE/lteRALenb_process.h | 76 ++ .../LTE_RAL_ENB/INCLUDE/lteRALenb_proto.h | 54 +- .../LTE_RAL_ENB/INCLUDE/lteRALenb_rrc_msg.h | 69 + .../LTE_RAL_ENB/INCLUDE/lteRALenb_subscribe.h | 32 +- .../INCLUDE/lteRALenb_thresholds.h | 32 +- .../LTE_RAL_ENB/INCLUDE/lteRALenb_variables.h | 134 +- .../RAL-LTE/LTE_RAL_ENB/INCLUDE/rrc_d_types.h | 7 +- openair3/RAL-LTE/LTE_RAL_ENB/Makefile | 4 +- .../LTE_RAL_ENB/SRC/lteRALenb_action.c | 803 ++++++------ .../RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_ioctl.c | 363 +++--- .../RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_main.c | 638 +++++---- .../LTE_RAL_ENB/SRC/lteRALenb_mih_msg.c | 1154 +++++------------ .../LTE_RAL_ENB/SRC/lteRALenb_parameters.c | 141 +- .../LTE_RAL_ENB/SRC/lteRALenb_process.c | 655 +++++----- .../LTE_RAL_ENB/SRC/lteRALenb_rrc_msg.c | 108 ++ .../LTE_RAL_ENB/SRC/lteRALenb_subscribe.c | 66 +- .../LTE_RAL_ENB/SRC/lteRALenb_thresholds.c | 205 +-- .../RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue.h | 39 + .../LTE_RAL_UE/INCLUDE/lteRALue_action.h | 81 ++ .../LTE_RAL_UE/INCLUDE/lteRALue_constants.h | 25 +- .../LTE_RAL_UE/INCLUDE/lteRALue_main.h | 132 +- .../LTE_RAL_UE/INCLUDE/lteRALue_mih_execute.h | 41 +- .../LTE_RAL_UE/INCLUDE/lteRALue_mih_msg.h | 203 ++- .../LTE_RAL_UE/INCLUDE/lteRALue_parameters.h | 78 ++ .../LTE_RAL_UE/INCLUDE/lteRALue_proto.h | 20 +- .../LTE_RAL_UE/INCLUDE/lteRALue_rrc_msg.h | 68 + .../LTE_RAL_UE/INCLUDE/lteRALue_subscribe.h | 79 ++ .../LTE_RAL_UE/INCLUDE/lteRALue_thresholds.h | 83 ++ .../LTE_RAL_UE/INCLUDE/lteRALue_variables.h | 73 +- .../RAL-LTE/LTE_RAL_UE/SRC/lteRALue_action.c | 222 ++++ .../RAL-LTE/LTE_RAL_UE/SRC/lteRALue_ioctl.c | 2 +- .../RAL-LTE/LTE_RAL_UE/SRC/lteRALue_main.c | 435 +++---- .../LTE_RAL_UE/SRC/lteRALue_mih_execute.c | 330 +---- .../RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_msg.c | 880 ++++--------- .../LTE_RAL_UE/SRC/lteRALue_parameters.c | 140 ++ .../RAL-LTE/LTE_RAL_UE/SRC/lteRALue_process.c | 50 +- .../RAL-LTE/LTE_RAL_UE/SRC/lteRALue_rrc_msg.c | 171 +++ .../LTE_RAL_UE/SRC/lteRALue_subscribe.c | 135 ++ .../LTE_RAL_UE/SRC/lteRALue_thresholds.c | 176 +++ .../RAL-LTE/RAL-DUMMY/SRC/eRALlte_mih_msg.c | 119 +- 60 files changed, 4798 insertions(+), 4191 deletions(-) create mode 100755 openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb.h create mode 100755 openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h create mode 100755 openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_process.h create mode 100755 openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_rrc_msg.h create mode 100755 openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_rrc_msg.c create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue.h create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_action.h create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_parameters.h create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_rrc_msg.h create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_subscribe.h create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_thresholds.h create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_action.c create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_parameters.c create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_rrc_msg.c create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_subscribe.c create mode 100755 openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_thresholds.c diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C.c index c6d125f5da..41a76d6c70 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C.c @@ -2,12 +2,10 @@ #define MIH_C_C #include "MIH_C.h" //----------------------------------------------------------------------------- -void MIH_C_init(int log_outputP) { +void MIH_C_init(void) { //----------------------------------------------------------------------------- - MIH_C_log_init(log_outputP); } //----------------------------------------------------------------------------- void MIH_C_exit(void) { //----------------------------------------------------------------------------- - MIH_C_log_exit(); } diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F1_basic_data_types_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F1_basic_data_types_codec.c index 9e4eea2d68..7499da53e0 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F1_basic_data_types_codec.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F1_basic_data_types_codec.c @@ -9,12 +9,12 @@ unsigned int MIH_C_BITMAP82String(MIH_C_BITMAP8_T* dataP, char* bufP) { } //----------------------------------------------------------------------------- inline void MIH_C_BITMAP8_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP) { - DEBUG_ENCODE("%s: %02X\n", __FUNCTION__, *dataP); + printf("[MIH_C] %s: %02X\n", __FUNCTION__, *dataP); BitBuffer_write8(bbP, *dataP); } //----------------------------------------------------------------------------- inline void MIH_C_BITMAP16_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP) { - DEBUG_ENCODE("%s: %04X\n", __FUNCTION__, *dataP); + printf("[MIH_C] %s: %04X\n", __FUNCTION__, *dataP); BitBuffer_write16(bbP, *dataP); } //----------------------------------------------------------------------------- @@ -25,7 +25,7 @@ unsigned int MIH_C_BITMAP162String(MIH_C_BITMAP16_T* dataP, char* bufP) { //----------------------------------------------------------------------------- inline void MIH_C_BITMAP24_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP) { //----------------------------------------------------------------------------- - DEBUG_ENCODE("%s: %02X%02X%02X\n", __FUNCTION__, dataP->val[0],dataP->val[1], dataP->val[2]); + printf("[MIH_C] %s: %02X%02X%02X\n", __FUNCTION__, dataP->val[0],dataP->val[1], dataP->val[2]); MIH_C_BITMAP8_encode(bbP, &dataP->val[0]); MIH_C_BITMAP8_encode(bbP, &dataP->val[1]); MIH_C_BITMAP8_encode(bbP, &dataP->val[2]); @@ -37,27 +37,27 @@ unsigned int MIH_C_BITMAP242String(MIH_C_BITMAP24_T* dataP, char* bufP) { } //----------------------------------------------------------------------------- inline void MIH_C_BITMAP32_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP) { - DEBUG_ENCODE("%s: %08X\n", __FUNCTION__, *dataP); + printf("[MIH_C] %s: %08X\n", __FUNCTION__, *dataP); BitBuffer_write32(bbP, *dataP); } //----------------------------------------------------------------------------- inline void MIH_C_BITMAP64_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP) { //----------------------------------------------------------------------------- - DEBUG_ENCODE("%s: %16X\n", __FUNCTION__, *dataP); + printf("[MIH_C] %s: %16X\n", __FUNCTION__, *dataP); BitBuffer_write32(bbP, (MIH_C_UNSIGNED_INT4_T)(*dataP>>32)); BitBuffer_write32(bbP, (MIH_C_UNSIGNED_INT4_T)*dataP); } //----------------------------------------------------------------------------- inline void MIH_C_BITMAP128_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP) { //----------------------------------------------------------------------------- - DEBUG_ENCODE("%s: %16X%16X\n", __FUNCTION__, dataP->val[0], dataP->val[1]); + printf("[MIH_C] %s: %16X%16X\n", __FUNCTION__, dataP->val[0], dataP->val[1]); MIH_C_BITMAP64_encode(bbP, &dataP->val[0]); MIH_C_BITMAP64_encode(bbP, &dataP->val[1]); } //----------------------------------------------------------------------------- inline void MIH_C_BITMAP256_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP) { //----------------------------------------------------------------------------- - DEBUG_ENCODE("%s: %16X%16X%16X%16X\n", __FUNCTION__, dataP->val[0], dataP->val[1], dataP->val[2], dataP->val[3]); + printf("[MIH_C] %s: %16X%16X%16X%16X\n", __FUNCTION__, dataP->val[0], dataP->val[1], dataP->val[2], dataP->val[3]); MIH_C_BITMAP64_encode(bbP, &dataP->val[0]); MIH_C_BITMAP64_encode(bbP, &dataP->val[1]); MIH_C_BITMAP64_encode(bbP, &dataP->val[2]); @@ -98,7 +98,7 @@ inline void MIH_C_OCTET_encode(Bit_Buffer_t* bbP, MIH_C_F1_Generic_Octet_t *data } //----------------------------------------------------------------------------- inline void MIH_C_UNSIGNED_INT1_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP) { - DEBUG_ENCODE("%s: %02X\n", __FUNCTION__, *dataP); + printf("[MIH_C] %s: %02X\n", __FUNCTION__, *dataP); BitBuffer_write8(bbP, *dataP); } //----------------------------------------------------------------------------- @@ -216,7 +216,7 @@ inline void MIH_C_LIST_LENGTH_encode(Bit_Buffer_t* bbP, u_int16_t lengthP) { int length; if (lengthP <= 128) { #ifdef DEBUG_TRACE_DETAILS - DEBUG_ENCODE("%s: Length %02X\n", __FUNCTION__, lengthP); + printf("[MIH_C] %s: Length %02X\n", __FUNCTION__, lengthP); #endif BitBuffer_write8(bbP, (MIH_C_UNSIGNED_INT1_T)lengthP); } else { @@ -224,7 +224,7 @@ inline void MIH_C_LIST_LENGTH_encode(Bit_Buffer_t* bbP, u_int16_t lengthP) { if (((lengthP - 128) % 255) != 0) { num_more_bytes += 1; } - DEBUG_ENCODE("%s: Length %02X on %d more bytes\n", __FUNCTION__, lengthP, num_more_bytes); + printf("[MIH_C] %s: Length %02X on %d more bytes\n", __FUNCTION__, lengthP, num_more_bytes); BitBuffer_write8(bbP, (MIH_C_UNSIGNED_INT1_T)(128 + num_more_bytes)); length = lengthP - 128; while (length > 0) { @@ -249,7 +249,7 @@ inline u_int16_t MIH_C_LIST_LENGTH_get_encode_num_bytes(u_int16_t lengthP) { if (((lengthP - 128) % 255) != 0) { num_more_bytes += 1; } - DEBUG_ENCODE("%s: Length %02X on %d more bytes\n", __FUNCTION__, lengthP, num_more_bytes); + printf("[MIH_C] %s: Length %02X on %d more bytes\n", __FUNCTION__, lengthP, num_more_bytes); return num_more_bytes + sizeof (MIH_C_UNSIGNED_INT1_T); } } @@ -268,12 +268,12 @@ inline void MIH_C_LIST_LENGTH_decode(Bit_Buffer_t* bbP, u_int16_t *lengthP) { num_more_bytes = num_more_bytes - 1; } #ifdef DEBUG_TRACE_DETAILS - DEBUG_DECODE("%s: Length %d \n", __FUNCTION__, *lengthP); + printf("[MIH_C] %s: Length %d \n", __FUNCTION__, *lengthP); #endif } else { *lengthP = byte1; #ifdef DEBUG_TRACE_DETAILS - DEBUG_DECODE("%s: Length %d \n", __FUNCTION__, *lengthP); + printf("[MIH_C] %s: Length %d \n", __FUNCTION__, *lengthP); #endif } } diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F3_data_types_for_address_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F3_data_types_for_address_codec.c index de8625df5d..508451e6a9 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F3_data_types_for_address_codec.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F3_data_types_for_address_codec.c @@ -106,7 +106,7 @@ inline void MIH_C_LINK_ADDR_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ADDR_T *dataP) MIH_C_OTHER_L2_ADDR_encode(bbP, &dataP->_union.other_l2_addr); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_ADDR_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_ADDR_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -133,7 +133,7 @@ inline void MIH_C_LINK_ADDR_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ADDR_T *dataP) MIH_C_OTHER_L2_ADDR_decode(bbP, &dataP->_union.other_l2_addr); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_ADDR_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_ADDR_T %d\n", dataP->choice); } } diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F4_data_types_for_links_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F4_data_types_for_links_codec.c index 0f9b2a1c88..b69c374302 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F4_data_types_for_links_codec.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F4_data_types_for_links_codec.c @@ -38,7 +38,7 @@ inline void MIH_C_DEV_STATE_RSP_encode(Bit_Buffer_t* bbP, MIH_C_DEV_STATE_RSP_T MIH_C_BATT_LEVEL_encode(bbP, &dataP->_union.batt_level); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_DEV_STATE_RSP_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_DEV_STATE_RSP_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -53,7 +53,7 @@ inline void MIH_C_DEV_STATE_RSP_decode(Bit_Buffer_t* bbP, MIH_C_DEV_STATE_RSP_T MIH_C_BATT_LEVEL_decode(bbP, &dataP->_union.batt_level); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_DEV_STATE_RSP_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_DEV_STATE_RSP_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -218,7 +218,7 @@ inline void MIH_C_LINK_ACTION_REQ_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_RE MIH_C_LINK_ADDR_encode(bbP, &dataP->_union.link_addr); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_ACTION_REQ_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_ACTION_REQ_T %d\n", dataP->choice); } MIH_C_LINK_ACTION_encode(bbP, &dataP->link_action); MIH_C_LINK_AC_EX_TIME_encode(bbP, &dataP->link_action_ex_time); @@ -235,7 +235,7 @@ inline void MIH_C_LINK_ACTION_REQ_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_RE MIH_C_LINK_ADDR_decode(bbP, &dataP->_union.link_addr); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_ACTION_REQ_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_ACTION_REQ_T %d\n", dataP->choice); } MIH_C_LINK_ACTION_decode(bbP, &dataP->link_action); MIH_C_LINK_AC_EX_TIME_decode(bbP, &dataP->link_action_ex_time); @@ -268,7 +268,7 @@ inline void MIH_C_SIG_STRENGTH_encode(Bit_Buffer_t* bbP, MIH_C_SIG_STRENGTH_T *d MIH_C_PERCENTAGE_encode(bbP, &dataP->_union.percentage); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_SIG_STRENGTH_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_SIG_STRENGTH_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -283,7 +283,7 @@ inline void MIH_C_SIG_STRENGTH_decode(Bit_Buffer_t* bbP, MIH_C_SIG_STRENGTH_T *d MIH_C_PERCENTAGE_decode(bbP, &dataP->_union.percentage); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_SIG_STRENGTH_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_SIG_STRENGTH_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -327,7 +327,7 @@ inline void MIH_C_LINK_ACTION_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_RS MIH_C_LINK_SCAN_RSP_LIST_encode(bbP, &dataP->_union.link_scan_rsp_list); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_ACTION_RSP_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_ACTION_RSP_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -343,7 +343,7 @@ inline void MIH_C_LINK_ACTION_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_RS MIH_C_LINK_SCAN_RSP_LIST_decode(bbP, &dataP->_union.link_scan_rsp_list); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_ACTION_RSP_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_ACTION_RSP_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -413,7 +413,7 @@ inline void MIH_C_LINK_PARAM_TYPE_encode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_TYP case 11: MIH_C_LINK_PARAM_802_22_encode(bbP, &dataP->_union.link_param_802_22); break; case 12: MIH_C_LINK_PARAM_LTE_encode(bbP, &dataP->_union.link_param_lte); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_PARAM_TYPE_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_PARAM_TYPE_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -437,7 +437,7 @@ inline void MIH_C_LINK_PARAM_TYPE_decode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_TYP case 11: MIH_C_LINK_PARAM_802_22_decode(bbP, &dataP->_union.link_param_802_22); break; case 12: MIH_C_LINK_PARAM_LTE_decode(bbP, &dataP->_union.link_param_802_22); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_PARAM_TYPE_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_PARAM_TYPE_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -483,7 +483,7 @@ inline void MIH_C_LINK_CFG_PARAM_encode(Bit_Buffer_t* bbP, MIH_C_LINK_CFG_PARAM_ MIH_C_LINK_SCAN_RSP_LIST_encode(bbP, &dataP->_union.link_scan_rsp_list); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_CFG_PARAM_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_CFG_PARAM_T %d\n", dataP->choice); } MIH_C_TH_ACTION_encode(bbP, &dataP->th_action); MIH_C_THRESHOLD_LIST_encode(bbP, &dataP->threshold_list); @@ -503,7 +503,7 @@ inline void MIH_C_LINK_CFG_PARAM_decode(Bit_Buffer_t* bbP, MIH_C_LINK_CFG_PARAM_ MIH_C_LINK_SCAN_RSP_LIST_decode(bbP, &dataP->_union.link_scan_rsp_list); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_CFG_PARAM_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_CFG_PARAM_T %d\n", dataP->choice); } MIH_C_TH_ACTION_decode(bbP, &dataP->th_action); MIH_C_THRESHOLD_LIST_decode(bbP, &dataP->threshold_list); @@ -566,7 +566,7 @@ inline void MIH_C_LINK_DESC_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_DESC_RSP_T MIH_C_NUM_QUEUE_encode(bbP, &dataP->_union.num_queue); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_DESC_RSP_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_DESC_RSP_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -581,7 +581,7 @@ inline void MIH_C_LINK_DESC_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_DESC_RSP_T MIH_C_NUM_QUEUE_decode(bbP, &dataP->_union.num_queue); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_DESC_RSP_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_DESC_RSP_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -613,7 +613,7 @@ inline void MIH_C_LINK_PARAM_encode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_T *dataP case 0: MIH_C_LINK_PARAM_VAL_encode(bbP, &dataP->_union.link_param_val); break; case 1: MIH_C_QOS_PARAM_VAL_encode(bbP, &dataP->_union.qos_param_val); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_PARAM_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_PARAM_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -625,7 +625,7 @@ inline void MIH_C_LINK_PARAM_decode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_T *dataP case 0: MIH_C_LINK_PARAM_VAL_decode(bbP, &dataP->_union.link_param_val); break; case 1: MIH_C_QOS_PARAM_VAL_decode(bbP, &dataP->_union.qos_param_val); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_PARAM_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_PARAM_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -656,7 +656,7 @@ inline void MIH_C_LINK_PARAM_RPT_encode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_RPT_ case 0: break; case 1: MIH_C_THRESHOLD_encode(bbP, &dataP->_union.threshold); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_PARAM_RPT_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_PARAM_RPT_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -668,7 +668,7 @@ inline void MIH_C_LINK_PARAM_RPT_decode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_RPT_ case 0: break; case 1: MIH_C_THRESHOLD_decode(bbP, &dataP->_union.threshold); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_PARAM_RPT_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_PARAM_RPT_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -709,7 +709,7 @@ inline void MIH_C_LINK_STATES_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_STATES_RS case 0: MIH_C_OPMODE_encode(bbP, &dataP->_union.op_mode); break; case 1: MIH_C_CHANNEL_ID_encode(bbP, &dataP->_union.channel_id); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_STATES_RSP_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_STATES_RSP_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -720,7 +720,7 @@ inline void MIH_C_LINK_STATES_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_STATES_RS case 0: MIH_C_OPMODE_decode(bbP, &dataP->_union.op_mode); break; case 1: MIH_C_CHANNEL_ID_decode(bbP, &dataP->_union.channel_id); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_STATES_RSP_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_STATES_RSP_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -776,7 +776,7 @@ inline void MIH_C_LINK_TUPLE_ID_encode(Bit_Buffer_t* bbP, MIH_C_LINK_TUPLE_ID_T case 0: break; case 1: MIH_C_LINK_ADDR_encode(bbP, &dataP->_union.link_addr); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_TUPLE_ID_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_TUPLE_ID_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -788,7 +788,7 @@ inline void MIH_C_LINK_TUPLE_ID_decode(Bit_Buffer_t* bbP, MIH_C_LINK_TUPLE_ID_T case 0: break; case 1: MIH_C_LINK_ADDR_decode(bbP, &dataP->_union.link_addr); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_TUPLE_ID_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_TUPLE_ID_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F9_data_types_for_qos_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F9_data_types_for_qos_codec.c index f9caf2fd57..7cf5340ae5 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F9_data_types_for_qos_codec.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F9_data_types_for_qos_codec.c @@ -159,7 +159,7 @@ inline void MIH_C_QOS_PARAM_VAL_encode(Bit_Buffer_t* bbP, MIH_C_QOS_PARAM_VAL_T case 4: MIH_C_PK_DELAY_JITTER_LIST_encode(bbP, &dataP->_union.pk_delay_jitter_list); break; case 5: MIH_C_PK_LOSS_RATE_LIST_encode(bbP, &dataP->_union.pk_loss_rate_list); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_QOS_PARAM_VAL_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_QOS_PARAM_VAL_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -174,7 +174,7 @@ inline void MIH_C_QOS_PARAM_VAL_decode(Bit_Buffer_t* bbP, MIH_C_QOS_PARAM_VAL_T case 4: MIH_C_PK_DELAY_JITTER_LIST_decode(bbP, &dataP->_union.pk_delay_jitter_list); break; case 5: MIH_C_PK_LOSS_RATE_LIST_decode(bbP, &dataP->_union.pk_loss_rate_list); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_QOS_PARAM_VAL_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_QOS_PARAM_VAL_T %d\n", dataP->choice); } } diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_Medieval_extensions.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_Medieval_extensions.c index 0a284492e9..e74bf86c4c 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_Medieval_extensions.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_Medieval_extensions.c @@ -99,7 +99,7 @@ inline void MIH_C_MARK_encode(Bit_Buffer_t* bbP, MIH_C_MARK_T *dataP) { MIH_C_BITMAP24_encode(bbP, &dataP->_union.flow_label_mask); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_MARK_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_MARK_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -114,7 +114,7 @@ inline void MIH_C_MARK_decode(Bit_Buffer_t* bbP, MIH_C_MARK_T *dataP) { MIH_C_BITMAP24_decode(bbP, &dataP->_union.flow_label_mask); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_MARK_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_MARK_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -160,7 +160,7 @@ inline void MIH_C_QOS_encode(Bit_Buffer_t* bbP, MIH_C_QOS_T *dataP) { MIH_C_COS_encode(bbP, &dataP->_union.cos); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_QOS_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_QOS_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -178,7 +178,7 @@ inline void MIH_C_QOS_decode(Bit_Buffer_t* bbP, MIH_C_QOS_T *dataP) { MIH_C_COS_decode(bbP, &dataP->_union.cos); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_QOS_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_QOS_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -250,7 +250,7 @@ inline void MIH_C_RESOURCE_DESC_encode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T MIH_C_LINK_DATA_RATE_encode(bbP, &dataP->_union_link_data_rate.link_data_rate); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE choice_link_data_rate OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_link_data_rate); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_link_data_rate OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_link_data_rate); } MIH_C_CHOICE_encode(bbP, &dataP->choice_qos); switch (dataP->choice_qos) { @@ -260,7 +260,7 @@ inline void MIH_C_RESOURCE_DESC_encode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T MIH_C_QOS_encode(bbP, &dataP->_union_qos.qos); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE choice_qos OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_qos); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_qos OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_qos); } MIH_C_CHOICE_encode(bbP, &dataP->choice_jumbo_enable); switch (dataP->choice_jumbo_enable) { @@ -270,7 +270,7 @@ inline void MIH_C_RESOURCE_DESC_encode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T MIH_C_JUMBO_ENABLE_encode(bbP, &dataP->_union_jumbo_enable.jumbo_enable); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE choice_jumbo_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_jumbo_enable); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_jumbo_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_jumbo_enable); } MIH_C_CHOICE_encode(bbP, &dataP->choice_multicast_enable); switch (dataP->choice_multicast_enable) { @@ -280,7 +280,7 @@ inline void MIH_C_RESOURCE_DESC_encode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T MIH_C_MULTICAST_ENABLE_encode(bbP, &dataP->_union_multicast_enable.multicast_enable); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE choice_multicast_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_multicast_enable); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_multicast_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_multicast_enable); } } //----------------------------------------------------------------------------- @@ -297,7 +297,7 @@ inline void MIH_C_RESOURCE_DESC_decode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T MIH_C_LINK_DATA_RATE_decode(bbP, &dataP->_union_link_data_rate.link_data_rate); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE choice_link_data_rate OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_link_data_rate); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_link_data_rate OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_link_data_rate); } MIH_C_CHOICE_decode(bbP, &dataP->choice_qos); switch (dataP->choice_qos) { @@ -307,7 +307,7 @@ inline void MIH_C_RESOURCE_DESC_decode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T MIH_C_QOS_decode(bbP, &dataP->_union_qos.qos); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE choice_qos OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_qos); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_qos OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_qos); } MIH_C_CHOICE_decode(bbP, &dataP->choice_jumbo_enable); switch (dataP->choice_jumbo_enable) { @@ -317,7 +317,7 @@ inline void MIH_C_RESOURCE_DESC_decode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T MIH_C_JUMBO_ENABLE_decode(bbP, &dataP->_union_jumbo_enable.jumbo_enable); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE choice_jumbo_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_jumbo_enable); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_jumbo_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_jumbo_enable); } MIH_C_CHOICE_decode(bbP, &dataP->choice_multicast_enable); switch (dataP->choice_multicast_enable) { @@ -327,7 +327,7 @@ inline void MIH_C_RESOURCE_DESC_decode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T MIH_C_MULTICAST_ENABLE_decode(bbP, &dataP->_union_multicast_enable.multicast_enable); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE choice_multicast_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_multicast_enable); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_multicast_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_multicast_enable); } } //----------------------------------------------------------------------------- @@ -386,7 +386,7 @@ inline void MIH_C_FLOW_ATTRIBUTE_encode(Bit_Buffer_t* bbP, MIH_C_FLOW_ATTRIBUTE_ MIH_C_MULTICAST_ENABLE_encode(bbP, &dataP->_union_multicast_enable.multicast_enable); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE choice_multicast_enable OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_multicast_enable); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_multicast_enable OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_multicast_enable); } MIH_C_CHOICE_encode(bbP, &dataP->choice_mark_qos); switch (dataP->choice_mark_qos) { @@ -397,7 +397,7 @@ inline void MIH_C_FLOW_ATTRIBUTE_encode(Bit_Buffer_t* bbP, MIH_C_FLOW_ATTRIBUTE_ MIH_C_QOS_encode(bbP, &dataP->_union_mark_qos.mark_qos.qos); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE choice_mark_qos OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_qos); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_mark_qos OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_qos); } MIH_C_CHOICE_encode(bbP, &dataP->choice_mark_drop_eligibility); switch (dataP->choice_mark_drop_eligibility) { @@ -408,7 +408,7 @@ inline void MIH_C_FLOW_ATTRIBUTE_encode(Bit_Buffer_t* bbP, MIH_C_FLOW_ATTRIBUTE_ MIH_C_DROP_ELIGIBILITY_encode(bbP, &dataP->_union_mark_drop_eligibility.mark_drop_eligibility.drop_eligibility); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE choice_mark_drop_eligibility OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_drop_eligibility); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_mark_drop_eligibility OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_drop_eligibility); } } //----------------------------------------------------------------------------- @@ -424,7 +424,7 @@ inline void MIH_C_FLOW_ATTRIBUTE_decode(Bit_Buffer_t* bbP, MIH_C_FLOW_ATTRIBUTE_ MIH_C_MULTICAST_ENABLE_decode(bbP, &dataP->_union_multicast_enable.multicast_enable); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE choice_multicast_enable OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_multicast_enable); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_multicast_enable OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_multicast_enable); } MIH_C_CHOICE_decode(bbP, &dataP->choice_mark_qos); switch (dataP->choice_mark_qos) { @@ -435,7 +435,7 @@ inline void MIH_C_FLOW_ATTRIBUTE_decode(Bit_Buffer_t* bbP, MIH_C_FLOW_ATTRIBUTE_ MIH_C_QOS_decode(bbP, &dataP->_union_mark_qos.mark_qos.qos); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE choice_mark_qos OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_qos); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_mark_qos OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_qos); } MIH_C_CHOICE_decode(bbP, &dataP->choice_mark_drop_eligibility); switch (dataP->choice_mark_drop_eligibility) { @@ -446,7 +446,7 @@ inline void MIH_C_FLOW_ATTRIBUTE_decode(Bit_Buffer_t* bbP, MIH_C_FLOW_ATTRIBUTE_ MIH_C_DROP_ELIGIBILITY_decode(bbP, &dataP->_union_mark_drop_eligibility.mark_drop_eligibility.drop_eligibility); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE choice_mark_drop_eligibility OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_drop_eligibility); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_mark_drop_eligibility OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_drop_eligibility); } } //----------------------------------------------------------------------------- @@ -484,7 +484,7 @@ inline void MIH_C_LINK_AC_PARAM_encode(Bit_Buffer_t* bbP, MIH_C_LINK_AC_PARAM_T MIH_C_RESOURCE_DESC_encode(bbP, &dataP->_union.resource_desc); break; default: - ERR("NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_AC_PARAM_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_AC_PARAM_T %d\n", dataP->choice); } } //----------------------------------------------------------------------------- @@ -501,8 +501,8 @@ inline void MIH_C_LINK_AC_PARAM_decode(Bit_Buffer_t* bbP, MIH_C_LINK_AC_PARAM_T MIH_C_RESOURCE_DESC_decode(bbP, &dataP->_union.resource_desc); break; default: - ERR("NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_AC_PARAM_T %d\n", dataP->choice); + printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_AC_PARAM_T %d\n", dataP->choice); } } -#endif \ No newline at end of file +#endif diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_bit_buffer.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_bit_buffer.c index c544a1ddae..36bad73f91 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_bit_buffer.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_bit_buffer.c @@ -7,7 +7,6 @@ #include <arpa/inet.h> //----------------------------------------------------------------------------- #include "MIH_C_bit_buffer.h" -#include "MIH_C_log.h" //----------------------------------------------------------------------------- Bit_Buffer_t* new_BitBuffer_0(void) //----------------------------------------------------------------------------- @@ -115,7 +114,7 @@ u_int32_t BitBuffer_read(Bit_Buffer_t* bbP, const unsigned int nb_bitsP) //cout << dec << "BitBuffer_read(" << nb_bitsP << ")"<< endl; if (BitBuffer_isCheckReadOverflowOK(bbP, nb_bitsP)) { if (nb_bitsP > (sizeof(unsigned long)*8)) { - ERR("BitBuffer_read nb bits too large - must be <= sizeof(long int)*8"); + printf("[MIH_C] ERROR BitBuffer_read nb bits too large - must be <= sizeof(long int)*8"); } else { do { data_l = data_l << 8; @@ -254,7 +253,7 @@ void BitBuffer_write8b(Bit_Buffer_t* bbP, u_int8_t valueP, unsigned int nb_bitsP valueP = valueP & ((u_int8_t)(0xFF) >> (8 - nb_bitsP)); //std::cout << "BitBuffer_write char " << (u_int32_t)(valueP) << " " << nb_bitsP << " bits" << std::endl; if (nb_bitsP > (sizeof(unsigned char)*8)) { - ERR("BitBuffer_write nb bits too large - must be <= sizeof(char)*8"); + printf("[MIH_C] ERROR BitBuffer_write nb bits too large - must be <= sizeof(char)*8"); } else { if (bbP->m_bit_mod_8_position == 0) { if (nb_bitsP == (sizeof(unsigned char)*8)) { @@ -288,7 +287,7 @@ void BitBuffer_write16b(Bit_Buffer_t* bbP, u_int16_t valueP, unsigned int nb_bit if (BitBuffer_isCheckWriteOverflowOK(bbP,nb_bitsP)) { valueP = valueP & ((u_int16_t)(0xFFFF) >> (16 - nb_bitsP)); if (nb_bitsP > (sizeof (u_int16_t)*8)) { - ERR("BitBuffer_write nb bits too large - must be <= sizeof (short)*8"); + printf("[MIH_C] ERROR BitBuffer_write nb bits too large - must be <= sizeof (short)*8"); } else { if (nb_bitsP > 8) { //BitBuffer_write8b(bbP,(u_int8_t)(valueP >> (8 - (16-nb_bitsP))), nb_bitsP - 8); @@ -308,7 +307,7 @@ void BitBuffer_writelittleendian16b(Bit_Buffer_t* bbP, u_int16_t valueP, unsigne if (BitBuffer_isCheckWriteOverflowOK(bbP,nb_bitsP)) { valueP = valueP & ((u_int16_t)(0xFFFF) >> (16 - nb_bitsP)); if (nb_bitsP > (sizeof (u_int16_t)*8)) { - ERR("BitBuffer_write nb bits too large - must be <= sizeof (short)*8"); + printf("[MIH_C] ERROR BitBuffer_write nb bits too large - must be <= sizeof (short)*8"); } else { if (nb_bitsP > 8) { BitBuffer_write8(bbP,(u_int8_t)(valueP)); @@ -328,7 +327,7 @@ void BitBuffer_write32b(Bit_Buffer_t* bbP, u_int32_t valueP, unsigned int nb_bit if (BitBuffer_isCheckWriteOverflowOK(bbP,nb_bitsP)) { valueP = valueP & ((u_int32_t)(0xFFFFFFFF) >> (32 - nb_bitsP)); if (nb_bitsP > (sizeof (u_int32_t)*8)) { - ERR("BitBuffer_write nb bits too large - must be <= sizeof (int)*8"); + printf("[MIH_C] ERROR BitBuffer_write nb bits too large - must be <= sizeof (int)*8"); } else { if (nb_bitsP > 24) { //BitBuffer_write8b(bbP,(u_int8_t)(valueP >> (24 - (32-nb_bitsP))), nb_bitsP - 24); @@ -359,7 +358,7 @@ void BitBuffer_writelittleendian32b(Bit_Buffer_t* bbP, u_int32_t valueP, unsigne if (BitBuffer_isCheckWriteOverflowOK(bbP,nb_bitsP)) { valueP = valueP & ((u_int32_t)(0xFFFFFFFF) >> (32 - nb_bitsP)); if (nb_bitsP > (sizeof (u_int32_t)*8)) { - ERR("BitBuffer_write nb bits too large - must be <= sizeof (int)*8"); + printf("[MIH_C] ERROR BitBuffer_write nb bits too large - must be <= sizeof (int)*8"); } else { if (nb_bitsP > 24) { BitBuffer_write8(bbP,(u_int8_t)(valueP)); diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_header_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_header_codec.c index d656270c3a..812d6f69ce 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_header_codec.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_header_codec.c @@ -50,7 +50,7 @@ int MIH_C_Link_Header_Encode(Bit_Buffer_t* bbP, MIH_C_HEADER_T* headerP) { BitBuffer_write8b (bbP, reserved, 4); BitBuffer_write16b (bbP, headerP->transaction_id, 12); BitBuffer_write16 (bbP, headerP->payload_length); - DEBUG_ENCODE("%s: version 0x%02X\n", __FUNCTION__, headerP->version); + /*DEBUG_ENCODE("%s: version 0x%02X\n", __FUNCTION__, headerP->version); DEBUG_ENCODE("%s: ack_req 0x%02X\n", __FUNCTION__, headerP->ack_req); DEBUG_ENCODE("%s: ack_rsp 0x%02X\n", __FUNCTION__, headerP->ack_rsp); DEBUG_ENCODE("%s: uir 0x%02X\n", __FUNCTION__, headerP->uir); @@ -61,7 +61,7 @@ int MIH_C_Link_Header_Encode(Bit_Buffer_t* bbP, MIH_C_HEADER_T* headerP) { DEBUG_ENCODE("%s: action_identifier 0x%04X\n", __FUNCTION__, headerP->action_identifier); DEBUG_ENCODE("%s: reserved 0x%02X\n", __FUNCTION__, reserved); DEBUG_ENCODE("%s: transaction_id 0x%04X\n", __FUNCTION__, headerP->transaction_id); - DEBUG_ENCODE("%s: payload_length 0x%02X\n", __FUNCTION__, headerP->payload_length); + DEBUG_ENCODE("%s: payload_length 0x%02X\n", __FUNCTION__, headerP->payload_length);*/ // may be check for validity of header field -> set MIH_HEADER_DECODE_FAILURE if (BitBuffer_isCheckWriteOverflowOK(bbP, 0) == BIT_BUFFER_FALSE) { @@ -99,7 +99,7 @@ int MIH_C_Link_Header_Decode(Bit_Buffer_t* bbP, MIH_C_HEADER_T* headerP) { headerP->transaction_id = (MIH_C_TRANSACTION_ID_T) BitBuffer_read(bbP, 12); headerP->payload_length = (MIH_C_VARIABLE_PAYLOAD_LENGTH_T)BitBuffer_read16(bbP); - DEBUG_DECODE("%s: version 0x%02X\n", __FUNCTION__, headerP->version); + /*DEBUG_DECODE("%s: version 0x%02X\n", __FUNCTION__, headerP->version); DEBUG_DECODE("%s: ack_req 0x%02X\n", __FUNCTION__, headerP->ack_req); DEBUG_DECODE("%s: ack_rsp 0x%02X\n", __FUNCTION__, headerP->ack_rsp); DEBUG_DECODE("%s: uir 0x%02X\n", __FUNCTION__, headerP->uir); @@ -110,7 +110,7 @@ int MIH_C_Link_Header_Decode(Bit_Buffer_t* bbP, MIH_C_HEADER_T* headerP) { DEBUG_DECODE("%s: action_identifier 0x%04X\n", __FUNCTION__, headerP->action_identifier); DEBUG_DECODE("%s: reserved 0x%02X\n", __FUNCTION__, reserved); DEBUG_DECODE("%s: transaction_id 0x%04X\n", __FUNCTION__, headerP->transaction_id); - DEBUG_DECODE("%s: payload_length 0x%02X\n", __FUNCTION__, headerP->payload_length); + DEBUG_DECODE("%s: payload_length 0x%02X\n", __FUNCTION__, headerP->payload_length);*/ // may be check for validity of header field -> set MIH_HEADER_DECODE_FAILURE if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_FALSE) { diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_log.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_log.c index 39e252ac6a..c65f5d7cf3 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_log.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_log.c @@ -5,6 +5,7 @@ ***************************************************************************/ #define MIH_C_INTERFACE #define MIH_C_LOG_C +/* //----------------------------------------------------------------------------- #include "MIH_C_log.h" //----------------------------------------------------------------------------- @@ -35,7 +36,7 @@ int is_newline( char *str, int size){ if ( str[i] == '\n' ) return 1; } - /* if we get all the way to here, there must not have been a newline! */ + // if we get all the way to here, there must not have been a newline! return 0; } @@ -161,5 +162,5 @@ int MIH_C_log_exit(void) { } return 0; } - +*/ diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_msg_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_msg_codec.c index f67a29e2cb..fcb8175b9b 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_msg_codec.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_msg_codec.c @@ -23,7 +23,7 @@ int MIH_C_Link_Message_Decode_Link_Capability_Discover_request(Bit_Buffer_t* bbP if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) { MIH_C_MIHF_ID_decode(bbP, &messageP->source); } else { - ERR(" %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_SOURCE_MIHF_ID\n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_SOURCE_MIHF_ID\n", __FUNCTION__); return MIH_MESSAGE_DECODE_FAILURE; } @@ -33,25 +33,25 @@ int MIH_C_Link_Message_Decode_Link_Capability_Discover_request(Bit_Buffer_t* bbP if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) { MIH_C_MIHF_ID_decode(bbP, &messageP->destination); } else { - ERR(" %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_DESTINATION_MIHF_ID\n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_DESTINATION_MIHF_ID\n", __FUNCTION__); return MIH_MESSAGE_DECODE_FAILURE; } status = MIH_C_Link_Primitive_Decode_Link_Capability_Discover_request(bbP, &messageP->primitive); if (status == MIH_PRIMITIVE_DECODE_OK) { - DEBUG(" %s() -> MIH_MESSAGE_DECODE_OK \n", __FUNCTION__); + printf("[MIH_C] %s() -> MIH_MESSAGE_DECODE_OK \n", __FUNCTION__); return MIH_MESSAGE_DECODE_OK; } if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) { - ERR(" %s() -> MIH_MESSAGE_DECODE_TOO_SHORT \n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_TOO_SHORT \n", __FUNCTION__); return MIH_MESSAGE_DECODE_TOO_SHORT; } if (status == MIH_PRIMITIVE_DECODE_FAILURE) { - ERR(" %s() -> MIH_MESSAGE_DECODE_FAILURE \n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE \n", __FUNCTION__); return MIH_MESSAGE_DECODE_FAILURE; } if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) { - ERR(" %s() -> MIH_MESSAGE_DECODE_BAD_PARAMETER \n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_BAD_PARAMETER \n", __FUNCTION__); return MIH_MESSAGE_DECODE_BAD_PARAMETER; } return status; @@ -87,7 +87,7 @@ int MIH_C_Link_Message_Decode_Link_Event_Subscribe_request(Bit_Buffer_t* bbP, MI if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) { MIH_C_MIHF_ID_decode(bbP, &messageP->source); } else { - ERR(" %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_SOURCE_MIHF_ID\n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_SOURCE_MIHF_ID\n", __FUNCTION__); return MIH_MESSAGE_DECODE_FAILURE; } @@ -97,25 +97,25 @@ int MIH_C_Link_Message_Decode_Link_Event_Subscribe_request(Bit_Buffer_t* bbP, MI if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) { MIH_C_MIHF_ID_decode(bbP, &messageP->destination); } else { - ERR(" %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_DESTINATION_MIHF_ID\n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_DESTINATION_MIHF_ID\n", __FUNCTION__); return MIH_MESSAGE_DECODE_FAILURE; } status = MIH_C_Link_Primitive_Decode_Link_Event_Subscribe_request(bbP, &messageP->primitive); if (status == MIH_PRIMITIVE_DECODE_OK) { - DEBUG(" %s() -> MIH_MESSAGE_DECODE_OK \n", __FUNCTION__); + printf("[MIH_C] %s() -> MIH_MESSAGE_DECODE_OK \n", __FUNCTION__); return MIH_MESSAGE_DECODE_OK; } if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) { - ERR(" %s() -> MIH_MESSAGE_DECODE_TOO_SHORT \n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_TOO_SHORT \n", __FUNCTION__); return MIH_MESSAGE_DECODE_TOO_SHORT; } if (status == MIH_PRIMITIVE_DECODE_FAILURE) { - ERR(" %s() -> MIH_MESSAGE_DECODE_FAILURE \n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE \n", __FUNCTION__); return MIH_MESSAGE_DECODE_FAILURE; } if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) { - ERR(" %s() -> MIH_MESSAGE_DECODE_BAD_PARAMETER \n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_BAD_PARAMETER \n", __FUNCTION__); return MIH_MESSAGE_DECODE_BAD_PARAMETER; } return status; @@ -151,7 +151,7 @@ int MIH_C_Link_Message_Decode_Link_Event_Unsubscribe_request(Bit_Buffer_t* bbP, if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) { MIH_C_MIHF_ID_decode(bbP, &messageP->source); } else { - ERR(" %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_SOURCE_MIHF_ID\n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_SOURCE_MIHF_ID\n", __FUNCTION__); return MIH_PRIMITIVE_DECODE_FAILURE; } @@ -161,25 +161,25 @@ int MIH_C_Link_Message_Decode_Link_Event_Unsubscribe_request(Bit_Buffer_t* bbP, if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) { MIH_C_MIHF_ID_decode(bbP, &messageP->destination); } else { - ERR(" %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_DESTINATION_MIHF_ID\n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_DESTINATION_MIHF_ID\n", __FUNCTION__); return MIH_PRIMITIVE_DECODE_FAILURE; } status = MIH_C_Link_Primitive_Decode_Link_Event_Unsubscribe_request(bbP, &messageP->primitive); if (status == MIH_PRIMITIVE_DECODE_OK) { - DEBUG(" %s() -> MIH_MESSAGE_DECODE_OK \n", __FUNCTION__); + printf("[MIH_C] %s() -> MIH_MESSAGE_DECODE_OK \n", __FUNCTION__); return MIH_MESSAGE_DECODE_OK; } if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) { - ERR(" %s() -> MIH_MESSAGE_DECODE_TOO_SHORT \n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_TOO_SHORT \n", __FUNCTION__); return MIH_MESSAGE_DECODE_TOO_SHORT; } if (status == MIH_PRIMITIVE_DECODE_FAILURE) { - ERR(" %s() -> MIH_MESSAGE_DECODE_FAILURE \n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE \n", __FUNCTION__); return MIH_MESSAGE_DECODE_FAILURE; } if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) { - ERR(" %s() -> MIH_MESSAGE_DECODE_BAD_PARAMETER \n", __FUNCTION__); + printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_BAD_PARAMETER \n", __FUNCTION__); return MIH_MESSAGE_DECODE_BAD_PARAMETER; } return status; diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_primitive_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_primitive_codec.c index ddde6e1d91..da63eb04fe 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_primitive_codec.c +++ b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_primitive_codec.c @@ -25,14 +25,14 @@ int MIH_C_Link_Primitive_Decode_Link_Event_Subscribe_request(Bit_Buffer_t* bbP, MIH_C_LINK_EVENT_LIST_decode(bbP, &primitiveP->RequestedLinkEventList); #if MIH_C_DEBUG_DESERIALIZATION - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_DETECTED) DEBUG("SUBSCRIBE_REQUEST LINK_DETECTED\n"); - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_UP) DEBUG("SUBSCRIBE_REQUEST LINK_UP\n"); - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_DOWN) DEBUG("SUBSCRIBE_REQUEST LINK_DOWN\n"); - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_PARAMETERS_REPORT) DEBUG("SUBSCRIBE_REQUEST LINK_PARAMETERS_REPORT\n"); - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_GOING_DOWN) DEBUG("SUBSCRIBE_REQUEST LINK_GOING_DOWN\n"); - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_HANDOVER_IMMINENT) DEBUG("SUBSCRIBE_REQUEST LINK_HANDOVER_IMMINENT\n"); - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_HANDOVER_COMPLETE) DEBUG("SUBSCRIBE_REQUEST LINK_HANDOVER_COMPLETE\n"); - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS) DEBUG("SUBSCRIBE_REQUEST LINK_PDU_TRANSMIT_STATUS\n"); + if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_DETECTED) printf("SUBSCRIBE_REQUEST LINK_DETECTED\n"); + if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_UP) printf("SUBSCRIBE_REQUEST LINK_UP\n"); + if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_DOWN) printf("SUBSCRIBE_REQUEST LINK_DOWN\n"); + if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_PARAMETERS_REPORT) printf("SUBSCRIBE_REQUEST LINK_PARAMETERS_REPORT\n"); + if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_GOING_DOWN) printf("SUBSCRIBE_REQUEST LINK_GOING_DOWN\n"); + if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_HANDOVER_IMMINENT) printf("SUBSCRIBE_REQUEST LINK_HANDOVER_IMMINENT\n"); + if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_HANDOVER_COMPLETE) printf("SUBSCRIBE_REQUEST LINK_HANDOVER_COMPLETE\n"); + if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS) printf("SUBSCRIBE_REQUEST LINK_PDU_TRANSMIT_STATUS\n"); #endif if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_TRUE) { diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C.h index 3e4acac638..fd9d4cb054 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C.h +++ b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C.h @@ -39,7 +39,7 @@ #ifndef __MIH_C_H__ # define __MIH_C_H__ #include "MIH_C_bit_buffer.h" -#include "MIH_C_log.h" +#include "UTIL/LOG/log.h" #include "MIH_C_Link_Constants.h" #include "MIH_C_Types.h" #include "MIH_C_header_codec.h" @@ -56,7 +56,7 @@ #include "MIH_C_primitive_codec.h" #include "MIH_C_msg_codec.h" -void MIH_C_init(int log_outputP); +void MIH_C_init(void); void MIH_C_exit(void); #define DEBUG_TRACE_DETAILS diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h index 11fccdd0e3..ea38c80b24 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h +++ b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h @@ -19,25 +19,15 @@ Type definition and structure for 802.21 interface #ifndef __MIH_C_LINK_TYPES_H__ #define __MIH_C_LINK_TYPES_H__ #include <sys/types.h> +#include <linux/types.h> //----------------------------------------------------------------------------- #include "MIH_C_Link_Constants.h" #include "MIH_C_bit_buffer.h" -#include "MIH_C_log.h" +#include "UTIL/LOG/log.h" //----------------------------------------------------------------------------- #define MIH_C_DEBUG_SERIALIZATION 1 #define MIH_C_DEBUG_DESERIALIZATION 1 //----------------------------------------------------------------------------- -#ifdef MIH_C_DEBUG_SERIALIZATION -#define DEBUG_ENCODE DEBUG -#else -#define DEBUG_ENCODE(x) -#endif -#ifdef MIH_C_DEBUG_DESERIALIZATION -#define DEBUG_DECODE DEBUG -#else -#define DEBUG_DECODE(x) -#endif -//----------------------------------------------------------------------------- #define STR(x) #x /** \defgroup MIH_C_INTERFACE 802.21 interface @@ -95,7 +85,6 @@ typedef struct MIH_C_BITMAP256 {u_int64_t val[4];}__attribute__((__packed__)) MI return sprintf(buffP, "0x%02X", *bitmapP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - DEBUG_ENCODE("%s: %hhX\n", __FUNCTION__, *dataP);\ MIH_C_BITMAP8_encode(bbP, bitmapP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP8_decode(bbP, bitmapP);}; @@ -110,7 +99,6 @@ typedef struct MIH_C_BITMAP256 {u_int64_t val[4];}__attribute__((__packed__)) MI return sprintf(buffP, "0x%02X", *bitmapP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - DEBUG_ENCODE("%s: %02X\n", __FUNCTION__, *bitmapP);\ MIH_C_BITMAP8_encode(bbP, bitmapP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP8_decode(bbP, bitmapP);}; @@ -125,7 +113,6 @@ typedef struct MIH_C_BITMAP256 {u_int64_t val[4];}__attribute__((__packed__)) MI return sprintf(buffP, "0x%04X", *bitmapP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - DEBUG_ENCODE("%s: %04X\n", __FUNCTION__, *bitmapP);\ MIH_C_BITMAP16_encode(bbP, bitmapP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP16_decode(bbP, bitmapP);}; @@ -140,7 +127,6 @@ typedef struct MIH_C_BITMAP256 {u_int64_t val[4];}__attribute__((__packed__)) MI return sprintf(buffP, "0x%02X%02X%02X", bitmapP->val[0], bitmapP->val[1], bitmapP->val[2]);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - DEBUG_ENCODE("%s: %02X%02X%02X\n", __FUNCTION__, bitmapP->val[0], bitmapP->val[1], bitmapP->val[2]);\ MIH_C_BITMAP24_encode(bbP, bitmapP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP24_decode(bbP, bitmapP);}; @@ -155,7 +141,6 @@ typedef struct MIH_C_BITMAP256 {u_int64_t val[4];}__attribute__((__packed__)) MI return sprintf(buffP, "0x%08X", *bitmapP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - DEBUG_ENCODE("%s: %08X\n", __FUNCTION__, *bitmapP);\ MIH_C_BITMAP32_encode(bbP, bitmapP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP32_decode(bbP, bitmapP);}; @@ -173,7 +158,6 @@ typedef struct MIH_C_BITMAP256 {u_int64_t val[4];}__attribute__((__packed__)) MI return buffer_index;\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - DEBUG_ENCODE("%s: %16X\n", __FUNCTION__, *bitmapP);\ MIH_C_BITMAP64_encode(bbP, bitmapP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP64_decode(bbP, bitmapP);}; @@ -288,11 +272,9 @@ typedef int64_t MIH_C_INTEGER8_T; return sprintf(buffP, "0x%02X", *dataP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - DEBUG_ENCODE("%s: %02X\n", __FUNCTION__, *dataP);\ MIH_C_INTEGER1_encode(bbP, (MIH_C_INTEGER1_T*)dataP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ MIH_C_INTEGER1_decode(bbP, (MIH_C_INTEGER1_T*)dataP);\ - DEBUG_DECODE("%s: %02X\n", __FUNCTION__, *dataP);\ }; /*! \def TYPEDEF_INTEGER2(DATA_TYPE_NAME) @@ -306,11 +288,9 @@ typedef int64_t MIH_C_INTEGER8_T; return sprintf(buffP, "0x%04X", *dataP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - DEBUG_ENCODE("%s: %04X\n", __FUNCTION__, *dataP);\ MIH_C_INTEGER2_encode(bbP, (MIH_C_INTEGER2_T*)dataP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ MIH_C_INTEGER2_decode(bbP, (MIH_C_INTEGER2_T*)dataP);\ - DEBUG_DECODE("%s: %04X\n", __FUNCTION__, *dataP);\ }; /*! \def TYPEDEF_INTEGER4(DATA_TYPE_NAME) @@ -324,11 +304,9 @@ typedef int64_t MIH_C_INTEGER8_T; return sprintf(buffP, "0x%08X", (MIH_C_INTEGER4_T)*dataP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - DEBUG_ENCODE("%s: %08X\n", __FUNCTION__, *dataP);\ MIH_C_INTEGER4_encode(bbP, (MIH_C_INTEGER4_T*)dataP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ MIH_C_INTEGER4_decode(bbP, (MIH_C_INTEGER4_T*)dataP);\ - DEBUG_DECODE("%s: %08X\n", __FUNCTION__, *dataP);\ }; /*! \def TYPEDEF_INTEGER8(DATA_TYPE_NAME) @@ -345,11 +323,9 @@ typedef int64_t MIH_C_INTEGER8_T; return buffer_index;\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - DEBUG_ENCODE("%s: %16X\n", __FUNCTION__, *dataP);\ MIH_C_INTEGER8_encode(bbP, (MIH_C_INTEGER8_T*)dataP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ MIH_C_INTEGER8_decode(bbP, (MIH_C_INTEGER8_T*)dataP);\ - DEBUG_DECODE("%s: %16X\n", __FUNCTION__, *dataP);\ }; #else #define TYPEDEF_INTEGER1(DATA_TYPE_NAME) typedef MIH_C_INTEGER1_T DATA_TYPE_NAME ## _T;\ @@ -425,11 +401,9 @@ typedef u_int64_t MIH_C_UNSIGNED_INT8_T; return sprintf(buffP, "0x%02X", *dataP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - DEBUG_ENCODE("%s: %02X\n", __FUNCTION__, *dataP);\ MIH_C_UNSIGNED_INT1_encode(bbP, dataP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ MIH_C_UNSIGNED_INT1_decode(bbP, dataP);\ - DEBUG_DECODE("%s: %02X\n", __FUNCTION__, *dataP);\ }; /*! \def TYPEDEF_UNSIGNED_INT2(DATA_TYPE_NAME) @@ -443,11 +417,9 @@ typedef u_int64_t MIH_C_UNSIGNED_INT8_T; return sprintf(buffP, "0x%04X", *dataP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - DEBUG_ENCODE("%s: %04X\n", __FUNCTION__, *dataP);\ MIH_C_UNSIGNED_INT2_encode(bbP, dataP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ MIH_C_UNSIGNED_INT2_decode(bbP, dataP);\ - DEBUG_DECODE("%s: %04X\n", __FUNCTION__, *dataP);\ }; /*! \def TYPEDEF_UNSIGNED_INT4(DATA_TYPE_NAME) @@ -461,11 +433,9 @@ typedef u_int64_t MIH_C_UNSIGNED_INT8_T; return sprintf(buffP, "0x%08X", *dataP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - DEBUG_ENCODE("%s: %08X\n", __FUNCTION__, *dataP);\ MIH_C_UNSIGNED_INT4_encode(bbP, dataP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ MIH_C_UNSIGNED_INT4_decode(bbP, dataP);\ - DEBUG_DECODE("%s: %08X\n", __FUNCTION__, *dataP);\ }; /*! \def TYPEDEF_UNSIGNED_INT8(DATA_TYPE_NAME) @@ -479,11 +449,9 @@ typedef u_int64_t MIH_C_UNSIGNED_INT8_T; return sprintf(buffP, "0x%16X", *dataP);\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - DEBUG_ENCODE("%s: %16X\n", __FUNCTION__, *dataP);\ MIH_C_UNSIGNED_INT8_encode(bbP, dataP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ MIH_C_UNSIGNED_INT8_decode(bbP, dataP);\ - DEBUG_DECODE("%s: %16X\n", __FUNCTION__, *dataP);\ }; #else #define TYPEDEF_UNSIGNED_INT1(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT1_T DATA_TYPE_NAME ## _T;\ @@ -556,8 +524,7 @@ u_int16_t MIH_C_LIST_LENGTH_get_encode_length(u_int16_t lengthP); inline void DATA_TYPE_NAME ## _LIST_decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP) {\ int index = 0;\ MIH_C_LIST_LENGTH_decode(bbP, &listP->length);\ - DEBUG_DECODE("%s: Length\n", __FUNCTION__, listP->length);\ - if (listP->length > MAX_LENGTH) {ERR(" DATA_TYPE_NAME ## _LIST_decode num elements in list out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ + if (listP->length > MAX_LENGTH) {printf("[MIH_C] ERROR DATA_TYPE_NAME ## _LIST_decode num elements in list out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ } else {\ while ((index < listP->length) && (index < MAX_LENGTH)){\ DATA_TYPE_NAME ## _decode(bbP, &listP->val[index++]);\ @@ -567,9 +534,8 @@ u_int16_t MIH_C_LIST_LENGTH_get_encode_length(u_int16_t lengthP); inline void DATA_TYPE_NAME ## _LIST_encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP) {\ int index = 0;\ if (listP->length > MAX_LENGTH) {\ - ERR(" DATA_TYPE_NAME ## _LIST_encode num elements in list out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ + printf("[MIH_C] ERROR DATA_TYPE_NAME ## _LIST_encode num elements in list out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ } else {\ - DEBUG_ENCODE("%s: Length\n", __FUNCTION__, listP->length);\ MIH_C_LIST_LENGTH_encode(bbP, listP->length);\ while (index < listP->length) {\ DATA_TYPE_NAME ## _encode(bbP, &listP->val[index++]);\ @@ -633,7 +599,6 @@ TYPEDEF_UNSIGNED_INT1(MIH_C_ENUMERATED) extern inline void MIH_C_ENUMERATED_encode(Bit_Buffer_t* bbP, MIH_C_ENUMERATED_T* dataP);\ extern inline void MIH_C_ENUMERATED_decode(Bit_Buffer_t* bbP, MIH_C_ENUMERATED_T* dataP);\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - DEBUG_ENCODE("%s: %02X\n", __FUNCTION__, *dataP);\ MIH_C_ENUMERATED_encode(bbP, dataP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {MIH_C_ENUMERATED_decode(bbP, dataP);}; #else @@ -672,7 +637,6 @@ TYPEDEF_ENUMERATED(MIH_C_BOOLEAN) return buffer_index;\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - DEBUG_ENCODE("%s: %02X\n", __FUNCTION__, *dataP);\ MIH_C_BOOLEAN_encode(bbP, dataP);};\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {MIH_C_ENUMERATED_decode(bbP, dataP);}; #else @@ -703,28 +667,30 @@ TYPEDEF_ENUMERATED(MIH_C_BOOLEAN) };\ inline void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP) {\ MIH_C_LIST_LENGTH_decode(bbP, &listP->length);\ - if (listP->length > MAX_LENGTH) {ERR(" DATA_TYPE_NAME ## _decode String length out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ + if (listP->length > MAX_LENGTH) {printf("[MIH_C] ERROR DATA_TYPE_NAME ## _decode String length out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ } else {\ BitBuffer_readMem(bbP, listP->val, listP->length);\ }\ };\ inline void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP) {\ if (listP->length > MAX_LENGTH) {\ - ERR(" DATA_TYPE_NAME ## _encode String length out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ + printf("[MIH_C] ERROR DATA_TYPE_NAME ## _encode String length out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ } else {\ - DEBUG_ENCODE("%s: Length %04X\n", __FUNCTION__, listP->length);\ MIH_C_LIST_LENGTH_encode(bbP, listP->length);\ BitBuffer_writeMem(bbP, listP->val, listP->length);\ }\ };\ inline void DATA_TYPE_NAME ## _set(DATA_TYPE_NAME ## _T *octet_strP, u_int8_t* strP, u_int16_t lengthP) {\ if (lengthP > MAX_LENGTH) {\ - ERR(" DATA_TYPE_NAME ## _set String length out of bounds\n");\ + printf("[MIH_C] ERROR DATA_TYPE_NAME ## _set String length out of bounds\n");\ octet_strP->length = 0;\ } else {\ - DEBUG_ENCODE("%s: Length %d MAX LENGTH %d\n", __FUNCTION__, lengthP, MAX_LENGTH);\ octet_strP->length = lengthP;\ - memcpy((char *)octet_strP->val, (char *)strP, lengthP);\ + if (strP != NULL) {\ + memcpy((char *)octet_strP->val, (char *)strP, lengthP);\ + } else {\ + memset((char *)octet_strP->val, 0, lengthP);\ + }\ }\ }; #else @@ -1229,22 +1195,22 @@ typedef struct MIH_C_RESOURCE_DESC { MIH_C_FLOW_ID_T flow_id; MIH_C_CHOICE_T choice_link_data_rate; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_LINK_DATA_RATE_T link_data_rate; } _union_link_data_rate; MIH_C_CHOICE_T choice_qos; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_QOS_T qos; } _union_qos; MIH_C_CHOICE_T choice_jumbo_enable; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_JUMBO_ENABLE_T jumbo_enable; } _union_jumbo_enable; MIH_C_CHOICE_T choice_multicast_enable; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_MULTICAST_ENABLE_T multicast_enable; } _union_multicast_enable; } MIH_C_RESOURCE_DESC_T; @@ -1259,12 +1225,12 @@ typedef struct MIH_C_FLOW_ATTRIBUTE { MIH_C_FLOW_ID_T flow_id; MIH_C_CHOICE_T choice_multicast_enable; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_MULTICAST_ENABLE_T multicast_enable; } _union_multicast_enable; MIH_C_CHOICE_T choice_mark_qos; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; struct { MIH_C_MARK_T mark; MIH_C_QOS_T qos; @@ -1272,7 +1238,7 @@ typedef struct MIH_C_FLOW_ATTRIBUTE { } _union_mark_qos; MIH_C_CHOICE_T choice_mark_drop_eligibility; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; struct { MIH_C_MARK_T mark; MIH_C_DROP_ELIGIBILITY_T drop_eligibility; @@ -1291,7 +1257,7 @@ typedef struct MIH_C_FLOW_ATTRIBUTE { typedef struct MIH_C_LINK_AC_PARAM { MIH_C_CHOICE_T choice; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_FLOW_ATTRIBUTE_T flow_attribute; MIH_C_RESOURCE_DESC_T resource_desc; } _union; @@ -1319,7 +1285,7 @@ typedef struct MIH_C_LINK_ACTION_REQ { MIH_C_LINK_ID_T link_id; MIH_C_CHOICE_T choice; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_LINK_ADDR_T link_addr; } _union; @@ -1373,7 +1339,7 @@ typedef struct MIH_C_LINK_ACTION_RSP { MIH_C_LINK_AC_RESULT_T link_ac_result; MIH_C_CHOICE_T choice; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; LIST(MIH_C_LINK_SCAN_RSP, link_scan_rsp) } _union; } MIH_C_LINK_ACTION_RSP_T; @@ -1672,7 +1638,7 @@ typedef struct MIH_C_LINK_CFG_PARAM { MIH_C_LINK_PARAM_TYPE_T link_param_type; MIH_C_CHOICE_T choice; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_TIMER_INTERVAL_T timer_interval; LIST(MIH_C_LINK_SCAN_RSP, link_scan_rsp) } _union; @@ -1944,7 +1910,7 @@ typedef struct MIH_C_LINK_PARAM_RPT { MIH_C_LINK_PARAM_T link_param; MIH_C_CHOICE_T choice; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_THRESHOLD_T threshold; } _union; } MIH_C_LINK_PARAM_RPT_T; @@ -2055,7 +2021,7 @@ typedef struct MIH_C_LINK_TUPLE_ID { MIH_C_LINK_ID_T link_id; MIH_C_CHOICE_T choice; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_LINK_ADDR_T link_addr; } _union; } MIH_C_LINK_TUPLE_ID_T; @@ -2476,17 +2442,17 @@ typedef struct MIH_C_IP_CONFIG MIH_C_IP_CFG_MTHDS_T ip_cfg_mthds; MIH_C_CHOICE_T choice_dhcp_serv; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_DHCP_SERV_T dhcp_serv; } _union_dhcp_serv; MIH_C_CHOICE_T choice_fn_agnt; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_FN_AGNT_T fn_agnt; } _union_fn_agnt; MIH_C_CHOICE_T choice_acc_rtr; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_ACC_RTR_T acc_rtr; } _union_acc_rtr; } MIH_C_IP_CONFIG_T; @@ -2536,17 +2502,17 @@ typedef struct MIH_C_NETWORK_TYPE { MIH_C_CHOICE_T choice_link_type; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_LINK_TYPE_T link_type; } _union_link_type; MIH_C_CHOICE_T choice_subtype; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_SUBTYPE_T subtype; } _union_subtype; MIH_C_CHOICE_T choice_type_ext; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_TYPE_EXT_T type_ext; } _union_type_ext; } MIH_C_NETWORK_TYPE_T; @@ -2695,17 +2661,17 @@ TYPEDEF_OCTET_STRING(MIH_C_MIHF_ID, 253) typedef struct MIH_C_LINK_DET_CFG { MIH_C_CHOICE_T choice_network_id; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_NETWORK_ID_T network_id; } _union_network_id; MIH_C_CHOICE_T choice_sig_strength; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_SIG_STRENGTH_T sig_strength; } _union_sig_strength; MIH_C_CHOICE_T choice_link_data_rate; union { - MIH_C_NULL_T null; + MIH_C_NULL_T null_attr; MIH_C_LINK_DATA_RATE_T link_data_rate; } _union_link_data_rate; } MIH_C_LINK_DET_CFG_T; diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_log.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_log.h index eb164968fc..446e755cd5 100755 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_log.h +++ b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_log.h @@ -35,7 +35,7 @@ Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis * \bug * \warning */ - +#error "To be removed" #ifndef __MIH_C_LOG_H__ # define __MIH_C_LOG_H__ //----------------------------------------------------------------------------- diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb.h new file mode 100755 index 0000000000..193ec71c10 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb.h @@ -0,0 +1,39 @@ +/***************************************************************************** + * Eurecom OpenAirInterface 3 + * Copyright(c) 2012 Eurecom + * + * Source lteRALenb.h + * + * Version 0.1 + * + * Date 11/18/2013 + * + * Product MIH RAL LTE + * + * Subsystem RAL-LTE + * + * Authors Michelle Wetterwald, Lionel Gauthier, Frederic Maurel + * + * Description Header file to be included by any module that wants to interface with RAL ENB. + * + *****************************************************************************/ +#ifndef __LTE_RAL_ENB_H__ +#define __LTE_RAL_ENB_H__ + +#include "MIH_C.h" + +#include "openair_types.h" +#include "platform_constants.h" +#include "platform_types.h" + +#include "lteRALenb_constants.h" +#include "lteRALenb_variables.h" +#include "lteRALenb_action.h" +#include "lteRALenb_main.h" +#include "lteRALenb_mih_msg.h" +#include "lteRALenb_rrc_msg.h" +#include "lteRALenb_parameters.h" +#include "lteRALenb_process.h" +#include "lteRALenb_subscribe.h" +#include "lteRALenb_thresholds.h" +#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_action.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_action.h index 20a9a4b7ef..cdd523de16 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_action.h +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_action.h @@ -26,9 +26,9 @@ * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France * *******************************************************************************/ -/*! \file eRALlte_action.h +/*! \file lteRALenb_action.h * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle * \date 2012 * \version * \note @@ -36,11 +36,26 @@ * \warning */ -#ifndef __RAL_LTE_ACTION_H__ -#define __RAL_LTE_ACTION_H__ - -#include "MIH_C_msg_codec.h" -#include "MIH_C_Link_Messages.h" +#ifndef __LTE_RAL_ENB_ACTION_H__ +#define __LTE_RAL_ENB_ACTION_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_ENB_ACTION_C +# define private_lteralenb_action(x) x +# define protected_lteralenb_action(x) x +# define public_lteralenb_action(x) x +# else +# ifdef LTE_RAL_ENB +# define private_lteralenb_action(x) +# define protected_lteralenb_action(x) extern x +# define public_lteralenb_action(x) extern x +# else +# define private_lteralenb_action(x) +# define protected_lteralenb_action(x) +# define public_lteralenb_action(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALenb.h" /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -49,7 +64,37 @@ /****************************************************************************/ /************************ G L O B A L T Y P E S ************************/ /****************************************************************************/ +#ifdef MIH_C_MEDIEVAL_EXTENSIONS + +/* + * --------------------------------------------------------------------------- + * Flow identifier management: + * Radio Bearer data flows are identified by a source address, a destination + * address and a port number for a particular IP transport protocol (UDP, + * TCP). A private data structure is used to map upper-layer flow identifiers + * to lower-layer RB channel identifiers. It is handled by private functions. + * --------------------------------------------------------------------------- + */ +/* Structure of the destination data flow */ +typedef struct Data_flow { + unsigned char addr[16]; // IP address + unsigned int l2id[2]; // L2 identifier + unsigned int port; // IP port identifier + int proto; // IP protocol + int cnxid; // Data flow identifier +}data_flow_t; + +#define ACTION_MAX_FLOW ((RAL_MAX_MT)*(RAL_MAX_RB)) + +typedef struct eRAL_action_DataFlowList { + int n_flows; + data_flow_t flow [ACTION_MAX_FLOW]; + int flow_id [ACTION_MAX_FLOW]; //added TEMP MW 23/05/13 +} eRAL_action_DataFlowList_t; + +private_lteralenb_action(eRAL_action_DataFlowList_t g_flows = {};) +#endif // MIH_C_MEDIEVAL_EXTENSIONS /****************************************************************************/ /******************** G L O B A L V A R I A B L E S ********************/ /****************************************************************************/ @@ -58,6 +103,16 @@ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -void eRALlte_action_request(MIH_C_Message_Link_Action_request_t* messageP); +protected_lteralenb_action(void eRAL_action_request (ral_enb_instance_t instanceP, MIH_C_Message_Link_Action_request_t* msgP);) +protected_lteralenb_action(int eRAL_action_save_flow_id (ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int cnxid);) +private_lteralenb_action( int eRAL_action_set_channel_id (ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int cnxid);) +private_lteralenb_action( int eRAL_action_get_channel_id (ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int* cnxid);) +private_lteralenb_action( int eRAL_action_del_channel_id (ral_enb_instance_t instanceP, int fix);) +private_lteralenb_action( int eRAL_action_is_in_progress (ral_enb_instance_t instanceP, MIH_C_STATUS_T* status, MIH_C_LINK_AC_RESULT_T* ac_status, MIH_C_LINK_AC_TYPE_T action);) +#ifdef MIH_C_MEDIEVAL_EXTENSIONS +private_lteralenb_action( MIH_C_LINK_AC_RESULT_T eRAL_action_link_flow_attr(ral_enb_instance_t instanceP);) +private_lteralenb_action( MIH_C_LINK_AC_RESULT_T eRAL_action_link_activate_resources(ral_enb_instance_t instanceP);) +private_lteralenb_action( MIH_C_LINK_AC_RESULT_T eRAL_action_link_deactivate_resources(ral_enb_instance_t instanceP);) +#endif // MIH_C_MEDIEVAL_EXTENSIONS #endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_constants.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_constants.h index c2de22cac6..4dea1e0508 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_constants.h +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_constants.h @@ -2,7 +2,7 @@ * Eurecom OpenAirInterface 3 * Copyright(c) 2012 Eurecom * - * Source eRALlte_constants.h + * Source lteRALenb_constants.h * * Version 0.1 * @@ -18,8 +18,8 @@ * side. * *****************************************************************************/ -#ifndef __RAL_LTE_CONS_H__ -#define __RAL_LTE_CONS_H__ +#ifndef __LTE_RAL_ENB_CONSTANTS_H__ +#define __LTE_RAL_ENB_CONSTANTS_H__ #include <sys/types.h> @@ -28,23 +28,16 @@ /****************************************************************************/ //----------------------------------------------------------------------------- -#define DEFAULT_LOCAL_PORT_RAL "1235" -#define DEFAULT_REMOTE_PORT_MIHF "1025" -#define DEFAULT_IP_ADDRESS_MIHF "127.0.0.1" -#define DEFAULT_IP_ADDRESS_RAL "127.0.0.1" -#define DEFAULT_LINK_ID "link" -#define DEFAULT_MIHF_ID "mihf1" -#define DEFAULT_ADDRESS_3GPP "0335060080149150" +#define ENB_DEFAULT_LOCAL_PORT_RAL "1235" +#define ENB_DEFAULT_REMOTE_PORT_MIHF "1025" +#define ENB_DEFAULT_IP_ADDRESS_MIHF "127.0.0.1" +#define ENB_DEFAULT_IP_ADDRESS_RAL "127.0.0.1" +#define ENB_DEFAULT_LINK_ID_RAL "enb_lte_link" +#define ENB_DEFAULT_LINK_ADDRESS_RAL "060080149150" +#define ENB_DEFAULT_MIHF_ID "mihf_enb" +#define ENB_DEFAULT_ADDRESS_3GPP "0335060080149150" -#define DEFAULT_PLMN "208020" -#define DEFAULT_MCC "208" // France -#define DEFAULT_MNC "020" // Bouygues Telecom - -//----------------------------------------------------------------------------- -#define MIH_C_RADIO_POLLING_INTERVAL_MICRO_SECONDS 50000 -#define MIH_C_RADIO_POLLING_INTERVAL_SECONDS 0 - //----------------------------------------------------------------------------- // Constants for scenario #define PREDEFINED_MIH_NETWORK_ID "eurecom" @@ -54,8 +47,4 @@ #define PREDEFINED_CLASSES_SERVICE_SUPPORTED 2 #define PREDEFINED_QUEUES_SUPPORTED 2 -#define PREDEFINED_LINK_DETECTED_INDICATION_SIG_STRENGTH 5 -#define PREDEFINED_LINK_DETECTED_INDICATION_SINR 45 -#define PREDEFINED_LINK_DETECTED_INDICATION_LINK_DATA_RATE 1000 - #endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h new file mode 100755 index 0000000000..e68122ac59 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h @@ -0,0 +1,216 @@ +/******************************************************************************* + * + * Eurecom OpenAirInterface 3 + * Copyright(c) 2012 Eurecom + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information + * Openair Admin: openair_admin@eurecom.fr + * Openair Tech : openair_tech@eurecom.fr + * Forums : http://forums.eurecom.fsr/openairinterface + * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France + * + *******************************************************************************/ +/*! \file lteRALenb_main.h + * \brief + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \date 2012 + * \version + * \note + * \bug + * \warning + */ + +#ifndef __LTE_RAL_ENB_MAIN_H__ +#define __LTE_RAL_ENB_MAIN_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_ENB_MAIN_C +# define private_lteralenb_main(x) x +# define protected_lteralenb_main(x) x +# define public_lteralenb_main(x) x +# else +# ifdef LTE_RAL_ENB +# define private_lteralenb_main(x) +# define protected_lteralenb_main(x) extern x +# define public_lteralenb_main(x) extern x +# else +# define private_lteralenb_main(x) +# define protected_lteralenb_main(x) +# define public_lteralenb_main(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALenb.h" +#include "commonDef.h" +#include "collection/hashtable/hashtable.h" +public_lteralenb_main(char* g_conf_enb_ral_listening_port;) +public_lteralenb_main(char* g_conf_enb_ral_ip_address;) +public_lteralenb_main(char* g_conf_enb_ral_link_id;) +public_lteralenb_main(char* g_conf_enb_ral_link_address;) +public_lteralenb_main(char* g_conf_enb_mihf_remote_port;) +public_lteralenb_main(char* g_conf_enb_mihf_ip_address;) +public_lteralenb_main(char* g_conf_enb_mihf_id;) + +/* + * Radio Bearer data + */ +typedef struct ral_lte_channel { + u32 cnx_id; + u8 multicast; +// MIHF parameters ix=0 UPLINK, ix=1 DOWNLINK + u16 flowId[2]; + u16 classId[2]; + float resBitrate[2]; + float meanBitrate[2]; + float bktDepth[2]; + float pkBitrate[2]; + float MTU[2]; + +#if ! defined(ENABLE_USE_MME) + //IP driver parameters + u16 rbId; + u16 RadioQoSclass; + u16 dscpUL; + u16 dscpDL; + u16 nas_state; + u16 status; +#endif +}ral_lte_channel_t; + +/* + * Mobile Terminal data + */ +typedef struct ral_lte_mt_s { + /* The identifier of the link that is associated with a PoA */ + MIH_C_LINK_TUPLE_ID_T ltid; + u8 ipv6_addr[16]; + u32 ipv6_l2id[2]; + u32 ue_id; + struct ral_lte_channel radio_channel[RAL_MAX_RB]; + int num_rbs; + int num_class; + int nas_state; + int mt_state; +}ral_lte_mt_t; + + +/* + * Multicast data // TEMP MW A supprimer!!!! + */ +typedef struct ral_lte_mcast_s { + /* The identifier of the multicast link that is associated with a PoA */ + MIH_C_LINK_TUPLE_ID_T ltid; + struct ral_lte_channel radio_channel; + u8 mc_group_addr[16]; +}ral_lte_mcast_t; + +/* + * RAL LTE internal data + */ + +typedef struct lte_ral_enb_object { + //------------------------ + // CONFIG PARAMETERS + //------------------------ + char* ral_listening_port; + char* ral_ip_address; + char* ral_link_address; + char* mihf_remote_port; + char* mihf_ip_address; + char* link_id; + char* mihf_id; + MIH_C_LINK_MIHCAP_FLAG_T link_mihcap_flag; // hardcoded parameters + MIH_C_NET_CAPS_T net_caps;// hardcoded parameters + + // provided by RRC with RRC_RAL_SYSTEM_CONFIGURATION_IND message + plmn_t plmn_id; + unsigned int cell_id:28; + + + int num_connected_mts; + + u8 pending_req_flag; + u8 pending_req_mt_ix; + u8 pending_req_ch_ix; + u8 pending_req_multicast; +// u16 pending_req_transaction_id; +// u8 pending_req_status; + MIH_C_FLOW_ID_T pending_req_fid; + + ral_lte_mt_t pending_mt; + int pending_mt_timer; + int pending_mt_flag; + + ral_lte_mt_t mt[RAL_MAX_MT]; + ral_lte_mcast_t mcast; + + // measurements for MEDIEVAL project + //MIH_C_TIMER_INTERVAL_T measurement_timer_interval; // This timer value (ms) is used to set the interval between + // periodic reports. Valid Range: 0..65535 + //long measurement_timer_id; + + //u16 num_UEs; + //u32 rlcBufferOccupancy[RAL_MAX_MT]; + //u32 scheduledPRB[RAL_MAX_MT]; + //u32 totalDataVolume[RAL_MAX_MT]; + //u32 totalNumPRBs; + + + //int congestion_flag; + //int congestion_threshold; + //int measures_triggered_flag; + //int requested_period; + + // MIH-INTERFACE data + int mih_sock_desc; + MIH_C_LINK_AC_TYPE_LIST_T mih_supported_link_action_list; + MIH_C_LINK_EVENT_LIST_T mih_supported_link_event_list; + MIH_C_LINK_CMD_LIST_T mih_supported_link_command_list; + MIH_C_LINK_EVENT_LIST_T mih_subscribe_req_event_list; + + //LIST(MIH_C_LINK_CFG_PARAM, mih_link_cfg_param_thresholds); + // to tell what are the configured thresholds in mih_link_cfg_param_thresholds_list + //MIH_C_BOOLEAN_T active_mih_link_cfg_param_threshold[MIH_C_LINK_CFG_PARAM_LIST_LENGTH]; + + + MIH_C_LINK_AC_TYPE_T pending_req_action; + MIH_C_STATUS_T pending_req_status; + MIH_C_LINK_AC_RESULT_T pending_req_ac_result; + MIH_C_TRANSACTION_ID_T pending_req_transaction_id; + + + hash_table_t *ue_htbl; + + MIH_C_TRANSACTION_ID_T transaction_id; + + char buffer[800]; +} lte_ral_enb_object_t; + + + +/* RAL LTE internal data */ +protected_lteralenb_main(lte_ral_enb_object_t g_enb_ral_obj[MAX_MODULES];) +private_lteralenb_main(hash_table_t *g_enb_ral_fd2instance;) + +private_lteralenb_main(void eRAL_get_IPv6_addr (const char* if_name);) +public_lteralenb_main( void eRAL_init_default_values (void);) +private_lteralenb_main(int eRAL_initialize (void);) +private_lteralenb_main(void eRAL_process_file_descriptors(struct epoll_event *events, int nb_events);) +public_lteralenb_main( void* eRAL_task (void *args_p);) + +#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_mih_msg.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_mih_msg.h index fccb4bd5be..5266f64f84 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_mih_msg.h +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_mih_msg.h @@ -26,9 +26,9 @@ * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France * *******************************************************************************/ -/*! \file eRALlte_mih_msg.h +/*! \file lteRALenb_mih_msg.h * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle * \date 2012 * \version * \note @@ -36,10 +36,26 @@ * \warning */ -#ifndef __RAL_LTE_MIH_MSG_H__ -#define __RAL_LTE_MIH_MSG_H__ - -#include <sys/types.h> +#ifndef __LTE_RAL_ENB_MIH_MSG_H__ +#define __LTE_RAL_ENB_MIH_MSG_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_ENB_MIH_MSG_C +# define private_lteralenb_mih_msg(x) x +# define protected_lteralenb_mih_msg(x) x +# define public_lteralenb_mih_msg(x) x +# else +# ifdef LTE_RAL_ENB +# define private_lteralenb_mih_msg(x) +# define protected_lteralenb_mih_msg(x) extern x +# define public_lteralenb_mih_msg(x) extern x +# else +# define private_lteralenb_mih_msg(x) +# define protected_lteralenb_mih_msg(x) +# define public_lteralenb_mih_msg(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALenb.h" #include "MIH_C_Types.h" #include "MIH_C_header_codec.h" @@ -49,24 +65,15 @@ /******************** G L O B A L V A R I A B L E S ********************/ /****************************************************************************/ -char* g_mihf_ip_address; -char* g_mihf_remote_port; -int g_sockd_mihf; - -char* g_ral_ip_address; -char* g_ral_listening_port_for_mihf; - -char* g_link_id; -char* g_mihf_id; /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -int eRALlte_mihf_connect(void); - -int eRALlte_mih_link_process_message(void); +protected_lteralenb_mih_msg(int eRAL_mihf_connect(ral_enb_instance_t instanceP);) +protected_lteralenb_mih_msg(int eRAL_mih_link_process_message(ral_enb_instance_t instanceP);) +private_lteralenb_mih_msg(void eRAL_print_buffer(const u_int8_t * bufferP, int lenP);) /* * -------------------------------------------------------------------------- * MIH service management messages @@ -74,27 +81,31 @@ int eRALlte_mih_link_process_message(void); */ /* MIH_C_MESSAGE_LINK_REGISTER_INDICATION_ID */ -void eRALlte_send_link_register_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP); +protected_lteralenb_mih_msg(void eRAL_send_link_register_indication(\ + ral_enb_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP);) /* MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM_ID */ -void eRALlte_send_capability_discover_confirm( - MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *link_evt_listP, - MIH_C_LINK_CMD_LIST_T *link_cmd_listP); +private_lteralenb_mih_msg(void eRAL_send_capability_discover_confirm(\ + ral_enb_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *tidP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_EVENT_LIST_T *link_evt_listP,\ + MIH_C_LINK_CMD_LIST_T *link_cmd_listP);) /* MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_CONFIRM_ID */ -void eRALlte_send_event_subscribe_confirm( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *link_event_listP); +protected_lteralenb_mih_msg(void eRAL_send_event_subscribe_confirm(\ + ral_enb_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_EVENT_LIST_T *link_event_listP);) /* MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_CONFIRM_ID */ -void eRALlte_send_event_unsubscribe_confirm( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *link_event_listP); +protected_lteralenb_mih_msg(void eRAL_send_event_unsubscribe_confirm(\ + ral_enb_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_EVENT_LIST_T *link_event_listP);) /* * -------------------------------------------------------------------------- @@ -103,38 +114,43 @@ void eRALlte_send_event_unsubscribe_confirm( */ /* MIH_C_MESSAGE_LINK_DETECTED_INDICATION_ID */ -void eRALlte_send_link_detected_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_DET_INFO_T *link_detected_infoP); +protected_lteralenb_mih_msg(void eRAL_send_link_detected_indication(\ + ral_enb_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_LINK_DET_INFO_T *link_detected_infoP);) /* MIH_C_MESSAGE_LINK_UP_INDICATION_ID */ -void eRALlte_send_link_up_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_ADDR_T *new_access_routerP, - MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP, - MIH_C_IP_MOB_MGMT_T *mobility_mngtP); +protected_lteralenb_mih_msg(void eRAL_send_link_up_indication(\ + ral_enb_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ + MIH_C_LINK_ADDR_T *old_access_routerP,\ + MIH_C_LINK_ADDR_T *new_access_routerP,\ + MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP,\ + MIH_C_IP_MOB_MGMT_T *mobility_mngtP);) /* MIH_C_MESSAGE_LINK_DOWN_INDICATION_ID */ -void eRALlte_send_link_down_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_DN_REASON_T *reason_codeP); +private_lteralenb_mih_msg(void eRAL_send_link_down_indication(\ + ral_enb_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ + MIH_C_LINK_ADDR_T *old_access_routerP,\ + MIH_C_LINK_DN_REASON_T *reason_codeP);) /* MIH_C_MESSAGE_LINK_PARAMETERS_REPORT_INDICATION_ID */ -void eRALlte_send_link_parameters_report_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP); +protected_lteralenb_mih_msg(void eRAL_send_link_parameters_report_indication(\ + ral_enb_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ + MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP);) /* MIH_C_MESSAGE_LINK_GOING_DOWN_INDICATION_ID */ -void eRALlte_send_link_going_down_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_UNSIGNED_INT2_T *time_intervalP, - MIH_C_LINK_GD_REASON_T *link_going_down_reasonP); +private_lteralenb_mih_msg(void eRAL_send_link_going_down_indication(\ + ral_enb_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ + MIH_C_UNSIGNED_INT2_T *time_intervalP,\ + MIH_C_LINK_GD_REASON_T *link_going_down_reasonP);) /* MIH_C_MESSAGE_LINK_HANDOVER_IMMINENT_INDICATION_ID */ @@ -149,32 +165,37 @@ void eRALlte_send_link_going_down_indication( */ /* MIH_C_MESSAGE_LINK_GET_PARAMETERS_CONFIRM_ID */ -void eRALlte_send_get_parameters_confirm( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_PARAM_LIST_T *link_parameters_status_listP, - MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_listP, - MIH_C_LINK_DESC_RSP_LIST_T *link_descriptors_response_listP); +protected_lteralenb_mih_msg(void eRAL_send_get_parameters_confirm(\ + ral_enb_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_PARAM_LIST_T *link_parameters_status_listP,\ + MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_listP,\ + MIH_C_LINK_DESC_RSP_LIST_T *link_descriptors_response_listP);) /* MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_CONFIRM_ID */ -void eRALlte_send_configure_thresholds_confirm( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP); +protected_lteralenb_mih_msg(void eRAL_send_configure_thresholds_confirm(\ + ral_enb_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP);) /* MIH_C_MESSAGE_LINK_ACTION_CONFIRM_ID */ -void eRALlte_send_link_action_confirm( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP, - MIH_C_LINK_AC_RESULT_T *link_action_resultP); +protected_lteralenb_mih_msg(void eRAL_send_link_action_confirm(\ + ral_enb_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP,\ + MIH_C_LINK_AC_RESULT_T *link_action_resultP);) /* * -------------------------------------------------------------------------- * MIH information messages * -------------------------------------------------------------------------- */ - +protected_lteralenb_mih_msg(int eRAL_mihf_connect (ral_enb_instance_t instanceP);) +private_lteralenb_mih_msg( int eRAL_send_to_mih (ral_enb_instance_t instanceP, const u_int8_t *bufferP, int lenP);) +private_lteralenb_mih_msg( int eRAL_mih_link_msg_decode(ral_enb_instance_t instanceP, Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP);) /****************************************************************************/ #endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_parameters.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_parameters.h index 2a97956d40..637a5a3427 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_parameters.h +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_parameters.h @@ -26,9 +26,9 @@ * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France * *******************************************************************************/ -/*! \file eRALlte_parameters.h +/*! \file lteRALenb_parameters.h * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle * \date 2012 * \version * \note @@ -36,10 +36,26 @@ * \warning */ -#ifndef __RAL_LTE_PARAMETERS_H__ -#define __RAL_LTE_PARAMETERS_H__ - -#include "MIH_C.h" +#ifndef __LTE_RAL_ENB_PARAMETERS_H__ +#define __LTE_RAL_ENB_PARAMETERS_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_ENB_PARAMETERS_C +# define private_lteralenb_parameters(x) x +# define protected_lteralenb_parameters(x) x +# define public_lteralenb_parameters(x) x +# else +# ifdef LTE_RAL_ENB +# define private_lteralenb_parameters(x) +# define protected_lteralenb_parameters(x) extern x +# define public_lteralenb_parameters(x) extern x +# else +# define private_lteralenb_parameters(x) +# define protected_lteralenb_parameters(x) +# define public_lteralenb_parameters(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALenb.h" /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -57,6 +73,6 @@ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -void eRALlte_get_parameters_request(MIH_C_Message_Link_Get_Parameters_request_t* messageP); +void eRAL_get_parameters_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Get_Parameters_request_t* messageP); #endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_process.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_process.h new file mode 100755 index 0000000000..36b41a771f --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_process.h @@ -0,0 +1,76 @@ +/******************************************************************************* + * + * Eurecom OpenAirInterface 3 + * Copyright(c) 2012 Eurecom + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information + * Openair Admin: openair_admin@eurecom.fr + * Openair Tech : openair_tech@eurecom.fr + * Forums : http://forums.eurecom.fsr/openairinterface + * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France + * + *******************************************************************************/ +/*! \file lteRALenb_process.h + * \brief + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \date 2012 + * \version + * \note + * \bug + * \warning + */ + +#ifndef __LTE_RAL_ENB_PROCESS_H__ +#define __LTE_RAL_ENB_PROCESS_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_ENB_PROCESS_C +# define private_lteralenb_process(x) x +# define protected_lteralenb_process(x) x +# define public_lteralenb_process(x) x +# else +# ifdef LTE_RAL_ENB +# define private_lteralenb_process(x) +# define protected_lteralenb_process(x) extern x +# define public_lteralenb_process(x) extern x +# else +# define private_lteralenb_process(x) +# define protected_lteralenb_process(x) +# define public_lteralenb_process(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALenb.h" + +protected_lteralenb_process(int eRAL_process_find_channel (ral_enb_instance_t instanceP, unsigned int cnxid, int* mt_ix, int* ch_ix);) +protected_lteralenb_process(int eRAL_process_find_new_channel (ral_enb_instance_t instanceP, int mt_ix);) +private_lteralenb_process( void eRAL_process_clean_channel (struct ral_lte_channel* channel);) +protected_lteralenb_process(char* eRAL_process_mt_addr_to_string (const unsigned char* ip_addr);) +protected_lteralenb_process(void eRAL_process_mt_addr_to_l2id (const unsigned char* mt_addr, unsigned int* l2id);) +private_lteralenb_process( int eRAL_process_cmp_mt_addr (const char* mt_addr, const char* l2id);) +protected_lteralenb_process(int eRAL_process_find_mt_by_addr (ral_enb_instance_t instanceP, const char* mt_addr);) +private_lteralenb_process( void eRAL_process_verify_pending_mt_status(ral_enb_instance_t instanceP);) +protected_lteralenb_process(int eRAL_process_map_qos (ral_enb_instance_t instanceP, int mt_ix, int ch_ix);) +private_lteralenb_process( void eRAL_process_waiting_RB (ral_enb_instance_t instanceP, int mt_ix);) +private_lteralenb_process( void eRAL_process_clean_pending_mt (ral_enb_instance_t instanceP);) +protected_lteralenb_process(void RAL_printInitStatus (ral_enb_instance_t instanceP);) +private_lteralenb_process( void RAL_NAS_measures_polling (ral_enb_instance_t instanceP);) +private_lteralenb_process( void RAL_NAS_report_congestion (ral_enb_instance_t instanceP, int ix);) +private_lteralenb_process( void RAL_NAS_measures_analyze (ral_enb_instance_t instanceP);) +#endif + diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_proto.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_proto.h index 124abde57b..80ee73446a 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_proto.h +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_proto.h @@ -34,10 +34,11 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#ifndef __RAL_LTE_PROTO_H__ -#define __RAL_LTE_PROTO_H__ +#ifndef __LTE_RAL_ENB_PROTO_H__ +#define __LTE_RAL_ENB_PROTO_H__ -#include "lteRALenb_variables.h" +# error "Remove inclusion" +//#include "lteRALenb_variables.h" /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ @@ -45,34 +46,37 @@ * Functions defined in eRALlte_NAS.c */ -void eRALlte_NAS_get_MTs_list(void); -int eRALlte_NAS_update_MTs_list(void); +//void eRALlte_NAS_get_MTs_list(void); +//int eRALlte_NAS_update_MTs_list(void); -int eRALlte_NAS_process_message(void); -int eRALlte_NAS_send_rb_establish_request(int mt_ix, int ch_ix); -int eRALlte_NAS_send_rb_release_request(int mt_ix, int ch_ix); -int eRALlte_NAS_send_measure_request(void); +//int eRALlte_NAS_process_message(void); +//int eRALlte_NAS_send_rb_establish_request(int mt_ix, int ch_ix); +//int eRALlte_NAS_send_rb_release_request(int mt_ix, int ch_ix); +//int eRALlte_NAS_send_measure_request(void); -#ifdef RAL_REALTIME -int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix); -#endif +//#ifdef RAL_REALTIME +//int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix); +//#endif /* * Functions defined in eRALlte_process.c */ -int eRALlte_process_find_channel(unsigned int cnxid, int* mt_ix, int* ch_ix); -int eRALlte_process_find_new_channel(int mt_ix); -void eRALlte_process_clean_channel(struct ral_lte_channel* pchannel); -void eRALlte_process_verify_pending_mt_status(void); -char* eRALlte_process_mt_addr_to_string(const unsigned char* mt_addr); -void eRALlte_process_mt_addr_to_l2id(const unsigned char* mt_addr, unsigned int* l2id); -int eRALlte_process_cmp_mt_addr(const char* mt_addr, const char* l2id); -int eRALlte_process_find_mt_by_addr(const char* mt_addr); -int eRALlte_process_map_qos(int mt_ix, int ch_ix); +//int eRALlte_process_find_channel(unsigned int cnxid, int* mt_ix, int* ch_ix); +//int eRALlte_process_find_new_channel(int mt_ix); +//void eRALlte_process_clean_channel(struct ral_lte_channel* pchannel); +//void eRALlte_process_verify_pending_mt_status(void); +//char* eRALlte_process_mt_addr_to_string(const unsigned char* mt_addr); +//void eRALlte_process_mt_addr_to_l2id(const unsigned char* mt_addr, unsigned int* l2id); +//int eRALlte_process_cmp_mt_addr(const char* mt_addr, const char* l2id); +//int eRALlte_process_find_mt_by_addr(const char* mt_addr); +//int eRALlte_process_map_qos(int mt_ix, int ch_ix); // MW Added -void RAL_printInitStatus(void); -void RAL_NAS_measures_polling(void); -void RAL_NAS_measures_analyze(void); -void RAL_NAS_report_congestion(int ix); +//void RAL_printInitStatus(void); +//void RAL_NAS_measures_polling(void); +//void RAL_NAS_measures_analyze(void); +//void RAL_NAS_report_congestion(int ix); + +//void* ral_enb_task(void *args_p); + #endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_rrc_msg.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_rrc_msg.h new file mode 100755 index 0000000000..725d6b08d7 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_rrc_msg.h @@ -0,0 +1,69 @@ +/******************************************************************************* + * + * Eurecom OpenAirInterface 3 + * Copyright(c) 2012 Eurecom + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information + * Openair Admin: openair_admin@eurecom.fr + * Openair Tech : openair_tech@eurecom.fr + * Forums : http://forums.eurecom.fsr/openairinterface + * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France + * + *******************************************************************************/ +/*! \file lteRALenb_rrc_msg.h + * \brief + * \author GAUTHIER Lionel + * \date 2013 + * \version + * \note + * \bug + * \warning + */ + +#ifndef __LTE_RAL_ENB_RRC_MSG_H__ +#define __LTE_RAL_ENB_RRC_MSG_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_ENB_RRC_MSG_C +# define private_lteralenb_rrc_msg(x) x +# define protected_lteralenb_rrc_msg(x) x +# define public_lteralenb_rrc_msg(x) x +# else +# ifdef LTE_RAL_ENB +# define private_lteralenb_rrc_msg(x) +# define protected_lteralenb_rrc_msg(x) extern x +# define public_lteralenb_rrc_msg(x) extern x +# else +# define private_lteralenb_rrc_msg(x) +# define protected_lteralenb_rrc_msg(x) +# define public_lteralenb_rrc_msg(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALenb.h" +#include "intertask_interface.h" + +protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_system_configuration_indication (instance_t instance, MessageDef *msg_p);) +protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_connection_establishment_indication (instance_t instance, MessageDef *msg_p);) +protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_connection_reestablishment_indication (instance_t instance, MessageDef *msg_p);) +protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_connection_reconfiguration_indication (instance_t instance, MessageDef *msg_p);) +protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_measurement_report_indication (instance_t instance, MessageDef *msg_p);) +protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_connection_release_indication (instance_t instance, MessageDef *msg_p);) + + +#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_subscribe.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_subscribe.h index 47a55d9289..415dc2cad5 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_subscribe.h +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_subscribe.h @@ -26,9 +26,9 @@ * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France * *******************************************************************************/ -/*! \file eRALlte_subscribe.h +/*! \file lteRALenb_subscribe.h * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle * \date 2012 * \version * \note @@ -36,10 +36,26 @@ * \warning */ -#ifndef __RAL_LTE_SUBSCRIBE_H__ -#define __RAL_LTE_SUBSCRIBE_H__ - -#include "MIH_C.h" +#ifndef __LTE_RAL_ENB_SUBSCRIBE_H__ +#define __LTE_RAL_ENB_SUBSCRIBE_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_ENB_PROCESS_C +# define private_lteralenb_subscribe(x) x +# define protected_lteralenb_subscribe(x) x +# define public_lteralenb_subscribe(x) x +# else +# ifdef LTE_RAL_ENB +# define private_lteralenb_subscribe(x) +# define protected_lteralenb_subscribe(x) extern x +# define public_lteralenb_subscribe(x) extern x +# else +# define private_lteralenb_subscribe(x) +# define protected_lteralenb_subscribe(x) +# define public_lteralenb_subscribe(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALenb.h" /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -57,8 +73,8 @@ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -void eRALlte_subscribe_request(MIH_C_Message_Link_Event_Subscribe_request_t* msgP); +protected_lteralenb_subscribe(void eRAL_subscribe_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Event_Subscribe_request_t* msgP);) -void eRALlte_unsubscribe_request(MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP); +protected_lteralenb_subscribe(void eRAL_unsubscribe_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP);) #endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_thresholds.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_thresholds.h index 74075b585f..0c48c13614 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_thresholds.h +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_thresholds.h @@ -26,9 +26,9 @@ * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France * *******************************************************************************/ -/*! \file eRALlte_thresholds.h +/*! \file lteRALenb_thresholds.h * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle * \date 2012 * \version * \note @@ -36,10 +36,27 @@ * \warning */ -#ifndef __RAL_LTE_THRESHOLDS_H__ -#define __RAL_LTE_THRESHOLDS_H__ - -#include "MIH_C.h" +#ifndef __LTE_RAL_ENB_THRESHOLDS_H__ +#define __LTE_RAL_ENB_THRESHOLDS_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_ENB_PROCESS_C +# define private_lteralenb_thresholds(x) x +# define protected_lteralenb_thresholds(x) x +# define public_lteralenb_thresholds(x) x +# else +# ifdef LTE_RAL_ENB +# define private_lteralenb_thresholds(x) +# define protected_lteralenb_thresholds(x) extern x +# define public_lteralenb_thresholds(x) extern x +# else +# define private_lteralenb_thresholds(x) +# define protected_lteralenb_thresholds(x) +# define public_lteralenb_thresholds(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALenb.h" +#include "intertask_interface.h" /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -59,6 +76,7 @@ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -void eRALlte_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* messageP); +protected_lteralenb_thresholds(void eRAL_configure_thresholds_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Configure_Thresholds_request_t* messageP);) +protected_lteralenb_thresholds(void eRAL_rx_rrc_ral_configure_threshold_conf(instance_t instance, MessageDef *msg_p);) #endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_variables.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_variables.h index 646511e18f..45de279fb9 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_variables.h +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_variables.h @@ -18,8 +18,8 @@ * the network side and the access router dummy configuration. * *****************************************************************************/ -#ifndef __RAL_LTE_VAR_H__ -#define __RAL_LTE_VAR_H__ +#ifndef __LTE_RAL_ENB_VARIABLES_H__ +#define __LTE_RAL_ENB_VARIABLES_H__ // Define working mode : Dummy or Realtime //#define RAL_DUMMY @@ -31,14 +31,7 @@ //flag to reduce the logs #define DEBUG_RAL_DETAILS -#include "rrc_d_types.h" -#ifdef RAL_DUMMY -#include "nas_rg_netlink.h" -#endif -#include "MIH_C_Types.h" -#include "MIH_C_header_codec.h" -#include "MIH_C_Link_Primitives.h" /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -48,16 +41,16 @@ /*Arguments ioctl command */ //arg[0] -#define IO_OBJ_STATS 0 -#define IO_OBJ_CNX 1 -#define IO_OBJ_RB 2 -#define IO_OBJ_MEAS 3 -#define IO_OBJ_MC 4 // multicast +//LG#define IO_OBJ_STATS 0 +//LG#define IO_OBJ_CNX 1 +//LG#define IO_OBJ_RB 2 +//LG#define IO_OBJ_MEAS 3 +//LG#define IO_OBJ_MC 4 // multicast //arg[1] -#define IO_CMD_ADD 0 -#define IO_CMD_DEL 1 -#define IO_CMD_LIST 2 +//LG#define IO_CMD_ADD 0 +//LG#define IO_CMD_DEL 1 +//LG#define IO_CMD_LIST 2 #define NAS_CONNECTED 1 //same as NAS interface #define NAS_DISCONNECTED 0 @@ -139,6 +132,8 @@ const char DestIpv6Addr[ADDR_MAX][16] = { // DUMMY extern const char DestIpv6Addr[ADDR_MAX][16]; #endif +typedef int ral_enb_instance_t; + /****************************************************************************/ /************************ G L O B A L T Y P E S ************************/ /****************************************************************************/ @@ -146,117 +141,14 @@ extern const char DestIpv6Addr[ADDR_MAX][16]; /* List of link action types */ TYPEDEF_BITMAP8(MIH_C_LINK_AC_TYPE_LIST); -/* - * Radio Bearer data - */ -struct ral_lte_channel { - u32 cnx_id; - u8 multicast; -// MIHF parameters ix=0 UPLINK, ix=1 DOWNLINK - u16 flowId[2]; - u16 classId[2]; - float resBitrate[2]; - float meanBitrate[2]; - float bktDepth[2]; - float pkBitrate[2]; - float MTU[2]; -//NAS driver parameters - u16 rbId; - u16 RadioQoSclass; - u16 dscpUL; - u16 dscpDL; - u16 nas_state; - u16 status; -}; - -/* - * Mobile Terminal data - */ -struct ral_lte_mt { - /* The identifier of the link that is associated with a PoA */ - MIH_C_LINK_TUPLE_ID_T ltid; - u8 ipv6_addr[16]; - u32 ipv6_l2id[2]; - u32 ue_id; - struct ral_lte_channel radio_channel[RAL_MAX_RB]; - int num_rbs; - int num_class; - int nas_state; - int mt_state; -}; -/* - * Multicast data // TEMP MW A supprimer!!!! - */ -struct ral_lte_mcast { - /* The identifier of the multicast link that is associated with a PoA */ - MIH_C_LINK_TUPLE_ID_T ltid; - struct ral_lte_channel radio_channel; - u8 mc_group_addr[16]; -}; -/* - * RAL LTE internal data - */ -struct ral_lte_priv { - - u8 plmn[3]; - int curr_cellId; - int num_connected_mts; - - u8 pending_req_flag; - u8 pending_req_mt_ix; - u8 pending_req_ch_ix; - u8 pending_req_multicast; -// u16 pending_req_transaction_id; -// u8 pending_req_status; - MIH_C_FLOW_ID_T pending_req_fid; - - struct ral_lte_mt pending_mt; - int pending_mt_timer; - int pending_mt_flag; - - struct ral_lte_mt mt[RAL_MAX_MT]; - struct ral_lte_mcast mcast; -// struct tqal_ar_mobile mt[TQAL_MAX_MTs]; -// struct tqal_ar_channel multicast_channel; -// u8 mc_group_addr[16]; - //Added for demo 3 - MW - int meas_polling_interval; - int meas_polling_counter; - u16 num_UEs; - u32 rlcBufferOccupancy[RAL_MAX_MT]; - u32 scheduledPRB[RAL_MAX_MT]; - u32 totalDataVolume[RAL_MAX_MT]; - u32 totalNumPRBs; - int congestion_flag; - int congestion_threshold; - int measures_triggered_flag; - int requested_period; - // MIH-INTERFACE data - MIH_C_LINK_AC_TYPE_LIST_T mih_supported_link_action_list; - MIH_C_LINK_EVENT_LIST_T mih_supported_link_event_list; - MIH_C_LINK_CMD_LIST_T mih_supported_link_command_list; - MIH_C_LINK_EVENT_LIST_T mih_subscribe_req_event_list; - - LIST(MIH_C_LINK_CFG_PARAM, mih_link_cfg_param_thresholds); - // to tell what are the configured thresholds in mih_link_cfg_param_thresholds_list - MIH_C_BOOLEAN_T active_mih_link_cfg_param_threshold[MIH_C_LINK_CFG_PARAM_LIST_LENGTH]; - - - MIH_C_LINK_AC_TYPE_T pending_req_action; - MIH_C_STATUS_T pending_req_status; - MIH_C_LINK_AC_RESULT_T pending_req_ac_result; - MIH_C_TRANSACTION_ID_T pending_req_transaction_id; - - char buffer[800]; -}; /****************************************************************************/ /******************** G L O B A L V A R I A B L E S ********************/ /****************************************************************************/ -extern struct ral_lte_priv *ralpriv; +//extern struct ral_lte_priv *ralpriv; /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/rrc_d_types.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/rrc_d_types.h index 28726ceac2..a476381000 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/rrc_d_types.h +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/rrc_d_types.h @@ -9,9 +9,10 @@ #ifndef __RRC_DTYPES_H__ #define __RRC_DTYPES_H__ -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned int u32; +# error "Remove inclusion" +//typedef unsigned char u8; +//typedef unsigned short u16; +//typedef unsigned int u32; #endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/Makefile b/openair3/RAL-LTE/LTE_RAL_ENB/Makefile index 701be85593..a536f76b20 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/Makefile +++ b/openair3/RAL-LTE/LTE_RAL_ENB/Makefile @@ -27,14 +27,14 @@ CFLAGS += -I$(NAS_DIR) -I$(RRC_DIR) LDFLAGS = -L$(INTERFACE_DIR)/LIB -lmih_c-802.21 -lrt -ERAL_OBJS += $(SRC_DIR)/lteRALenb_main.o ERAL_OBJS += $(SRC_DIR)/lteRALenb_mih_msg.o +ERAL_OBJS += $(SRC_DIR)/lteRALenb_rrc_msg.o ERAL_OBJS += $(SRC_DIR)/lteRALenb_thresholds.o ERAL_OBJS += $(SRC_DIR)/lteRALenb_parameters.o ERAL_OBJS += $(SRC_DIR)/lteRALenb_action.o ERAL_OBJS += $(SRC_DIR)/lteRALenb_subscribe.o -ERAL_OBJS += $(SRC_DIR)/lteRALenb_ioctl.o ERAL_OBJS += $(SRC_DIR)/lteRALenb_process.o +ERAL_OBJS += $(SRC_DIR)/lteRALenb_main.o OBJS = $(ERAL_OBJS) diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_action.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_action.c index 2799349a8c..bcec754301 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_action.c +++ b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_action.c @@ -2,7 +2,7 @@ * Eurecom OpenAirInterface 3 * Copyright(c) 2012 Eurecom * - * Source eRALlte_action.c + * Source eRAL_action.c * * Version 0.1 * @@ -17,15 +17,12 @@ * Description * *****************************************************************************/ +#define LTE_RAL_ENB +#define LTE_RAL_ENB_ACTION_C #include <assert.h> +#include "lteRALenb.h" -#include "lteRALenb_action.h" - -#include "lteRALenb_mih_msg.h" -#include "lteRALenb_variables.h" -#include "lteRALenb_constants.h" -#include "lteRALenb_proto.h" /****************************************************************************/ /******************* G L O C A L D E F I N I T I O N S *****************/ @@ -38,65 +35,22 @@ static MIH_C_LINK_ACTION_T g_link_action; static const char* g_link_action_type_str[] = { - "MIH_C_LINK_AC_TYPE_NONE", - "MIH_C_LINK_AC_TYPE_LINK_DISCONNECT", - "MIH_C_LINK_AC_TYPE_LINK_LOW_POWER", - "MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN", - "MIH_C_LINK_AC_TYPE_LINK_POWER_UP", + "MIH_C_LINK_AC_TYPE_NONE", + "MIH_C_LINK_AC_TYPE_LINK_DISCONNECT", + "MIH_C_LINK_AC_TYPE_LINK_LOW_POWER", + "MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN", + "MIH_C_LINK_AC_TYPE_LINK_POWER_UP", #ifdef MIH_C_MEDIEVAL_EXTENSIONS - "MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR", - "MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES", - "MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES" + "MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR", + "MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES", + "MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES" #endif }; -static int _eRALlte_action_is_in_progress(MIH_C_STATUS_T* status, - MIH_C_LINK_AC_RESULT_T* ac_status, - MIH_C_LINK_AC_TYPE_T action); - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_flow_attr(void); -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_activate_resources(void); -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_deactivate_resources(void); - -/* - * --------------------------------------------------------------------------- - * Flow identifier management: - * Radio Bearer data flows are identified by a source address, a destination - * address and a port number for a particular IP transport protocol (UDP, - * TCP). A private data structure is used to map upper-layer flow identifiers - * to lower-layer RB channel identifiers. It is handled by private functions. - * --------------------------------------------------------------------------- - */ -/* Structure of the destination data flow */ -struct Data_flow { - unsigned char addr[16]; // IP address - unsigned int l2id[2]; // L2 identifier - unsigned int port; // IP port identifier - int proto; // IP protocol - int cnxid; // Data flow identifier -}; -typedef struct { - int n_flows; -#define ACTION_MAX_FLOW ((RAL_MAX_MT)*(RAL_MAX_RB)) - struct Data_flow flow [ACTION_MAX_FLOW]; - int flow_id [ACTION_MAX_FLOW]; //added TEMP MW 23/05/13 -} eRALlte_action_DataFlowList_t; - -static eRALlte_action_DataFlowList_t g_flows = {}; - -static int _eRALlte_action_set_channel_id (MIH_C_FLOW_ID_T* flowId, int cnxid); -static int _eRALlte_action_get_channel_id (MIH_C_FLOW_ID_T* flowId, int* cnxid); -static int _eRALlte_action_del_channel_id (int fix); -#endif // MIH_C_MEDIEVAL_EXTENSIONS - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ /**************************************************************************** ** ** - ** Name: eRALlte_action_request() ** + ** Name: eRAL_action_request() ** ** ** ** Description: Processes the Link_Action.request message and sends a ** ** Link_Action.confirm message to the MIHF. ** @@ -109,7 +63,7 @@ static int _eRALlte_action_del_channel_id (int fix); ** Others: g_link_action ** ** ** ***************************************************************************/ -void eRALlte_action_request(MIH_C_Message_Link_Action_request_t* msgP) +void eRAL_action_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Action_request_t* msgP) { MIH_C_STATUS_T status; MIH_C_LINK_AC_TYPE_T link_action_type; @@ -128,43 +82,43 @@ void eRALlte_action_request(MIH_C_Message_Link_Action_request_t* msgP) */ if (msgP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) { - /* - * Link scan operation request - Not supported by the network side: - * No measurements - */ - DEBUG(" ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN: REFUSED\n"); - link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - eRALlte_send_link_action_confirm(&msgP->header.transaction_id, - &status, - NULL, - &link_action_result); + /* + * Link scan operation request - Not supported by the network side: + * No measurements + */ + LOG_D(RAL_ENB, " ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN: REFUSED\n"); + link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; + eRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, + &status, + NULL, + &link_action_result); } if (msgP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN) { - /* - * Link resource retain operation request - Not supported by the - * network side. - */ - DEBUG(" ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN: REFUSED\n"); - link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - eRALlte_send_link_action_confirm(&msgP->header.transaction_id, - &status, - NULL, - &link_action_result); + /* + * Link resource retain operation request - Not supported by the + * network side. + */ + LOG_D(RAL_ENB, " ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN: REFUSED\n"); + link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; + eRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, + &status, + NULL, + &link_action_result); } if (msgP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ) { - /* - * Data forward operation request - Not supported by the network side. - */ - DEBUG(" ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ: REFUSED\n"); - link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - eRALlte_send_link_action_confirm(&msgP->header.transaction_id, - &status, - NULL, - &link_action_result); + /* + * Data forward operation request - Not supported by the network side. + */ + LOG_D(RAL_ENB, " ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ: REFUSED\n"); + link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; + eRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, + &status, + NULL, + &link_action_result); } /* @@ -173,108 +127,108 @@ void eRALlte_action_request(MIH_C_Message_Link_Action_request_t* msgP) * Requested actions that are not supported or currently in progress * are refused. */ - if (_eRALlte_action_is_in_progress(&status, - &link_action_result, - link_action_type)) + if (eRAL_action_is_in_progress(instanceP, &status, + &link_action_result, + link_action_type)) { - DEBUG(" Link action request %s is not supported or currently in progress\n", g_link_action_type_str[link_action_type]); + LOG_D(RAL_ENB, " Link action request %s is not supported or currently in progress\n", g_link_action_type_str[link_action_type]); } else { - DEBUG(" %s ACTION REQUESTED: %s\n", __FUNCTION__, g_link_action_type_str[link_action_type]); + LOG_D(RAL_ENB, " %s ACTION REQUESTED: %s\n", __FUNCTION__, g_link_action_type_str[link_action_type]); - switch (link_action_type) - { - case MIH_C_LINK_AC_TYPE_NONE: - DEBUG(" NO ACTION\n"); - break; + switch (link_action_type) + { + case MIH_C_LINK_AC_TYPE_NONE: + LOG_D(RAL_ENB, " NO ACTION\n"); + break; #ifdef MIH_C_MEDIEVAL_EXTENSIONS - case MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: - /* - * Provide the mark and multicast configuration to be set up - * for the data flow - */ - ralpriv->pending_req_ac_result = _eRALlte_action_link_flow_attr(); - link_action_done = 1; - break; - - case MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: - /* - * Configure and activate a data flow - */ - ralpriv->pending_req_ac_result = _eRALlte_action_link_activate_resources(); - link_action_done = 1; - break; - - case MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: - /* - * Deactivate a previously activated data flow - */ - ralpriv->pending_req_ac_result = _eRALlte_action_link_deactivate_resources(); - link_action_done = 1; - break; + case MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: + /* + * Provide the mark and multicast configuration to be set up + * for the data flow + */ + g_enb_ral_obj[instanceP].pending_req_ac_result = eRAL_action_link_flow_attr(instanceP); + link_action_done = 1; + break; + + case MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: + /* + * Configure and activate a data flow + */ + g_enb_ral_obj[instanceP].pending_req_ac_result = eRAL_action_link_activate_resources(instanceP); + link_action_done = 1; + break; + + case MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: + /* + * Deactivate a previously activated data flow + */ + g_enb_ral_obj[instanceP].pending_req_ac_result = eRAL_action_link_deactivate_resources(instanceP); + link_action_done = 1; + break; #endif // MIH_C_MEDIEVAL_EXTENSIONS - case MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: - /* - * Disconnect the link connection directly - */ - case MIH_C_LINK_AC_TYPE_LINK_LOW_POWER: - /* - * Cause the link to adjust its battery power level to be - * low power consumption - Not supported by the network side - */ - case MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN: - /* - * Cause the link to power down and turn off the radio - * - Not supported by the network side - */ - case MIH_C_LINK_AC_TYPE_LINK_POWER_UP: - /* - * Cause the link to power up and establish L2 connectivity. - * For UMTS link type, power up lower layers and establish - * PDP context - Not supported by the network side - */ - DEBUG(" REFUSED\n"); - link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - break; - - default: - ERR(" %s Invalid LinkAction.link_ac_type %d\n", - __FUNCTION__, link_action_type); - status = MIH_C_STATUS_UNSPECIFIED_FAILURE; - } + case MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: + /* + * Disconnect the link connection directly + */ + case MIH_C_LINK_AC_TYPE_LINK_LOW_POWER: + /* + * Cause the link to adjust its battery power level to be + * low power consumption - Not supported by the network side + */ + case MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN: + /* + * Cause the link to power down and turn off the radio + * - Not supported by the network side + */ + case MIH_C_LINK_AC_TYPE_LINK_POWER_UP: + /* + * Cause the link to power up and establish L2 connectivity. + * For UMTS link type, power up lower layers and establish + * PDP context - Not supported by the network side + */ + LOG_D(RAL_ENB, " REFUSED\n"); + link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; + break; + + default: + LOG_E(RAL_ENB, "%s Invalid LinkAction.link_ac_type %d\n", + __FUNCTION__, link_action_type); + status = MIH_C_STATUS_UNSPECIFIED_FAILURE; + } } /* Return link action confirmation to the MIH-F */ if (link_action_done) { - ralpriv->pending_req_transaction_id = msgP->header.transaction_id; - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - eRALlte_send_link_action_confirm(&ralpriv->pending_req_transaction_id, - &ralpriv->pending_req_status, - NULL, - &ralpriv->pending_req_ac_result); + g_enb_ral_obj[instanceP].pending_req_transaction_id = msgP->header.transaction_id; + g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_SUCCESS; + eRAL_send_link_action_confirm(instanceP, &g_enb_ral_obj[instanceP].pending_req_transaction_id, + &g_enb_ral_obj[instanceP].pending_req_status, + NULL, + &g_enb_ral_obj[instanceP].pending_req_ac_result); } else if (status == MIH_C_STATUS_SUCCESS) { - eRALlte_send_link_action_confirm(&msgP->header.transaction_id, - &status, - NULL, - &link_action_result); + eRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, + &status, + NULL, + &link_action_result); } else { - eRALlte_send_link_action_confirm(&msgP->header.transaction_id, - &status, - NULL, - NULL); + eRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, + &status, + NULL, + NULL); } - ralpriv->pending_req_action = 0; + g_enb_ral_obj[instanceP].pending_req_action = 0; } /**************************************************************************** ** ** - ** Name: eRALlte_action_save_flow_id() ** + ** Name: eRAL_action_save_flow_id() ** ** ** ** Description: Save connection identifier and data of the specified data ** ** flow into the list of active data flows. ** @@ -290,8 +244,8 @@ void eRALlte_action_request(MIH_C_Message_Link_Action_request_t* msgP) ** Others: None ** ** ** ***************************************************************************/ -extern int eRALlte_action_save_flow_id(MIH_C_FLOW_ID_T* flowId, int cnxid){ - return _eRALlte_action_set_channel_id(flowId, cnxid); +int eRAL_action_save_flow_id(ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int cnxid){ + return eRAL_action_set_channel_id(instanceP, flowId, cnxid); } /****************************************************************************/ @@ -299,7 +253,7 @@ extern int eRALlte_action_save_flow_id(MIH_C_FLOW_ID_T* flowId, int cnxid){ /****************************************************************************/ /**************************************************************************** - ** Name: eRALlte_action_set_channel_id() ** + ** Name: eRAL_action_set_channel_id() ** ** ** ** Description: Set the Connection identifier and store data of the ** ** specified data flow in the list of active data flows. ** @@ -310,7 +264,7 @@ extern int eRALlte_action_save_flow_id(MIH_C_FLOW_ID_T* flowId, int cnxid){ ** the list of active data flows. ** ** -1 if the list is full. ** ***************************************************************************/ -static int _eRALlte_action_set_channel_id (MIH_C_FLOW_ID_T* flowId, int cnxid){ +int eRAL_action_set_channel_id (ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int cnxid){ char addr[128]; //char port[8]; int f_ix; @@ -318,36 +272,37 @@ static int _eRALlte_action_set_channel_id (MIH_C_FLOW_ID_T* flowId, int cnxid){ assert(cnxid != 0); for (f_ix = 0; f_ix < ACTION_MAX_FLOW; f_ix++) { - if (g_flows.flow[f_ix].cnxid > 0) continue; - g_flows.flow[f_ix].cnxid = cnxid; - g_flows.flow_id[f_ix] = (int) flowId; - g_flows.n_flows += 1; + if (g_flows.flow[f_ix].cnxid > 0) continue; + g_flows.flow[f_ix].cnxid = cnxid; + g_flows.flow_id[f_ix] = (int)flowId; + g_flows.n_flows += 1; // Modified Michelle - memcpy((char*)&(DestIpv6Addr[0][16]), addr, 16); - eRALlte_process_mt_addr_to_l2id(&g_flows.flow[f_ix].addr[8], - &g_flows.flow[f_ix].l2id[0]); +#warning "TO DO DestIpv6Addr ?" + //memcpy((char*)&(DestIpv6Addr[0][16]), addr, 16); + eRAL_process_mt_addr_to_l2id(&g_flows.flow[f_ix].addr[8], + &g_flows.flow[f_ix].l2id[0]); -/* MIH_C_TRANSPORT_ADDR_VALUE2String(&flowId->dest_addr.ip_addr.address, addr); + /* MIH_C_TRANSPORT_ADDR_VALUE2String(&flowId->dest_addr.ip_addr.address, addr); memcpy((char*)&(g_flows.flow[f_ix].addr), addr, 16); - eRALlte_process_mt_addr_to_l2id(&g_flows.flow[f_ix].addr[8], + eRAL_process_mt_addr_to_l2id(&g_flows.flow[f_ix].addr[8], &g_flows.flow[f_ix].l2id[0]); MIH_C_PORT2String(&flowId->dest_addr.port, port); g_flows.flow[f_ix].port = strtol(port, (char**) NULL, 16); g_flows.flow[f_ix].proto = flowId->transport_protocol;*/ - return f_ix; + return f_ix; } return (-1); } /**************************************************************************** - ** Name: eRALlte_action_get_channel_id() ** + ** Name: eRAL_action_get_channel_id() ** ** ** ** Description: Returns the Connection identifier of the specified data ** ** flow. ** ** Inputs: flowId: The data flow identifier ** ** Others: None ** - ** Outputs: cnxid: The connection identifier allocated to the ** + ** Outputs: cnxid: The connection identifier allocated to the ** ** specified data flow. ** ** Return: The index of the specified data flow in ** ** the list of active data flows. ** @@ -355,30 +310,30 @@ static int _eRALlte_action_set_channel_id (MIH_C_FLOW_ID_T* flowId, int cnxid){ ** for the specified data flow. ** ** Others: None ** ***************************************************************************/ -static int _eRALlte_action_get_channel_id (MIH_C_FLOW_ID_T* flowId, int* cnxid){ +int eRAL_action_get_channel_id (ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int* cnxid){ //char addr[128]; //char port[8]; //unsigned int dp; int f_ix; -// MIH_C_TRANSPORT_ADDR_VALUE2String(&flowId->dest_addr.ip_addr.address, addr); -// MIH_C_PORT2String(&flowId->dest_addr.port, port); -// dp = strtol(port, (char**) NULL, 16); + // MIH_C_TRANSPORT_ADDR_VALUE2String(&flowId->dest_addr.ip_addr.address, addr); + // MIH_C_PORT2String(&flowId->dest_addr.port, port); + // dp = strtol(port, (char**) NULL, 16); for (f_ix = 0; f_ix < ACTION_MAX_FLOW; f_ix++) { -/* if (!eRALlte_process_cmp_mt_addr((const char*)addr, (const char*)g_flows.flow[f_ix].l2id)) continue; + /* if (!eRAL_process_cmp_mt_addr((const char*)addr, (const char*)g_flows.flow[f_ix].l2id)) continue; if (g_flows.flow[f_ix].port != dp) continue; if (g_flows.flow[f_ix].proto != flowId->transport_protocol) continue;*/ if (g_flows.flow_id[f_ix] != *flowId) continue; - *cnxid = g_flows.flow[f_ix].cnxid; - return f_ix; + *cnxid = g_flows.flow[f_ix].cnxid; + return f_ix; } return (-1); } /**************************************************************************** ** ** - ** Name: eRALlte_action_del_channel_id() ** + ** Name: eRAL_action_del_channel_id() ** ** ** ** Description: Remove the data flow stored at the specified index in the ** ** list of active data flows. ** @@ -394,19 +349,19 @@ static int _eRALlte_action_get_channel_id (MIH_C_FLOW_ID_T* flowId, int* cnxid){ ** Others: None ** ** ** ***************************************************************************/ -static int _eRALlte_action_del_channel_id (int fix) +int eRAL_action_del_channel_id (ral_enb_instance_t instanceP, int fix) { if (fix < ACTION_MAX_FLOW) { - g_flows.n_flows -= 1; - memset (&g_flows.flow[fix], 0, sizeof (struct Data_flow)); - return g_flows.n_flows; + g_flows.n_flows -= 1; + memset (&g_flows.flow[fix], 0, sizeof (struct Data_flow)); + return g_flows.n_flows; } return (-1); } /**************************************************************************** ** ** - ** Name: _eRALlte_action_is_in_progress() ** + ** Name: eRAL_action_is_in_progress() ** ** ** ** Description: Checks if an action request is supported and whether it ** ** is currently in progress. ** @@ -422,32 +377,32 @@ static int _eRALlte_action_del_channel_id (int fix) ** Others: None ** ** ** ***************************************************************************/ -static int _eRALlte_action_is_in_progress(MIH_C_STATUS_T* status, - MIH_C_LINK_AC_RESULT_T* ac_status, - MIH_C_LINK_AC_TYPE_T action) +int eRAL_action_is_in_progress(ral_enb_instance_t instanceP, MIH_C_STATUS_T* status, + MIH_C_LINK_AC_RESULT_T* ac_status, + MIH_C_LINK_AC_TYPE_T action) { /* Check whether the action link command is supported */ - if (!(ralpriv->mih_supported_link_command_list & MIH_C_BIT_LINK_ACTION)) { - *status = MIH_C_STATUS_REJECTED; - return 1; + if (!(g_enb_ral_obj[instanceP].mih_supported_link_command_list & MIH_C_BIT_LINK_ACTION)) { + *status = MIH_C_STATUS_REJECTED; + return 1; } *status = MIH_C_STATUS_SUCCESS; /* Check whether the action request is supported */ - if (ralpriv->mih_supported_link_action_list & (1 << action)) + if (g_enb_ral_obj[instanceP].mih_supported_link_action_list & (1 << action)) { - /* Check whether another action request is currently in progress */ - if ((ralpriv->pending_req_action) && (ralpriv->pending_req_action != action)) - { - /* Another action request is in progress: - * Do not process new request before completion of this one */ - *ac_status = MIH_C_LINK_AC_RESULT_REFUSED; - return 1; - } + /* Check whether another action request is currently in progress */ + if ((g_enb_ral_obj[instanceP].pending_req_action) && (g_enb_ral_obj[instanceP].pending_req_action != action)) + { + /* Another action request is in progress: + * Do not process new request before completion of this one */ + *ac_status = MIH_C_LINK_AC_RESULT_REFUSED; + return 1; + } - /* The action request is supported and no other request is in progress: - * Go ahead and process the request */ - return 0; + /* The action request is supported and no other request is in progress: + * Go ahead and process the request */ + return 0; } /* The link action request is not supported */ @@ -458,7 +413,7 @@ static int _eRALlte_action_is_in_progress(MIH_C_STATUS_T* status, #ifdef MIH_C_MEDIEVAL_EXTENSIONS /**************************************************************************** ** ** - ** Name: _eRALlte_action_link_flow_attr() ** + ** Name: eRAL_action_link_flow_attr() ** ** ** ** Description: Processes the link flow attribut action request. ** ** ** @@ -471,7 +426,7 @@ static int _eRALlte_action_is_in_progress(MIH_C_STATUS_T* status, ** Others: ralpriv ** ** ** ***************************************************************************/ -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_flow_attr(void) +MIH_C_LINK_AC_RESULT_T eRAL_action_link_flow_attr(ral_enb_instance_t instanceP) //TODO { MIH_C_FLOW_ATTRIBUTE_T *flow = &g_link_action.link_ac_param._union.flow_attribute; @@ -479,42 +434,42 @@ static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_flow_attr(void) int cnxid; /* Get the connection identifier */ - f_ix = _eRALlte_action_get_channel_id(&flow->flow_id, &cnxid); + f_ix = eRAL_action_get_channel_id(instanceP, &flow->flow_id, &cnxid); if (f_ix < 0) { - DEBUG(" No RB allocated for this data flow\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; + LOG_D(RAL_ENB, " No RB allocated for this data flow\n"); + return MIH_C_LINK_AC_RESULT_REFUSED; } /* Get MT and RB channel identifiers */ - if (eRALlte_process_find_channel(cnxid, &mt_ix, &ch_ix) != 0) { - /* Unicast data flow */ - DEBUG (" %s: Unicast MT's address = %s\n", __FUNCTION__, - eRALlte_process_mt_addr_to_string(ralpriv->mt[mt_ix].ipv6_addr)); + if (eRAL_process_find_channel(instanceP, cnxid, &mt_ix, &ch_ix) != 0) { + /* Unicast data flow */ + LOG_D(RAL_ENB, " %s: Unicast MT's address = %s\n", __FUNCTION__, + eRAL_process_mt_addr_to_string(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_addr)); } else { - /* Multicast data flow */ - DEBUG (" %s: Multicast MT's address = %s\n", __FUNCTION__, - eRALlte_process_mt_addr_to_string(ralpriv->mcast.mc_group_addr)); + /* Multicast data flow */ + LOG_D(RAL_ENB, " %s: Multicast MT's address = %s\n", __FUNCTION__, + eRAL_process_mt_addr_to_string(g_enb_ral_obj[instanceP].mcast.mc_group_addr)); } if (flow->choice_mark_qos) { - DEBUG(" Mark QoS enabled\n"); - //TODO ??? + LOG_D(RAL_ENB, " Mark QoS enabled\n"); + //TODO ??? } if (flow->choice_mark_drop_eligibility) { - DEBUG(" Mark drop eligibility enabled\n"); - //TODO ??? + LOG_D(RAL_ENB, " Mark drop eligibility enabled\n"); + //TODO ??? } /* Link action successfully processed */ - ralpriv->pending_req_action = MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR; + g_enb_ral_obj[instanceP].pending_req_action = MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR; return MIH_C_LINK_AC_RESULT_SUCCESS; } /**************************************************************************** ** ** - ** Name: _eRALlte_action_link_activate_resources() ** + ** Name: eRAL_action_link_activate_resources() ** ** ** ** Description: Processes the link activate resource action request. ** ** ** @@ -527,8 +482,8 @@ static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_flow_attr(void) ** Others: ralpriv ** ** ** ***************************************************************************/ -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_activate_resources(void){ -//--------------------------------------------------------------------------- +MIH_C_LINK_AC_RESULT_T eRAL_action_link_activate_resources(ral_enb_instance_t instanceP){ + //--------------------------------------------------------------------------- MIH_C_RESOURCE_DESC_T *res = &g_link_action.link_ac_param._union.resource_desc; MIH_C_COS_T classIdDL = 0; MIH_C_COS_T classIdUL = 0; @@ -538,20 +493,20 @@ static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_activate_resources(void){ /* TODO: To be initialized downlink/uplink */ if (res->choice_qos) { - MIH_C_QOS_T *qos = &(res->_union_qos.qos); - if (qos->choice) { - classIdDL = qos->_union.cos; - classIdUL = qos->_union.cos; - } + MIH_C_QOS_T *qos = &(res->_union_qos.qos); + if (qos->choice) { + classIdDL = qos->_union.cos; + classIdUL = qos->_union.cos; + } } if (res->choice_link_data_rate) { - resBitrateDL = res->_union_link_data_rate.link_data_rate; - resBitrateUL = res->_union_link_data_rate.link_data_rate; + resBitrateDL = res->_union_link_data_rate.link_data_rate; + resBitrateUL = res->_union_link_data_rate.link_data_rate; } /* end TODO */ if (res->choice_multicast_enable) { - multicast = res->_union_multicast_enable.multicast_enable; + multicast = res->_union_multicast_enable.multicast_enable; } /* @@ -569,35 +524,35 @@ static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_activate_resources(void){ //int len = MIH_C_TRANSPORT_ADDR_VALUE2String(&DestIpv6Addr[0][16], mt_addr); if ( (len > 0) && (len < 128)) { - DEBUG (" %s: MT's address = %s\n", __FUNCTION__, eRALlte_process_mt_addr_to_string((unsigned char*)mt_addr)); + LOG_D(RAL_ENB, " %s: MT's address = %s\n", __FUNCTION__, eRAL_process_mt_addr_to_string((unsigned char*)mt_addr)); } else { - ERR (" %s : IP Address is NOT valid (len=%d)\n", __FUNCTION__, len); - return MIH_C_LINK_AC_RESULT_FAILURE; + LOG_E(RAL_ENB, "%s : IP Address is NOT valid (len=%d)\n", __FUNCTION__, len); + return MIH_C_LINK_AC_RESULT_FAILURE; } #if 0 char mt_addr[128]; if (res->link_id.link_addr.choice == MIH_C_CHOICE_3GPP_3G_CELL_ID) { - char link_addr[128]; - int len = MIH_C_LINK_ADDR2String(&res->link_id.link_addr, link_addr); - if ( (len > 0) && (len <= 128) ) { - int i; - DEBUG (" %s : Link address = %s\n", __FUNCTION__, link_addr); - for (i=0; i < len; i++) { - if (link_addr[i] == '=') break; - } - strncpy(mt_addr, &link_addr[i+2], 16); - DEBUG (" %s : MT address = %s\n", __FUNCTION__, mt_addr); - } else { - ERR (" %s : Link address is NOT valid (len=%d)\n", __FUNCTION__, len); - return MIH_C_LINK_AC_RESULT_FAILURE; - } + char link_addr[128]; + int len = MIH_C_LINK_ADDR2String(&res->link_id.link_addr, link_addr); + if ( (len > 0) && (len <= 128) ) { + int i; + LOG_D(RAL_ENB, " %s : Link address = %s\n", __FUNCTION__, link_addr); + for (i=0; i < len; i++) { + if (link_addr[i] == '=') break; + } + strncpy(mt_addr, &link_addr[i+2], 16); + LOG_D(RAL_ENB, " %s : MT address = %s\n", __FUNCTION__, mt_addr); + } else { + LOG_E(RAL_ENB, "%s : Link address is NOT valid (len=%d)\n", __FUNCTION__, len); + return MIH_C_LINK_AC_RESULT_FAILURE; + } } else { - ERR (" %s : Link address is NOT valid (type=%d, not 3GPP_3G_CELL_ID)\n", - __FUNCTION__, res->link_id.link_addr.choice); - return MIH_C_LINK_AC_RESULT_FAILURE; + LOG_E(RAL_ENB, "%s : Link address is NOT valid (type=%d, not 3GPP_3G_CELL_ID)\n", + __FUNCTION__, res->link_id.link_addr.choice); + return MIH_C_LINK_AC_RESULT_FAILURE; } #endif @@ -610,143 +565,143 @@ static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_activate_resources(void){ int cnxid; /* Get the connection identifier */ - f_ix = _eRALlte_action_get_channel_id(&res->flow_id, &cnxid); + f_ix = eRAL_action_get_channel_id(instanceP, &res->flow_id, &cnxid); if (f_ix != -1) { - /* Get MT and RB channel identifiers */ - if (eRALlte_process_find_channel(cnxid, &mt_ix, &ch_ix) != 0) { - /* Unicast data flow */ - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - } else { - /* Multicast data flow */ - assert(multicast == MIH_C_BOOLEAN_TRUE); - currChannel = &(ralpriv->mcast.radio_channel); - } - - if (currChannel->status == RB_CONNECTED) { - //if (currChannel->status == NAS_CONNECTED) { - /* The resource is already in the required state */ - DEBUG(" Link action ACTIVATE_RESOURCES requested while link resource is ALREADY activated\n"); - return MIH_C_LINK_AC_RESULT_SUCCESS; - } - - /* The resource is not in the required state: - * Remove the connection identifier from the list of active resources - * and process the action request again. */ - DEBUG(" Resource has been activated but is not in the ACTIVE state\n"); - (void) _eRALlte_action_del_channel_id(f_ix); + /* Get MT and RB channel identifiers */ + if (eRAL_process_find_channel(instanceP, cnxid, &mt_ix, &ch_ix) != 0) { + /* Unicast data flow */ + currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); + } else { + /* Multicast data flow */ + assert(multicast == MIH_C_BOOLEAN_TRUE); + currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); + } + + if (currChannel->status == RB_CONNECTED) { + //if (currChannel->status == NAS_CONNECTED) { + /* The resource is already in the required state */ + LOG_D(RAL_ENB, " Link action ACTIVATE_RESOURCES requested while link resource is ALREADY activated\n"); + return MIH_C_LINK_AC_RESULT_SUCCESS; + } + + /* The resource is not in the required state: + * Remove the connection identifier from the list of active resources + * and process the action request again. */ + LOG_D(RAL_ENB, " Resource has been activated but is not in the ACTIVE state\n"); + (void) eRAL_action_del_channel_id(instanceP, f_ix); } MIH_C_LINK_TUPLE_ID_T *ltid; int is_ready_for_rb_establish = 1; if (multicast) { - /* - * Multicast data flow: - */ - mt_ix = RAL_MAX_MT; - ch_ix = 0; - currChannel = &(ralpriv->mcast.radio_channel); - currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+1; - currChannel->rbId = RAL_DEFAULT_RAB_ID; - currChannel->multicast = 1; - memcpy((char*)&(ralpriv->mcast.mc_group_addr), mt_addr, 16); - ltid = &(ralpriv->mcast.ltid); + /* + * Multicast data flow: + */ + mt_ix = RAL_MAX_MT; + ch_ix = 0; + currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); + currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+1; + currChannel->rbId = RAL_DEFAULT_RAB_ID; + currChannel->multicast = 1; + memcpy((char*)&(g_enb_ral_obj[instanceP].mcast.mc_group_addr), mt_addr, 16); + ltid = &(g_enb_ral_obj[instanceP].mcast.ltid); } else { - /* - * Unicast data flow - */ - /* Get the list of MTs waiting for RB establishment */ - #ifdef RAL_REALTIME - RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST, 0, 0); - RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST, 0, 0); - #endif - /* Check if the MT is in the list */ - mt_ix = eRALlte_process_find_mt_by_addr(mt_addr); - - if ( (mt_ix < RAL_MAX_MT) && - (ralpriv->mt[mt_ix].mt_state == RB_CONNECTED)) { - /* The MT is ready for RB establishment */ - ch_ix = eRALlte_process_find_new_channel(mt_ix); - if (ch_ix == RAL_MAX_RB) { - DEBUG(" No RB available in MT\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - currChannel->rbId = RAL_DEFAULT_RAB_ID + ch_ix; - currChannel->multicast = 0; - DEBUG(" mt_ix %d, ch_ix %d, cnx_id %d, rbId %d\n", - mt_ix, ch_ix, currChannel->cnx_id, currChannel->rbId); - memcpy((char *)&(ralpriv->mt[mt_ix].ipv6_addr), mt_addr, 16); - ltid = &(ralpriv->mt[mt_ix].ltid); - } - else { - /* The MT is NOT ready for RB establishment */ - is_ready_for_rb_establish = 0; - int qos_is_valid = 0; - - DEBUG(" Mobile Terminal not ready - Storing request data\n"); - /* Check validity of QoS parameters */ - if ( (classIdDL < 64) && (classIdUL < 64) ) { - if ( (resBitrateDL <= RAL_BITRATE_320k) - && (resBitrateUL <= RAL_BITRATE_320k) ) { - qos_is_valid = 1; - } - else if ( (resBitrateDL >= RAL_BITRATE_384k) - && (resBitrateDL <= RAL_BITRATE_440k) - && (resBitrateUL <= RAL_BITRATE_64k) ) { - qos_is_valid = 1; - } - } - if (qos_is_valid) { - DEBUG(" Received QoS parameters are valid\n"); - } else { - DEBUG(" Received QoS parameters are NOT valid - Request will be rejected\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } - - currChannel = &(ralpriv->pending_mt.radio_channel[0]); - currChannel->cnx_id = 0; - currChannel->rbId = 0; - currChannel->multicast = 0; - memcpy((char *)&(ralpriv->pending_mt.ipv6_addr), mt_addr, 16); - - ltid = &(ralpriv->pending_mt.ltid); - ralpriv->pending_req_flag = 1; - - } /* end MT not ready */ + /* + * Unicast data flow + */ + /* Get the list of MTs waiting for RB establishment */ +#ifdef RAL_REALTIME + // LG RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST, 0, 0); + // LG RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST, 0, 0); +#endif + /* Check if the MT is in the list */ + mt_ix = eRAL_process_find_mt_by_addr(instanceP, mt_addr); + + if ( (mt_ix < RAL_MAX_MT) && + (g_enb_ral_obj[instanceP].mt[mt_ix].mt_state == RB_CONNECTED)) { + /* The MT is ready for RB establishment */ + ch_ix = eRAL_process_find_new_channel(instanceP, mt_ix); + if (ch_ix == RAL_MAX_RB) { + LOG_D(RAL_ENB, " No RB available in MT\n"); + return MIH_C_LINK_AC_RESULT_REFUSED; + } + currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); + currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; + currChannel->rbId = RAL_DEFAULT_RAB_ID + ch_ix; + currChannel->multicast = 0; + LOG_D(RAL_ENB, " mt_ix %d, ch_ix %d, cnx_id %d, rbId %d\n", + mt_ix, ch_ix, currChannel->cnx_id, currChannel->rbId); + memcpy((char *)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_addr), mt_addr, 16); + ltid = &(g_enb_ral_obj[instanceP].mt[mt_ix].ltid); + } + else { + /* The MT is NOT ready for RB establishment */ + is_ready_for_rb_establish = 0; + int qos_is_valid = 0; + + LOG_D(RAL_ENB, " Mobile Terminal not ready - Storing request data\n"); + /* Check validity of QoS parameters */ + if ( (classIdDL < 64) && (classIdUL < 64) ) { + if ( (resBitrateDL <= RAL_BITRATE_320k) + && (resBitrateUL <= RAL_BITRATE_320k) ) { + qos_is_valid = 1; + } + else if ( (resBitrateDL >= RAL_BITRATE_384k) + && (resBitrateDL <= RAL_BITRATE_440k) + && (resBitrateUL <= RAL_BITRATE_64k) ) { + qos_is_valid = 1; + } + } + if (qos_is_valid) { + LOG_D(RAL_ENB, " Received QoS parameters are valid\n"); + } else { + LOG_D(RAL_ENB, " Received QoS parameters are NOT valid - Request will be rejected\n"); + return MIH_C_LINK_AC_RESULT_REFUSED; + } + + currChannel = &(g_enb_ral_obj[instanceP].pending_mt.radio_channel[0]); + currChannel->cnx_id = 0; + currChannel->rbId = 0; + currChannel->multicast = 0; + memcpy((char *)&(g_enb_ral_obj[instanceP].pending_mt.ipv6_addr), mt_addr, 16); + + ltid = &(g_enb_ral_obj[instanceP].pending_mt.ltid); + g_enb_ral_obj[instanceP].pending_req_flag = 1; + + } /* end MT not ready */ } /* end unicast data flow */ /* Save the current data flow identifier into the list of active data flows */ if (currChannel->cnx_id != 0) { - f_ix = _eRALlte_action_set_channel_id(&res->flow_id, currChannel->cnx_id); - if (f_ix < 0) { - DEBUG(" No RB available\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } + f_ix = eRAL_action_set_channel_id(instanceP, &res->flow_id, currChannel->cnx_id); + if (f_ix < 0) { + LOG_D(RAL_ENB, " No RB available\n"); + return MIH_C_LINK_AC_RESULT_REFUSED; + } } else { - /* The current request is pending waiting for RB establishment */ - f_ix = 0; - ralpriv->pending_req_fid = res->flow_id; + /* The current request is pending waiting for RB establishment */ + f_ix = 0; + g_enb_ral_obj[instanceP].pending_req_fid = res->flow_id; } /* * Store resource parameters */ int i; for (i = 0; i < 2; i++) { - //TODO: int dir = p->qos.value[i].direction; - // TODO: To be initialized downlink/uplink - currChannel->flowId[i] = f_ix; - currChannel->classId[i] = classIdDL; // classIdUL - currChannel->resBitrate[i] = resBitrateDL; // resBitrateUL - //currChannel->meanBitrate[i] = p->qos.value[i].tspec.meanBitrate; - //currChannel->bktDepth[i] = p->qos.value[i].tspec.bucketDepth; - //currChannel->pkBitrate[i] = p->qos.value[i].tspec.peakBitrate; - //currChannel->MTU[i] = p->qos.value[i].tspec.maximumTransmissionUnit; - DEBUG(" qos value : DIR %d, flowId %d, classId %d, resBitrate %.1f\n", i , currChannel->flowId[i], currChannel->classId[i], currChannel->resBitrate[i]); + //TODO: int dir = p->qos.value[i].direction; + // TODO: To be initialized downlink/uplink + currChannel->flowId[i] = f_ix; + currChannel->classId[i] = classIdDL; // classIdUL + currChannel->resBitrate[i] = resBitrateDL; // resBitrateUL + //currChannel->meanBitrate[i] = p->qos.value[i].tspec.meanBitrate; + //currChannel->bktDepth[i] = p->qos.value[i].tspec.bucketDepth; + //currChannel->pkBitrate[i] = p->qos.value[i].tspec.peakBitrate; + //currChannel->MTU[i] = p->qos.value[i].tspec.maximumTransmissionUnit; + LOG_D(RAL_ENB, " qos value : DIR %d, flowId %d, classId %d, resBitrate %.1f\n", i , currChannel->flowId[i], currChannel->classId[i], currChannel->resBitrate[i]); } /* Store the link identifier */ ltid->link_id = res->link_id; @@ -758,44 +713,44 @@ static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_activate_resources(void){ * Setup Radio Bearer resources */ if (is_ready_for_rb_establish) { - /* Map QoS */ - int mapping_result = eRALlte_process_map_qos(mt_ix, ch_ix); - if (mapping_result) { - int rc; - #ifdef RAL_DUMMY - rc = eRALlte_NAS_send_rb_establish_request(mt_ix, ch_ix); - #endif - #ifdef RAL_REALTIME - rc = RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_ADD, mt_ix, ch_ix); - #endif - if (rc < 0) { - /* Failed to send RB establishment request */ - return MIH_C_LINK_AC_RESULT_FAILURE; - } - } else { - /* QoS mapping is not supported */ - return MIH_C_LINK_AC_RESULT_REFUSED; - } + /* Map QoS */ + int mapping_result = eRAL_process_map_qos(instanceP, mt_ix, ch_ix); + if (mapping_result) { + int rc; +#ifdef RAL_DUMMY + rc = eRAL_NAS_send_rb_establish_request(mt_ix, ch_ix); +#endif +#ifdef RAL_REALTIME + // LG rc = RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_ADD, mt_ix, ch_ix); +#endif + if (rc < 0) { + /* Failed to send RB establishment request */ + return MIH_C_LINK_AC_RESULT_FAILURE; + } + } else { + /* QoS mapping is not supported */ + return MIH_C_LINK_AC_RESULT_REFUSED; + } } else { - /* Wait for MT coming ready; - * re-try to establish RB upon timer expiration */ + /* Wait for MT coming ready; + * re-try to establish RB upon timer expiration */ #ifdef RAL_DUMMY - ralpriv->pending_mt_timer = 5; + g_enb_ral_obj[instanceP].pending_mt_timer = 5; #endif #ifdef RAL_REALTIME - ralpriv->pending_mt_timer = 300; + g_enb_ral_obj[instanceP].pending_mt_timer = 300; #endif } /* Link action successfully processed */ - ralpriv->pending_req_action = MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES; + g_enb_ral_obj[instanceP].pending_req_action = MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES; return MIH_C_LINK_AC_RESULT_SUCCESS; } /**************************************************************************** ** ** - ** Name: _eRALlte_action_link_deactivate_resources() ** + ** Name: eRAL_action_link_deactivate_resources() ** ** ** ** Description: Processes the link deactivate resource action request. ** ** ** @@ -808,7 +763,7 @@ static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_activate_resources(void){ ** Others: ralpriv ** ** ** ***************************************************************************/ -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_deactivate_resources(void) +MIH_C_LINK_AC_RESULT_T eRAL_action_link_deactivate_resources(ral_enb_instance_t instanceP) { MIH_C_RESOURCE_DESC_T *res = &g_link_action.link_ac_param._union.resource_desc; struct ral_lte_channel *currChannel; @@ -816,52 +771,52 @@ static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_deactivate_resources(void) int cnxid; /* Get the connection identifier */ - f_ix = _eRALlte_action_get_channel_id(&res->flow_id, &cnxid); + f_ix = eRAL_action_get_channel_id(instanceP, &res->flow_id, &cnxid); if (f_ix < 0) { - DEBUG(" Link action DEACTIVATE_RESOURCES requested while link resource is NOT activated\n"); - return MIH_C_LINK_AC_RESULT_SUCCESS; + LOG_D(RAL_ENB, " Link action DEACTIVATE_RESOURCES requested while link resource is NOT activated\n"); + return MIH_C_LINK_AC_RESULT_SUCCESS; } /* Get MT and RB channel identifiers */ - if (eRALlte_process_find_channel(cnxid, &mt_ix, &ch_ix) != 0) { - /* Unicast data flow */ - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - DEBUG (" %s: Unicast MT's address = %s\n", __FUNCTION__, - eRALlte_process_mt_addr_to_string(ralpriv->mt[mt_ix].ipv6_addr)); + if (eRAL_process_find_channel(instanceP, cnxid, &mt_ix, &ch_ix) != 0) { + /* Unicast data flow */ + currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); + LOG_D(RAL_ENB, " %s: Unicast MT's address = %s\n", __FUNCTION__, + eRAL_process_mt_addr_to_string(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_addr)); } else { - /* Multicast data flow */ - currChannel = &(ralpriv->mcast.radio_channel); - DEBUG (" %s: Multicast MT's address = %s\n", __FUNCTION__, - eRALlte_process_mt_addr_to_string(ralpriv->mcast.mc_group_addr)); + /* Multicast data flow */ + currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); + LOG_D(RAL_ENB, " %s: Multicast MT's address = %s\n", __FUNCTION__, + eRAL_process_mt_addr_to_string(g_enb_ral_obj[instanceP].mcast.mc_group_addr)); } if (currChannel->status == NAS_DISCONNECTED) { - /* The resource is already in the required state */ - DEBUG(" Link action request DEACTIVATE_RESOURCES is currently in progress\n"); - return MIH_C_LINK_AC_RESULT_SUCCESS; + /* The resource is already in the required state */ + LOG_D(RAL_ENB, " Link action request DEACTIVATE_RESOURCES is currently in progress\n"); + return MIH_C_LINK_AC_RESULT_SUCCESS; } /* The resource is not in the required state: * Remove the connection identifier from the list of active resources * and go ahead in the request processing. */ - (void) _eRALlte_action_del_channel_id(f_ix); + (void) eRAL_action_del_channel_id(instanceP, f_ix); int rc; #ifdef RAL_DUMMY - rc = eRALlte_NAS_send_rb_release_request(mt_ix, ch_ix); + rc = eRAL_NAS_send_rb_release_request(mt_ix, ch_ix); #endif #ifdef RAL_REALTIME - rc = RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_DEL, mt_ix, ch_ix); + // LG rc = RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_DEL, mt_ix, ch_ix); #endif if (rc < 0) { - /* Failed to send RB release request */ - return MIH_C_LINK_AC_RESULT_FAILURE; + /* Failed to send RB release request */ + return MIH_C_LINK_AC_RESULT_FAILURE; } /* Link action successfully processed */ - ralpriv->pending_req_action = MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES; + g_enb_ral_obj[instanceP].pending_req_action = MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES; return MIH_C_LINK_AC_RESULT_SUCCESS; } diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_ioctl.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_ioctl.c index 3e636a206b..b82bc87b56 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_ioctl.c +++ b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_ioctl.c @@ -33,7 +33,7 @@ * \company EURECOM * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ -/*******************************************************************************/ +/******************************************************************************* #include <sys/ioctl.h> #include <string.h> #include <stdio.h> @@ -49,9 +49,9 @@ #include "rrc_d_types.h" //----------------------------------------------------------------------------- // LTE AS sub-system -#include "rrc_nas_primitives.h" -#include "nasrg_constant.h" -#include "nasrg_iocontrol.h" +//#include "rrc_nas_primitives.h" +//#include "nasrg_constant.h" +//#include "nasrg_iocontrol.h" //----------------------------------------------------------------------------- #include "lteRALenb_mih_msg.h" #include "lteRALenb_constants.h" @@ -69,19 +69,19 @@ extern int init_flag; void print_state(u8 state){ //--------------------------------------------------------------------------- switch(state){ - case NAS_IDLE:DEBUG("NAS_IDLE\n");return; - case NAS_CX_FACH:DEBUG("NAS_CX_FACH\n");return; - case NAS_CX_DCH:DEBUG("NAS_CX_DCH\n");return; - case NAS_CX_RECEIVED:DEBUG("NAS_CX_RECEIVED\n");return; - case NAS_CX_CONNECTING:DEBUG("NAS_CX_CONNECTING\n");return; - case NAS_CX_RELEASING:DEBUG("NAS_CX_RELEASING\n");return; - case NAS_CX_CONNECTING_FAILURE:DEBUG("NAS_CX_CONNECTING_FAILURE\n");return; - case NAS_CX_RELEASING_FAILURE:DEBUG("NAS_CX_RELEASING_FAILURE\n");return; - case NAS_RB_ESTABLISHING:DEBUG("NAS_RB_ESTABLISHING\n");return; - case NAS_RB_RELEASING:DEBUG("NAS_RB_RELEASING\n");return; - case NAS_RB_ESTABLISHED:DEBUG("NAS_RB_ESTABLISHED\n");return; - - default: ERR(" Unknown state\n"); + case NAS_IDLE:printf("NAS_IDLE\n");return; + case NAS_CX_FACH:printf("NAS_CX_FACH\n");return; + case NAS_CX_DCH:printf("NAS_CX_DCH\n");return; + case NAS_CX_RECEIVED:printf("NAS_CX_RECEIVED\n");return; + case NAS_CX_CONNECTING:printf("NAS_CX_CONNECTING\n");return; + case NAS_CX_RELEASING:printf("NAS_CX_RELEASING\n");return; + case NAS_CX_CONNECTING_FAILURE:printf("NAS_CX_CONNECTING_FAILURE\n");return; + case NAS_CX_RELEASING_FAILURE:printf("NAS_CX_RELEASING_FAILURE\n");return; + case NAS_RB_ESTABLISHING:printf("NAS_RB_ESTABLISHING\n");return; + case NAS_RB_RELEASING:printf("NAS_RB_RELEASING\n");return; + case NAS_RB_ESTABLISHED:printf("NAS_RB_ESTABLISHED\n");return; + + default: printf(" Unknown state\n"); } } @@ -91,32 +91,32 @@ void RAL_NASinitMTlist(u8 *msgrep, int num_mts){ int mt_ix, ch_ix; struct nas_msg_cx_list_reply *list; - memcpy(ralpriv->plmn, DefaultPLMN, DEFAULT_PLMN_SIZE); // DUMMY + memcpy(g_enb_ral_obj[instanceP].plmn, DefaultPLMN, DEFAULT_PLMN_SIZE); // DUMMY list=(struct nas_msg_cx_list_reply *)(msgrep+1); num_mts = msgrep[0]; for(mt_ix=0; mt_ix<num_mts; ++mt_ix){ if (list[mt_ix].state != NAS_IDLE){ - ralpriv->curr_cellId = list[mt_ix].cellid; - ralpriv->mt[mt_ix].ue_id = list[mt_ix].lcr; - ralpriv->mt[mt_ix].ipv6_l2id[0]= list[mt_ix].iid6[0]; - ralpriv->mt[mt_ix].ipv6_l2id[1]= list[mt_ix].iid6[1]; - ralpriv->mt[mt_ix].num_rbs = list[mt_ix].num_rb; - ralpriv->mt[mt_ix].num_class = list[mt_ix].nsclassifier; - ralpriv->mt[mt_ix].nas_state = list[mt_ix].state; - if (ralpriv->mt[mt_ix].num_class>=2) - ralpriv->mt[mt_ix].mt_state= NAS_CONNECTED; + g_enb_ral_obj[instanceP].cell_id = list[mt_ix].cellid; + g_enb_ral_obj[instanceP].mt[mt_ix].ue_id = list[mt_ix].lcr; + g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]= list[mt_ix].iid6[0]; + g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[1]= list[mt_ix].iid6[1]; + g_enb_ral_obj[instanceP].mt[mt_ix].num_rbs = list[mt_ix].num_rb; + g_enb_ral_obj[instanceP].mt[mt_ix].num_class = list[mt_ix].nsclassifier; + g_enb_ral_obj[instanceP].mt[mt_ix].nas_state = list[mt_ix].state; + if (g_enb_ral_obj[instanceP].mt[mt_ix].num_class>=2) + g_enb_ral_obj[instanceP].mt[mt_ix].mt_state= NAS_CONNECTED; // enter default rb ch_ix = 0; - ralpriv->mt[mt_ix].radio_channel[ch_ix].rbId = RAL_DEFAULT_MC_RAB_ID+1; - ralpriv->mt[mt_ix].radio_channel[ch_ix].RadioQoSclass = 2; - ralpriv->mt[mt_ix].radio_channel[ch_ix].cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - ralpriv->mt[mt_ix].radio_channel[ch_ix].dscpUL = 0; - ralpriv->mt[mt_ix].radio_channel[ch_ix].dscpDL = 0; - ralpriv->mt[mt_ix].radio_channel[ch_ix].nas_state = NAS_CX_DCH; - ralpriv->mt[mt_ix].radio_channel[ch_ix].status = RB_CONNECTED; - ralpriv->num_connected_mts++; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].rbId = RAL_DEFAULT_MC_RAB_ID+1; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].RadioQoSclass = 2; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].dscpUL = 0; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].dscpDL = 0; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].nas_state = NAS_CX_DCH; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].status = RB_CONNECTED; + g_enb_ral_obj[instanceP].num_connected_mts++; //RAL_printMobileData(mt_ix); - DEBUG(" MT%d initialized : address %d %d\n", mt_ix, ralpriv->mt[mt_ix].ipv6_l2id[0], ralpriv->mt[mt_ix].ipv6_l2id[1]); + DEBUG(" MT%d initialized : address %d %d\n", mt_ix, g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0], g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[1]); } } } @@ -136,35 +136,35 @@ void RAL_NASupdatetMTlist(u8 *msgrep, int num_mts){ num_mts = msgrep[0]; for(mt_ix=0; mt_ix<num_mts; ++mt_ix){ // check if MT already known - if ((ralpriv->mt[mt_ix].ipv6_l2id[0]== list[mt_ix].iid6[0])&& - (ralpriv->mt[mt_ix].ipv6_l2id[1]== list[mt_ix].iid6[1])){ + if ((g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]== list[mt_ix].iid6[0])&& + (g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[1]== list[mt_ix].iid6[1])){ // MT already known - update - ralpriv->mt[mt_ix].num_rbs = list[mt_ix].num_rb; - previous_num_class = ralpriv->mt[mt_ix].num_class; - ralpriv->mt[mt_ix].num_class = list[mt_ix].nsclassifier; - if (ralpriv->mt[mt_ix].num_class>=2) - ralpriv->mt[mt_ix].mt_state= RB_CONNECTED; + g_enb_ral_obj[instanceP].mt[mt_ix].num_rbs = list[mt_ix].num_rb; + previous_num_class = g_enb_ral_obj[instanceP].mt[mt_ix].num_class; + g_enb_ral_obj[instanceP].mt[mt_ix].num_class = list[mt_ix].nsclassifier; + if (g_enb_ral_obj[instanceP].mt[mt_ix].num_class>=2) + g_enb_ral_obj[instanceP].mt[mt_ix].mt_state= RB_CONNECTED; //check if state has changed - MT disconnected FFS - if ((ralpriv->mt[mt_ix].nas_state==NAS_CX_DCH)&&(list[mt_ix].state == NAS_IDLE)){ + if ((g_enb_ral_obj[instanceP].mt[mt_ix].nas_state==NAS_CX_DCH)&&(list[mt_ix].state == NAS_IDLE)){ DEBUG ("\n\n"); DEBUG (" MOBILE TERMINAL %d IS NOW IDLE.\n\n",mt_ix); // TODO Send linkdown } //check if state has changed - MT reconnected FFS - if ((ralpriv->mt[mt_ix].nas_state==NAS_IDLE)&&(list[mt_ix].state == NAS_CX_DCH)){ + if ((g_enb_ral_obj[instanceP].mt[mt_ix].nas_state==NAS_IDLE)&&(list[mt_ix].state == NAS_CX_DCH)){ DEBUG ("\n\n"); DEBUG (" MOBILE TERMINAL %d WAS IDLE AND IS NOW CONNECTED.\n\n",mt_ix); } //check if MT is completely connected - if ((ralpriv->mt[mt_ix].num_class - previous_num_class)&&(list[mt_ix].state == NAS_CX_DCH)){ + if ((g_enb_ral_obj[instanceP].mt[mt_ix].num_class - previous_num_class)&&(list[mt_ix].state == NAS_CX_DCH)){ DEBUG ("\n\n"); DEBUG (" MOBILE TERMINAL %d IS NOW COMPLETELY CONNECTED.\n\n",mt_ix); // send linkup: new_ar will contain the address from the MT new_ar.choice = MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(ralpriv->mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); + MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - eRALlte_send_link_up_indication(&ralpriv->pending_req_transaction_id, &ralpriv->mt[mt_ix].ltid, NULL, &new_ar, NULL, NULL); - //eRALlte_send_link_up_indication(&ralpriv->pending_req_transaction_id, &ralpriv->mt[mt_ix].ltid, NULL, NULL, NULL, NULL); + eRALlte_send_link_up_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid, NULL, &new_ar, NULL, NULL); + //eRALlte_send_link_up_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid, NULL, NULL, NULL, NULL); // if RAL realtime and MEASURES are enabled, start the measuring process in RRC+Driver #ifdef RAL_REALTIME #ifdef ENABLE_MEDIEVAL_DEMO3 @@ -174,65 +174,65 @@ void RAL_NASupdatetMTlist(u8 *msgrep, int num_mts){ } //check enter sleep mode - if ((ralpriv->mt[mt_ix].nas_state==NAS_CX_DCH)&&(list[mt_ix].state == NAS_CX_RELEASING)){ + if ((g_enb_ral_obj[instanceP].mt[mt_ix].nas_state==NAS_CX_DCH)&&(list[mt_ix].state == NAS_CX_RELEASING)){ DEBUG ("\n\n"); DEBUG (" MOBILE TERMINAL %d is entering sleep mode. Send LinkDown.\n\n",mt_ix); // send linkdown: old_ar (represented by new_ar variable) will contain the address from the MT transaction_id = MIH_C_get_new_transaction_id(); reason_code = MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT; new_ar.choice = MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(ralpriv->mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - eRALlte_send_link_down_indication(&transaction_id, &ralpriv->mt[mt_ix].ltid, &new_ar, &reason_code); + MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); + eRALlte_send_link_down_indication(&transaction_id, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid, &new_ar, &reason_code); } // check leave sleep mode - if ((ralpriv->mt[mt_ix].nas_state==NAS_CX_RELEASING)&&(list[mt_ix].state == NAS_CX_DCH)){ + if ((g_enb_ral_obj[instanceP].mt[mt_ix].nas_state==NAS_CX_RELEASING)&&(list[mt_ix].state == NAS_CX_DCH)){ DEBUG ("\n\n"); DEBUG (" MOBILE TERMINAL %d WAS IN SLEEP MODE AND IS NOW ACTIVATED.\n\n",mt_ix); // send linkup: new_ar will contain the address from the MT new_ar.choice = MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(ralpriv->mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - eRALlte_send_link_up_indication(&ralpriv->pending_req_transaction_id, &ralpriv->mt[mt_ix].ltid, NULL, &new_ar, NULL, NULL); + MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); + eRALlte_send_link_up_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid, NULL, &new_ar, NULL, NULL); } - ralpriv->mt[mt_ix].nas_state = list[mt_ix].state; + g_enb_ral_obj[instanceP].mt[mt_ix].nas_state = list[mt_ix].state; }else{ // MT unknown or different if (list[mt_ix].state != NAS_IDLE){ DEBUG ("\n\n"); DEBUG (" NEW TERMINAL %d DETECTED.\n\n",mt_ix); - ralpriv->mt[mt_ix].ue_id = list[mt_ix].lcr; - ralpriv->mt[mt_ix].ipv6_l2id[0]= list[mt_ix].iid6[0]; - ralpriv->mt[mt_ix].ipv6_l2id[1]= list[mt_ix].iid6[1]; - ralpriv->mt[mt_ix].num_rbs = list[mt_ix].num_rb; - ralpriv->mt[mt_ix].num_class = list[mt_ix].nsclassifier; + g_enb_ral_obj[instanceP].mt[mt_ix].ue_id = list[mt_ix].lcr; + g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]= list[mt_ix].iid6[0]; + g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[1]= list[mt_ix].iid6[1]; + g_enb_ral_obj[instanceP].mt[mt_ix].num_rbs = list[mt_ix].num_rb; + g_enb_ral_obj[instanceP].mt[mt_ix].num_class = list[mt_ix].nsclassifier; // initialize ltid (MIH_C_LINK_TUPLE_ID_T) for that mobile // first version - //ralpriv->mt[mt_ix].ltid.link_id.link_type = MIH_C_WIRELESS_UMTS; - //ralpriv->mt[mt_ix].ltid.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_ADDR; - //MIH_C_3GPP_ADDR_set(&ralpriv->mt[mt_ix].ltid.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - //ralpriv->mt[mt_ix].ltid.choice = MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR; + //g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_type = MIH_C_WIRELESS_UMTS; + //g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_ADDR; + //MIH_C_3GPP_ADDR_set(&g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); + //g_enb_ral_obj[instanceP].mt[mt_ix].ltid.choice = MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR; // SECOND Version - ralpriv->mt[mt_ix].ltid.link_id.link_type = MIH_C_WIRELESS_UMTS; - ralpriv->mt[mt_ix].ltid.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - ralpriv->mt[mt_ix].ltid.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; + g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_type = MIH_C_WIRELESS_UMTS; + g_enb_ral_obj[instanceP].mt[mt_ix].ltid.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; + g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; Bit_Buffer_t *plmn = new_BitBuffer_0(); - BitBuffer_wrap(plmn, (unsigned char*) ralpriv->plmn, DEFAULT_PLMN_SIZE); - MIH_C_PLMN_ID_decode(plmn, &ralpriv->mt[mt_ix].ltid.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id); + BitBuffer_wrap(plmn, (unsigned char*) g_enb_ral_obj[instanceP].plmn, DEFAULT_PLMN_SIZE); + MIH_C_PLMN_ID_decode(plmn, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id); free_BitBuffer(plmn); - ralpriv->mt[mt_ix].ltid.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = ralpriv->curr_cellId; - ralpriv->mt[mt_ix].ltid.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; + g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_enb_ral_obj[instanceP].cell_id; + g_enb_ral_obj[instanceP].mt[mt_ix].ltid.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; // check state of the UE connection - ralpriv->mt[mt_ix].nas_state = list[mt_ix].state; - if (ralpriv->mt[mt_ix].num_class>=2){ - ralpriv->mt[mt_ix].mt_state= RB_CONNECTED; + g_enb_ral_obj[instanceP].mt[mt_ix].nas_state = list[mt_ix].state; + if (g_enb_ral_obj[instanceP].mt[mt_ix].num_class>=2){ + g_enb_ral_obj[instanceP].mt[mt_ix].mt_state= RB_CONNECTED; // send linkup - //ltid = &ralpriv->mt[mt_ix].ltid; + //ltid = &g_enb_ral_obj[instanceP].mt[mt_ix].ltid; DEBUG (" MOBILE TERMINAL %d IS COMPLETELY CONNECTED.\n\n",mt_ix); // new_ar will contain the address from the MT new_ar.choice = MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(ralpriv->mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); + MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - eRALlte_send_link_up_indication(&ralpriv->pending_req_transaction_id, &ralpriv->mt[mt_ix].ltid, NULL, &new_ar, NULL, NULL); + eRALlte_send_link_up_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid, NULL, &new_ar, NULL, NULL); // if RAL realtime and MEASURES are enabled, start the measuring process in RRC+Driver #ifdef RAL_REALTIME #ifdef ENABLE_MEDIEVAL_DEMO3 @@ -242,14 +242,14 @@ void RAL_NASupdatetMTlist(u8 *msgrep, int num_mts){ } // enter default rb ch_ix = 0; - ralpriv->mt[mt_ix].radio_channel[ch_ix].rbId = RAL_DEFAULT_MC_RAB_ID+1; - ralpriv->mt[mt_ix].radio_channel[ch_ix].RadioQoSclass = 2; - ralpriv->mt[mt_ix].radio_channel[ch_ix].cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - ralpriv->mt[mt_ix].radio_channel[ch_ix].dscpUL = 0; - ralpriv->mt[mt_ix].radio_channel[ch_ix].dscpDL = 0; - ralpriv->mt[mt_ix].radio_channel[ch_ix].nas_state = NAS_CX_DCH; - ralpriv->mt[mt_ix].radio_channel[ch_ix].status = RB_CONNECTED; - ralpriv->num_connected_mts++; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].rbId = RAL_DEFAULT_MC_RAB_ID+1; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].RadioQoSclass = 2; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].dscpUL = 0; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].dscpDL = 0; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].nas_state = NAS_CX_DCH; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].status = RB_CONNECTED; + g_enb_ral_obj[instanceP].num_connected_mts++; //RAL_printMobileData(mt_ix); } } // end if MT unknonwn @@ -259,45 +259,45 @@ void RAL_NASupdatetMTlist(u8 *msgrep, int num_mts){ //--------------------------------------------------------------------------- void RAL_verifyPendingRbStatus(void){ //--------------------------------------------------------------------------- -// ralpriv->mcast.radio_channel.status = RB_CONNECTED; +// g_enb_ral_obj[instanceP].mcast.radio_channel.status = RB_CONNECTED; int mt_ix, ch_ix; MIH_C_LINK_TUPLE_ID_T* ltid; //int is_unicast; - mt_ix = ralpriv->pending_req_mt_ix; - ch_ix = ralpriv->pending_req_ch_ix; + mt_ix = g_enb_ral_obj[instanceP].pending_req_mt_ix; + ch_ix = g_enb_ral_obj[instanceP].pending_req_ch_ix; - if ((ralpriv->pending_req_flag)%5==0){ - DEBUG("Pending Req Flag %d, Mobile %d, channel %d\n", ralpriv->pending_req_flag, mt_ix, ch_ix); - if (ralpriv->pending_req_multicast == RAL_TRUE){ + if ((g_enb_ral_obj[instanceP].pending_req_flag)%5==0){ + DEBUG("Pending Req Flag %d, Mobile %d, channel %d\n", g_enb_ral_obj[instanceP].pending_req_flag, mt_ix, ch_ix); + if (g_enb_ral_obj[instanceP].pending_req_multicast == RAL_TRUE){ mt_ix =0; ch_ix =1; } RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST,mt_ix,0); - if ((ralpriv->mt[mt_ix].radio_channel[ch_ix].status == RB_CONNECTED)||((ralpriv->pending_req_flag) > 100)){ + if ((g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].status == RB_CONNECTED)||((g_enb_ral_obj[instanceP].pending_req_flag) > 100)){ DEBUG("RAL_verifyPendingRbStatus -in- mt_ix %d - ch_ix %d \n", mt_ix, ch_ix ); // send confirmation to upper layer - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - if ((ralpriv->pending_req_flag) > 100){ - ralpriv->pending_req_status = MIH_C_STATUS_REJECTED; + g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_SUCCESS; + if ((g_enb_ral_obj[instanceP].pending_req_flag) > 100){ + g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_REJECTED; if (mt_ix == RAL_MAX_MT) - eRALlte_process_clean_channel(&(ralpriv->mcast.radio_channel)); + eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mcast.radio_channel)); else - eRALlte_process_clean_channel(&(ralpriv->mt[mt_ix].radio_channel[ch_ix])); + eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix])); } if (mt_ix == RAL_MAX_MT) - ltid = &ralpriv->mcast.ltid; + ltid = &g_enb_ral_obj[instanceP].mcast.ltid; else - ltid = &ralpriv->mt[mt_ix].ltid; + ltid = &g_enb_ral_obj[instanceP].mt[mt_ix].ltid; - if (!ralpriv->pending_mt_flag) + if (!g_enb_ral_obj[instanceP].pending_mt_flag) // To be updated and completed //aRALu_send_link_res_activate_cnf(); - eRALlte_send_link_up_indication(&ralpriv->pending_req_transaction_id, ltid, NULL, NULL, NULL, NULL); + eRALlte_send_link_up_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, ltid, NULL, NULL, NULL, NULL); else - ralpriv->pending_mt_flag = 0; - ralpriv->pending_req_flag = 0; - DEBUG("After response, Pending Req Flag = 0 , %d\n", ralpriv->pending_req_flag); + g_enb_ral_obj[instanceP].pending_mt_flag = 0; + g_enb_ral_obj[instanceP].pending_req_flag = 0; + DEBUG("After response, Pending Req Flag = 0 , %d\n", g_enb_ral_obj[instanceP].pending_req_flag); } //DEBUG("RAL_verifyPendingRbStatus - 2- \n"); } @@ -312,16 +312,13 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ // DEBUG ("\n%d , %d,", mt_ix, ch_ix); switch (ioctl_obj){ -/***************************/ case IO_OBJ_STATS: { DEBUG("Statistics requested -- FFS \n"); } break; -/***************************/ case IO_OBJ_CNX: switch (ioctl_cmd){ - /***/ case IO_CMD_LIST: { // printf("Usage: gioctl cx list\n"); @@ -333,8 +330,8 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ gifr.type=NAS_MSG_CX_LIST_REQUEST; //gifr.msg=(char *)malloc(NAS_LIST_CX_MAX*sizeof(struct nas_msg_cx_list_reply)+1); - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); + memset (g_enb_ral_obj[instanceP].buffer,0,800); + gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); msgrep=(u8 *)(gifr.msg); // DEBUG("--\n"); @@ -363,17 +360,14 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ rc = 0; } break; - /***/ default: ERR ("RAL_process_NAS_message : invalid ioctl command %d\n",ioctl_cmd); rc= -1; } //end switch ioctl_cmd break; -/***************************/ case IO_OBJ_RB: switch (ioctl_cmd){ - /***/ case IO_CMD_ADD: { // printf("Usage: gioctl rb add <lcr> <rab_id> <qos>\n"); @@ -384,20 +378,20 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ MIH_C_LINK_DN_REASON_T reason_code; // gifr.type=NAS_MSG_RB_ESTABLISHMENT_REQUEST; - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); + memset (g_enb_ral_obj[instanceP].buffer,0,800); + gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); msgreq=(struct nas_msg_rb_establishment_request *)(gifr.msg); msgrep=(struct nas_msg_rb_establishment_reply *)(gifr.msg); // if (mt_ix == RAL_MAX_MT){ // multicast - currChannel = &(ralpriv->mcast.radio_channel); + currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); msgreq->lcr = mt_ix; - memcpy ((char *)&(msgreq->mcast_group), (char *)&(ralpriv->mcast.mc_group_addr), 16); + memcpy ((char *)&(msgreq->mcast_group), (char *)&(g_enb_ral_obj[instanceP].mcast.mc_group_addr), 16); }else{ // unicast - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - msgreq->lcr = ralpriv->mt[mt_ix].ue_id; + currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); + msgreq->lcr = g_enb_ral_obj[instanceP].mt[mt_ix].ue_id; } msgreq->cnxid = currChannel->cnx_id; msgreq->rab_id = currChannel->rbId; @@ -421,32 +415,31 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ ERR(" Radio bearer establishment failure: %d\n",msgrep->status); currChannel->status = RB_DISCONNECTED; rc = -1; - ralpriv->pending_req_status = MIH_C_STATUS_REJECTED; - if (ralpriv->pending_mt_flag){ + g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_REJECTED; + if (g_enb_ral_obj[instanceP].pending_mt_flag){ reason_code = MIH_C_LINK_DOWN_REASON_NO_RESOURCE; if (mt_ix == RAL_MAX_MT) - ltid = &ralpriv->mcast.ltid; + ltid = &g_enb_ral_obj[instanceP].mcast.ltid; else - ltid = &ralpriv->mt[mt_ix].ltid; - eRALlte_send_link_down_indication(&ralpriv->pending_req_transaction_id, ltid, NULL, &reason_code); + ltid = &g_enb_ral_obj[instanceP].mt[mt_ix].ltid; + eRALlte_send_link_down_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, ltid, NULL, &reason_code); // aRALu_send_link_res_activate_cnf(); } if (mt_ix == RAL_MAX_MT) - eRALlte_process_clean_channel(&(ralpriv->mcast.radio_channel)); + eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mcast.radio_channel)); else - eRALlte_process_clean_channel(&(ralpriv->mt[mt_ix].radio_channel[ch_ix])); + eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix])); }else{ rc = 0; - ralpriv->pending_req_flag = 1; - ralpriv->pending_req_mt_ix = mt_ix; - ralpriv->pending_req_ch_ix = ch_ix; - ralpriv->pending_req_multicast = currChannel->multicast; - DEBUG("-1- pending_req_mt_ix %d, pending_req_ch_ix %d\n", ralpriv->pending_req_mt_ix, ralpriv->pending_req_ch_ix); + g_enb_ral_obj[instanceP].pending_req_flag = 1; + g_enb_ral_obj[instanceP].pending_req_mt_ix = mt_ix; + g_enb_ral_obj[instanceP].pending_req_ch_ix = ch_ix; + g_enb_ral_obj[instanceP].pending_req_multicast = currChannel->multicast; + DEBUG("-1- pending_req_mt_ix %d, pending_req_ch_ix %d\n", g_enb_ral_obj[instanceP].pending_req_mt_ix, g_enb_ral_obj[instanceP].pending_req_ch_ix); } } break; - /***/ case IO_CMD_DEL: { // printf("Usage: gioctl rb del <lcr> <rab_id>\n"); @@ -457,17 +450,17 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ MIH_C_LINK_DN_REASON_T reason_code; // gifr.type=NAS_MSG_RB_RELEASE_REQUEST; - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); + memset (g_enb_ral_obj[instanceP].buffer,0,800); + gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); msgreq=(struct nas_msg_rb_release_request *)(gifr.msg); msgrep=(struct nas_msg_rb_release_reply *)(gifr.msg); // if (mt_ix == RAL_MAX_MT){ - currChannel = &(ralpriv->mcast.radio_channel); + currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); msgreq->lcr = mt_ix; }else{ - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - msgreq->lcr = ralpriv->mt[mt_ix].ue_id; + currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); + msgreq->lcr = g_enb_ral_obj[instanceP].mt[mt_ix].ue_id; } msgreq->rab_id = currChannel->rbId; msgreq->cnxid = currChannel->cnx_id; @@ -485,32 +478,30 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ if ((msgrep->status<0)||(msgrep->cnxid!=cnxid)||(err<0)){ ERR(" Radio bearer release failure: status %d\n", msgrep->status); rc = -1; - ralpriv->pending_req_status = MIH_C_STATUS_REJECTED; + g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_REJECTED; }else{ - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; + g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_SUCCESS; } - if (ralpriv->pending_mt_flag){ + if (g_enb_ral_obj[instanceP].pending_mt_flag){ reason_code = MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT; if (mt_ix == RAL_MAX_MT) - ltid = &ralpriv->mcast.ltid; + ltid = &g_enb_ral_obj[instanceP].mcast.ltid; else - ltid = &ralpriv->mt[mt_ix].ltid; - eRALlte_send_link_down_indication(&ralpriv->pending_req_transaction_id, ltid, NULL, &reason_code); + ltid = &g_enb_ral_obj[instanceP].mt[mt_ix].ltid; + eRALlte_send_link_down_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, ltid, NULL, &reason_code); // aRALu_send_link_res_deactivate_cnf(); } // mark resource as free again anyway if (mt_ix == RAL_MAX_MT) - eRALlte_process_clean_channel(&(ralpriv->mcast.radio_channel)); + eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mcast.radio_channel)); else - eRALlte_process_clean_channel(&(ralpriv->mt[mt_ix].radio_channel[ch_ix])); + eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix])); DEBUG("Channel released : UE %d, channel %d, cnx_id %d \n\n",mt_ix, ch_ix, cnxid); } break; - /***/ - /***/ case IO_CMD_LIST: { // printf("Usage: gioctl rb list <lcr>\n"); @@ -520,12 +511,12 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ struct nas_msg_rb_list_reply *list; struct nas_msg_rb_list_request *msgreq; gifr.type=NAS_MSG_RB_LIST_REQUEST; - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); + memset (g_enb_ral_obj[instanceP].buffer,0,800); + gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); msgreq=(struct nas_msg_rb_list_request *)(gifr.msg); msgrep=(u8 *)(gifr.msg); if (mt_ix < RAL_MAX_MT){ - msgreq->lcr = ralpriv->mt[mt_ix].ue_id; + msgreq->lcr = g_enb_ral_obj[instanceP].mt[mt_ix].ue_id; }else{ msgreq->lcr = 0; mt_ix =0; //Temp @@ -548,18 +539,18 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ rc = 0; // store channel status for (i=0;i<num_rbs; i++){ - if (ralpriv->mt[mt_ix].radio_channel[i].cnx_id == list[rbi].cnxid){ - ralpriv->mt[mt_ix].radio_channel[i].nas_state = list[rbi].state; + if (g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[i].cnx_id == list[rbi].cnxid){ + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[i].nas_state = list[rbi].state; if (list[rbi].state == NAS_CX_DCH) - ralpriv->mt[mt_ix].radio_channel[i].status = RB_CONNECTED; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[i].status = RB_CONNECTED; } } if ((mt_ix==0)&&(i==num_rbs)){ - if (ralpriv->mcast.radio_channel.cnx_id == list[rbi].cnxid){ - ralpriv->mcast.radio_channel.nas_state = list[rbi].state; + if (g_enb_ral_obj[instanceP].mcast.radio_channel.cnx_id == list[rbi].cnxid){ + g_enb_ral_obj[instanceP].mcast.radio_channel.nas_state = list[rbi].state; if (list[rbi].state == NAS_CX_DCH){ - ralpriv->mcast.radio_channel.status = RB_CONNECTED; - ralpriv->mt[mt_ix].radio_channel[1].status = RB_CONNECTED; + g_enb_ral_obj[instanceP].mcast.radio_channel.status = RB_CONNECTED; + g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[1].status = RB_CONNECTED; } } } @@ -567,28 +558,25 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ DEBUG("List complete \n"); } break; - /***/ default: ERR ("RAL_process_NAS_message : invalid ioctl command %d\n",ioctl_cmd); rc= -1; } //end switch ioctl_cmd break; -/***************************/ case IO_OBJ_MEAS: switch (ioctl_cmd){ - /***/ case IO_CMD_ADD: { struct nas_msg_enb_measure_trigger *msgreq; struct nas_msg_enb_measure_trigger_reply *msgrep; // gifr.type=NAS_MSG_ENB_MEAS_TRIGGER; - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); + memset (g_enb_ral_obj[instanceP].buffer,0,800); + gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); msgreq=(struct nas_msg_enb_measure_trigger *)(gifr.msg); msgrep=(struct nas_msg_enb_measure_trigger_reply *)(gifr.msg); // - msgreq->cell_id = ralpriv->curr_cellId; + msgreq->cell_id = g_enb_ral_obj[instanceP].cell_id; // DEBUG("eNB measures triggered, cell_id %d\n", msgreq->cell_id); err=ioctl(fd, NASRG_IOCTL_RAL, &gifr); @@ -606,15 +594,14 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ } } break; - /***/ case IO_CMD_LIST: { struct nas_msg_enb_measure_retrieve *msgrep; int ix; // gifr.type=NAS_MSG_ENB_MEAS_RETRIEVE; - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); + memset (g_enb_ral_obj[instanceP].buffer,0,800); + gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); msgrep=(struct nas_msg_enb_measure_retrieve *)(gifr.msg); // DEBUG("Retrieving measure from NAS\n"); @@ -624,33 +611,30 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ rc = -1; } // Store the values received - ralpriv->num_UEs = msgrep->num_UEs; - for (ix=0; ix<ralpriv->num_UEs; ix++){ - ralpriv->rlcBufferOccupancy[ix] = msgrep->measures[ix].rlcBufferOccupancy; - ralpriv->scheduledPRB[ix] = msgrep->measures[ix].scheduledPRB; - ralpriv->totalDataVolume[ix] = msgrep->measures[ix].totalDataVolume; + g_enb_ral_obj[instanceP].num_UEs = msgrep->num_UEs; + for (ix=0; ix<g_enb_ral_obj[instanceP].num_UEs; ix++){ + g_enb_ral_obj[instanceP].rlcBufferOccupancy[ix] = msgrep->measures[ix].rlcBufferOccupancy; + g_enb_ral_obj[instanceP].scheduledPRB[ix] = msgrep->measures[ix].scheduledPRB; + g_enb_ral_obj[instanceP].totalDataVolume[ix] = msgrep->measures[ix].totalDataVolume; } - ralpriv->totalNumPRBs = msgrep->totalNumPRBs; + g_enb_ral_obj[instanceP].totalNumPRBs = msgrep->totalNumPRBs; #ifdef DEBUG_RAL_DETAILS DEBUG("Measures received- cell %d, Number of UEs %d, Total number of PRBs %d\n", msgrep->cell_id, msgrep->num_UEs, msgrep->totalNumPRBs); - for (ix=0; ix<ralpriv->num_UEs; ix++) + for (ix=0; ix<g_enb_ral_obj[instanceP].num_UEs; ix++) DEBUG("UE%d : RLC Buffers %d, scheduledPRB %d, totalDataVolume %d\n", ix, msgrep->measures[ix].rlcBufferOccupancy, msgrep->measures[ix].scheduledPRB, msgrep->measures[ix].totalDataVolume); #endif RAL_NAS_measures_analyze(); } break; - /***/ default: ERR ("RAL_process_NAS_message : invalid ioctl command %d\n",ioctl_cmd); rc= -1; } //end switch ioctl_cmd break; -/***************************/ case IO_OBJ_MC: switch (ioctl_cmd){ - /***/ case IO_CMD_ADD: { struct nas_msg_mt_mcast_join *msgreq; @@ -658,12 +642,12 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ struct ral_lte_channel *currChannel; // gifr.type=NAS_RG_MSG_MT_MCAST_JOIN; - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); + memset (g_enb_ral_obj[instanceP].buffer,0,800); + gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); msgreq=(struct nas_msg_mt_mcast_join *)(gifr.msg); msgrep=(struct nas_msg_mt_mcast_reply *)(gifr.msg); // - currChannel = &(ralpriv->mcast.radio_channel); + currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); msgreq->ue_id = mt_ix; msgreq->rab_id = currChannel->rbId; msgreq->cnxid = currChannel->cnx_id; @@ -677,18 +661,17 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ // check answer from NAS if ((msgrep->result<0)||(msgrep->ue_id!=mt_ix)||(err<0)){ ERR(" UE multicast join notification failure: %d\n",msgrep->result); - ralpriv->pending_req_status = MIH_C_STATUS_REJECTED; + g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_REJECTED; rc = -1; }else{ DEBUG(" ++ UE multicast join notification transmitted to MT \n"); - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; + g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_SUCCESS; rc = 0; } // TODO aRALu_send_link_mc_join_cnf(); } break; - /***/ case IO_CMD_DEL: { struct nas_msg_mt_mcast_leave *msgreq; @@ -696,12 +679,12 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ struct ral_lte_channel *currChannel; // gifr.type=NAS_RG_MSG_MT_MCAST_LEAVE; - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); + memset (g_enb_ral_obj[instanceP].buffer,0,800); + gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); msgreq=(struct nas_msg_mt_mcast_leave *)(gifr.msg); msgrep=(struct nas_msg_mt_mcast_reply *)(gifr.msg); // - currChannel = &(ralpriv->mcast.radio_channel); + currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); msgreq->ue_id = mt_ix; msgreq->rab_id = currChannel->rbId; msgreq->cnxid = currChannel->cnx_id; @@ -715,25 +698,21 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ // check answer from NAS if ((msgrep->result<0)||(msgrep->ue_id!=mt_ix)||(err<0)){ ERR(" UE multicast leave notification failure: %d\n",msgrep->result); - ralpriv->pending_req_status = MIH_C_STATUS_REJECTED; + g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_REJECTED; rc = -1; }else{ DEBUG(" ++ UE multicast leave notification transmitted to MT \n" ); - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; + g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_SUCCESS; rc = 0; } // TODO aRALu_send_link_mc_leave_cnf(); } break; - /***/ - /***/ default: ERR ("RAL_process_NAS_message : invalid ioctl command %d\n",ioctl_cmd); rc= -1; } //end switch ioctl_cmd break; - /***/ -/***************************/ default: ERR ("RAL_process_NAS_message : invalid ioctl object %d\n",ioctl_obj); rc= -1; @@ -741,6 +720,6 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ //rc=0; return rc; } - +*/ diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_main.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_main.c index fdfb54326c..cdbbee0d28 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_main.c +++ b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_main.c @@ -16,52 +16,43 @@ * and requests actions from lower layers to optimize handovers * between heterogeneous networks. *****************************************************************************/ +#define LTE_RAL_ENB +#define LTE_RAL_ENB_MAIN_C +//----------------------------------------------------------------------------- +#include <stdio.h> +# include <sys/epoll.h> #include <sys/select.h> +#include <net/if.h> #include <getopt.h> +#include <stdlib.h> +#include <time.h> //----------------------------------------------------------------------------- -#define DEFINE_GLOBAL_CONSTANTS -//----------------------------------------------------------------------------- -#include "lteRALenb_constants.h" -#include "lteRALenb_variables.h" -#include "lteRALenb_proto.h" -#include "lteRALenb_mih_msg.h" -//----------------------------------------------------------------------------- -#include "MIH_C.h" +#include "lteRALenb.h" +#include "intertask_interface.h" +#include "OCG.h" //----------------------------------------------------------------------------- + // LTE AS sub-system //#include "nas_ue_ioctl.h" -#include <net/if.h> #ifdef RAL_REALTIME -#include "rrc_nas_primitives.h" -#include "nasrg_constant.h" -#include "nasrg_iocontrol.h" +//LG#include "rrc_nas_primitives.h" +//LG#include "nasrg_constant.h" +//LG#include "nasrg_iocontrol.h" #endif /****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ +/******************* G L O B A L D E F I N I T I O N S *****************/ /****************************************************************************/ +extern OAI_Emulation oai_emulation; -#ifdef RAL_REALTIME -//ioctl -struct nas_ioctl gifr; -int fd; -#endif -#ifdef RAL_DUMMY -/* NAS socket file descriptor */ -int g_sockd_nas; // referenced in lteRALenb_NAS.c -#endif -/* RAL LTE internal data */ -struct ral_lte_priv *ralpriv; - -int init_flag = 0; +//int init_flag = 0; /****************************************************************************/ /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ -static int g_log_output; // static struct ral_lte_priv rl_priv; // // // static void arg_usage(const char* name); @@ -70,20 +61,19 @@ static int g_log_output; // static void get_IPv6_addr(const char* if_name); // static int RAL_initialize(int argc, const char *argv[]); -struct ral_lte_priv rl_priv; +//struct ral_lte_priv rl_priv; // void arg_usage(const char* name); // int parse_opts(int argc, char* argv[]); // void get_IPv6_addr(const char* if_name); // int RAL_initialize(int argc, const char *argv[]); -#ifdef RAL_DUMMY -int netl_s; /* NAS net link socket */ -#endif + /****************************************************************************/ // Next part is used to receive the triggers /****************************************************************************/ +/* #ifdef MUSER_CONTROL #define USER_IP_ADDRESS "127.0.0.1" @@ -91,10 +81,6 @@ int netl_s; /* NAS net link socket */ #define NAS_IP_ADDRESS "127.0.0.1" #define NAS_LISTENING_PORT_FOR_USER "22222" -char *g_mih_user_ip_address = USER_IP_ADDRESS; -char *g_mih_user_remote_port = USER_REMOTE_PORT; -char *g_nas_ip_address = NAS_IP_ADDRESS; -char *g_nas_listening_port_for_mih_user = NAS_LISTENING_PORT_FOR_USER; int g_sockd_user; signed int g_user_congestion = 0; unsigned int g_ratio_modif = 0; @@ -110,14 +96,14 @@ int lteRALenb_trigger_connect(void){ memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ + hints.ai_family = AF_UNSPEC; // Allow IPv4 or IPv6 + hints.ai_socktype = SOCK_DGRAM; // Datagram socket hints.ai_flags = 0; - hints.ai_protocol = 0; /* Any protocol */ + hints.ai_protocol = 0; // Any protocol s = getaddrinfo(g_mih_user_ip_address, g_mih_user_remote_port, &hints, &result); if (s != 0) { - printf("ERR getaddrinfo: %s\n", gai_strerror(s)); + LOG_E (RAL_ENB,"getaddrinfo: %s\n", gai_strerror(s)); return -1; } @@ -130,66 +116,66 @@ int lteRALenb_trigger_connect(void){ setsockopt( g_sockd_user, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); if(rp->ai_family == AF_INET) { - printf("Destination address %s is an ipv4 address\n",g_mih_user_ip_address); + LOG_D (RAL_ENB, "Destination address %s is an ipv4 address\n",g_mih_user_ip_address); addr = (struct sockaddr_in *)(&buf[0]); addr->sin_port = htons(atoi(g_nas_listening_port_for_mih_user)); addr->sin_family = AF_INET; s = inet_pton(AF_INET, g_nas_ip_address, &addr->sin_addr); if (s <= 0) { if (s == 0) { - printf("ERR IP address should be a IPv4 ADDR - But found not in presentation format : %s\n", g_nas_ip_address); + LOG_E (RAL_ENB, " IP address should be a IPv4 ADDR - But found not in presentation format : %s\n", g_nas_ip_address); } else { - printf("ERR %s - inet_pton( IPv4 ADDR %s): %s\n", __FUNCTION__, g_nas_ip_address, strerror(s)); + LOG_E (RAL_ENB, " %s - inet_pton( IPv4 ADDR %s): %s\n", __FUNCTION__, g_nas_ip_address, strerror(s)); } return -1; } s = bind(g_sockd_user, (const struct sockaddr *)addr, sizeof(struct sockaddr_in)); if (s == -1) { - printf("ERR IPv4 Address Bind: %s\n", strerror(errno)); + LOG_D (RAL_ENB, "IPv4 Address Bind: %s\n", strerror(errno)); return -1; } // sockd_mihf is of type SOCK_DGRAM, rp->ai_addr is the address to which datagrams are sent by default if (connect(g_sockd_user, rp->ai_addr, rp->ai_addrlen) != -1) { - printf(" lteRALeNB is now ready to receive triggers\n"); + LOG_D (RAL_ENB, " lteRALeNB is now ready to receive triggers\n"); return 0; } else { close(g_sockd_user); } } else if (rp->ai_family == AF_INET6) { - printf("Destination address %s is an ipv6 address\n",g_mih_user_ip_address); + LOG_D (RAL_ENB, "Destination address %s is an ipv6 address\n",g_mih_user_ip_address); addr6 = (struct sockaddr_in6 *)(&buf[0]); addr6->sin6_port = htons(atoi(g_nas_listening_port_for_mih_user)); addr6->sin6_family = AF_INET6; s = inet_pton(AF_INET, g_nas_ip_address, &addr6->sin6_addr); if (s <= 0) { if (s == 0) { - printf("ERR IP address should be a IPv6 ADDR, But found not in presentation format : %s\n", g_nas_ip_address); + LOG_E (RAL_ENB, "IP address should be a IPv6 ADDR, But found not in presentation format : %s\n", g_nas_ip_address); } else { - printf("ERR %s - inet_pton( IPv6 ADDR %s): %s\n", __FUNCTION__, g_nas_ip_address, strerror(s)); + LOG_E (RAL_ENB, "%s - inet_pton( IPv6 ADDR %s): %s\n", __FUNCTION__, g_nas_ip_address, strerror(s)); } return -1; } s = bind(g_sockd_user, (const struct sockaddr *)addr6, sizeof(struct sockaddr_in)); if (s == -1) { - printf("ERR IPv6 Address Bind: %s\n", strerror(errno)); + LOG_D (RAL_ENB, "IPv6 Address Bind: %s\n", strerror(errno)); return -1; } if (connect(g_sockd_user, rp->ai_addr, rp->ai_addrlen) != -1) { - printf(" lteRALeNB is now ready to receive triggers\n"); + LOG_D (RAL_ENB, "lteRALeNB is now ready to receive triggers\n"); return 0; } else { close(g_sockd_user); } } else { - printf("ERR %s is an unknown address format %d\n",g_mih_user_ip_address,rp->ai_family); + LOG_E (RAL_ENB, "%s is an unknown address format %d\n",g_mih_user_ip_address,rp->ai_family); } close(g_sockd_user); } - if (rp == NULL) { /* No address succeeded */ - printf("ERR Could not establish socket to MIH-User\n"); + if (rp == NULL) { // No address succeeded + LOG_E (RAL_ENB, "Could not establish socket to MIH-User\n"); return -1; } return -1; @@ -212,7 +198,7 @@ int lteRALenb_trigger_receive(int sock){ break; case 0x01: printf("USER ASK FOR TRIGGERING CONGESTION\n"); - ralpriv->rlcBufferOccupancy[0] = 95; + g_enb_ral_obj[instanceP].rlcBufferOccupancy[0] = 95; RAL_NAS_report_congestion(0); break; default: @@ -221,163 +207,21 @@ int lteRALenb_trigger_receive(int sock){ } return 0; } -#endif - -/****************************************************************************/ - - - -/**************************************************************************** - ** Name: arg_usage() ** - ** Description: Displays command line usage ** - ** Inputs: name: Name of the running process ** - ** ** - ***************************************************************************/ -static void arg_usage(const char *name){ -//----------------------------------------------------------------------------- - fprintf(stderr, - "Usage: %s [options]\nOptions:\n" - " -V, --version Display version information\n" - " -?, -h, --help Display this help text\n" - " -P <number>, --ral-listening-port Listening port for incoming MIH-F messages\n" - " -I <string>, --ral-ip-address Binding IP(v4 or v6) address for RAL\n" - " -p <number>, --mihf-remote-port MIH-F remote port\n" - " -i <string>, --mihf-ip-address MIH-F IP(v4 or v6) address\n" - " -l <number>, --mihf-link-id MIH-F link identifier\n" - " -m <number>, --mihf-id MIH-F identifier\n" - " -c, --output-to-console All stream outputs are redirected to console\n" - " -f, --output-to-file All stream outputs are redirected to file\n" - " -s, --output-to-syslog All stream outputs are redirected to syslog\n", - name); -} -/**************************************************************************** - ** Name: parse_opts() ** - ** Description: Parses the command line parameters ** - ** Inputs: argc: Number of parameters in the command line ** - ** argv: Command line parameters ** - ***************************************************************************/ -static int parse_opts(int argc, char *argv[]){ -//----------------------------------------------------------------------------- - static struct option long_opts[] = { - {"version", 0, 0, 'V'}, - {"help", 0, 0, 'h'}, - {"help", 0, 0, '?'}, - {"ral-listening-port", optional_argument, 0, 'P'}, - {"ral-ip-address", optional_argument, 0, 'I'}, - {"mihf-remote-port", optional_argument, 0, 'p'}, - {"mihf-ip-address", optional_argument, 0, 'i'}, - {"mihf-link-id", optional_argument, 0, 'l'}, - {"mihf-id", optional_argument, 0, 'm'}, - {"output-to-console", 0, 0, 'c'}, - {"output-to-file", 0, 0, 'f'}, - {"output-to-syslog", 0, 0, 's'}, - {0, 0, 0, 0} - }; - - /* parse all other cmd line parameters than -c */ - while (1) { - int idx, c; - c = getopt_long(argc, argv, "P:I:p:i:l:m:Vh?cfs", long_opts, &idx); - if (c == -1) break; - - switch (c) { - case 'V': - fprintf(stderr, "SVN MODULE VERSION: %s\n", SVN_REV); - return -1; - case '?': - case 'h': - arg_usage(basename(argv[0])); - return -1; - case 'i': - strncpy(g_mihf_ip_address, optarg, strlen(g_mihf_ip_address)); - break; - case 'p': - strncpy(g_mihf_remote_port, optarg, strlen(g_mihf_remote_port)); - break; - case 'P': - strncpy(g_ral_listening_port_for_mihf, optarg, - strlen(g_ral_listening_port_for_mihf)); - break; - case 'I': - strncpy(g_ral_ip_address, optarg, strlen(g_ral_ip_address)); - break; - case 'l': - strncpy(g_link_id, optarg, strlen(g_link_id)); - break; - case 'm': - strncpy(g_mihf_id, optarg, strlen(g_mihf_id)); - break; - case 'c': - g_log_output = LOG_TO_CONSOLE; - break; - case 'f': - g_log_output = LOG_TO_FILE; - break; - case 's': - g_log_output = LOG_TO_SYSTEM; - break; - default: - break; - }; - } - return 0; -} - -#ifdef RAL_REALTIME -//--------------------------------------------------------------------------- -void IAL_NAS_ioctl_init(void){ -//--------------------------------------------------------------------------- - // Get an UDP IPv6 socket ?? - fd=socket(AF_INET6, SOCK_DGRAM, 0); - if (fd<0) { - ERR("Error opening socket for ioctl\n"); - exit(1); - } - strcpy(gifr.name, "oai0"); -} #endif + */ +/****************************************************************************/ -#ifdef RAL_DUMMY -/**************************************************************************** - ** Name: NAS_Netlink_socket_init() ** - ** Description: Initializes the communication channel with the NAS dummy ** - ** Others: netl_s : the NAS net link socket ** - ** ** - ***************************************************************************/ -void NAS_Netlink_socket_init(void){ -//----------------------------------------------------------------------------- - int len; - struct sockaddr_un local; - if ((netl_s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - perror("NAS_Netlink_socket_init : socket() failed"); - exit(1); - } - - local.sun_family = AF_UNIX; - strcpy(local.sun_path, SOCK_RAL_NAS_PATH); - unlink(local.sun_path); - len = strlen(local.sun_path) + sizeof(local.sun_family); - if (bind(netl_s, (struct sockaddr *)&local, len) == -1) { - perror("NAS_Netlink_socket_init : bind() failed"); - exit(1); - } - if (listen(netl_s, 1) == -1) { - perror("NAS_Netlink_socket_init : listen() failed"); - exit(1); - } -} -#endif /**************************************************************************** ** Name: get_IPv6_addr() ** ** Description: Gets the IPv6 address of the specified network interface. ** ** Inputs: if_name Interface name ** ***************************************************************************/ -void get_IPv6_addr(const char* if_name){ -//----------------------------------------------------------------------------- +void eRAL_get_IPv6_addr(const char* if_name){ + //----------------------------------------------------------------------------- #define IPV6_ADDR_LINKLOCAL 0x0020U FILE *f; @@ -389,34 +233,34 @@ void get_IPv6_addr(const char* if_name){ char temp_addr[32]; int i, j; - DEBUG(" %s : network interface %s\n", __FUNCTION__, if_name); + LOG_D(RAL_ENB, " %s : network interface %s\n", __FUNCTION__, if_name); if ((f = fopen("/proc/net/if_inet6", "r")) != NULL) { while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7], - &if_idx, &plen, &scope, &dad_status, devname) != EOF) { + addr6p[0], addr6p[1], addr6p[2], addr6p[3], + addr6p[4], addr6p[5], addr6p[6], addr6p[7], + &if_idx, &plen, &scope, &dad_status, devname) != EOF) { if (!strcmp(devname, if_name)) { found = 1; // retrieve numerical value if ((scope == 0) || (scope == IPV6_ADDR_LINKLOCAL)) { - DEBUG(" adresse %s:%s:%s:%s:%s:%s:%s:%s", + LOG_D(RAL_ENB, " adresse %s:%s:%s:%s:%s:%s:%s:%s", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7]); - DEBUG(" Scope:"); + LOG_D(RAL_ENB, " Scope:"); switch (scope) { case 0: - DEBUG(" Global\n"); + LOG_D(RAL_ENB, " Global\n"); break; case IPV6_ADDR_LINKLOCAL: - DEBUG(" Link\n"); + LOG_D(RAL_ENB, " Link\n"); break; default: - DEBUG(" Unknown\n"); + LOG_D(RAL_ENB, " Unknown\n"); break; } - DEBUG(" Numerical value: "); + LOG_D(RAL_ENB, " Numerical value: "); for (i = 0; i < 8; i++) { for (j = 0; j < 4; j++) { addr6p[i][j]= toupper(addr6p[i][j]); @@ -431,162 +275,289 @@ void get_IPv6_addr(const char* if_name){ } for (i = 0; i < 16; i++) { - DEBUG("-%hhx-",my_addr[i]); + LOG_D(RAL_ENB, "-%hhx-",my_addr[i]); } - DEBUG("\n"); + LOG_D(RAL_ENB, "\n"); } } } fclose(f); if (!found) { - ERR(" %s : interface %s not found\n\n", __FUNCTION__, if_name); + LOG_E(RAL_ENB, " %s : interface %s not found\n\n", __FUNCTION__, if_name); } } } +void eRAL_init_default_values(void) { + g_conf_enb_ral_listening_port = ENB_DEFAULT_LOCAL_PORT_RAL; + g_conf_enb_ral_ip_address = ENB_DEFAULT_IP_ADDRESS_RAL; + g_conf_enb_ral_link_id = ENB_DEFAULT_LINK_ID_RAL; + g_conf_enb_ral_link_address = ENB_DEFAULT_LINK_ADDRESS_RAL; + g_conf_enb_mihf_remote_port = ENB_DEFAULT_REMOTE_PORT_MIHF; + g_conf_enb_mihf_ip_address = ENB_DEFAULT_IP_ADDRESS_MIHF; + g_conf_enb_mihf_id = ENB_DEFAULT_MIHF_ID; +} + /**************************************************************************** - ** Name: RAL_initialize() ** + ** Name: eRAL_initialize() ** ** ** ** Description: Performs overall RAL LTE initialisations: ** ** ** - ** Inputs: argc: Number of parameters in the command line ** - ** argv: Command line parameters ** + ** Inputs: None ** + ** ** ***************************************************************************/ -int RAL_initialize(int argc, const char *argv[]){ -//----------------------------------------------------------------------------- - MIH_C_TRANSACTION_ID_T transaction_id; +int eRAL_initialize(void){ + //----------------------------------------------------------------------------- + ral_enb_instance_t instance = 0; + char *char_tmp = NULL; - #ifdef RAL_DUMMY - unsigned int t; - struct sockaddr_un nas_socket; - #endif + MIH_C_init(); - ralpriv = &rl_priv; - memset(ralpriv, 0, sizeof(struct ral_lte_priv)); + srand(time(NULL)); - /* Initialize defaults - */ - g_ral_ip_address = strdup(DEFAULT_IP_ADDRESS_RAL); - g_ral_listening_port_for_mihf = strdup(DEFAULT_LOCAL_PORT_RAL); - g_mihf_remote_port = strdup(DEFAULT_REMOTE_PORT_MIHF); - g_mihf_ip_address = strdup(DEFAULT_IP_ADDRESS_MIHF); - g_sockd_mihf = -1; - g_link_id = strdup(DEFAULT_LINK_ID); - g_mihf_id = strdup(DEFAULT_MIHF_ID); - g_log_output = LOG_TO_CONSOLE; - - /* Parse command line parameters - */ - if (parse_opts(argc, (char**) argv) < 0) { - exit(0); - } + memset(g_enb_ral_obj, 0, sizeof(lte_ral_enb_object_t)*MAX_MODULES); - MIH_C_init(g_log_output); + g_enb_ral_fd2instance = hashtable_create (32, NULL, hash_free_int_func); - DEBUG(" %s -I %s -P %s -i %s -p %s -l %s -m %s\n", argv[0], g_ral_ip_address, g_ral_listening_port_for_mihf, - g_mihf_ip_address, g_mihf_remote_port, g_link_id, g_mihf_id); + for (instance = 0; instance < oai_emulation.info.nb_enb_local; instance++) { + char_tmp = calloc(1, strlen(g_conf_enb_ral_listening_port) + 3); // 2 digits + \0 ->99 instances + sprintf(char_tmp,"%d", atoi(g_conf_enb_ral_listening_port) + instance); + g_enb_ral_obj[instance].ral_listening_port = char_tmp; - /* Connect to the MIF Function - */ - DEBUG(" Connect to the MIH-F ...\n"); - if (eRALlte_mihf_connect() < 0 ) { - ERR(" %s : Could not connect to MIH-F...exiting\n", __FUNCTION__); - exit(-1); - } + g_enb_ral_obj[instance].ral_ip_address = strdup(g_conf_enb_ral_ip_address); + g_enb_ral_obj[instance].ral_link_address = strdup(g_conf_enb_ral_link_address); + + char_tmp = calloc(1, strlen(g_conf_enb_mihf_remote_port) + 3); // 2 digits + \0 ->99 instances + sprintf(char_tmp, "%d", atoi(g_conf_enb_mihf_remote_port) + instance); + g_enb_ral_obj[instance].mihf_remote_port = char_tmp; + + g_enb_ral_obj[instance].mihf_ip_address = strdup(g_conf_enb_mihf_ip_address); - // excluded MIH_C_LINK_AC_TYPE_NONE - // excluded MIH_C_LINK_AC_TYPE_LINK_DISCONNECT - // excluded MIH_C_LINK_AC_TYPE_LINK_LOW_POWER - // excluded MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN - // excluded MIH_C_LINK_AC_TYPE_LINK_POWER_UP - ralpriv->mih_supported_link_action_list = (1 << MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR) | + char_tmp = calloc(1, strlen(g_conf_enb_mihf_id) + 3); // 2 digits + \0 ->99 instances + sprintf(char_tmp, "%s%02d",g_conf_enb_mihf_id, instance); + g_enb_ral_obj[instance].mihf_id = char_tmp; + + char_tmp = calloc(1, strlen(g_conf_enb_ral_link_id) + 3); // 2 digits + \0 ->99 instances + sprintf(char_tmp, "%s%02d",g_conf_enb_ral_link_id, instance); + g_enb_ral_obj[instance].link_id = char_tmp; + char_tmp = NULL; + + // excluded MIH_C_LINK_AC_TYPE_NONE + // excluded MIH_C_LINK_AC_TYPE_LINK_DISCONNECT + // excluded MIH_C_LINK_AC_TYPE_LINK_LOW_POWER + // excluded MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN + // excluded MIH_C_LINK_AC_TYPE_LINK_POWER_UP + g_enb_ral_obj[instance].mih_supported_link_action_list = (1 << MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR) | (1 << MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES) | (1 << MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES); - // excluded MIH_C_BIT_LINK_DETECTED - // excluded MIH_C_BIT_LINK_GOING_DOWN - // excluded MIH_C_BIT_LINK_HANDOVER_IMMINENT - // excluded MIH_C_BIT_LINK_HANDOVER_COMPLETE - // excluded MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS - ralpriv->mih_supported_link_event_list = MIH_C_BIT_LINK_UP | MIH_C_BIT_LINK_DOWN | MIH_C_BIT_LINK_PARAMETERS_REPORT; - // excluded MIH_C_BIT_LINK_GET_PARAMETERS - // excluded MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS - ralpriv->mih_supported_link_command_list = MIH_C_BIT_LINK_EVENT_SUBSCRIBE | MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS | + // excluded MIH_C_BIT_LINK_DETECTED + // excluded MIH_C_BIT_LINK_GOING_DOWN + // excluded MIH_C_BIT_LINK_HANDOVER_IMMINENT + // excluded MIH_C_BIT_LINK_HANDOVER_COMPLETE + // excluded MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS + g_enb_ral_obj[instance].mih_supported_link_event_list = MIH_C_BIT_LINK_UP | MIH_C_BIT_LINK_DOWN | MIH_C_BIT_LINK_PARAMETERS_REPORT; + // excluded MIH_C_BIT_LINK_GET_PARAMETERS + // excluded MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS + g_enb_ral_obj[instance].mih_supported_link_command_list = MIH_C_BIT_LINK_EVENT_SUBSCRIBE | MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS | MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE | MIH_C_BIT_LINK_ACTION; - NOTICE("[MSC_NEW][%s][MIH-F=%s]\n", getTimeStamp4Log(), g_mihf_id); - NOTICE("[MSC_NEW][%s][RAL=%s]\n", getTimeStamp4Log(), g_link_id); - NOTICE("[MSC_NEW][%s][NAS=%s]\n", getTimeStamp4Log(), "nas"); + g_enb_ral_obj[instance].link_mihcap_flag = MIH_C_BIT_EVENT_SERVICE_SUPPORTED | MIH_C_BIT_COMMAND_SERVICE_SUPPORTED | MIH_C_BIT_INFORMATION_SERVICE_SUPPORTED; + + g_enb_ral_obj[instance].net_caps = MIH_C_BIT_NET_CAPS_QOS_CLASS5 | MIH_C_BIT_NET_CAPS_INTERNET_ACCESS | MIH_C_BIT_NET_CAPS_MIH_CAPABILITY; + + + g_enb_ral_obj[instance].transaction_id = (MIH_C_TRANSACTION_ID_T)rand(); + + //LOG_N(RAL_ENB, "[MSC_NEW][%s][MIH-F=%s]\n", getTimeStamp4Log(), g_mihf_id); + //LOG_N(RAL_ENB, "[MSC_NEW][%s][RAL=%s]\n", getTimeStamp4Log(), g_link_id); + //LOG_N(RAL_ENB, "[MSC_NEW][%s][NAS=%s]\n", getTimeStamp4Log(), "nas"); + + + g_enb_ral_obj[instance].ue_htbl = hashtable_create(32, NULL, NULL); + + LOG_D(RAL_ENB, " Connect to the MIH-F for instance %d...\n", instance); + g_enb_ral_obj[instance].mih_sock_desc = -1; + if (eRAL_mihf_connect(instance) < 0 ) { + LOG_E(RAL_ENB, " %s : Could not connect to MIH-F...\n", __FUNCTION__); + // TO DO RETRY LATER + //exit(-1); + } else { + itti_subscribe_event_fd(TASK_RAL_ENB, g_enb_ral_obj[instance].mih_sock_desc); + hashtable_insert(g_enb_ral_fd2instance, g_enb_ral_obj[instance].mih_sock_desc, (void*)instance); + } + } + + + + /*Initialize the NAS driver communication channel */ - #ifdef RAL_REALTIME - IAL_NAS_ioctl_init(); - #endif - #ifdef RAL_DUMMY - NAS_Netlink_socket_init(); - DEBUG(" Waiting for a connection from the NAS Driver ...\n"); - t = sizeof(nas_socket); - if ((g_sockd_nas = accept(netl_s, (struct sockaddr *)&nas_socket, &t)) == -1) { - perror("RAL_initialize : g_sockd_nas - accept() failed"); - exit(1); - } - #endif - DEBUG("NAS Driver Connected.\n\n"); +#ifdef RAL_REALTIME + //LG IAL_NAS_ioctl_init(); +#endif +#ifdef RAL_DUMMY + //LG NAS_Netlink_socket_init(); + //LG LOG_D(RAL_ENB, " Waiting for a connection from the NAS Driver ...\n"); + //LG t = sizeof(nas_socket); + //LG if ((g_sockd_nas = accept(netl_s, (struct sockaddr *)&nas_socket, &t)) == -1) { + //LG perror("RAL_initialize : g_sockd_nas - accept() failed"); + //LG exit(1); + //LG } +#endif + LOG_D(RAL_ENB, "NAS Driver Connected.\n\n"); /* Start listening to user commands for triggers*/ - #ifdef MUSER_CONTROL - lteRALenb_trigger_connect(); - #endif +#ifdef MUSER_CONTROL + //LG lteRALenb_trigger_connect(); +#endif /*Get the interface IPv6 address */ - #ifdef RAL_DUMMY - get_IPv6_addr("eth0"); - #else - #ifdef RAL_REALTIME - get_IPv6_addr("oai0"); - #endif - #endif - -// Get list of MTs - DEBUG("Obtaining list of MTs\n\n"); - #ifdef RAL_REALTIME - init_flag=1; - RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST,0,0); - RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST,0,0); - init_flag=0; - #endif - #ifdef RAL_DUMMY - eRALlte_NAS_get_MTs_list(); - #endif - RAL_printInitStatus(); - ralpriv->pending_req_flag = 0; -// - ralpriv->pending_mt_timer = -1; - ralpriv->pending_mt_flag = 0; -// - DEBUG(" List of MTs initialized\n\n"); - - // Initialize measures for demo3 - ralpriv->meas_polling_interval = RAL_DEFAULT_MEAS_POLLING_INTERVAL; - ralpriv->meas_polling_counter = 1; - - ralpriv->congestion_flag = RAL_FALSE; - ralpriv->measures_triggered_flag = RAL_FALSE; - ralpriv->congestion_threshold = RAL_DEFAULT_CONGESTION_THRESHOLD; - transaction_id = (MIH_C_TRANSACTION_ID_T)0; - - eRALlte_send_link_register_indication(&transaction_id); +#ifdef RAL_DUMMY + //LG get_IPv6_addr("eth0"); +#else +#ifdef RAL_REALTIME + //LG get_IPv6_addr("oai0"); +#endif +#endif + + // Get list of MTs + //LG LOG_D(RAL_ENB, "Obtaining list of MTs\n\n"); +#ifdef RAL_REALTIME + //init_flag=1; + //LG RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST,0,0); + //LG RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST,0,0); + //init_flag=0; +#endif +#ifdef RAL_DUMMY + //LG eRALlte_NAS_get_MTs_list(); +#endif +// RAL_printInitStatus(0); +// g_enb_ral_obj[instanceP].pending_req_flag = 0; +// // +// g_enb_ral_obj[instanceP].pending_mt_timer = -1; +// g_enb_ral_obj[instanceP].pending_mt_flag = 0; +// // +// LOG_D(RAL_ENB, " List of MTs initialized\n\n"); + +// // Initialize measures for demo3 +// g_enb_ral_obj[instanceP].meas_polling_interval = RAL_DEFAULT_MEAS_POLLING_INTERVAL; +// g_enb_ral_obj[instanceP].meas_polling_counter = 1; + +// g_enb_ral_obj[instanceP].congestion_flag = RAL_FALSE; +// g_enb_ral_obj[instanceP].measures_triggered_flag = RAL_FALSE; +// g_enb_ral_obj[instanceP].congestion_threshold = RAL_DEFAULT_CONGESTION_THRESHOLD; +// transaction_id = (MIH_C_TRANSACTION_ID_T)0; + +// eRALlte_send_link_register_indication(&transaction_id); return 0; } +void eRAL_process_file_descriptors(struct epoll_event *events, int nb_events) +{ + int i; + ral_enb_instance_t instance; + hashtable_rc_t rc; + + if (events == NULL) { + return; + } + + for (i = 0; i < nb_events; i++) { + rc = hashtable_get(g_enb_ral_fd2instance, events[i].data.fd, (void**)&instance); + if (rc == HASH_TABLE_OK) { + eRAL_mih_link_process_message(instance); + } + } +} + +void* eRAL_task(void *args_p) { + int nb_events; + struct epoll_event *events; + MessageDef *msg_p = NULL; + const char *msg_name = NULL; + instance_t instance = 0; + + + eRAL_initialize(); + itti_mark_task_ready (TASK_RAL_ENB); + + while(1) { + // Wait for a message + itti_receive_msg (TASK_RAL_ENB, &msg_p); + + if (msg_p != NULL) { + + msg_name = ITTI_MSG_NAME (msg_p); + instance = ITTI_MSG_INSTANCE (msg_p); + + switch (ITTI_MSG_ID(msg_p)) { + case TERMINATE_MESSAGE: + // TO DO + itti_exit_task (); + break; + + case TIMER_HAS_EXPIRED: + LOG_D(RAL_ENB, "Received %s\n", msg_name); + break; + + case RRC_RAL_SYSTEM_CONFIGURATION_IND: + LOG_D(RAL_ENB, "Received %s\n", msg_name); + eRAL_rx_rrc_ral_system_configuration_indication(instance, msg_p); + break; + + case RRC_RAL_CONNECTION_ESTABLISHMENT_IND: + LOG_D(RAL_ENB, "Received %s\n", msg_name); + eRAL_rx_rrc_ral_connection_establishment_indication(instance, msg_p); + break; + + case RRC_RAL_CONNECTION_REESTABLISHMENT_IND: + LOG_D(RAL_ENB, "Received %s\n", msg_name); + eRAL_rx_rrc_ral_connection_reestablishment_indication(instance, msg_p); + break; + + case RRC_RAL_CONNECTION_RECONFIGURATION_IND: + LOG_D(RAL_ENB, "Received %s\n", msg_name); + eRAL_rx_rrc_ral_connection_reconfiguration_indication(instance, msg_p); + break; + + case RRC_RAL_MEASUREMENT_REPORT_IND: + LOG_D(RAL_ENB, "Received %s\n", msg_name); + eRAL_rx_rrc_ral_measurement_report_indication(instance, msg_p); + break; + + case RRC_RAL_CONNECTION_RELEASE_IND: + LOG_D(RAL_ENB, "Received %s\n", msg_name); + eRAL_rx_rrc_ral_connection_release_indication(instance, msg_p); + break; + + case RRC_RAL_CONFIGURE_THRESHOLD_CONF: + LOG_D(RAL_ENB, "Received %s\n", msg_name); + eRAL_rx_rrc_ral_configure_threshold_conf(instance, msg_p); + break; + default: + LOG_E(RAL_ENB, "Received unexpected message %s\n", msg_name); + break; + } + free(msg_p); + msg_p = NULL; + } + nb_events = itti_get_events(TASK_RAL_ENB, &events); + /* Now handle notifications for other sockets */ + if (nb_events > 0) { + eRAL_process_file_descriptors(events, nb_events); + } + } +} + /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -int main(int argc, const char *argv[]){ +/*int main(int argc, const char *argv[]){ //----------------------------------------------------------------------------- int rc, done; fd_set readfds; @@ -595,11 +566,11 @@ int main(int argc, const char *argv[]){ RAL_initialize(argc, argv); - ralpriv->pending_mt_timer = 0; + g_enb_ral_obj[instanceP].pending_mt_timer = 0; done = 0; do { - /* Initialize fd_set and wait for input */ + // Initialize fd_set and wait for input FD_ZERO(&readfds); FD_SET(g_sockd_mihf, &readfds); #ifdef RAL_DUMMY @@ -616,29 +587,29 @@ int main(int argc, const char *argv[]){ perror("main : select() failed"); done = 1; } - /* Something is ready for being read */ + // Something is ready for being read else if (rc >= 0){ - /* Read data coming from the MIH Function */ + // Read data coming from the MIH Function if (FD_ISSET(g_sockd_mihf, &readfds)) { done = eRALlte_mih_link_process_message(); } #ifdef RAL_DUMMY - /* Read data coming from the NAS driver */ + // Read data coming from the NAS driver if (FD_ISSET(g_sockd_nas, &readfds)) { //printf("Received something from NAS\n"); done = eRALlte_NAS_process_message(); } #endif #ifdef MUSER_CONTROL - /* Get triggers */ + // Get triggers if (FD_ISSET(g_sockd_user,&readfds)){ done = lteRALenb_trigger_receive(g_sockd_user); } #endif - /* Wait until next pending MT's timer expiration */ - if (ralpriv->pending_mt_timer > 0) { - ralpriv->pending_mt_timer --; + // Wait until next pending MT's timer expiration + if (g_enb_ral_obj[instanceP].pending_mt_timer > 0) { + g_enb_ral_obj[instanceP].pending_mt_timer --; eRALlte_process_verify_pending_mt_status(); } @@ -650,9 +621,9 @@ int main(int argc, const char *argv[]){ time_counter = 1; } //get measures from NAS - timer = 21x100ms -- impair - if (ralpriv->meas_polling_counter ++ == ralpriv->meas_polling_interval){ + if (g_enb_ral_obj[instanceP].meas_polling_counter ++ == g_enb_ral_obj[instanceP].meas_polling_interval){ RAL_NAS_measures_polling(); - ralpriv->meas_polling_counter =1; + g_enb_ral_obj[instanceP].meas_polling_counter =1; } } @@ -662,3 +633,4 @@ int main(int argc, const char *argv[]){ MIH_C_exit(); return 0; } + */ diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_mih_msg.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_mih_msg.c index aa01603410..d96499fabe 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_mih_msg.c +++ b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_mih_msg.c @@ -25,7 +25,7 @@ Openair Tech : openair_tech@eurecom.fr Forums : http://forums.eurecom.fsr/openairinterface Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ + *******************************************************************************/ /*! \file lteRALenb_mih_msg.c * \brief Interface for MIH primitives in LTE-RAL-ENB * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic @@ -34,15 +34,9 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#include "lteRALenb_mih_msg.h" - -#include "lteRALenb_constants.h" -#include "lteRALenb_variables.h" - -#include "lteRALenb_subscribe.h" -#include "lteRALenb_parameters.h" -#include "lteRALenb_thresholds.h" -#include "lteRALenb_action.h" +#define LTE_RAL_ENB +#define LTE_RAL_ENB_MIH_MSG_C +#include "lteRALenb.h" /****************************************************************************/ /******************* G L O C A L D E F I N I T I O N S *****************/ @@ -61,17 +55,6 @@ static u_int8_t g_msg_codec_send_buffer[MSG_CODEC_SEND_BUFFER_SIZE] = {}; static char g_msg_print_buffer[8192] = {}; static char g_msg_codec_print_buffer[8192] = {}; -static int eRALlte_mih_link_msg_decode(Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP); - -static int eRALlte_send_to_mih(const u_int8_t *bufferP, int lenP); - -static void eRALlte_print_buffer(const u_int8_t * bufferP, int lenP); - -#ifdef MSCGEN_PYTOOL -#define MSC_GEN_BUF_SIZE 1024 -static char g_msc_gen_buf[MSC_GEN_BUF_SIZE]; -static unsigned int g_msc_gen_buffer_index; -#endif /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -83,7 +66,7 @@ static unsigned int g_msc_gen_buffer_index; */ /**************************************************************************** - ** Name: eRALlte_send_link_register_indication() ** + ** Name: eRAL_send_link_register_indication() ** ** Description: Sends a Link_Register.indication message to the MIHF. ** ** This message is ODTONE specific and not defined by the 802.21 ** ** standard. It allows the Link SAP to send informations to the MIHF ** @@ -91,17 +74,17 @@ static unsigned int g_msc_gen_buffer_index; ** Upon receiving this message the MIHF executes its Link SAPs ** ** discovery procedure in order to get the full link capabilities. ** ** Inputs: tidP Transaction identifier ** - ** Others: g_link_id, g_mihf_id, ralpriv ** + ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id, ralpriv ** ** Outputs: None ** ** Others: g_msg_codec_send_buffer ** ***************************************************************************/ -void eRALlte_send_link_register_indication(MIH_C_TRANSACTION_ID_T *tidP) +void eRAL_send_link_register_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP) { MIH_C_Message_Link_Register_indication_t message; Bit_Buffer_t *bb; int message_total_length; - DEBUG(" Send MIH_C_MESSAGE_LINK_REGISTER_INDICATION\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_REGISTER_INDICATION\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -119,52 +102,32 @@ void eRALlte_send_link_register_indication(MIH_C_TRANSACTION_ID_T *tidP) message.header.action_identifier = (MIH_C_AID_T)6; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); message.primitive.Link_Id.link_type = MIH_C_WIRELESS_UMTS; message.primitive.Link_Id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_3G_CELL_ID; Bit_Buffer_t *plmn = new_BitBuffer_0(); - BitBuffer_wrap(plmn, (unsigned char*) ralpriv->plmn, DEFAULT_PLMN_SIZE); + BitBuffer_wrap(plmn, (unsigned char*) &g_enb_ral_obj[instanceP].plmn_id, DEFAULT_PLMN_SIZE); MIH_C_PLMN_ID_decode(plmn, &message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.plmn_id); - message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.cell_id = ralpriv->curr_cellId; + message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.cell_id = g_enb_ral_obj[instanceP].cell_id; free_BitBuffer(plmn); message_total_length = MIH_C_Link_Message_Encode_Link_Register_indication(bb, &message); - #ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - MIH_C_LINK_ID2String(&message.primitive.Link_Id, g_msc_gen_buf); - #endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Register.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Register.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Register.indication\n"); } else { - DEBUG(": Sent Link_Register.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Register.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Register.indication\n"); } free_BitBuffer(bb); } /**************************************************************************** ** ** - ** Name: eRALlte_send_capability_discover_confirm() ** + ** Name: eRAL_send_capability_discover_confirm() ** ** ** ** Description: Sends capability discover service management response to ** ** the MIH-F. ** @@ -174,23 +137,23 @@ void eRALlte_send_link_register_indication(MIH_C_TRANSACTION_ID_T *tidP) ** levt_listP: List of events supported by the link layer ** ** lcmd_listP: List of commands supported by the link ** ** layer ** - ** Others: g_link_id, g_mihf_id ** + ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** ** ** ** Outputs: None ** ** Return: None ** ** Others: g_msg_codec_send_buffer ** ** ** ***************************************************************************/ -void eRALlte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *link_evt_listP, - MIH_C_LINK_CMD_LIST_T *link_cmd_listP) +void eRAL_send_capability_discover_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, + MIH_C_STATUS_T *statusP, + MIH_C_LINK_EVENT_LIST_T *link_evt_listP, + MIH_C_LINK_CMD_LIST_T *link_cmd_listP) { MIH_C_Message_Link_Capability_Discover_confirm_t message; Bit_Buffer_t *bb; int message_total_length; - DEBUG(" Send MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -208,8 +171,8 @@ void eRALlte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *tidP, message.header.action_identifier = (MIH_C_AID_T)1; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.SupportedLinkEventList = link_evt_listP; @@ -217,41 +180,17 @@ void eRALlte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *tidP, message_total_length = MIH_C_Link_Message_Encode_Capability_Discover_confirm(bb, &message); - #ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n\\nsupported link events="); - g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.SupportedLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nsupported commands="); - g_msc_gen_buffer_index += MIH_C_LINK_CMD_LIST2String2(message.primitive.SupportedLinkCommandList, &g_msc_gen_buf[g_msc_gen_buffer_index]); - #endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Capability_Discover.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Capability_Discover.confirm\n"); } else { - DEBUG(": Sent Link_Capability_Discover.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Capability_Discover.confirm\n"); } free_BitBuffer(bb); } /**************************************************************************** ** ** - ** Name: eRALlte_send_event_subscribe_confirm() ** + ** Name: eRAL_send_event_subscribe_confirm() ** ** ** ** Description: Sends a Link_Event_Subscribe.confirm message to the MIHF. ** ** ** @@ -261,22 +200,22 @@ void eRALlte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *tidP, ** Inputs: tidP Transaction identifier ** ** statusP: Status of operation ** ** levt_listP: List of successfully subscribed link events** - ** Others: g_link_id, g_mihf_id ** + ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** ** ** ** Outputs: None ** ** Return: None ** ** Others: g_msg_codec_send_buffer ** ** ** ***************************************************************************/ -void eRALlte_send_event_subscribe_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *levt_listP) +void eRAL_send_event_subscribe_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, + MIH_C_STATUS_T *statusP, + MIH_C_LINK_EVENT_LIST_T *levt_listP) { MIH_C_Message_Link_Event_Subscribe_confirm_t message; Bit_Buffer_t *bb; int message_total_length; - DEBUG(" Send MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_CONFIRM\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_CONFIRM\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -294,50 +233,26 @@ void eRALlte_send_event_subscribe_confirm(MIH_C_TRANSACTION_ID_T *tidP, message.header.action_identifier = (MIH_C_AID_T)4; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.ResponseLinkEventList = levt_listP; message_total_length = MIH_C_Link_Message_Encode_Event_Subscribe_confirm(bb, &message); - #ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - if (levt_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nlink event list="); - g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.ResponseLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - #endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Event_Subscribe.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Event_Subscribe.confirm\n"); } else { - DEBUG(": Sent Link_Event_Subscribe.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Event_Subscribe.confirm\n"); } free_BitBuffer(bb); } /**************************************************************************** ** ** - ** Name: eRALlte_send_event_unsubscribe_confirm() ** + ** Name: eRAL_send_event_unsubscribe_confirm() ** ** ** ** Description: Sends a Link_Event_Unsubscribe.confirm message to the ** ** MIHF. ** @@ -348,22 +263,22 @@ void eRALlte_send_event_subscribe_confirm(MIH_C_TRANSACTION_ID_T *tidP, ** Inputs: tidP Transaction identifier ** ** statusP: Status of operation ** ** levt_listP: List of successfully subscribed link events** - ** Others: g_link_id, g_mihf_id ** + ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** ** ** ** Outputs: None ** ** Return: None ** ** Others: g_msg_codec_send_buffer ** ** ** ***************************************************************************/ -void eRALlte_send_event_unsubscribe_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *levt_listP) +void eRAL_send_event_unsubscribe_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, + MIH_C_STATUS_T *statusP, + MIH_C_LINK_EVENT_LIST_T *levt_listP) { MIH_C_Message_Link_Event_Unsubscribe_confirm_t message; Bit_Buffer_t *bb; int message_total_length; - DEBUG(" Send MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_CONFIRM\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_CONFIRM\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -381,43 +296,19 @@ void eRALlte_send_event_unsubscribe_confirm(MIH_C_TRANSACTION_ID_T *tidP, message.header.action_identifier = (MIH_C_AID_T)5; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.ResponseLinkEventList = levt_listP; message_total_length = MIH_C_Link_Message_Encode_Event_Unsubscribe_confirm(bb, &message); - #ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - if (levt_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nlink event list="); - g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.ResponseLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - #endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Event_Unsubscribe.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Event_Unsubscribe.confirm\n"); } else { - DEBUG(": Sent Link_Event_Unsubscribe.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Event_Unsubscribe.confirm\n"); } free_BitBuffer(bb); } @@ -430,7 +321,7 @@ void eRALlte_send_event_unsubscribe_confirm(MIH_C_TRANSACTION_ID_T *tidP, /**************************************************************************** ** ** - ** Name: eRALlte_send_link_detected_indication() ** + ** Name: eRAL_send_link_detected_indication() ** ** ** ** Description: Sends a Link_Detected.indication message to the MIHF. ** ** ** @@ -442,23 +333,23 @@ void eRALlte_send_event_unsubscribe_confirm(MIH_C_TRANSACTION_ID_T *tidP, ** ** ** Inputs: tidP Transaction identifier ** ** linfoP: Information of the detected link ** - ** Others: g_link_id, g_mihf_id ** + ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** ** ** ** Outputs: None ** ** Return: None ** ** Others: g_msg_codec_send_buffer ** ** ** ***************************************************************************/ -void eRALlte_send_link_detected_indication(MIH_C_TRANSACTION_ID_T *tidP, MIH_C_LINK_DET_INFO_T *linfoP){ +void eRAL_send_link_detected_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, MIH_C_LINK_DET_INFO_T *linfoP){ MIH_C_Message_Link_Detected_indication_t message; Bit_Buffer_t *bb; int message_total_length; - if (!(ralpriv->mih_supported_link_event_list & MIH_C_BIT_LINK_DETECTED)) { - return; + if (!(g_enb_ral_obj[instanceP].mih_supported_link_event_list & MIH_C_BIT_LINK_DETECTED)) { + return; } - DEBUG(" Send MIH_C_MESSAGE_LINK_DETECTED_INDICATION\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_DETECTED_INDICATION\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -476,46 +367,25 @@ void eRALlte_send_link_detected_indication(MIH_C_TRANSACTION_ID_T *tidP, MIH_C_ message.header.action_identifier = (MIH_C_AID_T)1; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); memcpy(&message.primitive.LinkDetectedInfo, linfoP, - sizeof(MIH_C_LINK_DET_INFO_T)); + sizeof(MIH_C_LINK_DET_INFO_T)); message_total_length = MIH_C_Link_Message_Encode_Link_Detected_indication(bb, &message); -#ifdef MSCGEN_PYTOOL - g_msc_gen_buffer_index = 0; - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = MIH_C_SIG_STRENGTH2String(&linfoP->sig_strength, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index = sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nSINR %d\\nData rate %d", linfoP->sinr, linfoP->link_data_rate); -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Detected.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Detected.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Detected.indication\n"); } else { - DEBUG(": Sent Link_Detected.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Detected.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Detected.indication\n"); } free_BitBuffer(bb); } /**************************************************************************** - ** Name: eRALlte_send_link_up_indication() ** + ** Name: eRAL_send_link_up_indication() ** ** Description: Sends a Link_Up.indication message to the MIHF. ** ** ** ** This notification is generated when a layer 2 connection is ** @@ -529,22 +399,22 @@ void eRALlte_send_link_detected_indication(MIH_C_TRANSACTION_ID_T *tidP, MIH_C_ ** mobil_mngtP: Indicates the type of Mobility Management ** ** Protocol supported by the new PoA ** ***************************************************************************/ -void eRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_LINK_TUPLE_ID_T *lidP, - MIH_C_LINK_ADDR_T *old_arP, - MIH_C_LINK_ADDR_T *new_arP, - MIH_C_IP_RENEWAL_FLAG_T *flagP, - MIH_C_IP_MOB_MGMT_T *mobil_mngtP) +void eRAL_send_link_up_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, + MIH_C_LINK_TUPLE_ID_T *lidP, + MIH_C_LINK_ADDR_T *old_arP, + MIH_C_LINK_ADDR_T *new_arP, + MIH_C_IP_RENEWAL_FLAG_T *flagP, + MIH_C_IP_MOB_MGMT_T *mobil_mngtP) { MIH_C_Message_Link_Up_indication_t message; Bit_Buffer_t *bb; int message_total_length; - if (!(ralpriv->mih_supported_link_event_list & MIH_C_BIT_LINK_UP)) { - return; + if (!(g_enb_ral_obj[instanceP].mih_supported_link_event_list & MIH_C_BIT_LINK_UP)) { + return; } - DEBUG(" Send MIH_C_MESSAGE_LINK_UP_INDICATION\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_UP_INDICATION\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -562,9 +432,9 @@ void eRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *tidP, message.header.action_identifier = (MIH_C_AID_T)2; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); memcpy(&message.primitive.LinkIdentifier, lidP, sizeof(MIH_C_LINK_TUPLE_ID_T)); @@ -575,53 +445,16 @@ void eRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *tidP, message_total_length = MIH_C_Link_Message_Encode_Link_Up_indication(bb, &message); -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_LINK_ID2String(&lidP->link_id, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nOldAccessRouter="); - if (old_arP) { - g_msc_gen_buffer_index += MIH_C_LINK_ADDR2String(old_arP, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - else { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "null"); - } - - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nNewAccessRouter="); - if (old_arP) { - g_msc_gen_buffer_index += MIH_C_LINK_ADDR2String(new_arP, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - else { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "null"); - } - -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Up.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Up.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Up.indication\n"); } else { - DEBUG(": Sent Link_Up.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Up.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Up.indication\n"); } free_BitBuffer(bb); } /**************************************************************************** - ** Name: eRALlte_send_link_down_indication() ** + ** Name: eRAL_send_link_down_indication() ** ** Description: Sends a Link_Down.indication message to the MIHF. ** ** ** ** This notification is generated when layer 2 connectivity is lost. ** @@ -635,20 +468,20 @@ void eRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *tidP, ** old_arP: Old access router link address ** ** reason_codeP: Reason why the link went down ** ***************************************************************************/ -void eRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_LINK_TUPLE_ID_T *lidP, - MIH_C_LINK_ADDR_T *old_arP, - MIH_C_LINK_DN_REASON_T *reason_codeP) +void eRAL_send_link_down_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, + MIH_C_LINK_TUPLE_ID_T *lidP, + MIH_C_LINK_ADDR_T *old_arP, + MIH_C_LINK_DN_REASON_T *reason_codeP) { MIH_C_Message_Link_Down_indication_t message; Bit_Buffer_t *bb; int message_total_length; - if (!(ralpriv->mih_supported_link_event_list & MIH_C_BIT_LINK_DOWN)) { - return; + if (!(g_enb_ral_obj[instanceP].mih_supported_link_event_list & MIH_C_BIT_LINK_DOWN)) { + return; } - DEBUG(" Send MIH_C_MESSAGE_LINK_DOWN_INDICATION\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_DOWN_INDICATION\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -661,9 +494,9 @@ void eRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *tidP, message.header.action_identifier = (MIH_C_AID_T)3; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); memcpy(&message.primitive.LinkIdentifier, lidP, sizeof(MIH_C_LINK_TUPLE_ID_T)); message.primitive.OldAccessRouter = old_arP; @@ -671,46 +504,17 @@ void eRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *tidP, message_total_length = MIH_C_Link_Message_Encode_Link_Down_indication(bb, &message); -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_LINK_ID2String(&lidP->link_id, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nOldAccessRouter="); - if (old_arP) { - g_msc_gen_buffer_index += MIH_C_LINK_ADDR2String(old_arP, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - else { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "null"); - } - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nReasonCode="); - g_msc_gen_buffer_index += MIH_C_LINK_DN_REASON2String(reason_codeP, &g_msc_gen_buf[g_msc_gen_buffer_index]); -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Down.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Down.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Down.indication\n"); } else { - DEBUG(": Sent Link_Down.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Down.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Down.indication\n"); } free_BitBuffer(bb); } /**************************************************************************** ** ** - ** Name: eRALlte_send_link_parameters_report_indication() ** + ** Name: eRAL_send_link_parameters_report_indication() ** ** ** ** Description: Sends a Link_Parameters_Report.indication message to the ** ** MIHF. ** @@ -723,29 +527,26 @@ void eRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *tidP, ** Inputs: tidP Transaction identifier ** ** lidP: Link identifier ** ** lparam_listP: List of link parameter reports ** - ** Others: g_link_id, g_mihf_id ** + ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** ** ** ** Outputs: None ** ** Return: None ** ** Others: g_msg_codec_send_buffer ** ** ** ***************************************************************************/ -void eRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_LINK_TUPLE_ID_T *lidP, - MIH_C_LINK_PARAM_RPT_LIST_T *lparam_listP) +void eRAL_send_link_parameters_report_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, + MIH_C_LINK_TUPLE_ID_T *lidP, + MIH_C_LINK_PARAM_RPT_LIST_T *lparam_listP) { MIH_C_Message_Link_Parameters_Report_indication_t message; Bit_Buffer_t *bb; int message_total_length; -#ifdef MSCGEN_PYTOOL - int i; -#endif - if (!(ralpriv->mih_supported_link_event_list & MIH_C_BIT_LINK_PARAMETERS_REPORT)) { - return; + if (!(g_enb_ral_obj[instanceP].mih_supported_link_event_list & MIH_C_BIT_LINK_PARAMETERS_REPORT)) { + return; } - DEBUG(" Send MIH_C_MESSAGE_LINK_PARAMETERS_REPORT_INDICATION\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_PARAMETERS_REPORT_INDICATION\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -763,9 +564,9 @@ void eRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T *tidP message.header.action_identifier = (MIH_C_AID_T)5; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); memcpy(&message.primitive.LinkIdentifier, lidP, sizeof(MIH_C_LINK_TUPLE_ID_T)); @@ -773,41 +574,17 @@ void eRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T *tidP message_total_length = MIH_C_Link_Message_Encode_Link_Parameters_Report_indication(bb, &message); -#ifdef MSCGEN_PYTOOL - g_msc_gen_buffer_index = 0; - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index += MIH_C_LINK_ID2String(&lidP->link_id, &g_msc_gen_buf[g_msc_gen_buffer_index]); - for (i = 0; i < lparam_listP->length; i++) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n"); - g_msc_gen_buffer_index += MIH_C_LINK_PARAM_RPT2String(&lparam_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Parameters_Report.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Parameters_Report.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Parameters_Report.indication\n"); } else { - DEBUG(": Sent Link_Parameters_Report.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Parameters_Report.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Parameters_Report.indication\n"); } free_BitBuffer(bb); } /**************************************************************************** ** ** - ** Name: eRALlte_send_link_going_down_indication() ** + ** Name: eRAL_send_link_going_down_indication() ** ** ** ** Description: Sends a Link_Going_Down.indication message to the MIHF. ** ** ** @@ -821,27 +598,27 @@ void eRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T *tidP ** timeP: The time interval (ms) at which the link ** ** is expected to go down (0 if unknown) ** ** lreasonP: Reason why the link is going to be down ** - ** Others: g_link_id, g_mihf_id ** + ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** ** ** ** Outputs: None ** ** Return: None ** ** Others: g_msg_codec_send_buffer ** ** ** ***************************************************************************/ -void eRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_LINK_TUPLE_ID_T *lidP, - MIH_C_UNSIGNED_INT2_T *timeP, - MIH_C_LINK_GD_REASON_T *lreasonP) +void eRAL_send_link_going_down_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, + MIH_C_LINK_TUPLE_ID_T *lidP, + MIH_C_UNSIGNED_INT2_T *timeP, + MIH_C_LINK_GD_REASON_T *lreasonP) { MIH_C_Message_Link_Going_Down_indication_t message; Bit_Buffer_t *bb; int message_total_length; - if (!(ralpriv->mih_supported_link_event_list & MIH_C_BIT_LINK_GOING_DOWN)) { - return; + if (!(g_enb_ral_obj[instanceP].mih_supported_link_event_list & MIH_C_BIT_LINK_GOING_DOWN)) { + return; } - DEBUG(" Send MIH_C_MESSAGE_LINK_GOING_DOWN_INDICATION\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_GOING_DOWN_INDICATION\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -859,34 +636,22 @@ void eRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *tidP, message.header.action_identifier = (MIH_C_AID_T)6; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); memcpy(&message.primitive.LinkIdentifier, lidP, sizeof(MIH_C_LINK_TUPLE_ID_T)); message.primitive.TimeInterval = *timeP; memcpy(&message.primitive.LinkGoingDownReason, lreasonP, - sizeof(MIH_C_LINK_GD_REASON_T)); + sizeof(MIH_C_LINK_GD_REASON_T)); message_total_length = MIH_C_Link_Message_Encode_Link_Going_Down_indication(bb, &message); - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Going_Down.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Going_Down.indication ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Going_Down.indication\n"); } else { - DEBUG(": Sent Link_Going_Down.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Going_Down.indication --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Going_Down.indication\n"); } free_BitBuffer(bb); } @@ -899,7 +664,7 @@ void eRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *tidP, /**************************************************************************** ** ** - ** Name: eRALlte_send_get_parameters_confirm() ** + ** Name: eRAL_send_get_parameters_confirm() ** ** ** ** Description: Sends a Link_Get_Parameters.confirm message to the MIHF. ** ** ** @@ -912,27 +677,24 @@ void eRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *tidP, ** their current values ** ** lstates_listP: List of current link state information ** ** ldesc_listP: List of link descriptors ** - ** Others: g_link_id, g_mihf_id ** + ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** ** ** ** Outputs: None ** ** Return: None ** ** Others: g_msg_codec_send_buffer ** ** ** ***************************************************************************/ -void eRALlte_send_get_parameters_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_PARAM_LIST_T *lparam_listP, - MIH_C_LINK_STATES_RSP_LIST_T *lstates_listP, - MIH_C_LINK_DESC_RSP_LIST_T *ldesc_listP) +void eRAL_send_get_parameters_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, + MIH_C_STATUS_T *statusP, + MIH_C_LINK_PARAM_LIST_T *lparam_listP, + MIH_C_LINK_STATES_RSP_LIST_T *lstates_listP, + MIH_C_LINK_DESC_RSP_LIST_T *ldesc_listP) { MIH_C_Message_Link_Get_Parameters_confirm_t message; Bit_Buffer_t *bb; int message_total_length; -#ifdef MSCGEN_PYTOOL - int i; -#endif - DEBUG(" Send MIH_C_MESSAGE_LINK_GET_PARAMETERS_CONFIRM\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_GET_PARAMETERS_CONFIRM\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -950,9 +712,9 @@ void eRALlte_send_get_parameters_confirm(MIH_C_TRANSACTION_ID_T *tidP, message.header.action_identifier = (MIH_C_AID_T)1; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.LinkParametersStatusList_list = lparam_listP; @@ -961,58 +723,17 @@ void eRALlte_send_get_parameters_confirm(MIH_C_TRANSACTION_ID_T *tidP, message_total_length = MIH_C_Link_Message_Encode_Get_Parameters_confirm(bb, &message); - #ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - if (lparam_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkParametersStatusList="); - for (i = 0; i < lparam_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_PARAM2String(&lparam_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - if (lstates_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkStatesResponseList="); - for (i = 0; i < lstates_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_STATES_RSP2String(&lstates_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - if (ldesc_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkDescriptorsResponseList="); - for (i = 0; i < ldesc_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_DESC_RSP2String(&ldesc_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - #endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Get_Parameters.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Get_Parameters.confirm\n"); } else { - DEBUG(": Sent Link_Get_Parameters.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Get_Parameters.confirm\n"); } free_BitBuffer(bb); } /**************************************************************************** ** ** - ** Name: eRALlte_send_configure_thresholds_confirm() ** + ** Name: eRAL_send_configure_thresholds_confirm() ** ** ** ** Description: Sends a Link_Configure_Thresholds.confirm message to the ** ** MIHF. ** @@ -1023,25 +744,22 @@ void eRALlte_send_get_parameters_confirm(MIH_C_TRANSACTION_ID_T *tidP, ** Inputs: tidP Transaction identifier ** ** statusP: Status of operation ** ** lstatus_listP: List of link configure status ** - ** Others: g_link_id, g_mihf_id ** + ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** ** ** ** Outputs: None ** ** Return: None ** ** Others: g_msg_codec_send_buffer ** ** ** ***************************************************************************/ -void eRALlte_send_configure_thresholds_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_CFG_STATUS_LIST_T *lstatus_listP) +void eRAL_send_configure_thresholds_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, + MIH_C_STATUS_T *statusP, + MIH_C_LINK_CFG_STATUS_LIST_T *lstatus_listP) { MIH_C_Message_Link_Configure_Thresholds_confirm_t message; Bit_Buffer_t *bb; int message_total_length; -#ifdef MSCGEN_PYTOOL - int i; -#endif - DEBUG(" Send MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_CONFIRM\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_CONFIRM\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -1059,50 +777,26 @@ void eRALlte_send_configure_thresholds_confirm(MIH_C_TRANSACTION_ID_T *tidP, message.header.action_identifier = (MIH_C_AID_T)2; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.LinkConfigureStatusList_list = lstatus_listP; message_total_length = MIH_C_Link_Message_Encode_Configure_Thresholds_confirm(bb, &message); - #ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n"); - for (i = 0; i < lstatus_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_CFG_STATUS2String(&lstatus_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - #endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Configure_Threshold.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Configure_Threshold.confirm\n"); } else { - DEBUG(": Sent Link_Configure_Threshold.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Configure_Threshold.confirm\n"); } free_BitBuffer(bb); } /**************************************************************************** ** ** - ** Name: eRALlte_send_link_action_confirm() ** + ** Name: eRAL_send_link_action_confirm() ** ** ** ** Description: Sends a Link_Action.confirm message to the MIHF. ** ** ** @@ -1115,26 +809,23 @@ void eRALlte_send_configure_thresholds_confirm(MIH_C_TRANSACTION_ID_T *tidP, ** information ** ** action_resultP: Specifies whether the link action was ** ** successful ** - ** Others: g_link_id, g_mihf_id ** + ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** ** ** ** Outputs: None ** ** Return: None ** ** Others: g_msg_codec_send_buffer ** ** ** ***************************************************************************/ -void eRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_SCAN_RSP_LIST_T *response_setP, - MIH_C_LINK_AC_RESULT_T *action_resultP) +void eRAL_send_link_action_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tidP, + MIH_C_STATUS_T *statusP, + MIH_C_LINK_SCAN_RSP_LIST_T *response_setP, + MIH_C_LINK_AC_RESULT_T *action_resultP) { MIH_C_Message_Link_Action_confirm_t message; Bit_Buffer_t *bb; int message_total_length; -#ifdef MSCGEN_PYTOOL - unsigned int index; -#endif - DEBUG(" Send MIH_C_MESSAGE_LINK_ACTION_CONFIRM\n"); + LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_ACTION_CONFIRM\n"); bb = new_BitBuffer_0(); BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); @@ -1152,9 +843,9 @@ void eRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *tidP, message.header.action_identifier = (MIH_C_AID_T)3; message.header.transaction_id = *tidP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.ScanResponseSet_list = response_setP; @@ -1162,65 +853,35 @@ void eRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *tidP, message_total_length = MIH_C_Link_Message_Encode_Link_Action_confirm(bb, &message); - #ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - if (response_setP) { - for (index = 0; index < response_setP->length; index++) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nScan resp:"); - g_msc_gen_buffer_index += MIH_C_LINK_SCAN_RSP2String(&response_setP->val[index], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - } - if (action_resultP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nAction result:"); - g_msc_gen_buffer_index += MIH_C_LINK_AC_RESULT2String2(action_resultP, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - #endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Action.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (eRAL_send_to_mih( instanceP, bb->m_buffer, message_total_length) < 0) { + LOG_E(RAL_ENB, ": Send Link_Action.confirm\n"); } else { - DEBUG(": Sent Link_Action.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_ENB, ": Sent Link_Action.confirm\n"); } free_BitBuffer(bb); } /**************************************************************************** ** ** - ** Name: eRALlte_mihf_connect() ** + ** Name: eRAL_mihf_connect(ral_enb_instance_t instanceP) ** ** ** ** Description: Connects the RAL to the remote MIH Function. ** - ** The calling process should exit upon connection failure ** - ** in order to properly close the MIH-F socket file ** - ** descriptor and free the automatically allocated addrinfo ** - ** structure. ** + ** The calling process should exit upon connection failure ** + ** in order to properly close the MIH-F socket file ** + ** descriptor and free the automatically allocated addrinfo ** + ** structure. ** ** ** - ** Inputs: None ** - ** Others: g_mihf_ip_address, g_mihf_remote_port ** - ** g_ral_ip_address, ** - ** g_ral_listening_port_for_mihf ** + ** Inputs: None ** + ** Others: g_enb_ral_obj[instanceP].mihf_ip_address, g_enb_ral_obj[instanceP].mihf_remote_port ** + ** g_enb_ral_obj[instanceP].ral_ip_address, ** + ** g_enb_ral_obj[instanceP].ral_listening_port ** ** ** - ** Outputs: None ** - ** Return: 0 on success, -1 on failure ** - ** Others: g_sockd_mihf ** + ** Outputs: None ** + ** Return: 0 on success, -1 on failure ** + ** Others: g_sockd_mihf ** ** ** - ***************************************************************************/ -int eRALlte_mihf_connect(void) + ****************************************************************************/ +int eRAL_mihf_connect(ral_enb_instance_t instanceP) { struct addrinfo info; /* endpoint information */ struct addrinfo *addr, *rp; /* endpoint address */ @@ -1238,9 +899,9 @@ int eRALlte_mihf_connect(void) info.ai_flags = 0; info.ai_protocol = 0; /* Any protocol */ - rc = getaddrinfo(g_mihf_ip_address, g_mihf_remote_port, &info, &addr); + rc = getaddrinfo(g_enb_ral_obj[instanceP].mihf_ip_address, g_enb_ral_obj[instanceP].mihf_remote_port, &info, &addr); if (rc != 0) { - ERR(" getaddrinfo: %s\n", gai_strerror(rc)); + LOG_E(RAL_ENB, " getaddrinfo: %s\n", gai_strerror(rc)); return -1; } @@ -1251,85 +912,85 @@ int eRALlte_mihf_connect(void) */ for (rp = addr; rp != NULL; rp = rp->ai_next) { - g_sockd_mihf = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - if (g_sockd_mihf < 0) { + g_enb_ral_obj[instanceP].mih_sock_desc = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if (g_enb_ral_obj[instanceP].mih_sock_desc < 0) { continue; - } + } - optval = 1; - setsockopt(g_sockd_mihf, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); + optval = 1; + setsockopt(g_enb_ral_obj[instanceP].mih_sock_desc, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); - /* - * Convert the RAL local network address - */ + /* + * Convert the RAL local network address + */ if (rp->ai_family == AF_INET) { - /* IPv4 network address family */ - struct sockaddr_in *addr4 = NULL; + /* IPv4 network address family */ + struct sockaddr_in *addr4 = NULL; - DEBUG(" %s is an ipv4 address\n", g_mihf_ip_address); + LOG_D(RAL_ENB, " %s is an ipv4 address\n", g_enb_ral_obj[instanceP].mihf_ip_address); addr4 = (struct sockaddr_in *)(&buf[0]); - addr4->sin_port = htons(atoi(g_ral_listening_port_for_mihf)); + addr4->sin_port = htons(atoi(g_enb_ral_obj[instanceP].ral_listening_port)); addr4->sin_family = AF_INET; - rc = inet_pton(AF_INET, g_ral_ip_address, &addr4->sin_addr); - } - else if (rp->ai_family == AF_INET6) { - /* IPv6 network address family */ - struct sockaddr_in6 *addr6 = NULL; + rc = inet_pton(AF_INET, g_enb_ral_obj[instanceP].ral_ip_address, &addr4->sin_addr); + } + else if (rp->ai_family == AF_INET6) { + /* IPv6 network address family */ + struct sockaddr_in6 *addr6 = NULL; - DEBUG(" %s is an ipv6 address\n", g_mihf_ip_address); + LOG_D(RAL_ENB, " %s is an ipv6 address\n", g_enb_ral_obj[instanceP].mihf_ip_address); addr6 = (struct sockaddr_in6 *)(&buf[0]); - addr6->sin6_port = htons(atoi(g_ral_listening_port_for_mihf)); + addr6->sin6_port = htons(atoi(g_enb_ral_obj[instanceP].ral_listening_port)); addr6->sin6_family = AF_INET6; - rc = inet_pton(AF_INET, g_ral_ip_address, &addr6->sin6_addr); - } - else { - ERR(" %s is an unknown address format %d\n", - g_mihf_ip_address, rp->ai_family); - return -1; - } - - if (rc < 0) { - /* The network address convertion failed */ - ERR(" inet_pton(RAL IP address %s): %s\n", - g_ral_ip_address, strerror(rc)); - return -1; - } - else if (rc == 0) { - /* The network address is not valid */ - ERR(" RAL IP address %s is not valid\n", g_ral_ip_address); - return -1; - } - - /* Bind the socket to the local RAL network address */ - rc = bind(g_sockd_mihf, (const struct sockaddr *)buf, - sizeof(struct sockaddr_in)); - - if (rc < 0) { - ERR(" bind(RAL IP address %s): %s\n", - g_ral_ip_address, strerror(errno)); - return -1; - } - - /* Connect the socket to the remote MIH-F network address */ - if (connect(g_sockd_mihf, rp->ai_addr, rp->ai_addrlen) == 0) { - NOTICE(" RAL [%s:%s] is now UDP-CONNECTED to MIH-F [%s:%s]\n", - g_ral_ip_address, g_ral_listening_port_for_mihf, - g_mihf_ip_address, g_mihf_remote_port); - break; - } - /* - * We failed to connect: - * Close the socket file descriptor and try to connect to an other - * address. - */ - close(g_sockd_mihf); + rc = inet_pton(AF_INET, g_enb_ral_obj[instanceP].ral_ip_address, &addr6->sin6_addr); + } + else { + LOG_E(RAL_ENB, " %s is an unknown address format %d\n", + g_enb_ral_obj[instanceP].mihf_ip_address, rp->ai_family); + return -1; + } + + if (rc < 0) { + /* The network address convertion failed */ + LOG_E(RAL_ENB, " inet_pton(RAL IP address %s): %s\n", + g_enb_ral_obj[instanceP].ral_ip_address, strerror(rc)); + return -1; + } + else if (rc == 0) { + /* The network address is not valid */ + LOG_E(RAL_ENB, " RAL IP address %s is not valid\n", g_enb_ral_obj[instanceP].ral_ip_address); + return -1; + } + + /* Bind the socket to the local RAL network address */ + rc = bind(g_enb_ral_obj[instanceP].mih_sock_desc, (const struct sockaddr *)buf, + sizeof(struct sockaddr_in)); + + if (rc < 0) { + LOG_E(RAL_ENB, " bind(RAL IP address %s): %s\n", + g_enb_ral_obj[instanceP].ral_ip_address, strerror(errno)); + return -1; + } + + /* Connect the socket to the remote MIH-F network address */ + if (connect(g_enb_ral_obj[instanceP].mih_sock_desc, rp->ai_addr, rp->ai_addrlen) == 0) { + LOG_N(RAL_ENB, " RAL [%s:%s] is now UDP-CONNECTED to MIH-F [%s:%s]\n", + g_enb_ral_obj[instanceP].ral_ip_address, g_enb_ral_obj[instanceP].ral_listening_port, + g_enb_ral_obj[instanceP].mihf_ip_address, g_enb_ral_obj[instanceP].mihf_remote_port); + break; + } + /* + * We failed to connect: + * Close the socket file descriptor and try to connect to an other + * address. + */ + close(g_enb_ral_obj[instanceP].mih_sock_desc); } /* * Unable to connect to a network address */ if (rp == NULL) { - ERR(" Could not connect to MIH-F\n"); + LOG_E(RAL_ENB, " Could not connect to MIH-F\n"); return -1; } @@ -1339,13 +1000,13 @@ int eRALlte_mihf_connect(void) } /**************************************************************************** - ** Name: eRALlte_mih_link_process_message() ** + ** Name: eRAL_mih_link_process_message() ** ** Description: Processes messages received from the MIH-F. ** ** Others: g_sockd_mihf ** ** Return: Always return 0 ** ** Others: g_msg_codec_recv_buffer ** ***************************************************************************/ -int eRALlte_mih_link_process_message(void){ +int eRAL_mih_link_process_message(ral_enb_instance_t instanceP){ MIH_C_Message_Wrapper_t message_wrapper; int nb_bytes_received ; int nb_bytes_decoded ; @@ -1361,21 +1022,21 @@ int eRALlte_mih_link_process_message(void){ bb = new_BitBuffer_0(); - nb_bytes_received = recvfrom(g_sockd_mihf, - (void *)g_msg_codec_recv_buffer, - MSG_CODEC_RECV_BUFFER_SIZE, - 0, - (struct sockaddr *) &udp_socket, - &sockaddr_len); + nb_bytes_received = recvfrom(g_enb_ral_obj[instanceP].mih_sock_desc, + (void *)g_msg_codec_recv_buffer, + MSG_CODEC_RECV_BUFFER_SIZE, + 0, + (struct sockaddr *) &udp_socket, + &sockaddr_len); if (nb_bytes_received > 0) { - DEBUG(" \n"); - DEBUG(" %s Received %d bytes\n", __FUNCTION__, nb_bytes_received); - eRALlte_print_buffer(g_msg_codec_recv_buffer, nb_bytes_received); + LOG_D(RAL_ENB, " \n"); + LOG_D(RAL_ENB, " %s Received %d bytes\n", __FUNCTION__, nb_bytes_received); + eRAL_print_buffer(g_msg_codec_recv_buffer, nb_bytes_received); total_bytes_to_decode += nb_bytes_received; BitBuffer_wrap(bb, g_msg_codec_recv_buffer, total_bytes_to_decode); - /* Decode the message received from the MIHF */ - status = eRALlte_mih_link_msg_decode(bb, &message_wrapper); + /* Decode the message received from the MIHF */ + status = eRAL_mih_link_msg_decode(instanceP, bb, &message_wrapper); if (status == MIH_MESSAGE_DECODE_OK) { nb_bytes_decoded = BitBuffer_getPosition(bb); if (nb_bytes_decoded > 0) { @@ -1392,7 +1053,7 @@ int eRALlte_mih_link_process_message(void){ memset(&g_msg_codec_recv_buffer[total_bytes_to_decode], 0 , MSG_CODEC_RECV_BUFFER_SIZE - total_bytes_to_decode); } } - // data could not be decoded + // data could not be decoded } else if (status == MIH_MESSAGE_DECODE_FAILURE) { memset(g_msg_codec_recv_buffer, 0, MSG_CODEC_RECV_BUFFER_SIZE); total_bytes_to_decode = 0; @@ -1410,7 +1071,7 @@ int eRALlte_mih_link_process_message(void){ /**************************************************************************** ** ** - ** Name: eRALlte_print_buffer() ** + ** Name: eRAL_print_buffer() ** ** ** ** Description: Print the content of a buffer in hexadecimal. ** ** ** @@ -1423,7 +1084,7 @@ int eRALlte_mih_link_process_message(void){ ** Others: None ** ** ** ***************************************************************************/ -static void eRALlte_print_buffer(const u_int8_t * bufferP, int lenP) +void eRAL_print_buffer(const u_int8_t * bufferP, int lenP) { char c; unsigned int buffer_index = 0; @@ -1455,8 +1116,8 @@ static void eRALlte_print_buffer(const u_int8_t * bufferP, int lenP) buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " %04d |", octet_index); } /* - * Print every single octet in hexadecimal form - */ + * Print every single octet in hexadecimal form + */ buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " %02x", (u_int8_t)(bufferP[octet_index] & 0x00FF)); } @@ -1485,12 +1146,12 @@ static void eRALlte_print_buffer(const u_int8_t * bufferP, int lenP) } buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " |\n"); buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], "------+-------------------------------------------------+------------------+\n"); - DEBUG(g_msg_codec_print_buffer); + LOG_D(RAL_ENB, g_msg_codec_print_buffer); } /**************************************************************************** ** ** - ** Name: eRALlte_send_to_mih() ** + ** Name: eRAL_send_to_mih( instanceP, ) ** ** ** ** Description: Sends a buffered message to the MIH-F. ** ** ** @@ -1503,28 +1164,28 @@ static void eRALlte_print_buffer(const u_int8_t * bufferP, int lenP) ** Others: None ** ** ** ***************************************************************************/ -static int eRALlte_send_to_mih(const u_int8_t *bufferP, int lenP) +int eRAL_send_to_mih(ral_enb_instance_t instanceP, const u_int8_t *bufferP, int lenP) { int result; - eRALlte_print_buffer(bufferP, lenP); - result = send(g_sockd_mihf, (const void *)bufferP, lenP, 0); + eRAL_print_buffer(bufferP, lenP); + result = send(g_enb_ral_obj[instanceP].mih_sock_desc, (const void *)bufferP, lenP, 0); if (result != lenP) { - ERR(" %s : %d bytes failed, returned %d: %s\n", - __FUNCTION__, lenP, result, strerror(errno)); + LOG_E(RAL_ENB, " %s : %d bytes failed, returned %d: %s\n", + __FUNCTION__, lenP, result, strerror(errno)); } return result; } /**************************************************************************** - ** Name: eRALlte_mih_link_msg_decode() ** + ** Name: eRAL_mih_link_msg_decode() ** ** Description: Decode messages received from the MIH-F. ** ** Inputs: bbP: Pointer to the buffer to decode ** ** Outputs: message_wrapperP: ** ** Pointer to the message wrapper ** ** Return: < 0 on failure, 0 otherwise ** ***************************************************************************/ -static int eRALlte_mih_link_msg_decode(Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP){ -//--------------------------------------------------------------------------- +int eRAL_mih_link_msg_decode(ral_enb_instance_t instanceP, Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP){ + //--------------------------------------------------------------------------- int status = MIH_MESSAGE_DECODE_FAILURE; MIH_C_HEADER_T header; MIH_C_STATUS_T mih_status; @@ -1535,9 +1196,9 @@ static int eRALlte_mih_link_msg_decode(Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_ #endif if ((bbP != NULL) && (message_wrapperP != NULL)){ - /* - * Decode MIH protocol header - */ + /* + * Decode MIH protocol header + */ status = MIH_C_Link_Header_Decode(bbP, &header); if (status == MIH_HEADER_DECODE_TOO_SHORT) { return MIH_MESSAGE_DECODE_TOO_SHORT; @@ -1548,280 +1209,147 @@ static int eRALlte_mih_link_msg_decode(Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_ } message_wrapperP->message_id = MIH_C_MESSAGE_ID(header.service_identifier, header.operation_code, header.action_identifier); - /* - * Decode MIH primitives - */ + /* + * Decode MIH primitives + */ switch (message_wrapperP->message_id) { case MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST_ID: - /* - * This primitive is generated by the MIHF when it needs to - * receive link-layer event notifications and learn about which - * link-layer commands the lower layer can support. - * The recipient responds immediately with Link_Capability_ - * Discover.confirm primitive. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST\n", __FUNCTION__); + /* + * This primitive is generated by the MIHF when it needs to + * receive link-layer event notifications and learn about which + * link-layer commands the lower layer can support. + * The recipient responds immediately with Link_Capability_ + * Discover.confirm primitive. + */ + LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_capability_discover_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - /* Decode Link_Capability_Discover.request */ + /* Decode Link_Capability_Discover.request */ status = MIH_C_Link_Message_Decode_Link_Capability_Discover_request(bbP, &message_wrapperP->_union_message.link_capability_discover_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.request --->][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif - - /* Process Link_Capability_Discover.request */ + + /* Process Link_Capability_Discover.request */ MIH_C_Link_Message_Link_Capability_Discover_request2String(&message_wrapperP->_union_message.link_capability_discover_request, g_msg_print_buffer); - DEBUG(" %s", g_msg_print_buffer); + LOG_D(RAL_ENB, " %s", g_msg_print_buffer); mih_status = MIH_C_STATUS_SUCCESS; - DEBUG("**\n"); - /* Send Link_Capability_Discover.confirm */ - eRALlte_send_capability_discover_confirm(&message_wrapperP->_union_message.link_capability_discover_request.header.transaction_id, - &mih_status, - &ralpriv->mih_supported_link_event_list, - &ralpriv->mih_supported_link_command_list); + LOG_D(RAL_ENB, "**\n"); + /* Send Link_Capability_Discover.confirm */ + eRAL_send_capability_discover_confirm(instanceP, &message_wrapperP->_union_message.link_capability_discover_request.header.transaction_id, + &mih_status, + &g_enb_ral_obj[instanceP].mih_supported_link_event_list, + &g_enb_ral_obj[instanceP].mih_supported_link_command_list); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; case MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST_ID: - /* - * This primitive is generated by a subscriber such as the MIHF - * that is seeking to receive event indications from different - * link-layer technologies. - * The recipient responds immediately with Link_Event_Subscribe. - * confirm primitive. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST\n", __FUNCTION__); + /* + * This primitive is generated by a subscriber such as the MIHF + * that is seeking to receive event indications from different + * link-layer technologies. + * The recipient responds immediately with Link_Event_Subscribe. + * confirm primitive. + */ + LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_event_subscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - /* Decode Link_Event_Subscribe.request */ + /* Decode Link_Event_Subscribe.request */ status = MIH_C_Link_Message_Decode_Link_Event_Subscribe_request(bbP, &message_wrapperP->_union_message.link_event_subscribe_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_subscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); - #endif - - /* Process Link_Event_Subscribe.request */ - DEBUG("**\n"); - eRALlte_subscribe_request(&message_wrapperP->_union_message.link_event_subscribe_request); + /* Process Link_Event_Subscribe.request */ + LOG_D(RAL_ENB, "**\n"); + eRAL_subscribe_request(instanceP, &message_wrapperP->_union_message.link_event_subscribe_request); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_subscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; case MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST_ID: - /* - * This primitive is generated by a subscriber such as the MIHF - * that is seeking to unsubscribe from an already subscribed set - * of events. - * The recipient responds immediately with Link_Event_ - * Unsubscribe.confirm primitive. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST\n", __FUNCTION__); + /* + * This primitive is generated by a subscriber such as the MIHF + * that is seeking to unsubscribe from an already subscribed set + * of events. + * The recipient responds immediately with Link_Event_ + * Unsubscribe.confirm primitive. + */ + LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_event_unsubscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - /* Decode Link_Event_Unsubscribe.request */ + /* Decode Link_Event_Unsubscribe.request */ status = MIH_C_Link_Message_Decode_Link_Event_Unsubscribe_request(bbP, &message_wrapperP->_union_message.link_event_unsubscribe_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_unsubscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); - #endif - DEBUG("**\n"); - /* Process Link_Event_Unsubscribe.request */ - eRALlte_unsubscribe_request(&message_wrapperP->_union_message.link_event_unsubscribe_request); + LOG_D(RAL_ENB, "**\n"); + /* Process Link_Event_Unsubscribe.request */ + eRAL_unsubscribe_request(instanceP, &message_wrapperP->_union_message.link_event_unsubscribe_request); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_unsubscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; case MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST_ID: - /* - * This primitive is generated by the MIHF to obtain the current - * value of a set of link parameters from a link. - * The recipient link responds with Link_Get_Parameters.confirm - * primitive. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST\n", __FUNCTION__); + /* + * This primitive is generated by the MIHF to obtain the current + * value of a set of link parameters from a link. + * The recipient link responds with Link_Get_Parameters.confirm + * primitive. + */ + LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_get_parameters_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - /* Decode Link_Get_Parameters.request */ + /* Decode Link_Get_Parameters.request */ status = MIH_C_Link_Message_Decode_Link_Get_Parameters_request(bbP, &message_wrapperP->_union_message.link_get_parameters_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - for (i = 0; i < message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkParametersRequest_list.length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_PARAM_TYPE2String(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkParametersRequest_list.val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n Link states request="); - g_msc_gen_buffer_index += MIH_C_LINK_STATES_REQ2String2(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkStatesRequest, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n Link desc request="); - g_msc_gen_buffer_index += MIH_C_LINK_DESC_REQ2String2(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkDescriptorsRequest, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); - #endif - DEBUG("**\n"); + LOG_D(RAL_ENB, "**\n"); /* Process Link_Get_Parameters.request */ - eRALlte_get_parameters_request(&message_wrapperP->_union_message.link_get_parameters_request); + eRAL_get_parameters_request(instanceP, &message_wrapperP->_union_message.link_get_parameters_request); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; case MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST_ID: - /* - * This primitive is generated by an MIHF that needs to set - * threshold values for different link parameters. - * The recipient responds immediately with Link_Configure_ - * Thresholds.confirm primitive. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST\n", __FUNCTION__); + /* + * This primitive is generated by an MIHF that needs to set + * threshold values for different link parameters. + * The recipient responds immediately with Link_Configure_ + * Thresholds.confirm primitive. + */ + LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_configure_thresholds_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - /* Decode Link_Configure_Thresholds.request */ + /* Decode Link_Configure_Thresholds.request */ status = MIH_C_Link_Message_Decode_Link_Configure_Thresholds_request(bbP, &message_wrapperP->_union_message.link_configure_thresholds_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - for (i = 0; i < message_wrapperP->_union_message.link_configure_thresholds_request.primitive.LinkConfigureParameterList_list.length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_CFG_PARAM2String(&message_wrapperP->_union_message.link_configure_thresholds_request.primitive.LinkConfigureParameterList_list.val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); - #endif - DEBUG("**\n"); + LOG_D(RAL_ENB, "**\n"); /* Process Link_Configure_Thresholds.request */ - eRALlte_configure_thresholds_request(&message_wrapperP->_union_message.link_configure_thresholds_request); + eRAL_configure_thresholds_request(instanceP, &message_wrapperP->_union_message.link_configure_thresholds_request); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; case MIH_C_MESSAGE_LINK_ACTION_REQUEST_ID: - /* - * This primitive is used by the MIHF to request an action on a - * link-layer connection to enable optimal handling of link- - * layer resources for the purpose of handovers. - * The MIHF generates this primitive upon request from the MIH - * user to perform an action on a pre-defined link-layer - * connection. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_ACTION_REQUEST\n", __FUNCTION__); + /* + * This primitive is used by the MIHF to request an action on a + * link-layer connection to enable optimal handling of link- + * layer resources for the purpose of handovers. + * The MIHF generates this primitive upon request from the MIH + * user to perform an action on a pre-defined link-layer + * connection. + */ + LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_ACTION_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_action_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - /* Decode Link_Action.request */ + /* Decode Link_Action.request */ status = MIH_C_Link_Message_Decode_Link_Action_request(bbP, &message_wrapperP->_union_message.link_action_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_LINK_ACTION2String(&message_wrapperP->_union_message.link_action_request.primitive.LinkAction, g_msc_gen_buf); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nExecution Delay=%d", message_wrapperP->_union_message.link_action_request.primitive.ExecutionDelay); - if (message_wrapperP->_union_message.link_action_request.primitive.PoALinkAddress != NULL) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nPoALinkAddress="); - g_msc_gen_buffer_index += MIH_C_LINK_ADDR2String(message_wrapperP->_union_message.link_action_request.primitive.PoALinkAddress, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); - #endif - DEBUG("**\n"); + LOG_D(RAL_ENB, "**\n"); /* Process Link_Action.request */ - eRALlte_action_request(&message_wrapperP->_union_message.link_action_request); + eRAL_action_request(instanceP, &message_wrapperP->_union_message.link_action_request); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.request\\nERR DECODE --->][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; default: - WARNING(" UNKNOWN MESSAGE ID SID %d, OP_CODE %d, AID %d\n", header.service_identifier, header.operation_code, header.action_identifier); + LOG_W(RAL_ENB, " UNKNOWN MESSAGE ID SID %d, OP_CODE %d, AID %d\n", header.service_identifier, header.operation_code, header.action_identifier); status = MIH_MESSAGE_DECODE_FAILURE; } } diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_parameters.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_parameters.c index 64877d0d6d..f8acde5820 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_parameters.c +++ b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_parameters.c @@ -2,7 +2,7 @@ * Eurecom OpenAirInterface 3 * Copyright(c) 2012 Eurecom * - * Source eRALlte_parameters.c + * Source eRAL_parameters.c * * Version 0.1 * @@ -17,10 +17,10 @@ * Description * *****************************************************************************/ +#define LTE_RAL_ENB +#define LTE_RAL_ENB_PARAMETERS_C -#include "lteRALenb_parameters.h" - -#include "lteRALenb_mih_msg.h" +#include "lteRALenb.h" /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -28,7 +28,7 @@ /**************************************************************************** ** ** - ** Name: eRALlte_get_parameters_request() ** + ** Name: eRAL_get_parameters_request() ** ** ** ** Description: Processes the Link_Get_Parameters.request message and ** ** sends a LinK_Get_Parameters.confirm message to the MIHF. ** @@ -41,14 +41,135 @@ ** Others: None ** ** ** ***************************************************************************/ -void eRALlte_get_parameters_request(MIH_C_Message_Link_Get_Parameters_request_t* msgP) +void eRAL_get_parameters_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Get_Parameters_request_t* messageP) { - MIH_C_STATUS_T status = MIH_C_STATUS_SUCCESS; + MIH_C_STATUS_T status; + MIH_C_LINK_PARAM_LIST_T link_parameters_status_list; + MIH_C_LINK_STATES_RSP_LIST_T link_states_response_list; + MIH_C_LINK_DESC_RSP_LIST_T link_descriptors_response_list; + unsigned int link_index; + + // SAVE REQUEST + // MAY BE MERGE REQUESTS ? + //memcpy(&g_link_cfg_param_thresholds_list, &messageP->primitive.LinkConfigureParameterList_list, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); + + status = MIH_C_STATUS_SUCCESS; + + for (link_index = 0; + link_index < messageP->primitive.LinkParametersRequest_list.length; + link_index++) { + + //------------------------------------------------ + // MIH_C_LINK_PARAM_LIST_T + //------------------------------------------------ + memcpy(&link_parameters_status_list.val[link_index].link_param_type, + &messageP->primitive.LinkParametersRequest_list.val[link_index], + sizeof(MIH_C_LINK_PARAM_TYPE_T)); + + switch (messageP->primitive.LinkParametersRequest_list.val[link_index].choice) { + case MIH_C_LINK_PARAM_TYPE_CHOICE_GEN: + /*#define MIH_C_LINK_PARAM_GEN_DATA_RATE (MIH_C_LINK_PARAM_GEN_T)0 +#define MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH (MIH_C_LINK_PARAM_GEN_T)1 +#define MIH_C_LINK_PARAM_GEN_SINR (MIH_C_LINK_PARAM_GEN_T)2 +#define MIH_C_LINK_PARAM_GEN_THROUGHPUT (MIH_C_LINK_PARAM_GEN_T)3 +#define MIH_C_LINK_PARAM_GEN_PACKET_ERROR_RATE (MIH_C_LINK_PARAM_GEN_T)4*/ + link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; + link_parameters_status_list.val[link_index]._union.link_param_val = MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH; + break; + case MIH_C_LINK_PARAM_TYPE_CHOICE_QOS: +/* +* \brief A type to represent QOS_LIST parameters. +* 0: Maximum number of differentiable classes of service supported. +* 1: Minimum packet transfer delay for all CoS, the minimum delay over a class +* population of interest. +* 2: Average packet transfer delay for all CoS, the arithmetic mean of the delay +* over a class population of interest. (See B.3.4) +* 3: Maximum packet transfer delay for all CoS, the maximum delay over a class +* population of interest. +* 4: Packet transfer delay jitter for all CoS, the standard deviation of the delay +* over a class population of interest. (See B.3.5.) +* 5: Packet loss rate for all CoS, the ratio between the number of frames that are +* transmitted but not received and the total number of frames transmitted over +* a class population of interest. (See B.3.2.) +* 6–255: (Reserved) + */ + link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_QOS_PARAM_VAL; + link_parameters_status_list.val[link_index]._union.qos_param_val.choice = MIH_C_QOS_PARAM_VAL_CHOICE_AVG_PK_TX_DELAY; + link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.length = 2; //?? + link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].cos_id = 2; //?? + link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].value = 20; //?? + link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[1].cos_id = 3; //?? + link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[2].value = 50; //?? + break; + case MIH_C_LINK_PARAM_TYPE_CHOICE_LTE: +/* +#define MIH_C_LINK_PARAM_LTE_UE_RSRP 0 +#define MIH_C_LINK_PARAM_LTE_UE_RSRQ 1 +#define MIH_C_LINK_PARAM_LTE_UE_CQI 2 +#define MIH_C_LINK_PARAM_LTE_AVAILABLE_BW 3 +#define MIH_C_LINK_PARAM_LTE_PACKET_DELAY 4 +#define MIH_C_LINK_PARAM_LTE_PACKET_LOSS_RATE 5 +#define MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS 6 +#define MIH_C_LINK_PARAM_LTE_MOBILE_NODE_CAPABILITIES 7 +#define MIH_C_LINK_PARAM_LTE_EMBMS_CAPABILITY 8 +#define MIH_C_LINK_PARAM_LTE_JUMBO_FEASIBILITY 9 +#define MIH_C_LINK_PARAM_LTE_JUMBO_SETUP_STATUS 10 +#define MIH_C_LINK_PARAM_LTE_NUM_ACTIVE_EMBMS_RECEIVERS_PER_FLOW 11 + */ + case MIH_C_LINK_PARAM_TYPE_CHOICE_GG: + case MIH_C_LINK_PARAM_TYPE_CHOICE_EDGE: + case MIH_C_LINK_PARAM_TYPE_CHOICE_ETH: + case MIH_C_LINK_PARAM_TYPE_CHOICE_802_11: + case MIH_C_LINK_PARAM_TYPE_CHOICE_C2K: + case MIH_C_LINK_PARAM_TYPE_CHOICE_FDD: + case MIH_C_LINK_PARAM_TYPE_CHOICE_HRPD: + case MIH_C_LINK_PARAM_TYPE_CHOICE_802_16: + case MIH_C_LINK_PARAM_TYPE_CHOICE_802_20: + case MIH_C_LINK_PARAM_TYPE_CHOICE_802_22: + default: + LOG_E(RAL_ENB, "%s TO DO CONTINUE PROCESSING LinkParametersRequest_list of \n", __FUNCTION__); + } + + //------------------------------------------------ + // MIH_C_LINK_STATES_RSP_LIST_T + //------------------------------------------------ + if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_OP_MODE) { + link_states_response_list.val[link_index].choice = 0; + link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; + } else if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_CHANNEL_ID) { + link_states_response_list.val[link_index].choice = 1; + link_states_response_list.val[link_index]._union.channel_id = PREDEFINED_CHANNEL_ID; + } else { + LOG_E(RAL_ENB, "%s Invalid LinkStatesRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); + // DEFAULT VALUES + link_states_response_list.val[link_index].choice = 0; + link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; + } + + //------------------------------------------------ + // MIH_C_LINK_DESC_RSP_LIST_T + //------------------------------------------------ + if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_CLASSES_OF_SERVICE_SUPPORTED) { + link_descriptors_response_list.val[link_index].choice = 0; + link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; + } else if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_QUEUES_SUPPORTED) { + link_descriptors_response_list.val[link_index].choice = 1; + link_descriptors_response_list.val[link_index]._union.num_queue = PREDEFINED_QUEUES_SUPPORTED; + } else { + LOG_E(RAL_ENB, "%s Invalid LinkDescriptorsRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); + // DEFAULT VALUES + link_descriptors_response_list.val[link_index].choice = 0; + link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; + } + } + link_parameters_status_list.length = messageP->primitive.LinkParametersRequest_list.length; + link_states_response_list.length = messageP->primitive.LinkParametersRequest_list.length; + link_descriptors_response_list.length = messageP->primitive.LinkParametersRequest_list.length; /* Get parameters link command is not supported at the network side */ - DEBUG(" Get Parameters request is not supported by the network\n"); - eRALlte_send_get_parameters_confirm(&msgP->header.transaction_id, - &status, NULL, NULL, NULL); + LOG_D(RAL_ENB, " Get Parameters request is not supported by the network\n"); + eRAL_send_get_parameters_confirm(instanceP, &messageP->header.transaction_id, + &status, NULL, NULL, NULL); } /****************************************************************************/ diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_process.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_process.c index 6030574780..c56295bb3e 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_process.c +++ b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_process.c @@ -2,7 +2,7 @@ * Eurecom OpenAirInterface 3 * Copyright(c) 2012 Eurecom * - * Source eRALlte_process.c + * Source eRAL_process.c * * Version 0.1 * @@ -17,23 +17,11 @@ * Description * *****************************************************************************/ -#include "lteRALenb_variables.h" -#include "lteRALenb_proto.h" +#define LTE_RAL_ENB +#define LTE_RAL_ENB_PROCESS_C +#include "lteRALenb.h" -#include "lteRALenb_mih_msg.h" -#include "MIH_C.h" -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ -extern int eRALlte_action_save_flow_id(MIH_C_FLOW_ID_T* flowId, int cnxid); - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -static void _eRALlte_process_clean_pending_mt(void); -static void _eRALlte_process_waiting_RB(int mt_ix); /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -41,7 +29,7 @@ static void _eRALlte_process_waiting_RB(int mt_ix); /**************************************************************************** ** ** - ** Name: eRALlte_process_find_channel() ** + ** Name: eRAL_process_find_channel() ** ** ** ** Description: Returns the Mobile Terminal index and the Radio Bearer ** ** channel index for the specified Connection identifier. ** @@ -57,35 +45,35 @@ static void _eRALlte_process_waiting_RB(int mt_ix); ** Others: None ** ** ** ***************************************************************************/ -int eRALlte_process_find_channel(unsigned int cnxid, int* mt_ix, int* ch_ix){ +int eRAL_process_find_channel(ral_enb_instance_t instanceP, unsigned int cnxid, int* mt_ix, int* ch_ix){ int mt, ch; int found = 0; - DEBUG(" %s : cnxid = %d\n", __FUNCTION__, cnxid); + LOG_D(RAL_ENB, " %s : cnxid = %d\n", __FUNCTION__, cnxid); for (mt = 0; !found && (mt < RAL_MAX_MT); mt++) { - for (ch = 0; ch < RAL_MAX_RB; ch++) { - if (ralpriv->mt[mt].radio_channel[ch].cnx_id == cnxid) { - found = 1; - *mt_ix = mt; - *ch_ix = ch; - break; + for (ch = 0; ch < RAL_MAX_RB; ch++) { + if (g_enb_ral_obj[instanceP].mt[mt].radio_channel[ch].cnx_id == cnxid) { + found = 1; + *mt_ix = mt; + *ch_ix = ch; + break; + } } - } } if (!found) { - *mt_ix = RAL_MAX_MT; - *ch_ix = 0; + *mt_ix = RAL_MAX_MT; + *ch_ix = 0; } - DEBUG (" %s : return %d (mt=%d, ch=%d)\n" , __FUNCTION__, found, *mt_ix, *ch_ix); + LOG_D(RAL_ENB, " %s : return %d (mt=%d, ch=%d)\n" , __FUNCTION__, found, *mt_ix, *ch_ix); return found; } /**************************************************************************** ** ** - ** Name: eRALlte_process_find_new_channel() ** + ** Name: eRAL_process_find_new_channel() ** ** ** ** Description: Returns the index of the first available Radio Bearer ** ** channel for the specified Mobile Terminal identifier. ** @@ -100,25 +88,25 @@ int eRALlte_process_find_channel(unsigned int cnxid, int* mt_ix, int* ch_ix){ ** Others: None ** ** ** ***************************************************************************/ -int eRALlte_process_find_new_channel(int mt_ix) +int eRAL_process_find_new_channel(ral_enb_instance_t instanceP, int mt_ix) { int ch_ix; - DEBUG(" %s : mt_ix = %d\n", __FUNCTION__, mt_ix); + LOG_D(RAL_ENB, " %s : mt_ix = %d\n", __FUNCTION__, mt_ix); for (ch_ix = 0; ch_ix < RAL_MAX_RB; ch_ix++) { - if (ralpriv->mt[mt_ix].radio_channel[ch_ix].cnx_id == 0) { - break; - } + if (g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].cnx_id == 0) { + break; + } } - DEBUG (" %s : return %d\n" , __FUNCTION__, ch_ix); + LOG_D(RAL_ENB, " %s : return %d\n" , __FUNCTION__, ch_ix); return ch_ix; } /**************************************************************************** ** ** - ** Name: eRALlte_process_clean_channel() ** + ** Name: eRAL_process_clean_channel() ** ** ** ** Description: Cleans data of the specified Radio Bearer channel. ** ** ** @@ -130,16 +118,16 @@ int eRALlte_process_find_new_channel(int mt_ix) ** Others: None ** ** ** ***************************************************************************/ -void eRALlte_process_clean_channel(struct ral_lte_channel* channel) +void eRAL_process_clean_channel(struct ral_lte_channel* channel) { - DEBUG(" %s : cnx_id = %d, rbId = %d\n", __FUNCTION__, - channel->cnx_id, channel->rbId); + LOG_D(RAL_ENB, " %s : cnx_id = %d, rbId = %d\n", __FUNCTION__, + channel->cnx_id, channel->rbId); memset(channel, 0, sizeof (struct ral_lte_channel)); } /**************************************************************************** ** ** - ** Name: eRALlte_process_mt_addr_to_string() ** + ** Name: eRAL_process_mt_addr_to_string() ** ** ** ** Description: Display the specified IPv6 address. ** ** ** @@ -151,14 +139,14 @@ void eRALlte_process_clean_channel(struct ral_lte_channel* channel) ** Others: None ** ** ** ***************************************************************************/ -char* eRALlte_process_mt_addr_to_string(const unsigned char* ip_addr) +char* eRAL_process_mt_addr_to_string(const unsigned char* ip_addr) { static char buffer[40]; int i, index = 0; for (i = 0; i < 16; i++) { - index += sprintf(&buffer[index], "%.2hX", ip_addr[i]); - if (i % 2) buffer[index++] = ':'; + index += sprintf(&buffer[index], "%.2hX", ip_addr[i]); + if (i % 2) buffer[index++] = ':'; } buffer[--index] = '\0'; return buffer; @@ -166,7 +154,7 @@ char* eRALlte_process_mt_addr_to_string(const unsigned char* ip_addr) /**************************************************************************** ** ** - ** Name: eRALlte_process_mt_addr_to_l2id() ** + ** Name: eRAL_process_mt_addr_to_l2id() ** ** ** ** Description: Convert the specified IP address to Layer 2 identifier. ** ** ** @@ -178,11 +166,11 @@ char* eRALlte_process_mt_addr_to_string(const unsigned char* ip_addr) ** Others: None ** ** ** ***************************************************************************/ -void eRALlte_process_mt_addr_to_l2id(const unsigned char* mt_addr, unsigned int* l2id) +void eRAL_process_mt_addr_to_l2id(const unsigned char* mt_addr, unsigned int* l2id) { if ( !(mt_addr) || !(l2id) ) { - ERR(" %s : input parameter is NULL\n", __FUNCTION__); - return; + LOG_E(RAL_ENB, " %s : input parameter is NULL\n", __FUNCTION__); + return; } l2id[0] = mt_addr[0]+256 *(mt_addr[1]+256*(mt_addr[2]+256*(mt_addr[3]))); l2id[1] = mt_addr[4]+256 *(mt_addr[5]+256*(mt_addr[6]+256*(mt_addr[7]))); @@ -190,7 +178,7 @@ void eRALlte_process_mt_addr_to_l2id(const unsigned char* mt_addr, unsigned int* /**************************************************************************** ** ** - ** Name: eRALlte_process_cmp_mt_addr() ** + ** Name: eRAL_process_cmp_mt_addr() ** ** ** ** Description: Compares MT's IP address to the specified L2 identifier. ** ** ** @@ -204,20 +192,20 @@ void eRALlte_process_mt_addr_to_l2id(const unsigned char* mt_addr, unsigned int* ** Others: None ** ** ** ***************************************************************************/ -int eRALlte_process_cmp_mt_addr(const char* mt_addr, const char* l2id) +int eRAL_process_cmp_mt_addr(const char* mt_addr, const char* l2id) { int i; for (i = 0; i < 8; i++) { - if ((u8)l2id[i] != (u8)mt_addr[i+8]) { - return 0; - } + if ((u8)l2id[i] != (u8)mt_addr[i+8]) { + return 0; + } } return 1; } /**************************************************************************** ** ** - ** Name: eRALlte_process_find_mt_by_addr() ** + ** Name: eRAL_process_find_mt_by_addr() ** ** ** ** Description: Returns the index of the Mobile Terminal with the ** ** specified IP address. ** @@ -231,30 +219,30 @@ int eRALlte_process_cmp_mt_addr(const char* mt_addr, const char* l2id) ** Others: None ** ** ** ***************************************************************************/ -int eRALlte_process_find_mt_by_addr(const char* mt_addr) +int eRAL_process_find_mt_by_addr(ral_enb_instance_t instanceP, const char* mt_addr) { int mt_ix; for (mt_ix = 0; mt_ix < RAL_MAX_MT; mt_ix++) { - const char* l2id = (const char*)(&ralpriv->mt[mt_ix].ipv6_l2id[0]); - int i; - for (i = 0; i < 8; i++) { - if ((u8)l2id[i] != (u8)mt_addr[i+8]) { - break; - } - } - if (i == 8) { - break; - } + const char* l2id = (const char*)(&g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]); + int i; + for (i = 0; i < 8; i++) { + if ((u8)l2id[i] != (u8)mt_addr[i+8]) { + break; + } + } + if (i == 8) { + break; + } } - DEBUG (" %s : return %d\n" , __FUNCTION__, mt_ix); + LOG_D(RAL_ENB, " %s : return %d\n" , __FUNCTION__, mt_ix); return mt_ix; } /**************************************************************************** ** ** - ** Name: eRALlte_process_verify_pending_mt_status() ** + ** Name: eRAL_process_verify_pending_mt_status() ** ** ** ** Description: Checks the pending MT connection status and simulates RB ** ** setup if it is ready for Radio Bearer establishment. ** @@ -267,43 +255,43 @@ int eRALlte_process_find_mt_by_addr(const char* mt_addr) ** Others: None ** ** ** ***************************************************************************/ -void eRALlte_process_verify_pending_mt_status(void) +void eRAL_process_verify_pending_mt_status(ral_enb_instance_t instanceP) { int mt_ix; - if (!ralpriv->pending_mt_timer) { - DEBUG(" Pending MT timer expired\n"); - #ifdef RAL_REALTIME - _eRALlte_process_clean_pending_mt(); - #endif - #ifdef RAL_DUMMY - DEBUG(" SIMULATE MT arrival\n"); - mt_ix = eRALlte_NAS_update_MTs_list(); - DEBUG(" SIMULATE RB setup\n"); - _eRALlte_process_waiting_RB(mt_ix); - #endif + if (!g_enb_ral_obj[instanceP].pending_mt_timer) { + LOG_D(RAL_ENB, " Pending MT timer expired\n"); +#ifdef RAL_REALTIME + eRAL_process_clean_pending_mt(instanceP); +#endif +#ifdef RAL_DUMMY + LOG_D(RAL_ENB, " SIMULATE MT arrival\n"); + mt_ix = eRAL_NAS_update_MTs_list(); + LOG_D(RAL_ENB, " SIMULATE RB setup\n"); + eRAL_process_waiting_RB(mt_ix); +#endif } else { - #ifdef RAL_REALTIME - if (!( ralpriv->pending_mt_timer % 10)) { +#ifdef RAL_REALTIME + if (!( g_enb_ral_obj[instanceP].pending_mt_timer % 10)) { /* Get the list of MTs in the driver waiting for pending - * RB establishment */ - RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST, 0, 0); - RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST, 0, 0); + * RB establishment */ + // LG RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST, 0, 0); + // LG RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST, 0, 0); /* Check if the pending MT is in the list */ - mt_ix = eRALlte_process_find_mt_by_addr((char*)ralpriv->pending_mt.ipv6_addr); + mt_ix = eRAL_process_find_mt_by_addr(instanceP, (char*)g_enb_ral_obj[instanceP].pending_mt.ipv6_addr); if ( (mt_ix < RAL_MAX_MT) && - (ralpriv->mt[mt_ix].mt_state == RB_CONNECTED)) { - /* The pending MT is ready for RB establishment */ - _eRALlte_process_waiting_RB(mt_ix); + (g_enb_ral_obj[instanceP].mt[mt_ix].mt_state == RB_CONNECTED)) { + /* The pending MT is ready for RB establishment */ + eRAL_process_waiting_RB(instanceP, mt_ix); } } - #endif +#endif } } /**************************************************************************** ** ** - ** Name: eRALlte_process_map_qos() ** + ** Name: eRAL_process_map_qos() ** ** ** ** Description: Performs mapping of reserved bit rate to Radio QoS class, ** ** and mapping of traffic class to DCSP. ** @@ -320,7 +308,7 @@ void eRALlte_process_verify_pending_mt_status(void) ** Others: ralpriv ** ** ** ***************************************************************************/ -int eRALlte_process_map_qos(int mt_ix, int ch_ix) +int eRAL_process_map_qos(ral_enb_instance_t instanceP, int mt_ix, int ch_ix) { int resBitrateDL = 0, resBitrateUL = 0; struct ral_lte_channel *currChannel; @@ -330,76 +318,76 @@ int eRALlte_process_map_qos(int mt_ix, int ch_ix) */ if (mt_ix == RAL_MAX_MT) { - currChannel = &(ralpriv->mcast.radio_channel); - - /* multicast - reserved bit rate */ - resBitrateDL = (int)currChannel->resBitrate[1]; - if (resBitrateDL <= RAL_BITRATE_128k) { - currChannel->RadioQoSclass = 20; - } else if (resBitrateDL <= RAL_BITRATE_256k) { - currChannel->RadioQoSclass = 21; - } else if (resBitrateDL <= RAL_BITRATE_384k) { - currChannel->RadioQoSclass = 22; - } else { - ERR (" %s : Invalid requested resBitrate %d - Request will be rejected.\n", __FUNCTION__, resBitrateDL); - return 0; - } - - /* multicast - DSCP */ - if (currChannel->classId[1] < 64) { - currChannel->dscpDL = currChannel->classId[1]; - } else { - ERR (" %s : DSCP %d > 63 - NOT SUPPORTED - Request will be rejected.\n", __FUNCTION__, currChannel->classId[1]); - return 0; - } - DEBUG (" QoS Mapping : Requested radio QoS class %d, DSCP DL %d\n", - currChannel->RadioQoSclass, - currChannel->dscpDL); + currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); + + /* multicast - reserved bit rate */ + resBitrateDL = (int)currChannel->resBitrate[1]; + if (resBitrateDL <= RAL_BITRATE_128k) { + currChannel->RadioQoSclass = 20; + } else if (resBitrateDL <= RAL_BITRATE_256k) { + currChannel->RadioQoSclass = 21; + } else if (resBitrateDL <= RAL_BITRATE_384k) { + currChannel->RadioQoSclass = 22; + } else { + LOG_E(RAL_ENB, " %s : Invalid requested resBitrate %d - Request will be rejected.\n", __FUNCTION__, resBitrateDL); + return 0; + } + + /* multicast - DSCP */ + if (currChannel->classId[1] < 64) { + currChannel->dscpDL = currChannel->classId[1]; + } else { + LOG_E(RAL_ENB, " %s : DSCP %d > 63 - NOT SUPPORTED - Request will be rejected.\n", __FUNCTION__, currChannel->classId[1]); + return 0; + } + LOG_D(RAL_ENB, " QoS Mapping : Requested radio QoS class %d, DSCP DL %d\n", + currChannel->RadioQoSclass, + currChannel->dscpDL); } /* * Map for unicast flow */ else { - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - - /* unicast - reserved bit rate - CONVERSATIONAL */ - resBitrateDL = (int)currChannel->resBitrate[1]; - resBitrateUL = (int)currChannel->resBitrate[0]; - if ((resBitrateDL <= RAL_BITRATE_32k) && - (resBitrateUL <= RAL_BITRATE_32k)) { - currChannel->RadioQoSclass = 1; - } else if ((resBitrateDL <= RAL_BITRATE_64k) && - (resBitrateUL <= RAL_BITRATE_64k)) { - currChannel->RadioQoSclass = 2; - } else if ((resBitrateDL <= RAL_BITRATE_128k) && - (resBitrateUL <= RAL_BITRATE_128k)) { - currChannel->RadioQoSclass = 3; - } else if ((resBitrateDL <= RAL_BITRATE_256k) && - (resBitrateUL <= RAL_BITRATE_256k)) { - currChannel->RadioQoSclass = 4; - } else if ((resBitrateDL <= RAL_BITRATE_320k) && - (resBitrateUL <= RAL_BITRATE_320k)) { - currChannel->RadioQoSclass = 5; - } else if ((resBitrateDL >= RAL_BITRATE_384k) && - (resBitrateDL <= RAL_BITRATE_440k) && - (resBitrateUL <= RAL_BITRATE_64k)) { - currChannel->RadioQoSclass = 14; - } else { - ERR (" %s : Invalid requested resBitrate %d , %d - Request will be rejected\n", __FUNCTION__, resBitrateDL, resBitrateUL); - return 0; - } - - /* unicast - DSCP */ - if ((currChannel->classId[0] < 64) && - (currChannel->classId[1] < 64)) { - currChannel->dscpUL = currChannel->classId[0]; - currChannel->dscpDL = currChannel->classId[1]; - } else { - ERR (" %s : DSCP > 63 - NOT SUPPORTED - Request will be rejected.\n", __FUNCTION__); - return 0; - } - DEBUG (" QoS Mapping : Requested radio QoS class %d, DSCP UL %d, DSCP DL %d\n", currChannel->RadioQoSclass, currChannel->dscpUL, currChannel->dscpDL); + currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); + + /* unicast - reserved bit rate - CONVERSATIONAL */ + resBitrateDL = (int)currChannel->resBitrate[1]; + resBitrateUL = (int)currChannel->resBitrate[0]; + if ((resBitrateDL <= RAL_BITRATE_32k) && + (resBitrateUL <= RAL_BITRATE_32k)) { + currChannel->RadioQoSclass = 1; + } else if ((resBitrateDL <= RAL_BITRATE_64k) && + (resBitrateUL <= RAL_BITRATE_64k)) { + currChannel->RadioQoSclass = 2; + } else if ((resBitrateDL <= RAL_BITRATE_128k) && + (resBitrateUL <= RAL_BITRATE_128k)) { + currChannel->RadioQoSclass = 3; + } else if ((resBitrateDL <= RAL_BITRATE_256k) && + (resBitrateUL <= RAL_BITRATE_256k)) { + currChannel->RadioQoSclass = 4; + } else if ((resBitrateDL <= RAL_BITRATE_320k) && + (resBitrateUL <= RAL_BITRATE_320k)) { + currChannel->RadioQoSclass = 5; + } else if ((resBitrateDL >= RAL_BITRATE_384k) && + (resBitrateDL <= RAL_BITRATE_440k) && + (resBitrateUL <= RAL_BITRATE_64k)) { + currChannel->RadioQoSclass = 14; + } else { + LOG_E(RAL_ENB, " %s : Invalid requested resBitrate %d , %d - Request will be rejected\n", __FUNCTION__, resBitrateDL, resBitrateUL); + return 0; + } + + /* unicast - DSCP */ + if ((currChannel->classId[0] < 64) && + (currChannel->classId[1] < 64)) { + currChannel->dscpUL = currChannel->classId[0]; + currChannel->dscpDL = currChannel->classId[1]; + } else { + LOG_E(RAL_ENB, " %s : DSCP > 63 - NOT SUPPORTED - Request will be rejected.\n", __FUNCTION__); + return 0; + } + LOG_D(RAL_ENB, " QoS Mapping : Requested radio QoS class %d, DSCP UL %d, DSCP DL %d\n", currChannel->RadioQoSclass, currChannel->dscpUL, currChannel->dscpDL); } return 1; @@ -411,7 +399,7 @@ int eRALlte_process_map_qos(int mt_ix, int ch_ix) /**************************************************************************** ** ** - ** Name: _eRALlte_process_waiting_RB() ** + ** Name: eRAL_process_waiting_RB() ** ** ** ** Description: Allocates a new Radio Bearer parameters to the specified ** ** Mobile Terminal which was pending for RB establishment, ** @@ -425,235 +413,238 @@ int eRALlte_process_map_qos(int mt_ix, int ch_ix) ** Others: ralpriv ** ** ** ***************************************************************************/ -static void _eRALlte_process_waiting_RB(int mt_ix) +void eRAL_process_waiting_RB(ral_enb_instance_t instanceP, int mt_ix) { struct ral_lte_channel *currChannel; struct ral_lte_channel *pendingChannel; int ch_ix, f_ix; int dir, mapping_result, rc = -1; - DEBUG(" Establishment of pending RB now starting...\n"); - ch_ix = eRALlte_process_find_new_channel(mt_ix); + LOG_D(RAL_ENB, " Establishment of pending RB now starting...\n"); + ch_ix = eRAL_process_find_new_channel(instanceP, mt_ix); if (ch_ix == RAL_MAX_RB) { - DEBUG(" No RB available in MT - Deleting request data\n"); - _eRALlte_process_clean_pending_mt(); - return; + LOG_D(RAL_ENB, " No RB available in MT - Deleting request data\n"); + eRAL_process_clean_pending_mt(instanceP); + return; } - pendingChannel = &(ralpriv->pending_mt.radio_channel[0]); - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); + pendingChannel = &(g_enb_ral_obj[instanceP].pending_mt.radio_channel[0]); + currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; currChannel->rbId = RAL_DEFAULT_RAB_ID+ch_ix; currChannel->multicast = 0; - DEBUG(" mt_ix %d, ch_ix %d, cnx_id %d, rbId %d\n", - mt_ix, ch_ix, currChannel->cnx_id, currChannel->rbId); - memcpy((char *)&(ralpriv->mt[mt_ix].ipv6_addr), - (char *)&(ralpriv->pending_mt.ipv6_addr), 16); - DEBUG (" MT's address = %s\n", - eRALlte_process_mt_addr_to_string(ralpriv->mt[mt_ix].ipv6_addr)); + LOG_D(RAL_ENB, " mt_ix %d, ch_ix %d, cnx_id %d, rbId %d\n", + mt_ix, ch_ix, currChannel->cnx_id, currChannel->rbId); + memcpy((char *)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_addr), + (char *)&(g_enb_ral_obj[instanceP].pending_mt.ipv6_addr), 16); + LOG_D(RAL_ENB, " MT's address = %s\n", + eRAL_process_mt_addr_to_string(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_addr)); /* Save the pending data flow identifier into the list of active data flows */ - f_ix = eRALlte_action_save_flow_id(&ralpriv->pending_req_fid, currChannel->cnx_id); + f_ix = eRAL_action_save_flow_id(instanceP, &g_enb_ral_obj[instanceP].pending_req_fid, currChannel->cnx_id); if (f_ix < 0) { - DEBUG(" No RB available - Deleting request data\n"); - _eRALlte_process_clean_pending_mt(); - return; + LOG_D(RAL_ENB, " No RB available - Deleting request data\n"); + eRAL_process_clean_pending_mt(instanceP); + return; } /* Store resource parameters of the pending MT */ for (dir = 0; dir < 2; dir++) { - currChannel->flowId[dir] = f_ix; - currChannel->classId[dir]= pendingChannel->classId[dir] ; - currChannel->resBitrate[dir] = pendingChannel->resBitrate[dir]; - currChannel->meanBitrate[dir] = pendingChannel->meanBitrate[dir]; - currChannel->bktDepth[dir] = pendingChannel->bktDepth[dir]; - currChannel->pkBitrate[dir] = pendingChannel->pkBitrate[dir]; - currChannel->MTU[dir] = pendingChannel->MTU[dir]; - DEBUG(" qos value : DIR %d, flowId %d, classId %d, resBitrate %.1f \n", - dir, currChannel->flowId[dir], currChannel->classId[dir], currChannel->resBitrate[dir]); + currChannel->flowId[dir] = f_ix; + currChannel->classId[dir]= pendingChannel->classId[dir] ; + currChannel->resBitrate[dir] = pendingChannel->resBitrate[dir]; + currChannel->meanBitrate[dir] = pendingChannel->meanBitrate[dir]; + currChannel->bktDepth[dir] = pendingChannel->bktDepth[dir]; + currChannel->pkBitrate[dir] = pendingChannel->pkBitrate[dir]; + currChannel->MTU[dir] = pendingChannel->MTU[dir]; + LOG_D(RAL_ENB, " qos value : DIR %d, flowId %d, classId %d, resBitrate %.1f \n", + dir, currChannel->flowId[dir], currChannel->classId[dir], currChannel->resBitrate[dir]); } /* Map Qos */ - mapping_result = eRALlte_process_map_qos(mt_ix, ch_ix); + mapping_result = eRAL_process_map_qos(instanceP, mt_ix, ch_ix); if (mapping_result) { - #ifdef RAL_DUMMY - rc = eRALlte_NAS_send_rb_establish_request(mt_ix, ch_ix); - #endif - #ifdef RAL_REALTIME - rc = RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_ADD, mt_ix, ch_ix); - #endif +#ifdef RAL_DUMMY + rc = eRAL_NAS_send_rb_establish_request(mt_ix, ch_ix); +#endif +#ifdef RAL_REALTIME + // LG rc = RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_ADD, mt_ix, ch_ix); +#endif } if (rc < 0) { - /* Failed to send RB establishment request; release new RB data */ - eRALlte_process_clean_channel(currChannel); + /* Failed to send RB establishment request; release new RB data */ + eRAL_process_clean_channel(currChannel); } else { - /* RB establishment request has been sent; release pending MT data */ - ralpriv->pending_req_flag = 0; - _eRALlte_process_clean_pending_mt(); + /* RB establishment request has been sent; release pending MT data */ + g_enb_ral_obj[instanceP].pending_req_flag = 0; + eRAL_process_clean_pending_mt(instanceP); } } /**************************************************************************** - ** Name: _eRALlte_process_clean_pending_mt() ** + ** Name: eRAL_process_clean_pending_mt() ** ** Description: Deletes previously stored pending MT data. ** ***************************************************************************/ -static void _eRALlte_process_clean_pending_mt(void) +void eRAL_process_clean_pending_mt(ral_enb_instance_t instanceP) { - memset(ralpriv->pending_mt.ipv6_addr, 0 , 16); - eRALlte_process_clean_channel(&ralpriv->pending_mt.radio_channel[0]); + memset(g_enb_ral_obj[instanceP].pending_mt.ipv6_addr, 0 , 16); + eRAL_process_clean_channel(&g_enb_ral_obj[instanceP].pending_mt.radio_channel[0]); - ralpriv->pending_mt_timer = -1; - DEBUG(" Pending MT data deleted\n"); + g_enb_ral_obj[instanceP].pending_mt_timer = -1; + LOG_D(RAL_ENB, " Pending MT data deleted\n"); } /**************************************************************************** ** MW Added ** ***************************************************************************/ //--------------------------------------------------------------------------- -void RAL_printInitStatus(void){ -//--------------------------------------------------------------------------- - DEBUG("Network status updated \n"); - DEBUG("Mobile : %d, %d, %d, %d, %d, %d \n", - ralpriv->curr_cellId, - ralpriv->mt[0].ue_id, - ralpriv->mt[0].ipv6_l2id[0], - ralpriv->mt[0].ipv6_l2id[1], - ralpriv->mt[0].num_rbs , - ralpriv->mt[0].nas_state ); - DEBUG("Default rb : %d, %d, %d, %d, %d, %d, %d \n", - ralpriv->mt[0].radio_channel[0].rbId , - ralpriv->mt[0].radio_channel[0].RadioQoSclass , - ralpriv->mt[0].radio_channel[0].cnx_id , - ralpriv->mt[0].radio_channel[0].dscpUL , - ralpriv->mt[0].radio_channel[0].dscpDL , - ralpriv->mt[0].radio_channel[0].nas_state , - ralpriv->mt[0].radio_channel[0].status ); - - DEBUG("Number of connected MTs : %d\n\n", ralpriv->num_connected_mts); +void RAL_printInitStatus(ral_enb_instance_t instanceP){ + //--------------------------------------------------------------------------- + LOG_D(RAL_ENB, "Network status updated \n"); + LOG_D(RAL_ENB, "Mobile : %d, %d, %d, %d, %d, %d \n", + g_enb_ral_obj[instanceP].cell_id, + g_enb_ral_obj[instanceP].mt[0].ue_id, + g_enb_ral_obj[instanceP].mt[0].ipv6_l2id[0], + g_enb_ral_obj[instanceP].mt[0].ipv6_l2id[1], + g_enb_ral_obj[instanceP].mt[0].num_rbs , + g_enb_ral_obj[instanceP].mt[0].nas_state ); + LOG_D(RAL_ENB, "Default rb : %d, %d, %d, %d, %d, %d, %d \n", + g_enb_ral_obj[instanceP].mt[0].radio_channel[0].rbId , + g_enb_ral_obj[instanceP].mt[0].radio_channel[0].RadioQoSclass , + g_enb_ral_obj[instanceP].mt[0].radio_channel[0].cnx_id , + g_enb_ral_obj[instanceP].mt[0].radio_channel[0].dscpUL , + g_enb_ral_obj[instanceP].mt[0].radio_channel[0].dscpDL , + g_enb_ral_obj[instanceP].mt[0].radio_channel[0].nas_state , + g_enb_ral_obj[instanceP].mt[0].radio_channel[0].status ); + + LOG_D(RAL_ENB, "Number of connected MTs : %d\n\n", g_enb_ral_obj[instanceP].num_connected_mts); } //--------------------------------------------------------------------------- // poll for measures in NAS -void RAL_NAS_measures_polling(void){ -//--------------------------------------------------------------------------- - #ifdef RAL_REALTIME - RAL_process_NAS_message(IO_OBJ_MEAS, IO_CMD_LIST,0,0); - #endif - #ifdef RAL_DUMMY - eRALlte_NAS_send_measure_request(); - #endif +void RAL_NAS_measures_polling(ral_enb_instance_t instanceP){ + //--------------------------------------------------------------------------- +#ifdef RAL_REALTIME + // LG RAL_process_NAS_message(IO_OBJ_MEAS, IO_CMD_LIST,0,0); +#endif +#ifdef RAL_DUMMY + eRAL_NAS_send_measure_request(); +#endif } //--------------------------------------------------------------------------- // Common function to report congestion -void RAL_NAS_report_congestion(int ix){ -//--------------------------------------------------------------------------- - MIH_C_TRANSACTION_ID_T transaction_id; - MIH_C_LINK_TUPLE_ID_T link_identifier; - LIST(MIH_C_LINK_PARAM_RPT, LinkParametersReportList); - - DEBUG("Congestion detected for UE%d, sending congestion notification to MIH User \n", ix); - transaction_id = MIH_C_get_new_transaction_id(); - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; - Bit_Buffer_t *plmn = new_BitBuffer_0(); - BitBuffer_wrap(plmn, (unsigned char*) ralpriv->plmn, DEFAULT_PLMN_SIZE); - MIH_C_PLMN_ID_decode(plmn, &link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id); - free_BitBuffer(plmn); - link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = ralpriv->curr_cellId; - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - // - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS; - // LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_GEN; - // LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_gen = MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = ralpriv->rlcBufferOccupancy[ix]; - - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_val = ralpriv->congestion_threshold; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_xdir = MIH_C_ABOVE_THRESHOLD; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - - // - eRALlte_send_link_parameters_report_indication(&transaction_id, &link_identifier, &LinkParametersReportList_list); - ralpriv->congestion_flag = RAL_TRUE; +void RAL_NAS_report_congestion(ral_enb_instance_t instanceP, int ix){ + //--------------------------------------------------------------------------- + MIH_C_TRANSACTION_ID_T transaction_id; + MIH_C_LINK_TUPLE_ID_T link_identifier; + LIST(MIH_C_LINK_PARAM_RPT, LinkParametersReportList); + + LOG_D(RAL_ENB, "Congestion detected for UE%d, sending congestion notification to MIH User \n", ix); + transaction_id = MIH_C_get_new_transaction_id(); + link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; + link_identifier.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; + Bit_Buffer_t *plmn = new_BitBuffer_0(); + BitBuffer_wrap(plmn, (unsigned char*) &g_enb_ral_obj[instanceP].plmn_id, sizeof(g_enb_ral_obj[instanceP].plmn_id)); + MIH_C_PLMN_ID_decode(plmn, &link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id); + free_BitBuffer(plmn); + link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_enb_ral_obj[instanceP].cell_id; + link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; + // + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS; + // LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_GEN; + // LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_gen = MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; + // LG obsolete rlcBufferOccupancy LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = g_enb_ral_obj[instanceP].rlcBufferOccupancy[ix]; + + LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD; +#warning "TO DO" + //LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_val = g_enb_ral_obj[instanceP].congestion_threshold; + LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_xdir = MIH_C_ABOVE_THRESHOLD; + LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; + + // + eRAL_send_link_parameters_report_indication(instanceP, &transaction_id, &link_identifier, &LinkParametersReportList_list); +#warning "TO DO?" + //g_enb_ral_obj[instanceP].congestion_flag = RAL_TRUE; } //--------------------------------------------------------------------------- // Temp - Enter hard-coded measures in IAL -void RAL_NAS_measures_analyze(void){ -//--------------------------------------------------------------------------- - MIH_C_TRANSACTION_ID_T transaction_id; - MIH_C_LINK_TUPLE_ID_T link_identifier; - LIST(MIH_C_LINK_PARAM_RPT, LinkParametersReportList); - int ix; - - LinkParametersReportList_list.length = 0; - - if (ralpriv->congestion_flag == RAL_FALSE){ - // Check congestion - for (ix=0; ix<ralpriv->num_UEs; ix++){ - if ((ralpriv->rlcBufferOccupancy[ix] > ralpriv->congestion_threshold)&& - ((ralpriv->mih_subscribe_req_event_list && MIH_C_BIT_LINK_PARAMETERS_REPORT )>0)){ - RAL_NAS_report_congestion(ix); - break; - } +/*LGvoid RAL_NAS_measures_analyze(ral_enb_instance_t instanceP){ + //--------------------------------------------------------------------------- + MIH_C_TRANSACTION_ID_T transaction_id; + MIH_C_LINK_TUPLE_ID_T link_identifier; + LIST(MIH_C_LINK_PARAM_RPT, LinkParametersReportList); + int ix; + + LinkParametersReportList_list.length = 0; + + if (g_enb_ral_obj[instanceP].congestion_flag == RAL_FALSE){ + // Check congestion + for (ix=0; ix<g_enb_ral_obj[instanceP].num_UEs; ix++){ + if ((g_enb_ral_obj[instanceP].rlcBufferOccupancy[ix] > g_enb_ral_obj[instanceP].congestion_threshold)&& + ((g_enb_ral_obj[instanceP].mih_subscribe_req_event_list && MIH_C_BIT_LINK_PARAMETERS_REPORT )>0)){ + RAL_NAS_report_congestion(instanceP, ix); + break; + } + } + } else if (g_enb_ral_obj[instanceP].measures_triggered_flag == RAL_TRUE){ + // Measures should be reported to MIH user + LOG_D(RAL_ENB, "Sending traffic measures to MIH User \n"); + + transaction_id = MIH_C_get_new_transaction_id(); + link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; + link_identifier.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; + Bit_Buffer_t *plmn = new_BitBuffer_0(); + BitBuffer_wrap(plmn, (unsigned char*) g_enb_ral_obj[instanceP].plmn, DEFAULT_PLMN_SIZE); + MIH_C_PLMN_ID_decode(plmn, &link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id); + free_BitBuffer(plmn); + link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_enb_ral_obj[instanceP].cell_id; + link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; + // + // send parameters !!! Value link_param_val must be in 0...65535 range + // UE0 scheduledPRB + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = g_enb_ral_obj[instanceP].scheduledPRB[0]; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; + LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; + // UE0 totalDataVolume + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = (g_enb_ral_obj[instanceP].totalDataVolume[0]/1000); + LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; + LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; + // UE1 scheduledPRB + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = g_enb_ral_obj[instanceP].scheduledPRB[1]; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; + LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; + // UE1 totalDataVolume + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = (g_enb_ral_obj[instanceP].totalDataVolume[1]/1000); + LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; + LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; + // totalNumPRBs + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = g_enb_ral_obj[instanceP].totalNumPRBs; + LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; + LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; + // + eRAL_send_link_parameters_report_indication(instanceP, &transaction_id, &link_identifier, &LinkParametersReportList_list); + } - } else if (ralpriv->measures_triggered_flag == RAL_TRUE){ - // Measures should be reported to MIH user - DEBUG("Sending traffic measures to MIH User \n"); - - transaction_id = MIH_C_get_new_transaction_id(); - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; - Bit_Buffer_t *plmn = new_BitBuffer_0(); - BitBuffer_wrap(plmn, (unsigned char*) ralpriv->plmn, DEFAULT_PLMN_SIZE); - MIH_C_PLMN_ID_decode(plmn, &link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id); - free_BitBuffer(plmn); - link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = ralpriv->curr_cellId; - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - // - // send parameters !!! Value link_param_val must be in 0...65535 range - // UE0 scheduledPRB - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = ralpriv->scheduledPRB[0]; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - // UE0 totalDataVolume - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = (ralpriv->totalDataVolume[0]/1000); - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - // UE1 scheduledPRB - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = ralpriv->scheduledPRB[1]; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - // UE1 totalDataVolume - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = (ralpriv->totalDataVolume[1]/1000); - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - // totalNumPRBs - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = ralpriv->totalNumPRBs; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; -// - eRALlte_send_link_parameters_report_indication(&transaction_id, &link_identifier, &LinkParametersReportList_list); - - } } +*/ diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_rrc_msg.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_rrc_msg.c new file mode 100755 index 0000000000..c6b90c2146 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_rrc_msg.c @@ -0,0 +1,108 @@ +/***************************************************************************** + * Eurecom OpenAirInterface 3 + * Copyright(c) 2012 Eurecom + * + * Source eRAL_subscribe.c + * + * Version 0.1 + * + * Date 11/27/2013 + * + * Product MIH RAL LTE + * + * Subsystem + * + * Authors Lionel Gauthier + * + * Description + * + *****************************************************************************/ +#define LTE_RAL_ENB +#define LTE_RAL_ENB_RRC_MSG_C +#include "lteRALenb.h" + +static int ueid2eui48(u8 *euiP, u8* ue_idP) +{ + // inspired by linux-source-3.2.0/net/ipv6/addrconf.c + memcpy(euiP, ue_idP, 3); + memcpy(euiP + 5, ue_idP + 3, 3); + euiP[3] = 0xFF; + euiP[4] = 0xFE; + euiP[0] ^= 2; + return 0; +} + +//--------------------------------------------------------------------------------------------------------------------- +void eRAL_rx_rrc_ral_system_configuration_indication(instance_t instanceP, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + g_enb_ral_obj[instanceP].plmn_id = RRC_RAL_SYSTEM_CONFIGURATION_IND(msg_p).plmn_id; + g_enb_ral_obj[instanceP].cell_id = RRC_RAL_SYSTEM_CONFIGURATION_IND(msg_p).cell_id; +} + +//--------------------------------------------------------------------------------------------------------------------- +void eRAL_rx_rrc_ral_connection_establishment_indication(instance_t instanceP, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + MIH_C_LINK_TUPLE_ID_T link_tuple_id; + uint8_t ue_id_array[MIH_C_3GPP_ADDR_LENGTH]; + uint8_t mn_link_addr[MIH_C_3GPP_ADDR_LENGTH]; + uint64_t ue_id; //EUI-64 + int i; + + // The LINK_ID contains the MN LINK_ADDR + link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; + link_tuple_id.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_ADDR; + memset(ue_id_array, 0, MIH_C_3GPP_ADDR_LENGTH); +#warning "TO DO FIX UE_ID TYPE in rrc_ral_connection_establishment_ind_t" + ue_id = (uint64_t)RRC_RAL_CONNECTION_ESTABLISHMENT_IND(msg_p).ue_id; + for (i = 0; i < MIH_C_3GPP_ADDR_LENGTH; i++) { + ue_id_array[MIH_C_3GPP_ADDR_LENGTH-1-i] = (ue_id & 0x00000000000000FF); + ue_id = ue_id >> 8; + } + ueid2eui48(mn_link_addr, ue_id_array); + MIH_C_3GPP_ADDR_set(&(link_tuple_id.link_id.link_addr._union._3gpp_addr), NULL, 8); + + //The optional LINK_ADDR may contains a link address of PoA. + link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; + + eRAL_send_link_up_indication(instanceP, &g_enb_ral_obj[instanceP].transaction_id, + &link_tuple_id, + NULL, //MIH_C_LINK_ADDR_T *old_arP,(Optional) Old Access Router link address. + NULL, //MIH_C_LINK_ADDR_T *new_arP,(Optional) New Access Router link address. + NULL, //MIH_C_IP_RENEWAL_FLAG_T *flagP, (Optional) Indicates whether the MN needs to change IP Address in the new PoA. + NULL); //MIH_C_IP_MOB_MGMT_T *mobil_mngtP, (Optional) Indicates the type of Mobility Management Protocol supported by the new PoA. + + g_enb_ral_obj[instanceP].transaction_id ++; + +} +//--------------------------------------------------------------------------------------------------------------------- +void eRAL_rx_rrc_ral_connection_reestablishment_indication(instance_t instance, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ +#warning "TO DO ral_rx_rrc_ral_connection_reestablishment_indication" +} +//--------------------------------------------------------------------------------------------------------------------- +void eRAL_rx_rrc_ral_connection_reconfiguration_indication(instance_t instance, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + +} +//--------------------------------------------------------------------------------------------------------------------- +void eRAL_rx_rrc_ral_measurement_report_indication(instance_t instance, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + +} +//--------------------------------------------------------------------------------------------------------------------- +void eRAL_rx_rrc_ral_connection_release_indication(instance_t instance, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + +} + + + + + + diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_subscribe.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_subscribe.c index 84485d85ca..7481a921e8 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_subscribe.c +++ b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_subscribe.c @@ -2,7 +2,7 @@ * Eurecom OpenAirInterface 3 * Copyright(c) 2012 Eurecom * - * Source eRALlte_subscribe.c + * Source eRAL_subscribe.c * * Version 0.1 * @@ -17,11 +17,9 @@ * Description * *****************************************************************************/ - -#include "lteRALenb_subscribe.h" - -#include "lteRALenb_mih_msg.h" -#include "lteRALenb_variables.h" +#define LTE_RAL_ENB +#define LTE_RAL_ENB_SUBSCRIBE_C +#include "lteRALenb.h" /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -29,7 +27,7 @@ /**************************************************************************** ** ** - ** Name: eRALlte_subscribe_request() ** + ** Name: eRAL_subscribe_request() ** ** ** ** Description: Subscribes the MIH-F to receive specified link event ** ** indications and sends Link Event Subscribe confirmation ** @@ -43,35 +41,35 @@ ** Others: ralpriv ** ** ** ***************************************************************************/ -void eRALlte_subscribe_request(MIH_C_Message_Link_Event_Subscribe_request_t* msgP) +void eRAL_subscribe_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Event_Subscribe_request_t* msgP) { MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; /* Check whether the action request is supported */ - if (ralpriv->mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_SUBSCRIBE) + if (g_enb_ral_obj[instanceP].mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_SUBSCRIBE) { - MIH_C_LINK_EVENT_LIST_T mih_subscribed_req_event_list; + MIH_C_LINK_EVENT_LIST_T mih_subscribed_req_event_list; - ralpriv->mih_subscribe_req_event_list |= (msgP->primitive.RequestedLinkEventList & ralpriv->mih_supported_link_event_list); + g_enb_ral_obj[instanceP].mih_subscribe_req_event_list |= (msgP->primitive.RequestedLinkEventList & g_enb_ral_obj[instanceP].mih_supported_link_event_list); - mih_subscribed_req_event_list = ralpriv->mih_subscribe_req_event_list & msgP->primitive.RequestedLinkEventList; + mih_subscribed_req_event_list = g_enb_ral_obj[instanceP].mih_subscribe_req_event_list & msgP->primitive.RequestedLinkEventList; - status = MIH_C_STATUS_SUCCESS; + status = MIH_C_STATUS_SUCCESS; - eRALlte_send_event_subscribe_confirm(&msgP->header.transaction_id, - &status, - &mih_subscribed_req_event_list); + eRAL_send_event_subscribe_confirm(instanceP, &msgP->header.transaction_id, + &status, + &mih_subscribed_req_event_list); } else { - eRALlte_send_event_subscribe_confirm(&msgP->header.transaction_id, - &status, - NULL); + eRAL_send_event_subscribe_confirm(instanceP, &msgP->header.transaction_id, + &status, + NULL); } } /**************************************************************************** ** ** - ** Name: eRALlte_unsubscribe_request() ** + ** Name: eRAL_unsubscribe_request() ** ** ** ** Description: Unsubscribes the MIH-F to receive specified link event ** ** indications and sends Link Event Unsubscribe confirmation ** @@ -85,31 +83,31 @@ void eRALlte_subscribe_request(MIH_C_Message_Link_Event_Subscribe_request_t* msg ** Others: ralpriv ** ** ** ***************************************************************************/ -void eRALlte_unsubscribe_request(MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP) +void eRAL_unsubscribe_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP) { MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; /* Check whether the action request is supported */ - if (ralpriv->mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE) + if (g_enb_ral_obj[instanceP].mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE) { - MIH_C_LINK_EVENT_LIST_T mih_unsubscribed_req_event_list; - MIH_C_LINK_EVENT_LIST_T saved_req_event_list; + MIH_C_LINK_EVENT_LIST_T mih_unsubscribed_req_event_list; + MIH_C_LINK_EVENT_LIST_T saved_req_event_list; - saved_req_event_list = ralpriv->mih_subscribe_req_event_list; + saved_req_event_list = g_enb_ral_obj[instanceP].mih_subscribe_req_event_list; - ralpriv->mih_subscribe_req_event_list &= ~(msgP->primitive.RequestedLinkEventList & ralpriv->mih_supported_link_event_list); - mih_unsubscribed_req_event_list = ralpriv->mih_subscribe_req_event_list ^ saved_req_event_list; + g_enb_ral_obj[instanceP].mih_subscribe_req_event_list &= ~(msgP->primitive.RequestedLinkEventList & g_enb_ral_obj[instanceP].mih_supported_link_event_list); + mih_unsubscribed_req_event_list = g_enb_ral_obj[instanceP].mih_subscribe_req_event_list ^ saved_req_event_list; - status = MIH_C_STATUS_SUCCESS; + status = MIH_C_STATUS_SUCCESS; - eRALlte_send_event_unsubscribe_confirm(&msgP->header.transaction_id, - &status, - &mih_unsubscribed_req_event_list); + eRAL_send_event_unsubscribe_confirm(instanceP, &msgP->header.transaction_id, + &status, + &mih_unsubscribed_req_event_list); } else { - eRALlte_send_event_unsubscribe_confirm(&msgP->header.transaction_id, - &status, - NULL); + eRAL_send_event_unsubscribe_confirm(instanceP, &msgP->header.transaction_id, + &status, + NULL); } } diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_thresholds.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_thresholds.c index f1d1887b21..409133a091 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_thresholds.c +++ b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_thresholds.c @@ -2,7 +2,7 @@ * Eurecom OpenAirInterface 3 * Copyright(c) 2012 Eurecom * - * Source eRALlte_thresholds.c + * Source eRAL_thresholds.c * * Version 0.1 * @@ -17,13 +17,11 @@ * Description * *****************************************************************************/ +#define LTE_RAL_ENB +#define LTE_RAL_ENB_THRESHOLDS_C +#include <assert.h> +#include "lteRALenb.h" -#include "lteRALenb_thresholds.h" - -#include "lteRALenb_mih_msg.h" -#include "lteRALenb_variables.h" -#include "lteRALenb_constants.h" -#include "lteRALenb_proto.h" /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -31,103 +29,128 @@ /**************************************************************************** ** ** - ** Name: eRALlte_configure_thresholds_request() ** + ** Name: eRAL_configure_thresholds_request() ** ** ** - ** Description: Processes the Link_Configure_Thresholds.request message ** - ** and sends a Link_Configure_Thresholds.confirm message to ** - ** the MIHF. ** + ** Description: Forwards the Link_Configure_Thresholds.request message ** + ** to the RRC layer. ** ** ** - ** Inputs: msgP: Pointer to the received message ** - ** Others: ralpriv ** + ** Inputs: msgP: Pointer to the received message ** + ** Others: ralpriv ** ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** ** ** ***************************************************************************/ -void eRALlte_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* msgP) +void eRAL_configure_thresholds_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Configure_Thresholds_request_t* msgP) { - MIH_C_STATUS_T status = MIH_C_STATUS_SUCCESS; - unsigned int index; - //unsigned int temp_polling_interval; - - DEBUG("\n"); - //DEBUG(" Configure thresholds request only returns success status to MIH_USER\n"); + unsigned int index; + unsigned int th_index; + rrc_ral_configure_threshold_req_t configure_threshold_req; + MessageDef *message_p; + + message_p = itti_alloc_new_message (TASK_RAL_ENB, RRC_RAL_CONFIGURE_THRESHOLD_REQ); + + memset(&configure_threshold_req, 0, sizeof(rrc_ral_configure_threshold_req_t)); + + // copy transaction id + configure_threshold_req.transaction_id = msgP->header.transaction_id; + + // configure_threshold_req.num_link_cfg_params = 0; // done + for (index = 0; index < msgP->primitive.LinkConfigureParameterList_list.length; index++) { + // copy link_param_type + configure_threshold_req.link_cfg_params[index].link_param_type.choice = msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type.choice; + switch (configure_threshold_req.link_cfg_params[index].link_param_type.choice) { + case RAL_LINK_PARAM_TYPE_CHOICE_GEN: + memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_gen, + &msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_gen, + sizeof(ral_link_param_gen_t)); + break; + case RAL_LINK_PARAM_TYPE_CHOICE_QOS: + memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_qos, + &msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_qos, + sizeof(ral_link_param_qos_t)); + break; + case RAL_LINK_PARAM_TYPE_CHOICE_LTE: + memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_lte, + &msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_lte, + sizeof(ral_link_param_lte_t)); + break; + default: + assert(1==0); + } + configure_threshold_req.num_link_cfg_params += 1; + + // copy choice + configure_threshold_req.link_cfg_params[index].union_choice = msgP->primitive.LinkConfigureParameterList_list.val[index].choice; + + // copy _union + switch (configure_threshold_req.link_cfg_params[index].union_choice) { + case RAL_LINK_CFG_PARAM_CHOICE_TIMER_NULL: + configure_threshold_req.link_cfg_params[index]._union.null_attr = 0; + break; + case RAL_LINK_CFG_PARAM_CHOICE_TIMER: + configure_threshold_req.link_cfg_params[index]._union.timer_interval = msgP->primitive.LinkConfigureParameterList_list.val[index]._union.timer_interval; + default: + assert(1==0); + } - // SAVE REQUEST - memcpy(&ralpriv->mih_link_cfg_param_thresholds_list, &msgP->primitive.LinkConfigureParameterList_list, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); + // copy th_action + configure_threshold_req.link_cfg_params[index].th_action = msgP->primitive.LinkConfigureParameterList_list.val[index].th_action; - for (index = 0; index < ralpriv->mih_link_cfg_param_thresholds_list.length; index++) { - ralpriv->active_mih_link_cfg_param_threshold[index] = MIH_C_BOOLEAN_TRUE; - if ( ralpriv->mih_link_cfg_param_thresholds_list.val[index].th_action== MIH_C_SET_NORMAL_THRESHOLD){ - ralpriv->measures_triggered_flag = RAL_TRUE; - // read period - ralpriv->requested_period = ralpriv->mih_link_cfg_param_thresholds_list.val[index]._union.timer_interval; - ralpriv->meas_polling_interval = 1 + ((ralpriv->requested_period *1000)/ MIH_C_RADIO_POLLING_INTERVAL_MICRO_SECONDS); - //DEBUG(" Polling interval %d\n\n\n", temp_polling_interval); - ralpriv->meas_polling_counter = 1; - break; - } else if ( ralpriv->mih_link_cfg_param_thresholds_list.val[index].th_action == MIH_C_CANCEL_THRESHOLD){ - ralpriv->measures_triggered_flag = RAL_FALSE; - // read period - ralpriv->requested_period = 0; - ralpriv->meas_polling_interval = RAL_DEFAULT_MEAS_POLLING_INTERVAL; - ralpriv->meas_polling_counter = 1; - break; + // configure_threshold_req.link_cfg_params[index].num_thresholds = 0; // done + for (th_index = 0; th_index < msgP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.length;th_index++) { + configure_threshold_req.link_cfg_params[index].thresholds[th_index].threshold_val = msgP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.val[th_index].threshold_val; + configure_threshold_req.link_cfg_params[index].thresholds[th_index].threshold_xdir = msgP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.val[th_index].threshold_xdir; + configure_threshold_req.link_cfg_params[index].num_thresholds += 1; } } - DEBUG(" Measurement values configured : Measures active %d, Requested period %d, Polling interval %d\n\n", - ralpriv->measures_triggered_flag, ralpriv->requested_period, ralpriv->meas_polling_interval); - - eRALlte_send_configure_thresholds_confirm(&msgP->header.transaction_id, &status, NULL); - -/* MIH_C_STATUS_T status; - MIH_C_LINK_CFG_STATUS_LIST_T link_cfg_status_list; - unsigned int threshold_index; - unsigned int link_index; - unsigned int result_index; - - // SAVE REQUEST - // IT IS ASSUMED SINCE IT IS NOT CLEAR IN SPECs THAT THERE IS NO NEED TO MERGE CONFIGURE_THRESHOLDS_requests - //memset(&ralpriv->mih_link_cfg_param_thresholds_list, 0, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); - memcpy(&ralpriv->mih_link_cfg_param_thresholds_list, &messageP->primitive.LinkConfigureParameterList_list, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); - - status = MIH_C_STATUS_SUCCESS; - - result_index = 0; - for (link_index = 0; - link_index < messageP->primitive.LinkConfigureParameterList_list.length; - link_index++) { - ralpriv->active_mih_link_cfg_param_threshold[link_index] = MIH_C_BOOLEAN_TRUE; - for (threshold_index = 0; - threshold_index < messageP->primitive.LinkConfigureParameterList_list.val[link_index].threshold_list.length; - threshold_index ++) { - - memcpy(&link_cfg_status_list.val[result_index].link_param_type, - &messageP->primitive.LinkConfigureParameterList_list.val[link_index].link_param_type, - sizeof(MIH_C_LINK_PARAM_TYPE_T)); - - memcpy(&link_cfg_status_list.val[result_index].threshold, - &messageP->primitive.LinkConfigureParameterList_list.val[link_index].threshold_list.val[threshold_index], - sizeof(MIH_C_THRESHOLD_T)); - - // NOW, ALWAYS SAY OK FOR PARAMETERS, BUT MAY BE WE WILL PUT MIH_C_BOOLEAN_FALSE in active_mih_link_cfg_param_threshold[link_index] - link_cfg_status_list.val[result_index].config_status = MIH_C_CONFIG_STATUS_SUCCESS; + memcpy (&message_p->ittiMsg, (void *) &configure_threshold_req, sizeof(rrc_ral_configure_threshold_req_t)); + itti_send_msg_to_task (TASK_RRC_ENB, instanceP, message_p); +} - result_index += 1; +//--------------------------------------------------------------------------------------------------------------------- +void eRAL_rx_rrc_ral_configure_threshold_conf(instance_t instance, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + MIH_C_STATUS_T status; + // This parameter is not included if Status does not indicate “Success.†+ MIH_C_LINK_CFG_STATUS_LIST_T link_cfg_status_list; + unsigned int i; + + status = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).status; + if (status == RAL_STATUS_SUCCESS) { + link_cfg_status_list.length = 0; + for (i = 0; i < RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).num_link_cfg_params; i++) { + link_cfg_status_list.val[i].link_param_type.choice = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type.choice; + switch (link_cfg_status_list.val[i].link_param_type.choice) { + case RAL_LINK_PARAM_TYPE_CHOICE_GEN: + memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_gen, + &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type._union.link_param_gen, + sizeof(ral_link_param_gen_t)); + break; + case RAL_LINK_PARAM_TYPE_CHOICE_QOS: + memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_qos, + &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type._union.link_param_qos, + sizeof(ral_link_param_qos_t)); + break; + case RAL_LINK_PARAM_TYPE_CHOICE_LTE: + memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_lte, + &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type._union.link_param_lte, + sizeof(ral_link_param_lte_t)); + break; + default: + assert(1==0); + } + link_cfg_status_list.val[i].threshold.threshold_val = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].threshold.threshold_val; + link_cfg_status_list.val[i].threshold.threshold_xdir = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].threshold.threshold_xdir; + link_cfg_status_list.val[i].config_status = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].config_status; + link_cfg_status_list.length += 1; } + eRAL_send_configure_thresholds_confirm(instance, &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).transaction_id, &status, &link_cfg_status_list); + } else { + eRAL_send_configure_thresholds_confirm(instance, &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).transaction_id, &status, NULL); } - // Say following thresholds entries are not configured - for (link_index = messageP->primitive.LinkConfigureParameterList_list.length; - link_index < MIH_C_LINK_CFG_PARAM_LIST_LENGTH; - link_index++) { - ralpriv->active_mih_link_cfg_param_threshold[link_index] = MIH_C_BOOLEAN_FALSE; - } - link_cfg_status_list.length = result_index; - - eRALte_send_configure_thresholds_confirm(&messageP->header.transaction_id,&status, &link_cfg_status_list); -*/ } - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue.h new file mode 100755 index 0000000000..4cafe9a142 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue.h @@ -0,0 +1,39 @@ +/***************************************************************************** + * Eurecom OpenAirInterface 3 + * Copyright(c) 2013 Eurecom + * + * Source lteRALue.h + * + * Version 0.1 + * + * Date 11/27/2013 + * + * Product MIH RAL LTE + * + * Subsystem RAL-LTE + * + * Authors Lionel Gauthier + * + * Description Header file to be included by any module that wants to interface with RAL UE. + * + *****************************************************************************/ +#ifndef __LTE_RAL_UE_H__ +#define __LTE_RAL_UE_H__ + +#include "MIH_C.h" + +#include "openair_types.h" +#include "platform_constants.h" +#include "platform_types.h" + +#include "lteRALue_constants.h" +#include "lteRALue_variables.h" +#include "lteRALue_main.h" +#include "lteRALue_action.h" +#include "lteRALue_mih_msg.h" +#include "lteRALue_rrc_msg.h" +#include "lteRALue_parameters.h" +//#include "lteRALue_process.h" +#include "lteRALue_subscribe.h" +#include "lteRALue_thresholds.h" +#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_action.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_action.h new file mode 100755 index 0000000000..d7d2aba60b --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_action.h @@ -0,0 +1,81 @@ +/******************************************************************************* + * + * Eurecom OpenAirInterface 3 + * Copyright(c) 2013 Eurecom + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information + * Openair Admin: openair_admin@eurecom.fr + * Openair Tech : openair_tech@eurecom.fr + * Forums : http://forums.eurecom.fsr/openairinterface + * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France + * + *******************************************************************************/ +/*! \file lteralue_action.h + * \brief + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \date 2012 + * \version + * \note + * \bug + * \warning + */ + +#ifndef __LTE_RAL_UE_ACTION_H__ +#define __LTE_RAL_UE_ACTION_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_UE_ACTION_C +# define private_lteralue_action(x) x +# define protected_lteralue_action(x) x +# define public_lteralue_action(x) x +# else +# ifdef LTE_RAL_UE +# define private_lteralue_action(x) +# define protected_lteralue_action(x) extern x +# define public_lteralue_action(x) extern x +# else +# define private_lteralue_action(x) +# define protected_lteralue_action(x) +# define public_lteralue_action(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALue.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ +#ifdef MIH_C_MEDIEVAL_EXTENSIONS + +#endif // MIH_C_MEDIEVAL_EXTENSIONS +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ +protected_lteralue_action(void mRAL_action_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Action_request_t* messageP);) + + + +#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_constants.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_constants.h index e10098a48b..6b64beb9c0 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_constants.h +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_constants.h @@ -34,21 +34,19 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#ifndef __MRALLTE_CONSTANTS_H__ -#define __MRALLTE_CONSTANTS_H__ +#ifndef __LTERALUE_CONSTANTS_H__ +#define __LTERALUE_CONSTANTS_H__ //----------------------------------------------------------------------------- -#define DEFAULT_LOCAL_PORT_RAL "1235" -#define DEFAULT_REMOTE_PORT_MIHF "1025" -#define DEFAULT_IP_ADDRESS_MIHF "127.0.0.1" -#define DEFAULT_IP_ADDRESS_RAL "127.0.0.1" -#define DEFAULT_LINK_ID "link" //"lte" -#define DEFAULT_MIHF_ID "mihf1" +#define UE_DEFAULT_LOCAL_PORT_RAL "1335" +#define UE_DEFAULT_REMOTE_PORT_MIHF "1125" +#define UE_DEFAULT_IP_ADDRESS_MIHF "127.0.0.1" +#define UE_DEFAULT_IP_ADDRESS_RAL "127.0.0.1" +#define UE_DEFAULT_LINK_ID_RAL "ue_lte_link" +#define UE_DEFAULT_LINK_ADDRESS_RAL "060080149150" +#define UE_DEFAULT_MIHF_ID "mihf_ue" #define DEFAULT_ADDRESS_3GPP "0335060080149150" #define DEFAULT_ADDRESS_eNB "0000000000000001" -//----------------------------------------------------------------------------- -#define MIH_C_RADIO_POLLING_INTERVAL_MICRO_SECONDS 50000 -#define MIH_C_RADIO_POLLING_INTERVAL_SECONDS 0 //----------------------------------------------------------------------------- // Constants for scenario #define PREDEFINED_MIH_NETWORK_ID "eurecom" @@ -58,9 +56,4 @@ #define PREDEFINED_CLASSES_SERVICE_SUPPORTED 2 #define PREDEFINED_QUEUES_SUPPORTED 2 -#define PREDEFINED_LINK_GOING_DOWN_INDICATION_SIG_STRENGTH 20 -#define PREDEFINED_LINK_DETECTED_INDICATION_SIG_STRENGTH 10 -#define PREDEFINED_LINK_DETECTED_INDICATION_SINR 45 -#define PREDEFINED_LINK_DETECTED_INDICATION_LINK_DATA_RATE 1000 - #endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h index b298198783..b2e49b93c2 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h @@ -34,22 +34,22 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#ifndef __MRALLTE_MAIN_H__ -# define __MRALLTE_MAIN_H__ +#ifndef __LTERALUE_MAIN_H__ +# define __LTERALUE_MAIN_H__ //----------------------------------------------------------------------------- -# ifdef MRALLTE_MAIN_C -# define private_mRALlte_main(x) x -# define protected_mRALlte_main(x) x -# define public_mRALlte_main(x) x +# ifdef LTERALUE_MAIN_C +# define private_mrallte_main(x) x +# define protected_mrallte_main(x) x +# define public_mrallte_main(x) x # else -# ifdef MRAL_MODULE -# define private_mRALlte_main(x) -# define protected_mRALlte_main(x) extern x -# define public_mRALlte_main(x) extern x +# ifdef LTE_RAL_UE +# define private_mrallte_main(x) +# define protected_mrallte_main(x) extern x +# define public_mrallte_main(x) extern x # else -# define private_mRALlte_main(x) -# define protected_mRALlte_main(x) -# define public_mRALlte_main(x) extern x +# define private_mrallte_main(x) +# define protected_mrallte_main(x) +# define public_mrallte_main(x) extern x # endif # endif //----------------------------------------------------------------------------- @@ -69,6 +69,112 @@ #include <getopt.h> #include <libgen.h> //----------------------------------------------------------------------------- +#include "lteRALue.h" +#include "commonDef.h" +#include "collection/hashtable/hashtable.h" +public_mrallte_main(char* g_conf_ue_ral_listening_port;) +public_mrallte_main(char* g_conf_ue_ral_ip_address;) +public_mrallte_main(char* g_conf_ue_ral_link_id;) +public_mrallte_main(char* g_conf_ue_ral_link_address;) +public_mrallte_main(char* g_conf_ue_mihf_remote_port;) +public_mrallte_main(char* g_conf_ue_mihf_ip_address;) +public_mrallte_main(char* g_conf_ue_mihf_id;) + + +typedef int ral_ue_instance_t; + +typedef struct lte_ral_ue_object_s { + //------------------------ + // CONFIG PARAMETERS + //------------------------ + char* ral_listening_port; + char* ral_ip_address; + char* ral_link_address; + char* mihf_remote_port; + char* mihf_ip_address; + char* link_id; + char* mihf_id; + MIH_C_LINK_MIHCAP_FLAG_T link_mihcap_flag; // hardcoded parameters + MIH_C_NET_CAPS_T net_caps;// hardcoded parameters + + + // only to call ralu_verifyPendingConnection + u8 pending_req_flag; + + + // network parameters + u16 cell_id; + u16 nas_state; + int state; + u32 curr_signal_level; + u32 ipv6_l2id[2]; + //measures + u8 req_num_bs; + u16 req_cell_id[MAX_NUMBER_BS]; + u32 req_prov_id[MAX_NUMBER_BS]; + u16 req_order_index[MAX_NUMBER_BS]; + int num_measures; + u16 meas_cell_id[MAX_NUMBER_BS]; + u32 last_meas_level[MAX_NUMBER_BS]; + u32 integrated_meas_level[MAX_NUMBER_BS]; + u32 prev_integrated_meas_level[MAX_NUMBER_BS]; + u32 provider_id[MAX_NUMBER_BS]; + //Radio Bearers + u16 num_rb; + int num_class; + u16 rbId[RAL_MAX_RB]; + u16 QoSclass[RAL_MAX_RB]; + u16 dscp[RAL_MAX_RB]; + // statistics + //u32 rx_packets; + //u32 tx_packets; + //u32 rx_bytes; + //u32 tx_bytes; + //u32 rx_errors; + //u32 tx_errors; + //u32 rx_dropped; + //u32 tx_dropped; + //char buffer[800]; // For ioctl with NAS driver + + // MIH-INTERFACE data + // MIH-INTERFACE data + int mih_sock_desc; + + // Initialised, then read-only, supported actions + MIH_C_LINK_AC_TYPE_T mih_supported_action_list; + // action currently processed + MIH_C_LINK_AC_TYPE_T pending_req_action; + // actions requested by MIH-H + MIH_C_LINK_AC_TYPE_T req_action_list; + //MIH_C_STATUS_T pending_req_status; + MIH_C_LINK_AC_RESULT_T pending_req_ac_result; + //MIH_C_TRANSACTION_ID_T pending_req_transaction_id; + // set unset bits by MIH_C_Message_Link_Event_Subscribe_request MIH_C_Message_Link_Event_Unsubscribe_request + MIH_C_LINK_EVENT_LIST_T mih_subscribe_req_event_list; + // Initialised, then read-only + MIH_C_LINK_EVENT_LIST_T mih_supported_link_event_list; + // Initialised, then read-only + MIH_C_LINK_CMD_LIST_T mih_supported_link_command_list; + LIST(MIH_C_LINK_CFG_PARAM, mih_link_cfg_param_thresholds); + // to tell what are the configured thresholds in mih_link_cfg_param_thresholds_list + MIH_C_BOOLEAN_T active_mih_link_cfg_param_threshold[MIH_C_LINK_CFG_PARAM_LIST_LENGTH]; + MIH_C_BOOLEAN_T link_to_be_detected; + + + MIH_C_TRANSACTION_ID_T transaction_id; + +}lte_ral_ue_object_t; + + +/* RAL LTE internal data */ +protected_mrallte_main(lte_ral_ue_object_t g_ue_ral_obj[MAX_MODULES];) +private_mrallte_main(hash_table_t *g_ue_ral_fd2instance;); + +public_mrallte_main( void mRAL_init_default_values(void);) +public_mrallte_main( int mRAL_initialize(void);) +private_mrallte_main(void mRAL_process_file_descriptors(struct epoll_event *events, int nb_events);) +public_mrallte_main( void* mRAL_task(void *args_p);) + #endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_execute.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_execute.h index c900f254f3..f31e21db60 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_execute.h +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_execute.h @@ -38,18 +38,18 @@ # define __MRALLTE_MIH_EXECUTE_H__ //----------------------------------------------------------------------------- # ifdef MRALLTE_MIH_EXECUTE_C -# define private_mRALlte_mih_execute(x) x -# define protected_mRALlte_mih_execute(x) x -# define public_mRALlte_mih_execute(x) x +# define private_mRAL_mih_execute(x) x +# define protected_mRAL_mih_execute(x) x +# define public_mRAL_mih_execute(x) x # else -# ifdef MRAL_MODULE -# define private_mRALlte_mih_execute(x) -# define protected_mRALlte_mih_execute(x) extern x -# define public_mRALlte_mih_execute(x) extern x +# ifdef LTE_RAL_UE +# define private_mRAL_mih_execute(x) +# define protected_mRAL_mih_execute(x) extern x +# define public_mRAL_mih_execute(x) extern x # else -# define private_mRALlte_mih_execute(x) -# define protected_mRALlte_mih_execute(x) -# define public_mRALlte_mih_execute(x) extern x +# define private_mRAL_mih_execute(x) +# define protected_mRAL_mih_execute(x) +# define public_mRAL_mih_execute(x) extern x # endif # endif //----------------------------------------------------------------------------- @@ -61,21 +61,20 @@ #include <sys/types.h> #include <ctype.h> //----------------------------------------------------------------------------- -#include "MIH_C.h" -#include "lteRALue_constants.h" -#include "lteRALue_mih_msg.h" +#include "lteRALue.h" + //----------------------------------------------------------------------------- -protected_mRALlte_mih_execute(MIH_C_LINK_ACTION_T g_link_action;) +protected_mRAL_mih_execute(MIH_C_LINK_ACTION_T g_link_action;) //----------------------------------------------------------------------------- -protected_mRALlte_mih_execute(void mRALlte_action_request(MIH_C_Message_Link_Action_request_t* messageP);) +protected_mRAL_mih_execute(void mRAL_action_request(MIH_C_Message_Link_Action_request_t* messageP);) //----------------------------------------------------------------------------- -protected_mRALlte_mih_execute(void mRALlte_get_parameters_request(MIH_C_Message_Link_Get_Parameters_request_t* messageP);) +protected_mRAL_mih_execute(void mRAL_get_parameters_request(MIH_C_Message_Link_Get_Parameters_request_t* messageP);) //----------------------------------------------------------------------------- -protected_mRALlte_mih_execute(void mRALlte_subscribe_request (MIH_C_Message_Link_Event_Subscribe_request_t* messageP);) -protected_mRALlte_mih_execute(void mRALlte_unsubscribe_request(MIH_C_Message_Link_Event_Unsubscribe_request_t* messageP);) +protected_mRAL_mih_execute(void mRAL_subscribe_request (MIH_C_Message_Link_Event_Subscribe_request_t* messageP);) +protected_mRAL_mih_execute(void mRAL_unsubscribe_request(MIH_C_Message_Link_Event_Unsubscribe_request_t* messageP);) //----------------------------------------------------------------------------- -protected_mRALlte_mih_execute(LIST(MIH_C_LINK_CFG_PARAM, g_link_cfg_param_thresholds);) +protected_mRAL_mih_execute(LIST(MIH_C_LINK_CFG_PARAM, g_link_cfg_param_thresholds);) //----------------------------------------------------------------------------- -protected_mRALlte_mih_execute(void mRALlte_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* messageP);) -public_mRALlte_mih_execute(void mRALlte_check_thresholds_signal_strength(MIH_C_THRESHOLD_VAL_T new_valP, MIH_C_THRESHOLD_VAL_T old_valP);) +protected_mRAL_mih_execute(void mRAL_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* messageP);) +public_mRAL_mih_execute(void mRAL_check_thresholds_signal_strength(MIH_C_THRESHOLD_VAL_T new_valP, MIH_C_THRESHOLD_VAL_T old_valP);) #endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_msg.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_msg.h index dda33953af..5f46ded969 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_msg.h +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_msg.h @@ -34,120 +34,113 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#ifndef __MRALLTE_MIH_MSG_H__ -# define __MRALLTE_MIH_MSG_H__ +#ifndef __LTERALUE_MIH_MSG_H__ +# define __LTERALUE_MIH_MSG_H__ //----------------------------------------------------------------------------- -# ifdef MRALLTE_MIH_MSG_C -# define private_mRALlte_mih_msg(x) x -# define protected_mRALlte_mih_msg(x) x -# define public_mRALlte_mih_msg(x) x +# ifdef LTERALUE_MIH_MSG_C +# define private_mRAL_mih_msg(x) x +# define protected_mRAL_mih_msg(x) x +# define public_mRAL_mih_msg(x) x # else -# ifdef MRAL_MODULE -# define private_mRALlte_mih_msg(x) -# define protected_mRALlte_mih_msg(x) extern x -# define public_mRALlte_mih_msg(x) extern x +# ifdef LTE_RAL_UE +# define private_mRAL_mih_msg(x) +# define protected_mRAL_mih_msg(x) extern x +# define public_mRAL_mih_msg(x) extern x # else -# define private_mRALlte_mih_msg(x) -# define protected_mRALlte_mih_msg(x) -# define public_mRALlte_mih_msg(x) extern x +# define private_mRAL_mih_msg(x) +# define protected_mRAL_mih_msg(x) +# define public_mRAL_mih_msg(x) extern x # endif # endif //----------------------------------------------------------------------------- -#include <stdio.h> -#include <stdlib.h> -#include <errno.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> -#include <netdb.h> -#include <sys/socket.h> -#include <sys/un.h> -#include <sys/time.h> -#include <ctype.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <getopt.h> -#include <libgen.h> -//----------------------------------------------------------------------------- -#include "MIH_C.h" -#include "lteRALue_constants.h" -//#include "lteRALue_get.h" -//----------------------------------------------------------------------------- +#include "lteRALue.h" -//----------------------------------------------------------------------------- #define MSG_CODEC_RECV_BUFFER_SIZE 16400 #define MSG_CODEC_SEND_BUFFER_SIZE 16400 //----------------------------------------------------------------------------- -protected_mRALlte_mih_msg(char* g_mihf_remote_port;) -protected_mRALlte_mih_msg(char* g_mihf_ip_address;) -protected_mRALlte_mih_msg(char* g_ral_ip_address;) -protected_mRALlte_mih_msg(char* g_ral_listening_port_for_mihf;) -protected_mRALlte_mih_msg(char* g_link_id;) -protected_mRALlte_mih_msg(char* g_mihf_id;) -protected_mRALlte_mih_msg(int g_sockd_mihf;) -protected_mRALlte_mih_msg(char g_msg_print_buffer[8192];) - -//----------------------------------------------------------------------------- -protected_mRALlte_mih_msg(u_int8_t g_msg_codec_recv_buffer[MSG_CODEC_RECV_BUFFER_SIZE];) -protected_mRALlte_mih_msg(u_int8_t g_msg_codec_send_buffer[MSG_CODEC_SEND_BUFFER_SIZE];) //----------------------------------------------------------------------------- -public_mRALlte_mih_msg( int mRALlte_send_to_mih(u_int8_t *bufferP, size_t lenP);) - -protected_mRALlte_mih_msg( void mRALlte_print_buffer (char * bufferP, int lengthP);) -protected_mRALlte_mih_msg( int mRALlte_mihf_connect (void);) -protected_mRALlte_mih_msg( void mRALlte_send_link_register_indication (MIH_C_TRANSACTION_ID_T *transaction_idP);) -protected_mRALlte_mih_msg( void mRALlte_send_link_detected_indication (MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_DET_INFO_T *link_detected_infoP);) - -protected_mRALlte_mih_msg( void mRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_ADDR_T *new_access_routerP, - MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP, - MIH_C_IP_MOB_MGMT_T *mobility_management_supportP);) - -protected_mRALlte_mih_msg( void mRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP);) - -protected_mRALlte_mih_msg( void mRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_UNSIGNED_INT2_T *time_intervalP, - MIH_C_LINK_GD_REASON_T *link_going_down_reasonP);) - -protected_mRALlte_mih_msg( void mRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_DN_REASON_T *reason_codeP);) - -protected_mRALlte_mih_msg( void mRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP, - MIH_C_LINK_AC_RESULT_T *link_action_resultP);) - -protected_mRALlte_mih_msg( void mRALte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *supported_link_event_listP, - MIH_C_LINK_CMD_LIST_T *supported_link_command_listP);) - -protected_mRALlte_mih_msg( void mRALte_send_event_subscribe_confirm (MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *response_link_event_listP);) - -protected_mRALlte_mih_msg( void mRALte_send_event_unsubscribe_confirm (MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *response_link_event_listP);) - -protected_mRALlte_mih_msg( void mRALte_send_configure_thresholds_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP);) - -protected_mRALlte_mih_msg( void mRALte_send_get_parameters_confirm (MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_PARAM_LIST_T *link_parameters_status_listP, - MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_listP, - MIH_C_LINK_DESC_RSP_LIST_T *link_descriptors_response_listP);) - -private_mRALlte_mih_msg( int mRALlte_mih_link_msg_decode (Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP);) -protected_mRALlte_mih_msg( int mRALlte_mih_link_process_message (void);) +public_mRAL_mih_msg( int mRAL_send_to_mih(ral_ue_instance_t instanceP, u_int8_t *bufferP, size_t lenP);) + +protected_mRAL_mih_msg( int mRAL_mihf_connect (ral_ue_instance_t instanceP);) +protected_mRAL_mih_msg( void mRAL_send_link_register_indication (\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP);) +protected_mRAL_mih_msg( void mRAL_send_link_detected_indication (\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_LINK_DET_INFO_T *link_detected_infoP);) + +protected_mRAL_mih_msg( void mRAL_send_link_up_indication(\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ + MIH_C_LINK_ADDR_T *old_access_routerP,\ + MIH_C_LINK_ADDR_T *new_access_routerP,\ + MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP,\ + MIH_C_IP_MOB_MGMT_T *mobility_management_supportP);) + +protected_mRAL_mih_msg( void mRAL_send_link_parameters_report_indication(\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ + MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP);) + +protected_mRAL_mih_msg( void mRAL_send_link_going_down_indication(\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ + MIH_C_UNSIGNED_INT2_T *time_intervalP,\ + MIH_C_LINK_GD_REASON_T *link_going_down_reasonP);) + +protected_mRAL_mih_msg( void mRAL_send_link_down_indication(\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ + MIH_C_LINK_ADDR_T *old_access_routerP,\ + MIH_C_LINK_DN_REASON_T *reason_codeP);) + +protected_mRAL_mih_msg( void mRAL_send_link_action_confirm(\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP,\ + MIH_C_LINK_AC_RESULT_T *link_action_resultP);) + +protected_mRAL_mih_msg( void mRAL_send_capability_discover_confirm(\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_EVENT_LIST_T *supported_link_event_listP,\ + MIH_C_LINK_CMD_LIST_T *supported_link_command_listP);) + +protected_mRAL_mih_msg( void mRAL_send_event_subscribe_confirm (\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_EVENT_LIST_T *response_link_event_listP);) + +protected_mRAL_mih_msg( void mRAL_send_event_unsubscribe_confirm (\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_EVENT_LIST_T *response_link_event_listP);) + +protected_mRAL_mih_msg( void mRAL_send_configure_thresholds_confirm(\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP);) + +protected_mRAL_mih_msg( void mRAL_send_get_parameters_confirm (\ + ral_ue_instance_t instanceP,\ + MIH_C_TRANSACTION_ID_T *transaction_idP,\ + MIH_C_STATUS_T *statusP,\ + MIH_C_LINK_PARAM_LIST_T *link_parameters_status_listP,\ + MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_listP,\ + MIH_C_LINK_DESC_RSP_LIST_T *link_descriptors_response_listP);) + +private_mRAL_mih_msg( int mRAL_mih_link_msg_decode (\ + ral_ue_instance_t instanceP,\ + Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP);) +protected_mRAL_mih_msg( int mRAL_mih_link_process_message (ral_ue_instance_t instanceP);) #endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_parameters.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_parameters.h new file mode 100755 index 0000000000..c954c25985 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_parameters.h @@ -0,0 +1,78 @@ +/******************************************************************************* + * + * Eurecom OpenAirInterface 3 + * Copyright(c) 2013 Eurecom + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information + * Openair Admin: openair_admin@eurecom.fr + * Openair Tech : openair_tech@eurecom.fr + * Forums : http://forums.eurecom.fsr/openairinterface + * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France + * + *******************************************************************************/ +/*! \file lteRALenb_parameters.h + * \brief + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \date 2012 + * \version + * \note + * \bug + * \warning + */ + +#ifndef __LTE_RAL_UE_PARAMETERS_H__ +#define __LTE_RAL_UE_PARAMETERS_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_UE_PARAMETERS_C +# define private_lteralue_parameters(x) x +# define protected_lteralue_parameters(x) x +# define public_lteralue_parameters(x) x +# else +# ifdef LTE_RAL_UE +# define private_lteralue_parameters(x) +# define protected_lteralue_parameters(x) extern x +# define public_lteralue_parameters(x) extern x +# else +# define private_lteralue_parameters(x) +# define protected_lteralue_parameters(x) +# define public_lteralue_parameters(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALue.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ +protected_lteralue_parameters(void mRAL_get_parameters_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Get_Parameters_request_t* messageP);) + + +#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_proto.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_proto.h index 9de55b8800..e0b21ba36c 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_proto.h +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_proto.h @@ -34,19 +34,21 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#ifndef __RAL_LTE_PROTO_H__ -#define __RAL_LTE_PROTO_H__ +#ifndef __RAL_UE_LTE_PROTO_H__ +#define __RAL_UE_LTE_PROTO_H__ //lteRALue_ioctl.c -int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int ioctl_cellid); +int RAL_ue_process_NAS_message(int ioctl_obj, int ioctl_cmd, int ioctl_cellid); //mRALuD_process.c -void IAL_NAS_measures_init(void); -void IAL_NAS_measures_update(int i); -void IAL_integrate_measure(int measure, int i); -void rallte_NAS_measures_polling(void); -int rallte_NAS_corresponding_cell(int req_index); -void rallte_verifyPendingConnection(void); +void IAL_ue_NAS_measures_init(void); +void IAL_ue_NAS_measures_update(int i); +void IAL_ue_integrate_measure(int measure, int i); +void rallte_ue_NAS_measures_polling(void); +int rallte_ue_NAS_corresponding_cell(int req_index); +void rallte_ue_verifyPendingConnection(void); + +void* ral_ue_task(void *args_p); #endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_rrc_msg.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_rrc_msg.h new file mode 100755 index 0000000000..cfb6924570 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_rrc_msg.h @@ -0,0 +1,68 @@ +/******************************************************************************* + * + * Eurecom OpenAirInterface 3 + * Copyright(c) 2012 Eurecom + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information + * Openair Admin: openair_admin@eurecom.fr + * Openair Tech : openair_tech@eurecom.fr + * Forums : http://forums.eurecom.fsr/openairinterface + * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France + * + *******************************************************************************/ +/*! \file lteRALenb_rrc_msg.h + * \brief + * \author GAUTHIER Lionel + * \date 2013 + * \version + * \note + * \bug + * \warning + */ + +#ifndef __LTE_RAL_UE_RRC_MSG_H__ +#define __LTE_RAL_UE_RRC_MSG_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_UE_RRC_MSG_C +# define private_lteralue_rrc_msg(x) x +# define protected_lteralue_rrc_msg(x) x +# define public_lteralue_rrc_msg(x) x +# else +# ifdef LTE_RAL_UE +# define private_lteralue_rrc_msg(x) +# define protected_lteralue_rrc_msg(x) extern x +# define public_lteralue_rrc_msg(x) extern x +# else +# define private_lteralue_rrc_msg(x) +# define protected_lteralue_rrc_msg(x) +# define public_lteralue_rrc_msg(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALue.h" +#include "intertask_interface.h" + +protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_system_information_indication (instance_t instance, MessageDef *msg_p);) +protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_connection_establishment_indication (instance_t instance, MessageDef *msg_p);) +protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_connection_reestablishment_indication (instance_t instance, MessageDef *msg_p);) +protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_connection_reconfiguration_indication (instance_t instance, MessageDef *msg_p);) +protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_connection_release_indication (instance_t instance, MessageDef *msg_p);) + + +#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_subscribe.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_subscribe.h new file mode 100755 index 0000000000..d18d773908 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_subscribe.h @@ -0,0 +1,79 @@ +/******************************************************************************* + * + * Eurecom OpenAirInterface 3 + * Copyright(c) 2013 Eurecom + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information + * Openair Admin: openair_admin@eurecom.fr + * Openair Tech : openair_tech@eurecom.fr + * Forums : http://forums.eurecom.fsr/openairinterface + * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France + * + *******************************************************************************/ +/*! \file lteRALenb_subscribe.h + * \brief + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \date 2012 + * \version + * \note + * \bug + * \warning + */ + +#ifndef __LTE_RAL_UE_SUBSCRIBE_H__ +#define __LTE_RAL_UE_SUBSCRIBE_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_UE_PROCESS_C +# define private_lteralue_subscribe(x) x +# define protected_lteralue_subscribe(x) x +# define public_lteralue_subscribe(x) x +# else +# ifdef LTE_RAL_UE +# define private_lteralue_subscribe(x) +# define protected_lteralue_subscribe(x) extern x +# define public_lteralue_subscribe(x) extern x +# else +# define private_lteralue_subscribe(x) +# define protected_lteralue_subscribe(x) +# define public_lteralue_subscribe(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALue.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ +protected_lteralue_subscribe(void mRAL_subscribe_request (ral_ue_instance_t instanceP, MIH_C_Message_Link_Event_Subscribe_request_t* msgP);) +protected_lteralue_subscribe(void mRAL_unsubscribe_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP);) + + +#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_thresholds.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_thresholds.h new file mode 100755 index 0000000000..ff5c3d7cb6 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_thresholds.h @@ -0,0 +1,83 @@ +/******************************************************************************* + * + * Eurecom OpenAirInterface 3 + * Copyright(c) 2012 Eurecom + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * + * The full GNU General Public License is included in this distribution in + * the file called "COPYING". + * + * Contact Information + * Openair Admin: openair_admin@eurecom.fr + * Openair Tech : openair_tech@eurecom.fr + * Forums : http://forums.eurecom.fsr/openairinterface + * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France + * + *******************************************************************************/ +/*! \file lteRALenb_thresholds.h + * \brief + * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle + * \date 2012 + * \version + * \note + * \bug + * \warning + */ + +#ifndef __LTE_RAL_UE_THRESHOLDS_H__ +#define __LTE_RAL_UE_THRESHOLDS_H__ +//----------------------------------------------------------------------------- +# ifdef LTE_RAL_UE_PROCESS_C +# define private_lteralue_thresholds(x) x +# define protected_lteralue_thresholds(x) x +# define public_lteralue_thresholds(x) x +# else +# ifdef LTE_RAL_UE +# define private_lteralue_thresholds(x) +# define protected_lteralue_thresholds(x) extern x +# define public_lteralue_thresholds(x) extern x +# else +# define private_lteralue_thresholds(x) +# define protected_lteralue_thresholds(x) +# define public_lteralue_thresholds(x) extern x +# endif +# endif +//----------------------------------------------------------------------------- +#include "lteRALue.h" +#include "intertask_interface.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +//LIST(MIH_C_LINK_CFG_PARAM, g_link_cfg_param_thresholds); + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +protected_lteralue_thresholds(void mRAL_configure_thresholds_request (ral_ue_instance_t instanceP, MIH_C_Message_Link_Configure_Thresholds_request_t* messageP);) +protected_lteralue_thresholds(void mRAL_rx_rrc_ral_configure_threshold_conf (ral_ue_instance_t instance, MessageDef *msg_p);) +protected_lteralue_thresholds(void mRAL_rx_rrc_ral_measurement_report_indication (ral_ue_instance_t instance, MessageDef *msg_p);) + +#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_variables.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_variables.h index 90c0b67f83..dbf06460c0 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_variables.h +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_variables.h @@ -34,13 +34,11 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#ifndef __RAL_LTE_VAR_H__ -#define __RAL_LTE_VAR_H__ +#ifndef __LTERALUE_VARIABLES_H__ +#define __LTERALUE_VARIABLES_H__ //------------------------------------------------------------------- -#include "rrc_d_types.h" -#include "lteRALue_constants.h" -#include "MIH_C.h" +#include "lteRALue.h" /*************************************************************************** CONSTANTS @@ -74,69 +72,12 @@ /*************************************************************************** VARIABLES ***************************************************************************/ -struct ral_lte_priv { - // only to call ralu_verifyPendingConnection - u8 pending_req_flag; - - -// network parameters - u16 cell_id; - u16 nas_state; - int state; - u32 curr_signal_level; - u32 ipv6_l2id[2]; -//measures - u8 req_num_bs; - u16 req_cell_id[MAX_NUMBER_BS]; - u32 req_prov_id[MAX_NUMBER_BS]; - u16 req_order_index[MAX_NUMBER_BS]; - int num_measures; - u16 meas_cell_id[MAX_NUMBER_BS]; - u32 last_meas_level[MAX_NUMBER_BS]; - u32 integrated_meas_level[MAX_NUMBER_BS]; - u32 prev_integrated_meas_level[MAX_NUMBER_BS]; - u32 provider_id[MAX_NUMBER_BS]; -//Radio Bearers - u16 num_rb; - int num_class; - u16 rbId[RAL_MAX_RB]; - u16 QoSclass[RAL_MAX_RB]; - u16 dscp[RAL_MAX_RB]; -// statistics - u32 rx_packets; - u32 tx_packets; - u32 rx_bytes; - u32 tx_bytes; - u32 rx_errors; - u32 tx_errors; - u32 rx_dropped; - u32 tx_dropped; - char buffer[800]; // For ioctl with NAS driver - - // MIH-INTERFACE data - // Initialised, then read-only, supported actions - MIH_C_LINK_AC_TYPE_T mih_supported_action_list; - // action currently processed - MIH_C_LINK_AC_TYPE_T pending_req_action; - // actions requested by MIH-H - MIH_C_LINK_AC_TYPE_T req_action_list; - MIH_C_STATUS_T pending_req_status; - MIH_C_LINK_AC_RESULT_T pending_req_ac_result; - MIH_C_TRANSACTION_ID_T pending_req_transaction_id; - // set unset bits by MIH_C_Message_Link_Event_Subscribe_request MIH_C_Message_Link_Event_Unsubscribe_request - MIH_C_LINK_EVENT_LIST_T mih_subscribe_req_event_list; - // Initialised, then read-only - MIH_C_LINK_EVENT_LIST_T mih_supported_link_event_list; - // Initialised, then read-only - MIH_C_LINK_CMD_LIST_T mih_supported_link_command_list; - LIST(MIH_C_LINK_CFG_PARAM, mih_link_cfg_param_thresholds); - // to tell what are the configured thresholds in mih_link_cfg_param_thresholds_list - MIH_C_BOOLEAN_T active_mih_link_cfg_param_threshold[MIH_C_LINK_CFG_PARAM_LIST_LENGTH]; - MIH_C_BOOLEAN_T link_to_be_detected; -}; +//struct ral_lte_priv { + +//}; //----------------------------------------------------------------------------- -extern struct ral_lte_priv *ralpriv; +//extern struct ral_lte_priv *ralpriv; #endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_action.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_action.c new file mode 100755 index 0000000000..8f043a62d0 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_action.c @@ -0,0 +1,222 @@ +/*************************************************************************** + lteRALue_action.c - description + *************************************************************************** + Eurecom OpenAirInterface 3 + Copyright(c) 1999 - 2013 Eurecom + + This program is free software; you can redistribute it and/or modify it + under the terms and conditions of the GNU General Public License, + version 2, as published by the Free Software Foundation. + + This program is distributed in the hope it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + + The full GNU General Public License is included in this distribution in + the file called "COPYING". + + Contact Information + Openair Admin: openair_admin@eurecom.fr + Openair Tech : openair_tech@eurecom.fr + Forums : http://forums.eurecom.fsr/openairinterface + Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France +*******************************************************************************/ +/*! \file lteRALue_mih_execute.c + * \brief Execution of MIH primitives in LTE-RAL-UE + * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic + * \date 2013 + * \company EURECOM + * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr + */ +/*******************************************************************************/ +#define LTE_RAL_UE +#define LTERALUE_ACTION_C +//----------------------------------------------------------------------------- +#include "lteRALue.h" + +//----------------------------------------------------------------------------- +void mRAL_action_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Action_request_t* messageP) { +//----------------------------------------------------------------------------- + MIH_C_STATUS_T status; + LIST(MIH_C_LINK_SCAN_RSP, scan_response_set); + MIH_C_LINK_AC_RESULT_T link_action_result; + //unsigned int scan_index, meas_to_send; + MessageDef *message_p = NULL; + rrc_ral_scan_req_t scan_req; + rrc_ral_connection_release_req_t release_req; + rrc_ral_connection_establishment_req_t connection_establishment_req; + + status = MIH_C_STATUS_SUCCESS; + link_action_result = MIH_C_LINK_AC_RESULT_SUCCESS; + scan_response_set_list.length = 0; + + if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) { + message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_SCAN_REQ); + memset(&scan_req, 0, sizeof(rrc_ral_scan_req_t)); + // copy transaction id + scan_req.transaction_id = messageP->header.transaction_id; + memcpy (&message_p->ittiMsg, (void *) &scan_req, sizeof(rrc_ral_scan_req_t)); + itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); + } + if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN) { + // TO DO + // The link will be disconnected but the resource for the link connection still remains so + // reestablishing the link connection later can be more efficient. + + } + if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ) { + // TO DO + // This indication requires the buffered data at the old serving PoA entity to be forwarded + // to the new target PoA entity in order to avoid data loss. This action can be taken imme- + // diately after the old serving PoS receives MIH_N2N_HO_Commit response message + // from the new target PoS, or the old serving PoS receives MIH_Net_HO_Commit + // response message from the MN. This is not valid on UMTS link type. + + } + + // do not make actions if SCAN required + if (( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) == 0) { + switch (messageP->primitive.LinkAction.link_ac_type) { + case MIH_C_LINK_AC_TYPE_NONE: + LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_NONE: NO ACTION\n", __FUNCTION__); + break; + + case MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: + LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: NO ACTION\n", __FUNCTION__); + if (g_ue_ral_obj[instanceP].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_DISCONNECT) { + message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_CONNECTION_RELEASE_REQ); + memset(&release_req, 0, sizeof(rrc_ral_connection_release_req_t)); + // copy transaction id + release_req.transaction_id = messageP->header.transaction_id; + memcpy (&message_p->ittiMsg, (void *) &release_req, sizeof(rrc_ral_connection_release_req_t)); + itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); + } else { + link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); + } + break; + + case MIH_C_LINK_AC_TYPE_LINK_LOW_POWER: + LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_LOW_POWER\n", __FUNCTION__); + if (g_ue_ral_obj[instanceP].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_LOW_POWER) { + // TO DO + } else { + link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); + } + break; + + case MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN: + LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN\n", __FUNCTION__); + if (g_ue_ral_obj[instanceP].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN) { + if ( g_ue_ral_obj[instanceP].pending_req_action & MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN ) { + if (g_ue_ral_obj[instanceP].state == DISCONNECTED) { + LOG_D(RAL_UE, "Deactivation requested, but interface already inactive ==> NO OP\n"); + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); + } else { + g_ue_ral_obj[instanceP].pending_req_action = g_ue_ral_obj[instanceP].pending_req_action | MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN; + //Send immediatly a confirm, otherwise it will arrive to late and MIH-F will report a failure to the MIH-USER + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, NULL, &link_action_result); + + message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_CONNECTION_RELEASE_REQ); + memset(&release_req, 0, sizeof(rrc_ral_connection_release_req_t)); + // copy transaction id + release_req.transaction_id = messageP->header.transaction_id; + memcpy (&message_p->ittiMsg, (void *) &release_req, sizeof(rrc_ral_connection_release_req_t)); + itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); + LOG_D(RAL_UE, "Deactivation requested to NAS interface\n"); +//RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_DEL, g_ue_ral_obj[instanceP].cell_id); + + } + } else { + g_ue_ral_obj[instanceP].pending_req_action |= MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN; + //Send immediatly a confirm, otherwise it will arrive to late and MIH-F will report a failure to the MIH-USER + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, NULL, &link_action_result); + + message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_CONNECTION_RELEASE_REQ); + memset(&release_req, 0, sizeof(rrc_ral_connection_release_req_t)); + // copy transaction id + release_req.transaction_id = messageP->header.transaction_id; + memcpy (&message_p->ittiMsg, (void *) &release_req, sizeof(rrc_ral_connection_release_req_t)); + itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); + LOG_D(RAL_UE, "Deactivation requested to NAS interface\n"); +//RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_DEL, g_ue_ral_obj[instanceP].cell_id); + } + } else { + LOG_D(RAL_UE, " command POWER DOWN not available \n\n"); + link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, NULL, &link_action_result); + } + break; + + case MIH_C_LINK_AC_TYPE_LINK_POWER_UP: + LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_POWER_UP\n", __FUNCTION__); + if (g_ue_ral_obj[instanceP].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_POWER_UP) { + // Activation requested - check it is not already active + if(g_ue_ral_obj[instanceP].pending_req_action & MIH_C_LINK_AC_TYPE_LINK_POWER_UP) { + if (g_ue_ral_obj[instanceP].state == CONNECTED) { + LOG_D(RAL_UE, "Activation requested, but interface already active ==> NO OP\n"); + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); + } else { + g_ue_ral_obj[instanceP].pending_req_action = g_ue_ral_obj[instanceP].pending_req_action | MIH_C_LINK_AC_TYPE_LINK_POWER_UP; + g_ue_ral_obj[instanceP].cell_id = g_ue_ral_obj[instanceP].meas_cell_id[0]; // Default cell #0 - Next, choose cell with best conditions + LOG_D(RAL_UE, "Activation requested to NAS interface on cell %d\n", g_ue_ral_obj[instanceP].cell_id); +//RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_ADD, g_ue_ral_obj[instanceP].cell_id); + } + } else { + g_ue_ral_obj[instanceP].pending_req_action |= MIH_C_LINK_AC_TYPE_LINK_POWER_UP; + g_ue_ral_obj[instanceP].cell_id = g_ue_ral_obj[instanceP].meas_cell_id[0]; // Default cell #0 - Next, choose cell with best conditions + message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_CONNECTION_ESTABLISHMENT_REQ); + memset(&connection_establishment_req, 0, sizeof(rrc_ral_connection_establishment_req_t)); + // copy transaction id + connection_establishment_req.transaction_id = messageP->header.transaction_id; + memcpy (&message_p->ittiMsg, (void *) &connection_establishment_req, sizeof(rrc_ral_connection_establishment_req_t)); + itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); + } + } else { + LOG_D(RAL_UE, "[mRAL]: command POWER UP not available \n\n"); + link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); + } + break; + +/* LG KEEP case MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: + LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: NO ACTION\n", __FUNCTION__); + if (g_ue_ral_obj[instanceP].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR) { + } else { + link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); + } + break; + + case MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: + LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: NO ACTION\n", __FUNCTION__); + if (g_ue_ral_obj[instanceP].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES) { + } else { + link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); + } + break; + + case MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: + LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: NO ACTION\n", __FUNCTION__); + if (g_ue_ral_obj[instanceP].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES) { + } else { + link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); + } + break;*/ + + default: + LOG_E(RAL_UE, "%s Invalid LinkAction.link_ac_type in MIH_C_Message_Link_Action_request\n", __FUNCTION__); + status = MIH_C_STATUS_UNSPECIFIED_FAILURE; + mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); + } + } +} + diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_ioctl.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_ioctl.c index 89c7bee94a..635a562b0c 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_ioctl.c +++ b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_ioctl.c @@ -172,7 +172,7 @@ int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int ioctl_cellid){ ralpriv->pending_req_flag = 1; DEBUG(" Connexion establishment pending: pending_req_flag %d\n",ralpriv->pending_req_flag); } - //mRALlte_send_link_action_confirm(&ralpriv->pending_req_transaction_id, &ralpriv->pending_req_status, NULL, &ralpriv->pending_req_ac_result); + //mRAL_send_link_action_confirm(&ralpriv->pending_req_transaction_id, &ralpriv->pending_req_status, NULL, &ralpriv->pending_req_ac_result); rc = 0; } break; diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_main.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_main.c index 3c708149f2..ae86554e31 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_main.c +++ b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_main.c @@ -26,7 +26,7 @@ Forums : http://forums.eurecom.fsr/openairinterface Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France *******************************************************************************/ -/*! \file lteRALue_main.c +/*! \file ltmRALue_main.c * \brief This file contains the main() function for the LTE-RAL-UE * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic * \date 2013 @@ -34,34 +34,26 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#define MRAL_MODULE -#define MRALLTE_MAIN_C +#define LTE_RAL_UE +#define LTERALUE_MAIN_C //----------------------------------------------------------------------------- -#include "lteRALue_main.h" -#include "lteRALue_constants.h" -#include "lteRALue_variables.h" -#include "lteRALue_proto.h" -#include "lteRALue_mih_msg.h" -// UMTS sub-system -#include "nas_ue_ioctl.h" -#include "rrc_nas_primitives.h" -#include "nasmt_constant.h" -#include "nasmt_iocontrol.h" - -/*#include "nas_ue_netlink.h" -#include "nasUE_config.h"*/ +#include <stdio.h> +# include <sys/epoll.h> +#include <sys/select.h> +#include <net/if.h> +#include <getopt.h> +#include <stdlib.h> +#include <time.h> //----------------------------------------------------------------------------- -#include "MIH_C.h" +#include "lteRALue.h" +#include "intertask_interface.h" +#include "OCG.h" //----------------------------------------------------------------------------- -#define NAS_UE_NETL_MAXLEN 500 -// TO DO -#ifndef SVN_REV -#define SVN_REV "0.1" -#endif -// Global variables -int fd; +extern OAI_Emulation oai_emulation; + +/* //int netl_s, s_nas; //struct sockaddr_un ralu_socket; int wait_start_mihf; @@ -70,115 +62,25 @@ struct ral_lte_priv rl_priv; struct ral_lte_priv *ralpriv; //ioctl struct nas_ioctl gifr; +*/ -static int g_log_output; -//----------------------------------------------------------------------------- -static void arg_usage(char *exec_nameP) { -//----------------------------------------------------------------------------- - fprintf(stderr, - "Usage: %s [options]\nOptions:\n" - " -V, --version Display version information\n" - " -?, -h, --help Display this help text\n" - " -P <number>, --ral-listening-port Listening port for incoming MIH-F messages\n" - " -I <string>, --ral-ip-address Binding IP(v4 or v6) address for RAL\n" - " -p <number>, --mihf-remote-port MIH-F remote port\n" - " -i <string>, --mihf-ip-address MIH-F IP(v4 or v6) address\n" - " -c, --output-to-console All stream outputs are redirected to console\n" - " -f, --output-to-syslog All stream outputs are redirected to file\n" - " -s, --output-to-syslog All stream outputs are redirected to syslog\n", - exec_nameP); -} - -//--------------------------------------------------------------------------- -int parse_opts(int argc, char *argv[]) { -//--------------------------------------------------------------------------- - static struct option long_opts[] = { - {"version", 0, 0, 'V'}, - {"help", 0, 0, 'h'}, - {"ral-listening-port", optional_argument, 0, 'P'}, - {"ral-ip-address", optional_argument, 0, 'I'}, - {"mihf-remote-port", optional_argument, 0, 'p'}, - {"mihf-ip-address", optional_argument, 0, 'i'}, - {"link.id", optional_argument, 0, 'l'}, - {"mihf.id", optional_argument, 0, 'm'}, - {"output-to-console", 0, 0, 'c'}, - {"output-to-file", 0, 0, 'f'}, - {"output-to-syslog", 0, 0, 's'}, - {0, 0, 0, 0} - }; - - /* parse all other cmd line parameters than -c */ - while (1) { - int idx, c; - c = getopt_long(argc, argv, "PIpil:Vh?cfs", long_opts, &idx); - if (c == -1) break; - - switch (c) { - case 'V': - fprintf(stderr, "SVN MODULE VERSION: %s\n", SVN_REV); - return -1; - case '?': - case 'h': - arg_usage(basename(argv[0])); - return -1; - case 'i': - fprintf(stderr, "Option mihf-ip-address:\t%s\n", optarg); - g_mihf_ip_address = optarg; - break; - case 'p': - fprintf(stderr, "Option mihf-remote-port:\t%s\n", optarg); - g_mihf_remote_port = optarg; - break; - case 'P': - fprintf(stderr, "Option ral-listening-port:\t%s\n", optarg); - g_ral_listening_port_for_mihf = optarg; - break; - case 'I': - fprintf(stderr, "Option ral-ip-address:\t%s\n", optarg); - g_ral_ip_address = optarg; - break; - case 'l': - fprintf(stderr, "Option link.id:\t%s\n", optarg); - g_link_id = optarg; - break; - case 'm': - fprintf(stderr, "Option mihf.id:\t%s\n", optarg); - g_mihf_id = optarg; - break; - case 'c': - fprintf(stderr, "Option output-to-console\n"); - g_log_output = LOG_TO_CONSOLE; - break; - case 'f': - fprintf(stderr, "Option output-to-file\n"); - g_log_output = LOG_TO_FILE; - break; - case 's': - fprintf(stderr, "Option output-to-syslog\n"); - g_log_output = LOG_TO_SYSTEM; - break; - default: - WARNING("UNKNOWN OPTION\n"); - break; - }; - } - return 0; -} //--------------------------------------------------------------------------- void IAL_NAS_ioctl_init(void){ //--------------------------------------------------------------------------- +/* // Get an UDP IPv6 socket ?? fd=socket(AF_INET6, SOCK_DGRAM, 0); if (fd<0) { - ERR("Error opening socket for ioctl\n"); + LOG_E(RAL_UE, "Error opening socket for ioctl\n"); exit(1); } strcpy(gifr.name, "oai0"); +*/ } //--------------------------------------------------------------------------- -void mRALlte_get_IPv6_addr(void) { +void mRAL_get_IPv6_addr(void) { //--------------------------------------------------------------------------- #define IPV6_ADDR_LINKLOCAL 0x0020U @@ -212,21 +114,21 @@ void mRALlte_get_IPv6_addr(void) { intf_found = 1; // retrieve numerical value if ((scope ==0)||(scope== IPV6_ADDR_LINKLOCAL)){ - DEBUG(" adresse %s:%s:%s:%s:%s:%s:%s:%s", + LOG_D(RAL_UE, " adresse %s:%s:%s:%s:%s:%s:%s:%s", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7]); - DEBUG(" Scope:"); + LOG_D(RAL_UE, " Scope:"); switch (scope) { case 0: - DEBUG("Global"); + LOG_D(RAL_UE, "Global"); break; case IPV6_ADDR_LINKLOCAL: - DEBUG("Link"); + LOG_D(RAL_UE, "Link"); break; default: - DEBUG("Unknown"); + LOG_D(RAL_UE, "Unknown"); } - DEBUG("\n Numerical value: "); + LOG_D(RAL_UE, "\n Numerical value: "); for (i = 0; i < 8; i++) { for (j=0;j<4;j++){ addr6p[i][j]= toupper(addr6p[i][j]); @@ -241,156 +143,213 @@ void mRALlte_get_IPv6_addr(void) { } for (i=0;i<16;i++){ - DEBUG("-%hhx-",my_addr[i]); + LOG_D(RAL_UE, "-%hhx-",my_addr[i]); } - DEBUG("\n\n"); + LOG_D(RAL_UE, "\n\n"); } } } fclose(f); if (!intf_found) { - ERR("interface not found\n\n"); + LOG_E(RAL_UE, "interface not found\n\n"); } } } + +void mRAL_init_default_values(void) { + g_conf_ue_ral_listening_port = UE_DEFAULT_LOCAL_PORT_RAL; + g_conf_ue_ral_ip_address = UE_DEFAULT_IP_ADDRESS_RAL; + g_conf_ue_ral_link_id = UE_DEFAULT_LINK_ID_RAL; + g_conf_ue_ral_link_address = UE_DEFAULT_LINK_ADDRESS_RAL; + g_conf_ue_mihf_remote_port = UE_DEFAULT_REMOTE_PORT_MIHF; + g_conf_ue_mihf_ip_address = UE_DEFAULT_IP_ADDRESS_MIHF; + g_conf_ue_mihf_id = UE_DEFAULT_MIHF_ID; +} + //--------------------------------------------------------------------------- -int inits(int argc, char *argv[]) { +int mRAL_initialize(void) { //--------------------------------------------------------------------------- - MIH_C_TRANSACTION_ID_T transaction_id; - - ralpriv = &rl_priv; - memset(ralpriv, 0, sizeof(struct ral_lte_priv)); - - memset(g_msg_codec_recv_buffer, 0, MSG_CODEC_RECV_BUFFER_SIZE); - // Initialize defaults - g_ral_ip_address = DEFAULT_IP_ADDRESS_RAL; - g_ral_listening_port_for_mihf = DEFAULT_LOCAL_PORT_RAL; - g_mihf_remote_port = DEFAULT_REMOTE_PORT_MIHF; - g_mihf_ip_address = DEFAULT_IP_ADDRESS_MIHF; - g_link_id = DEFAULT_LINK_ID; - g_mihf_id = DEFAULT_MIHF_ID; - g_sockd_mihf = -1; - g_log_output = LOG_TO_CONSOLE; - - MIH_C_init(g_log_output); - - if (parse_opts( argc, argv) < 0) { - exit(0); - } + ral_ue_instance_t instance = 0; + char *char_tmp = NULL; + MIH_C_init(); - if (mRALlte_mihf_connect() < 0 ) { - ERR("Could not connect to MIH-F...exiting\n"); - exit(-1); - } - DEBUG("MT-MIHF socket initialized.\n\n"); + srand(time(NULL)); - // excluded MIH_C_LINK_AC_TYPE_NONE - // excluded MIH_C_LINK_AC_TYPE_LINK_LOW_POWER - // excluded MIH_C_LINK_AC_TYPE_NONE - ralpriv->mih_supported_action_list = MIH_C_LINK_AC_TYPE_LINK_DISCONNECT | - MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN | - MIH_C_LINK_AC_TYPE_LINK_POWER_UP | - MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR | - MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES | - MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES; + memset(g_ue_ral_obj, 0, sizeof(lte_ral_ue_object_t)*MAX_MODULES); + g_ue_ral_fd2instance = hashtable_create (32, NULL, hash_free_int_func); + for (instance = 0; instance < oai_emulation.info.nb_ue_local; instance++) { + char_tmp = calloc(1, strlen(g_conf_ue_ral_listening_port) + 3); // 2 digits + \0 ->99 instances + sprintf(char_tmp,"%d", atoi(g_conf_ue_ral_listening_port) + instance); + g_ue_ral_obj[instance].ral_listening_port = char_tmp; - ralpriv->mih_supported_link_event_list = MIH_C_BIT_LINK_DETECTED | - MIH_C_BIT_LINK_UP | - MIH_C_BIT_LINK_DOWN | - MIH_C_BIT_LINK_PARAMETERS_REPORT | - MIH_C_BIT_LINK_GOING_DOWN | - MIH_C_BIT_LINK_HANDOVER_IMMINENT | - MIH_C_BIT_LINK_HANDOVER_COMPLETE | - MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS; + g_ue_ral_obj[instance].ral_ip_address = strdup(g_conf_ue_ral_ip_address); + g_ue_ral_obj[instance].ral_link_address = strdup(g_conf_ue_ral_link_address); - ralpriv->mih_supported_link_command_list = MIH_C_BIT_LINK_EVENT_SUBSCRIBE | MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE | \ - MIH_C_BIT_LINK_GET_PARAMETERS | MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS | \ - MIH_C_BIT_LINK_ACTION; + char_tmp = calloc(1, strlen(g_conf_ue_mihf_remote_port) + 3); // 2 digits + \0 ->99 instances + sprintf(char_tmp, "%d", atoi(g_conf_ue_mihf_remote_port) + instance); + g_ue_ral_obj[instance].mihf_remote_port = char_tmp; - ralpriv->link_to_be_detected = MIH_C_BOOLEAN_TRUE; + g_ue_ral_obj[instance].mihf_ip_address = strdup(g_conf_ue_mihf_ip_address); - NOTICE("[MSC_NEW][%s][MIH-F=%s]\n", getTimeStamp4Log(), g_mihf_id); - NOTICE("[MSC_NEW][%s][RAL=%s]\n", getTimeStamp4Log(), g_link_id); - NOTICE("[MSC_NEW][%s][NAS=%s]\n", getTimeStamp4Log(), "nas"); + char_tmp = calloc(1, strlen(g_conf_ue_mihf_id) + 3); // 2 digits + \0 ->99 instances + sprintf(char_tmp, "%s%02d",g_conf_ue_mihf_id, instance); + g_ue_ral_obj[instance].mihf_id = char_tmp; - IAL_NAS_ioctl_init(); - DEBUG("NAS Driver Connected.\n\n"); + char_tmp = calloc(1, strlen(g_conf_ue_ral_link_id) + 3); // 2 digits + \0 ->99 instances + sprintf(char_tmp, "%s%02d",g_conf_ue_ral_link_id, instance); + g_ue_ral_obj[instance].link_id = char_tmp; - // get interface ipv6 address - mRALlte_get_IPv6_addr(); - // get L2 identifier - RAL_process_NAS_message(IO_OBJ_IMEI, IO_CMD_ADD, 0); + char_tmp = NULL; - DEBUG ("IMEI value: = "); - mRALlte_print_buffer((char *)(&ralpriv->ipv6_l2id[0]),8); + printf("g_ue_ral_obj[%d].link_id=%s\n", instance, g_ue_ral_obj[instance].link_id); + // excluded MIH_C_LINK_AC_TYPE_NONE + // excluded MIH_C_LINK_AC_TYPE_LINK_LOW_POWER + g_ue_ral_obj[instance].mih_supported_action_list = MIH_C_LINK_AC_TYPE_LINK_DISCONNECT | + MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN | + MIH_C_LINK_AC_TYPE_LINK_POWER_UP | + MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR | + MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES | + MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES; - // Initialize measurements - IAL_NAS_measures_init(); - ralpriv->state = DISCONNECTED; - // should be commented? MW, 7/05/2013 - RAL_process_NAS_message(IO_OBJ_MEAS, IO_CMD_LIST, ralpriv->cell_id); - transaction_id = (MIH_C_TRANSACTION_ID_T)0; - mRALlte_send_link_register_indication(&transaction_id); + g_ue_ral_obj[instance].mih_supported_link_event_list = MIH_C_BIT_LINK_DETECTED | + MIH_C_BIT_LINK_UP | + MIH_C_BIT_LINK_DOWN | + MIH_C_BIT_LINK_PARAMETERS_REPORT | + MIH_C_BIT_LINK_GOING_DOWN | + MIH_C_BIT_LINK_HANDOVER_IMMINENT | + MIH_C_BIT_LINK_HANDOVER_COMPLETE | + MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS; + + g_ue_ral_obj[instance].mih_supported_link_command_list = MIH_C_BIT_LINK_EVENT_SUBSCRIBE | MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE | \ + MIH_C_BIT_LINK_GET_PARAMETERS | MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS | \ + MIH_C_BIT_LINK_ACTION; + + g_ue_ral_obj[instance].link_to_be_detected = MIH_C_BOOLEAN_TRUE; + - return 0; -} -//--------------------------------------------------------------------------- -int main(int argc, char *argv[]){ -//--------------------------------------------------------------------------- - int rc, done; - int meas_polling_counter; - fd_set readfds; - struct timeval tv; - inits(argc, argv); + g_ue_ral_obj[instance].link_mihcap_flag = MIH_C_BIT_EVENT_SERVICE_SUPPORTED | MIH_C_BIT_COMMAND_SERVICE_SUPPORTED | MIH_C_BIT_INFORMATION_SERVICE_SUPPORTED; - done = 0; - ralpriv->pending_req_flag = 0; - meas_polling_counter = 1; + g_ue_ral_obj[instance].net_caps = MIH_C_BIT_NET_CAPS_QOS_CLASS5 | MIH_C_BIT_NET_CAPS_INTERNET_ACCESS | MIH_C_BIT_NET_CAPS_MIH_CAPABILITY; - do{ - // Create fd_set and wait for input; - FD_ZERO(&readfds); - FD_SET(g_sockd_mihf, &readfds); - tv.tv_sec = MIH_C_RADIO_POLLING_INTERVAL_SECONDS; - tv.tv_usec = MIH_C_RADIO_POLLING_INTERVAL_MICRO_SECONDS; + g_ue_ral_obj[instance].transaction_id = (MIH_C_TRANSACTION_ID_T)rand(); - rc= select(FD_SETSIZE, &readfds, NULL, NULL, &tv); - if(rc == -1) { - perror("select"); - done = 1; + LOG_D(RAL_UE, " Connect to the MIH-F for instance %d...\n", instance); + g_ue_ral_obj[instance].mih_sock_desc = -1; + if (mRAL_mihf_connect(instance) < 0 ) { + LOG_E(RAL_UE, " %s : Could not connect to MIH-F...\n", __FUNCTION__); + // TO DO RETRY LATER + //exit(-1); + } else { + itti_subscribe_event_fd(TASK_RAL_UE, g_ue_ral_obj[instance].mih_sock_desc); + hashtable_insert(g_ue_ral_fd2instance, g_ue_ral_obj[instance].mih_sock_desc, (void*)instance); } + mRAL_send_link_register_indication(instance, &g_ue_ral_obj[instance].transaction_id); + } + return 0; +} - //something received! - if(rc >= 0){ - if(FD_ISSET(g_sockd_mihf, &readfds)){ - done=mRALlte_mih_link_process_message(); - } - - //get measures from NAS - timer = 21x100ms -- impair - if (meas_polling_counter ++ == 21){ -// if (meas_polling_counter ++ == 51){ - IAL_NAS_measures_update(meas_polling_counter); - rallte_NAS_measures_polling(); - meas_polling_counter =1; - } +void mRAL_process_file_descriptors(struct epoll_event *events, int nb_events) +{ + int i; + ral_ue_instance_t instance; + hashtable_rc_t rc; - if (ralpriv->pending_req_flag > 0){ //wait until next time - ralpriv->pending_req_flag ++; - rallte_verifyPendingConnection(); - } + if (events == NULL) { + return; + } + for (i = 0; i < nb_events; i++) { + rc = hashtable_get(g_ue_ral_fd2instance, events[i].data.fd, (void**)&instance); + if (rc == HASH_TABLE_OK) { + mRAL_mih_link_process_message(instance); } - }while(!done); + } +} - close(g_sockd_mihf); - MIH_C_exit(); - return 0; +void* mRAL_task(void *args_p) { + int nb_events; + struct epoll_event *events; + MessageDef *msg_p = NULL; + const char *msg_name = NULL; + instance_t instance = 0; + + + mRAL_initialize(); + + itti_mark_task_ready (TASK_RAL_UE); + + while(1) { + // Wait for a message + itti_receive_msg (TASK_RAL_UE, &msg_p); + + if (msg_p != NULL) { + + msg_name = ITTI_MSG_NAME (msg_p); + instance = ITTI_MSG_INSTANCE (msg_p); + + switch (ITTI_MSG_ID(msg_p)) { + case TERMINATE_MESSAGE: + // TO DO + itti_exit_task (); + break; + + case TIMER_HAS_EXPIRED: + LOG_D(RAL_UE, "Received %s\n", msg_name); + break; + + case RRC_RAL_SYSTEM_INFORMATION_IND: + LOG_D(RAL_UE, "Received %s\n", msg_name); + mRAL_rx_rrc_ral_system_information_indication(instance, msg_p); + break; + + case RRC_RAL_CONNECTION_ESTABLISHMENT_IND: + LOG_D(RAL_UE, "Received %s\n", msg_name); + mRAL_rx_rrc_ral_connection_establishment_indication(instance, msg_p); + break; + + case RRC_RAL_CONNECTION_REESTABLISHMENT_IND: + LOG_D(RAL_UE, "Received %s\n", msg_name); + mRAL_rx_rrc_ral_connection_reestablishment_indication(instance, msg_p); + break; + + case RRC_RAL_CONNECTION_RECONFIGURATION_IND: + LOG_D(RAL_UE, "Received %s\n", msg_name); + mRAL_rx_rrc_ral_connection_reconfiguration_indication(instance, msg_p); + break; + + case RRC_RAL_MEASUREMENT_REPORT_IND: + LOG_D(RAL_UE, "Received %s\n", msg_name); + mRAL_rx_rrc_ral_measurement_report_indication(instance, msg_p); + break; + + case RRC_RAL_CONNECTION_RELEASE_IND: + LOG_D(RAL_UE, "Received %s\n", msg_name); + mRAL_rx_rrc_ral_connection_release_indication(instance, msg_p); + break; + + case RRC_RAL_CONFIGURE_THRESHOLD_CONF: + LOG_D(RAL_UE, "Received %s\n", msg_name); + mRAL_rx_rrc_ral_configure_threshold_conf(instance, msg_p); + break; + default: + LOG_E(RAL_UE, "Received unexpected message %s\n", msg_name); + break; + } + free(msg_p); + msg_p = NULL; + } + nb_events = itti_get_events(TASK_RAL_UE, &events); + /* Now handle notifications for other sockets */ + if (nb_events > 0) { + mRAL_process_file_descriptors(events, nb_events); + } + } } diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_execute.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_execute.c index 643540a294..2943abc60c 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_execute.c +++ b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_execute.c @@ -34,332 +34,19 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#define MRAL_MODULE -#define MRALLTE_MIH_EXECUTE_C -#include <assert.h> -#include "lteRALue_mih_execute.h" -#include "lteRALue_variables.h" -#include "nas_ue_ioctl.h" -#include "lteRALue_proto.h" - -//----------------------------------------------------------------------------- -void mRALlte_action_request(MIH_C_Message_Link_Action_request_t* messageP) { -//----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - LIST(MIH_C_LINK_SCAN_RSP, scan_response_set); - MIH_C_LINK_AC_RESULT_T link_action_result; - MIH_C_TRANSACTION_ID_T transaction_id; - unsigned int scan_index, meas_to_send; - - - memcpy(&g_link_action, &messageP->primitive.LinkAction, sizeof(MIH_C_LINK_ACTION_T)); - - status = MIH_C_STATUS_SUCCESS; - link_action_result = MIH_C_LINK_AC_RESULT_SUCCESS; - scan_response_set_list.length = 0; - meas_to_send = ralpriv->num_measures; - #ifdef RAL_REALTIME - meas_to_send = 1; // MW-TEMP - For real Time, block reporting to one measure only - #endif - - if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) { - for (scan_index = 0; scan_index < meas_to_send; scan_index++) { - //MIH_C_LINK_ADDR_T - MW-TEMP, set to DEFAULT_ADDRESS_eNB (should not be UE address here) - scan_response_set_list.val[scan_index].link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - //MIH_C_3GPP_ADDR_set(&scan_response_set_list.val[scan_index].link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - MIH_C_3GPP_ADDR_set(&scan_response_set_list.val[scan_index].link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_eNB, strlen(DEFAULT_ADDRESS_eNB)); - // MIH_C_NETWORK_ID_T - MIH_C_NETWORK_ID_set(&scan_response_set_list.val[scan_index].network_id, (u_int8_t *)PREDEFINED_MIH_NETWORK_ID, strlen(PREDEFINED_MIH_NETWORK_ID)); - // MIH_C_SIG_STRENGTH_T - - scan_response_set_list.val[scan_index].sig_strength.choice = MIH_C_SIG_STRENGTH_CHOICE_PERCENTAGE; - scan_response_set_list.val[scan_index].sig_strength._union.percentage = ralpriv->integrated_meas_level[scan_index]; - scan_response_set_list.length += 1; - } - transaction_id = messageP->header.transaction_id; +#define LTE_RAL_UE +#define LTERALUE_MIH_MSG_C - mRALlte_send_link_action_confirm(&transaction_id, &status, &scan_response_set_list, &link_action_result); - } - if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN) { - // TO DO - } - if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ) { - // TO DO - } - - // do not make actions if SCAN required - if (( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) == 0) { - switch (messageP->primitive.LinkAction.link_ac_type) { - case MIH_C_LINK_AC_TYPE_NONE: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_NONE: NO ACTION\n", __FUNCTION__); - break; - - case MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: NO ACTION\n", __FUNCTION__); - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_DISCONNECT) { - // TO DO - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - break; - - case MIH_C_LINK_AC_TYPE_LINK_LOW_POWER: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_LOW_POWER\n", __FUNCTION__); - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_LOW_POWER) { - // TO DO - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - break; - - case MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN\n", __FUNCTION__); - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN) { - if ( ralpriv->pending_req_action & MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN ) { - if (ralpriv->state == DISCONNECTED) { - DEBUG("Deactivation requested, but interface already inactive ==> NO OP\n"); - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } else { - ralpriv->pending_req_action = ralpriv->pending_req_action | MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN; - ralpriv->pending_req_status = 0; - ralpriv->pending_req_transaction_id = messageP->header.transaction_id; - DEBUG("Deactivation requested to NAS interface\n"); - RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_DEL, ralpriv->cell_id); - //Send immediatly a confirm, otherwise it will arrive to late and MIH-F will report a failure to the MIH-USER - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, NULL, &link_action_result); - } - } else { - ralpriv->pending_req_action |= MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN; - ralpriv->pending_req_status = 0; - ralpriv->pending_req_transaction_id = messageP->header.transaction_id; - DEBUG("Deactivation requested to NAS interface\n"); - RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_DEL, ralpriv->cell_id); - //Send immediatly a confirm, otherwise it will arrive to late and MIH-F will report a failure to the MIH-USER - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, NULL, &link_action_result); - } - } else { - DEBUG ("[mRAL]: command POWER DOWN not available \n\n"); - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, NULL, &link_action_result); - } - break; - - case MIH_C_LINK_AC_TYPE_LINK_POWER_UP: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_POWER_UP\n", __FUNCTION__); - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_POWER_UP) { - // Activation requested - check it is not already active - if(ralpriv->pending_req_action & MIH_C_LINK_AC_TYPE_LINK_POWER_UP) { - if (ralpriv->state == CONNECTED) { - DEBUG("Activation requested, but interface already active ==> NO OP\n"); - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } else { - ralpriv->pending_req_action = ralpriv->pending_req_action | MIH_C_LINK_AC_TYPE_LINK_POWER_UP; - ralpriv->pending_req_status = 0; - ralpriv->pending_req_transaction_id = messageP->header.transaction_id; - ralpriv->cell_id = ralpriv->meas_cell_id[0]; // Default cell #0 - Next, choose cell with best conditions - DEBUG("Activation requested to NAS interface on cell %d\n", ralpriv->cell_id); - RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_ADD, ralpriv->cell_id); - } - } else { - ralpriv->pending_req_action |= MIH_C_LINK_AC_TYPE_LINK_POWER_UP; - ralpriv->pending_req_status = 0; - ralpriv->pending_req_transaction_id = messageP->header.transaction_id; - ralpriv->cell_id = ralpriv->meas_cell_id[0]; // Default cell #0 - Next, choose cell with best conditions - DEBUG("Activation requested to NAS interface on cell %d\n", ralpriv->cell_id); - RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_ADD, ralpriv->cell_id); - } - } else { - DEBUG ("[mRAL]: command POWER UP not available \n\n"); - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - break; - - case MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: NO ACTION\n", __FUNCTION__); - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - break; - - case MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: NO ACTION\n", __FUNCTION__); - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - break; - - case MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: NO ACTION\n", __FUNCTION__); - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - break; - - default: - ERR("%s Invalid LinkAction.link_ac_type in MIH_C_Message_Link_Action_request\n", __FUNCTION__); - status = MIH_C_STATUS_UNSPECIFIED_FAILURE; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - } -} - -//----------------------------------------------------------------------------- -void mRALlte_get_parameters_request(MIH_C_Message_Link_Get_Parameters_request_t* messageP) { -//----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - MIH_C_LINK_PARAM_LIST_T link_parameters_status_list; - MIH_C_LINK_STATES_RSP_LIST_T link_states_response_list; - MIH_C_LINK_DESC_RSP_LIST_T link_descriptors_response_list; - unsigned int link_index; - - // SAVE REQUEST - // MAY BE MERGE REQUESTS ? - //memcpy(&g_link_cfg_param_thresholds_list, &messageP->primitive.LinkConfigureParameterList_list, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); - - status = MIH_C_STATUS_SUCCESS; - - for (link_index = 0; - link_index < messageP->primitive.LinkParametersRequest_list.length; - link_index++) { - - //------------------------------------------------ - // MIH_C_LINK_PARAM_LIST_T - //------------------------------------------------ - memcpy(&link_parameters_status_list.val[link_index].link_param_type, - &messageP->primitive.LinkParametersRequest_list.val[link_index], - sizeof(MIH_C_LINK_PARAM_TYPE_T)); - - switch (messageP->primitive.LinkParametersRequest_list.val[link_index].choice) { - case MIH_C_LINK_PARAM_TYPE_CHOICE_GEN: - link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - link_parameters_status_list.val[link_index]._union.link_param_val = MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH; - break; - case MIH_C_LINK_PARAM_TYPE_CHOICE_QOS: - link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_QOS_PARAM_VAL; - link_parameters_status_list.val[link_index]._union.qos_param_val.choice = MIH_C_QOS_PARAM_VAL_CHOICE_AVG_PK_TX_DELAY; - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.length = 2; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].cos_id = 2; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].value = 20; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[1].cos_id = 3; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[2].value = 50; //?? - break; - case MIH_C_LINK_PARAM_TYPE_CHOICE_LTE: - case MIH_C_LINK_PARAM_TYPE_CHOICE_GG: - case MIH_C_LINK_PARAM_TYPE_CHOICE_EDGE: - case MIH_C_LINK_PARAM_TYPE_CHOICE_ETH: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_11: - case MIH_C_LINK_PARAM_TYPE_CHOICE_C2K: - case MIH_C_LINK_PARAM_TYPE_CHOICE_FDD: - case MIH_C_LINK_PARAM_TYPE_CHOICE_HRPD: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_16: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_20: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_22: - default: - ERR("%s TO DO CONTINUE PROCESSING LinkParametersRequest_list of \n", __FUNCTION__); - } - - //------------------------------------------------ - // MIH_C_LINK_STATES_RSP_LIST_T - //------------------------------------------------ - if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_OP_MODE) { - link_states_response_list.val[link_index].choice = 0; - link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; - } else if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_CHANNEL_ID) { - link_states_response_list.val[link_index].choice = 1; - link_states_response_list.val[link_index]._union.channel_id = PREDEFINED_CHANNEL_ID; - } else { - ERR("%s Invalid LinkStatesRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); - // DEFAULT VALUES - link_states_response_list.val[link_index].choice = 0; - link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; - } - - //------------------------------------------------ - // MIH_C_LINK_DESC_RSP_LIST_T - //------------------------------------------------ - if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_CLASSES_OF_SERVICE_SUPPORTED) { - link_descriptors_response_list.val[link_index].choice = 0; - link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; - } else if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_QUEUES_SUPPORTED) { - link_descriptors_response_list.val[link_index].choice = 1; - link_descriptors_response_list.val[link_index]._union.num_queue = PREDEFINED_QUEUES_SUPPORTED; - } else { - ERR("%s Invalid LinkDescriptorsRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); - // DEFAULT VALUES - link_descriptors_response_list.val[link_index].choice = 0; - link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; - } - } - link_parameters_status_list.length = messageP->primitive.LinkParametersRequest_list.length; - link_states_response_list.length = messageP->primitive.LinkParametersRequest_list.length; - link_descriptors_response_list.length = messageP->primitive.LinkParametersRequest_list.length; - - - mRALte_send_get_parameters_confirm(&messageP->header.transaction_id, - &status, - &link_parameters_status_list, - &link_states_response_list, - &link_descriptors_response_list); -} - -//----------------------------------------------------------------------------- -void mRALlte_subscribe_request(MIH_C_Message_Link_Event_Subscribe_request_t* messageP) { -//----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - MIH_C_LINK_EVENT_LIST_T mih_subscribed_req_event_list; - - ralpriv->mih_subscribe_req_event_list |= (messageP->primitive.RequestedLinkEventList & ralpriv->mih_supported_link_event_list); - - mih_subscribed_req_event_list = ralpriv->mih_subscribe_req_event_list & messageP->primitive.RequestedLinkEventList; - - status = MIH_C_STATUS_SUCCESS; - - mRALte_send_event_subscribe_confirm(&messageP->header.transaction_id, - &status, - &mih_subscribed_req_event_list); - -} -//----------------------------------------------------------------------------- -void mRALlte_unsubscribe_request(MIH_C_Message_Link_Event_Unsubscribe_request_t* messageP) { +#include <assert.h> //----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - MIH_C_LINK_EVENT_LIST_T mih_unsubscribed_req_event_list; - MIH_C_LINK_EVENT_LIST_T saved_req_event_list; +#include "lteRALue.h" - saved_req_event_list = ralpriv->mih_subscribe_req_event_list; - ralpriv->mih_subscribe_req_event_list &= ((messageP->primitive.RequestedLinkEventList & ralpriv->mih_supported_link_event_list) ^ - messageP->primitive.RequestedLinkEventList); - mih_unsubscribed_req_event_list = ralpriv->mih_subscribe_req_event_list ^ saved_req_event_list; - status = MIH_C_STATUS_SUCCESS; - - mRALte_send_event_unsubscribe_confirm(&messageP->header.transaction_id, - &status, - &mih_unsubscribed_req_event_list); -} //----------------------------------------------------------------------------- -void mRALlte_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* messageP) { +void mRAL_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* messageP) { //----------------------------------------------------------------------------- MIH_C_STATUS_T status; MIH_C_LINK_CFG_STATUS_LIST_T link_cfg_status_list; @@ -409,8 +96,9 @@ void mRALlte_configure_thresholds_request(MIH_C_Message_Link_Configure_Threshold mRALte_send_configure_thresholds_confirm(&messageP->header.transaction_id,&status, &link_cfg_status_list); } +/* //----------------------------------------------------------------------------- -void mRALlte_check_thresholds_signal_strength(MIH_C_THRESHOLD_VAL_T new_valP, MIH_C_THRESHOLD_VAL_T old_valP) { +void mRAL_check_thresholds_signal_strength(MIH_C_THRESHOLD_VAL_T new_valP, MIH_C_THRESHOLD_VAL_T old_valP) { //----------------------------------------------------------------------------- unsigned int threshold_index, threshold_index_mov; @@ -524,7 +212,9 @@ void mRALlte_check_thresholds_signal_strength(MIH_C_THRESHOLD_VAL_T new_valP, MI MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - mRALlte_send_link_parameters_report_indication(&transaction_id, &link_identifier, &LinkParametersReportList_list); + mRAL_send_link_parameters_report_indication(&transaction_id, &link_identifier, &LinkParametersReportList_list); } } +*/ + diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_msg.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_msg.c index 368a31b901..83c4d51f3c 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_msg.c +++ b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_msg.c @@ -34,206 +34,153 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#define MRAL_MODULE -#define MRALLTE_MIH_MSG_C +#define LTE_RAL_UE +#define LTERALUE_MIH_MSG_C //----------------------------------------------------------------------------- -#include "lteRALue_mih_msg.h" -#include "lteRALue_variables.h" -#include "lteRALue_mih_execute.h" +#include "lteRALue.h" //----------------------------------------------------------------------------- +#define MSG_CODEC_RECV_BUFFER_SIZE 16400 +#define MSG_CODEC_SEND_BUFFER_SIZE 16400 -static char g_msg_codec_tmp_print_buffer[8192]; -#ifdef MSCGEN_PYTOOL -#define MSC_GEN_BUF_SIZE 1024 -// global instead of poisonning the stack -static char g_msc_gen_buf[MSC_GEN_BUF_SIZE]; -static unsigned int g_msc_gen_buffer_index; -#endif +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +static u_int8_t g_msg_codec_recv_buffer[MSG_CODEC_RECV_BUFFER_SIZE] = {}; +static u_int8_t g_msg_codec_send_buffer[MSG_CODEC_SEND_BUFFER_SIZE] = {}; + +static char g_msg_print_buffer[8192] = {}; +static char g_msg_codec_print_buffer[8192] = {}; //----------------------------------------------------------------------------- -int mRALlte_send_to_mih(u_int8_t *bufferP, size_t lenP) { +int mRAL_send_to_mih(ral_ue_instance_t instanceP, u_int8_t *bufferP, size_t lenP) { //----------------------------------------------------------------------------- int result; - mRALlte_print_buffer((char*)bufferP, lenP); - result = send(g_sockd_mihf, (const void *)bufferP, lenP, 0); + result = send(g_ue_ral_obj[instanceP].mih_sock_desc, (const void *)bufferP, lenP, 0); if (result != lenP) { - ERR("send_to_mih %d bytes failed, returned %d: %s\n", lenP, result, strerror(errno)); + LOG_E(RAL_UE, "send_to_mih %d bytes failed, returned %d: %s\n", lenP, result, strerror(errno)); } return result; } -//----------------------------------------------------------------------------- -// Print the content of a buffer in hexadecimal -void mRALlte_print_buffer(char * bufferP, int lengthP) { -//----------------------------------------------------------------------------- - char c; - unsigned int buffer_index = 0; - unsigned int index; - unsigned int octet_index = 0; - unsigned long char_index = 0; - - if (bufferP == NULL) { - return; - } +//--------------------------------------------------------------------------- +int mRAL_mihf_connect(ral_ue_instance_t instanceP){ +//--------------------------------------------------------------------------- + struct addrinfo info; /* endpoint information */ + struct addrinfo *addr, *rp; /* endpoint address */ + int rc; /* returned error code */ + int optval; /* socket option value */ - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], "\n------+-------------------------------------------------+------------------+\n"); - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " | 0 1 2 3 4 5 6 7 8 9 a b c d e f | 0123456789abcdef |\n"); - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], "------+-------------------------------------------------+------------------+\n"); - for (octet_index = 0; octet_index < lengthP; octet_index++) { - if ((octet_index % 16) == 0){ - if (octet_index != 0) { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " | "); - for (char_index = octet_index - 16; char_index < octet_index; char_index++) { - c = (char) bufferP[char_index] & 0177; - if (iscntrl(c) || isspace(c)) { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " "); - } else { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], "%c", c); - } - } - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " |\n"); - } - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " %04d |", octet_index); - } - /* - * Print every single octet in hexadecimal form - */ - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " %02x", (u_int8_t)(bufferP[octet_index] & 0x00FF)); - /* - * Align newline and pipes according to the octets in groups of 2 - */ - } + unsigned char buf[sizeof(struct sockaddr_in6)]; /* - * Append enough spaces and put final pipe - */ - if ((lengthP % 16) > 0) { - for (index = (octet_index % 16); index < 16; ++index) { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " "); - } - } - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " | "); - for (char_index = (octet_index / 16) * 16; char_index < octet_index; char_index++) { - c = (char) bufferP[char_index] & 0177; - if (iscntrl(c) || isspace(c)) { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " "); - } else { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], "%c", c); - } - } - if ((lengthP % 16) > 0) { - for (index = (octet_index % 16); index < 16; ++index) { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " "); - } - } - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " |\n"); - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], "------+-------------------------------------------------+------------------+\n"); - DEBUG(g_msg_codec_tmp_print_buffer); -} -//--------------------------------------------------------------------------- -int mRALlte_mihf_connect(void){ -//--------------------------------------------------------------------------- - struct addrinfo hints; - struct addrinfo *result, *rp; - int s, on; - struct sockaddr_in *addr = NULL; - struct sockaddr_in6 *addr6 = NULL; - unsigned char buf[sizeof(struct sockaddr_in6)]; - - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - hints.ai_flags = 0; - hints.ai_protocol = 0; /* Any protocol */ - - s = getaddrinfo(g_mihf_ip_address, g_mihf_remote_port, &hints, &result); - if (s != 0) { - ERR(" getaddrinfo: %s\n", gai_strerror(s)); - freeaddrinfo(result); + * Initialize the remote MIH-F endpoint address information + */ + memset(&info, 0, sizeof(struct addrinfo)); + info.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ + info.ai_socktype = SOCK_DGRAM; /* Datagram socket */ + info.ai_flags = 0; + info.ai_protocol = 0; /* Any protocol */ + + rc = getaddrinfo(g_ue_ral_obj[instanceP].mihf_ip_address, g_ue_ral_obj[instanceP].mihf_remote_port, &info, &addr); + if (rc != 0) { + LOG_E(RAL_UE, " getaddrinfo: %s\n", gai_strerror(rc)); return -1; } - /* getaddrinfo() returns a list of address structures. - Try each address until we successfully connect(2). - If socket(2) (or connect(2)) fails, we (close the socket - and) try the next address. */ - - for (rp = result; rp != NULL; rp = rp->ai_next) { - g_sockd_mihf = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - if (g_sockd_mihf == -1) + /* + * getaddrinfo() returns a linked list of address structures. + * Try each address until we successfully connect(2). If socket(2) + * (or connect(2)) fails, we (close the socket and) try the next address. + */ + for (rp = addr; rp != NULL; rp = rp->ai_next) { + + g_ue_ral_obj[instanceP].mih_sock_desc = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if (g_ue_ral_obj[instanceP].mih_sock_desc < 0) { continue; + } - on = 1; - setsockopt( g_sockd_mihf, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); - - if(rp->ai_family == AF_INET) { - DEBUG(" %s is an ipv4 address\n",g_mihf_ip_address); - addr = (struct sockaddr_in *)(&buf[0]); - addr->sin_port = htons(atoi(g_ral_listening_port_for_mihf)); - addr->sin_family = AF_INET; - s = inet_pton(AF_INET, g_ral_ip_address, &addr->sin_addr); - if (s <= 0) { - if (s == 0) { - ERR(" IP RAL address should be a IPv4 ADDR - But found not in presentation format : %s\n", g_ral_ip_address); - } else { - ERR(" %s - inet_pton(RAL IPv4 ADDR %s): %s\n", __FUNCTION__, g_ral_ip_address, strerror(s)); - } - return -1; - } + optval = 1; + setsockopt(g_ue_ral_obj[instanceP].mih_sock_desc, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); - s = bind(g_sockd_mihf, (const struct sockaddr *)addr, sizeof(struct sockaddr_in)); - if (s == -1) { - ERR(" RAL IPv4 Address Bind: %s\n", strerror(errno)); - return -1; - } - // sockd_mihf is of type SOCK_DGRAM, rp->ai_addr is the address to which datagrams are sent by default - if (connect(g_sockd_mihf, rp->ai_addr, rp->ai_addrlen) != -1) { - NOTICE(" RAL is now UDP-CONNECTED to MIH-F\n"); - freeaddrinfo(result); - return 0; - } else { - close(g_sockd_mihf); - } - } else if (rp->ai_family == AF_INET6) { - DEBUG(" %s is an ipv6 address\n",g_mihf_ip_address); + /* + * Convert the RAL local network address + */ + if (rp->ai_family == AF_INET) { + /* IPv4 network address family */ + struct sockaddr_in *addr4 = NULL; + + LOG_D(RAL_UE, " %s is an ipv4 address\n", g_ue_ral_obj[instanceP].mihf_ip_address); + addr4 = (struct sockaddr_in *)(&buf[0]); + addr4->sin_port = htons(atoi(g_ue_ral_obj[instanceP].ral_listening_port)); + addr4->sin_family = AF_INET; + rc = inet_pton(AF_INET, g_ue_ral_obj[instanceP].ral_ip_address, &addr4->sin_addr); + } + else if (rp->ai_family == AF_INET6) { + /* IPv6 network address family */ + struct sockaddr_in6 *addr6 = NULL; + + LOG_D(RAL_UE, " %s is an ipv6 address\n", g_ue_ral_obj[instanceP].mihf_ip_address); addr6 = (struct sockaddr_in6 *)(&buf[0]); - addr6->sin6_port = htons(atoi(g_ral_listening_port_for_mihf)); + addr6->sin6_port = htons(atoi(g_ue_ral_obj[instanceP].ral_listening_port)); addr6->sin6_family = AF_INET6; - s = inet_pton(AF_INET, g_ral_ip_address, &addr6->sin6_addr); - if (s <= 0) { - if (s == 0) { - ERR(" IP RAL address should be a IPv6 ADDR, But found not in presentation format : %s\n", g_ral_ip_address); - } else { - ERR(" %s - inet_pton(RAL IPv6 ADDR %s): %s\n", __FUNCTION__, g_ral_ip_address, strerror(s)); - } - return -1; - } + rc = inet_pton(AF_INET, g_ue_ral_obj[instanceP].ral_ip_address, &addr6->sin6_addr); + } + else { + LOG_E(RAL_UE, " %s is an unknown address format %d\n", + g_ue_ral_obj[instanceP].mihf_ip_address, rp->ai_family); + return -1; + } - s = bind(g_sockd_mihf, (const struct sockaddr *)addr6, sizeof(struct sockaddr_in)); - if (s == -1) { - ERR(" RAL IPv6 Address Bind: %s\n", strerror(errno)); - return -1; - } - if (connect(g_sockd_mihf, rp->ai_addr, rp->ai_addrlen) != -1) { - NOTICE(" RAL is now UDP-CONNECTED to MIH-F\n"); - freeaddrinfo(result); - return 0; - } else { - close(g_sockd_mihf); - } - } else { - ERR(" %s is an unknown address format %d\n",g_mihf_ip_address,rp->ai_family); + if (rc < 0) { + /* The network address convertion failed */ + LOG_E(RAL_UE, " inet_pton(RAL IP address %s): %s\n", + g_ue_ral_obj[instanceP].ral_ip_address, strerror(rc)); + return -1; + } + else if (rc == 0) { + /* The network address is not valid */ + LOG_E(RAL_UE, " RAL IP address %s is not valid\n", g_ue_ral_obj[instanceP].ral_ip_address); + return -1; + } + + /* Bind the socket to the local RAL network address */ + rc = bind(g_ue_ral_obj[instanceP].mih_sock_desc, (const struct sockaddr *)buf, + sizeof(struct sockaddr_in)); + + if (rc < 0) { + LOG_E(RAL_UE, " bind(RAL IP address %s): %s\n", + g_ue_ral_obj[instanceP].ral_ip_address, strerror(errno)); + return -1; + } + + /* Connect the socket to the remote MIH-F network address */ + if (connect(g_ue_ral_obj[instanceP].mih_sock_desc, rp->ai_addr, rp->ai_addrlen) == 0) { + LOG_N(RAL_UE, " RAL [%s:%s] is now UDP-CONNECTED to MIH-F [%s:%s]\n", + g_ue_ral_obj[instanceP].ral_ip_address, g_ue_ral_obj[instanceP].ral_listening_port, + g_ue_ral_obj[instanceP].mihf_ip_address, g_ue_ral_obj[instanceP].mihf_remote_port); + break; } - close(g_sockd_mihf); + /* + * We failed to connect: + * Close the socket file descriptor and try to connect to an other + * address. + */ + close(g_ue_ral_obj[instanceP].mih_sock_desc); } - if (rp == NULL) { /* No address succeeded */ - ERR(" Could not connect to MIH-F\n"); + /* + * Unable to connect to a network address + */ + if (rp == NULL) { + LOG_E(RAL_UE, " Could not connect to MIH-F\n"); return -1; } - return -1; + + freeaddrinfo(addr); + + return 0; } /*************************************************************************** @@ -241,7 +188,8 @@ int mRALlte_mihf_connect(void){ ***************************************************************************/ //----------------------------------------------------------------------------- -void mRALlte_send_link_register_indication(MIH_C_TRANSACTION_ID_T *transaction_idP) { +void mRAL_send_link_register_indication(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP) { //----------------------------------------------------------------------------- MIH_C_Message_Link_Register_indication_t message; Bit_Buffer_t *bb; @@ -259,15 +207,15 @@ void mRALlte_send_link_register_indication(MIH_C_TRANSACTION_ID_T *transaction_ message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); message.primitive.Link_Id.link_type = MIH_C_WIRELESS_UMTS; message.primitive.Link_Id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); + MIH_C_3GPP_ADDR_set(&message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)&(g_ue_ral_obj[instanceP].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); //MIH_C_3GPP_ADDR_set(&message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP, strlen(DEFAULT_ADDRESS_3GPP)); //MIH_C_3GPP_ADDR_load_3gpp_str_address(&message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP); @@ -279,29 +227,17 @@ void mRALlte_send_link_register_indication(MIH_C_TRANSACTION_ID_T *transaction_ MIH_C_LINK_ID2String(&message.primitive.Link_Id, g_msc_gen_buf); #endif - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Register.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Register.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Register.indication\n"); } else { - DEBUG(": Sent Link_Register.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Register.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Register.indication\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALlte_send_link_detected_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, MIH_C_LINK_DET_INFO_T *link_detected_infoP) { +void mRAL_send_link_detected_indication(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, + MIH_C_LINK_DET_INFO_T *link_detected_infoP) { //----------------------------------------------------------------------------- MIH_C_Message_Link_Detected_indication_t message; Bit_Buffer_t *bb; @@ -319,52 +255,30 @@ void mRALlte_send_link_detected_indication(MIH_C_TRANSACTION_ID_T *transaction_ message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); memcpy(&message.primitive.LinkDetectedInfo, link_detected_infoP, sizeof(MIH_C_LINK_DET_INFO_T)); message_total_length = MIH_C_Link_Message_Encode_Link_Detected_indication(bb, &message); - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Detected.indication\n"); - #ifdef MSCGEN_PYTOOL - g_msc_gen_buffer_index = 0; - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = MIH_C_SIG_STRENGTH2String(&link_detected_infoP->sig_strength, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index = sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nSINR %d\\nData rate %d", link_detected_infoP->sinr, link_detected_infoP->link_data_rate); - NOTICE("[MSC_MSG][%s][%s][--- Link_Detected.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Detected.indication\n"); } else { - DEBUG(": Sent Link_Detected.indication\n"); - #ifdef MSCGEN_PYTOOL - g_msc_gen_buffer_index = 0; - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = MIH_C_SIG_STRENGTH2String(&link_detected_infoP->sig_strength, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index = sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nSINR %d\\nData rate %d", link_detected_infoP->sinr, link_detected_infoP->link_data_rate); - - NOTICE("[MSC_MSG][%s][%s][--- Link_Detected.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Detected.indication\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_ADDR_T *new_access_routerP, - MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP, - MIH_C_IP_MOB_MGMT_T *mobility_management_supportP) { +void mRAL_send_link_up_indication(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, + MIH_C_LINK_TUPLE_ID_T *link_identifierP, + MIH_C_LINK_ADDR_T *old_access_routerP, + MIH_C_LINK_ADDR_T *new_access_routerP, + MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP, + MIH_C_IP_MOB_MGMT_T *mobility_management_supportP) { //----------------------------------------------------------------------------- MIH_C_Message_Link_Up_indication_t message; Bit_Buffer_t *bb; @@ -382,9 +296,9 @@ void mRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); memcpy(&message.primitive.LinkIdentifier, link_identifierP, sizeof(MIH_C_LINK_TUPLE_ID_T)); @@ -396,29 +310,18 @@ void mRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, message_total_length = MIH_C_Link_Message_Encode_Link_Up_indication(bb, &message); - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Up.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Up.indication ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Up.indication\n"); } else { - DEBUG(": Sent Link_Up.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Up.indication --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Up.indication\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP) { +void mRAL_send_link_parameters_report_indication(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, + MIH_C_LINK_TUPLE_ID_T *link_identifierP, + MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP) { //----------------------------------------------------------------------------- MIH_C_Message_Link_Parameters_Report_indication_t message; Bit_Buffer_t *bb; @@ -439,9 +342,9 @@ void mRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); memcpy(&message.primitive.LinkIdentifier, link_identifierP, sizeof(MIH_C_LINK_TUPLE_ID_T)); @@ -449,39 +352,20 @@ void mRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T message_total_length = MIH_C_Link_Message_Encode_Link_Parameters_Report_indication(bb, &message); - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Parameters_Report.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Parameters_Report.indication ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Parameters_Report.indication\n"); } else { - DEBUG(": Sent Link_Parameters_Report.indication\n"); - #ifdef MSCGEN_PYTOOL - g_msc_gen_buffer_index = 0; - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index += MIH_C_LINK_ID2String(&link_identifierP->link_id, &g_msc_gen_buf[g_msc_gen_buffer_index]); - for (index = 0; index < link_parameters_report_listP->length; index++) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n"); - g_msc_gen_buffer_index += MIH_C_LINK_PARAM_RPT2String(&link_parameters_report_listP->val[index], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - NOTICE("[MSC_MSG][%s][%s][--- Link_Parameters_Report.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Parameters_Report.indication\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_UNSIGNED_INT2_T *time_intervalP, - MIH_C_LINK_GD_REASON_T *link_going_down_reasonP) { +void mRAL_send_link_going_down_indication(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, + MIH_C_LINK_TUPLE_ID_T *link_identifierP, + MIH_C_UNSIGNED_INT2_T *time_intervalP, + MIH_C_LINK_GD_REASON_T *link_going_down_reasonP) { //----------------------------------------------------------------------------- MIH_C_Message_Link_Going_Down_indication_t message; Bit_Buffer_t *bb; @@ -499,9 +383,9 @@ void mRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *transa message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); memcpy(&message.primitive.LinkIdentifier, link_identifierP, sizeof(MIH_C_LINK_TUPLE_ID_T)); @@ -511,31 +395,20 @@ void mRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *transa message_total_length = MIH_C_Link_Message_Encode_Link_Going_Down_indication(bb, &message); - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Going_Down.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Going_Down.indication ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Going_Down.indication\n"); } else { - DEBUG(": Sent Link_Going_Down.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Going_Down.indication --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Going_Down.indication\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_DN_REASON_T *reason_codeP) { +void mRAL_send_link_down_indication(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, + MIH_C_LINK_TUPLE_ID_T *link_identifierP, + MIH_C_LINK_ADDR_T *old_access_routerP, + MIH_C_LINK_DN_REASON_T *reason_codeP) { //----------------------------------------------------------------------------- MIH_C_Message_Link_Down_indication_t message; Bit_Buffer_t *bb; @@ -553,9 +426,9 @@ void mRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *transaction_ message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); memcpy(&message.primitive.LinkIdentifier, link_identifierP, sizeof(MIH_C_LINK_TUPLE_ID_T)); @@ -565,31 +438,20 @@ void mRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *transaction_ message_total_length = MIH_C_Link_Message_Encode_Link_Down_indication(bb, &message); - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Down.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Down.indication ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Down.indication\n"); } else { - DEBUG(": Sent Link_Down.indication\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Down.indication --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Down.indication\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP, - MIH_C_LINK_AC_RESULT_T *link_action_resultP) { +void mRAL_send_link_action_confirm(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, + MIH_C_STATUS_T *statusP, + MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP, + MIH_C_LINK_AC_RESULT_T *link_action_resultP) { //----------------------------------------------------------------------------- MIH_C_Message_Link_Action_confirm_t message; Bit_Buffer_t *bb; @@ -610,9 +472,9 @@ void mRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *transaction_id message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; @@ -637,30 +499,17 @@ void mRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *transaction_id g_msc_gen_buffer_index += MIH_C_LINK_AC_RESULT2String2(link_action_resultP, &g_msc_gen_buf[g_msc_gen_buffer_index]); } #endif - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Action.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Action.confirm\n"); } else { - DEBUG(": Sent Link_Action.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Action.confirm\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, +void mRAL_send_capability_discover_confirm(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, MIH_C_STATUS_T *statusP, MIH_C_LINK_EVENT_LIST_T *supported_link_event_listP, MIH_C_LINK_CMD_LIST_T *supported_link_command_listP) { @@ -681,8 +530,8 @@ void mRALte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *transactio message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.SupportedLinkEventList = supported_link_event_listP; @@ -699,30 +548,17 @@ void mRALte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *transactio g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nsupported commands="); g_msc_gen_buffer_index += MIH_C_LINK_CMD_LIST2String2(message.primitive.SupportedLinkCommandList, &g_msc_gen_buf[g_msc_gen_buffer_index]); #endif - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Capability_Discover.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Capability_Discover.confirm\n"); } else { - DEBUG(": Sent Link_Capability_Discover.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Capability_Discover.confirm\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALte_send_event_subscribe_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, +void mRAL_send_event_subscribe_confirm(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, MIH_C_STATUS_T *statusP, MIH_C_LINK_EVENT_LIST_T *response_link_event_listP) { //----------------------------------------------------------------------------- @@ -742,8 +578,8 @@ void mRALte_send_event_subscribe_confirm(MIH_C_TRANSACTION_ID_T *transaction_id message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.ResponseLinkEventList = response_link_event_listP; @@ -757,30 +593,17 @@ void mRALte_send_event_subscribe_confirm(MIH_C_TRANSACTION_ID_T *transaction_id g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nlink event list="); g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.ResponseLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); #endif - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Event_Subscribe.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Event_Subscribe.confirm\n"); } else { - DEBUG(": Sent Link_Event_Subscribe.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Event_Subscribe.confirm\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALte_send_event_unsubscribe_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, +void mRAL_send_event_unsubscribe_confirm(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, MIH_C_STATUS_T *statusP, MIH_C_LINK_EVENT_LIST_T *response_link_event_listP) { //----------------------------------------------------------------------------- @@ -800,8 +623,8 @@ void mRALte_send_event_unsubscribe_confirm(MIH_C_TRANSACTION_ID_T *transaction_ message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.ResponseLinkEventList = response_link_event_listP; @@ -815,32 +638,19 @@ void mRALte_send_event_unsubscribe_confirm(MIH_C_TRANSACTION_ID_T *transaction_ g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nlink event list="); g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.ResponseLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); #endif - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Event_Unsubscribe.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Event_Unsubscribe.confirm\n"); } else { - DEBUG(": Sent Link_Event_Unsubscribe.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Event_Unsubscribe.confirm\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALte_send_configure_thresholds_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP) { +void mRAL_send_configure_thresholds_confirm(ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, + MIH_C_STATUS_T *statusP, + MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP) { //----------------------------------------------------------------------------- MIH_C_Message_Link_Configure_Thresholds_confirm_t message; Bit_Buffer_t *bb; @@ -861,8 +671,8 @@ void mRALte_send_configure_thresholds_confirm(MIH_C_TRANSACTION_ID_T *transact message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.LinkConfigureStatusList_list = link_configure_status_listP; @@ -878,30 +688,17 @@ void mRALte_send_configure_thresholds_confirm(MIH_C_TRANSACTION_ID_T *transact g_msc_gen_buffer_index += MIH_C_LINK_CFG_STATUS2String(&link_configure_status_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); } #endif - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Configure_Threshold.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Configure_Threshold.confirm\n"); } else { - DEBUG(": Sent Link_Configure_Threshold.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Configure_Threshold.confirm\n"); } free_BitBuffer(bb); } //----------------------------------------------------------------------------- -void mRALte_send_get_parameters_confirm (MIH_C_TRANSACTION_ID_T *transaction_idP, +void mRAL_send_get_parameters_confirm (ral_ue_instance_t instanceP, + MIH_C_TRANSACTION_ID_T *transaction_idP, MIH_C_STATUS_T *statusP, MIH_C_LINK_PARAM_LIST_T *link_parameters_status_listP, MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_listP, @@ -928,8 +725,8 @@ void mRALte_send_get_parameters_confirm (MIH_C_TRANSACTION_ID_T *trans message.header.transaction_id = *transaction_idP; - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); + MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[instanceP].link_id, strlen(g_ue_ral_obj[instanceP].link_id)); + MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[instanceP].mihf_id, strlen(g_ue_ral_obj[instanceP].mihf_id)); message.primitive.Status = *statusP; message.primitive.LinkParametersStatusList_list = link_parameters_status_listP; @@ -938,49 +735,10 @@ void mRALte_send_get_parameters_confirm (MIH_C_TRANSACTION_ID_T *trans message_total_length = MIH_C_Link_Message_Encode_Get_Parameters_confirm(bb, &message); - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0){ - ERR(": Send Link_Get_Parameters.confirm\n"); - #ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.confirm ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); - #endif + if (mRAL_send_to_mih(instanceP, bb->m_buffer,message_total_length)<0){ + LOG_E(RAL_UE, ": Send Link_Get_Parameters.confirm\n"); } else { - DEBUG(": Sent Link_Get_Parameters.confirm\n"); - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&message.source, msg_src); - MIH_C_MIHF_ID2String(&message.destination, msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - if (link_parameters_status_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkParametersStatusList="); - for (i = 0; i < link_parameters_status_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_PARAM2String(&link_parameters_status_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - if (link_states_response_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkStatesResponseList="); - for (i = 0; i < link_states_response_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_STATES_RSP2String(&link_states_response_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - if (link_descriptors_response_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkDescriptorsResponseList="); - for (i = 0; i < link_descriptors_response_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_DESC_RSP2String(&link_descriptors_response_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.confirm\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); - #endif + LOG_D(RAL_UE, ": Sent Link_Get_Parameters.confirm\n"); } free_BitBuffer(bb); } @@ -990,7 +748,7 @@ void mRALte_send_get_parameters_confirm (MIH_C_TRANSACTION_ID_T *trans ***************************************************************************/ //----------------------------------------------------------------------------- -int mRALlte_mih_link_msg_decode(Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP) { +int mRAL_mih_link_msg_decode(ral_ue_instance_t instanceP, Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP) { //----------------------------------------------------------------------------- int status = MIH_MESSAGE_DECODE_FAILURE; MIH_C_HEADER_T header; @@ -1014,215 +772,84 @@ int mRALlte_mih_link_msg_decode(Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *mess switch (message_wrapperP->message_id) { case MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST\n", __FUNCTION__); + LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_capability_discover_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); status = MIH_C_Link_Message_Decode_Link_Capability_Discover_request(bbP, &message_wrapperP->_union_message.link_capability_discover_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.request --->][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif MIH_C_Link_Message_Link_Capability_Discover_request2String(&message_wrapperP->_union_message.link_capability_discover_request, g_msg_print_buffer); - DEBUG("%s", g_msg_print_buffer); + LOG_D(RAL_UE, "%s", g_msg_print_buffer); mih_status = MIH_C_STATUS_SUCCESS; - DEBUG("**\n"); - DEBUG(" %s Sending MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM\n\n", __FUNCTION__); + LOG_D(RAL_UE, "**\n"); + LOG_D(RAL_UE, " %s Sending MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM\n\n", __FUNCTION__); - mRALte_send_capability_discover_confirm(&message_wrapperP->_union_message.link_capability_discover_request.header.transaction_id, + mRAL_send_capability_discover_confirm(instanceP, + &message_wrapperP->_union_message.link_capability_discover_request.header.transaction_id, &mih_status, - &ralpriv->mih_supported_link_event_list, - &ralpriv->mih_supported_link_command_list); + &g_ue_ral_obj[instanceP].mih_supported_link_event_list, + &g_ue_ral_obj[instanceP].mih_supported_link_command_list); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; case MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST\n", __FUNCTION__); + LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_event_subscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); status = MIH_C_Link_Message_Decode_Link_Event_Subscribe_request(bbP, &message_wrapperP->_union_message.link_event_subscribe_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_subscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); - #endif - DEBUG("**\n"); - - mRALlte_subscribe_request(&message_wrapperP->_union_message.link_event_subscribe_request); + LOG_D(RAL_UE, "**\n"); + + mRAL_subscribe_request(instanceP, &message_wrapperP->_union_message.link_event_subscribe_request); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_subscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; case MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST\n", __FUNCTION__); + LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_event_unsubscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); status = MIH_C_Link_Message_Decode_Link_Event_Unsubscribe_request(bbP, &message_wrapperP->_union_message.link_event_unsubscribe_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_unsubscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); - #endif - DEBUG("**\n"); - mRALlte_unsubscribe_request(&message_wrapperP->_union_message.link_event_unsubscribe_request); + LOG_D(RAL_UE, "**\n"); + mRAL_unsubscribe_request(instanceP, &message_wrapperP->_union_message.link_event_unsubscribe_request); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_unsubscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; case MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST\n", __FUNCTION__); + LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_get_parameters_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); status = MIH_C_Link_Message_Decode_Link_Get_Parameters_request(bbP, &message_wrapperP->_union_message.link_get_parameters_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - for (i = 0; i < message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkParametersRequest_list.length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_PARAM_TYPE2String(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkParametersRequest_list.val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n Link states request="); - g_msc_gen_buffer_index += MIH_C_LINK_STATES_REQ2String2(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkStatesRequest, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n Link desc request="); - g_msc_gen_buffer_index += MIH_C_LINK_DESC_REQ2String2(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkDescriptorsRequest, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); - #endif - DEBUG("**\n"); - mRALlte_get_parameters_request(&message_wrapperP->_union_message.link_get_parameters_request); + LOG_D(RAL_UE, "**\n"); + mRAL_get_parameters_request(instanceP, &message_wrapperP->_union_message.link_get_parameters_request); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; case MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST\n", __FUNCTION__); + LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_configure_thresholds_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); status = MIH_C_Link_Message_Decode_Link_Configure_Thresholds_request(bbP, &message_wrapperP->_union_message.link_configure_thresholds_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - for (i = 0; i < message_wrapperP->_union_message.link_configure_thresholds_request.primitive.LinkConfigureParameterList_list.length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_CFG_PARAM2String(&message_wrapperP->_union_message.link_configure_thresholds_request.primitive.LinkConfigureParameterList_list.val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); - #endif - DEBUG("**\n"); - mRALlte_configure_thresholds_request(&message_wrapperP->_union_message.link_configure_thresholds_request); + LOG_D(RAL_UE, "**\n"); + mRAL_configure_thresholds_request(instanceP, &message_wrapperP->_union_message.link_configure_thresholds_request); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; case MIH_C_MESSAGE_LINK_ACTION_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_ACTION_REQUEST\n", __FUNCTION__); + LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_ACTION_REQUEST\n", __FUNCTION__); memcpy(&message_wrapperP->_union_message.link_action_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); status = MIH_C_Link_Message_Decode_Link_Action_request(bbP, &message_wrapperP->_union_message.link_action_request); if (status == MIH_MESSAGE_DECODE_OK) { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_LINK_ACTION2String(&message_wrapperP->_union_message.link_action_request.primitive.LinkAction, g_msc_gen_buf); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nExecution Delay=%d", message_wrapperP->_union_message.link_action_request.primitive.ExecutionDelay); - if (message_wrapperP->_union_message.link_action_request.primitive.PoALinkAddress != NULL) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nPoALinkAddress="); - g_msc_gen_buffer_index += MIH_C_LINK_ADDR2String(message_wrapperP->_union_message.link_action_request.primitive.PoALinkAddress, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); - #endif - DEBUG("**\n"); - mRALlte_action_request(&message_wrapperP->_union_message.link_action_request); + LOG_D(RAL_UE, "**\n"); + mRAL_action_request(instanceP, &message_wrapperP->_union_message.link_action_request); } else { - #ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.request\\nERR DECODE --->][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); - #endif } break; default: - WARNING("UNKNOWN MESSAGE ID SID %d, OP_CODE %d, AID %d\n", header.service_identifier, header.operation_code, header.action_identifier); + LOG_W(RAL_UE, "UNKNOWN MESSAGE ID SID %d, OP_CODE %d, AID %d\n", header.service_identifier, header.operation_code, header.action_identifier); status = MIH_MESSAGE_DECODE_FAILURE; return status; @@ -1234,7 +861,7 @@ int mRALlte_mih_link_msg_decode(Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *mess } //----------------------------------------------------------------------------- -int mRALlte_mih_link_process_message(void){ +int mRAL_mih_link_process_message(ral_ue_instance_t instanceP){ //----------------------------------------------------------------------------- MIH_C_Message_Wrapper_t message_wrapper; int nb_bytes_received ; @@ -1250,7 +877,7 @@ int mRALlte_mih_link_process_message(void){ bb = new_BitBuffer_0(); - nb_bytes_received = recvfrom(g_sockd_mihf, + nb_bytes_received = recvfrom(g_ue_ral_obj[instanceP].mih_sock_desc, (void *)g_msg_codec_recv_buffer, MSG_CODEC_RECV_BUFFER_SIZE, 0, @@ -1258,12 +885,11 @@ int mRALlte_mih_link_process_message(void){ &sockaddr_len); if (nb_bytes_received > 0) { - DEBUG(" \n"); - DEBUG(" %s: Received %d bytes from MIHF\n", __FUNCTION__, nb_bytes_received); - mRALlte_print_buffer((char*)g_msg_codec_recv_buffer, nb_bytes_received); + LOG_D(RAL_UE, " \n"); + LOG_D(RAL_UE, " %s: Received %d bytes from MIHF\n", __FUNCTION__, nb_bytes_received); total_bytes_to_decode += nb_bytes_received; BitBuffer_wrap(bb, g_msg_codec_recv_buffer, total_bytes_to_decode); - status = mRALlte_mih_link_msg_decode(bb, &message_wrapper); + status = mRAL_mih_link_msg_decode(instanceP, bb, &message_wrapper); nb_bytes_decoded = BitBuffer_getPosition(bb); if (status == MIH_MESSAGE_DECODE_OK) { if (nb_bytes_decoded > 0) { @@ -1287,7 +913,7 @@ int mRALlte_mih_link_process_message(void){ total_bytes_to_decode = 0; } else if (status == MIH_MESSAGE_DECODE_TOO_SHORT) { } - DEBUG(" \n"); + LOG_D(RAL_UE, " \n"); } free_BitBuffer(bb); return 0; diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_parameters.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_parameters.c new file mode 100755 index 0000000000..110b37c923 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_parameters.c @@ -0,0 +1,140 @@ +/*************************************************************************** + lteRALue_parameters.c - description + *************************************************************************** + Eurecom OpenAirInterface 3 + Copyright(c) 1999 - 2013 Eurecom + + This program is free software; you can redistribute it and/or modify it + under the terms and conditions of the GNU General Public License, + version 2, as published by the Free Software Foundation. + + This program is distributed in the hope it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + + The full GNU General Public License is included in this distribution in + the file called "COPYING". + + Contact Information + Openair Admin: openair_admin@eurecom.fr + Openair Tech : openair_tech@eurecom.fr + Forums : http://forums.eurecom.fsr/openairinterface + Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France +*******************************************************************************/ +/*! \file lteRALue_mih_execute.c + * \brief Execution of MIH primitives in LTE-RAL-UE + * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic + * \date 2013 + * \company EURECOM + * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr + */ +/*******************************************************************************/ +#define LTE_RAL_UE +#define LTERALUE_PARAMETERS_C +//----------------------------------------------------------------------------- +#include "lteRALue.h" + +//----------------------------------------------------------------------------- +void mRAL_get_parameters_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Get_Parameters_request_t* messageP) { +//----------------------------------------------------------------------------- + MIH_C_STATUS_T status; + MIH_C_LINK_PARAM_LIST_T link_parameters_status_list; + MIH_C_LINK_STATES_RSP_LIST_T link_states_response_list; + MIH_C_LINK_DESC_RSP_LIST_T link_descriptors_response_list; + unsigned int link_index; + + // SAVE REQUEST + // MAY BE MERGE REQUESTS ? + //memcpy(&g_link_cfg_param_thresholds_list, &messageP->primitive.LinkConfigureParameterList_list, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); + + status = MIH_C_STATUS_SUCCESS; + + for (link_index = 0; + link_index < messageP->primitive.LinkParametersRequest_list.length; + link_index++) { + + //------------------------------------------------ + // MIH_C_LINK_PARAM_LIST_T + //------------------------------------------------ + memcpy(&link_parameters_status_list.val[link_index].link_param_type, + &messageP->primitive.LinkParametersRequest_list.val[link_index], + sizeof(MIH_C_LINK_PARAM_TYPE_T)); + + switch (messageP->primitive.LinkParametersRequest_list.val[link_index].choice) { + case MIH_C_LINK_PARAM_TYPE_CHOICE_GEN: + link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; + link_parameters_status_list.val[link_index]._union.link_param_val = MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH; + break; + case MIH_C_LINK_PARAM_TYPE_CHOICE_QOS: + link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_QOS_PARAM_VAL; + link_parameters_status_list.val[link_index]._union.qos_param_val.choice = MIH_C_QOS_PARAM_VAL_CHOICE_AVG_PK_TX_DELAY; + link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.length = 2; //?? + link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].cos_id = 2; //?? + link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].value = 20; //?? + link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[1].cos_id = 3; //?? + link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[2].value = 50; //?? + break; + case MIH_C_LINK_PARAM_TYPE_CHOICE_LTE: + case MIH_C_LINK_PARAM_TYPE_CHOICE_GG: + case MIH_C_LINK_PARAM_TYPE_CHOICE_EDGE: + case MIH_C_LINK_PARAM_TYPE_CHOICE_ETH: + case MIH_C_LINK_PARAM_TYPE_CHOICE_802_11: + case MIH_C_LINK_PARAM_TYPE_CHOICE_C2K: + case MIH_C_LINK_PARAM_TYPE_CHOICE_FDD: + case MIH_C_LINK_PARAM_TYPE_CHOICE_HRPD: + case MIH_C_LINK_PARAM_TYPE_CHOICE_802_16: + case MIH_C_LINK_PARAM_TYPE_CHOICE_802_20: + case MIH_C_LINK_PARAM_TYPE_CHOICE_802_22: + default: + LOG_E(RAL_UE, "%s TO DO CONTINUE PROCESSING LinkParametersRequest_list of \n", __FUNCTION__); + } + + //------------------------------------------------ + // MIH_C_LINK_STATES_RSP_LIST_T + //------------------------------------------------ + if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_OP_MODE) { + link_states_response_list.val[link_index].choice = 0; + link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; + } else if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_CHANNEL_ID) { + link_states_response_list.val[link_index].choice = 1; + link_states_response_list.val[link_index]._union.channel_id = PREDEFINED_CHANNEL_ID; + } else { + LOG_E(RAL_UE, "%s Invalid LinkStatesRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); + // DEFAULT VALUES + link_states_response_list.val[link_index].choice = 0; + link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; + } + + //------------------------------------------------ + // MIH_C_LINK_DESC_RSP_LIST_T + //------------------------------------------------ + if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_CLASSES_OF_SERVICE_SUPPORTED) { + link_descriptors_response_list.val[link_index].choice = 0; + link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; + } else if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_QUEUES_SUPPORTED) { + link_descriptors_response_list.val[link_index].choice = 1; + link_descriptors_response_list.val[link_index]._union.num_queue = PREDEFINED_QUEUES_SUPPORTED; + } else { + LOG_E(RAL_UE, "%s Invalid LinkDescriptorsRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); + // DEFAULT VALUES + link_descriptors_response_list.val[link_index].choice = 0; + link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; + } + } + link_parameters_status_list.length = messageP->primitive.LinkParametersRequest_list.length; + link_states_response_list.length = messageP->primitive.LinkParametersRequest_list.length; + link_descriptors_response_list.length = messageP->primitive.LinkParametersRequest_list.length; + + + mRAL_send_get_parameters_confirm(instanceP, + &messageP->header.transaction_id, + &status, + &link_parameters_status_list, + &link_states_response_list, + &link_descriptors_response_list); +} diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_process.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_process.c index 4b080f0b58..9d3fa09df8 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_process.c +++ b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_process.c @@ -34,28 +34,16 @@ * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr */ /*******************************************************************************/ -#define MRAL_MODULE +#define LTE_RAL_UE +#define LTERALUE_PROCESS_C #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/socket.h> -#include "lteRALue_variables.h" -#include "lteRALue_proto.h" -#include "MIH_C.h" -#include "lteRALue_mih_msg.h" -#include "lteRALue_mih_execute.h" - -// for real-time -#include "nas_ue_ioctl.h" -#include "nasmt_constant.h" -// for dummy -//#include "nas_ue_netlink.h" - -//global variables -extern int meas_counter; -extern int s_nas; - +//----------------------------------------------------------------------------- +#include "lteRALue.h" +/* //--------------------------------------------------------------------------- // Temp - Enter hard-coded measures in IAL void IAL_NAS_measures_init(void){ @@ -187,7 +175,7 @@ void rallte_NAS_measures_polling(void){ MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - mRALlte_send_link_down_indication(&transaction_id, &link_identifier, NULL, &down_reason_code); + mRAL_send_link_down_indication(&transaction_id, &link_identifier, NULL, &down_reason_code); ralpriv->link_to_be_detected = MIH_C_BOOLEAN_TRUE; // warning may be repeated several times @@ -208,7 +196,7 @@ void rallte_NAS_measures_polling(void){ time_interval = (MIH_C_UNSIGNED_INT2_T)0; // unknown going_down_reason_code = MIH_C_LINK_GOING_DOWN_REASON_LINK_PARAMETER_DEGRADING; // - mRALlte_send_link_going_down_indication(&transaction_id, &link_identifier, &time_interval, &going_down_reason_code); + mRAL_send_link_going_down_indication(&transaction_id, &link_identifier, &time_interval, &going_down_reason_code); } else if ((ralpriv->link_to_be_detected == MIH_C_BOOLEAN_TRUE) && @@ -240,11 +228,11 @@ void rallte_NAS_measures_polling(void){ MIH_C_BIT_NET_CAPS_QOS_CLASS1 | MIH_C_BIT_NET_CAPS_INTERNET_ACCESS; // - mRALlte_send_link_detected_indication(&transaction_id, &link_detected_info); + mRAL_send_link_detected_indication(&transaction_id, &link_detected_info); ralpriv->link_to_be_detected = MIH_C_BOOLEAN_FALSE; } // LG: TO DO CHECK IF INDEX IS 0 - mRALlte_check_thresholds_signal_strength(ralpriv->integrated_meas_level[0], ralpriv->prev_integrated_meas_level[0]); + mRAL_check_thresholds_signal_strength(ralpriv->integrated_meas_level[0], ralpriv->prev_integrated_meas_level[0]); } //--------------------------------------------------------------------------- @@ -291,16 +279,16 @@ void rallte_verifyPendingConnection(void){ if (ralpriv->pending_req_flag > 100){ ralpriv->pending_req_ac_result = MIH_C_LINK_AC_RESULT_FAILURE; } - mRALlte_send_link_action_confirm(&ralpriv->pending_req_transaction_id, &ralpriv->pending_req_status, NULL, &ralpriv->pending_req_ac_result); + mRAL_send_link_action_confirm(&ralpriv->pending_req_transaction_id, &ralpriv->pending_req_status, NULL, &ralpriv->pending_req_ac_result); + + + ////alternative : send linkup + //link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; + //link_identifier.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; + //MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); + //link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; + //mRAL_send_link_up_indication(&ralpriv->pending_req_transaction_id, &link_identifier, NULL, NULL, NULL, NULL); - /* - //alternative : send linkup - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - mRALlte_send_link_up_indication(&ralpriv->pending_req_transaction_id, &link_identifier, NULL, NULL, NULL, NULL); - */ DEBUG("After response, Pending Req Flag = %d, cell_id = %d\n", ralpriv->pending_req_flag, ralpriv->cell_id); ralpriv->pending_req_flag = 0; @@ -309,4 +297,4 @@ void rallte_verifyPendingConnection(void){ //mRALte_send_link_up_indication(); } } -} +}*/ diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_rrc_msg.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_rrc_msg.c new file mode 100755 index 0000000000..d9b8051ee3 --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_rrc_msg.c @@ -0,0 +1,171 @@ +/***************************************************************************** + * Eurecom OpenAirInterface 3 + * Copyright(c) 2012 Eurecom + * + * Source mRAL_subscribe.c + * + * Version 0.1 + * + * Date 11/27/2013 + * + * Product MIH RAL LTE + * + * Subsystem + * + * Authors Lionel Gauthier + * + * Description + * + *****************************************************************************/ +#define LTE_RAL_UE +#define LTE_RAL_UE_RRC_MSG_C +#include "lteRALue.h" + +static int ueid2eui48(u8 *euiP, u8* ue_idP) +{ + // inspired by linux-source-3.2.0/net/ipv6/addrconf.c + memcpy(euiP, ue_idP, 3); + memcpy(euiP + 5, ue_idP + 3, 3); + euiP[3] = 0xFF; + euiP[4] = 0xFE; + euiP[0] ^= 2; + return 0; +} + +//--------------------------------------------------------------------------------------------------------------------- +void mRAL_rx_rrc_ral_system_information_indication(instance_t instanceP, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + MIH_C_LINK_DET_INFO_T link_det_info; + + + // link id + link_det_info.link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; + link_det_info.link_tuple_id.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; + + link_det_info.link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR; + + // preserve byte order of plmn id + memcpy(link_det_info.link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val, &RRC_RAL_SYSTEM_INFORMATION_IND(msg_p).plmn_id, 3); + + link_det_info.link_tuple_id.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; + link_det_info.link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = RRC_RAL_SYSTEM_INFORMATION_IND(msg_p).cell_id; + + + MIH_C_NETWORK_ID_set(&link_det_info.network_id, (u_int8_t *)PREDEFINED_MIH_NETWORK_ID, strlen(PREDEFINED_MIH_NETWORK_ID)); + + MIH_C_NET_AUX_ID_set(&link_det_info.net_aux_id, (u_int8_t *)PREDEFINED_MIH_NETAUX_ID, strlen(PREDEFINED_MIH_NETAUX_ID)); + + link_det_info.sig_strength.choice = MIH_C_SIG_STRENGTH_CHOICE_DBM; + link_det_info.sig_strength._union.dbm = RRC_RAL_SYSTEM_INFORMATION_IND(msg_p).dbm; + + link_det_info.sinr = RRC_RAL_SYSTEM_INFORMATION_IND(msg_p).sinr; + + link_det_info.link_data_rate = RRC_RAL_SYSTEM_INFORMATION_IND(msg_p).link_data_rate; + + link_det_info.link_mihcap_flag = g_ue_ral_obj[instanceP].link_mihcap_flag; + + link_det_info.net_caps = g_ue_ral_obj[instanceP].net_caps; + + mRAL_send_link_detected_indication(instanceP, &g_ue_ral_obj[instanceP].transaction_id, &link_det_info); + + g_ue_ral_obj[instanceP].transaction_id ++; + +} +//--------------------------------------------------------------------------------------------------------------------- +void mRAL_rx_rrc_ral_connection_establishment_indication(instance_t instanceP, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + MIH_C_LINK_TUPLE_ID_T link_tuple_id; + uint8_t ue_id_array[MIH_C_3GPP_ADDR_LENGTH]; + uint8_t mn_link_addr[MIH_C_3GPP_ADDR_LENGTH]; + uint64_t ue_id; //EUI-64 + int i; + + // The LINK_ID contains the MN LINK_ADDR + link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; + link_tuple_id.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_ADDR; + memset(ue_id_array, 0, MIH_C_3GPP_ADDR_LENGTH); +#warning "TO DO FIX UE_ID TYPE in rrc_ral_connection_establishment_ind_t" + ue_id = (uint64_t)RRC_RAL_CONNECTION_ESTABLISHMENT_IND(msg_p).ue_id; + for (i = 0; i < MIH_C_3GPP_ADDR_LENGTH; i++) { + ue_id_array[MIH_C_3GPP_ADDR_LENGTH-1-i] = (ue_id & 0x00000000000000FF); + ue_id = ue_id >> 8; + } + ueid2eui48(mn_link_addr, ue_id_array); + MIH_C_3GPP_ADDR_set(&(link_tuple_id.link_id.link_addr._union._3gpp_addr), NULL, 8); + + //The optional LINK_ADDR may contains a link address of PoA. + link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; + + mRAL_send_link_up_indication(instanceP, &g_ue_ral_obj[instanceP].transaction_id, + &link_tuple_id, + NULL, //MIH_C_LINK_ADDR_T *old_arP,(Optional) Old Access Router link address. + NULL, //MIH_C_LINK_ADDR_T *new_arP,(Optional) New Access Router link address. + NULL, //MIH_C_IP_RENEWAL_FLAG_T *flagP, (Optional) Indicates whether the MN needs to change IP Address in the new PoA. + NULL); //MIH_C_IP_MOB_MGMT_T *mobil_mngtP, (Optional) Indicates the type of Mobility Management Protocol supported by the new PoA. + + g_ue_ral_obj[instanceP].transaction_id ++; + +} +//--------------------------------------------------------------------------------------------------------------------- +void mRAL_rx_rrc_ral_connection_reestablishment_indication(instance_t instanceP, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + MIH_C_LINK_TUPLE_ID_T link_tuple_id; + uint8_t ue_id_array[MIH_C_3GPP_ADDR_LENGTH]; + uint8_t mn_link_addr[MIH_C_3GPP_ADDR_LENGTH]; + uint64_t ue_id; //EUI-64 + int i; + + // The LINK_ID contains the MN LINK_ADDR + link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; + link_tuple_id.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_ADDR; + memset(ue_id_array, 0, MIH_C_3GPP_ADDR_LENGTH); +#warning "TO DO FIX UE_ID TYPE in rrc_ral_connection_establishment_ind_t" + ue_id = (uint64_t)RRC_RAL_CONNECTION_ESTABLISHMENT_IND(msg_p).ue_id; + for (i = 0; i < MIH_C_3GPP_ADDR_LENGTH; i++) { + ue_id_array[MIH_C_3GPP_ADDR_LENGTH-1-i] = (ue_id & 0x00000000000000FF); + ue_id = ue_id >> 8; + } + ueid2eui48(mn_link_addr, ue_id_array); + MIH_C_3GPP_ADDR_set(&(link_tuple_id.link_id.link_addr._union._3gpp_addr), NULL, 8); + + //The optional LINK_ADDR may contains a link address of PoA. + link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; + + LOG_D(RAL_UE, "RRC_RAL_CONNECTION_ESTABLISHMENT_IND num srb %d num drb %d\n", RRC_RAL_CONNECTION_REESTABLISHMENT_IND(msg_p).num_srb,RRC_RAL_CONNECTION_REESTABLISHMENT_IND(msg_p).num_drb); + if ((RRC_RAL_CONNECTION_REESTABLISHMENT_IND(msg_p).num_drb > 0) && (RRC_RAL_CONNECTION_REESTABLISHMENT_IND(msg_p).num_srb > 0)) { + mRAL_send_link_up_indication(instanceP, &g_ue_ral_obj[instanceP].transaction_id, + &link_tuple_id, + NULL, //MIH_C_LINK_ADDR_T *old_arP,(Optional) Old Access Router link address. + NULL, //MIH_C_LINK_ADDR_T *new_arP,(Optional) New Access Router link address. + NULL, //MIH_C_IP_RENEWAL_FLAG_T *flagP, (Optional) Indicates whether the MN needs to change IP Address in the new PoA. + NULL); //MIH_C_IP_MOB_MGMT_T *mobil_mngtP, (Optional) Indicates the type of Mobility Management Protocol supported by the new PoA. + } else { + MIH_C_LINK_DN_REASON_T reason_code = MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT; + + mRAL_send_link_down_indication(instanceP, &g_ue_ral_obj[instanceP].transaction_id, + &link_tuple_id, + NULL, + &reason_code); + } + g_ue_ral_obj[instanceP].transaction_id ++;} +//--------------------------------------------------------------------------------------------------------------------- +void mRAL_rx_rrc_ral_connection_reconfiguration_indication(instance_t instanceP, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + +} +//--------------------------------------------------------------------------------------------------------------------- +void mRAL_rx_rrc_ral_connection_release_indication(instance_t instanceP, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + +} + + + + + + diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_subscribe.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_subscribe.c new file mode 100755 index 0000000000..52b98f474c --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_subscribe.c @@ -0,0 +1,135 @@ +/*************************************************************************** + ltmRALue_subscribe.c - description + *************************************************************************** + Eurecom OpenAirInterface 3 + Copyright(c) 1999 - 2013 Eurecom + + This program is free software; you can redistribute it and/or modify it + under the terms and conditions of the GNU General Public License, + version 2, as published by the Free Software Foundation. + + This program is distributed in the hope it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + + The full GNU General Public License is included in this distribution in + the file called "COPYING". + + Contact Information + Openair Admin: openair_admin@eurecom.fr + Openair Tech : openair_tech@eurecom.fr + Forums : http://forums.eurecom.fsr/openairinterface + Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France +*******************************************************************************/ +/*! \file ltmRALue_subscribe.c + * \brief + * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic + * \date 2013 + * \company EURECOM + * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr + */ +/*******************************************************************************/ +#define LTE_RAL_UE +#define LTERALUE_SUBSCRIBE_C +//----------------------------------------------------------------------------- +#include "lteRALue.h" +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: mRAL_subscribe_request() ** + ** ** + ** Description: Subscribes the MIH-F to receive specified link event ** + ** indications and sends Link Event Subscribe confirmation ** + ** to the MIH-F. ** + ** ** + ** Inputs: msgP: Pointer to the received MIH message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: ralpriv ** + ** ** + ***************************************************************************/ +void mRAL_subscribe_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Event_Subscribe_request_t* msgP) +{ + MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; + /* Check whether the action request is supported */ + if (g_ue_ral_obj[instanceP].mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_SUBSCRIBE) + { + MIH_C_LINK_EVENT_LIST_T mih_subscribed_req_event_list; + + g_ue_ral_obj[instanceP].mih_subscribe_req_event_list |= (msgP->primitive.RequestedLinkEventList & g_ue_ral_obj[instanceP].mih_supported_link_event_list); + + mih_subscribed_req_event_list = g_ue_ral_obj[instanceP].mih_subscribe_req_event_list & msgP->primitive.RequestedLinkEventList; + + status = MIH_C_STATUS_SUCCESS; + + mRAL_send_event_subscribe_confirm(instanceP, &msgP->header.transaction_id, + &status, + &mih_subscribed_req_event_list); + } + else + { + mRAL_send_event_subscribe_confirm(instanceP, &msgP->header.transaction_id, + &status, + NULL); + } +} + +/**************************************************************************** + ** ** + ** Name: mRAL_unsubscribe_request() ** + ** ** + ** Description: Unsubscribes the MIH-F to receive specified link event ** + ** indications and sends Link Event Unsubscribe confirmation ** + ** to the MIH-F. ** + ** ** + ** Inputs: msgP: Pointer to the received MIH message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: ralpriv ** + ** ** + ***************************************************************************/ +void mRAL_unsubscribe_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP) +{ + MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; + /* Check whether the action request is supported */ + if (g_ue_ral_obj[instanceP].mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE) + { + MIH_C_LINK_EVENT_LIST_T mih_unsubscribed_req_event_list; + MIH_C_LINK_EVENT_LIST_T saved_req_event_list; + + saved_req_event_list = g_ue_ral_obj[instanceP].mih_subscribe_req_event_list; + + g_ue_ral_obj[instanceP].mih_subscribe_req_event_list &= ~(msgP->primitive.RequestedLinkEventList & g_ue_ral_obj[instanceP].mih_supported_link_event_list); + mih_unsubscribed_req_event_list = g_ue_ral_obj[instanceP].mih_subscribe_req_event_list ^ saved_req_event_list; + + status = MIH_C_STATUS_SUCCESS; + + mRAL_send_event_unsubscribe_confirm(instanceP, &msgP->header.transaction_id, + &status, + &mih_unsubscribed_req_event_list); + } + else + { + mRAL_send_event_unsubscribe_confirm(instanceP, &msgP->header.transaction_id, + &status, + NULL); + } +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + + diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_thresholds.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_thresholds.c new file mode 100755 index 0000000000..88252c523c --- /dev/null +++ b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_thresholds.c @@ -0,0 +1,176 @@ +/*************************************************************************** + ltmRALue_thresholds.c - description + *************************************************************************** + Eurecom OpenAirInterface 3 + Copyright(c) 1999 - 2013 Eurecom + + This program is free software; you can redistribute it and/or modify it + under the terms and conditions of the GNU General Public License, + version 2, as published by the Free Software Foundation. + + This program is distributed in the hope it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + + The full GNU General Public License is included in this distribution in + the file called "COPYING". + + Contact Information + Openair Admin: openair_admin@eurecom.fr + Openair Tech : openair_tech@eurecom.fr + Forums : http://forums.eurecom.fr/openairinterface + Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France +*******************************************************************************/ +/*! \file ltmRALue_thresholds.c + * \brief + * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic + * \date 2013 + * \company EURECOM + * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr + */ +/*******************************************************************************/ +#define LTE_RAL_UE +#define LTERALUE_THRESHOLDS_C +//----------------------------------------------------------------------------- +#include "lteRALue.h" + + + +/**************************************************************************** + ** ** + ** Name: mRAL_configure_thresholds_request() ** + ** ** + ** Description: Forwards the Link_Configure_Thresholds.request message ** + ** to the RRC layer. ** + ** ** + ** Inputs: msgP: Pointer to the received message ** + ** Others: ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +void mRAL_configure_thresholds_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Configure_Thresholds_request_t* msgP) +{ + unsigned int index; + unsigned int th_index; + rrc_ral_configure_threshold_req_t configure_threshold_req; + MessageDef *message_p; + + message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_CONFIGURE_THRESHOLD_REQ); + + memset(&configure_threshold_req, 0, sizeof(rrc_ral_configure_threshold_req_t)); + + // copy transaction id + configure_threshold_req.transaction_id = msgP->header.transaction_id; + + // configure_threshold_req.num_link_cfg_params = 0; // done + for (index = 0; index < msgP->primitive.LinkConfigureParameterList_list.length; index++) { + // copy link_param_type + configure_threshold_req.link_cfg_params[index].link_param_type.choice = msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type.choice; + switch (configure_threshold_req.link_cfg_params[index].link_param_type.choice) { + case RAL_LINK_PARAM_TYPE_CHOICE_GEN: + memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_gen, + &msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_gen, + sizeof(ral_link_param_gen_t)); + break; + case RAL_LINK_PARAM_TYPE_CHOICE_QOS: + memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_qos, + &msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_qos, + sizeof(ral_link_param_qos_t)); + break; + case RAL_LINK_PARAM_TYPE_CHOICE_LTE: + memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_lte, + &msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_lte, + sizeof(ral_link_param_lte_t)); + break; + default: + assert(1==0); + } + configure_threshold_req.num_link_cfg_params += 1; + + // copy choice + configure_threshold_req.link_cfg_params[index].union_choice = msgP->primitive.LinkConfigureParameterList_list.val[index].choice; + + // copy _union + switch (configure_threshold_req.link_cfg_params[index].union_choice) { + case RAL_LINK_CFG_PARAM_CHOICE_TIMER_NULL: + configure_threshold_req.link_cfg_params[index]._union.null_attr = 0; + break; + case RAL_LINK_CFG_PARAM_CHOICE_TIMER: + configure_threshold_req.link_cfg_params[index]._union.timer_interval = msgP->primitive.LinkConfigureParameterList_list.val[index]._union.timer_interval; + default: + assert(1==0); + } + + // copy th_action + configure_threshold_req.link_cfg_params[index].th_action = msgP->primitive.LinkConfigureParameterList_list.val[index].th_action; + + // configure_threshold_req.link_cfg_params[index].num_thresholds = 0; // done + for (th_index = 0; th_index < msgP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.length;th_index++) { + configure_threshold_req.link_cfg_params[index].thresholds[th_index].threshold_val = msgP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.val[th_index].threshold_val; + configure_threshold_req.link_cfg_params[index].thresholds[th_index].threshold_xdir = msgP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.val[th_index].threshold_xdir; + configure_threshold_req.link_cfg_params[index].num_thresholds += 1; + } + } + + + memcpy (&message_p->ittiMsg, (void *) &configure_threshold_req, sizeof(rrc_ral_configure_threshold_req_t)); + itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); +} + +//--------------------------------------------------------------------------------------------------------------------- +void mRAL_rx_rrc_ral_configure_threshold_conf(ral_ue_instance_t instance, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + MIH_C_STATUS_T status; + // This parameter is not included if Status does not indicate “Success.†+ MIH_C_LINK_CFG_STATUS_LIST_T link_cfg_status_list; + unsigned int i; + + status = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).status; + if (status == RAL_STATUS_SUCCESS) { + link_cfg_status_list.length = 0; + for (i = 0; i < RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).num_link_cfg_params; i++) { + link_cfg_status_list.val[i].link_param_type.choice = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type.choice; + switch (link_cfg_status_list.val[i].link_param_type.choice) { + case RAL_LINK_PARAM_TYPE_CHOICE_GEN: + memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_gen, + &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type._union.link_param_gen, + sizeof(ral_link_param_gen_t)); + break; + case RAL_LINK_PARAM_TYPE_CHOICE_QOS: + memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_qos, + &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type._union.link_param_qos, + sizeof(ral_link_param_qos_t)); + break; + case RAL_LINK_PARAM_TYPE_CHOICE_LTE: + memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_lte, + &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type._union.link_param_lte, + sizeof(ral_link_param_lte_t)); + break; + default: + assert(1==0); + } + link_cfg_status_list.val[i].threshold.threshold_val = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].threshold.threshold_val; + link_cfg_status_list.val[i].threshold.threshold_xdir = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].threshold.threshold_xdir; + link_cfg_status_list.val[i].config_status = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].config_status; + link_cfg_status_list.length += 1; + } + mRAL_send_configure_thresholds_confirm(instance, &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).transaction_id, &status, &link_cfg_status_list); + } else { + mRAL_send_configure_thresholds_confirm(instance, &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).transaction_id, &status, NULL); + } +} +//--------------------------------------------------------------------------------------------------------------------- +void mRAL_rx_rrc_ral_measurement_report_indication(ral_ue_instance_t instance, MessageDef *msg_p) +//--------------------------------------------------------------------------------------------------------------------- +{ + +} diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_mih_msg.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_mih_msg.c index 9e2ee08e94..65be43884c 100644 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_mih_msg.c +++ b/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_mih_msg.c @@ -1241,7 +1241,7 @@ void eRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *tidP, ** Others: g_sockd_mihf ** ** ** ***************************************************************************/ -int eRALlte_mihf_connect(void) +int eRALlte_mihf_connect(ral_enb_instance_t instanceP) { struct addrinfo info; /* endpoint information */ struct addrinfo *addr, *rp; /* endpoint address */ @@ -1259,7 +1259,7 @@ int eRALlte_mihf_connect(void) info.ai_flags = 0; info.ai_protocol = 0; /* Any protocol */ - rc = getaddrinfo(g_mihf_ip_address, g_mihf_remote_port, &info, &addr); + rc = getaddrinfo(g_enb_ral_obj[instanceP].mihf_ip_address, g_enb_ral_obj[instanceP].mihf_remote_port, &info, &addr); if (rc != 0) { ERR(" getaddrinfo: %s\n", gai_strerror(rc)); return -1; @@ -1271,91 +1271,78 @@ int eRALlte_mihf_connect(void) * (or connect(2)) fails, we (close the socket and) try the next address. */ for (rp = addr; rp != NULL; rp = rp->ai_next) { - - g_sockd_mihf = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - if (g_sockd_mihf < 0) { + g_enb_ral_obj[instance].mih_sock_desc = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if (g_enb_ral_obj[instance].mih_sock_desc < 0) { continue; - } + } - optval = 1; - setsockopt(g_sockd_mihf, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); + optval = 1; + setsockopt(g_enb_ral_obj[instance].mih_sock_desc, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); + + // Convert the RAL local network address - /* - * Convert the RAL local network address - */ if (rp->ai_family == AF_INET) { - /* IPv4 network address family */ - struct sockaddr_in *addr4 = NULL; + /* IPv4 network address family */ + struct sockaddr_in *addr4 = NULL; - DEBUG(" %s is an ipv4 address\n", g_mihf_ip_address); + DEBUG(" %s is an ipv4 address\n", g_enb_ral_obj[instanceP].mihf_ip_address); addr4 = (struct sockaddr_in *)(&buf[0]); - addr4->sin_port = htons(atoi(g_ral_listening_port_for_mihf)); + addr4->sin_port = htons(atoi(g_enb_ral_obj[instanceP].ral_listening_port)); addr4->sin_family = AF_INET; - rc = inet_pton(AF_INET, g_ral_ip_address, &addr4->sin_addr); - } - else if (rp->ai_family == AF_INET6) { - /* IPv6 network address family */ - struct sockaddr_in6 *addr6 = NULL; + rc = inet_pton(AF_INET, g_enb_ral_obj[instanceP].ral_ip_address, &addr4->sin_addr); + + } else if (rp->ai_family == AF_INET6) { + /* IPv6 network address family */ + struct sockaddr_in6 *addr6 = NULL; - DEBUG(" %s is an ipv6 address\n", g_mihf_ip_address); + DEBUG(" %s is an ipv6 address\n", g_enb_ral_obj[instanceP].mihf_ip_address); addr6 = (struct sockaddr_in6 *)(&buf[0]); - addr6->sin6_port = htons(atoi(g_ral_listening_port_for_mihf)); + addr6->sin6_port = htons(atoi(g_enb_ral_obj[instanceP].ral_listening_port)); addr6->sin6_family = AF_INET6; - rc = inet_pton(AF_INET, g_ral_ip_address, &addr6->sin6_addr); - } - else { + rc = inet_pton(AF_INET, g_enb_ral_obj[instanceP].ral_ip_address, &addr6->sin6_addr); + } else { ERR(" %s is an unknown address format %d\n", - g_mihf_ip_address, rp->ai_family); - return -1; - } + g_enb_ral_obj[instanceP].mihf_ip_address, rp->ai_family); + return -1; + } - if (rc < 0) { - /* The network address convertion failed */ - ERR(" inet_pton(RAL IP address %s): %s\n", - g_ral_ip_address, strerror(rc)); - return -1; - } - else if (rc == 0) { - /* The network address is not valid */ - ERR(" RAL IP address %s is not valid\n", g_ral_ip_address); - return -1; - } + if (rc < 0) { + // The network address convertion failed + ERR(" inet_pton(RAL IP address %s): %s\n", + g_enb_ral_obj[instanceP].ral_ip_address, strerror(rc)); + return -1; + } else if (rc == 0) { + // The network address is not valid + ERR(" RAL IP address %s is not valid\n", g_enb_ral_obj[instanceP].ral_ip_address); + return -1; + } - /* Bind the socket to the local RAL network address */ - rc = bind(g_sockd_mihf, (const struct sockaddr *)buf, - sizeof(struct sockaddr_in)); + // Bind the socket to the local RAL network address */ + rc = bind(g_enb_ral_obj[instance].mih_sock_desc, (const struct sockaddr *)buf, + sizeof(struct sockaddr_in)); - if (rc < 0) { - ERR(" bind(RAL IP address %s): %s\n", - g_ral_ip_address, strerror(errno)); - return -1; - } + if (rc < 0) { + ERR(" bind(RAL IP address %s): %s\n", g_enb_ral_obj[instanceP].ral_ip_address, strerror(errno)); + return -1; + } - /* Connect the socket to the remote MIH-F network address */ - if (connect(g_sockd_mihf, rp->ai_addr, rp->ai_addrlen) == 0) { - NOTICE(" RAL [%s:%s] is now UDP-CONNECTED to MIH-F [%s:%s]\n", - g_ral_ip_address, g_ral_listening_port_for_mihf, - g_mihf_ip_address, g_mihf_remote_port); - break; - } - /* - * We failed to connect: - * Close the socket file descriptor and try to connect to an other - * address. - */ - close(g_sockd_mihf); + // Connect the socket to the remote MIH-F network address + if (connect(g_enb_ral_obj[instance].mih_sock_desc, rp->ai_addr, rp->ai_addrlen) == 0) { + NOTICE(" RAL [%s:%s] is now UDP-CONNECTED to MIH-F [%s:%s]\n", + g_enb_ral_obj[instanceP].ral_ip_address, g_enb_ral_obj[instanceP].ral_listening_port, + g_enb_ral_obj[instanceP].mihf_ip_address, g_enb_ral_obj[instanceP].mihf_remote_port); + break; + } + // We failed to connect: + // Close the socket file descriptor and try to connect to an other address. + close(g_enb_ral_obj[instanceP].mih_sock_desc); } - - /* - * Unable to connect to a network address - */ + // Unable to connect to a network address if (rp == NULL) { ERR(" Could not connect to MIH-F\n"); return -1; } - freeaddrinfo(addr); - return 0; } -- GitLab