diff options
author | Michael Mann <mmann78@netscape.net> | 2013-11-20 02:28:14 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2013-11-20 02:28:14 +0000 |
commit | f34e11fabead2968fab30e5c3caab8b377aaa287 (patch) | |
tree | e2711798ee2270721ea8aca29b2419bbe78bcf5a /epan/dissectors/packet-sll.c | |
parent | ea278d3bf871239989365121270410930f197377 (diff) |
Convert ethertype() function into a pure dissector. Bug 9454 (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9454)
The main driving force for this was my new Decode As functionality (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9450) that wants a dissector/subdissector table relationship for all dissectors wanting to use Decode As functionality. The ethertype() function provides the value to the "ethertype" subdissector table, so I think it should be matched to a dissector. Only odd side effect is the display filter of "ethertype" returns no packets because there is no "item" associated with the dissector.
svn path=/trunk/; revision=53443
Diffstat (limited to 'epan/dissectors/packet-sll.c')
-rw-r--r-- | epan/dissectors/packet-sll.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/epan/dissectors/packet-sll.c b/epan/dissectors/packet-sll.c index 1be101442e..e2cef0e148 100644 --- a/epan/dissectors/packet-sll.c +++ b/epan/dissectors/packet-sll.c @@ -77,6 +77,7 @@ static const value_string ltype_vals[] = { static dissector_handle_t sll_handle; +static dissector_handle_t ethertype_handle; static header_field_info *hfi_sll = NULL; @@ -200,6 +201,7 @@ dissect_sll(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_item *ti; tvbuff_t *next_tvb; proto_tree *fh_tree = NULL; + ethertype_data_t ethertype_data; col_set_str(pinfo->cinfo, COL_PROTOCOL, "SLL"); col_clear(pinfo->cinfo, COL_INFO); @@ -298,8 +300,14 @@ dissect_sll(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) protocol, next_tvb, pinfo, tree); break; default: - ethertype(protocol, tvb, SLL_HEADER_SIZE, pinfo, tree, - fh_tree, hfi_sll_etype.id, hfi_sll_trailer.id, 0); + ethertype_data.etype = protocol; + ethertype_data.offset_after_ethertype = SLL_HEADER_SIZE; + ethertype_data.fh_tree = fh_tree; + ethertype_data.etype_id = hfi_sll_etype.id; + ethertype_data.trailer_id = hfi_sll_trailer.id; + ethertype_data.fcs_len = 0; + + call_dissector_with_data(ethertype_handle, tvb, pinfo, tree, ðertype_data); break; } } @@ -356,6 +364,7 @@ proto_reg_handoff_sll(void) */ gre_dissector_table = find_dissector_table("gre.proto"); data_handle = find_dissector("data"); + ethertype_handle = find_dissector("ethertype"); dissector_add_uint("wtap_encap", WTAP_ENCAP_SLL, sll_handle); } |