From Sylvain Munaut:
authorAnders Broman <anders.broman@ericsson.com>
Fri, 9 Mar 2012 09:38:21 +0000 (09:38 -0000)
committerAnders Broman <anders.broman@ericsson.com>
Fri, 9 Mar 2012 09:38:21 +0000 (09:38 -0000)
GMR-1: Add dissections for various GMR 04.08 elements (Step1).

https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6921

svn path=/trunk/; revision=41446

epan/CMakeLists.txt
epan/dissectors/Makefile.common
epan/dissectors/packet-gmr1_common.c [new file with mode: 0644]
epan/dissectors/packet-gmr1_common.h [new file with mode: 0644]
epan/dissectors/packet-gsm_a_common.c
epan/dissectors/packet-gsm_a_common.h

index 66a18b85fd2884dfdad57441b0331d26cbaef783..8da7e9ee6fe0297fba58e6dac4e33d2f0fc1628d 100644 (file)
@@ -607,6 +607,7 @@ set(DISSECTOR_SRC
        dissectors/packet-gmhdr.c
        dissectors/packet-gmrp.c
        dissectors/packet-gmr1_bcch.c
+       dissectors/packet-gmr1_common.c
        dissectors/packet-gnutella.c
        dissectors/packet-gopher.c
        dissectors/packet-gpef.c
index 0d64be1c74372208522af4b515f80e32284b1f51..ded662dba7347ab05b2d1877ead199de8d874876 100644 (file)
@@ -526,6 +526,7 @@ DISSECTOR_SRC = \
        packet-gmhdr.c          \
        packet-gmrp.c           \
        packet-gmr1_bcch.c      \
+       packet-gmr1_common.c    \
        packet-gnutella.c       \
        packet-gopher.c         \
        packet-gpef.c           \
@@ -1223,6 +1224,7 @@ DISSECTOR_INCLUDES =      \
        packet-frame.h  \
        packet-ftam.h   \
        packet-giop.h   \
+       packet-gmr1_common.h    \
        packet-gnm.h    \
        packet-gnutella.h       \
        packet-gprscdr.h \
diff --git a/epan/dissectors/packet-gmr1_common.c b/epan/dissectors/packet-gmr1_common.c
new file mode 100644 (file)
index 0000000..cc17943
--- /dev/null
@@ -0,0 +1,369 @@
+/* packet-gmr1_common.c
+ *
+ * Routines for GMR-1 dissection in wireshark (common stuff).
+ * Copyright (c) 2011 Sylvain Munaut <tnt@246tNt.com>
+ *
+ * References:
+ *  [1] ETSI TS 101 376-4-8 V1.3.1 - GMR-1 04.008
+ *  [2] ETSI TS 101 376-4-8 V2.2.1 - GMPRS-1 04.008
+ *  [3] ETSI TS 101 376-4-8 V3.1.1 - GMR-1 3G 44.008
+ *  [4] ETSI TS 100 940 V7.21.0 - GSM 04.08
+ *  [5] ETSI TS 101 376-4-12 V3.2.1 - GMR-1 3G 44.060
+ *  [6] ETSI TS 101 376-5-6 V1.3.1 - GMR-1 05.008
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+
+#include "packet-gmr1_common.h"
+
+
+/* GMR-1 Common proto */
+static int proto_gmr1_common = -1;
+
+
+/* ------------------------------------------------------------------------ */
+/* Protocol descriptor (see [1] 11.2 & [4] 10.2)                            */
+/* ------------------------------------------------------------------------ */
+
+const value_string gmr1_pd_vals[] = {
+       { GMR1_PD_CC,   "Call Control; call related SS messages" },
+       { GMR1_PD_MM,   "Mobility Management messages" },
+       { GMR1_PD_RR,   "Radio Resource management messages" },
+       { GMR1_PD_GMM,  "GPRS Mobility Management messages" },
+       { GMR1_PD_SM,   "Session Management messages" },
+       { GMR1_PD_DTRS, "DTMF transmission and reception service" },
+       { 0, NULL }
+};
+
+const value_string gmr1_pd_short_vals[] = {
+       { GMR1_PD_CC,   "CC" },   /* Call Control; call related SS messages */
+       { GMR1_PD_MM,   "MM" },   /* Mobility Management messages */
+       { GMR1_PD_RR,   "RR" },   /* Radio Resource management messages */
+       { GMR1_PD_GMM,  "GMM" },  /* GPRS Mobility Management messages */
+       { GMR1_PD_SM,   "SM" },   /* Session Management messages */
+       { GMR1_PD_DTRS, "DTRS" }, /* DTMF transmission and reception service */
+       { 0, NULL}
+};
+
+
+/* ------------------------------------------------------------------------ */
+/* Common Information Elements                                              */
+/* ------------------------------------------------------------------------ */
+
+const value_string gmr1_ie_common_strings[] = {
+       { 0, "Mobile Earth Station Classmark 2" },      /* [1] 11.5.1.6 */
+       { 0, "Spare Half Octet" },                      /* [1] 11.5.1.8 */
+       { 0, NULL}
+};
+
+gint ett_gmr1_ie_common[NUM_GMR1_IE_COMMON];
+
+/* Fields */
+int hf_gmr1_skip_ind = -1;
+int hf_gmr1_l3_pd = -1;
+int hf_gmr1_elem_id = -1;
+int hf_gmr1_len = -1;
+
+static int hf_com_cm2_spare1 = -1;
+static int hf_com_cm2_revision = -1;
+static int hf_com_cm2_early_send = -1;
+static int hf_com_cm2_a5_1 = -1;
+static int hf_com_cm2_mes_type = -1;
+static int hf_com_cm2_spare2 = -1;
+static int hf_com_cm2_ss_screen_ind = -1;
+static int hf_com_cm2_sms_cap = -1;
+static int hf_com_cm2_spare3 = -1;
+static int hf_com_cm2_freq_cap = -1;
+static int hf_com_cm2_cm3_presence = -1;
+static int hf_com_cm2_spare4 = -1;
+static int hf_com_cm2_a5_3 = -1;
+static int hf_com_cm2_a5_2_gmr1 = -1;
+
+/* [1] 11.5.1.6 - Mobile Earth Station Classmark 2 */
+static const value_string com_cm2_revision_vals[] = {
+       { 0, "Reserved for Phase 1" },
+       { 1, "Phase 2 MESs" },
+       { 2, "Reserved" },
+       { 3, "Reserved" },
+       { 0, NULL }
+};
+
+static const value_string com_cm2_early_send_vals[] = {
+       { 0, "\"Controlled Early Classmark Sending\" option is not implemented" },
+       { 1, "\"Controlled Early Classmark Sending\" option is implemented" },
+       { 0, NULL }
+};
+
+static const value_string com_cm2_a5_1_vals[] = {
+       { 0, "Encryption algorithm A5/1 available" },
+       { 1, "Encryption algorithm A5/1 not available" },
+       { 0, NULL }
+};
+
+static const value_string com_cm2_mes_type_vals[] = {
+       { 0, "Class 1 Reserved" },
+       { 1, "Class 2 Used by all fixed GMR-1 terminals" },
+       { 2, "Class 3 Used by all vehicular GMR-1 terminals" },
+       { 3, "Class 4 Used by all handheld GMR-1 terminals" },
+       { 0, NULL }
+};
+
+static const value_string com_cm2_ss_screen_ind_vals[] = {
+       { 0, "Defined in GSM 04.80 [29]" },
+       { 1, "Defined in GSM 04.80 [29]" },
+       { 2, "Defined in GSM 04.80 [29]" },
+       { 3, "Defined in GSM 04.80 [29]" },
+       { 0, NULL }
+};
+
+static const value_string com_cm2_sms_cap_vals[] = {
+       { 0, "MES does not support mobile terminated point-to-point SMS" },
+       { 1, "MES supports mobile terminated point-to-point SMS" },
+       { 0, NULL }
+};
+
+static const value_string com_cm2_freq_cap_vals[] = {
+       { 0, "Not used in GMR-1" },
+       { 1, "Not used in GMR-1" },
+       { 0, NULL }
+};
+
+static const value_string com_cm3_presence_vals[] = {
+       { 0, "No additional MES capability information available" },
+       { 1, "Additional MES capabilities are described in the Classmark 3 IE" },
+       { 0, NULL }
+};
+
+static const value_string com_cm2_a5_3_vals[] = {
+       { 0, "Encryption algorithm A5/3 not available" },
+       { 1, "Encryption algorithm A5/3 available" },
+       { 0, NULL }
+};
+
+static const value_string com_cm2_a5_2_gmr1_vals[] = {
+       { 0, "Encryption algorithm GMR-1 A5/2 not available" },
+       { 1, "Encryption algorithm GMR-1 A5/2 available" },
+       { 0, NULL }
+};
+
+GMR1_IE_FUNC(gmr1_ie_com_cm2)
+{
+       proto_tree_add_item(tree, hf_com_cm2_spare1,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_revision,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_early_send,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_a5_1,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_mes_type,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       offset++;
+
+       proto_tree_add_item(tree, hf_com_cm2_spare2,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_ss_screen_ind,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_sms_cap,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_spare3,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_freq_cap,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       offset++;
+
+       proto_tree_add_item(tree, hf_com_cm2_cm3_presence,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_spare4,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_a5_3,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       proto_tree_add_item(tree, hf_com_cm2_a5_2_gmr1,
+                           tvb, offset, 1, ENC_BIG_ENDIAN);
+
+       offset++;
+
+       return 3;
+}
+
+/* [1] 11.5.1.8 - Spare Half Octet */
+GMR1_IE_FUNC(gmr1_ie_com_spare_nibble)
+{
+       proto_tree_add_text(tree, tvb, offset, 1, "Spare Half Octet");
+
+       return 1;
+}
+
+elem_fcn gmr1_ie_common_func[NUM_GMR1_IE_COMMON] = {
+       gmr1_ie_com_cm2,                        /* MES Classmark 2 */
+       gmr1_ie_com_spare_nibble,               /* Spare Half Octet */
+};
+
+
+/* ------------------------------------------------------------------------ */
+/* Messages and IEs parsing                                                 */
+/* ------------------------------------------------------------------------ */
+
+void
+gmr1_get_msg_params(gmr1_pd_e pd, guint8 oct _U_, const gchar **msg_str,
+                    int *ett_tree, int *hf_idx, gmr1_msg_func_t *msg_func_p)
+{
+       switch (pd) {
+       default:
+               *msg_str = NULL;
+               *ett_tree = -1;
+               *hf_idx = -1;
+               *msg_func_p = NULL;
+       }
+}
+
+
+/* ------------------------------------------------------------------------ */
+/* Register code                                                            */
+/* ------------------------------------------------------------------------ */
+
+void
+proto_register_gmr1_common(void)
+{
+       static hf_register_info hf[] = {
+               { &hf_gmr1_skip_ind,
+                 { "Skip Indicator", "gmr1.skip_ind",
+                   FT_UINT8, BASE_DEC, NULL, 0xf0,
+                   NULL, HFILL }
+               },
+               { &hf_gmr1_l3_pd,
+                 { "Protocol discriminator","gmr1.l3_protocol_discriminator",
+                   FT_UINT8, BASE_DEC, VALS(gmr1_pd_vals), 0x0f,
+                   NULL, HFILL }
+               },
+               { &hf_gmr1_elem_id,
+                 { "Element ID", "gmr1.ie.elem_id",
+                   FT_UINT8, BASE_HEX, NULL, 0,
+                   NULL, HFILL }
+               },
+               { &hf_gmr1_len,
+                 { "Length", "gmr1.ie.length",
+                   FT_UINT8, BASE_DEC, NULL, 0,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_spare1,
+                 { "Spare", "gmr1.common.cm2.spare1",
+                   FT_UINT8, BASE_DEC, NULL, 0x80,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_revision,
+                 { "Revision Level", "gmr1.common.cm2.revision",
+                   FT_UINT8, BASE_DEC, VALS(com_cm2_revision_vals), 0x60,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_early_send,
+                 { "ES IND", "gmr1.common.cm2.early_send",
+                   FT_UINT8, BASE_DEC, VALS(com_cm2_early_send_vals), 0x10,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_a5_1,
+                 { "A5/1", "gmr1.common.cm2.a5_1",
+                   FT_UINT8, BASE_DEC, VALS(com_cm2_a5_1_vals), 0x08,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_mes_type,
+                 { "MES terminal type", "gmr1.common.cm2.mes_type",
+                   FT_UINT8, BASE_DEC, VALS(com_cm2_mes_type_vals), 0x07,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_spare2,
+                 { "Spare", "gmr1.common.cm2.spare2",
+                   FT_UINT8, BASE_DEC, NULL, 0xc0,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_ss_screen_ind,
+                 { "SS Screening Indicator", "gmr1.common.cm2.ss_screen_ind",
+                   FT_UINT8, BASE_DEC, VALS(com_cm2_ss_screen_ind_vals), 0x30,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_sms_cap,
+                 { "SM capability", "gmr1.common.cm2.sms_cap",
+                   FT_UINT8, BASE_DEC, VALS(com_cm2_sms_cap_vals), 0x08,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_spare3,
+                 { "Spare", "gmr1.common.cm2.spare3",
+                   FT_UINT8, BASE_DEC, NULL, 0x06,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_freq_cap,
+                 { "FC", "gmr1.common.cm2.freq_cap",
+                   FT_UINT8, BASE_DEC, VALS(com_cm2_freq_cap_vals), 0x01,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_cm3_presence,
+                 { "CM3", "gmr1.common.cm2.cm3_presence",
+                   FT_UINT8, BASE_DEC, VALS(com_cm3_presence_vals), 0x80,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_spare4,
+                 { "Spare", "gmr1.common.cm2.spare4",
+                   FT_UINT8, BASE_DEC, NULL, 0x7c,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_a5_3,
+                 { "A5/3", "gmr1.common.cm2.a5_3",
+                   FT_UINT8, BASE_DEC, VALS(com_cm2_a5_3_vals), 0x02,
+                   NULL, HFILL }
+               },
+               { &hf_com_cm2_a5_2_gmr1,
+                 { "A5/2 GMR-1", "gmr1.common.cm2.a5_2_gmr1",
+                   FT_UINT8, BASE_DEC, VALS(com_cm2_a5_2_gmr1_vals), 0x01,
+                   NULL, HFILL }
+               },
+       };
+
+       /* Register the protocol name and field description */
+       proto_gmr1_common = proto_register_protocol("GEO-Mobile Radio (1) Common", "GMR-1 Common", "gmr1_common");
+
+       proto_register_field_array(proto_gmr1_common, hf, array_length(hf));
+}
+
+void
+proto_reg_handoff_gmr1_common(void)
+{
+       /* Nothing to do */
+}
diff --git a/epan/dissectors/packet-gmr1_common.h b/epan/dissectors/packet-gmr1_common.h
new file mode 100644 (file)
index 0000000..c0bde4c
--- /dev/null
@@ -0,0 +1,100 @@
+/* packet-gmr1_common.h
+ *
+ * Headers for GMR-1 dissection in wireshark (common stuff).
+ * Copyright (c) 2011 Sylvain Munaut <tnt@246tNt.com>
+ *
+ * References:
+ *  [1] ETSI TS 101 376-4-8 V1.3.1 - GMR-1 04.008
+ *  [2] ETSI TS 101 376-4-8 V2.2.1 - GMPRS-1 04.008
+ *  [3] ETSI TS 101 376-4-8 V3.1.1 - GMR-1 3G 44.008
+ *  [4] ETSI TS 100 940 V7.21.0 - GSM 04.08
+ *  [5] ETSI TS 101 376-4-12 V3.2.1 - GMR-1 3G 44.060
+ *  [6] ETSI TS 101 376-5-6 V1.3.1 - GMR-1 05.008
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __PACKET_GMR1_COMMON_H__
+#define __PACKET_GMR1_COMMON_H__
+
+#include "packet-gsm_a_common.h"
+
+
+/* Protocol descriptor (see [1] 11.2 & [4] 10.2) */
+typedef enum {
+       GMR1_PD_CC      = 0x03,
+       GMR1_PD_MM      = 0x05,
+       GMR1_PD_RR      = 0x06,
+       GMR1_PD_GMM     = 0x08,
+       GMR1_PD_SM      = 0x0a,
+       GMR1_PD_DTRS    = 0x1e,
+} gmr1_pd_e;
+
+#define GMR1_PD_EXT_MSK        0x0f
+#define GMR1_PD_EXT_VAL        0x0e
+
+extern const value_string gmr1_pd_vals[];
+extern const value_string gmr1_pd_short_vals[];
+
+
+/* Common IEs */
+enum gmr1_ie_common_idx {
+       GMR1_IE_COM_CM2,                        /* [1] 11.5.1.6 */
+       GMR1_IE_COM_SPARE_NIBBLE,               /* [1] 11.5.1.8 */
+       NUM_GMR1_IE_COMMON /* Terminator */
+};
+
+extern int hf_gmr1_skip_ind;
+extern int hf_gmr1_l3_pd;
+extern int hf_gmr1_elem_id;
+extern int hf_gmr1_len;
+
+
+/* Message & IEs parsing */
+
+typedef void (*gmr1_msg_func_t)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint offset, gint len);
+
+#define GMR1_IE_FUNC(fn_name)  \
+       static guint16 \
+       fn_name (tvbuff_t *tvb _U_, proto_tree *tree _U_, packet_info *pinfo _U_, guint32 offset _U_, guint len _U_, gchar *add_string _U_, int string_len _U_)
+
+#define GMR1_MSG_FUNC(fn_name) \
+       static void \
+       fn_name (tvbuff_t *tvb _U_, proto_tree *tree _U_, packet_info *pinfo _U_, gint offset, gint len)
+
+#define GMR1_MSG_FUNC_BEGIN    \
+       gint curr_offset;       \
+       gint curr_len;          \
+       gint consumed;          \
+                               \
+       curr_offset = offset;   \
+       curr_len = len;         \
+       consumed = 0;
+
+#define GMR1_MSG_FUNC_END
+
+
+extern void
+gmr1_get_msg_params(gmr1_pd_e pd, guint8 oct, const gchar **msg_str,
+                    int *ett_tree, int *hf_idx, gmr1_msg_func_t *msg_func_p);
+
+
+#endif /* __PACKET_GMR1_COMMON_H__ */
index 069c4a35c21e98507f994e903694be62022f59e5..a23d8f12546fac752ee87737a621f82b89075721 100644 (file)
@@ -1084,6 +1084,9 @@ const char* get_gsm_a_msg_string(int pdu_type, int idx)
        case BSSGP_PDU_TYPE:
                msg_string = bssgp_elem_strings[idx].strptr;
                break;
+       case GMR1_IE_COMMON:
+               msg_string = gmr1_ie_common_strings[idx].strptr; 
+               break;
        default:
                DISSECTOR_ASSERT_NOT_REACHED();
        }
@@ -1135,6 +1138,9 @@ static int get_hf_elem_id(int pdu_type)
        case BSSGP_PDU_TYPE:
                hf_elem_id = hf_bssgp_elem_id;
                break;
+       case GMR1_IE_COMMON:
+               hf_elem_id = hf_gmr1_elem_id;
+               break;
        default:
                DISSECTOR_ASSERT_NOT_REACHED();
        }
index 7456d82755cf6273d765f764f398e4211e211740..9c035cdc15112fe31f519ee40d1b24cd77d2e0e9 100644 (file)
@@ -151,6 +151,11 @@ extern gint ett_bssgp_elem[];
 extern elem_fcn bssgp_elem_fcn[];
 extern int hf_bssgp_elem_id;
 
+extern const value_string gmr1_ie_common_strings[];
+extern elem_fcn gmr1_ie_common_func[];
+extern gint ett_gmr1_ie_common[];
+extern int hf_gmr1_elem_id;
+
 extern sccp_msg_info_t* sccp_msg;
 extern sccp_assoc_info_t* sccp_assoc;
 
@@ -192,6 +197,7 @@ extern int hf_gsm_a_lac;
 #define NAS_PDU_TYPE_ESM            11
 #define SGSAP_PDU_TYPE              12
 #define BSSGP_PDU_TYPE              13
+#define GMR1_IE_COMMON              14
 
 extern const char* get_gsm_a_msg_string(int pdu_type, int idx);
 
@@ -321,6 +327,11 @@ extern const char* get_gsm_a_msg_string(int pdu_type, int idx);
         SEV_elem_ett = ett_bssgp_elem; \
         SEV_elem_funcs = bssgp_elem_fcn; \
         break; \
+    case GMR1_IE_COMMON: \
+        SEV_elem_names = gmr1_ie_common_strings; \
+        SEV_elem_ett = ett_gmr1_ie_common; \
+        SEV_elem_funcs = gmr1_ie_common_func; \
+        break; \
     default: \
         proto_tree_add_text(tree, \
             tvb, curr_offset, -1, \