Merge into master from pull request #379:
Wireshark improvements for OF 1.4 (https://github.com/floodlight/loxigen/pull/379)
diff --git a/wireshark_gen/field_info.py b/wireshark_gen/field_info.py
index 6c35d99..bc11170 100644
--- a/wireshark_gen/field_info.py
+++ b/wireshark_gen/field_info.py
@@ -194,4 +194,5 @@
     ("of_role_request_failed_error_msg", "data"): "read_openflow",
     ("of_meter_mod_failed_error_msg", "data"): "read_openflow",
     ("of_table_features_failed_error_msg", "data"): "read_openflow",
+    ("of_bundle_add_msg", "data"): "read_openflow",
 }
diff --git a/wireshark_gen/templates/_oftype_readers.lua b/wireshark_gen/templates/_oftype_readers.lua
index ad0f0c2..9695c59 100644
--- a/wireshark_gen/templates/_oftype_readers.lua
+++ b/wireshark_gen/templates/_oftype_readers.lua
@@ -76,6 +76,8 @@
         dissect_of_match_v3_v3(reader, subtree:add("of_match"))
     elseif version == 4 then
         dissect_of_match_v3_v4(reader, subtree:add("of_match"))
+    elseif version == 5 then
+        dissect_of_match_v3_v5(reader, subtree:add("of_match"))
     else
         error("Unsupported match version")
     end
@@ -133,6 +135,10 @@
     read_scalar(reader, subtree, field_name, 32)
 end
 
+function read_of_str64_t(reader, version, subtree, field_name)
+    read_scalar(reader, subtree, field_name, 64)
+end
+
 function read_of_port_desc_t(reader, version, subtree, field_name)
     if reader.is_empty() then
         return
diff --git a/wireshark_gen/templates/openflow.lua b/wireshark_gen/templates/openflow.lua
index f96fccf..f6aaea3 100644
--- a/wireshark_gen/templates/openflow.lua
+++ b/wireshark_gen/templates/openflow.lua
@@ -74,10 +74,13 @@
 :: #endif
 :: #endfor
 
+error_field = ProtoField.string("of.error", "Error")
+
 p_of.fields = {
 :: for field in fields:
     fields[${repr(field.fullname)}],
 :: #endfor
+    error_field,
 }
 
 -- Subclass maps for virtual classes
@@ -142,6 +145,13 @@
         return "Unknown protocol", "Dissection error"
     end
 
+    if type_val == 1 then -- OpenFlow error message
+        local err = subtree:add(error_field, "")
+        err:set_hidden()
+        err:set_generated()
+        subtree:add_expert_info(PI_DEBUG, PI_WARN, "OpenFlow error message")
+    end
+
     local info = "unknown"
     info = of_message_dissectors[version_val](reader, subtree)