summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2016-01-17 20:49:25 -0800
committerGuy Harris <guy@alum.mit.edu>2016-01-18 04:50:12 +0000
commit609ea4baa62a523434cdd8ff350d56d135d588ae (patch)
tree9a40fb15ddfe3a055023efa63759767123cd49b3
parent8ec153f93816a302a325e40924f4e13383ad8eaf (diff)
downloadwireshark-609ea4baa62a523434cdd8ff350d56d135d588ae.tar.gz
Directly call the FDDI and "raw IP" dissectors from the nettl dissector.
Just get handles for the dissectors, don't go through the wtap_encap dissector table. Change-Id: I459249b98741cc069495c84ad4c47c0aa6768096 Reviewed-on: https://code.wireshark.org/review/13383 Reviewed-by: Guy Harris <guy@alum.mit.edu>
-rw-r--r--epan/dissectors/packet-fddi.c17
-rw-r--r--epan/dissectors/packet-nettl.c17
-rw-r--r--epan/dissectors/packet-raw.c6
3 files changed, 19 insertions, 21 deletions
diff --git a/epan/dissectors/packet-fddi.c b/epan/dissectors/packet-fddi.c
index f2680249bc..cdf6731b57 100644
--- a/epan/dissectors/packet-fddi.c
+++ b/epan/dissectors/packet-fddi.c
@@ -56,6 +56,8 @@ static gint ett_fddi_fc = -1;
static int fddi_tap = -1;
+static dissector_handle_t fddi_handle, fddi_bitswapped_handle;
+
static gboolean fddi_padding = FALSE;
#define FDDI_PADDING ((fddi_padding) ? 3 : 0)
@@ -512,7 +514,12 @@ proto_register_fddi(void)
* Called from various dissectors for encapsulated FDDI frames.
* We assume the MAC addresses in them aren't bitswapped.
*/
- register_dissector("fddi", dissect_fddi_not_bitswapped, proto_fddi);
+ fddi_handle = register_dissector("fddi", dissect_fddi_not_bitswapped, proto_fddi);
+
+ /*
+ * Here, we assume they are bitswapped.
+ */
+ fddi_bitswapped_handle = register_dissector("fddi_bitswapped", dissect_fddi_bitswapped, proto_fddi);
fddi_module = prefs_register_protocol(proto_fddi, NULL);
prefs_register_bool_preference(fddi_module, "padding",
@@ -528,20 +535,12 @@ proto_register_fddi(void)
void
proto_reg_handoff_fddi(void)
{
- dissector_handle_t fddi_handle, fddi_bitswapped_handle;
-
/*
* Get a handle for the LLC dissector.
*/
llc_handle = find_dissector("llc");
data_handle = find_dissector("data");
- fddi_handle = find_dissector("fddi");
- dissector_add_uint("wtap_encap", WTAP_ENCAP_FDDI, fddi_handle);
- dissector_add_uint("sflow_245.header_protocol", SFLOW_245_HEADER_FDDI, fddi_handle);
-
- fddi_bitswapped_handle =
- create_dissector_handle(dissect_fddi_bitswapped, proto_fddi);
dissector_add_uint("wtap_encap", WTAP_ENCAP_FDDI_BITSWAPPED,
fddi_bitswapped_handle);
diff --git a/epan/dissectors/packet-nettl.c b/epan/dissectors/packet-nettl.c
index 677bcfbea9..985b43eeb4 100644
--- a/epan/dissectors/packet-nettl.c
+++ b/epan/dissectors/packet-nettl.c
@@ -46,11 +46,12 @@ static int hf_nettl_uid = -1;
static dissector_handle_t eth_withoutfcs_handle;
static dissector_handle_t tr_handle;
+static dissector_handle_t fddi_bitswapped_handle;
static dissector_handle_t lapb_handle;
static dissector_handle_t x25_handle;
static dissector_handle_t sctp_handle;
+static dissector_handle_t raw_ip_handle;
static dissector_handle_t data_handle;
-static dissector_table_t wtap_dissector_table;
static dissector_table_t ip_proto_dissector_table;
static dissector_table_t tcp_subdissector_table;
@@ -237,9 +238,7 @@ dissect_nettl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U
call_dissector(tr_handle, tvb, pinfo, tree);
break;
case WTAP_ENCAP_NETTL_FDDI:
- if (!dissector_try_uint(wtap_dissector_table,
- WTAP_ENCAP_FDDI_BITSWAPPED, tvb, pinfo, tree))
- call_dissector(data_handle, tvb, pinfo, tree);
+ call_dissector(fddi_bitswapped_handle, tvb, pinfo, tree);
break;
case WTAP_ENCAP_NETTL_RAW_IP:
if ( (pinfo->pseudo_header->nettl.kind & NETTL_HDR_PDU_MASK) == 0 )
@@ -247,9 +246,8 @@ dissect_nettl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U
call_dissector(data_handle, tvb, pinfo, tree);
else if (pinfo->pseudo_header->nettl.subsys == NETTL_SUBSYS_NS_LS_SCTP )
call_dissector(sctp_handle, tvb, pinfo, tree);
- else if (!dissector_try_uint(wtap_dissector_table,
- WTAP_ENCAP_RAW_IP, tvb, pinfo, tree))
- call_dissector(data_handle, tvb, pinfo, tree);
+ else
+ call_dissector(raw_ip_handle, tvb, pinfo, tree);
break;
case WTAP_ENCAP_NETTL_RAW_ICMP:
if (!dissector_try_uint(ip_proto_dissector_table,
@@ -342,15 +340,16 @@ proto_reg_handoff_nettl(void)
dissector_handle_t nettl_handle;
/*
- * Get handles for the Ethernet, Token Ring, FDDI, and RAW dissectors.
+ * Get handles for various dissectors and dissector tables.
*/
eth_withoutfcs_handle = find_dissector("eth_withoutfcs");
tr_handle = find_dissector("tr");
+ fddi_bitswapped_handle = find_dissector("fddi_bitswapped");
lapb_handle = find_dissector("lapb");
x25_handle = find_dissector("x.25");
sctp_handle = find_dissector("sctp");
+ raw_ip_handle = find_dissector("raw_ip");
data_handle = find_dissector("data");
- wtap_dissector_table = find_dissector_table("wtap_encap");
ip_proto_dissector_table = find_dissector_table("ip.proto");
tcp_subdissector_table = find_dissector_table("tcp.port");
diff --git a/epan/dissectors/packet-raw.c b/epan/dissectors/packet-raw.c
index 4c3f048784..9a3d20a1d7 100644
--- a/epan/dissectors/packet-raw.c
+++ b/epan/dissectors/packet-raw.c
@@ -38,6 +38,7 @@ static gint ett_raw = -1;
static const char zeroes[10] = {0,0,0,0,0,0,0,0,0,0};
+static dissector_handle_t raw_handle;
static dissector_handle_t ip_handle;
static dissector_handle_t ipv6_handle;
static dissector_handle_t data_handle;
@@ -172,13 +173,13 @@ proto_register_raw(void)
proto_raw = proto_register_protocol("Raw packet data", "Raw", "raw");
proto_register_subtree_array(ett, array_length(ett));
+
+ raw_handle = register_dissector("raw_ip", dissect_raw, proto_raw);
}
void
proto_reg_handoff_raw(void)
{
- dissector_handle_t raw_handle;
-
/*
* Get handles for the IP, IPv6, undissected-data, and
* PPP-in-HDLC-like-framing dissectors.
@@ -187,7 +188,6 @@ proto_reg_handoff_raw(void)
ipv6_handle = find_dissector("ipv6");
data_handle = find_dissector("data");
ppp_hdlc_handle = find_dissector("ppp_hdlc");
- raw_handle = create_dissector_handle(dissect_raw, proto_raw);
dissector_add_uint("wtap_encap", WTAP_ENCAP_RAW_IP, raw_handle);
register_capture_dissector("wtap_encap", WTAP_ENCAP_RAW_IP, capture_raw, proto_raw);
}