| 
 
Hi, 
 
 
I'm working on dissecting a proprietary protocol that extends Bluetooth HCI_ACL with a LUA dissector. As there's no heuristics dissector list registered for this particular protocol I thought something similar could be achieved with a chained dissector. I retrieve
 the original HCI_ACL dissector handle and replace it with my own LUA dissector. In LUA dissector apply some heuristics and if it's not my own protocol then call the original HCI_ACL dissector via the handle. 
 
 
Code looks like this: 
 
 
local proto_test = Proto("test", "Use chaining as heuristic dissector") 
local proto_default_acl 
 
 
 
function is_test_proto(tvb, pinfo) 
 
    -- Apply heuristics to determine if own protocol 
 
    return false 
 
end 
 
 
 
function proto_test.dissector(tvb, pinfo, tree) 
 
    if not is_test_proto(tvb, pinfo) then 
 
        return proto_default_acl:call(tvb, pinfo, tree) 
 
    end 
 
 
 
    pinfo.cols.protocol = "test" 
 
    tree = tree:add(proto_test, tvb) 
 
    return tvb:len() 
 
end 
 
 
 
function proto_test.init() 
 
    local hci_type = DissectorTable.get("hci_h4.type") 
 
    local pattern = 0x02 -- ACL 
 
    proto_default_acl = hci_type:get_dissector(pattern) 
 
    hci_type:add(pattern, proto_test) 
 
end 
 
 
This unfortunately did not work and I was not able to find out why until I started looking at the HCI_ACL dissector code itself. 
 
 
static gint 
dissect_bthci_acl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) 
 
{ 
<...> 
    /* Reject the packet if data is NULL */ 
    if (data == NULL) 
 
        return 0; 
 
 
 
The above NULL check is hit for all calls coming from the LUA dissector. The LUA dissector function prototype does not have the data parameter and it appears it's simply lost when chaining calls through LUA. 
 
 
Any suggestions on how to approach this? Would it be possible to extend the LUA dissector interface with another function prototype that supports the data parameter? Just support relaying the parameter in chained dissectors, not modifying or doing any fancy
 stuff with it. 
 
 
/Mikael 
 |