local p_multi = Proto("multi", "MultiProto");
local f_Ver = ProtoField.uint8("multi.ver", "Ver", base.DEC, nil, 0xf0)
local f_Type = ProtoField.uint8("multi.type", "Type", base.DEC, nil, 0x0f)
local f_TotalLen = ProtoField.uint8("multi.totalLen", "TotalLen", base.DEC)
local f_Hop = ProtoField.uint8("multi.hop", "Hop", base.DEC)
local f_Reserved = ProtoField.uint8("multi.reserved", "Reserved", base.DEC)
local f_Data = ProtoField.string("multi.data", "Data", base.UNICODE)
p_multi.fields = {
f_Ver,
f_Type,
f_TotalLen,
f_Hop,
f_Reserved,
f_Data,
}
local data_dis = Dissector.get("data")
local protos = {
[2] = Dissector.get("mtp2"),
[3] = Dissector.get("mtp3"),
[4] = Dissector.get("alcap"),
[5] = Dissector.get("h248"),
[6] = Dissector.get("ranap"),
[7] = Dissector.get("rnsap"),
[8] = Dissector.get("nbap"),
[9] = Dissector.get("rrc"),
[10] = DissectorTable.get("sctp.ppi"):get_dissector(3), -- m3ua
[11] = DissectorTable.get("ip.proto"):get_dissector(132), -- sctp
}
function printS(s,desc)
desc = desc or ''
local t = ""
for i=1, #s do
t = t .. string.format("%#x,",string.byte( s, i, i))
end
print(desc,t)
end
function getUTF8(buf)
local s2 = buf:bytes()
return s2:raw()
end
function p_multi.dissector(buf, pkt, tree)
local subtree = tree:add(p_multi, buf(0))
local TotalLen = buf(1,1)
subtree:add(f_Ver, buf(0,1))
subtree:add(f_Type, buf(0,1))
subtree:add(f_TotalLen, TotalLen)
subtree:add(f_Hop, buf(2,1))
subtree:add(f_Reserved, buf(3,1))
local len = math.min(TotalLen:uint(), buf:len()-4)
subtree:add(f_Data, getUTF8(buf(4,len)))
end
-- local wtap_encap_table = DissectorTable.get("wtap_encap")
local udp_encap_table = DissectorTable.get("udp.port")
-- wtap_encap_table:add(wtap.USER15, p_multi)
-- wtap_encap_table:add(wtap.USER12, p_multi)
udp_encap_table:add(9999, p_multi)