On Fri, Jul 8, 2016 at 10:41 AM, Shinpei Muraoka <[email protected]>
wrote:
> Hi Yamamoto-San
>
> > i thought we aimed to align with on-wire fields rather than ovs-ofctl
> etc.
> > was the policy changed?
>
> If we aimed to align with on-wire fields,
> Ryu users needs to understand exactly the parameters content.
> It is very difficult.
> For the purpose of user-friendly, I adjusted the parameters of command.
> What do you think?
>
i don't feel start/end is any easier to understand than ofs/nbits. but
probably it's a matter of taste.
i guess consistency (ie. be similar to on-wire) is more important here.
you can add start/end as optional arguments and if specified convert them
to ofs/nbits.
in that way you can keep compatibility. i'm afraid that we need to do so
anyway
if we want to keep compatibilty with both of ryu 4.4 and older releases.
>
> Thanks,
>
> On 2016年07月07日 15:51, Takashi YAMAMOTO wrote:
>
>> this change broke dragonflow.
>> https://bugs.launchpad.net/dragonflow/+bug/1599367
>>
>> i thought we aimed to align with on-wire fields rather than ovs-ofctl etc.
>> was the policy changed?
>>
>> On Mon, Jun 6, 2016 at 9:48 AM, Shinpei Muraoka
>> <[email protected] <mailto:[email protected]>> wrote:
>>
>> This patch, update the methods that are to be specified in the NXM
>> or OXM.
>> Update the value specified in the bit format to the start and end
>> formats.
>> Update the following NXAction.
>>
>> - NXActionRegLoad
>> - NXActionOutputReg
>> - NXActionMultipath
>> - NXActionBundle
>> - NXActionBundleLoad
>> - NXActionCT
>>
>> Signed-off-by: Shinpei Muraoka <[email protected]
>> <mailto:[email protected]>>
>>
>> ---
>> ryu/ofproto/nx_actions.py | 76
>> ++++++++++++++--------
>> .../json/of13/ovs-ofctl-of13-action_ct.packet.json | 3 +-
>> .../of13/ovs-ofctl-of13-action_ct_exec.packet.json | 3 +-
>> .../of13/ovs-ofctl-of13-action_ct_nat.packet.json | 3 +-
>> .../ovs-ofctl-of13-action_ct_nat_v6.packet.json | 3 +-
>> ...s-ofctl-of13-match_load_nx_register.packet.json | 4 +-
>> ryu/tests/unit/ofproto/test_parser_v10.py | 59
>> ++++++++++++-----
>> 7 files changed, 101 insertions(+), 50 deletions(-)
>>
>> diff --git a/ryu/ofproto/nx_actions.py b/ryu/ofproto/nx_actions.py
>> index a442868..14bc479 100644
>> --- a/ryu/ofproto/nx_actions.py
>> +++ b/ryu/ofproto/nx_actions.py
>> @@ -228,11 +228,11 @@ def generate(ofp_name, ofpp_name):
>> ]
>> }
>>
>> - def __init__(self, ofs, nbits, dst, value,
>> + def __init__(self, start, end, dst, value,
>> type_=None, len_=None, experimenter=None,
>> subtype=None):
>> super(NXActionRegLoad, self).__init__()
>> - self.ofs = ofs
>> - self.nbits = nbits
>> + self.start = start
>> + self.end = end
>> self.dst = dst
>> self.value = value
>>
>> @@ -240,11 +240,11 @@ def generate(ofp_name, ofpp_name):
>> def parser(cls, buf):
>> (ofs_nbits, dst, value,) = struct.unpack_from(
>> cls._fmt_str, buf, 0)
>> - ofs = ofs_nbits >> 6
>> - nbits = (ofs_nbits & ((1 << 6) - 1)) + 1
>> + start = ofs_nbits >> 6
>> + end = (ofs_nbits & 0x3f) + start
>> # Right-shift instead of using oxm_parse_header for
>> simplicity...
>> dst_name = ofp.oxm_to_user_header(dst >> 9)
>> - return cls(ofs, nbits, dst_name, value)
>> + return cls(start, end, dst_name, value)
>>
>> def serialize_body(self):
>> hdr_data = bytearray()
>> @@ -252,7 +252,7 @@ def generate(ofp_name, ofpp_name):
>> ofp.oxm_serialize_header(n, hdr_data, 0)
>> (dst_num,) = struct.unpack_from('!I',
>> six.binary_type(hdr_data), 0)
>>
>> - ofs_nbits = (self.ofs << 6) + self.nbits - 1
>> + ofs_nbits = (self.start << 6) + (self.end - self.start)
>> data = bytearray()
>> msg_pack_into(self._fmt_str, data, 0,
>> ofs_nbits, dst_num, self.value)
>> @@ -432,12 +432,14 @@ def generate(ofp_name, ofpp_name):
>> _fmt_str = '!HIH6x'
>>
>> def __init__(self,
>> - ofs_nbits,
>> + start,
>> + end,
>> src,
>> max_len,
>> type_=None, len_=None, experimenter=None,
>> subtype=None):
>> super(NXActionOutputReg, self).__init__()
>> - self.ofs_nbits = ofs_nbits
>> + self.start = start
>> + self.end = end
>> self.src = src
>> self.max_len = max_len
>>
>> @@ -447,12 +449,16 @@ def generate(ofp_name, ofpp_name):
>> src,
>> max_len) = struct.unpack_from(
>> cls._fmt_str, buf, 0)
>> - return cls(ofs_nbits,
>> + start = ofs_nbits >> 6
>> + end = (ofs_nbits & 0x3f) + start
>> + return cls(start,
>> + end,
>> src,
>> max_len)
>>
>> def serialize_body(self):
>> data = bytearray()
>> + ofs_nbits = (self.start << 6) + (self.end - self.start)
>> msg_pack_into(self._fmt_str, data, 0,
>> ofs_nbits,
>> self.src,
>> @@ -660,7 +666,8 @@ def generate(ofp_name, ofpp_name):
>> algorithm,
>> max_link,
>> arg,
>> - ofs_nbits,
>> + start,
>> + end,
>> dst,
>> type_=None, len_=None, experimenter=None,
>> subtype=None):
>> super(NXActionMultipath, self).__init__()
>> @@ -669,7 +676,8 @@ def generate(ofp_name, ofpp_name):
>> self.algorithm = algorithm
>> self.max_link = max_link
>> self.arg = arg
>> - self.ofs_nbits = ofs_nbits
>> + self.start = start
>> + self.end = end
>> self.dst = dst
>>
>> @classmethod
>> @@ -682,15 +690,19 @@ def generate(ofp_name, ofpp_name):
>> ofs_nbits,
>> dst) = struct.unpack_from(
>> cls._fmt_str, buf, 0)
>> + start = ofs_nbits >> 6
>> + end = (ofs_nbits & 0x3f) + start
>> return cls(fields,
>> basis,
>> algorithm,
>> max_link,
>> arg,
>> - ofs_nbits,
>> + start,
>> + end,
>> dst)
>>
>> def serialize_body(self):
>> + ofs_nbits = (self.start << 6) + (self.end - self.start)
>> data = bytearray()
>> msg_pack_into(self._fmt_str, data, 0,
>> self.fields,
>> @@ -698,7 +710,7 @@ def generate(ofp_name, ofpp_name):
>> self.algorithm,
>> self.max_link,
>> self.arg,
>> - self.ofs_nbits,
>> + ofs_nbits,
>> self.dst)
>> return data
>>
>> @@ -708,7 +720,7 @@ def generate(ofp_name, ofpp_name):
>> _fmt_str = '!HHHIHHI4x'
>>
>> def __init__(self, algorithm, fields, basis, slave_type,
>> n_slaves,
>> - ofs_nbits, dst, slaves):
>> + start, end, dst, slaves):
>> super(_NXActionBundleBase, self).__init__()
>> self.len = utils.round_up(
>> nicira_ext.NX_ACTION_BUNDLE_0_SIZE + len(slaves) *
>> 2, 8)
>> @@ -718,7 +730,8 @@ def generate(ofp_name, ofpp_name):
>> self.basis = basis
>> self.slave_type = slave_type
>> self.n_slaves = n_slaves
>> - self.ofs_nbits = ofs_nbits
>> + self.start = start
>> + self.end = end
>> self.dst = dst
>>
>> assert isinstance(slaves, (list, tuple))
>> @@ -732,6 +745,8 @@ def generate(ofp_name, ofpp_name):
>> (algorithm, fields, basis,
>> slave_type, n_slaves, ofs_nbits, dst) =
>> struct.unpack_from(
>> cls._fmt_str, buf, 0)
>> + start = ofs_nbits >> 6
>> + end = (ofs_nbits & 0x3f) + start
>> slave_offset = (nicira_ext.NX_ACTION_BUNDLE_0_SIZE -
>> nicira_ext.NX_ACTION_HEADER_0_SIZE)
>>
>> @@ -742,9 +757,10 @@ def generate(ofp_name, ofpp_name):
>> slave_offset += 2
>>
>> return cls(algorithm, fields, basis, slave_type,
>> - n_slaves, ofs_nbits, dst, slaves)
>> + n_slaves, start, end, dst, slaves)
>>
>> def serialize_body(self):
>> + ofs_nbits = (self.start << 6) + (self.end - self.start)
>> data = bytearray()
>> slave_offset = (nicira_ext.NX_ACTION_BUNDLE_0_SIZE -
>> nicira_ext.NX_ACTION_HEADER_0_SIZE)
>> @@ -761,7 +777,7 @@ def generate(ofp_name, ofpp_name):
>> msg_pack_into(self._fmt_str, data, 0,
>> self.algorithm, self.fields, self.basis,
>> self.slave_type, self.n_slaves,
>> - self.ofs_nbits, self.dst)
>> + ofs_nbits, self.dst)
>>
>> return data
>>
>> @@ -769,25 +785,25 @@ def generate(ofp_name, ofpp_name):
>> _subtype = nicira_ext.NXAST_BUNDLE
>>
>> def __init__(self, algorithm, fields, basis, slave_type,
>> n_slaves,
>> - ofs_nbits, dst, slaves):
>> + start, end, dst, slaves):
>> # NXAST_BUNDLE actions should have 'ofs_nbits' and
>> 'dst' zeroed.
>> super(NXActionBundle, self).__init__(
>> algorithm, fields, basis, slave_type, n_slaves,
>> - ofs_nbits=0, dst=0, slaves=slaves)
>> + start=0, end=0, dst=0, slaves=slaves)
>>
>> class NXActionBundleLoad(_NXActionBundleBase):
>> _subtype = nicira_ext.NXAST_BUNDLE_LOAD
>>
>> def __init__(self, algorithm, fields, basis, slave_type,
>> n_slaves,
>> - ofs_nbits, dst, slaves):
>> + start, end, dst, slaves):
>> super(NXActionBundleLoad, self).__init__(
>> algorithm, fields, basis, slave_type, n_slaves,
>> - ofs_nbits, dst, slaves)
>> + start, end, dst, slaves)
>>
>> class NXActionCT(NXAction):
>> _subtype = nicira_ext.NXAST_CT
>>
>> - # flags, zone_src, zone_ofs_nbits (zone_imm), recirc_table,
>> + # flags, zone_src, zone_ofs_nbits, recirc_table,
>> # pad, alg
>> _fmt_str = '!HIHB3xH'
>> # Followed by actions
>> @@ -795,7 +811,8 @@ def generate(ofp_name, ofpp_name):
>> def __init__(self,
>> flags,
>> zone_src,
>> - zone_ofs_nbits, # is zone_imm if zone_src == 0
>> + zone_start,
>> + zone_end,
>> recirc_table,
>> alg,
>> actions,
>> @@ -803,7 +820,8 @@ def generate(ofp_name, ofpp_name):
>> super(NXActionCT, self).__init__()
>> self.flags = flags
>> self.zone_src = zone_src
>> - self.zone_ofs_nbits = zone_ofs_nbits
>> + self.zone_start = zone_start
>> + self.zone_end = zone_end
>> self.recirc_table = recirc_table
>> self.alg = alg
>> self.actions = actions
>> @@ -816,6 +834,8 @@ def generate(ofp_name, ofpp_name):
>> recirc_table,
>> alg,) = struct.unpack_from(
>> cls._fmt_str, buf, 0)
>> + zone_start = zone_ofs_nbits >> 6
>> + zone_end = (zone_ofs_nbits & 0x3f) + zone_start
>> rest = buf[struct.calcsize(cls._fmt_str):]
>> # actions
>> actions = []
>> @@ -824,15 +844,17 @@ def generate(ofp_name, ofpp_name):
>> actions.append(action)
>> rest = rest[action.len:]
>>
>> - return cls(flags, zone_src, zone_ofs_nbits, recirc_table,
>> + return cls(flags, zone_src, zone_start, zone_end,
>> recirc_table,
>> alg, actions)
>>
>> def serialize_body(self):
>> + zone_ofs_nbits = ((self.zone_start << 6) +
>> + (self.zone_end - self.zone_start))
>> data = bytearray()
>> msg_pack_into(self._fmt_str, data, 0,
>> self.flags,
>> self.zone_src,
>> - self.zone_ofs_nbits,
>> + zone_ofs_nbits,
>> self.recirc_table,
>> self.alg)
>> for a in self.actions:
>> diff --git
>>
>> a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json
>>
>> b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json
>> index 258da23..473b54f 100644
>> ---
>>
>> a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json
>> +++
>>
>> b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json
>> @@ -21,7 +21,8 @@
>> "recirc_table": 4,
>> "subtype": 35,
>> "type": 65535,
>> - "zone_ofs_nbits": 0,
>> + "zone_start": 0,
>> + "zone_end": 0,
>> "zone_src": 0
>> }
>> }
>> diff --git
>>
>> a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json
>>
>> b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json
>> index 8327644..7cecad7 100644
>> ---
>>
>> a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json
>> +++
>>
>> b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json
>> @@ -35,7 +35,8 @@
>> "recirc_table": 255,
>> "subtype": 35,
>> "type": 65535,
>> - "zone_ofs_nbits": 0,
>> + "zone_start": 0,
>> + "zone_end": 0,
>> "zone_src": 0
>> }
>> }
>> diff --git
>>
>> a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json
>>
>> b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json
>> index 85aae12..b63c226 100644
>> ---
>>
>> a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json
>> +++
>>
>> b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json
>> @@ -37,7 +37,8 @@
>> "recirc_table": 255,
>> "subtype": 35,
>> "type": 65535,
>> - "zone_ofs_nbits": 0,
>> + "zone_start": 0,
>> + "zone_end": 0,
>> "zone_src": 0
>> }
>> }
>> diff --git
>>
>> a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json
>>
>> b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json
>> index 31f9437..e50d561 100644
>> ---
>>
>> a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json
>> +++
>>
>> b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json
>> @@ -37,7 +37,8 @@
>> "recirc_table": 255,
>> "subtype": 35,
>> "type": 65535,
>> - "zone_ofs_nbits": 0,
>> + "zone_start": 0,
>> + "zone_end": 0,
>> "zone_src": 0
>> }
>> }
>> diff --git
>>
>> a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json
>>
>> b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json
>> index adf14ca..e57d11a 100644
>> ---
>>
>> a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json
>> +++
>>
>> b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json
>> @@ -16,8 +16,8 @@
>> "dst": "reg0",
>> "experimenter": 8992,
>> "len": 24,
>> - "nbits": 28,
>> - "ofs": 4,
>> + "end": 31,
>> + "start": 4,
>> "subtype": 7,
>> "type": 65535,
>> "value": 233495534
>> diff --git a/ryu/tests/unit/ofproto/test_parser_v10.py
>> b/ryu/tests/unit/ofproto/test_parser_v10.py
>> index c4dd474..5143e11 100644
>> --- a/ryu/tests/unit/ofproto/test_parser_v10.py
>> +++ b/ryu/tests/unit/ofproto/test_parser_v10.py
>> @@ -1421,6 +1421,8 @@ class TestNXActionRegLoad(unittest.TestCase):
>> dst = {'buf': b'\x9f\x9f\x88\x26', 'val': 2678032422
>> <tel:2678032422>}
>>
>> value = {'buf': b'\x33\x51\xcd\x43\x25\x28\x18\x99',
>> 'val': 3697962457317775513}
>> + start = 246
>> + end = 270
>>
>> buf = type_['buf'] \
>> + len_['buf'] \
>> @@ -1430,7 +1432,8 @@ class TestNXActionRegLoad(unittest.TestCase):
>> + dst['buf'] \
>> + value['buf']
>>
>> - c = NXActionRegLoad(ofs_nbits['val'],
>> + c = NXActionRegLoad(start,
>> + end,
>> dst['val'],
>> value['val'])
>>
>> @@ -1445,13 +1448,15 @@ class TestNXActionRegLoad(unittest.TestCase):
>> eq_(self.len_['val'], self.c.len)
>> eq_(self.vendor['val'], self.c.vendor)
>> eq_(self.subtype['val'], self.c.subtype)
>> - eq_(self.ofs_nbits['val'], self.c.ofs_nbits)
>> + eq_(self.start, self.c.start)
>> + eq_(self.end, self.c.end)
>> eq_(self.dst['val'], self.c.dst)
>> eq_(self.value['val'], self.c.value)
>>
>> def test_parser(self):
>> res = self.c.parser(self.buf, 0)
>> - eq_(self.ofs_nbits['val'], res.ofs_nbits)
>> + eq_(self.start, self.c.start)
>> + eq_(self.end, self.c.end)
>> eq_(self.dst['val'], res.dst)
>> eq_(self.value['val'], res.value)
>>
>> @@ -1547,6 +1552,8 @@ class TestNXActionMultipath(unittest.TestCase):
>> zfill1 = b'\x00' * 2
>> ofs_nbits = {'buf': b'\xa9\x9a', 'val': 43418}
>> dst = {'buf': b'\xb9\x2f\x16\x64', 'val': 3106870884
>> <tel:3106870884>}
>>
>> + start = 678
>> + end = 704
>>
>> buf = type_['buf'] \
>> + len_['buf'] \
>> @@ -1567,7 +1574,8 @@ class TestNXActionMultipath(unittest.TestCase):
>> algorithm['val'],
>> max_link['val'],
>> arg['val'],
>> - ofs_nbits['val'],
>> + start,
>> + end,
>> dst['val'])
>>
>> def setUp(self):
>> @@ -1582,7 +1590,8 @@ class TestNXActionMultipath(unittest.TestCase):
>> eq_(self.algorithm['val'], self.c.algorithm)
>> eq_(self.max_link['val'], self.c.max_link)
>> eq_(self.arg['val'], self.c.arg)
>> - eq_(self.ofs_nbits['val'], self.c.ofs_nbits)
>> + eq_(self.start, self.c.start)
>> + eq_(self.end, self.c.end)
>> eq_(self.dst['val'], self.c.dst)
>>
>> def test_parser(self):
>> @@ -1593,7 +1602,8 @@ class TestNXActionMultipath(unittest.TestCase):
>> eq_(self.algorithm['val'], res.algorithm)
>> eq_(self.max_link['val'], res.max_link)
>> eq_(self.arg['val'], res.arg)
>> - eq_(self.ofs_nbits['val'], res.ofs_nbits)
>> + eq_(self.start, res.start)
>> + eq_(self.end, res.end)
>> eq_(self.dst['val'], res.dst)
>>
>> def test_serialize(self):
>> @@ -1634,12 +1644,14 @@ class TestNXActionBundle(unittest.TestCase):
>> basis = {'buf': b'\xfd\x6f', 'val': 64879}
>> slave_type = {'buf': b'\x7c\x51\x0f\xe0', 'val': 2085687264
>> <tel:2085687264>}
>>
>> n_slaves = {'buf': b'\x00\x02', 'val': 2}
>> - ofs_nbits = {'buf': b'\xec\xf7', 'val': 60663}
>> - dst = {'buf': b'\x50\x7c\x75\xfe', 'val': 1350333950}
>> + ofs_nbits = {'buf': b'\x00\x00', 'val': 0}
>> + dst = {'buf': b'\x00\x00\x00\x00', 'val': 0}
>> zfill = b'\x00' * 4
>>
>> slaves_buf = (b'\x00\x01', b'\x00\x02')
>> slaves_val = (1, 2)
>> + start = 0
>> + end = 0
>>
>> _len = len_['val'] + len(slaves_val) * 2
>> _len += (_len % 8)
>> @@ -1664,7 +1676,8 @@ class TestNXActionBundle(unittest.TestCase):
>> basis['val'],
>> slave_type['val'],
>> n_slaves['val'],
>> - ofs_nbits['val'],
>> + start,
>> + end,
>> dst['val'],
>> slaves_val)
>>
>> @@ -1684,7 +1697,8 @@ class TestNXActionBundle(unittest.TestCase):
>> eq_(self.basis['val'], self.c.basis)
>> eq_(self.slave_type['val'], self.c.slave_type)
>> eq_(self.n_slaves['val'], self.c.n_slaves)
>> - eq_(self.ofs_nbits['val'], self.c.ofs_nbits)
>> + eq_(self.start, self.c.start)
>> + eq_(self.end, self.c.end)
>> eq_(self.dst['val'], self.c.dst)
>>
>> # slaves
>> @@ -1704,7 +1718,8 @@ class TestNXActionBundle(unittest.TestCase):
>> eq_(self.basis['val'], res.basis)
>> eq_(self.slave_type['val'], res.slave_type)
>> eq_(self.n_slaves['val'], res.n_slaves)
>> - eq_(self.ofs_nbits['val'], res.ofs_nbits)
>> + eq_(self.start, res.start)
>> + eq_(self.end, res.end)
>> eq_(self.dst['val'], res.dst)
>>
>> # slaves
>> @@ -1756,6 +1771,8 @@ class TestNXActionBundleLoad(unittest.TestCase):
>> ofs_nbits = {'buf': b'\xd2\x9d', 'val': 53917}
>> dst = {'buf': b'\x37\xfe\xb3\x60', 'val': 939438944}
>> zfill = b'\x00' * 4
>> + start = 842
>> + end = 871
>>
>> slaves_buf = (b'\x00\x01', b'\x00\x02')
>> slaves_val = (1, 2)
>> @@ -1783,7 +1800,8 @@ class TestNXActionBundleLoad(unittest.TestCase):
>> basis['val'],
>> slave_type['val'],
>> n_slaves['val'],
>> - ofs_nbits['val'],
>> + start,
>> + end,
>> dst['val'],
>> slaves_val)
>>
>> @@ -1803,7 +1821,8 @@ class TestNXActionBundleLoad(unittest.TestCase):
>> eq_(self.basis['val'], self.c.basis)
>> eq_(self.slave_type['val'], self.c.slave_type)
>> eq_(self.n_slaves['val'], self.c.n_slaves)
>> - eq_(self.ofs_nbits['val'], self.c.ofs_nbits)
>> + eq_(self.start, self.c.start)
>> + eq_(self.end, self.c.end)
>> eq_(self.dst['val'], self.c.dst)
>>
>> # slaves
>> @@ -1823,7 +1842,8 @@ class TestNXActionBundleLoad(unittest.TestCase):
>> eq_(self.basis['val'], res.basis)
>> eq_(self.slave_type['val'], res.slave_type)
>> eq_(self.n_slaves['val'], res.n_slaves)
>> - eq_(self.ofs_nbits['val'], res.ofs_nbits)
>> + eq_(self.start, res.start)
>> + eq_(self.end, res.end)
>> eq_(self.dst['val'], res.dst)
>>
>> # slaves
>> @@ -1870,6 +1890,8 @@ class TestNXActionOutputReg(unittest.TestCase):
>> src = {'buf': b'\x5e\x3a\x04\x26', 'val': 1580860454}
>> max_len = {'buf': b'\x00\x08', 'val':
>> ofproto.OFP_ACTION_OUTPUT_SIZE}
>> zfill = b'\x00' * 6
>> + start = 1017
>> + end = 1073
>>
>> buf = type_['buf'] \
>> + len_['buf'] \
>> @@ -1880,7 +1902,8 @@ class TestNXActionOutputReg(unittest.TestCase):
>> + max_len['buf'] \
>> + zfill
>>
>> - c = NXActionOutputReg(ofs_nbits['val'],
>> + c = NXActionOutputReg(start,
>> + end,
>> src['val'],
>> max_len['val'])
>>
>> @@ -1895,7 +1918,8 @@ class TestNXActionOutputReg(unittest.TestCase):
>> eq_(self.len_['val'], self.c.len)
>> eq_(self.vendor['val'], self.c.vendor)
>> eq_(self.subtype['val'], self.c.subtype)
>> - eq_(self.ofs_nbits['val'], self.c.ofs_nbits)
>> + eq_(self.start, self.c.start)
>> + eq_(self.end, self.c.end)
>> eq_(self.src['val'], self.c.src)
>> eq_(self.max_len['val'], self.c.max_len)
>>
>> @@ -1906,7 +1930,8 @@ class TestNXActionOutputReg(unittest.TestCase):
>> eq_(self.len_['val'], res.len)
>> eq_(self.vendor['val'], res.vendor)
>> eq_(self.subtype['val'], res.subtype)
>> - eq_(self.ofs_nbits['val'], res.ofs_nbits)
>> + eq_(self.start, self.c.start)
>> + eq_(self.end, self.c.end)
>> eq_(self.src['val'], res.src)
>> eq_(self.max_len['val'], res.max_len)
>>
>> --
>> 1.9.1
>>
>>
>>
>> ------------------------------------------------------------------------------
>> What NetFlow Analyzer can do for you? Monitors network bandwidth and
>> traffic
>> patterns at an interface-level. Reveals which users, apps, and
>> protocols are
>> consuming the most bandwidth. Provides multi-vendor support for
>> NetFlow,
>> J-Flow, sFlow and other flows. Make informed decisions using capacity
>> planning reports.
>> https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
>> _______________________________________________
>> Ryu-devel mailing list
>> [email protected] <mailto:
>> [email protected]>
>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>
>>
>>
------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel