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()