Replace tabs in files with editor modeline "expandtab"
[metze/wireshark/wip.git] / epan / dissectors / packet-gsm_a_common.h
index f52128a649217a1fb33f52189eb03e860ef09377..1cdea3e3514bf4e1c7e92096e7de73029311dd53 100644 (file)
@@ -1,6 +1,4 @@
 /* packet-gsm_a_common.h
- *
- * $Id$
  *
  *   Reference [3]
  *   Mobile radio interface Layer 3 specification;
  *   Core network protocols;
  *   Stage 3
  *   (3GPP TS 24.008 version 6.7.0 Release 6)
- *      (3GPP TS 24.008 version 6.8.0 Release 6)
+ *   (3GPP TS 24.008 version 6.8.0 Release 6)
+ *
+ *   Reference [9]
+ *   Digital cellular telecommunications system (Phase 2+);
+ *   Group Call Control (GCC) protocol
+ *   (GSM 04.68 version 8.1.0 Release 1999)
+ *
+ *   Reference [10]
+ *   Digital cellular telecommunications system (Phase 2+);
+ *   Broadcast Call Control (BCC) protocol
+ *   (3GPP TS 44.069 version 11.0.0 Release 11)
  *
  * Copyright 2003, Michael Lum <mlum [AT] telostech.com>,
  * In association with Telos Technology Inc.
  *
+ * Added Dissection of Group Call Control (GCC) protocol.
+ * Added Dissection of Broadcast Call Control (BCC) protocol.
+ * Copyright 2015, Michail Koreshkov <michail.koreshkov [at] zte.com.cn
+ *
  * Wireshark - Network traffic analyzer
  * By Gerald Combs <gerald@wireshark.org>
  * Copyright 1998 Gerald Combs
  *
  * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 #ifndef __PACKET_GSM_A_COMMON_H__
 #define __PACKET_GSM_A_COMMON_H__
 
+#include <epan/proto.h>
+
 #include "packet-sccp.h"
+#include "ws_symbol_export.h"
 
 /* PROTOTYPES/FORWARDS */
-typedef guint8 (*elem_fcn)(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-typedef void (*msg_fcn)(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len);
-
-typedef struct dgt_set_t
-{
-       unsigned char out[15];
-}
-dgt_set_t;
-
-int my_dgt_tbcd_unpack( 
-       char    *out,           /* ASCII pattern out */
-       guchar  *in,            /* packed pattern in */
-       int             num_octs,       /* Number of octets to unpack */
-       dgt_set_t       *dgt            /* Digit definitions */
-       );
+typedef guint16 (*elem_fcn)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+typedef void (*msg_fcn)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
+int my_dgt_tbcd_unpack(
+    char      *out,       /* ASCII pattern out */
+    guchar    *in,        /* packed pattern in */
+    int        num_octs,   /* Number of octets to unpack */
+    dgt_set_t *dgt    /* Digit definitions */
+    );
 
 /* globals needed as a result of spltting the packet-gsm_a.c into several files
  * until further restructuring can take place to make them more modular
@@ -78,60 +86,96 @@ int my_dgt_tbcd_unpack(
 extern const value_string protocol_discriminator_vals[];
 extern const value_string gsm_a_pd_short_str_vals[];
 
-extern guint8 de_cld_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
+extern guint16 de_cld_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
 
 /* Needed to share the packet-gsm_a_common.c functions */
-extern const value_string gsm_bssmap_elem_strings[];
+extern value_string_ext gsm_bssmap_elem_strings_ext;
 extern gint ett_gsm_bssmap_elem[];
 extern elem_fcn bssmap_elem_fcn[];
 extern int hf_gsm_a_bssmap_elem_id;
-extern int hf_gsm_a_bssmap_cell_ci;
 
-extern const value_string gsm_dtap_elem_strings[];
+extern value_string_ext gsm_dtap_elem_strings_ext;
 extern gint ett_gsm_dtap_elem[];
 extern elem_fcn dtap_elem_fcn[];
 extern int hf_gsm_a_dtap_elem_id;
 
-extern const value_string gsm_rp_elem_strings[];
+extern value_string_ext gsm_rp_elem_strings_ext;
 extern gint ett_gsm_rp_elem[];
 extern elem_fcn rp_elem_fcn[];
 extern int hf_gsm_a_rp_elem_id;
 
-extern const value_string gsm_rr_elem_strings[];
+extern value_string_ext gsm_rr_elem_strings_ext;
 extern gint ett_gsm_rr_elem[];
 extern elem_fcn rr_elem_fcn[];
 extern int hf_gsm_a_rr_elem_id;
 extern void get_rr_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn);
 
-extern const value_string gsm_common_elem_strings[];
+extern value_string_ext gsm_common_elem_strings_ext;
 extern gint ett_gsm_common_elem[];
 extern elem_fcn common_elem_fcn[];
 extern int hf_gsm_a_common_elem_id;
 
-extern const value_string gsm_gm_elem_strings[];
+extern value_string_ext gsm_gm_elem_strings_ext;
 extern gint ett_gsm_gm_elem[];
 extern elem_fcn gm_elem_fcn[];
 extern int hf_gsm_a_gm_elem_id;
 extern void get_gmm_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn);
 extern void get_sm_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn);
 
-extern const value_string gsm_bsslap_elem_strings[];
+extern value_string_ext gsm_bsslap_elem_strings_ext;
 extern gint ett_gsm_bsslap_elem[];
 extern elem_fcn bsslap_elem_fcn[];
 extern int hf_gsm_a_bsslap_elem_id;
 
-extern sccp_msg_info_t* sccp_msg;
+extern value_string_ext gsm_bssmap_le_elem_strings_ext;
+extern gint ett_gsm_bssmap_le_elem[];
+extern elem_fcn bssmap_le_elem_fcn[];
+extern int hf_gsm_bssmap_le_elem_id;
+
+extern value_string_ext nas_eps_common_elem_strings_ext;
+extern gint ett_nas_eps_common_elem[];
+extern elem_fcn nas_eps_common_elem_fcn[];
+extern int hf_nas_eps_common_elem_id;
+
+extern value_string_ext nas_emm_elem_strings_ext;
+extern gint ett_nas_eps_emm_elem[];
+extern elem_fcn emm_elem_fcn[];
+extern int hf_nas_eps_emm_elem_id;
+
+extern value_string_ext nas_esm_elem_strings_ext;
+extern gint ett_nas_eps_esm_elem[];
+extern elem_fcn esm_elem_fcn[];
+extern int hf_nas_eps_esm_elem_id;
+
+extern value_string_ext sgsap_elem_strings_ext;
+extern gint ett_sgsap_elem[];
+extern elem_fcn sgsap_elem_fcn[];
+extern int hf_sgsap_elem_id;
+
+extern value_string_ext bssgp_elem_strings_ext;
+extern gint ett_bssgp_elem[];
+extern elem_fcn bssgp_elem_fcn[];
+extern int hf_bssgp_elem_id;
+
+extern value_string_ext gmr1_ie_common_strings_ext;
+extern elem_fcn gmr1_ie_common_func[];
+extern gint ett_gmr1_ie_common[];
+
+extern value_string_ext gmr1_ie_rr_strings_ext;
+extern elem_fcn gmr1_ie_rr_func[];
+extern gint ett_gmr1_ie_rr[];
+
 extern sccp_assoc_info_t* sccp_assoc;
 
 extern int gsm_a_tap;
-extern gboolean lower_nibble;
 extern packet_info *gsm_a_dtap_pinfo;
 
 /* TS 23 032 */
 void dissect_geographical_description(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+guint16 dissect_description_of_velocity(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+
 
 /* common field values */
-extern int hf_gsm_a_length;
 extern int hf_gsm_a_extension;
 extern int hf_gsm_a_tmsi;
 extern int hf_gsm_a_L3_protocol_discriminator;
@@ -139,119 +183,157 @@ extern int hf_gsm_a_call_prio;
 extern int hf_gsm_a_b8spare;
 extern int hf_gsm_a_skip_ind;
 extern int hf_gsm_a_rr_chnl_needed_ch1;
-
-/* for the nasty hack below */
-#define GSM_BSSMAP_APDU_IE     0x49
+extern int hf_gsm_a_rr_t3212;
+extern int hf_gsm_a_gm_rac;
+extern int hf_gsm_a_spare_bits;
+extern int hf_gsm_a_lac;
 
 /* flags for the packet-gsm_a_common routines */
-#define GSM_A_PDU_TYPE_BSSMAP  0 /* BSSAP_PDU_TYPE_BSSMAP i.e. 0 - until split complete at least! */
-#define GSM_A_PDU_TYPE_DTAP            1  /*BSSAP_PDU_TYPE_DTAP i.e. 1 - until split complete at least! */
-#define GSM_A_PDU_TYPE_RP              2
-#define GSM_A_PDU_TYPE_RR              3
-#define GSM_A_PDU_TYPE_COMMON  4
-#define GSM_A_PDU_TYPE_GM              5
-#define GSM_A_PDU_TYPE_BSSLAP  6
-#define GSM_A_PDU_TYPE_SACCH  7
+#define GSM_A_PDU_TYPE_BSSMAP       0  /* BSSAP_PDU_TYPE_BSSMAP i.e. 0 - until split complete at least! */
+#define GSM_A_PDU_TYPE_DTAP         1  /* BSSAP_PDU_TYPE_DTAP i.e. 1   - until split complete at least! */
+#define GSM_A_PDU_TYPE_RP           2
+#define GSM_A_PDU_TYPE_RR           3
+#define GSM_A_PDU_TYPE_COMMON       4
+#define GSM_A_PDU_TYPE_GM           5
+#define GSM_A_PDU_TYPE_BSSLAP       6
+#define GSM_A_PDU_TYPE_SACCH        7
+#define GSM_PDU_TYPE_BSSMAP_LE      8
+#define NAS_PDU_TYPE_COMMON         9
+#define NAS_PDU_TYPE_EMM            10
+#define NAS_PDU_TYPE_ESM            11
+#define SGSAP_PDU_TYPE              12
+#define BSSGP_PDU_TYPE              13
+#define GMR1_IE_COMMON              14
+#define GMR1_IE_RR                  15
 
 extern const char* get_gsm_a_msg_string(int pdu_type, int idx);
 
 /*
  * this should be set on a per message basis, if possible
  */
-#define        IS_UPLINK_FALSE         0
-#define        IS_UPLINK_TRUE          1
-#define        IS_UPLINK_UNKNOWN       2
-
-/* Defines and nasty static for handling half octet mandatory V IEs 
- * TODO: Note origimally UPPER_NIBBLE was -2 and LOWER_NIBBLE was -1
- * changed here to unsigned integer as it wouldn't compile (Warnings on Ubuntu)
- * uggly hack...
+#define IS_UPLINK_FALSE     0
+#define IS_UPLINK_TRUE      1
+#define IS_UPLINK_UNKNOWN   2
+
+/* Defines for handling half octet mandatory V IEs
+ * Named LEFT and RIGHT (as displayed) because the GSM definitions and our internal representation
+ * have the bits numbered in opposite senses
  */
-#define UPPER_NIBBLE   (2)
-#define LOWER_NIBBLE   (1)
+#define LEFT_NIBBLE     (2)
+#define RIGHT_NIBBLE    (1)
 
 /* FUNCTIONS */
 
 /* ELEMENT FUNCTIONS */
-
-#define        EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \
-       if (((edc_len) > (edc_max_len))||lower_nibble) \
-       { \
-               proto_tree_add_text(tree, tvb, \
-                       curr_offset, (edc_len) - (edc_max_len), "Extraneous Data"); \
-               curr_offset += ((edc_len) - (edc_max_len)); \
-       }
-
-#define        SHORT_DATA_CHECK(sdc_len, sdc_min_len) \
-       if ((sdc_len) < (sdc_min_len)) \
-       { \
-               proto_tree_add_text(tree, tvb, \
-                       curr_offset, (sdc_len), "Short Data (?)"); \
-               curr_offset += (sdc_len); \
-               return(curr_offset - offset); \
-       }
-
-#define        EXACT_DATA_CHECK(edc_len, edc_eq_len) \
-       if ((edc_len) != (edc_eq_len)) \
-       { \
-               proto_tree_add_text(tree, tvb, \
-                       curr_offset, (edc_len), "Unexpected Data Length"); \
-               curr_offset += (edc_len); \
-               return(curr_offset - offset); \
-       }
-
-#define        NO_MORE_DATA_CHECK(nmdc_len) \
-       if ((nmdc_len) == (curr_offset - offset)) return(nmdc_len);
-
-#define        SET_ELEM_VARS(SEV_pdu_type, SEV_elem_names, SEV_elem_ett, SEV_elem_funcs) \
-       switch (SEV_pdu_type) \
-       { \
-       case GSM_A_PDU_TYPE_BSSMAP: \
-               SEV_elem_names = gsm_bssmap_elem_strings; \
-               SEV_elem_ett = ett_gsm_bssmap_elem; \
-               SEV_elem_funcs = bssmap_elem_fcn; \
-               break; \
-       case GSM_A_PDU_TYPE_DTAP: \
-               SEV_elem_names = gsm_dtap_elem_strings; \
-               SEV_elem_ett = ett_gsm_dtap_elem; \
-               SEV_elem_funcs = dtap_elem_fcn; \
-               break; \
-       case GSM_A_PDU_TYPE_RP: \
-               SEV_elem_names = gsm_rp_elem_strings; \
-               SEV_elem_ett = ett_gsm_rp_elem; \
-               SEV_elem_funcs = rp_elem_fcn; \
-               break; \
-       case GSM_A_PDU_TYPE_RR: \
-               SEV_elem_names = gsm_rr_elem_strings; \
-               SEV_elem_ett = ett_gsm_rr_elem; \
-               SEV_elem_funcs = rr_elem_fcn; \
-               break; \
-       case GSM_A_PDU_TYPE_COMMON: \
-               SEV_elem_names = gsm_common_elem_strings; \
-               SEV_elem_ett = ett_gsm_common_elem; \
-               SEV_elem_funcs = common_elem_fcn; \
-               break; \
-       case GSM_A_PDU_TYPE_GM: \
-               SEV_elem_names = gsm_gm_elem_strings; \
-               SEV_elem_ett = ett_gsm_gm_elem; \
-               SEV_elem_funcs = gm_elem_fcn; \
-               break; \
-       case GSM_A_PDU_TYPE_BSSLAP: \
-               SEV_elem_names = gsm_bsslap_elem_strings; \
-               SEV_elem_ett = ett_gsm_bsslap_elem; \
-               SEV_elem_funcs = bsslap_elem_fcn; \
-               break; \
-       default: \
-               proto_tree_add_text(tree, \
-                       tvb, curr_offset, -1, \
-                       "Unknown PDU type (%u)", SEV_pdu_type); \
-               return(consumed); \
-       }
+#define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len, pinfo, ei) \
+    if ((edc_len) > (edc_max_len)) \
+    { \
+        proto_tree_add_expert(tree, pinfo, ei, tvb, curr_offset, (edc_len) - (edc_max_len)); \
+        curr_offset += ((edc_len) - (edc_max_len)); \
+    }
+
+#define NO_MORE_DATA_CHECK(nmdc_len) \
+    if ((nmdc_len) <= (curr_offset - offset)) return(nmdc_len);
+
+#define SET_ELEM_VARS(SEV_pdu_type, SEV_elem_names_ext, SEV_elem_ett, SEV_elem_funcs, ei_unknown) \
+    switch (SEV_pdu_type) \
+    { \
+    case GSM_A_PDU_TYPE_BSSMAP: \
+        SEV_elem_names_ext = gsm_bssmap_elem_strings_ext; \
+        SEV_elem_ett = ett_gsm_bssmap_elem; \
+        SEV_elem_funcs = bssmap_elem_fcn; \
+        break; \
+    case GSM_A_PDU_TYPE_DTAP: \
+        SEV_elem_names_ext = gsm_dtap_elem_strings_ext; \
+        SEV_elem_ett = ett_gsm_dtap_elem; \
+        SEV_elem_funcs = dtap_elem_fcn; \
+        break; \
+    case GSM_A_PDU_TYPE_RP: \
+        SEV_elem_names_ext = gsm_rp_elem_strings_ext; \
+        SEV_elem_ett = ett_gsm_rp_elem; \
+        SEV_elem_funcs = rp_elem_fcn; \
+        break; \
+    case GSM_A_PDU_TYPE_RR: \
+        SEV_elem_names_ext = gsm_rr_elem_strings_ext; \
+        SEV_elem_ett = ett_gsm_rr_elem; \
+        SEV_elem_funcs = rr_elem_fcn; \
+        break; \
+    case GSM_A_PDU_TYPE_COMMON: \
+        SEV_elem_names_ext = gsm_common_elem_strings_ext; \
+        SEV_elem_ett = ett_gsm_common_elem; \
+        SEV_elem_funcs = common_elem_fcn; \
+        break; \
+    case GSM_A_PDU_TYPE_GM: \
+        SEV_elem_names_ext = gsm_gm_elem_strings_ext; \
+        SEV_elem_ett = ett_gsm_gm_elem; \
+        SEV_elem_funcs = gm_elem_fcn; \
+        break; \
+    case GSM_A_PDU_TYPE_BSSLAP: \
+        SEV_elem_names_ext = gsm_bsslap_elem_strings_ext; \
+        SEV_elem_ett = ett_gsm_bsslap_elem; \
+        SEV_elem_funcs = bsslap_elem_fcn; \
+        break; \
+    case GSM_PDU_TYPE_BSSMAP_LE: \
+        SEV_elem_names_ext = gsm_bssmap_le_elem_strings_ext; \
+        SEV_elem_ett = ett_gsm_bssmap_le_elem; \
+        SEV_elem_funcs = bssmap_le_elem_fcn; \
+        break; \
+    case NAS_PDU_TYPE_COMMON: \
+        SEV_elem_names_ext = nas_eps_common_elem_strings_ext; \
+        SEV_elem_ett = ett_nas_eps_common_elem; \
+        SEV_elem_funcs = nas_eps_common_elem_fcn; \
+        break; \
+    case NAS_PDU_TYPE_EMM: \
+        SEV_elem_names_ext = nas_emm_elem_strings_ext; \
+        SEV_elem_ett = ett_nas_eps_emm_elem; \
+        SEV_elem_funcs = emm_elem_fcn; \
+        break; \
+    case NAS_PDU_TYPE_ESM: \
+        SEV_elem_names_ext = nas_esm_elem_strings_ext; \
+        SEV_elem_ett = ett_nas_eps_esm_elem; \
+        SEV_elem_funcs = esm_elem_fcn; \
+        break; \
+    case SGSAP_PDU_TYPE: \
+        SEV_elem_names_ext = sgsap_elem_strings_ext; \
+        SEV_elem_ett = ett_sgsap_elem; \
+        SEV_elem_funcs = sgsap_elem_fcn; \
+        break; \
+    case BSSGP_PDU_TYPE: \
+        SEV_elem_names_ext = bssgp_elem_strings_ext; \
+        SEV_elem_ett = ett_bssgp_elem; \
+        SEV_elem_funcs = bssgp_elem_fcn; \
+        break; \
+    case GMR1_IE_COMMON: \
+        SEV_elem_names_ext = gmr1_ie_common_strings_ext; \
+        SEV_elem_ett = ett_gmr1_ie_common; \
+        SEV_elem_funcs = gmr1_ie_common_func; \
+        break; \
+    case GMR1_IE_RR: \
+        SEV_elem_names_ext = gmr1_ie_rr_strings_ext; \
+        SEV_elem_ett = ett_gmr1_ie_rr; \
+        SEV_elem_funcs = gmr1_ie_rr_func; \
+        break; \
+    default: \
+        proto_tree_add_expert_format(tree, pinfo, ei_unknown, \
+            tvb, curr_offset, -1, \
+            "Unknown PDU type (%u) gsm_a_common", SEV_pdu_type); \
+        return(consumed); \
+    }
 
 /*
  * Type Length Value (TLV) element dissector
  */
-extern guint8 elem_tlv(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int idx, guint32 offset, guint len, const gchar *name_add);
+WS_DLL_PUBLIC guint16 elem_tlv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 iei, gint pdu_type, int idx, guint32 offset, guint len, const gchar *name_add);
+
+/*
+ * Type Extendable Length Value (TLVE) element dissector
+ */
+guint16 elem_telv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 iei, gint pdu_type, int idx, guint32 offset, guint len, const gchar *name_add);
+
+/*
+ * Type Length Value (TLV-E) element dissector
+ */
+guint16 elem_tlv_e(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 iei, gint pdu_type, int idx, guint32 offset, guint len, const gchar *name_add);
 
 /*
  * Type Value (TV) element dissector
@@ -259,7 +341,7 @@ extern guint8 elem_tlv(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_typ
  * Length cannot be used in these functions, big problem if a element dissector
  * is not defined for these.
  */
