1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/dist/tools/wireshark_dissector/riot.lua
Sebastian Sontberg 06433426cf wireshark: fix dissector plugin and expand documentation
The wireshark dissector plugin currently fails with a "Lua Error" when
trying to parse nativenet packets. This patch restores working behaviour
by commenting the offending line introduced in 1258675, which intention
was to account for padding in small packets. It further adds a comment
on how to edit the plugin for the case padding information is required.

The README.md now contains a usage note for configuration on fedora
which might also be helpful for users of other distributions.
2014-06-04 20:36:18 +02:00

67 lines
2.1 KiB
Lua

-- RIOT native support for Wireshark
-- A Lua implementation for dissection of RIOT native packets in wireshark
-- @Version: 0.0.1
-- @Author: Martin Lenders
-- @E-Mail: mlenders@inf.fu-berlin.de
do
--Protocol name "RIOT"
local p_riot = Proto("RIOT", "RIOT native packet")
--Protocol Fields
local f_length = ProtoField.uint16("RIOT.length", "Length", base.DEC, nil)
local f_dst = ProtoField.uint16("RIOT.dst", "Destination", base.DEC, nil)
local f_src = ProtoField.uint16("RIOT.src", "Source", base.DEC, nil)
local f_pad = ProtoField.bytes("RIOT.pad", "Padding")
p_riot.fields = { f_length, f_dst, f_src }
local data_dis = Dissector.get("data")
-- local next_dis = Dissector.get("6lowpan") -- for 6LoWPAN
local next_dis = Dissector.get("wpan") -- for IEEE 802.15.4
function riot_dissector(buf, pkt, root)
local buf_len = buf:len()
local riot_tree = root:add(p_riot, buf)
if buf_len < 6 then return false end
local packet_len = buf(0,2):uint()
local dst = buf(2,2):uint()
local src = buf(4,2):uint()
if packet_len >= 46 and buf_len - 6 ~= packet_len then return false end
riot_tree:append_text(", Dst: ")
riot_tree:append_text(dst)
riot_tree:append_text(", Src: ")
riot_tree:append_text(src)
riot_tree:append_text(", Length: ")
riot_tree:append_text(packet_len)
riot_tree:add(f_length, buf(0, 2))
riot_tree:add(f_dst, buf(2, 2))
riot_tree:add(f_src, buf(4, 2))
-- to show the padding for small packets uncomment the
-- following line and append "f_pad" to p_riot.fields above.
-- riot_tree:add(f_pad, buf(packet_len + 6))
next_dis:call(buf(6, packet_len):tvb(), pkt, root)
return true
end
function p_riot.dissector(buf, pkt, root)
if not riot_dissector(buf, pkt, root) then
data_dis:call(buf, pkt, root)
end
end
local eth_encap_table = DissectorTable.get("ethertype")
--handle ethernet type 0x1234
eth_encap_table:add(0x1234, p_riot)
end