Hi Yamamoto-San > 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.
Argument of the function, which was fixed in this patch restore to the way to specify the ofs/nbits. I described in the document for the way to specify the ofs/nbits. Thanks, On 2016年07月08日 12:11, Takashi YAMAMOTO wrote: > > > On Fri, Jul 8, 2016 at 10:41 AM, Shinpei Muraoka > <[email protected] <mailto:[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]> > <mailto:[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]> > <mailto:[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> > <tel: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> > <tel: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> > <tel: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]> > <mailto:[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 > ------------------------------------------------------------------------------ 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
