Add generated code for RUA using eurecom asn1tostruct.py
diff --git a/asn1/rua/eurecom/rua_decoder.c b/asn1/rua/eurecom/rua_decoder.c
new file mode 100644
index 0000000..521ecab
--- /dev/null
+++ b/asn1/rua/eurecom/rua_decoder.c
@@ -0,0 +1,390 @@
+/*******************************************************************************
+
+  Eurecom OpenAirInterface
+  Copyright(c) 1999 - 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.fr/openairinterface
+  Address      : EURECOM, Campus SophiaTech, 450 Route des Chappes
+                 06410 Biot FRANCE
+
+*******************************************************************************/
+
+/*******************************************************************************
+ * This file had been created by asn1tostruct.py script v0.5
+ * Please do not modify this file but regenerate it via script.
+ * Created on: 2015-08-29 14:31:31.109013 by laforge
+ * from ['../RUA-CommonDataTypes.asn', '../RUA-Constants.asn', '../RUA-Containers.asn', '../RUA-IEs.asn', '../RUA-PDU-Contents.asn', '../RUA-PDU-Descriptions.asn']
+ ******************************************************************************/
+#include "rua_common.h"
+#include "rua_ies_defs.h"
+
+int rua_decode_connecties(
+    ConnectIEs_t *connectIEs,
+    ANY_t *any_p) {
+
+    Connect_t  connect;
+    Connect_t *connect_p = &connect;
+    int i, decoded = 0;
+    int tempDecoded = 0;
+    assert(any_p != NULL);
+    assert(connectIEs != NULL);
+
+    RUA_DEBUG("Decoding message ConnectIEs (%s:%d)\n", __FILE__, __LINE__);
+
+    ANY_to_type_aper(any_p, &asn_DEF_Connect, (void**)&connect_p);
+
+    for (i = 0; i < connect_p->connect_ies.list.count; i++) {
+        IE_t *ie_p;
+        ie_p = connect_p->connect_ies.list.array[i];
+        switch(ie_p->id) {
+            case ProtocolIE_ID_id_CN_DomainIndicator:
+            {
+                CN_DomainIndicator_t  cnDomainIndicator;
+                CN_DomainIndicator_t *cnDomainIndicator_p = &cnDomainIndicator;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_CN_DomainIndicator, (void**)&cnDomainIndicator_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE cN_DomainIndicator failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_CN_DomainIndicator, cnDomainIndicator_p);
+                memcpy(&connectIEs->cN_DomainIndicator, cnDomainIndicator_p, sizeof(CN_DomainIndicator_t));
+            } break;
+            case ProtocolIE_ID_id_Context_ID:
+            {
+                Context_ID_t  contextID;
+                Context_ID_t *contextID_p = &contextID;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Context_ID, (void**)&contextID_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE context_ID failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_Context_ID, contextID_p);
+                memcpy(&connectIEs->context_ID, contextID_p, sizeof(Context_ID_t));
+            } break;
+            /* Optional field */
+            case ProtocolIE_ID_id_IntraDomainNasNodeSelector:
+            {
+                IntraDomainNasNodeSelector_t  intraDomainNasNodeSelector;
+                IntraDomainNasNodeSelector_t *intraDomainNasNodeSelector_p = &intraDomainNasNodeSelector;
+                connectIEs->presenceMask |= CONNECTIES_INTRADOMAINNASNODESELECTOR_PRESENT;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_IntraDomainNasNodeSelector, (void**)&intraDomainNasNodeSelector_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE intraDomainNasNodeSelector failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_IntraDomainNasNodeSelector, intraDomainNasNodeSelector_p);
+                memcpy(&connectIEs->intraDomainNasNodeSelector, intraDomainNasNodeSelector_p, sizeof(IntraDomainNasNodeSelector_t));
+            } break;
+            case ProtocolIE_ID_id_Establishment_Cause:
+            {
+                Establishment_Cause_t  establishmentCause;
+                Establishment_Cause_t *establishmentCause_p = &establishmentCause;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Establishment_Cause, (void**)&establishmentCause_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE establishment_Cause failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_Establishment_Cause, establishmentCause_p);
+                memcpy(&connectIEs->establishment_Cause, establishmentCause_p, sizeof(Establishment_Cause_t));
+            } break;
+            case ProtocolIE_ID_id_RANAP_Message:
+            {
+                RANAP_Message_t  ranapMessage;
+                RANAP_Message_t *ranapMessage_p = &ranapMessage;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_RANAP_Message, (void**)&ranapMessage_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE ranaP_Message failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_RANAP_Message, ranapMessage_p);
+                memcpy(&connectIEs->ranaP_Message, ranapMessage_p, sizeof(RANAP_Message_t));
+            } break;
+            default:
+                RUA_DEBUG("Unknown protocol IE id (%d) for message connecties\n", (int)ie_p->id);
+                return -1;
+        }
+    }
+    return decoded;
+}
+
+int rua_decode_disconnecties(
+    DisconnectIEs_t *disconnectIEs,
+    ANY_t *any_p) {
+
+    Disconnect_t  disconnect;
+    Disconnect_t *disconnect_p = &disconnect;
+    int i, decoded = 0;
+    int tempDecoded = 0;
+    assert(any_p != NULL);
+    assert(disconnectIEs != NULL);
+
+    RUA_DEBUG("Decoding message DisconnectIEs (%s:%d)\n", __FILE__, __LINE__);
+
+    ANY_to_type_aper(any_p, &asn_DEF_Disconnect, (void**)&disconnect_p);
+
+    for (i = 0; i < disconnect_p->disconnect_ies.list.count; i++) {
+        IE_t *ie_p;
+        ie_p = disconnect_p->disconnect_ies.list.array[i];
+        switch(ie_p->id) {
+            case ProtocolIE_ID_id_CN_DomainIndicator:
+            {
+                CN_DomainIndicator_t  cnDomainIndicator;
+                CN_DomainIndicator_t *cnDomainIndicator_p = &cnDomainIndicator;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_CN_DomainIndicator, (void**)&cnDomainIndicator_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE cN_DomainIndicator failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_CN_DomainIndicator, cnDomainIndicator_p);
+                memcpy(&disconnectIEs->cN_DomainIndicator, cnDomainIndicator_p, sizeof(CN_DomainIndicator_t));
+            } break;
+            case ProtocolIE_ID_id_Context_ID:
+            {
+                Context_ID_t  contextID;
+                Context_ID_t *contextID_p = &contextID;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Context_ID, (void**)&contextID_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE context_ID failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_Context_ID, contextID_p);
+                memcpy(&disconnectIEs->context_ID, contextID_p, sizeof(Context_ID_t));
+            } break;
+            case ProtocolIE_ID_id_Cause:
+            {
+                Cause_t  cause;
+                Cause_t *cause_p = &cause;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Cause, (void**)&cause_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE cause failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_Cause, cause_p);
+                memcpy(&disconnectIEs->cause, cause_p, sizeof(Cause_t));
+            } break;
+            /* Conditional field */
+            case ProtocolIE_ID_id_RANAP_Message:
+            {
+                RANAP_Message_t  ranapMessage;
+                RANAP_Message_t *ranapMessage_p = &ranapMessage;
+                disconnectIEs->presenceMask |= DISCONNECTIES_RANAP_MESSAGE_PRESENT;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_RANAP_Message, (void**)&ranapMessage_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE ranaP_Message failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_RANAP_Message, ranapMessage_p);
+                memcpy(&disconnectIEs->ranaP_Message, ranapMessage_p, sizeof(RANAP_Message_t));
+            } break;
+            default:
+                RUA_DEBUG("Unknown protocol IE id (%d) for message disconnecties\n", (int)ie_p->id);
+                return -1;
+        }
+    }
+    return decoded;
+}
+
+int rua_decode_errorindicationies(
+    ErrorIndicationIEs_t *errorIndicationIEs,
+    ANY_t *any_p) {
+
+    ErrorIndication_t  errorIndication;
+    ErrorIndication_t *errorIndication_p = &errorIndication;
+    int i, decoded = 0;
+    int tempDecoded = 0;
+    assert(any_p != NULL);
+    assert(errorIndicationIEs != NULL);
+
+    RUA_DEBUG("Decoding message ErrorIndicationIEs (%s:%d)\n", __FILE__, __LINE__);
+
+    ANY_to_type_aper(any_p, &asn_DEF_ErrorIndication, (void**)&errorIndication_p);
+
+    for (i = 0; i < errorIndication_p->errorIndication_ies.list.count; i++) {
+        IE_t *ie_p;
+        ie_p = errorIndication_p->errorIndication_ies.list.array[i];
+        switch(ie_p->id) {
+            case ProtocolIE_ID_id_Cause:
+            {
+                Cause_t  cause;
+                Cause_t *cause_p = &cause;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Cause, (void**)&cause_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE cause failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_Cause, cause_p);
+                memcpy(&errorIndicationIEs->cause, cause_p, sizeof(Cause_t));
+            } break;
+            /* Optional field */
+            case ProtocolIE_ID_id_CriticalityDiagnostics:
+            {
+                CriticalityDiagnostics_t  criticalityDiagnostics;
+                CriticalityDiagnostics_t *criticalityDiagnostics_p = &criticalityDiagnostics;
+                errorIndicationIEs->presenceMask |= ERRORINDICATIONIES_CRITICALITYDIAGNOSTICS_PRESENT;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_CriticalityDiagnostics, (void**)&criticalityDiagnostics_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE criticalityDiagnostics failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_CriticalityDiagnostics, criticalityDiagnostics_p);
+                memcpy(&errorIndicationIEs->criticalityDiagnostics, criticalityDiagnostics_p, sizeof(CriticalityDiagnostics_t));
+            } break;
+            default:
+                RUA_DEBUG("Unknown protocol IE id (%d) for message errorindicationies\n", (int)ie_p->id);
+                return -1;
+        }
+    }
+    return decoded;
+}
+
+int rua_decode_connectionlesstransferies(
+    ConnectionlessTransferIEs_t *connectionlessTransferIEs,
+    ANY_t *any_p) {
+
+    ConnectionlessTransfer_t  connectionlessTransfer;
+    ConnectionlessTransfer_t *connectionlessTransfer_p = &connectionlessTransfer;
+    int i, decoded = 0;
+    int tempDecoded = 0;
+    assert(any_p != NULL);
+    assert(connectionlessTransferIEs != NULL);
+
+    RUA_DEBUG("Decoding message ConnectionlessTransferIEs (%s:%d)\n", __FILE__, __LINE__);
+
+    ANY_to_type_aper(any_p, &asn_DEF_ConnectionlessTransfer, (void**)&connectionlessTransfer_p);
+
+    for (i = 0; i < connectionlessTransfer_p->connectionlessTransfer_ies.list.count; i++) {
+        IE_t *ie_p;
+        ie_p = connectionlessTransfer_p->connectionlessTransfer_ies.list.array[i];
+        switch(ie_p->id) {
+            case ProtocolIE_ID_id_RANAP_Message:
+            {
+                RANAP_Message_t  ranapMessage;
+                RANAP_Message_t *ranapMessage_p = &ranapMessage;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_RANAP_Message, (void**)&ranapMessage_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE ranaP_Message failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_RANAP_Message, ranapMessage_p);
+                memcpy(&connectionlessTransferIEs->ranaP_Message, ranapMessage_p, sizeof(RANAP_Message_t));
+            } break;
+            default:
+                RUA_DEBUG("Unknown protocol IE id (%d) for message connectionlesstransferies\n", (int)ie_p->id);
+                return -1;
+        }
+    }
+    return decoded;
+}
+
+int rua_decode_directtransferies(
+    DirectTransferIEs_t *directTransferIEs,
+    ANY_t *any_p) {
+
+    DirectTransfer_t  directTransfer;
+    DirectTransfer_t *directTransfer_p = &directTransfer;
+    int i, decoded = 0;
+    int tempDecoded = 0;
+    assert(any_p != NULL);
+    assert(directTransferIEs != NULL);
+
+    RUA_DEBUG("Decoding message DirectTransferIEs (%s:%d)\n", __FILE__, __LINE__);
+
+    ANY_to_type_aper(any_p, &asn_DEF_DirectTransfer, (void**)&directTransfer_p);
+
+    for (i = 0; i < directTransfer_p->directTransfer_ies.list.count; i++) {
+        IE_t *ie_p;
+        ie_p = directTransfer_p->directTransfer_ies.list.array[i];
+        switch(ie_p->id) {
+            case ProtocolIE_ID_id_CN_DomainIndicator:
+            {
+                CN_DomainIndicator_t  cnDomainIndicator;
+                CN_DomainIndicator_t *cnDomainIndicator_p = &cnDomainIndicator;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_CN_DomainIndicator, (void**)&cnDomainIndicator_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE cN_DomainIndicator failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_CN_DomainIndicator, cnDomainIndicator_p);
+                memcpy(&directTransferIEs->cN_DomainIndicator, cnDomainIndicator_p, sizeof(CN_DomainIndicator_t));
+            } break;
+            case ProtocolIE_ID_id_Context_ID:
+            {
+                Context_ID_t  contextID;
+                Context_ID_t *contextID_p = &contextID;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Context_ID, (void**)&contextID_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE context_ID failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_Context_ID, contextID_p);
+                memcpy(&directTransferIEs->context_ID, contextID_p, sizeof(Context_ID_t));
+            } break;
+            case ProtocolIE_ID_id_RANAP_Message:
+            {
+                RANAP_Message_t  ranapMessage;
+                RANAP_Message_t *ranapMessage_p = &ranapMessage;
+                tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_RANAP_Message, (void**)&ranapMessage_p);
+                if (tempDecoded < 0) {
+                    RUA_DEBUG("Decoding of IE ranaP_Message failed\n");
+                    return -1;
+                }
+                decoded += tempDecoded;
+                if (asn1_xer_print)
+                    xer_fprint(stdout, &asn_DEF_RANAP_Message, ranapMessage_p);
+                memcpy(&directTransferIEs->ranaP_Message, ranapMessage_p, sizeof(RANAP_Message_t));
+            } break;
+            default:
+                RUA_DEBUG("Unknown protocol IE id (%d) for message directtransferies\n", (int)ie_p->id);
+                return -1;
+        }
+    }
+    return decoded;
+}
+
diff --git a/asn1/rua/eurecom/rua_encoder.c b/asn1/rua/eurecom/rua_encoder.c
new file mode 100644
index 0000000..56d0f33
--- /dev/null
+++ b/asn1/rua/eurecom/rua_encoder.c
@@ -0,0 +1,216 @@
+/*******************************************************************************
+
+  Eurecom OpenAirInterface
+  Copyright(c) 1999 - 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.fr/openairinterface
+  Address      : EURECOM, Campus SophiaTech, 450 Route des Chappes
+                 06410 Biot FRANCE
+
+*******************************************************************************/
+
+/*******************************************************************************
+ * This file had been created by asn1tostruct.py script v0.5
+ * Please do not modify this file but regenerate it via script.
+ * Created on: 2015-08-29 14:31:31.110934 by laforge
+ * from ['../RUA-CommonDataTypes.asn', '../RUA-Constants.asn', '../RUA-Containers.asn', '../RUA-IEs.asn', '../RUA-PDU-Contents.asn', '../RUA-PDU-Descriptions.asn']
+ ******************************************************************************/
+#include "rua_common.h"
+#include "rua_ies_defs.h"
+
+int rua_encode_connecties(
+    Connect_t *connect,
+    ConnectIEs_t *connectIEs) {
+
+    IE_t *ie;
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_CN_DomainIndicator,
+                          Criticality_reject,
+                          &asn_DEF_CN_DomainIndicator,
+                          &connectIEs->cN_DomainIndicator)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&connect->connect_ies.list, ie);
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_Context_ID,
+                          Criticality_reject,
+                          &asn_DEF_Context_ID,
+                          &connectIEs->context_ID)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&connect->connect_ies.list, ie);
+
+    /* Optional field */
+    if ((connectIEs->presenceMask & CONNECTIES_INTRADOMAINNASNODESELECTOR_PRESENT)
+        == CONNECTIES_INTRADOMAINNASNODESELECTOR_PRESENT) {
+        if ((ie = rua_new_ie(ProtocolIE_ID_id_IntraDomainNasNodeSelector,
+                              Criticality_ignore,
+                              &asn_DEF_IntraDomainNasNodeSelector,
+                              &connectIEs->intraDomainNasNodeSelector)) == NULL) {
+            return -1;
+        }
+        ASN_SEQUENCE_ADD(&connect->connect_ies.list, ie);
+    }
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_Establishment_Cause,
+                          Criticality_reject,
+                          &asn_DEF_Establishment_Cause,
+                          &connectIEs->establishment_Cause)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&connect->connect_ies.list, ie);
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_RANAP_Message,
+                          Criticality_reject,
+                          &asn_DEF_RANAP_Message,
+                          &connectIEs->ranaP_Message)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&connect->connect_ies.list, ie);
+
+    return 0;
+}
+
+int rua_encode_disconnecties(
+    Disconnect_t *disconnect,
+    DisconnectIEs_t *disconnectIEs) {
+
+    IE_t *ie;
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_CN_DomainIndicator,
+                          Criticality_reject,
+                          &asn_DEF_CN_DomainIndicator,
+                          &disconnectIEs->cN_DomainIndicator)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&disconnect->disconnect_ies.list, ie);
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_Context_ID,
+                          Criticality_reject,
+                          &asn_DEF_Context_ID,
+                          &disconnectIEs->context_ID)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&disconnect->disconnect_ies.list, ie);
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_Cause,
+                          Criticality_reject,
+                          &asn_DEF_Cause,
+                          &disconnectIEs->cause)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&disconnect->disconnect_ies.list, ie);
+
+    /* Conditional field */
+    if ((disconnectIEs->presenceMask & DISCONNECTIES_RANAP_MESSAGE_PRESENT)
+        == DISCONNECTIES_RANAP_MESSAGE_PRESENT) {
+        if ((ie = rua_new_ie(ProtocolIE_ID_id_RANAP_Message,
+                              Criticality_reject,
+                              &asn_DEF_RANAP_Message,
+                              &disconnectIEs->ranaP_Message)) == NULL) {
+            return -1;
+        }
+        ASN_SEQUENCE_ADD(&disconnect->disconnect_ies.list, ie);
+    }
+
+    return 0;
+}
+
+int rua_encode_errorindicationies(
+    ErrorIndication_t *errorIndication,
+    ErrorIndicationIEs_t *errorIndicationIEs) {
+
+    IE_t *ie;
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_Cause,
+                          Criticality_ignore,
+                          &asn_DEF_Cause,
+                          &errorIndicationIEs->cause)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&errorIndication->errorIndication_ies.list, ie);
+
+    /* Optional field */
+    if ((errorIndicationIEs->presenceMask & ERRORINDICATIONIES_CRITICALITYDIAGNOSTICS_PRESENT)
+        == ERRORINDICATIONIES_CRITICALITYDIAGNOSTICS_PRESENT) {
+        if ((ie = rua_new_ie(ProtocolIE_ID_id_CriticalityDiagnostics,
+                              Criticality_ignore,
+                              &asn_DEF_CriticalityDiagnostics,
+                              &errorIndicationIEs->criticalityDiagnostics)) == NULL) {
+            return -1;
+        }
+        ASN_SEQUENCE_ADD(&errorIndication->errorIndication_ies.list, ie);
+    }
+
+    return 0;
+}
+
+int rua_encode_connectionlesstransferies(
+    ConnectionlessTransfer_t *connectionlessTransfer,
+    ConnectionlessTransferIEs_t *connectionlessTransferIEs) {
+
+    IE_t *ie;
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_RANAP_Message,
+                          Criticality_reject,
+                          &asn_DEF_RANAP_Message,
+                          &connectionlessTransferIEs->ranaP_Message)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&connectionlessTransfer->connectionlessTransfer_ies.list, ie);
+
+    return 0;
+}
+
+int rua_encode_directtransferies(
+    DirectTransfer_t *directTransfer,
+    DirectTransferIEs_t *directTransferIEs) {
+
+    IE_t *ie;
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_CN_DomainIndicator,
+                          Criticality_reject,
+                          &asn_DEF_CN_DomainIndicator,
+                          &directTransferIEs->cN_DomainIndicator)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&directTransfer->directTransfer_ies.list, ie);
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_Context_ID,
+                          Criticality_reject,
+                          &asn_DEF_Context_ID,
+                          &directTransferIEs->context_ID)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&directTransfer->directTransfer_ies.list, ie);
+
+    if ((ie = rua_new_ie(ProtocolIE_ID_id_RANAP_Message,
+                          Criticality_reject,
+                          &asn_DEF_RANAP_Message,
+                          &directTransferIEs->ranaP_Message)) == NULL) {
+        return -1;
+    }
+    ASN_SEQUENCE_ADD(&directTransfer->directTransfer_ies.list, ie);
+
+    return 0;
+}
+
diff --git a/asn1/rua/eurecom/rua_ies_defs.h b/asn1/rua/eurecom/rua_ies_defs.h
new file mode 100644
index 0000000..da5fc6f
--- /dev/null
+++ b/asn1/rua/eurecom/rua_ies_defs.h
@@ -0,0 +1,175 @@
+/*******************************************************************************
+
+  Eurecom OpenAirInterface
+  Copyright(c) 1999 - 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.fr/openairinterface
+  Address      : EURECOM, Campus SophiaTech, 450 Route des Chappes
+                 06410 Biot FRANCE
+
+*******************************************************************************/
+
+/*******************************************************************************
+ * This file had been created by asn1tostruct.py script v0.5
+ * Please do not modify this file but regenerate it via script.
+ * Created on: 2015-08-29 14:31:31.107080 by laforge
+ * from ['../RUA-CommonDataTypes.asn', '../RUA-Constants.asn', '../RUA-Containers.asn', '../RUA-IEs.asn', '../RUA-PDU-Contents.asn', '../RUA-PDU-Descriptions.asn']
+ ******************************************************************************/
+#include "rua_common.h"
+
+#ifndef RUA_IES_DEFS_H_
+#define RUA_IES_DEFS_H_
+
+#define CONNECTIES_INTRADOMAINNASNODESELECTOR_PRESENT (1 << 0)
+
+typedef struct ConnectIEs_s {
+    uint16_t                     presenceMask;
+    CN_DomainIndicator_t         cN_DomainIndicator;
+    Context_ID_t                 context_ID;
+    IntraDomainNasNodeSelector_t intraDomainNasNodeSelector; ///< Optional field
+    Establishment_Cause_t        establishment_Cause;
+    RANAP_Message_t              ranaP_Message;
+} ConnectIEs_t;
+
+#define DISCONNECTIES_RANAP_MESSAGE_PRESENT      (1 << 0)
+
+typedef struct DisconnectIEs_s {
+    uint16_t             presenceMask;
+    CN_DomainIndicator_t cN_DomainIndicator;
+    Context_ID_t         context_ID;
+    Cause_t              cause;
+    RANAP_Message_t      ranaP_Message; ///< Conditional field
+} DisconnectIEs_t;
+
+#define ERRORINDICATIONIES_CRITICALITYDIAGNOSTICS_PRESENT (1 << 0)
+
+typedef struct ErrorIndicationIEs_s {
+    uint16_t                 presenceMask;
+    Cause_t                  cause;
+    CriticalityDiagnostics_t criticalityDiagnostics; ///< Optional field
+} ErrorIndicationIEs_t;
+
+typedef struct ConnectionlessTransferIEs_s {
+    RANAP_Message_t ranaP_Message;
+} ConnectionlessTransferIEs_t;
+
+typedef struct DirectTransferIEs_s {
+    CN_DomainIndicator_t cN_DomainIndicator;
+    Context_ID_t         context_ID;
+    RANAP_Message_t      ranaP_Message;
+} DirectTransferIEs_t;
+
+typedef struct rua_message_s {
+    uint8_t procedureCode;
+    uint8_t criticality;
+    uint8_t direction;
+    union {
+        ConnectIEs_t connectIEs;
+        ConnectionlessTransferIEs_t connectionlessTransferIEs;
+        DirectTransferIEs_t directTransferIEs;
+        DisconnectIEs_t disconnectIEs;
+        ErrorIndicationIEs_t errorIndicationIEs;
+    } msg;
+} rua_message;
+
+/** \brief Decode function for ConnectIEs ies.
+ * \param connectIEs Pointer to ASN1 structure in which data will be stored
+ *  \param any_p Pointer to the ANY value to decode.
+ **/
+int rua_decode_connecties(
+    ConnectIEs_t *connectIEs,
+    ANY_t *any_p);
+
+/** \brief Encode function for ConnectIEs ies.
+ *  \param connect Pointer to the ASN1 structure.
+ *  \param connectIEs Pointer to the IES structure.
+ **/
+int rua_encode_connecties(
+    Connect_t *connect,
+    ConnectIEs_t *connectIEs);
+
+/** \brief Decode function for DisconnectIEs ies.
+ * \param disconnectIEs Pointer to ASN1 structure in which data will be stored
+ *  \param any_p Pointer to the ANY value to decode.
+ **/
+int rua_decode_disconnecties(
+    DisconnectIEs_t *disconnectIEs,
+    ANY_t *any_p);
+
+/** \brief Encode function for DisconnectIEs ies.
+ *  \param disconnect Pointer to the ASN1 structure.
+ *  \param disconnectIEs Pointer to the IES structure.
+ **/
+int rua_encode_disconnecties(
+    Disconnect_t *disconnect,
+    DisconnectIEs_t *disconnectIEs);
+
+/** \brief Decode function for ErrorIndicationIEs ies.
+ * \param errorIndicationIEs Pointer to ASN1 structure in which data will be stored
+ *  \param any_p Pointer to the ANY value to decode.
+ **/
+int rua_decode_errorindicationies(
+    ErrorIndicationIEs_t *errorIndicationIEs,
+    ANY_t *any_p);
+
+/** \brief Encode function for ErrorIndicationIEs ies.
+ *  \param errorIndication Pointer to the ASN1 structure.
+ *  \param errorIndicationIEs Pointer to the IES structure.
+ **/
+int rua_encode_errorindicationies(
+    ErrorIndication_t *errorIndication,
+    ErrorIndicationIEs_t *errorIndicationIEs);
+
+/** \brief Decode function for ConnectionlessTransferIEs ies.
+ * \param connectionlessTransferIEs Pointer to ASN1 structure in which data will be stored
+ *  \param any_p Pointer to the ANY value to decode.
+ **/
+int rua_decode_connectionlesstransferies(
+    ConnectionlessTransferIEs_t *connectionlessTransferIEs,
+    ANY_t *any_p);
+
+/** \brief Encode function for ConnectionlessTransferIEs ies.
+ *  \param connectionlessTransfer Pointer to the ASN1 structure.
+ *  \param connectionlessTransferIEs Pointer to the IES structure.
+ **/
+int rua_encode_connectionlesstransferies(
+    ConnectionlessTransfer_t *connectionlessTransfer,
+    ConnectionlessTransferIEs_t *connectionlessTransferIEs);
+
+/** \brief Decode function for DirectTransferIEs ies.
+ * \param directTransferIEs Pointer to ASN1 structure in which data will be stored
+ *  \param any_p Pointer to the ANY value to decode.
+ **/
+int rua_decode_directtransferies(
+    DirectTransferIEs_t *directTransferIEs,
+    ANY_t *any_p);
+
+/** \brief Encode function for DirectTransferIEs ies.
+ *  \param directTransfer Pointer to the ASN1 structure.
+ *  \param directTransferIEs Pointer to the IES structure.
+ **/
+int rua_encode_directtransferies(
+    DirectTransfer_t *directTransfer,
+    DirectTransferIEs_t *directTransferIEs);
+
+#endif /* RUA_IES_DEFS_H_ */
+