aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-vlan.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2013-11-08 21:38:32 +0000
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2013-11-08 21:38:32 +0000
commit7e312c9bbc83f9241c85d439b9c3dd47fac0763f (patch)
tree4cfc43bc37ece810cd6d44a556a42036b5ea6650 /epan/dissectors/packet-vlan.c
parentb3a4b56ae94f554adc04c13c13712d4a476f0bbc (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.c94
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;
}