Merge into master from pull request #279:
wireshark: improve dissection in case of missing segments (https://github.com/floodlight/loxigen/pull/279)
diff --git a/wireshark_gen/templates/openflow.lua b/wireshark_gen/templates/openflow.lua
index fea6676..9ce51d2 100644
--- a/wireshark_gen/templates/openflow.lua
+++ b/wireshark_gen/templates/openflow.lua
@@ -154,15 +154,19 @@
current_pkt = pkt
repeat
if buf:len() - offset >= 4 then
+ local msg_version = buf(offset,1):uint()
+ local msg_type = buf(offset+1,1):uint()
local msg_len = buf(offset+2,2):uint()
- if msg_len < 8 then
- break
- end
+ -- Detect obviously broken messages
+ if msg_version == 0 or msg_version > 4 then break end
+ if msg_type > 29 then break end
+ if msg_len < 8 then break end
if offset + msg_len > buf:len() then
-- we don't have all the data we need yet
pkt.desegment_len = offset + msg_len - buf:len()
+ pkt.desegment_offset = offset
return
end
@@ -181,6 +185,7 @@
else
-- we don't have all of length field yet
pkt.desegment_len = DESEGMENT_ONE_MORE_SEGMENT
+ pkt.desegment_offset = offset
return
end
until offset >= buf:len()