diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2013-11-08 21:38:32 +0000 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2013-11-08 21:38:32 +0000 |
commit | 7e312c9bbc83f9241c85d439b9c3dd47fac0763f (patch) | |
tree | 4cfc43bc37ece810cd6d44a556a42036b5ea6650 /epan/dissectors/packet-vlan.c | |
parent | b3a4b56ae94f554adc04c13c13712d4a476f0bbc (diff) |
Convert: vlan, sll, rip to NEW_PROTO_TREE_API
svn path=/trunk/; revision=53175
Diffstat (limited to 'epan/dissectors/packet-vlan.c')
-rw-r--r-- | epan/dissectors/packet-vlan.c | 94 |
1 files changed, 57 insertions, 37 deletions
diff --git a/epan/dissectors/packet-vlan.c b/epan/dissectors/packet-vlan.c index 340baf969d..74458d72ae 100644 --- a/epan/dissectors/packet-vlan.c +++ b/epan/dissectors/packet-vlan.c @@ -22,6 +22,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#define NEW_PROTO_TREE_API + #include "config.h" #include <glib.h> @@ -40,17 +42,12 @@ static unsigned int q_in_q_ethertype = 0x9100; static gboolean vlan_summary_in_tree = TRUE; -static int proto_vlan = -1; -static int hf_vlan_priority = -1; -static int hf_vlan_cfi = -1; -static int hf_vlan_id = -1; -static int hf_vlan_etype = -1; -static int hf_vlan_len = -1; -static int hf_vlan_trailer = -1; -static gint ett_vlan = -1; +static dissector_handle_t vlan_handle; -static expert_field ei_vlan_len = EI_INIT; +static header_field_info *hfi_vlan = NULL; + +#define VLAN_HFI_INIT HFI_INIT(proto_vlan) /* From Table G-2 of IEEE standard 802.1D-2004 */ static const value_string pri_vals[] = { @@ -65,12 +62,40 @@ static const value_string pri_vals[] = { { 0, NULL } }; +static header_field_info hfi_vlan_priority VLAN_HFI_INIT = { + "Priority", "vlan.priority", FT_UINT16, BASE_DEC, + VALS(pri_vals), 0xE000, "Descriptions are recommendations from IEEE standard 802.1D-2004", HFILL }; + static const value_string cfi_vals[] = { { 0, "Canonical" }, { 1, "Non-canonical" }, { 0, NULL } }; +static header_field_info hfi_vlan_cfi VLAN_HFI_INIT = { + "CFI", "vlan.cfi", FT_UINT16, BASE_DEC, + VALS(cfi_vals), 0x1000, "Canonical Format Identifier", HFILL }; + +static header_field_info hfi_vlan_id VLAN_HFI_INIT = { + "ID", "vlan.id", FT_UINT16, BASE_DEC, + NULL, 0x0FFF, "VLAN ID", HFILL }; + +static header_field_info hfi_vlan_etype VLAN_HFI_INIT = { + "Type", "vlan.etype", FT_UINT16, BASE_HEX, + VALS(etype_vals), 0x0, "Ethertype", HFILL }; + +static header_field_info hfi_vlan_len VLAN_HFI_INIT = { + "Length", "vlan.len", FT_UINT16, BASE_DEC, + NULL, 0x0, NULL, HFILL }; + +static header_field_info hfi_vlan_trailer VLAN_HFI_INIT = { + "Trailer", "vlan.trailer", FT_BYTES, BASE_NONE, + NULL, 0x0, "VLAN Trailer", HFILL }; + + +static gint ett_vlan = -1; + +static expert_field ei_vlan_len = EI_INIT; void capture_vlan(const guchar *pd, int offset, int len, packet_counts *ld ) { @@ -112,7 +137,7 @@ dissect_vlan(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) vlan_tree = NULL; if (tree) { - ti = proto_tree_add_item(tree, proto_vlan, tvb, 0, 4, ENC_NA); + ti = proto_tree_add_item(tree, hfi_vlan, tvb, 0, 4, ENC_NA); if (vlan_summary_in_tree) { proto_item_append_text(ti, ", PRI: %u, CFI: %u, ID: %u", @@ -121,9 +146,9 @@ dissect_vlan(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) vlan_tree = proto_item_add_subtree(ti, ett_vlan); - proto_tree_add_item(vlan_tree, hf_vlan_priority, tvb, 0, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(vlan_tree, hf_vlan_cfi, tvb, 0, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(vlan_tree, hf_vlan_id, tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(vlan_tree, &hfi_vlan_priority, tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(vlan_tree, &hfi_vlan_cfi, tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(vlan_tree, &hfi_vlan_id, tvb, 0, 2, ENC_BIG_ENDIAN); } encap_proto = tvb_get_ntohs(tvb, 2); @@ -145,47 +170,43 @@ dissect_vlan(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } dissect_802_3(encap_proto, is_802_2, tvb, 4, pinfo, tree, vlan_tree, - hf_vlan_len, hf_vlan_trailer, &ei_vlan_len, 0); + hfi_vlan_len.id, hfi_vlan_trailer.id, &ei_vlan_len, 0); } else { ethertype(encap_proto, tvb, 4, pinfo, tree, vlan_tree, - hf_vlan_etype, hf_vlan_trailer, 0); + hfi_vlan_etype.id, hfi_vlan_trailer.id, 0); } } void proto_register_vlan(void) { - static hf_register_info hf[] = { - { &hf_vlan_priority, { - "Priority", "vlan.priority", FT_UINT16, BASE_DEC, - VALS(pri_vals), 0xE000, "Descriptions are recommendations from IEEE standard 802.1D-2004", HFILL }}, - { &hf_vlan_cfi, { - "CFI", "vlan.cfi", FT_UINT16, BASE_DEC, - VALS(cfi_vals), 0x1000, "Canonical Format Identifier", HFILL }}, - { &hf_vlan_id, { - "ID", "vlan.id", FT_UINT16, BASE_DEC, - NULL, 0x0FFF, "VLAN ID", HFILL }}, - { &hf_vlan_etype, { - "Type", "vlan.etype", FT_UINT16, BASE_HEX, - VALS(etype_vals), 0x0, "Ethertype", HFILL }}, - { &hf_vlan_len, { - "Length", "vlan.len", FT_UINT16, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, - { &hf_vlan_trailer, { - "Trailer", "vlan.trailer", FT_BYTES, BASE_NONE, - NULL, 0x0, "VLAN Trailer", HFILL }} +#ifndef HAVE_HFI_SECTION_INIT + static header_field_info *hfi[] = { + &hfi_vlan_priority, + &hfi_vlan_cfi, + &hfi_vlan_id, + &hfi_vlan_etype, + &hfi_vlan_len, + &hfi_vlan_trailer, }; +#endif /* HAVE_HFI_SECTION_INIT */ + static gint *ett[] = { &ett_vlan }; + static ei_register_info ei[] = { { &ei_vlan_len, { "vlan.len.past_end", PI_MALFORMED, PI_ERROR, "Length field value goes past the end of the payload", EXPFILL }}, }; + module_t *vlan_module; expert_module_t* expert_vlan; + int proto_vlan; proto_vlan = proto_register_protocol("802.1Q Virtual LAN", "VLAN", "vlan"); - proto_register_field_array(proto_vlan, hf, array_length(hf)); + hfi_vlan = proto_registrar_get_nth(proto_vlan); + + proto_register_fields(proto_vlan, hfi, array_length(hfi)); proto_register_subtree_array(ett, array_length(ett)); expert_vlan = expert_register_protocol(proto_vlan); expert_register_field_array(expert_vlan, ei, array_length(ei)); @@ -200,18 +221,17 @@ proto_register_vlan(void) "The (hexadecimal) Ethertype used to indicate 802.1QinQ VLAN in VLAN tunneling.", 16, &q_in_q_ethertype); + vlan_handle = create_dissector_handle(dissect_vlan, proto_vlan); } void proto_reg_handoff_vlan(void) { static gboolean prefs_initialized = FALSE; - static dissector_handle_t vlan_handle; static unsigned int old_q_in_q_ethertype; if (!prefs_initialized) { - vlan_handle = create_dissector_handle(dissect_vlan, proto_vlan); dissector_add_uint("ethertype", ETHERTYPE_VLAN, vlan_handle); prefs_initialized = TRUE; } |