| 1 | initial version |
First, I really don't understand why the child registers with the TCP dissector table at all. The child only needs to register with the parent.
Below are modified parent/child Lua pseudo-code that should work ... assuming the child is the only one (i.e., there are no other children that register with the parent):
Parent
MyParent = Proto.new("MyParent", "My Parent Protocol")
--Protofields and Fields defined here
local MyParentTable = DissectorTable.new("MyParentTable", "MyParentTable", ftypes.STRING, base.NONE)
function MyParent.dissector(buffer, pinfo, tree)
pinfo.cols.protocol = MyParent.name
local subtree = tree:add(MyParent, buffer(), "My Parent")
-- Add parent fields here
-- Subdissection:
local nextBlock = -- get next bytes to process here
MyParentTable:try("MyProtocolA", nextBlock, pinfo, subtree)
end
DissectorTable.get("tcp.port"):add(5001, MyParent)
DissectorTable.get("ethertype"):add(0x8800, MyParent)
Child
MyProtocolA = Proto.new("MyProtocolA", "My Protocol A")
--ProtoFields and Fields defined but not shown
function MyProtocolA.init()
DissectorTable.get("MyParentTable"):add("MyProtocolA", MyProtocolA)
end
function MyProtocolA.dissector(buffer, pinfo, tree)
pinfo.cols.protocol = MyProtocolA.name
local subtree = tree:add(MyProtocolA, buffer(), "My Protocol A Data")
--More here not shown
end
--[[
-- This should also work instead of being done in MyProtocolA.init(),
-- at least it did in my testing.
DissectorTable.get("MyParentTable"):add("MyProtocolA", MyProtocolA)
--]]