-extern guint8 elem_tv(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int idx, guint32 offset, const gchar *name_add);
+WS_DLL_PUBLIC guint16 elem_tv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 iei, gint pdu_type, int idx, guint32 offset, const gchar *name_add);
 
 /*
  * Type Value (TV) element dissector
@@ -268,17 +350,22 @@ extern guint8 elem_tv(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type
  * Length cannot be used in these functions, big problem if a element dissector
  * is not defined for these.
  */
-extern guint8 elem_tv_short(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int idx, guint32 offset, const gchar *name_add);
+WS_DLL_PUBLIC guint16 elem_tv_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 iei, gint pdu_type, int idx, guint32 offset, const gchar *name_add);
 
 /*
  * Type (T) element dissector
  */
-extern guint8 elem_t(tvbuff_t *tvb, proto_tree *tree, guint8 iei, gint pdu_type, int idx, guint32 offset, const gchar *name_add);
+WS_DLL_PUBLIC guint16 elem_t(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 iei, gint pdu_type, int idx, guint32 offset, const gchar *name_add);
 
 /*
  * Length Value (LV) element dissector
  */
-extern guint8 elem_lv(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int idx, guint32 offset, guint len, const gchar *name_add);
+WS_DLL_PUBLIC guint16 elem_lv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_type, int idx, guint32 offset, guint len, const gchar *name_add);
+
+/*
+ * Length Value (LV-E) element dissector
+ */
+guint16 elem_lv_e(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_type, int idx, guint32 offset, guint len, const gchar *name_add);
 
 /*
  * Value (V) element dissector
@@ -286,139 +373,218 @@ extern guint8 elem_lv(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int idx, g
  * Length cannot be used in these functions, big problem if a element dissector
  * is not defined for these.
  */
-extern guint8 elem_v(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int idx, guint32 offset);
+WS_DLL_PUBLIC guint16 elem_v(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_type, int idx, guint32 offset, const gchar *name_add);
 
 /*
  * Short Value (V_SHORT) element dissector
  *
- * Length is (ab)used in these functions to indicate upper nibble of the octet (-2) or lower nibble (-1)
- * noting that the tv_short dissector always sets the length to -1, as the upper nibble is the IEI.
- * This is expected to be used upper nibble first, as the tables of 24.008.
+ * nibble used in this functions to indicate left or right nibble of the octet
+ * This is expected to be used right nibble first, as the tables of 24.008.
  */
+WS_DLL_PUBLIC guint16 elem_v_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_type, int idx, guint32 offset, guint32 nibble);
 
-extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int idx, guint32 offset);
 
+/* XXX: Most (if not all) the functions which make use of the following macros have the variables 'consumed',
+ *      'curr_offset', and 'cur_len' declared as *unsigned*.  This means that the 'if (curr_len <= 0)' statement
+ *      originally at the end of each of the macros would always be FALSE since an unsigned cannot be less than 0.
+ *      I've chosen to change the statement to 'if ((signed)curr_len <= 0)'. (Although this may be a bit of a
+ *      hack, it seems simpler than changing declarations to signed in all the places these macros are used).
+ *      Is there a better approach ?
+ */
 
