Wireshark-dev: Re: [Wireshark-dev] Adding live 802.15.4 Capture
From: Bill Meier <wmeier@xxxxxxxxxxx>
Date: Wed, 01 Oct 2008 00:32:57 -0400
Colin O'Flynn wrote:
The problem is I don't see "wpan" as an option in the prefrences dialog! Any hints to what I am doing wrong? It seems fairly simple, however I'm not very familiar with the Wireshark sources.
The code compiles and works works fine once an "#include epan/prefs.h> is added :)
or:Maybe the patch supplied doesn't completely reflect your actual code and the problem is actually that:
The preference appears (perhaps confusingly) under "IEEE 802.15.4" (the protocol "short name") since that's the way the protocol is registered.
proto_ieee802154 = proto_register_protocol(
"IEEE 802.15.4 Low-Rate Wireless PAN",
"IEEE 802.15.4",
"wpan");
("wpan" is used as the "filter_name")
Notes:
1. If the patch supplied reflects your actual code, you should have
gotten a compilation error due to the missing include file. If you
didn't, you'll need to revisit your compilation process.
2. The patch file is 'backwards' (new --> old) so could not be applied to packet-ieee802154.c as is. (I hand-edited the patch file so as to be usable).
3. I've taken the liberty to re-arrange the proto_reg_handoff code slightly. See the attached revised patch. (I've recently been doing work on the proto_reg_handoff functions in various of the dissectors and will be updating the doc/README.developer shortly).
The attachment is a revised version of your patch and is against the current development version of packet-ieee802154.c.
Index: packet-ieee802154.c
===================================================================
--- packet-ieee802154.c (revision 26322)
+++ packet-ieee802154.c (working copy)
@@ -77,6 +77,7 @@
#include <epan/crc16.h>
#include <epan/expert.h>
#include <epan/addr_resolv.h>
+#include <epan/prefs.h>
#include "packet-ieee802154.h"
#include "packet-frame.h" /* For Exception Handling */
@@ -85,6 +86,9 @@
#define DISSECT_IEEE802154_OPTION_CC24xx 0x00000001 /* FCS field contains a TI CC24xx style FCS. */
#define DISSECT_IEEE802154_OPTION_LINUX 0x00000002 /* Addressing fields are padded DLT_IEEE802_15_4_LINUX, not implemented. */
+/* ethertype for 802.15.4 tag - encapsulating an Ethernet packet */
+static unsigned int ieee802154_ethertype = 0x809A;
+
/* Function declarations */
/* Register Functions. Loads the dissector into Wireshark. */
void proto_reg_handoff_ieee802154 (void);
@@ -1662,6 +1666,8 @@
&ett_ieee802154_bcn_pending
};
+ module_t *ieee802154_module;
+
/* Register Protocol name and description. */
proto_ieee802154 = proto_register_protocol("IEEE 802.15.4 Low-Rate Wireless PAN", "IEEE 802.15.4", "wpan");
@@ -1669,6 +1675,14 @@
proto_register_field_array(proto_ieee802154, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
+ /* add a user preference to set the 802.15.4 ethertype */
+ ieee802154_module = prefs_register_protocol(proto_ieee802154,
+ proto_reg_handoff_ieee802154);
+ prefs_register_uint_preference(ieee802154_module, "802154_ethertype",
+ "802.15.4 (Hex) Ethertype",
+ "(Hexadecimal) Ethertype used to indicate IEEE 802.15.4 frame.",
+ 16, &ieee802154_ethertype);
+
/* Register the subdissector list */
register_heur_dissector_list("wpan", &ieee802154_heur_subdissector_list);
@@ -1684,6 +1698,7 @@
* DESCRIPTION
* Registers the zigbee dissector with Wireshark.
* Will be called every time 'apply' is pressed in the preferences menu.
+ * as well as during Wireshark initialization
* PARAMETERS
* none
* RETURNS
@@ -1692,13 +1707,26 @@
*/
void proto_reg_handoff_ieee802154(void)
{
- dissector_handle_t ieee802154_handle;
+ static gboolean prefs_initialized = FALSE;
+ static dissector_handle_t ieee802154_handle;
+ static unsigned int old_ieee802154_ethertype;
- /* Get the dissector handles. */
- ieee802154_handle = find_dissector("wpan");
- data_handle = find_dissector("data");
+ if (!prefs_initialized){
+ /* Get the dissector handles. */
+ ieee802154_handle = find_dissector("wpan");
+ data_handle = find_dissector("data");
+ dissector_add("wtap_encap", WTAP_ENCAP_IEEE802_15_4, ieee802154_handle);
+
+ prefs_initialized = TRUE;
+ } else {
+ dissector_delete("ethertype", old_ieee802154_ethertype, ieee802154_handle);
+ }
+
+ old_ieee802154_ethertype = ieee802154_ethertype;
+
/* Register dissector handles. */
- dissector_add("wtap_encap", WTAP_ENCAP_IEEE802_15_4, ieee802154_handle);
+ dissector_add("ethertype", ieee802154_ethertype, ieee802154_handle);
+
} /* proto_reg_handoff_ieee802154 */
- References:
- [Wireshark-dev] Adding live 802.15.4 Capture
- From: Colin O'Flynn
- [Wireshark-dev] Adding live 802.15.4 Capture
- Prev by Date: [Wireshark-dev] Adding live 802.15.4 Capture
- Next by Date: Re: [Wireshark-dev] Error while setting up check-out of code
- Previous by thread: [Wireshark-dev] Adding live 802.15.4 Capture
- Index(es):