Commit to support OF Version negotiation
https://jira.opencord.org/browse/VOL-38
Addressed review comments
Change-Id: Ia731e7da3167dec01d87c6c61f1e37c96bffd55d
diff --git a/ofagent/loxi/of13/common.py b/ofagent/loxi/of13/common.py
index 4bf1750..eb95605 100644
--- a/ofagent/loxi/of13/common.py
+++ b/ofagent/loxi/of13/common.py
@@ -1947,6 +1947,21 @@
hello_elem.subtypes[1] = hello_elem_versionbitmap
+class hello_elem_bitmap(loxi.OFObject):
+
+ def __init__(self, version_list=None):
+ if version_list != None:
+ self.version_list = version_list
+ else:
+ self.version_list = []
+ self.bitmap = 0
+ for version in version_list:
+ self.bitmap = self.bitmap | 1 << version
+ return
+
+ def pack(self):
+ return struct.pack("!L", self.bitmap)
+
class match_v3(loxi.OFObject):
type = 1
diff --git a/ofagent/loxi/of13/util.py b/ofagent/loxi/of13/util.py
index 5eadb10..3735787 100644
--- a/ofagent/loxi/of13/util.py
+++ b/ofagent/loxi/of13/util.py
@@ -121,3 +121,13 @@
def unpack_checksum_128(reader):
hi, lo = reader.read("!QQ")
return (hi << 64) | lo
+
+def bitmap_to_version(bitmaps):
+ versions = [i * 32 + shift
+ for i, bitmap in enumerate(bitmaps)
+ for shift in range(31) if bitmap & (1 << shift)]
+ return versions
+
+def verify_version_support(msg,version_list):
+ version_list_sup = bitmap_to_version([msg.elements[0].bitmaps[0].value])
+ return any(i in version_list_sup for i in version_list)