Wireshark-dev: [Wireshark-dev] UI for packets differing by a checksum on the end
From: Jon Smirl <jonsmirl@xxxxxxxxx>
Date: Thu, 29 Jul 2010 10:19:10 -0400
I'm working on the 802.15.4 packet decoder. 802.15.4 packets have a two byte hardware checksum at the end of them. Some sniffer hardware includes this checksum in the packets returned and some hardware doesn't. We've been switching between them by changing the source code: - ieee802154_handle = find_dissector("wpan"); + ieee802154_handle = find_dissector("wpan_nofcs"); How can i fix this so that I can switch using the UI? I tried registering wpan_nofcs in the UI. The idea was to disable "wpan" and let "wpan_nofcs" take over. Instead of wpan_nofcs taking over I get "Protocol Unknown WTAP_ENCAP = 104". ENCAP 104 is "wpan" which has been disabled. Index: epan/dissectors/packet-ieee802154.c =================================================================== --- epan/dissectors/packet-ieee802154.c (revision 33628) +++ epan/dissectors/packet-ieee802154.c (working copy) @@ -255,6 +255,7 @@ static int hf_ieee802154_nonask_phy_length = -1; static int proto_ieee802154 = -1; +static int proto_ieee802154_nofcs = -1; static int hf_ieee802154_frame_type = -1; static int hf_ieee802154_security = -1; static int hf_ieee802154_pending = -1; @@ -2488,6 +2489,7 @@ /* Register Protocol name and description. */ proto_ieee802154 = proto_register_protocol("IEEE 802.15.4 Low-Rate Wireless PAN", "IEEE 802.15.4", "wpan"); + proto_ieee802154_nofcs = proto_register_protocol("IEEE 802.15.4 Low-Rate Wireless PAN nofcs", "IEEE 802.15.4 nofcs", "wpan-nofcs"); proto_ieee802154_nonask_phy = proto_register_protocol("IEEE 802.15.4 Low-Rate Wireless PAN non-ASK PHY", "IEEE 802.15.4 non-ASK PHY", "wpan-nonask-phy"); /* Register header fields and subtrees. */ @@ -2541,7 +2543,7 @@ /* Register dissectors with Wireshark. */ register_dissector("wpan", dissect_ieee802154, proto_ieee802154); - register_dissector("wpan_nofcs", dissect_ieee802154_nofcs, proto_ieee802154); + register_dissector("wpan-nofcs", dissect_ieee802154_nofcs, proto_ieee802154); register_dissector("wpan_cc24xx", dissect_ieee802154_cc24xx, proto_ieee802154); register_dissector("wpan-nonask-phy", dissect_ieee802154_nonask_phy, proto_ieee802154_nonask_phy); } /* proto_register_ieee802154 */ @@ -2563,6 +2565,7 @@ { static gboolean prefs_initialized = FALSE; static dissector_handle_t ieee802154_handle; + static dissector_handle_t ieee802154_nofcs_handle; static dissector_handle_t ieee802154_nonask_phy_handle; static unsigned int old_ieee802154_ethertype; GByteArray *bytes; @@ -2571,10 +2574,12 @@ if (!prefs_initialized){ /* Get the dissector handles. */ ieee802154_handle = find_dissector("wpan"); + ieee802154_nofcs_handle = find_dissector("wpan-nofcs"); ieee802154_nonask_phy_handle = find_dissector("wpan-nonask-phy"); data_handle = find_dissector("data"); dissector_add("wtap_encap", WTAP_ENCAP_IEEE802_15_4, ieee802154_handle); + dissector_add("wtap_encap", WTAP_ENCAP_IEEE802_15_4_NOFCS, ieee802154_nofcs_handle); dissector_add("wtap_encap", WTAP_ENCAP_IEEE802_15_4_NONASK_PHY, ieee802154_nonask_phy_handle); prefs_initialized = TRUE; Index: wiretap/wtap.c =================================================================== --- wiretap/wtap.c (revision 33628) +++ wiretap/wtap.c (working copy) @@ -473,7 +473,10 @@ { "SocketCAN", "socketcan" }, /* WTAP_ENCAP_IEEE802_11_NETMON_RADIO */ - { "IEEE 802.11 plus Network Monitor radio header", "ieee-802-11-netmon" } + { "IEEE 802.11 plus Network Monitor radio header", "ieee-802-11-netmon" }, + + /* WTAP_ENCAP_IEEE802_15_4 nofcs */ + { "IEEE 802.15.4 Wireless PAN nofcs", "wpan-nofcs" }, }; gint wtap_num_encap_types = sizeof(encap_table_base) / sizeof(struct encap_type_info); Index: wiretap/wtap.h =================================================================== --- wiretap/wtap.h (revision 33628) +++ wiretap/wtap.h (working copy) @@ -216,6 +216,7 @@ #define WTAP_ENCAP_IPNET 124 #define WTAP_ENCAP_SOCKETCAN 125 #define WTAP_ENCAP_IEEE802_11_NETMON_RADIO 126 +#define WTAP_ENCAP_IEEE802_15_4_NOFCS 127 #define WTAP_NUM_ENCAP_TYPES wtap_get_num_encap_types() -- Jon Smirl jonsmirl@xxxxxxxxx
- Follow-Ups:
- Prev by Date: Re: [Wireshark-dev] building wireshark in linux
- Next by Date: [Wireshark-dev] Global variables
- Previous by thread: [Wireshark-dev] buildbot failure in Wireshark 1.0 on Windows-XP-x86
- Next by thread: Re: [Wireshark-dev] UI for packets differing by a checksum on the end
- Index(es):