aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHessam Jalali <hessam.jalali@gmail.com>2016-10-25 11:59:54 +0330
committerMichael Mann <mmann78@netscape.net>2016-10-25 17:22:46 +0000
commit346bda4238033fb146d6a7e7f21ecd714da396a2 (patch)
treec692ae636b36f001fbb5fc0adbbda6c672b66182
parentc63f89515985a8db0aa8a500b1832474619090aa (diff)
e212: added 3 new filters (CGI, ECGI, TAI)
Added these new filters to enhance mcc/mnc filtering in GTP protocol. Change-Id: I595b5fde4fa358886fbe5c58f6ecab496d9ef08c Reviewed-on: https://code.wireshark.org/review/18444 Reviewed-by: Jaap Keuter <jaap.keuter@xs4all.nl> Petri-Dish: Jaap Keuter <jaap.keuter@xs4all.nl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Reviewed-by: Michael Mann <mmann78@netscape.net>
-rw-r--r--epan/dissectors/packet-e212.c48
-rw-r--r--epan/dissectors/packet-e212.h5
-rw-r--r--epan/dissectors/packet-gtp.c12
-rw-r--r--epan/dissectors/packet-gtpv2.c6
4 files changed, 61 insertions, 10 deletions
diff --git a/epan/dissectors/packet-e212.c b/epan/dissectors/packet-e212.c
index 5ea8dc6e7a..8cc31032bc 100644
--- a/epan/dissectors/packet-e212.c
+++ b/epan/dissectors/packet-e212.c
@@ -2724,10 +2724,16 @@ static int hf_E212_mcc = -1;
static int hf_E212_mcc_lai = -1;
static int hf_E212_mcc_sai = -1;
static int hf_E212_mcc_rai = -1;
+static int hf_E212_mcc_cgi = -1;
+static int hf_E212_mcc_ecgi = -1;
+static int hf_E212_mcc_tai = -1;
static int hf_E212_mnc = -1;
static int hf_E212_mnc_lai = -1;
static int hf_E212_mnc_sai = -1;
static int hf_E212_mnc_rai = -1;
+static int hf_E212_mnc_cgi = -1;
+static int hf_E212_mnc_ecgi = -1;
+static int hf_E212_mnc_tai = -1;
static int ett_e212_imsi = -1;
@@ -2817,6 +2823,18 @@ dissect_e212_mcc_mnc_wmem_packet_str(tvbuff_t *tvb, packet_info *pinfo, proto_tr
hf_E212_mcc_id = hf_E212_mcc_sai;
hf_E212_mnc_id = hf_E212_mnc_sai;
break;
+ case E212_CGI:
+ hf_E212_mcc_id = hf_E212_mcc_cgi;
+ hf_E212_mnc_id = hf_E212_mnc_cgi;
+ break;
+ case E212_ECGI:
+ hf_E212_mcc_id = hf_E212_mcc_ecgi;
+ hf_E212_mnc_id = hf_E212_mnc_ecgi;
+ break;
+ case E212_TAI:
+ hf_E212_mcc_id = hf_E212_mcc_tai;
+ hf_E212_mnc_id = hf_E212_mnc_tai;
+ break;
default:
hf_E212_mcc_id = hf_E212_mcc;
hf_E212_mnc_id = hf_E212_mnc;
@@ -3200,6 +3218,21 @@ proto_register_e212(void)
FT_UINT16, BASE_DEC|BASE_EXT_STRING, &E212_codes_ext, 0x0,
"Mobile Country Code MCC", HFILL }
},
+ { &hf_E212_mcc_cgi,
+ { "Mobile Country Code (MCC)","e212.cgi.mcc",
+ FT_UINT16, BASE_DEC|BASE_EXT_STRING, &E212_codes_ext, 0x0,
+ "Mobile Country Code MCC", HFILL }
+ },
+ { &hf_E212_mcc_ecgi,
+ { "Mobile Country Code (MCC)","e212.ecgi.mcc",
+ FT_UINT16, BASE_DEC|BASE_EXT_STRING, &E212_codes_ext, 0x0,
+ "Mobile Country Code MCC", HFILL }
+ },
+ { &hf_E212_mcc_tai,
+ { "Mobile Country Code (MCC)","e212.tai.mcc",
+ FT_UINT16, BASE_DEC|BASE_EXT_STRING, &E212_codes_ext, 0x0,
+ "Mobile Country Code MCC", HFILL }
+ },
{ &hf_E212_mnc,
{ "Mobile Network Code (MNC)","e212.mnc",
FT_UINT16, BASE_DEC, NULL, 0x0,
@@ -3220,6 +3253,21 @@ proto_register_e212(void)
FT_UINT16, BASE_DEC, NULL, 0x0,
"Mobile network code", HFILL }
},
+ { &hf_E212_mnc_cgi,
+ { "Mobile Network Code (MNC)","e212.cgi.mnc",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Mobile network code", HFILL }
+ },
+ { &hf_E212_mnc_ecgi,
+ { "Mobile Network Code (MNC)","e212.ecgi.mnc",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Mobile network code", HFILL }
+ },
+ { &hf_E212_mnc_tai,
+ { "Mobile Network Code (MNC)","e212.tai.mnc",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Mobile network code", HFILL }
+ },
#if 0
{ &hf_E212_msin,
{ "Mobile Subscriber Identification Number (MSIN)", "e212.msin",
diff --git a/epan/dissectors/packet-e212.h b/epan/dissectors/packet-e212.h
index dc00622252..b93e9a6566 100644
--- a/epan/dissectors/packet-e212.h
+++ b/epan/dissectors/packet-e212.h
@@ -35,7 +35,10 @@ typedef enum {
E212_NONE,
E212_LAI,
E212_RAI,
- E212_SAI
+ E212_SAI,
+ E212_CGI,
+ E212_ECGI,
+ E212_TAI
} e212_number_type_t;
gchar* dissect_e212_mcc_mnc_wmem_packet_str(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, e212_number_type_t number_type, gboolean little_endian);
diff --git a/epan/dissectors/packet-gtp.c b/epan/dissectors/packet-gtp.c
index 299dc1de27..6300ac27d7 100644
--- a/epan/dissectors/packet-gtp.c
+++ b/epan/dissectors/packet-gtp.c
@@ -5995,7 +5995,7 @@ gchar *dissect_radius_user_loc(proto_tree * tree, tvbuff_t * tvb, packet_info* p
* CGI is defined in sub-clause 4.3.1 of 3GPP TS 23.003 [2].
*/
/* Use gsm_a's function to dissect Geographic Location by faking disc ( last 0) */
- be_cell_id_aux(tvb, tree, pinfo, offset, length - 1, NULL, 0, 0);
+ be_cell_id_type(tvb, tree, pinfo, offset, length - 1, NULL, 0, 0, E212_CGI);
break;
case 1:
/* Geographic Location field included and it holds the Service
@@ -6024,7 +6024,7 @@ gchar *dissect_radius_user_loc(proto_tree * tree, tvbuff_t * tvb, packet_info* p
* Area Identity (TAI) of where the user currently is registered.
* TAI is defined in sub-clause 8.21.4 of 3GPP TS 29.274.
*/
- dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, TRUE);
+ dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_TAI, TRUE);
offset+=3;
proto_tree_add_item(tree, hf_gtp_tac, tvb, offset, 2, ENC_BIG_ENDIAN);
break;
@@ -6033,7 +6033,7 @@ gchar *dissect_radius_user_loc(proto_tree * tree, tvbuff_t * tvb, packet_info* p
* Global Identifier (ECGI) of where the user currently is registered.
* ECGI is defined in sub-clause 8.21.5 of 3GPP TS 29.274.
*/
- dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, TRUE);
+ dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_ECGI, TRUE);
offset+=3;
proto_tree_add_item(tree, hf_gtp_eci, tvb, offset, 4, ENC_BIG_ENDIAN);
break;
@@ -6044,11 +6044,11 @@ gchar *dissect_radius_user_loc(proto_tree * tree, tvbuff_t * tvb, packet_info* p
* TAI is defined in sub-clause 8.21.4 of 3GPP TS 29.274.
* ECGI is defined in sub-clause 8.21.5 of 3GPP TS 29.274.
*/
- dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, TRUE);
+ dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_TAI, TRUE);
offset+=3;
proto_tree_add_item(tree, hf_gtp_tac, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, TRUE);
+ dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_ECGI, TRUE);
offset+=3;
proto_tree_add_item(tree, hf_gtp_eci, tvb, offset, 4, ENC_BIG_ENDIAN);
break;
@@ -6093,7 +6093,7 @@ decode_gtp_usr_loc_inf(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tr
* CGI is defined in sub-clause 4.3.1 of 3GPP TS 23.003 [2].
*/
/* Use gsm_a's function to dissect Geographic Location by faking disc ( last 0) */
- be_cell_id_aux(tvb, ext_tree, pinfo, offset, length - 1, NULL, 0, 0);
+ be_cell_id_type(tvb, ext_tree, pinfo, offset, length - 1, NULL, 0, 0, E212_CGI);
break;
case 1:
/* Geographic Location field included and it holds the Service
diff --git a/epan/dissectors/packet-gtpv2.c b/epan/dissectors/packet-gtpv2.c
index 5d34ee9969..608b624144 100644
--- a/epan/dissectors/packet-gtpv2.c
+++ b/epan/dissectors/packet-gtpv2.c
@@ -2270,7 +2270,7 @@ dissect_gtpv2_tai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offs
gchar *mcc_mnc_str;
guint16 tac;
- mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, TRUE);
+ mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_TAI, TRUE);
*offset += 3;
tac = tvb_get_ntohs(tvb, *offset);
proto_tree_add_item(tree, hf_gtpv2_tai_tac, tvb, *offset, 2, ENC_BIG_ENDIAN);
@@ -2297,7 +2297,7 @@ dissect_gtpv2_ecgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *off
NULL
};
- mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, TRUE);
+ mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_ECGI, TRUE);
*offset += 3;
/* The bits 8 through 5, of octet e+3 (Fig 8.21.5-1 in TS 29.274 V8.2.0) are spare
* and hence they would not make any difference to the hex string following it,
@@ -2375,7 +2375,7 @@ dissect_gtpv2_cgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offs
gchar *mcc_mnc_str;
guint16 lac, ci;
- mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, TRUE);
+ mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_CGI, TRUE);
*offset += 3;
lac = tvb_get_ntohs(tvb, *offset);
proto_tree_add_item(tree, hf_gtpv2_uli_cgi_lac, tvb, *offset, 2, ENC_BIG_ENDIAN);