mpbl3p_udp = Proto("mpbl3p_udp", "Multi Path Proxy Custom UDP") ack_F = ProtoField.uint32("mpbl3p_udp.ack", "Acknowledgement") nack_F = ProtoField.uint32("mpbl3p_udp.nack", "Negative Acknowledgement") seq_F = ProtoField.uint32("mpbl3p_udp.seq", "Sequence Number") time_F = ProtoField.absolute_time("mpbl3p_udp.time", "Timestamp") proxied_F = ProtoField.bytes("mpbl3p_udp.data", "Proxied Data") mpbl3p_udp.fields = { ack_F, nack_F, seq_F, time_F, proxied_F } function mpbl3p_udp.dissector(buffer, pinfo, tree) if buffer:len() < 20 then return end pinfo.cols.protocol = "MPBL3P_UDP" local ack = buffer(0, 4):le_uint() local nack = buffer(4, 4):le_uint() local seq = buffer(8, 4):le_uint() local unix_time = buffer(buffer:len() - 8, 8):le_uint64() local subtree = tree:add(mpbl3p_udp, buffer(), "Multi Path Proxy Header, SEQ: " .. seq .. " ACK: " .. ack .. " NACK: " .. nack) subtree:add(ack_F, ack) subtree:add(nack_F, nack) subtree:add(seq_F, seq) subtree:add(time_F, NSTime.new(unix_time:tonumber())) if buffer:len() > 20 then subtree:add(proxied_F, buffer(12, buffer:len() - 12 - 8)) end end DissectorTable.get("udp.port"):add(4724, mpbl3p_udp) DissectorTable.get("udp.port"):add(4725, mpbl3p_udp)