2016-10-20 12 views
0

Я пишу прикованный диссектор в Lua для протокола Ethercat. Я назвал свою прикованную маленькую девочку.Цепной рассеиватель в Lua

Для того, что я до сих пор, littlecat правильно рассекает поля, в которых я хочу. Однако, вместо того, чтобы выполнять работу после встроенного диссимера ecat, littlecat полностью перехватывает его.

Это то, что выглядит в конце моего кода Lua.

-- Initialize Protocol 
function littlecat.init() 
end 

-- Register Chained Dissector Ethercat Port 
local ethercat_dissector_table = DissectorTable.get("ecatf.type") 
dissector = ethercat_dissector_table:get_dissector(1) 

-- Dissector can be called from littlecat.dissector 
-- So the previous dissector gets called  
ethercat_dissector_table:add(1, littlecat) 

Как я могу выполнить мой диссектор после выполнения ecat?

ответ

0

Я нашел решение.

Чтобы убедиться, что рассекатель по умолчанию называется, а затем пользовательский прозектор:

  1. Определить таблицу рассекателя и оригинальный прозектор перед функцией рассечения.
  2. Позвоните в исходный диссектор в пределах функции вскрытия.

Пример

-- Initialize Protocol 
-- Initialize Protocol Fields 

-- Define dissector table and default dissector here 
-- so they can be called within the dissection func. 

local dissector_table = DissectorTable.get("shortname") 
dissector = dissector_table:get_dissector(PORT) 

-- Dissection Function 
function dissectorname.dissector (tvbuf, pktinfo, root) 

    -- Call default dissector. 
    dissector(tvbuf, pktinfo, root) 

    -- Continue dissection.... 

end 

-- Initialize Protocol 
function dissectorname.init() 
end 

-- Dissector can be called from dissectorname.dissector 
-- So the previous dissector gets called  
dissector_table:add(PORT, dissectorname)