diff --git a/openair2/RRC/LITE/rrc_eNB_ral.c b/openair2/RRC/LITE/rrc_eNB_ral.c
new file mode 100755
index 0000000000000000000000000000000000000000..7085c8fcfa41f2deedc5e997456fc9aa05801f54
--- /dev/null
+++ b/openair2/RRC/LITE/rrc_eNB_ral.c
@@ -0,0 +1,235 @@
+/*******************************************************************************
+
+  Eurecom OpenAirInterface 2
+  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 rrc_eNB_ral.c
+ * \brief rrc procedures for handling RAL messages
+ * \author Lionel GAUTHIER
+ * \date 2013
+ * \version 1.0
+ * \company Eurecom
+ * \email: lionel.gauthier@eurecom.fr
+ */
+#define RRC_ENB
+#define RRC_ENB_RAL_C
+//-----------------------------------------------------------------------------
+#include "rrc_eNB_ral.h"
+#include "assertions.h"
+#include "collection/hashtable/obj_hashtable.h"
+#include "RRC/LITE/defs.h"
+#include "RRC/LITE/extern.h"
+
+
+//-----------------------------------------------------------------------------
+int rrc_enb_ral_delete_all_thresholds_type(unsigned int mod_idP, ral_link_param_type_t *param_type_pP)
+//-----------------------------------------------------------------------------
+{
+    hashtable_rc_t           rc;
+    rrc_ral_threshold_key_t *key;
+    rrc_ral_threshold_key_t *keys = NULL;
+    unsigned int             num_keys = 0;
+    int                      return_code = 0;
+
+    rc =  obj_hashtable_get_keys(eNB_rrc_inst[mod_idP].ral_meas_thresholds, (void*)&keys, &num_keys);
+    if (rc == HASH_TABLE_OK) {
+        key = keys;
+        while (num_keys > 0) {
+            if (memcmp(&key->link_param_type, param_type_pP, sizeof(ral_link_param_type_t)) == 0) {
+                rc = obj_hashtable_remove (eNB_rrc_inst[mod_idP].ral_meas_thresholds, key, sizeof(rrc_ral_threshold_key_t));
+                if (rc != HASH_TABLE_OK) {
+                    return_code = -1;
+                }
+            }
+            key = &key[1];
+            num_keys--;
+        }
+    } else {
+        return_code = -1;
+    }
+
+    if (keys != NULL) {
+        free(keys);
+    }
+    return return_code;
+}
+
+
+//-----------------------------------------------------------------------------
+int rrc_enb_ral_delete_threshold(unsigned int mod_idP, ral_link_param_type_t *param_type_pP, ral_threshold_t *threshold_pP)
+//-----------------------------------------------------------------------------
+{
+    hashtable_rc_t           rc;
+    rrc_ral_threshold_key_t  ref_key;
+
+    memcpy(&ref_key.link_param_type, param_type_pP, sizeof(ral_link_param_type_t));
+    memcpy(&ref_key.threshold,       threshold_pP,  sizeof(ral_threshold_t));
+    rc = obj_hashtable_remove (eNB_rrc_inst[mod_idP].ral_meas_thresholds, (void*)&ref_key, sizeof(rrc_ral_threshold_key_t));
+    if (rc == HASH_TABLE_OK) {
+        return 0;
+    } else {
+        return -1;
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+int rrc_enb_ral_handle_configure_threshold_request(unsigned int mod_idP, MessageDef *msg_pP)
+//-----------------------------------------------------------------------------
+{
+    ral_transaction_id_t               transaction_id            = 0;
+    rrc_ral_configure_threshold_req_t *configure_threshold_req_p = NULL;
+    ral_link_cfg_param_t              *link_cfg_param_p          = NULL;
+    ral_threshold_t                   *threshold_p               = NULL;
+    MessageDef                        *message_p                 = NULL;
+    unsigned int                       ix_param                  = 0;
+    unsigned int                       ix_thresholds             = 0;
+
+    DevAssert(msg_pP != NULL);
+
+    LOG_I(RRC, "[eNB %d] Received %s\n", mod_idP, ITTI_MSG_NAME (msg_pP));
+    configure_threshold_req_p = &RRC_RAL_CONFIGURE_THRESHOLD_REQ(msg_pP);
+
+    transaction_id = configure_threshold_req_p->transaction_id;
+
+    for (ix_param = 0; ix_param < configure_threshold_req_p->num_link_cfg_params; ix_param++) {
+        link_cfg_param_p = &configure_threshold_req_p->link_cfg_params[ix_param];
+
+        switch (link_cfg_param_p->th_action) {
+            case RAL_TH_ACTION_SET_NORMAL_THRESHOLD:
+            case RAL_TH_ACTION_SET_ONE_SHOT_THRESHOLD:
+                switch (link_cfg_param_p->link_param_type.choice) {
+
+                    case RAL_LINK_PARAM_TYPE_CHOICE_GEN:
+                        switch (link_cfg_param_p->link_param_type._union.link_param_gen) {
+                            case RAL_LINK_PARAM_GEN_DATA_RATE:
+                            case RAL_LINK_PARAM_GEN_SIGNAL_STRENGTH:
+                            case RAL_LINK_PARAM_GEN_SINR:
+                            case RAL_LINK_PARAM_GEN_THROUGHPUT:
+                            case RAL_LINK_PARAM_GEN_PACKET_ERROR_RATE:
+                                message_p = itti_alloc_new_message (TASK_RRC_ENB, PHY_MEAS_THRESHOLD_REQ);
+                                PHY_MEAS_THRESHOLD_REQ(message_p).transaction_id  = transaction_id;
+                                memcpy (&PHY_MEAS_THRESHOLD_REQ(message_p).cfg_param, (void *) link_cfg_param_p, sizeof(ral_link_cfg_param_t));
+                                itti_send_msg_to_task (TASK_PHY_ENB, ITTI_MSG_INSTANCE(msg_pP), message_p);
+                                break;
+                            default:
+                                LOG_E(RRC, "Message RRC_RAL_CONFIGURE_THRESHOLD_REQ malformed, unknown link_param_gen %d\n", link_cfg_param_p->link_param_type._union.link_param_gen);
+                                return -1;
+                        }
+                        break;
+
+                    case RAL_LINK_PARAM_TYPE_CHOICE_QOS:
+                        switch (link_cfg_param_p->link_param_type._union.link_param_qos) {
+                            case RAL_LINK_PARAM_QOS_MAX_NUM_DIF_COS_SUPPORTED:
+                            case RAL_LINK_PARAM_QOS_MIN_PACKET_TRANSFER_DELAY_ALL_COS:
+                            case RAL_LINK_PARAM_QOS_AVG_PACKET_TRANSFER_DELAY_ALL_COS:
+                            case RAL_LINK_PARAM_QOS_MAX_PACKET_TRANSFER_DELAY_ALL_COS:
+                            case RAL_LINK_PARAM_QOS_STD_DEVIATION_PACKET_TRANSFER_DELAY:
+                            case RAL_LINK_PARAM_QOS_PACKET_LOSS_RATE_ALL_COS_FRAME_RATIO:
+                                message_p = itti_alloc_new_message (TASK_RRC_ENB, PHY_MEAS_THRESHOLD_REQ);
+                                PHY_MEAS_THRESHOLD_REQ(message_p).transaction_id  = transaction_id;
+                                memcpy (&PHY_MEAS_THRESHOLD_REQ(message_p).cfg_param, (void *) link_cfg_param_p, sizeof(ral_link_cfg_param_t));
+                                itti_send_msg_to_task (TASK_MAC_UE, ITTI_MSG_INSTANCE(msg_pP), message_p);
+                                break;
+                            default:
+                                LOG_E(RRC, "Message RRC_RAL_CONFIGURE_THRESHOLD_REQ malformed, unknown link_param_qos %d\n", link_cfg_param_p->link_param_type._union.link_param_qos);
+                                return -1;
+                        }
+                        break;
+
+                    case RAL_LINK_PARAM_TYPE_CHOICE_LTE:
+                        switch (link_cfg_param_p->link_param_type._union.link_param_lte) {
+                            // group by dest task id
+                            case RAL_LINK_PARAM_LTE_UE_RSRP:
+                            case RAL_LINK_PARAM_LTE_UE_RSRQ:
+                            case RAL_LINK_PARAM_LTE_UE_CQI:
+                                message_p = itti_alloc_new_message (TASK_RRC_ENB, PHY_MEAS_THRESHOLD_REQ);
+                                PHY_MEAS_THRESHOLD_REQ(message_p).transaction_id  = transaction_id;
+                                memcpy (&PHY_MEAS_THRESHOLD_REQ(message_p).cfg_param, (void *) link_cfg_param_p, sizeof(ral_link_cfg_param_t));
+                                itti_send_msg_to_task (TASK_PHY_UE, ITTI_MSG_INSTANCE(msg_pP), message_p);
+                                break;
+
+                            case RAL_LINK_PARAM_LTE_AVAILABLE_BW:
+                            case RAL_LINK_PARAM_LTE_PACKET_LOSS_RATE:
+                            case RAL_LINK_PARAM_LTE_L2_BUFFER_STATUS:
+                            case RAL_LINK_PARAM_LTE_PACKET_DELAY:
+                                message_p = itti_alloc_new_message (TASK_RRC_ENB, PHY_MEAS_THRESHOLD_REQ);
+                                PHY_MEAS_THRESHOLD_REQ(message_p).transaction_id  = transaction_id;
+                                memcpy (&PHY_MEAS_THRESHOLD_REQ(message_p).cfg_param, (void *) link_cfg_param_p, sizeof(ral_link_cfg_param_t));
+                                itti_send_msg_to_task (TASK_MAC_UE, ITTI_MSG_INSTANCE(msg_pP), message_p);
+                                break;
+                                break;
+
+                            case RAL_LINK_PARAM_LTE_MOBILE_NODE_CAPABILITIES:
+                            case RAL_LINK_PARAM_LTE_EMBMS_CAPABILITY:
+                            case RAL_LINK_PARAM_LTE_JUMBO_FEASIBILITY:
+                            case RAL_LINK_PARAM_LTE_JUMBO_SETUP_STATUS:
+                            case RAL_LINK_PARAM_LTE_NUM_ACTIVE_EMBMS_RECEIVERS_PER_FLOW:
+#warning "TO DO MIH LTE LINK PARAMS IN RRC ENB"
+                                break;
+
+                            default:
+                                LOG_E(RRC, "Message RRC_RAL_CONFIGURE_THRESHOLD_REQ malformed, unknown link_param_lte %d\n", link_cfg_param_p->link_param_type._union.link_param_lte);
+                                return -1;
+                        }
+                        break;
+
+                    default:
+                        LOG_E(RRC, "Message RRC_RAL_CONFIGURE_THRESHOLD_REQ malformed, unknown link_param_type choice %d\n", link_cfg_param_p->link_param_type.choice);
+                        return -1;
+                }
+
+                for (ix_thresholds=0; ix_thresholds < link_cfg_param_p->num_thresholds; ix_thresholds++) {
+                    threshold_p = &link_cfg_param_p->thresholds[ix_thresholds];
+                }
+                break;
+            case RAL_TH_ACTION_CANCEL_THRESHOLD:
+                // IEEE Std 802.21-2008, Table F4, Data type name=LINK_CFG_PARAM (page 228):
+                // When “Cancel threshold” is selected and no thresholds are specified, then all
+                // currently configured thresholds for the given LINK_PARAM_TYPE are cancelled.
+                if (link_cfg_param_p->num_thresholds == 0) {
+                    rrc_enb_ral_delete_all_thresholds_type(mod_idP, &link_cfg_param_p->link_param_type);
+                } else {
+                //
+                // When “Cancel threshold” is selected and thresholds are specified only those
+                // configured thresholds for the given LINK_PARAM_TYPE and whose threshold value match what was
+                // specified are cancelled.
+                    for (ix_thresholds=0; ix_thresholds < link_cfg_param_p->num_thresholds; ix_thresholds++) {
+                        threshold_p = &link_cfg_param_p->thresholds[ix_thresholds];
+                        rrc_enb_ral_delete_threshold(mod_idP, &link_cfg_param_p->link_param_type, threshold_p);
+                    }
+                }
+                break;
+            default:
+                LOG_E(RRC, "Message RRC_RAL_CONFIGURE_THRESHOLD_REQ malformed, unknown th_action %d\n", link_cfg_param_p->th_action);
+                return -1;
+        }
+    }
+    return 0;
+}
+
diff --git a/openair2/RRC/LITE/rrc_eNB_ral.h b/openair2/RRC/LITE/rrc_eNB_ral.h
new file mode 100755
index 0000000000000000000000000000000000000000..1da4834e40a417c419e57a0b48787a61cd0021ec
--- /dev/null
+++ b/openair2/RRC/LITE/rrc_eNB_ral.h
@@ -0,0 +1,75 @@
+/*******************************************************************************
+
+  Eurecom OpenAirInterface 2
+  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 rrc_eNB_ral.h
+ * \brief rrc procedures for handling RAL messages
+ * \author Lionel GAUTHIER
+ * \date 2013
+ * \version 1.0
+ * \company Eurecom
+ * \email: lionel.gauthier@eurecom.fr
+ */
+#ifndef __RRC_ENB_RAL_H__
+#    define __RRC_ENB_RAL_H__
+//-----------------------------------------------------------------------------
+#        ifdef RRC_ENB_RAL_C
+#            define private_rrc_enb_ral(x)    x
+#            define protected_rrc_enb_ral(x)  x
+#            define public_rrc_enb_ral(x)     x
+#        else
+#            ifdef RRC_ENB
+#                define private_rrc_enb_ral(x)
+#                define protected_rrc_enb_ral(x)  extern x
+#                define public_rrc_enb_ral(x)     extern x
+#            else
+#                define private_rrc_enb_ral(x)
+#                define protected_rrc_enb_ral(x)
+#                define public_rrc_enb_ral(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 <ctype.h>
+//-----------------------------------------------------------------------------
+#include "intertask_interface.h"
+#include "ral_messages_types.h"
+#include "defs.h"
+
+
+private_rrc_enb_ral(  int rrc_enb_ral_delete_all_thresholds_type        (unsigned int mod_idP, ral_link_param_type_t *param_type_pP);)
+private_rrc_enb_ral(  int rrc_enb_ral_delete_threshold                  (unsigned int mod_idP, ral_link_param_type_t *param_type_pP, ral_threshold_t *threshold_pP);)
+protected_rrc_enb_ral(int rrc_enb_ral_handle_configure_threshold_request(unsigned int mod_idP, MessageDef *msg_pP);)
+
+#endif