diff options
author | etxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7> | 2006-09-08 06:58:40 +0000 |
---|---|---|
committer | etxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7> | 2006-09-08 06:58:40 +0000 |
commit | ea12e6e7faa78658eca5b54b81f96c196206fa9c (patch) | |
tree | 99166a5c728a8057a04ffcee2556dfdc04385b59 | |
parent | 77dd5229d97cec2caebc37c09d042e9c30b66837 (diff) |
Move the code to handle ISO protocols over TCP/TPKT to packet-osi.c where it belongs.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@19180 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r-- | epan/dissectors/packet-clnp.c | 60 | ||||
-rw-r--r-- | epan/dissectors/packet-osi.c | 84 |
2 files changed, 77 insertions, 67 deletions
diff --git a/epan/dissectors/packet-clnp.c b/epan/dissectors/packet-clnp.c index 51f3bcc9b8..bd0ff63796 100644 --- a/epan/dissectors/packet-clnp.c +++ b/epan/dissectors/packet-clnp.c @@ -40,7 +40,6 @@ #include "packet-osi-options.h" #include "packet-isis.h" #include "packet-esis.h" -#include "packet-tpkt.h" #include <epan/nlpid.h> #include <epan/ipproto.h> #include <epan/expert.h> @@ -139,13 +138,8 @@ static const fragment_items cotp_frag_items = { }; static dissector_handle_t clnp_handle; -static dissector_handle_t clnp_tpkt_handle; static dissector_handle_t data_handle; -/* desegmentation of OSI over TPKT over TCP */ -static gboolean tpkt_desegment = FALSE; -int global_tcp_port_clnp_over_tpkt = 0; -int tcp_port_clnp_over_tpkt = 0; /* * ISO 8473 OSI CLNP definition (see RFC994) * @@ -168,7 +162,7 @@ int tcp_port_clnp_over_tpkt = 0; #define CNF_TYPE 0x1f #define CNF_ERR_OK 0x20 -#define CNF_MORE_SEGS 0x40 +#define CNF_MORE_SEGS 0x40 #define CNF_SEG_OK 0x80 #define DT_NPDU 0x1C @@ -1813,15 +1807,9 @@ static void dissect_ositp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) call_dissector(data_handle,tvb, pinfo, tree); } -/* Dissect CLNP over TCP over TPKT */ -static void -dissect_clnp_tpkt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) -{ - dissect_tpkt_encap(tvb, pinfo, tree, tpkt_desegment, clnp_handle); -} /* * CLNP part / main entry point - */ +*/ static void dissect_clnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { @@ -2131,6 +2119,7 @@ static void dissect_clnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /* Continue with COTP if any data. XXX - if this isn't the first Derived PDU of a segmented Initial PDU, skip that? */ + if (nsel == (char)tp_nsap_selector || always_decode_transport) { if (dissect_ositp_internal(next_tvb, pinfo, tree, FALSE)) { pinfo->fragmented = save_fragmented; @@ -2202,29 +2191,6 @@ cotp_reassemble_init(void) reassembled_table_init(&cotp_reassembled_table); } -void -proto_reg_handoff_clnp(void) -{ - static int clnp_prefs_initialized = FALSE; - - data_handle = find_dissector("data"); - if (!clnp_prefs_initialized) { - clnp_handle = create_dissector_handle(dissect_clnp, proto_clnp); - clnp_tpkt_handle = create_dissector_handle(dissect_clnp_tpkt, proto_clnp); - clnp_prefs_initialized = TRUE; - }else{ - dissector_delete("tcp.port", tcp_port_clnp_over_tpkt, clnp_tpkt_handle); - } - - tcp_port_clnp_over_tpkt = global_tcp_port_clnp_over_tpkt; - - dissector_add("osinl", NLPID_ISO8473_CLNP, clnp_handle); - dissector_add("osinl", NLPID_NULL, clnp_handle); /* Inactive subset */ - dissector_add("x.25.spi", NLPID_ISO8473_CLNP, clnp_handle); - dissector_add("tcp.port", global_tcp_port_clnp_over_tpkt, clnp_tpkt_handle); -} - - void proto_register_clnp(void) { static hf_register_info hf[] = { @@ -2312,7 +2278,7 @@ void proto_register_clnp(void) register_init_routine(clnp_reassemble_init); register_init_routine(cotp_reassemble_init); - clnp_module = prefs_register_protocol(proto_clnp, proto_reg_handoff_clnp); + clnp_module = prefs_register_protocol(proto_clnp, NULL); prefs_register_uint_preference(clnp_module, "tp_nsap_selector", "NSAP selector for Transport Protocol (last byte in hex)", "NSAP selector for Transport Protocol (last byte in hex)", @@ -2325,16 +2291,18 @@ void proto_register_clnp(void) "Reassemble segmented CLNP datagrams", "Whether segmented CLNP datagrams should be reassembled", &clnp_reassemble); - prefs_register_uint_preference(clnp_module, "tpkt_port", - "TCP port for CLNP over TPKT", - "TCP port for CLNP over TPKT", - 10, &global_tcp_port_clnp_over_tpkt); - prefs_register_bool_preference(clnp_module, "tpkt_reassemble", - "Reassemble segmented TPKT datagrams", - "Whether segmented TPKT datagrams should be reassembled", - &tpkt_desegment); } +void +proto_reg_handoff_clnp(void) +{ + data_handle = find_dissector("data"); + + clnp_handle = create_dissector_handle(dissect_clnp, proto_clnp); + dissector_add("osinl", NLPID_ISO8473_CLNP, clnp_handle); + dissector_add("osinl", NLPID_NULL, clnp_handle); /* Inactive subset */ + dissector_add("x.25.spi", NLPID_ISO8473_CLNP, clnp_handle); +} void proto_register_cotp(void) { diff --git a/epan/dissectors/packet-osi.c b/epan/dissectors/packet-osi.c index 9bde514dcc..3b9fa3919a 100644 --- a/epan/dissectors/packet-osi.c +++ b/epan/dissectors/packet-osi.c @@ -33,6 +33,7 @@ #include <string.h> #include <ctype.h> #include <glib.h> +#include <epan/prefs.h> #include <epan/packet.h> #include <epan/llcsaps.h> #include <epan/aftypes.h> @@ -42,7 +43,16 @@ #include "packet-osi.h" #include "packet-isis.h" #include "packet-esis.h" +#include "packet-tpkt.h" +static int proto_osi = -1; +static dissector_handle_t osi_handle; +static dissector_handle_t osi_tpkt_handle; + +/* Preferences for OSI over TPKT over TCP */ +static gboolean tpkt_desegment = FALSE; +int global_tcp_port_osi_over_tpkt = 8473; +int tcp_port_osi_over_tpkt = 8473; cksum_status_t calc_checksum( tvbuff_t *tvb, int offset, guint len, guint checksum) { @@ -227,6 +237,13 @@ static dissector_table_t osinl_subdissector_table; static dissector_table_t osinl_excl_subdissector_table; static dissector_handle_t data_handle, ppp_handle; +/* Dissect OSI over TCP over TPKT */ +static void +dissect_osi_tpkt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + dissect_tpkt_encap(tvb, pinfo, tree, tpkt_desegment, osi_handle); +} + static void dissect_osi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { guint8 nlpid; @@ -239,7 +256,6 @@ static void dissect_osi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /* try lookup with the subdissector tables that includes the nlpid */ if (dissector_try_port(osinl_subdissector_table, nlpid, tvb, pinfo, tree)) return; - /* try lookup with the subdissector tables that excludes the nlpid */ new_tvb = tvb_new_subset(tvb, 1, -1, -1); if (dissector_try_port(osinl_excl_subdissector_table, nlpid, new_tvb, pinfo, tree)) @@ -274,13 +290,43 @@ static void dissect_osi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } /* dissect_osi */ void +proto_reg_handoff_osi(void) +{ + static int osi_prefs_initialized = FALSE; + if (!osi_prefs_initialized) { + osi_handle = create_dissector_handle(dissect_osi, proto_osi); + dissector_add("llc.dsap", SAP_OSINL1, osi_handle); + dissector_add("llc.dsap", SAP_OSINL2, osi_handle); + dissector_add("llc.dsap", SAP_OSINL3, osi_handle); + dissector_add("llc.dsap", SAP_OSINL4, osi_handle); + dissector_add("llc.dsap", SAP_OSINL5, osi_handle); + dissector_add("ppp.protocol", PPP_OSI, osi_handle); + dissector_add("chdlctype", CHDLCTYPE_OSI, osi_handle); + dissector_add("null.type", BSD_AF_ISO, osi_handle); + dissector_add("gre.proto", SAP_OSINL5, osi_handle); + data_handle = find_dissector("data"); + ppp_handle = find_dissector("ppp"); + osi_tpkt_handle = create_dissector_handle(dissect_osi_tpkt, proto_osi); + osi_prefs_initialized = TRUE; + }else{ + dissector_delete("tcp.port", tcp_port_osi_over_tpkt, osi_tpkt_handle); + } + + tcp_port_osi_over_tpkt = global_tcp_port_osi_over_tpkt; + dissector_add("tcp.port", global_tcp_port_osi_over_tpkt, osi_tpkt_handle); +} + +void proto_register_osi(void) { + module_t *osi_module; + /* There's no "OSI" protocol *per se*, but we do register a dissector table so various protocols running at the network layer can register themselves. - all protocols that require inclusion of the NLPID - should register here */ + all protocols that require inclusion of the NLPID + should register here + */ osinl_subdissector_table = register_dissector_table("osinl", "OSI incl NLPID", FT_UINT8, BASE_HEX); @@ -289,23 +335,19 @@ proto_register_osi(void) * (typically non OSI protocols like IP,IPv6,PPP */ osinl_excl_subdissector_table = register_dissector_table("osinl.excl", "OSI excl NLPID", FT_UINT8, BASE_HEX); -} + + proto_osi = proto_register_protocol("OSI", "OSI", "osi"); + /* Preferences how OSI protocols should be dissected */ + osi_module = prefs_register_protocol(proto_osi, proto_reg_handoff_osi); + + prefs_register_uint_preference(osi_module, "tpkt_port", + "TCP port for OSI over TPKT", + "TCP port for OSI over TPKT", + 10, &global_tcp_port_osi_over_tpkt); + prefs_register_bool_preference(osi_module, "tpkt_reassemble", + "Reassemble segmented TPKT datagrams", + "Whether segmented TPKT datagrams should be reassembled", + &tpkt_desegment); -void -proto_reg_handoff_osi(void) -{ - dissector_handle_t osi_handle; - - osi_handle = create_dissector_handle(dissect_osi, -1); - dissector_add("llc.dsap", SAP_OSINL1, osi_handle); - dissector_add("llc.dsap", SAP_OSINL2, osi_handle); - dissector_add("llc.dsap", SAP_OSINL3, osi_handle); - dissector_add("llc.dsap", SAP_OSINL4, osi_handle); - dissector_add("llc.dsap", SAP_OSINL5, osi_handle); - dissector_add("ppp.protocol", PPP_OSI, osi_handle); - dissector_add("chdlctype", CHDLCTYPE_OSI, osi_handle); - dissector_add("null.type", BSD_AF_ISO, osi_handle); - dissector_add("gre.proto", SAP_OSINL5, osi_handle); - data_handle = find_dissector("data"); - ppp_handle = find_dissector("ppp"); } + |