pyloxi: implement of_ipv6_t
diff --git a/py_gen/oftype.py b/py_gen/oftype.py
index ee5040c..a52bd2e 100644
--- a/py_gen/oftype.py
+++ b/py_gen/oftype.py
@@ -51,6 +51,8 @@
v = "0"
elif self.base == 'of_mac_addr_t':
v = '[0,0,0,0,0,0]'
+ elif self.base == 'of_ipv6_t':
+ v = repr('\x00' * 16)
elif self.base == 'of_wc_bmap_t':
v = 'const.OFPFW_ALL'
elif self.base in ['of_octets_t', 'of_port_name_t', 'of_table_name_t',
@@ -80,6 +82,8 @@
return '"".join([x.pack() for x in %s])' % expr_expr
elif self.base == 'of_mac_addr_t':
return 'struct.pack("!6B", *%s)' % expr_expr
+ elif self.base == 'of_ipv6_t':
+ return 'struct.pack("!16s", %s)' % expr_expr
elif self.base in ['of_match_t', 'of_port_desc_t']:
return '%s.pack()' % expr_expr
elif self.base == 'of_port_name_t':
@@ -104,6 +108,8 @@
return "%s[%s:]" % (buf_expr, offset_expr)
elif self.base == 'of_mac_addr_t':
return "list(struct.unpack_from('!6B', %s, %s))" % (buf_expr, offset_expr)
+ elif self.base == 'of_ipv6_t':
+ return "struct.unpack_from('!16s', %s, %s)[0]" % (buf_expr, offset_expr)
elif self.base == 'of_match_t':
return 'common.match.unpack(buffer(%s, %s))' % (buf_expr, offset_expr)
elif self.base == 'of_port_desc_t':
diff --git a/py_gen/tests/of13.py b/py_gen/tests/of13.py
index 7d146a4..0294684 100644
--- a/py_gen/tests/of13.py
+++ b/py_gen/tests/of13.py
@@ -77,6 +77,17 @@
])
self.assertEquals(expected, obj.pack())
+ def test_oxm_ipv6_dst_pack(self):
+ import loxi.of13 as ofp
+ obj = ofp.oxm.ipv6_dst(value='\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0d\x0f')
+ expected = ''.join([
+ '\x80\x00', # class
+ '\x36', # type/masked
+ '\x14', # length
+ '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0d\x0f', # value
+ ])
+ self.assertEquals(expected, obj.pack())
+
class TestAllOF13(unittest.TestCase):
"""
Round-trips every class through serialization/deserialization.