diff options
author | Jan Spevak <jan.spevak@nokia.com> | 2016-10-19 09:27:36 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2016-10-19 07:42:37 +0000 |
commit | 5cbdbecc35f77c40142e2e5389e553931490eea0 (patch) | |
tree | 8607ef49c2e4940083ead234c8517e9955c8d970 | |
parent | b83ea466655a77dacd8ad0bd38706afbec1ce21c (diff) | |
download | wireshark-5cbdbecc35f77c40142e2e5389e553931490eea0.tar.gz |
GTPv2: Add support for NB-IoT features
Bug: 13026
Change-Id: I75de63bd58a35e234eef308fa592922e01ea3c18
Reviewed-on: https://code.wireshark.org/review/18300
Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r-- | diameter/dictionary.xml | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-gtpv2.c | 112 |
2 files changed, 112 insertions, 2 deletions
diff --git a/diameter/dictionary.xml b/diameter/dictionary.xml index b1a7b90c70..15519cfc88 100644 --- a/diameter/dictionary.xml +++ b/diameter/dictionary.xml @@ -3484,6 +3484,7 @@ <enum name="GAN" code="1002"/> <enum name="HSPA_EVOLUTION" code="1003"/> <enum name="EUTRAN" code="1004"/> + <enum name="EUTRAN-NB-IoT" code="1005"/> <enum name="CDMA2000_1X" code="2000"/> <enum name="HRPD" code="2001"/> <enum name="UMB" code="2002"/> @@ -4763,6 +4764,7 @@ <enum name="IPv6" code="1"/> <enum name="IPv4v6" code="2"/> <enum name="IPv4_OR_IPv6" code="3"/> + <enum name="Non-IP" code="4"/> </avp> <avp name="Roaming-Restricted-Due-To-Unsupported-Feature" code="1457" mandatory="must" vendor-bit="must" may-encrypt="no" vendor-id="TGPP"> <type type-name="Enumerated"/> diff --git a/epan/dissectors/packet-gtpv2.c b/epan/dissectors/packet-gtpv2.c index 2a904453b0..303a6ae058 100644 --- a/epan/dissectors/packet-gtpv2.c +++ b/epan/dissectors/packet-gtpv2.c @@ -138,9 +138,24 @@ static int hf_gtpv2_ppsi = -1; static int hf_gtpv2_csfbi = -1; static int hf_gtpv2_clii = -1; static int hf_gtpv2_cpsr = -1; +static int hf_gtpv2_nsi = -1; +static int hf_gtpv2_uasi = -1; +static int hf_gtpv2_dtci = -1; +static int hf_gtpv2_bdwi = -1; +static int hf_gtpv2_psci = -1; static int hf_gtpv2_pcri = -1; static int hf_gtpv2_aosi = -1; static int hf_gtpv2_aopi = -1; +static int hf_gtpv2_roaai = -1; +static int hf_gtpv2_epcosi = -1; +static int hf_gtpv2_cpopci = -1; +static int hf_gtpv2_pmtsmi = -1; +static int hf_gtpv2_s11tf = -1; +static int hf_gtpv2_pnsi = -1; +static int hf_gtpv2_unaccsi = -1; +static int hf_gtpv2_wpmsi = -1; +static int hf_gtpv2_enbcrsi = -1; +static int hf_gtpv2_tspcmi = -1; static int hf_gtpv2_pdn_type = -1; @@ -1984,7 +1999,12 @@ dissect_gtpv2_ind(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_ite return; } - /* Octet 9 Spare Spare Spare Spare Spare PCRI AOSI AOPI */ + /* Octet 9 NSI UASI DTCI BDWI PSCI PCRI AOSI AOPI */ + proto_tree_add_item(tree, hf_gtpv2_nsi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_uasi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_dtci, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_bdwi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_psci, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gtpv2_pcri, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gtpv2_aosi, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gtpv2_aopi, tvb, offset, 1, ENC_BIG_ENDIAN); @@ -1994,6 +2014,30 @@ dissect_gtpv2_ind(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_ite return; } + /* Octet 10 ROAAI EPCOSI CPOPCI PMTSMI S11TF PNSI UNACCSI WPMSI */ + proto_tree_add_item(tree, hf_gtpv2_roaai, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_epcosi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_cpopci, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_pmtsmi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_s11tf, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_pnsi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_unaccsi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_wpmsi, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + + if (length == 6){ + return; + } + + /*Octet 11 Spare Spare Spare Spare Spare Spare ENBCRSI TSPCMI */ + proto_tree_add_item(tree, hf_gtpv2_enbcrsi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_tspcmi, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + + if (length == 7){ + return; + } + proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet"); @@ -2042,6 +2086,7 @@ static const value_string gtpv2_pdn_type_vals[] = { {1, "IPv4"}, {2, "IPv6"}, {3, "IPv4/IPv6"}, + {4, "Non-IP"}, {0, NULL} }; @@ -2145,6 +2190,7 @@ static const value_string gtpv2_rat_type_vals[] = { {5, "HSPA Evolution"}, {6, "EUTRAN"}, {7, "Virtual"}, + {8, "EUTRAN-NB-IoT"}, {0, NULL} }; static value_string_ext gtpv2_rat_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_rat_type_vals); @@ -2586,6 +2632,8 @@ static const value_string gtpv2_f_teid_interface_type_vals[] = { {35, "S2a TWAN GTP-C interface"}, {36, "S2a PGW GTP-C interface"}, {37, "S2a PGW GTP-U interface"}, + {38, "S11 MME GTP-U interface"}, + {39, "S11 SGW GTP-U interface"}, {0, NULL} }; static value_string_ext gtpv2_f_teid_interface_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_f_teid_interface_type_vals); @@ -7202,9 +7250,29 @@ void proto_register_gtpv2(void) FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL} }, {&hf_gtpv2_cpsr, - {"CPSR (CS to PS SRVCC indication)", "gtpv2.cpsr", + {"CPSR (CS to PS SRVCC Indication)", "gtpv2.cpsr", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL} }, + {&hf_gtpv2_nsi, + {"NSI (NBIFOM Support Indication)", "gtpv2.nsi", + FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL} + }, + {&hf_gtpv2_uasi, + {"UASI (UE Available for Signalling Indication)", "gtpv2.uasi", + FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL} + }, + {&hf_gtpv2_dtci, + {"DTCI (Delay Tolerant Connection Indication)", "gtpv2.dtci", + FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL} + }, + {&hf_gtpv2_bdwi, + {"BDWI (Buffered DL Data Waiting Indication)", "gtpv2.bdwi", + FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL} + }, + {&hf_gtpv2_psci, + {"PSCI (Pending Subscription Change Indication)", "gtpv2.psci", + FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL} + }, {&hf_gtpv2_pcri, {"PCRI (P-CSCF Restoration Indication)", "gtpv2.pcri", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL} @@ -7217,6 +7285,46 @@ void proto_register_gtpv2(void) {"AOPI (Associate OCI with PGW node's Identity)", "gtpv2.aopi", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL} }, + {&hf_gtpv2_roaai, + {"ROAAI (Release Over Any Access Indication)", "gtpv2.roaai", + FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL} + }, + {&hf_gtpv2_epcosi, + {"EPCOSI (Extended PCO Support Indication)", "gtpv2.epcosi", + FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL} + }, + {&hf_gtpv2_cpopci, + {"CPOPCI (Control Plane Only PDN Connection Indication)", "gtpv2.cpopci", + FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL} + }, + {&hf_gtpv2_pmtsmi, + {"PMTSMI (Pending MT Short Message Indication)", "gtpv2.pmtsmi", + FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL} + }, + {&hf_gtpv2_s11tf, + {"S11TF (S11-U Tunnel Flag)", "gtpv2.s11tf", + FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL} + }, + {&hf_gtpv2_pnsi, + {"PNSI (Pending Network Initiated PDN Connection Signalling Indication)", "gtpv2.pnsi", + FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL} + }, + {&hf_gtpv2_unaccsi, + {"UNACCSI (UE Not Authorized Cause Code Support Indication)", "gtpv2.unaccsi", + FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL} + }, + {&hf_gtpv2_wpmsi, + {"WPMSI (WLCP PDN Connection Modification Support Indication)", "gtpv2.wpmsi", + FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL} + }, + {&hf_gtpv2_enbcrsi, + {"ENBCRSI (eNB Change Reporting Support Indication)", "gtpv2.enbcrsi", + FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL} + }, + {&hf_gtpv2_tspcmi, + {"TSPCMI (Triggering SGSN Initiated PDP Context Creation/Modification Indication)", "gtpv2.tspcmi", + FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL} + }, { &hf_gtpv2_pdn_type, {"PDN Type", "gtpv2.pdn_type", FT_UINT8, BASE_DEC, VALS(gtpv2_pdn_type_vals), 0x07, |