-#define ELEM_MAND_TLV(EMT_iei, EMT_pdu_type, EMT_elem_idx, EMT_elem_name_addition) \
+#define ELEM_MAND_TLV(EMT_iei, EMT_pdu_type, EMT_elem_idx, EMT_elem_name_addition, ei_mandatory) \
+{\
+    if ((consumed = elem_tlv(tvb, tree, pinfo, (guint8) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, curr_len, EMT_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+    else \
+    { \
+        proto_tree_add_expert_format(tree, pinfo, &ei_mandatory, \
+            tvb, curr_offset, 0, \
+            "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
+            EMT_iei, \
+            get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \
+            (EMT_elem_name_addition == NULL) ? "" : EMT_elem_name_addition \
+            ); \
+    } \
+    if ((signed)curr_len <= 0) return;      \
+}
+/* This is a version where the length field can be one or two octets depending
+ * if the extension bit is set or not (TS 48.016 p 10.1.2).
+ *         8        7 6 5 4 3 2 1
+ * octet 2 0/1 ext  length
+ * octet 2a length
+ */
+#define ELEM_MAND_TELV(EMT_iei, EMT_pdu_type, EMT_elem_idx, EMT_elem_name_addition, ei_mandatory) \
 {\
-       if ((consumed = elem_tlv(tvb, tree, (guint8) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, curr_len, EMT_elem_name_addition)) > 0) \
-       { \
-               curr_offset += consumed; \
-               curr_len -= consumed; \
-       } \
-       else \
-       { \
-               proto_tree_add_text(tree, \
-                       tvb, curr_offset, 0, \
-                       "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
-                       EMT_iei, \
-                       get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \
-                       (EMT_elem_name_addition == NULL) || (EMT_elem_name_addition[0] == '\0') ? "" : EMT_elem_name_addition \
-                       ); \
-       } \
-       if (curr_len <= 0) return; \
+    if ((consumed = elem_telv(tvb, tree, pinfo, (guint8) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, curr_len, EMT_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+    else \
+    { \
+        proto_tree_add_expert_format(tree, pinfo, &ei_mandatory, \
+            tvb, curr_offset, 0, \
+            "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
+            EMT_iei, \
+            get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \
+            (EMT_elem_name_addition == NULL) ? "" : EMT_elem_name_addition \
+            ); \
+    } \
+    if ((signed)curr_len <= 0) return;      \
 }
 
+#define ELEM_MAND_TLV_E(EMT_iei, EMT_pdu_type, EMT_elem_idx, EMT_elem_name_addition, ei_mandatory) \
+{\
+    if ((consumed = elem_tlv_e(tvb, tree, pinfo, (guint8) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, curr_len, EMT_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+    else \
+    { \
+        proto_tree_add_expert_format(tree, pinfo, &ei_mandatory, \
+            tvb, curr_offset, 0, \
+            "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
+            EMT_iei, \
+            get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \
+            (EMT_elem_name_addition == NULL) ? "" : EMT_elem_name_addition \
+            ); \
+    } \
+    if ((signed)curr_len <= 0) return;      \
+}
 #define ELEM_OPT_TLV(EOT_iei, EOT_pdu_type, EOT_elem_idx, EOT_elem_name_addition) \
 {\
-       if ((consumed = elem_tlv(tvb, tree, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \
-       { \
-               curr_offset += consumed; \
-               curr_len -= consumed; \
-       } \
-       if (curr_len <= 0) return; \
+    if ((consumed = elem_tlv(tvb, tree, pinfo, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+        if ((signed)curr_len <= 0) return;      \
 }
 
-#define ELEM_MAND_TV(EMT_iei, EMT_pdu_type, EMT_elem_idx, EMT_elem_name_addition) \
+#define ELEM_OPT_TELV(EOT_iei, EOT_pdu_type, EOT_elem_idx, EOT_elem_name_addition) \
 {\
-       if ((consumed = elem_tv(tvb, tree, (guint8) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, EMT_elem_name_addition)) > 0) \
-       { \
-               curr_offset += consumed; \
-               curr_len -= consumed; \
-       } \
-       else \
-       { \
-               proto_tree_add_text(tree, \
-                       tvb, curr_offset, 0, \
-                       "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
-                       EMT_iei, \
-                       get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \
-                       (EMT_elem_name_addition == NULL) || (EMT_elem_name_addition[0] == '\0') ? "" : EMT_elem_name_addition \
-               ); \
-       } \
-       if (curr_len <= 0) return; \
+    if ((consumed = elem_telv(tvb, tree, pinfo, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+        if ((signed)curr_len <= 0) return;      \
+}
+
+#define ELEM_OPT_TLV_E(EOT_iei, EOT_pdu_type, EOT_elem_idx, EOT_elem_name_addition) \
+{\
+    if ((consumed = elem_tlv_e(tvb, tree, pinfo, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+    if ((signed)curr_len <= 0) return;      \
+}
+
+#define ELEM_MAND_TV(EMT_iei, EMT_pdu_type, EMT_elem_idx, EMT_elem_name_addition, ei_mandatory) \
+{\
+    if ((consumed = elem_tv(tvb, tree, pinfo, (guint8) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, EMT_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+    else \
+    { \
+        proto_tree_add_expert_format(tree, pinfo, &ei_mandatory,\
+            tvb, curr_offset, 0, \
+            "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
+            EMT_iei, \
+            get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \
+            (EMT_elem_name_addition == NULL) ? "" : EMT_elem_name_addition \
+        ); \
+    } \
+    if ((signed)curr_len <= 0) return;      \
 }
 
 #define ELEM_OPT_TV(EOT_iei, EOT_pdu_type, EOT_elem_idx, EOT_elem_name_addition) \
 {\
-       if ((consumed = elem_tv(tvb, tree, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, EOT_elem_name_addition)) > 0) \
-       { \
-               curr_offset += consumed; \
-               curr_len -= consumed; \
-       } \
-       if (curr_len <= 0) return; \
+    if ((consumed = elem_tv(tvb, tree, pinfo, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, EOT_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+        if ((signed)curr_len <= 0) return;      \
 }
 
 #define ELEM_OPT_TV_SHORT(EOT_iei, EOT_pdu_type, EOT_elem_idx, EOT_elem_name_addition) \
 {\
-       if ((consumed = elem_tv_short(tvb, tree, EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, EOT_elem_name_addition)) > 0) \
-       { \
-               curr_offset += consumed; \
-               curr_len -= consumed; \
-       } \
-       if (curr_len <= 0) return; \
+    if ((consumed = elem_tv_short(tvb, tree, pinfo, EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, EOT_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+    if ((signed)curr_len <= 0) return;      \
 }
 
 #define ELEM_OPT_T(EOT_iei, EOT_pdu_type, EOT_elem_idx, EOT_elem_name_addition) \
 {\
-       if ((consumed = elem_t(tvb, tree, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, EOT_elem_name_addition)) > 0) \
-       { \
-               curr_offset += consumed; \
-               curr_len -= consumed; \
-       } \
-       if (curr_len <= 0) return; \
+    if ((consumed = elem_t(tvb, tree, pinfo, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, EOT_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+    if ((signed)curr_len <= 0) return;      \
 }
 
 #define ELEM_MAND_LV(EML_pdu_type, EML_elem_idx, EML_elem_name_addition) \
 {\
-       if ((consumed = elem_lv(tvb, tree, EML_pdu_type, EML_elem_idx, curr_offset, curr_len, EML_elem_name_addition)) > 0) \
-       { \
-               curr_offset += consumed; \
-               curr_len -= consumed; \
-       } \
-       else \
-       { \
-               /* Mandatory, but nothing we can do */ \
-       } \
-       if (curr_len <= 0) return; \
+    if ((consumed = elem_lv(tvb, tree, pinfo, EML_pdu_type, EML_elem_idx, curr_offset, curr_len, EML_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+    else \
+    { \
+        /* Mandatory, but nothing we can do */ \
+    } \
+    if ((signed)curr_len <= 0) return;      \
+}
+
+#define ELEM_MAND_LV_E(EML_pdu_type, EML_elem_idx, EML_elem_name_addition) \
+{\
+    if ((consumed = elem_lv_e(tvb, tree, pinfo, EML_pdu_type, EML_elem_idx, curr_offset, curr_len, EML_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+    else \
+    { \
+        /* Mandatory, but nothing we can do */ \
+    } \
+    if ((signed)curr_len <= 0) return;      \
 }
 
-#define ELEM_MAND_V(EMV_pdu_type, EMV_elem_idx) \
+#define ELEM_MAND_V(EMV_pdu_type, EMV_elem_idx, EMV_elem_name_addition) \
 {\
-       if ((consumed = elem_v(tvb, tree, EMV_pdu_type, EMV_elem_idx, curr_offset)) > 0) \
-       { \
-               curr_offset += consumed; \
-               curr_len -= consumed; \
-       } \
-       else \
-       { \
-               /* Mandatory, but nothing we can do */ \
-       } \
-       if (curr_len <= 0) return; \
+    if ((consumed = elem_v(tvb, tree, pinfo, EMV_pdu_type, EMV_elem_idx, curr_offset, EMV_elem_name_addition)) > 0) \
+    { \
+        curr_offset += consumed; \
+        curr_len -= consumed; \
+    } \
+    else \
+    { \
+        /* Mandatory, but nothing we can do */ \
+    } \
+    if ((signed)curr_len <= 0) return;      \
 }
 
-#define ELEM_MAND_V_SHORT(EMV_pdu_type, EMV_elem_idx) \
+#define ELEM_MAND_VV_SHORT(EMV_pdu_type1, EMV_elem_idx1, EMV_pdu_type2, EMV_elem_idx2) \
 {\
-       if ((consumed = elem_v_short(tvb, tree, EMV_pdu_type, EMV_elem_idx, curr_offset)) > 0) \
-       { \
-               curr_offset += consumed; \
-               curr_len -= consumed; \
-       } \
-       else \
-       { \
-               /* Mandatory, but nothing we can do */ \
-       } \
-       if (curr_len <= 0) return; \
+    elem_v_short(tvb, tree, pinfo, EMV_pdu_type1, EMV_elem_idx1, curr_offset, RIGHT_NIBBLE); \
+    elem_v_short(tvb, tree, pinfo, EMV_pdu_type2, EMV_elem_idx2, curr_offset, LEFT_NIBBLE); \
+    curr_offset ++ ; /* consumed length is 1, regardless of contents */ \
+    curr_len -- ; \
+    if ((signed)curr_len <= 0) return;      \
 }
 
 /*
@@ -427,506 +593,691 @@ extern guint8 elem_v_short(tvbuff_t *tvb, proto_tree *tree, gint pdu_type, int i
  */
 typedef enum
 {
-       PD_GCC = 0,
-       PD_BCC,
-       PD_RSVD_1,
-       PD_CC,
-       PD_GTTP,
-       PD_MM,
-       PD_RR,
-       PD_UNK_1,
-       PD_GMM,
-       PD_SMS,
-       PD_SM,
-       PD_SS,
-       PD_LCS,
-       PD_UNK_2,
-       PD_RSVD_EXT,
-       PD_TP
+    PD_GCC = 0,
+    PD_BCC,
+    PD_RSVD_1,
+    PD_CC,
+    PD_GTTP,
+    PD_MM,
+    PD_RR,
+    PD_UNK_1,
+    PD_GMM,
+    PD_SMS,
+    PD_SM,
+    PD_SS,
+    PD_LCS,
+    PD_UNK_2,
+    PD_RSVD_EXT,
+    PD_TP
 }
 gsm_a_pd_str_e;
 
 typedef struct _gsm_a_tap_rec_t {
-       /*
-        * value from packet-bssap.h
-        */
-       guint8          pdu_type;
-       guint8          message_type;
-       gsm_a_pd_str_e  protocol_disc;
+    /*
+     * value from packet-bssap.h
+     */
+    guint8      pdu_type;
+    guint8      message_type;
+    gsm_a_pd_str_e  protocol_disc;
 } gsm_a_tap_rec_t;
 
-void dissect_bssmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
-
-void dtap_mm_mm_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len);
-
-guint8 be_cell_id_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len, guint8 disc);
-guint8 be_cell_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-
-guint8 de_lai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_mid(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_bearer_cap_uplink(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-
-guint8 de_ms_cm_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
-guint8 de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-
-guint8 de_sm_apn(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_sm_qos(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_sm_pflow_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-
-guint8 de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_gmm_rai(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-
-guint8 de_rr_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_rr_cell_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_rr_ch_dsc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
-guint8 de_rr_ch_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_rr_chnl_needed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
-guint8 de_rr_cip_mode_set(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_rr_cm_enq_mask(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_rr_meas_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
-guint8 de_rr_multirate_conf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
-guint8 de_rr_sus_cau(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-guint8 de_rr_tlli(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len);
-
-guint8 de_rej_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
-guint8 de_d_gb_call_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
-
-void dtap_rr_ho_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len);
+void bssmap_old_bss_to_new_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo);
+void bssmap_new_bss_to_old_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo);
+
+void dtap_mm_mm_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
+
+guint16 be_cell_id_aux(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len, guint8 disc);
+guint16 be_cell_id_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 be_chan_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 be_prio(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+
+WS_DLL_PUBLIC
+guint16 de_lai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_mid(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_cell_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_bearer_cap_uplink(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 be_emlpp_prio(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 be_ganss_loc_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 be_ganss_pos_dta(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 be_ganss_ass_dta(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_cn_common_gsm_map_nas_sys_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_cs_domain_spec_sys_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_ps_domain_spec_sys_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_plmn_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_ms_cm_1(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_serv_cat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_sm_apn(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_sm_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_sm_pflow_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_time_zone(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_gmm_rai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_gmm_voice_domain_pref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+
+guint16 de_sup_codec_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+
+
+WS_DLL_PUBLIC
+guint16 de_rr_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_rr_cell_dsc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_rr_ch_dsc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_rr_ch_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_rr_chnl_needed(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_rr_cip_mode_set(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_rr_cm_enq_mask(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_rr_meas_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_rr_multirate_conf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_rr_sus_cau(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_rr_tlli(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+
+WS_DLL_PUBLIC
+guint16 de_rej_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+WS_DLL_PUBLIC
+guint16 de_d_gb_call_ref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_spare_nibble(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
+
+guint16 de_emm_ue_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_emm_trac_area_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len);
+guint16 de_emm_sec_par_from_eutra(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
+guint16 de_emm_sec_par_to_eutra(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
+guint16 de_esm_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_);
+void nas_esm_pdn_con_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
+
+void dtap_rr_ho_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
+void dtap_rr_cip_mode_cpte(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
+
+void bssmap_perf_loc_abort(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
+void bssmap_reset(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
+void bssmap_conn_oriented(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
+
+void rp_data_n_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
 
 /*
  * the following allows TAP code access to the messages
- * without having to duplicate it. With MSVC and a 
+ * without having to duplicate it. With MSVC and a
  * libwireshark.dll, we need a special declaration.
  */
-WS_VAR_IMPORT const value_string gsm_a_bssmap_msg_strings[];
-WS_VAR_IMPORT const value_string gsm_a_dtap_msg_mm_strings[];
-WS_VAR_IMPORT const value_string gsm_a_dtap_msg_rr_strings[];
-WS_VAR_IMPORT const value_string gsm_a_dtap_msg_cc_strings[];
-WS_VAR_IMPORT const value_string gsm_a_dtap_msg_gmm_strings[];
-WS_VAR_IMPORT const value_string gsm_a_dtap_msg_sms_strings[];
-WS_VAR_IMPORT const value_string gsm_a_dtap_msg_sm_strings[];
-WS_VAR_IMPORT const value_string gsm_a_dtap_msg_ss_strings[];
-WS_VAR_IMPORT const value_string gsm_a_dtap_msg_tp_strings[];
-WS_VAR_IMPORT const value_string gsm_a_sacch_msg_rr_strings[];
-WS_VAR_IMPORT const gchar *gsm_a_pd_str[];
-
-extern const value_string gsm_a_qos_del_of_err_sdu_vals[];
-extern const value_string gsm_a_qos_del_order_vals[];
-extern const value_string gsm_a_qos_traffic_cls_vals[];
-extern const value_string gsm_a_qos_ber_vals[];
-extern const value_string gsm_a_qos_sdu_err_rat_vals[];
-extern const value_string gsm_a_qos_traff_hdl_pri_vals[];
-
-extern const value_string gsm_a_type_of_number_values[];
-extern const value_string gsm_a_numbering_plan_id_values[]; 
+WS_DLL_PUBLIC const value_string gsm_a_bssmap_msg_strings[];
+WS_DLL_PUBLIC const value_string gsm_a_dtap_msg_mm_strings[];
+WS_DLL_PUBLIC const value_string gsm_a_dtap_msg_rr_strings[];
+WS_DLL_PUBLIC const value_string gsm_a_dtap_msg_cc_strings[];
+WS_DLL_PUBLIC const value_string gsm_a_dtap_msg_gmm_strings[];
+WS_DLL_PUBLIC const value_string gsm_a_dtap_msg_sms_strings[];
+WS_DLL_PUBLIC const value_string gsm_a_dtap_msg_sm_strings[];
+WS_DLL_PUBLIC const value_string gsm_a_dtap_msg_ss_strings[];
+WS_DLL_PUBLIC const value_string gsm_a_dtap_msg_tp_strings[];
+WS_DLL_PUBLIC const value_string gsm_a_rr_short_pd_msg_strings[];
+WS_DLL_PUBLIC const gchar *gsm_a_pd_str[];
+
+extern const value_string gsm_a_sm_qos_del_of_err_sdu_vals[];
+extern const value_string gsm_a_sm_qos_traffic_cls_vals[];
+extern const value_string gsm_a_sm_qos_ber_vals[];
+extern const value_string gsm_a_sm_qos_sdu_err_rat_vals[];
+extern const value_string gsm_a_sm_qos_traff_hdl_pri_vals[];
+
+extern const value_string gsm_a_dtap_type_of_number_values[];
+extern const value_string gsm_a_dtap_numbering_plan_id_values[];
+extern const value_string gsm_a_sms_vals[];
+extern const value_string tighter_cap_level_vals[];
+extern value_string_ext gsm_a_rr_rxlev_vals_ext;
+extern const value_string gsm_a_gm_type_of_ciph_alg_vals[];
+
+extern value_string_ext nas_eps_emm_cause_values_ext;
 
 typedef enum
 {
-       /* Common Information Elements [3] 10.5.1 */
-       DE_CELL_ID,                             /* Cell Identity */
-       DE_CIPH_KEY_SEQ_NUM,    /* Ciphering Key Sequence Number */
-       DE_LAI,                                 /* Location Area Identification */
-       DE_MID,                                 /* Mobile Identity */
-       DE_MS_CM_1,                             /* Mobile Station Classmark 1 */
-       DE_MS_CM_2,                             /* Mobile Station Classmark 2 */
-       DE_MS_CM_3,                             /* Mobile Station Classmark 3 */
-       DE_SPARE_NIBBLE,                        /* Spare Half Octet */
-       DE_D_GB_CALL_REF,               /* Descriptive group or broadcast call reference */
-       DE_G_CIPH_KEY_NUM,              /* Group Cipher Key Number */
-       DE_PD_SAPI,                             /* PD and SAPI $(CCBS)$ */
-       DE_PRIO,                                /* Priority Level */
-       DE_PLMN_LIST,                   /* PLMN List */
-
-       DE_COMMON_NONE                                                  /* NONE */
+    /* Common Information Elements [3] 10.5.1 */
+    DE_CELL_ID,                        /* Cell Identity */
+    DE_CIPH_KEY_SEQ_NUM,               /* Ciphering Key Sequence Number */
+    DE_LAI,                            /* Location Area Identification */
+    DE_MID,                            /* Mobile Identity */
+    DE_MS_CM_1,                        /* Mobile Station Classmark 1 */
+    DE_MS_CM_2,                        /* Mobile Station Classmark 2 */
+    DE_MS_CM_3,                        /* Mobile Station Classmark 3 */
+    DE_SPARE_NIBBLE,                   /* Spare Half Octet */
+    DE_D_GB_CALL_REF,                  /* Descriptive group or broadcast call reference */
+    DE_G_CIPH_KEY_NUM,                 /* Group Cipher Key Number */
+    DE_PD_SAPI,                        /* PD and SAPI $(CCBS)$ */
+    DE_PRIO,                           /* Priority Level */
+    DE_CN_COMMON_GSM_MAP_NAS_SYS_INFO, /* CN Common GSM-MAP NAS system information */
+    DE_CS_DOMAIN_SPEC_SYS_INFO,        /* CS domain specific system information */
+    DE_PS_DOMAIN_SPEC_SYS_INFO,        /* PS domain specific system information */
+    DE_PLMN_LIST,                      /* PLMN List */
+    DE_NAS_CONT_FOR_PS_HO,             /* 10.5.1.14 NAS container for PS HO */
+    DE_MS_NET_FEAT_SUP,                /* 10.5.1.15 MS network feature support */
+
+    DE_COMMON_NONE          /* NONE */
 }
 common_elem_idx_t;
 
 typedef enum
 {
-       BE_CIC,  /* Circuit Identity Code */
-       BE_RSVD_1,       /* Reserved */
-       BE_RES_AVAIL,    /* Resource Available */
-       BE_CAUSE,        /* Cause */
-       BE_CELL_ID,      /* Cell Identifier */
-       BE_PRIO,         /* Priority */
-       BE_L3_HEADER_INFO,       /* Layer 3 Header Information */
-       BE_IMSI,         /* IMSI */
-       BE_TMSI,         /* TMSI */
-       BE_ENC_INFO,     /* Encryption Information */
-       BE_CHAN_TYPE,    /* Channel Type */
-       BE_PERIODICITY,  /* Periodicity */
-       BE_EXT_RES_IND,  /* Extended Resource Indicator */
-       BE_NUM_MS,       /* Number Of MSs */
-       BE_RSVD_2,       /* Reserved */
-       BE_RSVD_3,       /* Reserved */
-       BE_RSVD_4,       /* Reserved */
-       BE_CM_INFO_2,    /* Classmark Information Type 2 */
-       BE_CM_INFO_3,    /* Classmark Information Type 3 */
-       BE_INT_BAND,     /* Interference Band To Be Used */
-       BE_RR_CAUSE,     /* RR Cause */
-       BE_RSVD_5,       /* Reserved */
-       BE_L3_INFO,      /* Layer 3 Information */
-       BE_DLCI,         /* DLCI */
-       BE_DOWN_DTX_FLAG,        /* Downlink DTX Flag */
-       BE_CELL_ID_LIST,         /* Cell Identifier List */
-       BE_RESP_REQ,     /* Response Request */
-       BE_RES_IND_METHOD,       /* Resource Indication Method */
-       BE_CM_INFO_1,    /* Classmark Information Type 1 */
-       BE_CIC_LIST,     /* Circuit Identity Code List */
-       BE_DIAG,         /* Diagnostic */
-       BE_L3_MSG,       /* Layer 3 Message Contents */
-       BE_CHOSEN_CHAN,  /* Chosen Channel */
-       BE_TOT_RES_ACC,  /* Total Resource Accessible */
-       BE_CIPH_RESP_MODE,       /* Cipher Response Mode */
-       BE_CHAN_NEEDED,  /* Channel Needed */
-       BE_TRACE_TYPE,   /* Trace Type */
-       BE_TRIGGERID,    /* TriggerID */
-       BE_TRACE_REF,    /* Trace Reference */
-       BE_TRANSID,      /* TransactionID */
-       BE_MID,  /* Mobile Identity */
-       BE_OMCID,        /* OMCID */
-       BE_FOR_IND,      /* Forward Indicator */
-       BE_CHOSEN_ENC_ALG,       /* Chosen Encryption Algorithm */
-       BE_CCT_POOL,     /* Circuit Pool */
-       BE_CCT_POOL_LIST,        /* Circuit Pool List */
-       BE_TIME_IND,     /* Time Indication */
-       BE_RES_SIT,      /* Resource Situation */
-       BE_CURR_CHAN_1,  /* Current Channel Type 1 */
-       BE_QUE_IND,      /* Queueing Indicator */
-       BE_SPEECH_VER,   /* Speech Version */
-       BE_ASS_REQ,      /* Assignment Requirement */
-       BE_TALKER_FLAG,  /* Talker Flag */
-       BE_CONN_REL_REQ,         /* Connection Release Requested */
-       BE_GROUP_CALL_REF,       /* Group Call Reference */
-       BE_EMLPP_PRIO,   /* eMLPP Priority */
-       BE_CONF_EVO_IND,         /* Configuration Evolution Indication */
-       BE_OLD2NEW_INFO,         /* Old BSS to New BSS Information */
-       BE_LSA_ID,       /* LSA Identifier */
-       BE_LSA_ID_LIST,  /* LSA Identifier List */
-       BE_LSA_INFO,     /* LSA Information */
-       BE_LCS_QOS,      /* LCS QoS */
-       BE_LSA_ACC_CTRL,         /* LSA access control suppression */
-       BE_LCS_PRIO,     /* LCS Priority */
-       BE_LOC_TYPE,     /* Location Type */
-       BE_LOC_EST,      /* Location Estimate */
-       BE_POS_DATA,     /* Positioning Data */
-       BE_LCS_CAUSE,    /* LCS Cause */
-       BE_LCS_CLIENT,   /* LCS Client Type */
-       BE_APDU,         /* APDU */
-       BE_NE_ID,        /* Network Element Identity */
-       BE_GPS_ASSIST_DATA,      /* GPS Assistance Data */
-       BE_DECIPH_KEYS,  /* Deciphering Keys */
-       BE_RET_ERR_REQ,  /* Return Error Request */
-       BE_RET_ERR_CAUSE,        /* Return Error Cause */
-       BE_SEG,  /* Segmentation */
-       BE_SERV_HO,     /* Service Handover */
-       BE_SRC_RNC_TO_TAR_RNC_UMTS,     /* Source RNC to target RNC transparent information (UMTS) */
-       BE_SRC_RNC_TO_TAR_RNC_CDMA,     /* Source RNC to target RNC transparent information (cdma2000) */
-       BE_GERAN_CLS_M, /* GERAN Classmark */
-       BE_GRAN_BSC_CONT,       /* GERAN BSC Container */
-       BE_NEW_BSS_TO_OLD_BSS_INF,      /* New BSS to Old BSS Information */
-       BE_INTER_SYS_INF,       /*      Inter-System Information */
-       BE_SNA_ACC_INF,         /* SNA Access Information */
-       BE_VSTK_RAND_INF,       /* VSTK_RAND Information */
-       BE_VSTK_INF,            /* VSTK Information */
-       BE_PAGING_INF,          /* Paging Information */
-       BE_IMEI,                        /* IMEI */
-       BE_VEL_EST,                     /* Velocity Estimate */
-       BE_VGCS_FEAT_FLG,       /* VGCS Feature Flags */
-       BE_TALKER_PRI,          /* Talker Priority */
-       BE_EMRG_SET_IND,        /* Emergency Set Indication */
-       BE_TALKER_ID,           /* Talker Identity */
-       BE_CELL_ID_LIST_SEG,/* Cell Identifier List Segment */
-       BE_SMS_TO_VGCS,         /* SMS to VGCS */
-       BE_VGCS_TALKER_MOD, /*  VGCS Talker Mode */
-       BE_VGS_VBS_CELL_STAT, /*        VGCS/VBS Cell Status */
-       BE_CELL_ID_LST_SEG_F_EST_CELLS, /*      Cell Identifier List Segment for established cells */
-       BE_CELL_ID_LST_SEG_F_CELL_TB_EST,       /* Cell Identifier List Segment for cells to be established */
-       BE_CELL_ID_LST_SEG_F_REL_CELL,  /* Cell Identifier List Segment for released cells - no user present */
-       BE_CELL_ID_LST_SEG_F_NOT_EST_CELL,      /* Cell Identifier List Segment for not established cells - no establishment possible */
-       BE_GANSS_ASS_DTA,       /*      GANSS Assistance Data */
-       BE_GANSS_POS_DTA,       /*      GANSS Positioning Data */
-       BE_GANSS_LOC_TYP,       /* GANSS Location Type */
-       BE_APP_DATA,            /* Application Data */
-       BE_DATA_ID,                     /* Data Identity */
-       BE_APP_DATA_INF,        /*  Application Data Information */
-       BE_MSISDN,                      /* MSISDN */
-       BE_AOIP_TRANS_LAY_ADD,  /*      AoIP Transport Layer Address */
-       BE_SPEECH_CODEC_LST,    /* Speech Codec List */
-       BE_SPEECH_CODEC,                /* Speech Codec */
-       BE_CALL_ID,                             /* Call Identifier */
-       BE_CALL_ID_LST,                 /* Call Identifier List */
-       BE_NONE /* NONE */
+    BE_UDEF_0,                          /* Undefined */
+    BE_CIC,                             /* Circuit Identity Code */
+    BE_RSVD_1,                          /* Reserved */
+    BE_RES_AVAIL,                       /* Resource Available */
+    BE_CAUSE,                           /* Cause */
+    BE_CELL_ID,                         /* Cell Identifier */
+    BE_PRIO,                            /* Priority */
+    BE_L3_HEADER_INFO,                  /* Layer 3 Header Information */
+    BE_IMSI,                            /* IMSI */
+    BE_TMSI,                            /* TMSI */
+    BE_ENC_INFO,                        /* Encryption Information */
+    BE_CHAN_TYPE,                       /* Channel Type */
+    BE_PERIODICITY,                     /* Periodicity */
+    BE_EXT_RES_IND,                     /* Extended Resource Indicator */
+    BE_NUM_MS,                          /* Number Of MSs */
+    BE_RSVD_2,                          /* Reserved */
+    BE_RSVD_3,                          /* Reserved */
+    BE_RSVD_4,                          /* Reserved */
+    BE_CM_INFO_2,                       /* Classmark Information Type 2 */
+    BE_CM_INFO_3,                       /* Classmark Information Type 3 */
+    BE_INT_BAND,                        /* Interference Band To Be Used */
+    BE_RR_CAUSE,                        /* RR Cause */
+    BE_RSVD_5,                          /* Reserved */
+    BE_L3_INFO,                         /* Layer 3 Information */
+    BE_DLCI,                            /* DLCI */
+    BE_DOWN_DTX_FLAG,                   /* Downlink DTX Flag */
+    BE_CELL_ID_LIST,                    /* Cell Identifier List */
+    BE_RESP_REQ,                        /* Response Request */
+    BE_RES_IND_METHOD,                  /* Resource Indication Method */
+    BE_CM_INFO_1,                       /* Classmark Information Type 1 */
+    BE_CIC_LIST,                        /* Circuit Identity Code List */
+    BE_DIAG,                            /* Diagnostic */
+    BE_L3_MSG,                          /* Layer 3 Message Contents */
+    BE_CHOSEN_CHAN,                     /* Chosen Channel */
+    BE_TOT_RES_ACC,                     /* Total Resource Accessible */
+    BE_CIPH_RESP_MODE,                  /* Cipher Response Mode */
+    BE_CHAN_NEEDED,                     /* Channel Needed */
+    BE_TRACE_TYPE,                      /* Trace Type */
+    BE_TRIGGERID,                       /* TriggerID */
+    BE_TRACE_REF,                       /* Trace Reference */
+    BE_TRANSID,                         /* TransactionID */
+    BE_MID,                             /* Mobile Identity */
+    BE_OMCID,                           /* OMCID */
+    BE_FOR_IND,                         /* Forward Indicator */
+    BE_CHOSEN_ENC_ALG,                  /* Chosen Encryption Algorithm */
+    BE_CCT_POOL,                        /* Circuit Pool */
+    BE_CCT_POOL_LIST,                   /* Circuit Pool List */
+    BE_TIME_IND,                        /* Time Indication */
+    BE_RES_SIT,                         /* Resource Situation */
+    BE_CURR_CHAN_1,                     /* Current Channel Type 1 */
+    BE_QUE_IND,                         /* Queueing Indicator */
+    BE_ASS_REQ,                         /* Assignment Requirement */
+    BE_UDEF_52,                         /* Undefined */
+    BE_TALKER_FLAG,                     /* Talker Flag */
+    BE_CONN_REL_REQ,                    /* Connection Release Requested */
+    BE_GROUP_CALL_REF,                  /* Group Call Reference */
+    BE_EMLPP_PRIO,                      /* eMLPP Priority */
+    BE_CONF_EVO_IND,                    /* Configuration Evolution Indication */
+    BE_OLD2NEW_INFO,                    /* Old BSS to New BSS Information */
+    BE_LSA_ID,                          /* LSA Identifier */
+    BE_LSA_ID_LIST,                     /* LSA Identifier List */
+    BE_LSA_INFO,                        /* LSA Information */
+    BE_LCS_QOS,                         /* LCS QoS */
+    BE_LSA_ACC_CTRL,                    /* LSA access control suppression */
+    BE_SPEECH_VER,                      /* Speech Version */
+    BE_UDEF_65,                         /* Undefined */
+    BE_UDEF_66,                         /* Undefined */
+    BE_LCS_PRIO,                        /* LCS Priority */
+    BE_LOC_TYPE,                        /* Location Type */
+    BE_LOC_EST,                         /* Location Estimate */
+    BE_POS_DATA,                        /* Positioning Data */
+    BE_LCS_CAUSE,                       /* 3.2.2.66 LCS Cause */
+    BE_LCS_CLIENT,                      /* 10.14 LCS Client Type */
+    BE_APDU,                            /* APDU */
+    BE_NE_ID,                           /* Network Element Identity */
+    BE_GPS_ASSIST_DATA,                 /* GPS Assistance Data */
+    BE_DECIPH_KEYS,                     /* Deciphering Keys */
+    BE_RET_ERR_REQ,                     /* Return Error Request */
+    BE_RET_ERR_CAUSE,                   /* Return Error Cause */
+    BE_SEG,                             /* Segmentation */
+    BE_SERV_HO,                         /* Service Handover */
+    BE_SRC_RNC_TO_TAR_RNC_UMTS,         /* Source RNC to target RNC transparent information (UMTS) */
+    BE_SRC_RNC_TO_TAR_RNC_CDMA,         /* Source RNC to target RNC transparent information (cdma2000) */
+    BE_GERAN_CLS_M,                     /* GERAN Classmark */
+    BE_GERAN_BSC_CONT,                  /* GERAN BSC Container */
+    BE_VEL_EST,                         /* Velocity Estimate */
+    BE_UDEF_86,                         /* Undefined */
+    BE_UDEF_87,                         /* Undefined */
+    BE_UDEF_88,                         /* Undefined */
+    BE_UDEF_89,                         /* Undefined */
+    BE_UDEF_90,                         /* Undefined */
+    BE_UDEF_91,                         /* Undefined */
+    BE_UDEF_92,                         /* Undefined */
+    BE_UDEF_93,                         /* Undefined */
+    BE_UDEF_94,                         /* Undefined */
+    BE_UDEF_95,                         /* Undefined */
+    BE_UDEF_96,                         /* Undefined */
+    BE_NEW_BSS_TO_OLD_BSS_INF,          /* New BSS to Old BSS Information */
+    BE_UDEF_98,                         /* Undefined */
+    BE_INTER_SYS_INF,                   /* Inter-System Information */
+    BE_SNA_ACC_INF,                     /* SNA Access Information */
+    BE_VSTK_RAND_INF,                   /* VSTK_RAND Information */
+    BE_VSTK_INF,                        /* VSTK Information */
+    BE_PAGING_INF,                      /* Paging Information */
+    BE_IMEI,                            /* IMEI */
+    BE_VGCS_FEAT_FLG,                   /* VGCS Feature Flags */
+    BE_TALKER_PRI,                      /* Talker Priority */
+    BE_EMRG_SET_IND,                    /* Emergency Set Indication */
+    BE_TALKER_ID,                       /* Talker Identity */
+    BE_CELL_ID_LIST_SEG,                /* Cell Identifier List Segment */
+    BE_SMS_TO_VGCS,                     /* SMS to VGCS */
+    BE_VGCS_TALKER_MOD,                 /* VGCS Talker Mode */
+    BE_VGS_VBS_CELL_STAT,               /* VGCS/VBS Cell Status */
+    BE_CELL_ID_LST_SEG_F_EST_CELLS,     /* Cell Identifier List Segment for established cells */
+    BE_CELL_ID_LST_SEG_F_CELL_TB_EST,   /* Cell Identifier List Segment for cells to be established */
+    BE_CELL_ID_LST_SEG_F_REL_CELL,      /* Cell Identifier List Segment for released cells - no user present */
+    BE_CELL_ID_LST_SEG_F_NOT_EST_CELL,  /* Cell Identifier List Segment for not established cells - no establishment possible */
+    BE_GANSS_ASS_DTA,                   /* GANSS Assistance Data */
+    BE_GANSS_POS_DTA,                   /* GANSS Positioning Data */
+    BE_GANSS_LOC_TYP,                   /* GANSS Location Type */
+    BE_APP_DATA,                        /* Application Data */
+    BE_DATA_ID,                         /* Data Identity */
+    BE_APP_DATA_INF,                    /* Application Data Information */
+    BE_MSISDN,                          /* MSISDN */
+    BE_AOIP_TRANS_LAY_ADD,              /* AoIP Transport Layer Address */
+    BE_SPEECH_CODEC_LST,                /* Speech Codec List */
+    BE_SPEECH_CODEC,                    /* Speech Codec */
+    BE_CALL_ID,                         /* Call Identifier */
+    BE_CALL_ID_LST,                     /* Call Identifier List */
+    BE_A_ITF_SEL_FOR_RESET,             /* A-Interface Selector for RESET */
+    BE_UDEF_130,                        /* Undefined */
+    BE_KC128,                           /* Kc128 */
+    BE_CSG_ID,                          /* CSG Identifier */
+    BE_REDIR_ATT_FLG,                   /* Redirect Attempt Flag               3.2.2.111    */
+    BE_REROUTE_REJ_CAUSE,               /* Reroute Reject Cause                3.2.2.112    */
+    BE_SEND_SEQN,                       /* Send Sequence Number                3.2.2.113    */
+    BE_REROUTE_OUTCOME,                 /* Reroute complete outcome            3.2.2.114    */
+    BE_GLOBAL_CALL_REF,                 /* Global Call Reference               3.2.2.115    */
+    BE_LCLS_CONF,                       /* LCLS-Configuration                  3.2.2.116    */
+    BE_LCLS_CON_STATUS_CONTROL,         /* LCLS-Connection-Status-Control      3.2.2.117    */
+    BE_LCLS_CORR_NOT_NEEDED,            /* LCLS-Correlation-Not-Needed         3.2.2.118    */
+    BE_LCLS_BSS_STATUS,                 /* LCLS-BSS-Status                     3.2.2.119    */
+    BE_LCLS_BREAK_REQ,                  /* LCLS-Break-Request                  3.2.2.120    */
+    BE_CSFB_IND,                        /* CSFB Indication                     3.2.2.121    */
+#if 0
+    BE_CS_TO_PS_SRVCC,                  /* CS to PS SRVCC                      3.2.2.122    */
+    BE_SRC_ENB_2_TGT_ENB_TRANSP_INF,    /* Source eNB to target eNB transparent information (E-UTRAN)" 3.2.2.123    */
+    BE_CS_TO_PS_SRVCC_IND,              /* CS to PS SRVCC Indication           3.2.2.124    */
+    BE_CN_TO_MS_TRANSP,                 /* CN to MS transparent information    3.2.2.125    */
+#endif
+    BE_SELECTED_PLMN_ID,                /* Selected PLMN ID                    3.2.2.126    */
+    BE_NONE                             /* NONE */
 }
 bssmap_elem_idx_t;
 
 typedef enum
 {
-       /* BSS LAP Elements 5 */
-       DE_BLAP_RES1,                   /* Reserved */
-       DE_BLAP_TA,                             /* Timing Advance */
-       DE_BLAP_RES3,                   /* Reserved */                  /* (note) */
-       DE_BLAP_RES4,                   /* Cell Identity */     
-       DE_BLAP_RES5,                   /* Reserved */                  /* (note) */
-       DE_BLAP_RES6,                   /* Reserved */                  /* (note) */
-       DE_BLAP_RES7,                   /* Reserved */                  /* (note) */
-       DE_BLAP_CH_DESC,                /* Channel Description */
-       DE_BLAP_RES9,                   /* Reserved */                  /* (note) */
-       DE_BLAP_RES10,                  /* Reserved */                  /* (note) */
-       DE_BLAP_RES11,                  /* Reserved */                  /* (note) */
-       DE_BLAP_MEAS_REP,               /* Measurement Report */
-       DE_BLAP_RES13,                  /* Reserved */                  /* (note) */
-       DE_BLAP_CAUSE,                  /* Cause */
-       DE_BLAP_RRLP_FLG,               /* RRLP Flag */
-       DE_BLAP_RRLP_IE,                /* RRLP IE */
-       DE_BLAP_CELL_ID_LIST,   /* Cell Identity List */
-       DE_BLAP_ENH_MEAS_REP,   /* Enhanced Measurement Report */
-       DE_BLAP_LAC,                    /* Location Area Code */
-       DE_BLAP_FREQ_LIST,              /* Frequency List */
-       DE_BLAP_MS_POW,                 /* MS Power */
-       DE_BLAP_DELTA_TIME,             /* Delta Timer */
-       DE_BLAP_SERV_CELL_ID,   /* Serving Cell Identifier */
-       DE_BLAP_ENC_KEY,                /* Encryption Key (Kc) */
-       DE_BLAP_CIP_M_SET,              /* Cipher Mode Setting */
-       DE_BLAP_CH_MODE,                /* Channel Mode */
-       DE_BLAP_POLL_REP,               /* Polling Repetition */
-       DE_BLAP_PKT_CH_DESC,    /* Packet Channel Description */
-       DE_BLAP_TLLI,                   /* TLLI */
-       DE_BLAP_TFI,                    /* TFI */
-       DE_BLAP_START_TIME,             /* Starting Time */
-       BSSLAP_NONE                             /* NONE */
+    /* BSSMAP LE Elements */
+    DE_BMAPLE_LCSQOS,           /* LCS QOS */
+    DE_BMAPLE_LCS_PRIO,         /* LCS Priority */
+    DE_BMAPLE_LOC_TYPE,         /* Location Type */
+    DE_BMAPLE_GANSS_LOC_TYPE,   /* GANSS Location Type */
+    DE_BMAPLE_GEO_LOC,          /* 10.9 Geographic Location */
+    DE_BMAPLE_POS_DATA,         /* Positioning Data */
+    DE_BMAPLE_GANSS_POS_DATA,   /* GANSS Positioning Data */
+    DE_BMAPLE_VELOC_DATA,       /* Velocity Data */
+    DE_BMAPLE_LCS_CAUSE,        /* LCS Cause */
+    DE_BMAPLE_LCS_CLIENT_TYPE,  /* LCS Client Type */
+    DE_BMAPLE_APDU,             /* 10.3 APDU */
+    DE_BMAPLE_NETWORK_ELEM_ID,  /* Network Element Identity */
+    DE_BMAPLE_REQ_GPS_ASSIST_D, /* 10.10 Requested GPS Assistance Data */
+    DE_BMAPLE_REQ_GNSS_ASSIST_D,/* Requested GANSS Assistance Data */
+    DE_BMAPLE_DECIPH_KEYS,      /* 10.8 Deciphering Keys */
+    DE_BMAPLE_RETURN_ERROR_REQ, /* Return Error Request */
+    DE_BMAPLE_RETURN_ERROR_CAUSE,   /* Return Error Cause */
+    DE_BMAPLE_SEGMENTATION,     /* Segmentation */
+    DE_BMAPLE_CLASSMARK_TYPE_3, /* Classmark Information Type 3 */
+    DE_BMAPLE_CAUSE,            /* 10.4 Cause */
+    DE_BMAPLE_CELL_IDENTIFIER,  /* 10.5 Cell Identifier */
+    DE_BMAPLE_CHOSEN_CHANNEL,   /* 10.6 Chosen Channel */
+    DE_BMAPLE_IMSI,             /* 10.11 IMSI */
+    DE_BMAPLE_RES1,             /* Reserved */
+    DE_BMAPLE_RES2,             /* Reserved */
+    DE_BMAPLE_RES3,             /* Reserved */
+    DE_BMAPLE_LCS_CAPABILITY,   /* LCS Capability */
+    DE_BMAPLE_PACKET_MEAS_REP,  /* Packet Measurement Report */
+    DE_BMAPLE_MEAS_CELL_ID,     /* Measured Cell Identity */
+    DE_BMAPLE_IMEI,             /* IMEI */
+    BMAPLE_NONE                 /* NONE */
+}
+bssmap_le_elem_idx_t;
+
+typedef enum
+{
+    /* BSS LAP Elements 5 */
+    DE_BLAP_RES1,           /* Reserved */
+    DE_BLAP_TA,             /* Timing Advance */
+    DE_BLAP_RES3,           /* Reserved */          /* (note) */
+    DE_BLAP_RES4,           /* Cell Identity */
+    DE_BLAP_RES5,           /* Reserved */          /* (note) */
+    DE_BLAP_RES6,           /* Reserved */          /* (note) */
+    DE_BLAP_RES7,           /* Reserved */          /* (note) */
+    DE_BLAP_CH_DESC,        /* Channel Description */
+    DE_BLAP_RES9,           /* Reserved */          /* (note) */
+    DE_BLAP_RES10,          /* Reserved */          /* (note) */
+    DE_BLAP_RES11,          /* Reserved */          /* (note) */
+    DE_BLAP_MEAS_REP,       /* Measurement Report */
+    DE_BLAP_RES13,          /* Reserved */          /* (note) */
+    DE_BLAP_CAUSE,          /* Cause */
+    DE_BLAP_RRLP_FLG,       /* RRLP Flag */
+    DE_BLAP_RRLP_IE,        /* RRLP IE */
+    DE_BLAP_CELL_ID_LIST,   /* Cell Identity List */
+    DE_BLAP_ENH_MEAS_REP,   /* Enhanced Measurement Report */
+    DE_BLAP_LAC,            /* Location Area Code */
+    DE_BLAP_FREQ_LIST,      /* Frequency List */
+    DE_BLAP_MS_POW,         /* MS Power */
+    DE_BLAP_DELTA_TIME,     /* Delta Timer */
+    DE_BLAP_SERV_CELL_ID,   /* Serving Cell Identifier */
+    DE_BLAP_ENC_KEY,        /* Encryption Key (Kc) */
+    DE_BLAP_CIP_M_SET,      /* Cipher Mode Setting */
+    DE_BLAP_CH_MODE,        /* Channel Mode */
+    DE_BLAP_POLL_REP,       /* Polling Repetition */
+    DE_BLAP_PKT_CH_DESC,    /* Packet Channel Description */
+    DE_BLAP_TLLI,           /* TLLI */
+    DE_BLAP_TFI,            /* TFI */
+    DE_BLAP_START_TIME,     /* Starting Time */
+    BSSLAP_NONE             /* NONE */
 }
 bsslap_elem_idx_t;
 
 typedef enum
 {
-       /* Mobility Management Information Elements [3] 10.5.3 */
-       DE_AUTH_PARAM_RAND,                             /* Authentication Parameter RAND */
-       DE_AUTH_PARAM_AUTN,                             /* Authentication Parameter AUTN (UMTS authentication challenge only) */
-       DE_AUTH_RESP_PARAM,                             /* Authentication Response Parameter */
-       DE_AUTH_RESP_PARAM_EXT,                 /* Authentication Response Parameter (extension) (UMTS authentication challenge only) */
-       DE_AUTH_FAIL_PARAM,                             /* Authentication Failure Parameter (UMTS authentication challenge only) */
-       DE_CM_SRVC_TYPE,                                /* CM Service Type */
-       DE_ID_TYPE,                                             /* Identity Type */
-       DE_LOC_UPD_TYPE,                                /* Location Updating Type */
-       DE_NETWORK_NAME,                                /* Network Name */
-       DE_REJ_CAUSE,                                   /* Reject Cause */
-       DE_FOP,                                                 /* Follow-on Proceed */
-       DE_TIME_ZONE,                                   /* Time Zone */
-       DE_TIME_ZONE_TIME,                              /* Time Zone and Time */
-       DE_CTS_PERM,                                    /* CTS Permission */
-       DE_LSA_ID,                                              /* LSA Identifier */
-       DE_DAY_SAVING_TIME,                             /* Daylight Saving Time */
-       DE_EMERGENCY_NUM_LIST,                  /* Emergency Number List */
-       /* Call Control Information Elements 10.5.4 */
-       DE_AUX_STATES,                                  /* Auxiliary States */
-       DE_BEARER_CAP,                                  /* Bearer Capability */
-       DE_CC_CAP,                                              /* Call Control Capabilities */
-       DE_CALL_STATE,                                  /* Call State */
-       DE_CLD_PARTY_BCD_NUM,                   /* Called Party BCD Number */
-       DE_CLD_PARTY_SUB_ADDR,                  /* Called Party Subaddress */
-       DE_CLG_PARTY_BCD_NUM,                   /* Calling Party BCD Number */
-       DE_CLG_PARTY_SUB_ADDR,                  /* Calling Party Subaddress */
-       DE_CAUSE,                                               /* Cause */
-       DE_CLIR_SUP,                                    /* CLIR Suppression */
-       DE_CLIR_INV,                                    /* CLIR Invocation */
-       DE_CONGESTION,                                  /* Congestion Level */
-       DE_CONN_NUM,                                    /* Connected Number */
-       DE_CONN_SUB_ADDR,                               /* Connected Subaddress */
-       DE_FACILITY,                                    /* Facility */
-       DE_HLC,                                                 /* High Layer Compatibility */
-       DE_KEYPAD_FACILITY,                             /* Keypad Facility */
-       DE_LLC,                                                 /* Low Layer Compatibility */
-       DE_MORE_DATA,                                   /* More Data */
-       DE_NOT_IND,                                             /* Notification Indicator */
-       DE_PROG_IND,                                    /* Progress Indicator */
-       DE_RECALL_TYPE,                                 /* Recall type $(CCBS)$ */
-       DE_RED_PARTY_BCD_NUM,                   /* Redirecting Party BCD Number */
-       DE_RED_PARTY_SUB_ADDR,                  /* Redirecting Party Subaddress */
-       DE_REPEAT_IND,                                  /* Repeat Indicator */
-       DE_REV_CALL_SETUP_DIR,                  /* Reverse Call Setup Direction */
-       DE_SETUP_CONTAINER,                             /* SETUP Container $(CCBS)$ */
-       DE_SIGNAL,                                              /* Signal */
-       DE_SS_VER_IND,                                  /* SS Version Indicator */
-       DE_USER_USER,                                   /* User-user */
-       DE_ALERT_PATTERN,                               /* Alerting Pattern $(NIA)$ */
-       DE_ALLOWED_ACTIONS,                             /* Allowed Actions $(CCBS)$ */
-       DE_SI,                                                  /* Stream Identifier */
-       DE_NET_CC_CAP,                                  /* Network Call Control Capabilities */
-       DE_CAUSE_NO_CLI,                                /* Cause of No CLI */
-       DE_IMM_MOD_IND,                                 /* Immediate Modification Indicator */
-       DE_SUP_CODEC_LIST,                              /* Supported Codec List */
-       DE_SRVC_CAT,                                    /* Service Category */
-       /* Short Message Service Information Elements [5] 8.1.4 */
-       DE_CP_USER_DATA,                                /* CP-User Data */
-       DE_CP_CAUSE,                                    /* CP-Cause */
-       /* Tests procedures information elements 3GPP TS 44.014 6.4.0 and 3GPP TS 34.109 6.4.0 */
-       DE_TP_SUB_CHANNEL,                      /* Close TCH Loop Cmd Sub-channel */
-       DE_TP_ACK,                      /* Open Loop Cmd Ack */
-       DE_TP_LOOP_TYPE,                        /* Close Multi-slot Loop Cmd Loop type*/
-       DE_TP_LOOP_ACK,                 /* Close Multi-slot Loop Ack Result */
-       DE_TP_TESTED_DEVICE,                    /* Test Interface Tested device */
-       DE_TP_PDU_DESCRIPTION,                  /* GPRS Test Mode Cmd PDU description */
-       DE_TP_MODE_FLAG,                        /* GPRS Test Mode Cmd Mode flag */
-       DE_TP_EGPRS_MODE_FLAG,                  /* EGPRS Start Radio Block Loopback Cmd Mode flag */
-       DE_TP_UE_TEST_LOOP_MODE,                        /* Close UE Test Loop Mode */
-       DE_TP_UE_POSITIONING_TECHNOLOGY,                        /* UE Positioning Technology */
-       DE_TP_RLC_SDU_COUNTER_VALUE,                    /* RLC SDU Counter Value */
-       DE_NONE                                                 /* NONE */
+    /* Mobility Management Information Elements [3] 10.5.3 */
+    DE_AUTH_PARAM_RAND,             /* Authentication Parameter RAND */
+    DE_AUTH_PARAM_AUTN,             /* Authentication Parameter AUTN (UMTS and EPS authentication challenge) */
+    DE_AUTH_RESP_PARAM,             /* Authentication Response Parameter */
+    DE_AUTH_RESP_PARAM_EXT,         /* Authentication Response Parameter (extension) (UMTS authentication challenge only) */
+    DE_AUTH_FAIL_PARAM,             /* Authentication Failure Parameter (UMTS and EPS authentication challenge) */
+    DE_CM_SRVC_TYPE,                /* CM Service Type */
+    DE_ID_TYPE,                     /* Identity Type */
+    DE_LOC_UPD_TYPE,                /* Location Updating Type */
+    DE_NETWORK_NAME,                /* Network Name */
+    DE_REJ_CAUSE,                   /* Reject Cause */
+    DE_FOP,                         /* Follow-on Proceed */
+    DE_TIME_ZONE,                   /* Time Zone */
+    DE_TIME_ZONE_TIME,              /* Time Zone and Time */
+    DE_CTS_PERM,                    /* CTS Permission */
+    DE_LSA_ID,                      /* LSA Identifier */
+    DE_DAY_SAVING_TIME,             /* Daylight Saving Time */
+    DE_EMERGENCY_NUM_LIST,          /* Emergency Number List */
+    DE_ADD_UPD_PARAMS,              /* Additional update parameters */
+    DE_MM_TIMER,                    /* MM Timer */
+    /* Call Control Information Elements 10.5.4 */
+    DE_AUX_STATES,                  /* Auxiliary States */
+    DE_BEARER_CAP,                  /* Bearer Capability */
+    DE_CC_CAP,                      /* Call Control Capabilities */
+    DE_CALL_STATE,                  /* Call State */
+    DE_CLD_PARTY_BCD_NUM,           /* Called Party BCD Number */
+    DE_CLD_PARTY_SUB_ADDR,          /* Called Party Subaddress */
+    DE_CLG_PARTY_BCD_NUM,           /* Calling Party BCD Number */
+    DE_CLG_PARTY_SUB_ADDR,          /* Calling Party Subaddress */
+    DE_CAUSE,                       /* Cause */
+    DE_CLIR_SUP,                    /* CLIR Suppression */
+    DE_CLIR_INV,                    /* CLIR Invocation */
+    DE_CONGESTION,                  /* Congestion Level */
+    DE_CONN_NUM,                    /* Connected Number */
+    DE_CONN_SUB_ADDR,               /* Connected Subaddress */
+    DE_FACILITY,                    /* Facility */
+    DE_HLC,                         /* High Layer Compatibility */
+    DE_KEYPAD_FACILITY,             /* Keypad Facility */
+    DE_LLC,                         /* Low Layer Compatibility */
+    DE_MORE_DATA,                   /* More Data */
+    DE_NOT_IND,                     /* Notification Indicator */
+    DE_PROG_IND,                    /* Progress Indicator */
+    DE_RECALL_TYPE,                 /* Recall type $(CCBS)$ */
+    DE_RED_PARTY_BCD_NUM,           /* Redirecting Party BCD Number */
+    DE_RED_PARTY_SUB_ADDR,          /* Redirecting Party Subaddress */
+    DE_REPEAT_IND,                  /* Repeat Indicator */
+    DE_REV_CALL_SETUP_DIR,          /* Reverse Call Setup Direction */
+    DE_SETUP_CONTAINER,             /* SETUP Container $(CCBS)$ */
+    DE_SIGNAL,                      /* Signal */
+    DE_SS_VER_IND,                  /* SS Version Indicator */
+    DE_USER_USER,                   /* User-user */
+    DE_ALERT_PATTERN,               /* Alerting Pattern $(NIA)$ */
+    DE_ALLOWED_ACTIONS,             /* Allowed Actions $(CCBS)$ */
+    DE_SI,                          /* Stream Identifier */
+    DE_NET_CC_CAP,                  /* Network Call Control Capabilities */
+    DE_CAUSE_NO_CLI,                /* Cause of No CLI */
+    DE_SUP_CODEC_LIST,              /* Supported Codec List */
+    DE_SERV_CAT,                    /* Service Category */
+    DE_REDIAL,                      /* 10.5.4.34 Redial */
+    DE_NET_INIT_SERV_UPG,           /* 10.5.4.35 Network-initiated Service Upgrade ind */
+    /* Short Message Service Information Elements [5] 8.1.4 */
+    DE_CP_USER_DATA,                /* CP-User Data */
+    DE_CP_CAUSE,                    /* CP-Cause */
+    /* Tests procedures information elements 3GPP TS 44.014 6.4.0 and 3GPP TS 34.109 6.4.0 */
+    DE_TP_SUB_CHANNEL,                  /* Close TCH Loop Cmd Sub-channel */
+    DE_TP_ACK,                          /* Open Loop Cmd Ack */
+    DE_TP_LOOP_TYPE,                    /* Close Multi-slot Loop Cmd Loop type*/
+    DE_TP_LOOP_ACK,                     /* Close Multi-slot Loop Ack Result */
+    DE_TP_TESTED_DEVICE,                /* Test Interface Tested device */
+    DE_TP_PDU_DESCRIPTION,              /* GPRS Test Mode Cmd PDU description */
+    DE_TP_MODE_FLAG,                    /* GPRS Test Mode Cmd Mode flag */
+    DE_TP_EGPRS_MODE_FLAG,              /* EGPRS Start Radio Block Loopback Cmd Mode flag */
+    DE_TP_MS_POSITIONING_TECHNOLOGY,    /* MS Positioning Technology */
+    DE_TP_UE_TEST_LOOP_MODE,            /* Close UE Test Loop Mode */
+    DE_TP_UE_POSITIONING_TECHNOLOGY,    /* UE Positioning Technology */
+    DE_TP_RLC_SDU_COUNTER_VALUE,        /* RLC SDU Counter Value */
+    DE_TP_EPC_UE_TEST_LOOP_MODE,        /* UE Test Loop Mode */
+    DE_TP_EPC_UE_TL_A_LB_SETUP,         /* UE Test Loop Mode A LB Setup */
+    DE_TP_EPC_UE_TL_B_LB_SETUP,         /* UE Test Loop Mode B LB Setup */
+    DE_TP_EPC_UE_TL_C_SETUP,            /* UE Test Loop Mode C Setup */
+    DE_TP_EPC_UE_POSITIONING_TECHNOLOGY,/* UE Positioning Technology */
+    DE_TP_EPC_MBMS_PACKET_COUNTER_VALUE,/* MBMS Packet Counter Value */
+    DE_TP_EPC_ELLIPSOID_POINT_WITH_ALT, /* ellipsoidPointWithAltitude */
+    DE_TP_EPC_HORIZONTAL_VELOCITY,      /* horizontalVelocity */
+    DE_TP_EPC_GNSS_TOD_MSEC,            /* gnss-TOD-msec */
+    /* Group Call Control Service Information Elements ETSI TS 100 948 V8.1.0 (GSM 04.68 version 8.1.0 Release 1999) */
+    DE_GCC_CALL_REF,                    /* Call Reference */
+    DE_GCC_CALL_STATE,                  /* Call state */
+    DE_GCC_CAUSE,                       /* Cause */
+    DE_GCC_ORIG_IND,                    /* Originator indication */
+    DE_GCC_STATE_ATTR,                  /* State attributes */
+    /* Broadcast Call Control Information Elements ETSI TS 144 069 V10.0.0 (3GPP TS 44.069 version 10.0.0 Release 10) */
+    DE_BCC_CALL_REF,                    /* Call Reference */
+    DE_BCC_CALL_STATE,                  /* Call state */
+    DE_BCC_CAUSE,                       /* Cause */
+    DE_BCC_ORIG_IND,                    /* Originator indication */
+    DE_BCC_STATE_ATTR,                  /* State attributes */
+    DE_BCC_COMPR_OTDI,                  /* Compressed otdi */
+    DE_NONE                             /* NONE */
 }
 dtap_elem_idx_t;
 
 typedef enum
 {
-       /* GPRS Mobility Management Information Elements [3] 10.5.5 */
-       DE_ATTACH_RES,                                  /* [7] 10.5.1 Attach Result*/
-       DE_ATTACH_TYPE,                                 /* [7] 10.5.2 Attach Type */
-       DE_CIPH_ALG,                                    /* [7] 10.5.3 Cipher Algorithm */
-       DE_TMSI_STAT,                                   /* [7] 10.5.4 TMSI Status */
-       DE_DETACH_TYPE,                                 /* [7] 10.5.5 Detach Type */
-       DE_DRX_PARAM,                                   /* [7] 10.5.6 DRX Parameter */
-       DE_FORCE_TO_STAND,                              /* [7] 10.5.7 Force to Standby */
-       DE_FORCE_TO_STAND_H,                    /* [7] 10.5.8 Force to Standby - Info is in the high nibble */
-       DE_P_TMSI_SIG,                                  /* [7] 10.5.9 P-TMSI Signature */
-       DE_P_TMSI_SIG_2,                                /* [7] 10.5.10 P-TMSI Signature 2 */
-       DE_ID_TYPE_2,                                   /* [7] 10.5.11 Identity Type 2 */
-       DE_IMEISV_REQ,                                  /* [7] 10.5.12 IMEISV Request */
-       DE_REC_N_PDU_NUM_LIST,                  /* [7] 10.5.13 Receive N-PDU Numbers List */
-       DE_MS_NET_CAP,                                  /* [7] 10.5.14 MS Network Capability */
-       DE_MS_RAD_ACC_CAP,                              /* [7] 10.5.15 MS Radio Access Capability */
-       DE_GMM_CAUSE,                                   /* [7] 10.5.16 GMM Cause */
-       DE_RAI,                                                 /* [7] 10.5.17 Routing Area Identification */
-       DE_UPD_RES,                                             /* [7] 10.5.18 Update Result */
-       DE_UPD_TYPE,                                    /* [7] 10.5.19 Update Type */
-       DE_AC_REF_NUM,                                  /* [7] 10.5.20 A&C Reference Number */
-       DE_AC_REF_NUM_H,                                /* A&C Reference Number - Info is in the high nibble */
-       DE_SRVC_TYPE,                                   /* [7] 10.5.20 Service Type */
-       DE_CELL_NOT,                                    /* [7] 10.5.21 Cell Notification */
-       DE_PS_LCS_CAP,                                  /* [7] 10.5.22 PS LCS Capability */
-       DE_NET_FEAT_SUP,                                /* [7] 10.5.23 Network Feature Support */
-       DE_RAT_INFO_CONTAINER,                  /* [7] 10.5.24 Inter RAT information container */
-       /* [7] 10.5.25 Requested MS information */
-       /* Session Management Information Elements [3] 10.5.6 */
-       DE_ACC_POINT_NAME,                              /* Access Point Name */
-       DE_NET_SAPI,                                    /* Network Service Access Point Identifier */
-       DE_PRO_CONF_OPT,                                /* Protocol Configuration Options */
-       DE_PD_PRO_ADDR,                                 /* Packet Data Protocol Address */
-       DE_QOS,                                                 /* Quality Of Service */
-       DE_SM_CAUSE,                                    /* SM Cause */
-       DE_LINKED_TI,                                   /* Linked TI */
-       DE_LLC_SAPI,                                    /* LLC Service Access Point Identifier */
-       DE_TEAR_DOWN_IND,                               /* Tear Down Indicator */
-       DE_PACKET_FLOW_ID,                              /* Packet Flow Identifier */
-       DE_TRAFFIC_FLOW_TEMPLATE,               /* Traffic Flow Template */
-       /* GPRS Common Information Elements [8] 10.5.7 */
-       DE_PDP_CONTEXT_STAT,                    /* [8] 10.5.7.1         PDP Context Status */
-       DE_RAD_PRIO,                                    /* [8] 10.5.7.2         Radio Priority */
-       DE_GPRS_TIMER,                                  /* [8] 10.5.7.3         GPRS Timer */
-       DE_GPRS_TIMER_2,                                /* [8] 10.5.7.4         GPRS Timer 2 */
-       DE_RAD_PRIO_2,                                  /* [8] 10.5.7.5         Radio Priority 2 */
-       DE_MBMS_CTX_STATUS,                             /* [8] 10.5.7.6         MBMS context status */
-       DE_GM_NONE                                                      /* NONE */
+    /* GPRS Mobility Management Information Elements [3] 10.5.5 */
+    DE_ADD_UPD_TYPE,                /* [11] 10.5.5.0 Additional Update Type */
+    DE_ATTACH_RES,                  /* [7] 10.5.5.1 Attach Result*/
+    DE_ATTACH_TYPE,                 /* [7] 10.5.5.2 Attach Type */
+    DE_CIPH_ALG,                    /* [7] 10.5.5.3 Cipher Algorithm */
+    DE_TMSI_STAT,                   /* [7] 10.5.5.4 TMSI Status */
+    DE_DETACH_TYPE,                 /* [7] 10.5.5.5 Detach Type */
+    DE_DRX_PARAM,                   /* [7] 10.5.5.6 DRX Parameter */
+    DE_FORCE_TO_STAND,              /* [7] 10.5.5.7 Force to Standby */
+    DE_FORCE_TO_STAND_H,            /* [7] 10.5.5.7 Force to Standby - Info is in the high nibble */
+    DE_P_TMSI_SIG,                  /* [7] 10.5.5.8 P-TMSI Signature */
+    DE_P_TMSI_SIG_2,                /* [7] 10.5.5.8a P-TMSI Signature 2 */
+    DE_ID_TYPE_2,                   /* [7] 10.5.5.9 Identity Type 2 */
+    DE_IMEISV_REQ,                  /* [7] 10.5.5.10 IMEISV Request */
+    DE_REC_N_PDU_NUM_LIST,          /* [7] 10.5.5.11 Receive N-PDU Numbers List */
+    DE_MS_NET_CAP,                  /* [7] 10.5.5.12 MS Network Capability */
+    DE_MS_RAD_ACC_CAP,              /* [7] 10.5.5.12a MS Radio Access Capability */
+    DE_GMM_CAUSE,                   /* [7] 10.5.5.14 GMM Cause */
+    DE_RAI,                         /* [7] 10.5.5.15 Routing Area Identification */
+    DE_RAI_2,                       /* [7] 10.5.5.15a Routing Area Identification 2 */
+    DE_UPD_RES,                     /* [7] 10.5.5.17 Update Result */
+    DE_UPD_TYPE,                    /* [7] 10.5.5.18 Update Type */
+    DE_AC_REF_NUM,                  /* [7] 10.5.5.19 A&C Reference Number */
+    DE_AC_REF_NUM_H,                /* A&C Reference Number - Info is in the high nibble */
+    DE_SRVC_TYPE,                   /* [7] 10.5.5.20 Service Type */
+    DE_CELL_NOT,                    /* [7] 10.5.5.21 Cell Notification */
+    DE_PS_LCS_CAP,                  /* [7] 10.5.5.22 PS LCS Capability */
+    DE_NET_FEAT_SUP,                /* [7] 10.5.5.23 Network Feature Support */
+    DE_ADD_NET_FEAT_SUP,            /* [11] 10.5.5.23a Additional network feature support */
+    DE_RAT_INFO_CONTAINER,          /* [7] 10.5.5.24 Inter RAT information container */
+    DE_REQ_MS_INFO,                 /* [7] 10.5.5.25 Requested MS information */
+    DE_UE_NETWORK_CAP,              /* [7] 10.5.5.26 UE network capability */
+    DE_EUTRAN_IRAT_INFO_CONTAINER,  /* [7] 10.5.5.27 E-UTRAN inter RAT information container */
+    DE_VOICE_DOMAIN_PREF,           /* [7] 10.5.5.28 Voice domain preference and UE's usage setting */
+    DE_PTMSI_TYPE,                  /* [10] 10.5.5.29 P-TMSI type */
+    DE_LAI_2,                       /* [10] 10.5.5.30 Location Area Identification 2 */
+    DE_NET_RES_ID_CONT,             /* [11] 10.5.5.31 Network resource identifier container */
+    /* Session Management Information Elements [3] 10.5.6 */
+    DE_ACC_POINT_NAME,              /* Access Point Name */
+    DE_NET_SAPI,                    /* Network Service Access Point Identifier */
+    DE_PRO_CONF_OPT,                /* Protocol Configuration Options */
+    DE_PD_PRO_ADDR,                 /* Packet Data Protocol Address */
+    DE_QOS,                         /* Quality Of Service */
+    DE_RE_ATTEMPT_IND,              /* Re-attempt indicator */
+    DE_SM_CAUSE,                    /* SM Cause */
+    DE_SM_CAUSE_2,                  /* SM Cause 2 */
+    DE_LINKED_TI,                   /* Linked TI */
+    DE_LLC_SAPI,                    /* LLC Service Access Point Identifier */
+    DE_TEAR_DOWN_IND,               /* Tear Down Indicator */
+    DE_PACKET_FLOW_ID,              /* Packet Flow Identifier */
+    DE_TRAFFIC_FLOW_TEMPLATE,       /* Traffic Flow Template */
+    DE_TMGI,                        /* Temporary Mobile Group Identity (TMGI) */
+    DE_MBMS_BEARER_CAP,             /* MBMS bearer capabilities */
+    DE_MBMS_PROT_CONF_OPT,          /* MBMS protocol configuration options */
+    DE_ENH_NSAPI,                   /* Enhanced network service access point identifier */
+    DE_REQ_TYPE,                    /* Request type */
+    DE_SM_NOTIF_IND,                /* Notification indicator */
+    DE_SM_CONNECTIVITY_TYPE,        /* Connectivity type */
+    DE_SM_WLAN_OFFLOAD_ACCEPT,      /* WLAN offload acceptability */
+    /* GPRS Common Information Elements [8] 10.5.7 */
+    DE_PDP_CONTEXT_STAT,            /* [8] 10.5.7.1     PDP Context Status */
+    DE_RAD_PRIO,                    /* [8] 10.5.7.2     Radio Priority */
+    DE_GPRS_TIMER,                  /* [8] 10.5.7.3     GPRS Timer */
+    DE_GPRS_TIMER_2,                /* [8] 10.5.7.4     GPRS Timer 2 */
+    DE_GPRS_TIMER_3,                /* [10] 10.5.7.4a   GPRS Timer 3 */
+    DE_RAD_PRIO_2,                  /* [8] 10.5.7.5     Radio Priority 2 */
+    DE_MBMS_CTX_STATUS,             /* [8] 10.5.7.6     MBMS context status */
+    DE_UPLINK_DATA_STATUS,          /* [8] 10.5.7.7     Uplink data status */
+    DE_DEVICE_PROPERTIES,           /* [10] 10.5.7.8    Device properties */
+    DE_GM_NONE                          /* NONE */
 }
 gm_elem_idx_t;
 
 typedef enum
 {
-       /* Radio Resource Management Information Elements 10.5.2, most are from 10.5.1  */
-       DE_RR_BA_RANGE,                            /* [3]  10.5.2.1a    BA Range */
-       DE_RR_CELL_CH_DSC,                         /* [3]  10.5.2.1b    Cell Channel Description        */
-       DE_RR_BA_LIST_PREF,                        /* [3]  10.5.2.1c    BA List Pref */
-       DE_RR_UTRAN_FREQ_LIST,             /* [3]  10.5.2.1d    UTRAN Frequency List */
-       DE_RR_CELL_SELECT_INDIC,           /* [3]  10.5.2.1e    Cell selection indicator after release of all TCH and SDCCH IE */
-       DE_RR_CELL_DSC,                                 /* 10.5.2.2   RR Cell Description                               */
-       DE_RR_CELL_OPT_BCCH,                            /* [3]  10.5.2.3        Cell Options (BCCH)             */
-       DE_RR_CELL_OPT_SACCH,                           /* [3]  10.5.2.3a       Cell Options (SACCH)            */
-       DE_RR_CELL_SEL_PARAM,                           /* [3]  10.5.2.4        Cell Selection Parameters               */
+    /* Radio Resource Management Information Elements 10.5.2, most are from 10.5.1  */
+    DE_RR_BA_RANGE,                 /* [3]  10.5.2.1a    BA Range */
+    DE_RR_CELL_CH_DSC,              /* [3]  10.5.2.1b    Cell Channel Description    */
+    DE_RR_BA_LIST_PREF,             /* [3]  10.5.2.1c    BA List Pref */
+    DE_RR_UTRAN_FREQ_LIST,          /* [3]  10.5.2.1d    UTRAN Frequency List */
+    DE_RR_CELL_SELECT_INDIC,        /* [3]  10.5.2.1e    Cell selection indicator after release of all TCH and SDCCH IE */
+    DE_RR_CELL_DSC,                 /* 10.5.2.2   RR Cell Description              */
+    DE_RR_CELL_OPT_BCCH,            /* [3]  10.5.2.3    Cell Options (BCCH)        */
+    DE_RR_CELL_OPT_SACCH,           /* [3]  10.5.2.3a   Cell Options (SACCH)       */
+    DE_RR_CELL_SEL_PARAM,           /* [3]  10.5.2.4    Cell Selection Parameters  */
 /*
- * [3]  10.5.2.4a      (void)
+ * [3]  10.5.2.4a   (void)
  */
-       DE_RR_CH_DSC,                                   /* [3]  10.5.2.5        Channel Description                     */
-       DE_RR_CH_DSC2,                                  /* [3]  10.5.2.5a   Channel Description 2               */
-       DE_RR_CH_MODE,                                  /* [3]  10.5.2.6        Channel Mode                            */
-       DE_RR_CH_MODE2,                                 /* [3]  10.5.2.7        Channel Mode 2                          */
-       DE_RR_UTRAN_CM,                                 /* [3]  10.5.2.7a       UTRAN Classmark */
-/* [3]  10.5.2.7b      (void) */
-       DE_RR_CM_ENQ_MASK,                              /* [3]  10.5.2.7c       Classmark Enquiry Mask          */
-/* [3]  10.5.2.7d      GERAN Iu Mode Classmark information element                                             */
-       DE_RR_CHNL_NEEDED,                              /* [3]  10.5.2.8        Channel Needed
- * [3]  10.5.2.8a      (void)
- * [3]  10.5.2.8b      Channel Request Description 2 */
-       DE_RR_CIP_MODE_SET,                             /* [3]  10.5.2.9        Cipher Mode Setting                     */
-       DE_RR_CIP_MODE_RESP,                    /* [3]  10.5.2.10       Cipher Response                  */
-       DE_RR_CTRL_CH_DESC,                             /* [3]  10.5.2.11       Control Channel Description     */
-/* [3]  10.5.2.11a     DTM Information Details */
-       DE_RR_DYN_ARFCN_MAP,                    /* [3]  10.5.2.11b      Dynamic ARFCN Mapping           */
-       DE_RR_FREQ_CH_SEQ,                              /* [3]  10.5.2.12       Frequency Channel Sequence      */
-       DE_RR_FREQ_LIST,                                /* [3]  10.5.2.13       Frequency List                          */
-       DE_RR_FREQ_SHORT_LIST,                  /* [3]  10.5.2.14       Frequency Short List            */
-       DE_RR_FREQ_SHORT_LIST2,                 /* [3]  10.5.2.14a      Frequency Short List 2          */
-/* [3]  10.5.2.14b     Group Channel Description */
-       DE_RR_GPRS_RESUMPTION,                  /* [3]  10.5.2.14c      GPRS Resumption */
-       DE_RR_GPRS_BROADCAST_INFORMATION,                       /* [3]  10.5.2.14d      GPRS broadcast information */
-/* [3]  10.5.2.14e     Enhanced DTM CS Release Indication*/
-
-       DE_RR_HO_REF,                                   /* 10.5.2.15  Handover Reference                                */
-
-       DE_RR_IA_REST_OCT,                              /* [3] 10.5.2.16 IA Rest Octets                         */
-       DE_RR_IAR_REST_OCT,                             /* [3] 10.5.2.17 IAR Rest Octets                                */
-       DE_RR_IAX_REST_OCT,                             /* [3] 10.5.2.18 IAX Rest Octets                                */
-       DE_RR_L2_PSEUDO_LEN,                    /* [3] 10.5.2.19 L2 Pseudo Length                               */
-       DE_RR_MEAS_RES,                                 /* [3] 10.5.2.20 Measurement Results            */
+    DE_RR_CH_DSC,                   /* [3]  10.5.2.5    Channel Description         */
+    DE_RR_CH_DSC2,                  /* [3]  10.5.2.5a   Channel Description 2       */
+    DE_RR_CH_DSC3,                  /* [3]  10.5.2.5c   Channel Description 3       */
+    DE_RR_CH_MODE,                  /* [3]  10.5.2.6    Channel Mode                */
+    DE_RR_CH_MODE2,                 /* [3]  10.5.2.7    Channel Mode 2              */
+    DE_RR_UTRAN_CM,                 /* [3]  10.5.2.7a   UTRAN Classmark */
+/* [3]  10.5.2.7b   (void) */
+    DE_RR_CM_ENQ_MASK,              /* [3]  10.5.2.7c   Classmark Enquiry Mask      */
+/* [3]  10.5.2.7d   GERAN Iu Mode Classmark information element                     */
+    DE_RR_CHNL_NEEDED,              /* [3]  10.5.2.8    Channel Needed
+ * [3]  10.5.2.8a   (void) */
+    DE_RR_CHNL_REQ_DESC2,           /* [3]  10.5.2.8b   Channel Request Description 2 */
+    DE_RR_CIP_MODE_SET,             /* [3]  10.5.2.9    Cipher Mode Setting         */
+    DE_RR_CIP_MODE_RESP,            /* [3]  10.5.2.10   Cipher Response             */
+    DE_RR_CTRL_CH_DESC,             /* [3]  10.5.2.11   Control Channel Description */
+    DE_RR_DTM_INFO_DETAILS,         /* [3]  10.5.2.11a  DTM Information Details */
+    DE_RR_DYN_ARFCN_MAP,            /* [3]  10.5.2.11b  Dynamic ARFCN Mapping       */
+    DE_RR_FREQ_CH_SEQ,              /* [3]  10.5.2.12   Frequency Channel Sequence  */
+    DE_RR_FREQ_LIST,                /* [3]  10.5.2.13   Frequency List              */
+    DE_RR_FREQ_SHORT_LIST,          /* [3]  10.5.2.14   Frequency Short List        */
+    DE_RR_FREQ_SHORT_LIST2,         /* [3]  10.5.2.14a  Frequency Short List 2      */
+/* [3]  10.5.2.14b  Group Channel Description */
+    DE_RR_GPRS_RESUMPTION,          /* [3]  10.5.2.14c  GPRS Resumption */
+    DE_RR_GPRS_BROADCAST_INFORMATION, /* [3]  10.5.2.14d  GPRS broadcast information */
+/* [3]  10.5.2.14e  Enhanced DTM CS Release Indication*/
+
+    DE_RR_HO_REF,                   /* 10.5.2.15  Handover Reference                */
+
+    DE_RR_IA_REST_OCT,              /* [3] 10.5.2.16 IA Rest Octets             */
+    DE_RR_IAR_REST_OCT,             /* [3] 10.5.2.17 IAR Rest Octets                */
+    DE_RR_IAX_REST_OCT,             /* [3] 10.5.2.18 IAX Rest Octets                */
+    DE_RR_L2_PSEUDO_LEN,            /* [3] 10.5.2.19 L2 Pseudo Length               */
+    DE_RR_MEAS_RES,                 /* [3] 10.5.2.20 Measurement Results        */
  /* [3] 10.5.2.20a GPRS Measurement Results */
-       DE_RR_MOB_ALL,                                  /* [3] 10.5.2.21 Mobile Allocation                              */
-       DE_RR_MOB_TIME_DIFF,                    /* [3] 10.5.2.21a Mobile Time Difference                */
-       DE_RR_MULTIRATE_CONF,                   /* [3] 10.5.2.21aa MultiRate configuration              */
-       DE_RR_MULT_ALL,                                 /* [3] 10.5.2.21b Multislot Allocation                  */
+    DE_RR_MOB_ALL,                  /* [3] 10.5.2.21 Mobile Allocation              */
+    DE_RR_MOB_TIME_DIFF,            /* [3] 10.5.2.21a Mobile Time Difference        */
+    DE_RR_MULTIRATE_CONF,           /* [3] 10.5.2.21aa MultiRate configuration      */
+    DE_RR_MULT_ALL,                 /* [3] 10.5.2.21b Multislot Allocation          */
 /*
  * [3] 10.5.2.21c NC mode
  */
-       DE_RR_NEIGH_CELL_DESC,                          /* [3] 10.5.2.22 Neighbour Cell Description     */
-       DE_RR_NEIGH_CELL_DESC2,                         /* [3] 10.5.2.22a Neighbour Cell Description 2  */
+    DE_RR_NEIGH_CELL_DESC,          /* [3] 10.5.2.22 Neighbour Cell Description */
+    DE_RR_NEIGH_CELL_DESC2,         /* [3] 10.5.2.22a Neighbour Cell Description 2  */
 /*
  * [3] 10.5.2.22b (void)
- * [3] 10.5.2.22c NT/N Rest Octets
- * [3] 10.5.2.23 P1 Rest Octets
- * [3] 10.5.2.24 P2 Rest Octets
- * [3] 10.5.2.25 P3 Rest Octets */
-       DE_RR_PACKET_CH_DESC,                           /* [3] 10.5.2.25a Packet Channel Description    */
-       DE_RR_DED_MOD_OR_TBF,                   /* [3] 10.5.2.25b Dedicated mode or TBF                 */
-/* [3] 10.5.2.25c RR Packet Uplink Assignment
- * [3] 10.5.2.25d RR Packet Downlink Assignment */
-       DE_RR_PAGE_MODE,                                /* [3] 10.5.2.26 Page Mode                                              */
-/* [3] 10.5.2.26a (void)
- * [3] 10.5.2.26b (void)
- * [3] 10.5.2.26c (void)
- * [3] 10.5.2.26d (void)
- */
-       DE_RR_NCC_PERM,                                 /* [3] 10.5.2.27 NCC Permitted */
-       DE_RR_POW_CMD,                                  /* 10.5.2.28  Power Command                                             */
-       DE_RR_POW_CMD_AND_ACC_TYPE,             /* 10.5.2.28a Power Command and access type             */
-       DE_RR_RACH_CTRL_PARAM,                  /* [3] 10.5.2.29 RACH Control Parameters */
-       DE_RR_REQ_REF,                                  /* [3] 10.5.2.30 Request Reference                              */
-       DE_RR_CAUSE,                                    /* 10.5.2.31  RR Cause                                                  */
-       DE_RR_SYNC_IND,                                 /* 10.5.2.39  Synchronization Indication                */
-       DE_RR_SI1_REST_OCT,                             /* [3] 10.5.2.32 SI1 Rest Octets */
+ * [3] 10.5.2.22c NT/N Rest Octets */
+    DE_RR_P1_REST_OCT,              /* [3] 10.5.2.23 P1 Rest Octets */
+    DE_RR_P2_REST_OCT,              /* [3] 10.5.2.24 P2 Rest Octets */
+    DE_RR_P3_REST_OCT,              /* [3] 10.5.2.25 P3 Rest Octets */
+    DE_RR_PACKET_CH_DESC,           /* [3] 10.5.2.25a Packet Channel Description    */
+    DE_RR_DED_MOD_OR_TBF,           /* [3] 10.5.2.25b Dedicated mode or TBF         */
+    DE_RR_PKT_UL_ASS,               /* [3] 10.5.2.25c RR Packet Uplink Assignment */
+    DE_RR_PKT_DL_ASS,               /* [3] 10.5.2.25d RR Packet Downlink Assignment */
+    DE_RR_PKT_DL_ASS_TYPE2,         /* [3] 10.5.2.25d RR Packet Downlink Assignment Type 2 */
+    DE_RR_PAGE_MODE,                /* [3] 10.5.2.26 Page Mode                      */
+    DE_RR_NCC_PERM,                 /* [3] 10.5.2.27 NCC Permitted */
+    DE_RR_POW_CMD,                  /* 10.5.2.28  Power Command                     */
+    DE_RR_POW_CMD_AND_ACC_TYPE,     /* 10.5.2.28a Power Command and access type     */
+    DE_RR_RACH_CTRL_PARAM,          /* [3] 10.5.2.29 RACH Control Parameters */
+    DE_RR_REQ_REF,                  /* [3] 10.5.2.30 Request Reference              */
+    DE_RR_CAUSE,                    /* 10.5.2.31  RR Cause                          */
+    DE_RR_SYNC_IND,                 /* 10.5.2.39  Synchronization Indication        */
+    DE_RR_SI1_REST_OCT,             /* [3] 10.5.2.32 SI1 Rest Octets */
 /* [3] 10.5.2.33 SI 2bis Rest Octets */
-       DE_RR_SI2TER_REST_OCT,                  /* [3] 10.5.2.33a SI 2ter Rest Octets */
-       DE_RR_SI2QUATER_REST_OCT,               /* [3] 10.5.2.33b SI 2quater Rest Octets */
-       DE_RR_SI3_REST_OCT,                             /* [3] 10.5.2.34 SI3 Rest Octets */
-       DE_RR_SI4_REST_OCT,                             /* [3] 10.5.2.35 SI4 Rest Octets */
-       DE_RR_SI6_REST_OCT,                             /* [3] 10.5.2.35a SI6 Rest Octets */
+    DE_RR_SI2TER_REST_OCT,          /* [3] 10.5.2.33a SI 2ter Rest Octets */
+    DE_RR_SI2QUATER_REST_OCT,       /* [3] 10.5.2.33b SI 2quater Rest Octets */
+    DE_RR_SI3_REST_OCT,             /* [3] 10.5.2.34 SI3 Rest Octets */
+    DE_RR_SI4_REST_OCT,             /* [3] 10.5.2.35 SI4 Rest Octets */
+    DE_RR_SI6_REST_OCT,             /* [3] 10.5.2.35a SI6 Rest Octets */
 /* [3] 10.5.2.36 SI 7 Rest Octets
  * [3] 10.5.2.37 SI 8 Rest Octets
  * [3] 10.5.2.37a SI 9 Rest Octets
  */
-       DE_RR_SI13_REST_OCT,                            /* [3] 10.5.2.37b SI13 Rest Octets */
+    DE_RR_SI13_REST_OCT,                /* [3] 10.5.2.37b SI13 Rest Octets */
 /* [3] 10.5.2.37c (void)
  * [3] 10.5.2.37d (void)
  * [3] 10.5.2.37e SI 16 Rest Octets
@@ -934,34 +1285,33 @@ typedef enum
  * [3] 10.5.2.37g SI 19 Rest Octets
  * [3] 10.5.2.37h SI 18 Rest Octets
  * [3] 10.5.2.37i SI 20 Rest Octets */
-       DE_RR_STARTING_TIME,                    /* [3] 10.5.2.38 Starting Time                                  */
-       DE_RR_TIMING_ADV,                               /* [3] 10.5.2.40 Timing Advance                                 */
-       DE_RR_TIME_DIFF,                                /* [3] 10.5.2.41 Time Difference                                */
-       DE_RR_TLLI,                                             /* [3] 10.5.2.41a TLLI                                                  */
-/*
- * [3] 10.5.2.42 TMSI/P-TMSI */
-       DE_RR_VGCS_TAR_MODE_IND,                /* [3] 10.5.2.42a VGCS target mode Indication   */
-       DE_RR_VGCS_CIP_PAR,                             /* [3] 10.5.2.42b       VGCS Ciphering Parameters       */
-
-       DE_RR_WAIT_IND,                                 /* [3] 10.5.2.43 Wait Indication */
-/* [3] 10.5.2.44 SI10 rest octets $(ASCI)$
- * [3] 10.5.2.45 EXTENDED MEASUREMENT RESULTS
- * [3] 10.5.2.46 Extended Measurement Frequency List */
-       DE_RR_SUS_CAU,                                  /* [3] 10.5.2.47 Suspension Cause                               */
-/* [3] 10.5.2.48 APDU ID
- * [3] 10.5.2.49 APDU Flags
- * [3] 10.5.2.50 APDU Data */
-       DE_RR_HO_TO_UTRAN_CMD,                  /* [3] 10.5.2.51 Handover To UTRAN Command */
+    DE_RR_STARTING_TIME,            /* [3] 10.5.2.38 Starting Time                  */
+    DE_RR_TIMING_ADV,               /* [3] 10.5.2.40 Timing Advance                 */
+    DE_RR_TIME_DIFF,                /* [3] 10.5.2.41 Time Difference                */
+    DE_RR_TLLI,                     /* [3] 10.5.2.41a TLLI                          */
+    DE_RR_TMSI_PTMSI,               /* [3] 10.5.2.42 TMSI/P-TMSI */
+    DE_RR_VGCS_TAR_MODE_IND,        /* [3] 10.5.2.42a VGCS target mode Indication   */
+    DE_RR_VGCS_CIP_PAR,             /* [3] 10.5.2.42b   VGCS Ciphering Parameters   */
+
+    DE_RR_WAIT_IND,                 /* [3] 10.5.2.43 Wait Indication */
+/* [3] 10.5.2.44 SI10 rest octets $(ASCI)$ */
+    DE_RR_EXT_MEAS_RESULT,      /* [3] 10.5.2.45 Extended Measurement Results */
+    DE_RR_EXT_MEAS_FREQ_LIST,       /* [3] 10.5.2.46 Extended Measurement Frequency List */
+    DE_RR_SUS_CAU,                  /* [3] 10.5.2.47 Suspension Cause               */
+    DE_RR_APDU_ID,                  /* [3] 10.5.2.48 APDU ID */
+    DE_RR_APDU_FLAGS,               /* [3] 10.5.2.49 APDU Flags */
+    DE_RR_APDU_DATA,                /* [3] 10.5.2.50 APDU Data */
+    DE_RR_HO_TO_UTRAN_CMD,          /* [3] 10.5.2.51 Handover To UTRAN Command */
 /* [3] 10.5.2.52 Handover To cdma2000 Command
  * [3] 10.5.2.53 (void)
  * [3] 10.5.2.54 (void)
  * [3] 10.5.2.55 (void)
  * [3] 10.5.2.56 3G Target Cell */
-       DE_RR_SERV_SUP,                                 /* 10.5.2.57 Service Support                                            */
+    DE_RR_SERV_SUP,                 /* 10.5.2.57 Service Support                        */
 /* 10.5.2.58 MBMS p-t-m Channel Description
  */
 
-       DE_RR_DED_SERV_INF,                             /* [3] 10.5.2.59        Dedicated Service Information */
+    DE_RR_DED_SERV_INF,             /* [3] 10.5.2.59    Dedicated Service Information */
 
 /*
  * 10.5.2.60 MPRACH Description
@@ -973,10 +1323,134 @@ typedef enum
  * 10.5.2.66 Token
  * 10.5.2.67 PS Cause
  * 10.5.2.68 VGCS AMR Configuration
- * 10.5.2.69 Carrier Indication
  */
-       DE_RR_NONE                                                      /* NONE */
+    DE_RR_CARRIER_IND,              /* 10.5.2.69 Carrier Indication */
+    DE_RR_NONE                          /* NONE */
 }
 rr_elem_idx_t;
 
+typedef enum
+{
+    /* 9.9.3    EPS Mobility Management (EMM) information elements */
+    DE_EMM_ADD_UPD_RES,         /* 9.9.3.0A Additional update result */
+    DE_EMM_ADD_UPD_TYPE,        /* 9.9.3.0B Additional update type */
+    DE_EMM_AUTH_FAIL_PAR,       /* 9.9.3.1  Authentication failure parameter (dissected in packet-gsm_a_dtap.c)*/
+    DE_EMM_AUTN,                /* 9.9.3.2  Authentication parameter AUTN */
+    DE_EMM_AUTH_PAR_RAND,       /* 9.9.3.3  Authentication parameter RAND */
+    DE_EMM_AUTH_RESP_PAR,       /* 9.9.3.4  Authentication response parameter */
+    DE_EMM_CSFB_RESP,           /* 9.9.3.5  CSFB response */
+    DE_EMM_DAYL_SAV_T,          /* 9.9.3.6  Daylight saving time */
+    DE_EMM_DET_TYPE,            /* 9.9.3.7  Detach type */
+    DE_EMM_DRX_PAR,             /* 9.9.3.8  DRX parameter (dissected in packet-gsm_a_gm.c)*/
+    DE_EMM_CAUSE,               /* 9.9.3.9  EMM cause */
+    DE_EMM_ATT_RES,             /* 9.9.3.10 EPS attach result (Coded inline */
+    DE_EMM_ATT_TYPE,            /* 9.9.3.11 EPS attach type (Coded Inline)*/
+    DE_EMM_EPS_MID,             /* 9.9.3.12 EPS mobile identity */
+    DE_EMM_EPS_NET_FEATURE_SUP, /* 9.9.3.12A EPS network feature support */
+    DE_EMM_EPS_UPD_RES,         /* 9.9.3.13 EPS update result ( Coded inline)*/
+    DE_EMM_EPS_UPD_TYPE,        /* 9.9.3.14 EPS update type */
+    DE_EMM_ESM_MSG_CONT,        /* 9.9.3.15 ESM message conta */
+    DE_EMM_GPRS_TIMER,          /* 9.9.3.16 GPRS timer ,See subclause 10.5.7.3 in 3GPP TS 24.008 [6]. */
+    DE_EMM_GPRS_TIMER_2,        /* 9.9.3.16A GPRS timer 2, See subclause 10.5.7.4 in 3GPP TS 24.008. */
+    DE_EMM_GPRS_TIMER_3,        /* 9.9.3.16B GPRS timer 3, See subclause 10.5.7.4a in 3GPP TS 24.008. */
+    DE_EMM_ID_TYPE_2,           /* 9.9.3.17 Identity type 2 ,See subclause 10.5.5.9 in 3GPP TS 24.008 [6]. */
+    DE_EMM_IMEISV_REQ,          /* 9.9.3.18 IMEISV request ,See subclause 10.5.5.10 in 3GPP TS 24.008 [6]. */
+    DE_EMM_KSI_AND_SEQ_NO,      /* 9.9.3.19 KSI and sequence number */
+    DE_EMM_MS_NET_CAP,          /* 9.9.3.20 MS network capability ,See subclause 10.5.5.12 in 3GPP TS 24.008 [6]. */
+    DE_EMM_MS_NET_FEAT_SUP,     /* 9.9.3.20A MS network feature support, See subclause 10.5.1.15 in 3GPP TS 24.008. */
+    DE_EMM_NAS_KEY_SET_ID,      /* 9.9.3.21 NAS key set identifier (coded inline)*/
+    DE_EMM_NAS_MSG_CONT,        /* 9.9.3.22 NAS message container */
+    DE_EMM_NAS_SEC_ALGS,        /* 9.9.3.23 NAS security algorithms */
+    DE_EMM_NET_NAME,            /* 9.9.3.24 Network name, See subclause 10.5.3.5a in 3GPP TS 24.008 [6]. */
+    DE_EMM_NONCE,               /* 9.9.3.25 Nonce */
+    DE_EMM_PAGING_ID,           /* 9.9.3.25A Paging identity */
+    DE_EMM_P_TMSI_SIGN,         /* 9.9.3.26 P-TMSI signature, See subclause 10.5.5.8 in 3GPP TS 24.008 [6]. */
+    DE_EMM_EXT_CAUSE,           /* 9.9.3.26A Extended EMM cause */
+    DE_EMM_SERV_TYPE,           /* 9.9.3.27 Service type */
+    DE_EMM_SHORT_MAC,           /* 9.9.3.28 Short MAC */
+    DE_EMM_TZ,                  /* 9.9.3.29 Time zone, See subclause 10.5.3.8 in 3GPP TS 24.008 [6]. */
+    DE_EMM_TZ_AND_T,            /* 9.9.3.30 Time zone and time, See subclause 10.5.3.9 in 3GPP TS 24.008 [6]. */
+    DE_EMM_TMSI_STAT,           /* 9.9.3.31 TMSI status, See subclause 10.5.5.4 in 3GPP TS 24.008 [6]. */
+    DE_EMM_TRAC_AREA_ID,        /* 9.9.3.32 Tracking area identity */
+    DE_EMM_TRAC_AREA_ID_LST,    /* 9.9.3.33 Tracking area identity list */
+    DE_EMM_UE_NET_CAP,          /* 9.9.3.34 UE network capability */
+    DE_EMM_UE_RA_CAP_INF_UPD_NEED,  /* 9.9.3.35 UE radio capability information update needed */
+    DE_EMM_UE_SEC_CAP,          /* 9.9.3.36 UE security capability */
+    DE_EMM_EMERG_NUM_LST,       /* 9.9.3.37 Emergency Number List */
+    DE_EMM_CLI,                 /* 9.9.3.38 CLI */
+    DE_EMM_SS_CODE,             /* 9.9.3.39 SS Code */
+    DE_EMM_LCS_IND,             /* 9.9.3.40 LCS indicator */
+    DE_EMM_LCS_CLIENT_ID,       /* 9.9.3.41 LCS client identity */
+    DE_EMM_GEN_MSG_CONT_TYPE,   /* 9.9.3.42 Generic message container type */
+    DE_EMM_GEN_MSG_CONT,        /* 9.9.3.43 Generic message container */
+    DE_EMM_VOICE_DMN_PREF,      /* 9.9.3.44 Voice domain preference and UE's usage setting */
+    DE_EMM_GUTI_TYPE,           /* 9.9.3.45 GUTI type */
+    DE_EMM_NONE                 /* NONE */
+
+}
+nas_emm_elem_idx_t;
+
+typedef enum
+{
+
+    DE_SGSAP_IMSI,                                  /* 9.4.6 IMSI*/
+    DE_SGSAP_VLR_NAME,                              /* 9.4.22 VLR name*/
+    DE_SGSAP_TMSI,                                  /* 9.4.20 TMSI */
+    DE_SGSAP_LOC_AREA_ID,                           /* 9.4.11 Location area identifier */
+    DE_SGSAP_CH_NEEDED,                             /* 9.4.23 Channel Needed */
+    DE_SGSAP_EMLPP_PRIO,                            /* 9.4.24 eMLPP Priority*/
+    DE_SGSAP_TMSI_STATUS,                           /* 9.4.21 TMSI status */
+    DE_SGSAP_SGS_CAUSE,                             /* 9.4.18 SGs cause*/
+    DE_SGSAP_MME_NAME,                              /* 9.4.13 MME name*/
+    DE_SGSAP_EPS_LOC_UPD_TYPE,                      /* 9.4.2 EPS location update type*/
+    DE_SGSAP_GLOBAL_CN_ID,                          /* 9.4.4 Global CN-Id*/
+
+    DE_SGSAP_UDEF_11,                               /* Undefined */
+    DE_SGSAP_UDEF_12,                               /* Undefined */
+
+    DE_SGSAP_MID,                                   /* 9.4.14 Mobile identity*/
+    DE_SGSAP_REJ_CAUSE,                             /* 9.4.16 Reject cause */
+    DE_SGSAP_IMSI_DET_EPS,                          /* 9.4.7 IMSI detach from EPS service type */
+    DE_SGSAP_IMSI_DET_NON_EPS,                      /* 9.4.8 IMSI detach from non-EPS service type */
+
+    DE_SGSAP_IMEISV,                                /* 9.4.5 IMEISV */
+    DE_SGSAP_NAS_MSG_CONTAINER,                     /* 9.4.15 NAS message container*/
+    DE_SGSAP_MM_INFO,                               /* 9.4.12 MM information*/
+
+    DE_SGSAP_UDEF_20,                               /* Undefined */
+    DE_SGSAP_UDEF_21,                               /* Undefined */
+    DE_SGSAP_UDEF_22,                               /* Undefined */
+
+    DE_SGSAP_ERR_MSG,                               /* 9.4.3 Erroneous message*/
+    DE_SGSAP_CLI,                                   /* 9.4.1 CLI */
+    DE_SGSAP_LCS_CLIENT_ID,                         /* 9.4.9 LCS client identity */
+    DE_SGSAP_LCS_INDIC,                             /* 9.4.10 LCS indicator */
+    DE_SGSAP_SS_CODE,                               /* 9.4.19 SS code */
+    DE_SGSAP_SERV_INDIC,                            /* 9.4.17 Service indicator */
+    DE_SGSAP_UE_TZ,                                 /* 9.4.21b UE Time Zone */
+    DE_SGSAP_MSC_2,                                 /* 9.4.14a Mobile Station Classmark 2 */
+    DE_SGSAP_TAID,                                  /* 9.4.21a Tracking Area Identity */
+    DE_SGSAP_ECGI,                                  /* 9.4.3a E-UTRAN Cell Global Identity */
+    DE_SGSAP_UE_EMM_MODE,                           /* 9.4.21c UE EMM mode*/
+    DE_SGSAP_ADD_PAGING_IND,                        /* 9.4.25 Additional paging indicators */
+    DE_SGSAP_TMSI_BASED_NRI_CONT,                   /* 9.4.26 TMSI based NRI container */
+    DE_SGSAP_SELECTED_CS_DMN_OP,                    /* 9.4.27 Selected CS domain operator */
+
+    DE_SGAP_NONE                            /* NONE */
+}
+sgsap_elem_idx_t;
+
 #endif /* __PACKET_GSM_A_COMMON_H__ */
+
+/*
+ * Editor modelines  -  http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
+ */