1 | initial version |
Here is answer to what's happening but not a solution to the problem. Sorry.
epan/dissectors/packet-bthci_evt.c is expecting an extra chunk of data:
static gint dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { ... /* Reject the packet if data is NULL */ if (data == NULL) return 0;
When it's normally called (epan/dissectors/packet-hci_usb.c) that data is provided:
case 1: call_dissector_with_data(bthci_evt_handle, next_tvb, pinfo, tree, bluetooth_data); break;
The Wireshark Lua (wslua) does not support the extra parameter when calling a dissector.
From the WSDG:
11.6.1.3. dissector:call(tvb, pinfo, tree) Calls a dissector against a given packet (or part of it).
Arguments
tvb - The buffer to dissect.
pinfo - The packet info.
tree - The tree on which to add the protocol items.
Returns - Number of bytes dissected. Note that some dissectors always return number of bytes in incoming buffer, so be aware.
And the call in wslua (epan/wslua/wslua_dissector.c):
WSLUA_METHOD Dissector_call(lua_State* L) { /* Calls a dissector against a given packet (or part of it). */ #define WSLUA_ARG_Dissector_call_TVB 2 /* The buffer to dissect. */ #define WSLUA_ARG_Dissector_call_PINFO 3 /* The packet info. */ #define WSLUA_ARG_Dissector_call_TREE 4 /* The tree on which to add the protocol items. */ Dissector volatile d = checkDissector(L,1); Tvb tvb = checkTvb(L,WSLUA_ARG_Dissector_call_TVB); Pinfo pinfo = checkPinfo(L,WSLUA_ARG_Dissector_call_PINFO); TreeItem ti = checkTreeItem(L,WSLUA_ARG_Dissector_call_TREE); const char *volatile error = NULL; int len = 0; if (! ( d && tvb && pinfo) ) return 0; TRY { len = call_dissector(d, tvb->ws_tvb, pinfo->ws_pinfo, ti->tree); ...
2 | No.2 Revision |
Here is answer to what's happening but not a solution to the problem. Sorry.
epan/dissectors/packet-bthci_evt.c is expecting an extra chunk of data:
static gint dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { ... /* Reject the packet if data is NULL */ if (data == NULL) return 0;
When it's normally called (epan/dissectors/packet-hci_usb.c) that data is provided:
case 1:call_dissector_with_data(bthci_evt_handle, next_tvb, pinfo, tree, bluetooth_data);break;
The Wireshark Lua (wslua) does not support the extra parameter when calling a dissector.
From the WSDG:
11.6.1.3. dissector:call(tvb, pinfo, tree) Calls a dissector against a given packet (or part of it).
Arguments
tvb - The buffer to dissect.
pinfo - The packet info.
tree - The tree on which to add the protocol items.
Returns - Number of bytes dissected. Note that some dissectors always return number of bytes in incoming buffer, so be aware.
And the call in wslua (epan/wslua/wslua_dissector.c):
WSLUA_METHOD Dissector_call(lua_State* L) { /* Calls a dissector against a given packet (or part of it). */ #define WSLUA_ARG_Dissector_call_TVB 2 /* The buffer to dissect. */ #define WSLUA_ARG_Dissector_call_PINFO 3 /* The packet info. */ #define WSLUA_ARG_Dissector_call_TREE 4 /* The tree on which to add the protocol items. */ Dissector volatile d = checkDissector(L,1); Tvb tvb = checkTvb(L,WSLUA_ARG_Dissector_call_TVB); Pinfo pinfo = checkPinfo(L,WSLUA_ARG_Dissector_call_PINFO); TreeItem ti = checkTreeItem(L,WSLUA_ARG_Dissector_call_TREE); const char *volatile error = NULL; int len = 0; if (! ( d && tvb && pinfo) ) return 0; TRY { len = call_dissector(d, tvb->ws_tvb, pinfo->ws_pinfo, ti->tree); ...
3 | No.3 Revision |
Here is answer to what's happening but not a solution to the problem. Sorry.
epan/dissectors/packet-bthci_evt.c is expecting an extra chunk of data:
static gint dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { ... /* Reject the packet if data is NULL */ if (data == NULL) return 0;
When it's normally called (epan/dissectors/packet-hci_usb.c) that data is provided:
case 1: call_dissector_with_data(bthci_evt_handle, next_tvb, pinfo, tree, bluetooth_data); break;
The Wireshark Lua (wslua) does not support the extra parameter when calling a dissector.
From the WSDG:
11.6.1.3. dissector:call(tvb, pinfo, tree) Calls a dissector against a given packet (or part of it).
Arguments
tvb - The buffer to dissect.
pinfo - The packet info.
tree - The tree on which to add the protocol items.
Returns - Number of bytes dissected. Note that some dissectors always return number of bytes in incoming buffer, so be aware.
And the call in wslua (epan/wslua/wslua_dissector.c):
WSLUA_METHOD Dissector_call(lua_State* L) { /* Calls a dissector against a given packet (or part of it). */ #define WSLUA_ARG_Dissector_call_TVB 2 /* The buffer to dissect. */ #define WSLUA_ARG_Dissector_call_PINFO 3 /* The packet info. */ #define WSLUA_ARG_Dissector_call_TREE 4 /* The tree on which to add the protocol items. */ Dissector volatile d = checkDissector(L,1); Tvb tvb = checkTvb(L,WSLUA_ARG_Dissector_call_TVB); Pinfo pinfo = checkPinfo(L,WSLUA_ARG_Dissector_call_PINFO); TreeItem ti = checkTreeItem(L,WSLUA_ARG_Dissector_call_TREE); const char *volatile error = NULL; int len = 0; if (! ( d && tvb && pinfo) ) return 0; TRY { len = call_dissector(d, tvb->ws_tvb, pinfo->ws_pinfo, ti->tree); ...
Sample capture (btsnoop_hci_20210205_105229.log) with the Bluetooth HCI H4
protocol attached to 17236: [Tshark] - Missing bluetooth protocol details