Reading buckets and single oxm matches
diff --git a/wireshark_gen/templates/_oftype_readers.lua b/wireshark_gen/templates/_oftype_readers.lua
index c258953..0f38c16 100644
--- a/wireshark_gen/templates/_oftype_readers.lua
+++ b/wireshark_gen/templates/_oftype_readers.lua
@@ -134,6 +134,7 @@
local list = nil
if not reader2.is_empty() then
list = subtree:add(fields[field_name], reader2.peek_all(0))
+ list:set_text("List of matches")
end
while not reader2.is_empty() do
local match_len = 4 + reader2.peek(3,1):uint()
@@ -143,7 +144,6 @@
child_subtree:set_text(info)
end
subtree:set_text("OXM")
- list:set_text("List of matches")
reader.skip_align()
end
@@ -155,3 +155,21 @@
local info = dissect_of_instruction(reader, child_subtree, version)
child_subtree:set_text("Instructions")
end
+
+function read_list_of_bucket_t(reader, version, subtree, field_name)
+ if reader.is_empty() then
+ return
+ end
+ local child_subtree = subtree:add(fields[field_name], reader.peek_all(0))
+ local info = dissect_of_bucket(reader, child_subtree, version)
+ child_subtree:set_text("Bucket")
+end
+
+function read_of_oxm_t(reader, version, subtree, field_name)
+ if reader.is_empty() then
+ return
+ end
+ local child_subtree = subtree:add(fields[field_name], reader.peek_all(0))
+ local info = dissect_of_oxm(reader, child_subtree, version)
+ child_subtree:set_text(info)
+end
diff --git a/wireshark_gen/templates/openflow.lua b/wireshark_gen/templates/openflow.lua
index 067dbdd..f2791d1 100644
--- a/wireshark_gen/templates/openflow.lua
+++ b/wireshark_gen/templates/openflow.lua
@@ -119,6 +119,12 @@
:: #endfor
}
+local of_bucket_dissectors = {
+:: for version in ir:
+ [${version}] = dissect_of_bucket_v${version},
+:: #endfor
+}
+
function dissect_of_message(buf, root)
local reader = OFReader.new(buf)
local subtree = root:add(p_of, buf(0))
@@ -168,6 +174,15 @@
return info
end
+function dissect_of_bucket(reader, subtree, version_val)
+ local info = "unknown"
+ if of_bucket_dissectors[version_val] then
+ info = of_bucket_dissectors[version_val](reader, subtree)
+ end
+
+ return info
+end
+
-- of dissector function
function p_of.dissector (buf, pkt, root)
local offset = 0