diff options
author | HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp> | 2012-12-28 10:16:21 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-01-07 08:47:04 +0900 |
commit | 429401a1b87bf170b56f741a319390b327b291f1 (patch) | |
tree | b46a47a73bca08c35705ef45385f06b47de40a13 | |
parent | 797b8a70d419a5fc4b9dae473b66f7e1c7b66211 (diff) |
test: change the branch of openvswitch to 'of12'
Change the branch of openvswitch used by integration tests to 'of12'
Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/tests/integrated/test_add_flow_v12_actions.py | 120 | ||||
-rw-r--r-- | ryu/tests/integrated/test_add_flow_v12_matches.py | 563 | ||||
-rw-r--r-- | ryu/tests/integrated/test_request_reply_v12.py | 4 | ||||
-rw-r--r-- | ryu/tests/integrated/tester.py | 38 |
4 files changed, 460 insertions, 265 deletions
diff --git a/ryu/tests/integrated/test_add_flow_v12_actions.py b/ryu/tests/integrated/test_add_flow_v12_actions.py index 820ed816..c78b40dd 100644 --- a/ryu/tests/integrated/test_add_flow_v12_actions.py +++ b/ryu/tests/integrated/test_add_flow_v12_actions.py @@ -35,11 +35,11 @@ class RunTest(tester.TestFlowBase): self._verify = [] - def add_apply_actions(self, dp, actions): + def add_apply_actions(self, dp, actions, match=None): inst = [dp.ofproto_parser.OFPInstructionActions( dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] - - match = dp.ofproto_parser.OFPMatch() + if match is None: + match = dp.ofproto_parser.OFPMatch() m = dp.ofproto_parser.OFPFlowMod(dp, 0, 0, 0, dp.ofproto.OFPFC_ADD, 0, 0, 0xff, 0xffffffff, @@ -48,12 +48,12 @@ class RunTest(tester.TestFlowBase): 0, match, inst) dp.send_msg(m) - def add_set_field_action(self, dp, field, value): + def add_set_field_action(self, dp, field, value, match=None): self._verify = [dp.ofproto.OFPAT_SET_FIELD, 'field', field, value] f = dp.ofproto_parser.OFPMatchField.make(field, value) actions = [dp.ofproto_parser.OFPActionSetField(f), ] - self.add_apply_actions(dp, actions) + self.add_apply_actions(dp, actions, match=match) def verify_default(self, dp, stats): verify = self._verify @@ -176,109 +176,159 @@ class RunTest(tester.TestFlowBase): field = dp.ofproto.OXM_OF_VLAN_PCP value = 3 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_vlan_vid(1) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_nw_dscp(self, dp): field = dp.ofproto.OXM_OF_IP_DSCP value = 32 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_nw_ecn(self, dp): field = dp.ofproto.OXM_OF_IP_ECN value = 1 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_ip_proto(self, dp): field = dp.ofproto.OXM_OF_IP_PROTO value = inet.IPPROTO_TCP - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_ipv4_src(self, dp): field = dp.ofproto.OXM_OF_IPV4_SRC ipv4_src = '192.168.3.92' value = self.ipv4_to_int(ipv4_src) - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_ipv4_dst(self, dp): field = dp.ofproto.OXM_OF_IPV4_DST ipv4_dst = '192.168.74.122' value = self.ipv4_to_int(ipv4_dst) - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_tcp_src(self, dp): field = dp.ofproto.OXM_OF_TCP_SRC value = 105 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + match.set_ip_proto(inet.IPPROTO_TCP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_tcp_dst(self, dp): field = dp.ofproto.OXM_OF_TCP_DST value = 75 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + match.set_ip_proto(inet.IPPROTO_TCP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_udp_src(self, dp): field = dp.ofproto.OXM_OF_UDP_SRC value = 197 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + match.set_ip_proto(inet.IPPROTO_UDP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_udp_dst(self, dp): field = dp.ofproto.OXM_OF_UDP_DST value = 17 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + match.set_ip_proto(inet.IPPROTO_UDP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_icmpv4_type(self, dp): field = dp.ofproto.OXM_OF_ICMPV4_TYPE value = 8 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_ip_proto(inet.IPPROTO_ICMP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_icmpv4_code(self, dp): field = dp.ofproto.OXM_OF_ICMPV4_CODE value = 2 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_ip_proto(inet.IPPROTO_ICMP) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_arp_op(self, dp): field = dp.ofproto.OXM_OF_ARP_OP value = 2 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_ARP) + self.add_set_field_action(dp, field, value, match) def test_action_set_field_arp_spa(self, dp): field = dp.ofproto.OXM_OF_ARP_SPA nw_src = '192.168.132.179' value = self.ipv4_to_int(nw_src) - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_ARP) + self.add_set_field_action(dp, field, value, match) def test_action_set_field_arp_tpa(self, dp): field = dp.ofproto.OXM_OF_ARP_TPA nw_dst = '192.168.118.85' value = self.ipv4_to_int(nw_dst) - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_ARP) + self.add_set_field_action(dp, field, value, match) def test_action_set_field_arp_sha(self, dp): field = dp.ofproto.OXM_OF_ARP_SHA arp_sha = '50:29:e7:7f:6c:7f' value = self.haddr_to_bin(arp_sha) - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_ARP) + self.add_set_field_action(dp, field, value, match) def test_action_set_field_arp_tha(self, dp): field = dp.ofproto.OXM_OF_ARP_THA arp_tha = '71:c8:72:2f:47:fd' value = self.haddr_to_bin(arp_tha) - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_ARP) + self.add_set_field_action(dp, field, value, match) def test_action_set_field_ipv6_src(self, dp): field = dp.ofproto.OXM_OF_IPV6_SRC @@ -335,15 +385,21 @@ class RunTest(tester.TestFlowBase): def test_action_set_field_mpls_label(self, dp): field = dp.ofproto.OXM_OF_MPLS_LABEL - value = 0x4cd41 + value = 0x4c - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_MPLS) + + self.add_set_field_action(dp, field, value, match) def test_action_set_field_mpls_tc(self, dp): field = dp.ofproto.OXM_OF_MPLS_TC value = 0b101 - self.add_set_field_action(dp, field, value) + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_MPLS) + + self.add_set_field_action(dp, field, value, match) # Test of Change-TTL Actions def test_action_set_mpls_ttl(self, dp): @@ -367,3 +423,17 @@ class RunTest(tester.TestFlowBase): self._verify = [dp.ofproto.OFPAT_COPY_TTL_IN] actions = [dp.ofproto_parser.OFPActionCopyTtlIn(), ] self.add_apply_actions(dp, actions) + + def is_supported(self, t): + unsupported = [ + 'test_action_set_field_ip_proto', + 'test_action_set_field_dl_type', + 'test_action_set_field_arp', + 'test_action_set_field_ipv6', + 'test_action_set_field_icmp', + ] + for u in unsupported: + if t.find(u) != -1: + return False + + return True diff --git a/ryu/tests/integrated/test_add_flow_v12_matches.py b/ryu/tests/integrated/test_add_flow_v12_matches.py index 778f99ff..27b38804 100644 --- a/ryu/tests/integrated/test_add_flow_v12_matches.py +++ b/ryu/tests/integrated/test_add_flow_v12_matches.py @@ -16,7 +16,6 @@ # vim: tabstop=4 shiftwidth=4 softtabstop=4 import logging -import itertools from ryu.ofproto import ofproto_v1_2 from ryu.ofproto import ether @@ -34,7 +33,7 @@ class RunTest(tester.TestFlowBase): def __init__(self, *args, **kwargs): super(RunTest, self).__init__(*args, **kwargs) - self._verify = [] + self._verify = {} def add_matches(self, dp, match): m = dp.ofproto_parser.OFPFlowMod(dp, 0, 0, 0, @@ -44,39 +43,108 @@ class RunTest(tester.TestFlowBase): 0xffffffff, 0, match, []) dp.send_msg(m) - def verify_default(self, dp, stats): - verify = self._verify - self._verify = [] + def _set_verify(self, headers, value, mask=None, + all_bits_masked=False, type_='int'): + self._verify = {} + self._verify['headers'] = headers + self._verify['value'] = value + self._verify['mask'] = mask + self._verify['all_bits_masked'] = all_bits_masked + self._verify['type'] = type_ - headers = value = mask = None - if len(verify) == 3: - (headers, value, mask, ) = verify + def verify_default(self, dp, stats): + type_ = self._verify['type'] + headers = self._verify['headers'] + value = self._verify['value'] + mask = self._verify['mask'] + value_masked = self._masked(type_, value, mask) + all_bits_masked = self._verify['all_bits_masked'] + + field = None + for s in stats: + for f in s.match.fields: + if f.header in headers: + field = f + break + + if field is None: + if self._is_all_zero_bit(type_, mask): + return True + return 'Field not found.' + + f_value = field.value + if hasattr(field, 'mask'): + f_mask = field.mask else: - return "self._verify is invalid." - - f_value = f_mask = None - for f in stats[0].match.fields: - if f.header in headers: - f_value = f.value - if len(headers) == 2: - f_mask = f.mask - break - - if f_value == value and f_mask == mask: + f_mask = None + + if (f_value == value) or (f_value == value_masked): + if (f_mask == mask) or (all_bits_masked and f_mask is None): + return True + + return "send: %s/%s, reply: %s/%s" \ + % (self._cnv_to_str(type_, value, mask, f_value, f_mask)) + + def _masked(self, type_, value, mask): + if mask is None: + v = value + elif type_ == 'int': + v = value & mask + elif type_ == 'mac': + v = self.haddr_masked(value, mask) + elif type_ == 'ipv4': + v = self.ipv4_masked(value, mask) + elif type_ == 'ipv6': + v = self.ipv6_masked(value, mask) + else: + raise 'Unknown type' + return v + + def _is_all_zero_bit(self, type_, val): + if type_ == 'int' or type_ == 'ipv4': + return val == 0 + elif type_ == 'mac': + for v in val: + if v != '\x00': + return False + return True + elif type_ == 'ipv6': + for v in val: + if v != 0: + return False return True - elif value is None: - return "Field[%s] is setting." % (headers, ) else: - return "Value error. send: (%s/%s), val:(%s/%s)" \ - % (value, mask, f_value, f_mask) + raise 'Unknown type' + + def _cnv_to_str(self, type_, value, mask, f_value, f_mask): + func = None + if type_ == 'int': + pass + elif type_ == 'mac': + func = self.haddr_to_str + elif type_ == 'ipv4': + func = self.ipv4_to_str + elif type_ == 'ipv6': + func = self.ipv6_to_str + else: + raise 'Unknown type' + + if func: + value = func(value) + f_value = func(f_value) + if mask: + mask = func(mask) + if f_mask: + f_mask = func(f_mask) + + return value, mask, f_value, f_mask def test_rule_set_dl_dst(self, dp): dl_dst = 'e2:7a:09:79:0b:0f' dl_dst_bin = self.haddr_to_bin(dl_dst) - self._verify = [(dp.ofproto.OXM_OF_ETH_DST, - dp.ofproto.OXM_OF_ETH_DST_W, ), - dl_dst_bin, None] + headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] + self._set_verify(headers, dl_dst_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_dst(dl_dst_bin) @@ -88,9 +156,8 @@ class RunTest(tester.TestFlowBase): mask = 'ff:ff:ff:ff:ff:ff' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ETH_DST, - dp.ofproto.OXM_OF_ETH_DST_W, ), - dl_dst_bin, None] + headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] + self._set_verify(headers, dl_dst_bin, mask_bin, True, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_dst_masked(dl_dst_bin, mask_bin) @@ -102,9 +169,8 @@ class RunTest(tester.TestFlowBase): mask = 'ff:ff:ff:ff:ff:00' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ETH_DST, - dp.ofproto.OXM_OF_ETH_DST_W, ), - dl_dst_bin[:-1] + '\x00', mask_bin] + headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] + self._set_verify(headers, dl_dst_bin, mask_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_dst_masked(dl_dst_bin, mask_bin) @@ -116,9 +182,8 @@ class RunTest(tester.TestFlowBase): mask = '00:00:00:00:00:00' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ETH_DST, - dp.ofproto.OXM_OF_ETH_DST_W, ), - None, None] + headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] + self._set_verify(headers, dl_dst_bin, mask_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_dst_masked(dl_dst_bin, mask_bin) @@ -128,9 +193,8 @@ class RunTest(tester.TestFlowBase): dl_src = 'e2:7a:09:79:0b:0f' dl_src_bin = self.haddr_to_bin(dl_src) - self._verify = [(dp.ofproto.OXM_OF_ETH_SRC, - dp.ofproto.OXM_OF_ETH_SRC_W, ), - dl_src_bin, None] + headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] + self._set_verify(headers, dl_src_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_src(dl_src_bin) @@ -142,9 +206,8 @@ class RunTest(tester.TestFlowBase): mask = 'ff:ff:ff:ff:ff:ff' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ETH_SRC, - dp.ofproto.OXM_OF_ETH_SRC_W, ), - dl_src_bin, None] + headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] + self._set_verify(headers, dl_src_bin, mask_bin, True, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_src_masked(dl_src_bin, mask_bin) @@ -156,9 +219,8 @@ class RunTest(tester.TestFlowBase): mask = 'ff:ff:ff:ff:ff:00' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ETH_SRC, - dp.ofproto.OXM_OF_ETH_SRC_W, ), - dl_src_bin[:-1] + '\x00', mask_bin] + headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] + self._set_verify(headers, dl_src_bin, mask_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_src_masked(dl_src_bin, mask_bin) @@ -170,9 +232,8 @@ class RunTest(tester.TestFlowBase): mask = '00:00:00:00:00:00' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ETH_SRC, - dp.ofproto.OXM_OF_ETH_SRC_W, ), - None, None] + headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] + self._set_verify(headers, dl_src_bin, mask_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_src_masked(dl_src_bin, mask_bin) @@ -180,8 +241,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_dl_type_ip(self, dp): dl_type = ether.ETH_TYPE_IP - self._verify = [(dp.ofproto.OXM_OF_ETH_TYPE, ), - dl_type, None] + + headers = [dp.ofproto.OXM_OF_ETH_TYPE] + self._set_verify(headers, dl_type) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -189,8 +251,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_dl_type_arp(self, dp): dl_type = ether.ETH_TYPE_ARP - self._verify = [(dp.ofproto.OXM_OF_ETH_TYPE, ), - dl_type, None] + + headers = [dp.ofproto.OXM_OF_ETH_TYPE] + self._set_verify(headers, dl_type) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -198,8 +261,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_dl_type_vlan(self, dp): dl_type = ether.ETH_TYPE_8021Q - self._verify = [(dp.ofproto.OXM_OF_ETH_TYPE, ), - dl_type, None] + + headers = [dp.ofproto.OXM_OF_ETH_TYPE] + self._set_verify(headers, dl_type) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -207,8 +271,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_dl_type_ipv6(self, dp): dl_type = ether.ETH_TYPE_IPV6 - self._verify = [(dp.ofproto.OXM_OF_ETH_TYPE, ), - dl_type, None] + + headers = [dp.ofproto.OXM_OF_ETH_TYPE] + self._set_verify(headers, dl_type) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -216,8 +281,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_dl_type_lacp(self, dp): dl_type = ether.ETH_TYPE_SLOW - self._verify = [(dp.ofproto.OXM_OF_ETH_TYPE, ), - dl_type, None] + + headers = [dp.ofproto.OXM_OF_ETH_TYPE] + self._set_verify(headers, dl_type) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -226,8 +292,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ip_dscp(self, dp): ip_dscp = 36 dl_type = ether.ETH_TYPE_IP - self._verify = [(dp.ofproto.OXM_OF_IP_DSCP, ), - ip_dscp, None] + + headers = [dp.ofproto.OXM_OF_IP_DSCP] + self._set_verify(headers, ip_dscp) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -236,9 +303,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_vlan_vid(self, dp): vlan_vid = 0x4ef - self._verify = [(dp.ofproto.OXM_OF_VLAN_VID, - dp.ofproto.OXM_OF_VLAN_VID_W, ), - vlan_vid, None] + + headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] + self._set_verify(headers, vlan_vid) match = dp.ofproto_parser.OFPMatch() match.set_vlan_vid(vlan_vid) @@ -247,9 +314,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_vlan_vid_masked_ff(self, dp): vlan_vid = 0x4ef mask = 0xfff - self._verify = [(dp.ofproto.OXM_OF_VLAN_VID, - dp.ofproto.OXM_OF_VLAN_VID_W, ), - vlan_vid, None] + + headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] + self._set_verify(headers, vlan_vid, mask, True) match = dp.ofproto_parser.OFPMatch() match.set_vlan_vid_masked(vlan_vid, mask) @@ -258,9 +325,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_vlan_vid_masked_f0(self, dp): vlan_vid = 0x4ef mask = 0xff0 - self._verify = [(dp.ofproto.OXM_OF_VLAN_VID, - dp.ofproto.OXM_OF_VLAN_VID_W, ), - vlan_vid & mask, mask] + + headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] + self._set_verify(headers, vlan_vid, mask) match = dp.ofproto_parser.OFPMatch() match.set_vlan_vid_masked(vlan_vid, mask) @@ -269,9 +336,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_vlan_vid_masked_00(self, dp): vlan_vid = 0x4ef mask = 0x000 - self._verify = [(dp.ofproto.OXM_OF_VLAN_VID, - dp.ofproto.OXM_OF_VLAN_VID_W, ), - None, None] + + headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] + self._set_verify(headers, vlan_vid, mask) match = dp.ofproto_parser.OFPMatch() match.set_vlan_vid_masked(vlan_vid, mask) @@ -280,8 +347,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_vlan_pcp(self, dp): vlan_vid = 0x4ef vlan_pcp = 5 - self._verify = [(dp.ofproto.OXM_OF_VLAN_PCP, ), - vlan_pcp, None] + + headers = [dp.ofproto.OXM_OF_VLAN_PCP] + self._set_verify(headers, vlan_pcp) match = dp.ofproto_parser.OFPMatch() match.set_vlan_vid(vlan_vid) @@ -291,8 +359,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ip_ecn(self, dp): dl_type = ether.ETH_TYPE_IP ip_ecn = 3 - self._verify = [(dp.ofproto.OXM_OF_IP_ECN, ), - ip_ecn, None] + + headers = [dp.ofproto.OXM_OF_IP_ECN] + self._set_verify(headers, ip_ecn) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -302,8 +371,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ip_proto_icmp(self, dp): dl_type = ether.ETH_TYPE_IP ip_proto = inet.IPPROTO_ICMP - self._verify = [(dp.ofproto.OXM_OF_IP_PROTO, ), - ip_proto, None] + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -313,8 +383,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ip_proto_tcp(self, dp): dl_type = ether.ETH_TYPE_IP ip_proto = inet.IPPROTO_TCP - self._verify = [(dp.ofproto.OXM_OF_IP_PROTO, ), - ip_proto, None] + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -324,8 +395,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ip_proto_udp(self, dp): dl_type = ether.ETH_TYPE_IP ip_proto = inet.IPPROTO_UDP - self._verify = [(dp.ofproto.OXM_OF_IP_PROTO, ), - ip_proto, None] + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -335,8 +407,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ip_proto_ipv6_route(self, dp): dl_type = ether.ETH_TYPE_IPV6 ip_proto = inet.IPPROTO_ROUTING - self._verify = [(dp.ofproto.OXM_OF_IP_PROTO, ), - ip_proto, None] + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -346,8 +419,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ip_proto_ipv6_frag(self, dp): dl_type = ether.ETH_TYPE_IPV6 ip_proto = inet.IPPROTO_FRAGMENT - self._verify = [(dp.ofproto.OXM_OF_IP_PROTO, ), - ip_proto, None] + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -357,8 +431,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ip_proto_ipv6_icmp(self, dp): dl_type = ether.ETH_TYPE_IPV6 ip_proto = inet.IPPROTO_ICMPV6 - self._verify = [(dp.ofproto.OXM_OF_IP_PROTO, ), - ip_proto, None] + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -368,8 +443,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ip_proto_ipv6_none(self, dp): dl_type = ether.ETH_TYPE_IPV6 ip_proto = inet.IPPROTO_NONE - self._verify = [(dp.ofproto.OXM_OF_IP_PROTO, ), - ip_proto, None] + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -379,8 +455,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ip_proto_ipv6_dstopts(self, dp): dl_type = ether.ETH_TYPE_IPV6 ip_proto = inet.IPPROTO_DSTOPTS - self._verify = [(dp.ofproto.OXM_OF_IP_PROTO, ), - ip_proto, None] + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -391,9 +468,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IP src = '192.168.196.250' src_int = self.ipv4_to_int(src) - self._verify = [(dp.ofproto.OXM_OF_IPV4_SRC, - dp.ofproto.OXM_OF_IPV4_SRC_W, ), - src_int, None] + + headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] + self._set_verify(headers, src_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -406,9 +483,9 @@ class RunTest(tester.TestFlowBase): src_int = self.ipv4_to_int(src) mask = '255.255.255.255' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_IPV4_SRC, - dp.ofproto.OXM_OF_IPV4_SRC_W, ), - src_int, None] + + headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] + self._set_verify(headers, src_int, mask_int, True, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -421,9 +498,9 @@ class RunTest(tester.TestFlowBase): src_int = self.ipv4_to_int(src) mask = '255.255.255.0' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_IPV4_SRC, - dp.ofproto.OXM_OF_IPV4_SRC_W, ), - src_int & mask_int, mask_int] + + headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] + self._set_verify(headers, src_int, mask_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -436,9 +513,9 @@ class RunTest(tester.TestFlowBase): src_int = self.ipv4_to_int(src) mask = '0.0.0.0' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_IPV4_SRC, - dp.ofproto.OXM_OF_IPV4_SRC_W, ), - None, None] + + headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] + self._set_verify(headers, src_int, mask_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -449,9 +526,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IP dst = '192.168.54.155' dst_int = self.ipv4_to_int(dst) - self._verify = [(dp.ofproto.OXM_OF_IPV4_DST, - dp.ofproto.OXM_OF_IPV4_DST_W, ), - dst_int, None] + + headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] + self._set_verify(headers, dst_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -464,9 +541,9 @@ class RunTest(tester.TestFlowBase): dst_int = self.ipv4_to_int(dst) mask = '255.255.255.255' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_IPV4_DST, - dp.ofproto.OXM_OF_IPV4_DST_W, ), - dst_int, None] + + headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] + self._set_verify(headers, dst_int, mask_int, True, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -479,9 +556,9 @@ class RunTest(tester.TestFlowBase): dst_int = self.ipv4_to_int(dst) mask = '255.255.255.0' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_IPV4_DST, - dp.ofproto.OXM_OF_IPV4_DST_W, ), - dst_int & mask_int, mask_int] + + headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] + self._set_verify(headers, dst_int, mask_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -494,9 +571,9 @@ class RunTest(tester.TestFlowBase): dst_int = self.ipv4_to_int(dst) mask = '0.0.0.0' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_IPV4_DST, - dp.ofproto.OXM_OF_IPV4_DST_W, ), - None, None] + + headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] + self._set_verify(headers, dst_int, mask_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -507,8 +584,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IP ip_proto = inet.IPPROTO_TCP tp_src = 1103 - self._verify = [(dp.ofproto.OXM_OF_TCP_SRC, ), - tp_src, None] + + headers = [dp.ofproto.OXM_OF_TCP_SRC] + self._set_verify(headers, tp_src) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -520,8 +598,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IP ip_proto = inet.IPPROTO_TCP tp_dst = 236 - self._verify = [(dp.ofproto.OXM_OF_TCP_DST, ), - tp_dst, None] + + headers = [dp.ofproto.OXM_OF_TCP_DST] + self._set_verify(headers, tp_dst) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -533,8 +612,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IP ip_proto = inet.IPPROTO_UDP tp_src = 56617 - self._verify = [(dp.ofproto.OXM_OF_UDP_SRC, ), - tp_src, None] + + headers = [dp.ofproto.OXM_OF_UDP_SRC] + self._set_verify(headers, tp_src) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -546,8 +626,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IP ip_proto = inet.IPPROTO_UDP tp_dst = 61278 - self._verify = [(dp.ofproto.OXM_OF_UDP_DST, ), - tp_dst, None] + + headers = [dp.ofproto.OXM_OF_UDP_DST] + self._set_verify(headers, tp_dst) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -559,8 +640,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IP ip_proto = inet.IPPROTO_ICMP icmp_type = 8 - self._verify = [(dp.ofproto.OXM_OF_ICMPV4_TYPE, ), - icmp_type, None] + + headers = [dp.ofproto.OXM_OF_ICMPV4_TYPE] + self._set_verify(headers, icmp_type) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -573,8 +655,9 @@ class RunTest(tester.TestFlowBase): ip_proto = inet.IPPROTO_ICMP icmp_type = 9 icmp_code = 16 - self._verify = [(dp.ofproto.OXM_OF_ICMPV4_CODE, ), - icmp_code, None] + + headers = [dp.ofproto.OXM_OF_ICMPV4_CODE] + self._set_verify(headers, icmp_code) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -586,8 +669,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_arp_opcode(self, dp): dl_type = ether.ETH_TYPE_ARP arp_op = 1 - self._verify = [(dp.ofproto.OXM_OF_ARP_OP, ), - arp_op, None] + + headers = [dp.ofproto.OXM_OF_ARP_OP] + self._set_verify(headers, arp_op) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -598,9 +682,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_ARP nw_src = '192.168.222.57' nw_src_int = self.ipv4_to_int(nw_src) - self._verify = [(dp.ofproto.OXM_OF_ARP_SPA, - dp.ofproto.OXM_OF_ARP_SPA_W, ), - nw_src_int, None] + + headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] + self._set_verify(headers, nw_src_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -613,9 +697,9 @@ class RunTest(tester.TestFlowBase): nw_src_int = self.ipv4_to_int(nw_src) mask = '255.255.255.255' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_SPA, - dp.ofproto.OXM_OF_ARP_SPA_W, ), - nw_src_int, None] + + headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] + self._set_verify(headers, nw_src_int, mask_int, True, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -628,9 +712,9 @@ class RunTest(tester.TestFlowBase): nw_src_int = self.ipv4_to_int(nw_src) mask = '255.255.255.0' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_SPA, - dp.ofproto.OXM_OF_ARP_SPA_W, ), - nw_src_int & mask_int, mask_int] + + headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] + self._set_verify(headers, nw_src_int, mask_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -643,9 +727,9 @@ class RunTest(tester.TestFlowBase): nw_src_int = self.ipv4_to_int(nw_src) mask = '0.0.0.0' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_SPA, - dp.ofproto.OXM_OF_ARP_SPA_W, ), - None, None] + + headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] + self._set_verify(headers, nw_src_int, mask_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -656,9 +740,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_ARP nw_dst = '192.168.198.233' nw_dst_int = self.ipv4_to_int(nw_dst) - self._verify = [(dp.ofproto.OXM_OF_ARP_TPA, - dp.ofproto.OXM_OF_ARP_TPA_W, ), - nw_dst_int, None] + + headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] + self._set_verify(headers, nw_dst_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -671,9 +755,9 @@ class RunTest(tester.TestFlowBase): nw_dst_int = self.ipv4_to_int(nw_dst) mask = '255.255.255.255' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_TPA, - dp.ofproto.OXM_OF_ARP_TPA_W, ), - nw_dst_int, None] + + headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] + self._set_verify(headers, nw_dst_int, mask_int, True, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -686,9 +770,9 @@ class RunTest(tester.TestFlowBase): nw_dst_int = self.ipv4_to_int(nw_dst) mask = '255.255.255.0' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_TPA, - dp.ofproto.OXM_OF_ARP_TPA_W, ), - nw_dst_int & mask_int, mask_int] + + headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] + self._set_verify(headers, nw_dst_int, mask_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -701,9 +785,9 @@ class RunTest(tester.TestFlowBase): nw_dst_int = self.ipv4_to_int(nw_dst) mask = '0.0.0.0' mask_int = self.ipv4_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_TPA, - dp.ofproto.OXM_OF_ARP_TPA_W, ), - None, None] + + headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] + self._set_verify(headers, nw_dst_int, mask_int, type_='ipv4') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -714,9 +798,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_ARP arp_sha = '3e:ec:13:9b:f3:0b' arp_sha_bin = self.haddr_to_bin(arp_sha) - self._verify = [(dp.ofproto.OXM_OF_ARP_SHA, - dp.ofproto.OXM_OF_ARP_SHA_W, ), - arp_sha_bin, None] + + headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] + self._set_verify(headers, arp_sha_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -729,9 +813,9 @@ class RunTest(tester.TestFlowBase): arp_sha_bin = self.haddr_to_bin(arp_sha) mask = 'ff:ff:ff:ff:ff:ff' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_SHA, - dp.ofproto.OXM_OF_ARP_SHA_W, ), - arp_sha_bin, None] + + headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] + self._set_verify(headers, arp_sha_bin, mask_bin, True, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -744,9 +828,9 @@ class RunTest(tester.TestFlowBase): arp_sha_bin = self.haddr_to_bin(arp_sha) mask = 'ff:ff:ff:ff:ff:00' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_SHA, - dp.ofproto.OXM_OF_ARP_SHA_W, ), - arp_sha_bin[:-1] + '\x00', mask_bin] + + headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] + self._set_verify(headers, arp_sha_bin, mask_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -759,9 +843,9 @@ class RunTest(tester.TestFlowBase): arp_sha_bin = self.haddr_to_bin(arp_sha) mask = '00:00:00:00:00:00' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_SHA, - dp.ofproto.OXM_OF_ARP_SHA_W, ), - None, None] + + headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] + self._set_verify(headers, arp_sha_bin, mask_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -772,9 +856,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_ARP arp_tha = '83:6c:21:52:49:68' arp_tha_bin = self.haddr_to_bin(arp_tha) - self._verify = [(dp.ofproto.OXM_OF_ARP_THA, - dp.ofproto.OXM_OF_ARP_THA_W, ), - arp_tha_bin, None] + + headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] + self._set_verify(headers, arp_tha_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -787,9 +871,9 @@ class RunTest(tester.TestFlowBase): arp_tha_bin = self.haddr_to_bin(arp_tha) mask = 'ff:ff:ff:ff:ff:ff' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_THA, - dp.ofproto.OXM_OF_ARP_THA_W, ), - arp_tha_bin, None] + + headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] + self._set_verify(headers, arp_tha_bin, mask_bin, True, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -802,9 +886,9 @@ class RunTest(tester.TestFlowBase): arp_tha_bin = self.haddr_to_bin(arp_tha) mask = 'ff:ff:ff:ff:ff:00' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_THA, - dp.ofproto.OXM_OF_ARP_THA_W, ), - arp_tha_bin[:-1] + '\x00', mask_bin] + + headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] + self._set_verify(headers, arp_tha_bin, mask_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -817,9 +901,9 @@ class RunTest(tester.TestFlowBase): arp_tha_bin = self.haddr_to_bin(arp_tha) mask = '00:00:00:00:00:00' mask_bin = self.haddr_to_bin(mask) - self._verify = [(dp.ofproto.OXM_OF_ARP_THA, - dp.ofproto.OXM_OF_ARP_THA_W, ), - None, None] + + headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] + self._set_verify(headers, arp_tha_bin, mask_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -830,9 +914,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IPV6 ipv6_src = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' ipv6_src_int = self.ipv6_to_int(ipv6_src) - self._verify = [(dp.ofproto.OXM_OF_IPV6_SRC, - dp.ofproto.OXM_OF_IPV6_SRC_W, ), - ipv6_src_int, None] + + headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] + self._set_verify(headers, ipv6_src_int, type_='ipv6') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -845,9 +929,9 @@ class RunTest(tester.TestFlowBase): ipv6_src_int = self.ipv6_to_int(ipv6_src) mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' mask_int = self.ipv6_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_IPV6_SRC, - dp.ofproto.OXM_OF_IPV6_SRC_W, ), - ipv6_src_int, None] + + headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] + self._set_verify(headers, ipv6_src_int, mask_int, True, type_='ipv6') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -860,11 +944,9 @@ class RunTest(tester.TestFlowBase): ipv6_src_int = self.ipv6_to_int(ipv6_src) mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:0' mask_int = self.ipv6_to_int(mask) - ipv6_src_masked = [x & y for (x, y) in - itertools.izip(ipv6_src_int, mask_int)] - self._verify = [(dp.ofproto.OXM_OF_IPV6_SRC, - dp.ofproto.OXM_OF_IPV6_SRC_W, ), - ipv6_src_masked, mask_int] + + headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] + self._set_verify(headers, ipv6_src_int, mask_int, type_='ipv6') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -877,9 +959,9 @@ class RunTest(tester.TestFlowBase): ipv6_src_int = self.ipv6_to_int(ipv6_src) mask = '0:0:0:0:0:0:0:0' mask_int = self.ipv6_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_IPV6_SRC, - dp.ofproto.OXM_OF_IPV6_SRC_W, ), - None, None] + + headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] + self._set_verify(headers, ipv6_src_int, mask_int, type_='ipv6') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -890,9 +972,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IPV6 ipv6_dst = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' ipv6_dst_int = self.ipv6_to_int(ipv6_dst) - self._verify = [(dp.ofproto.OXM_OF_IPV6_DST, - dp.ofproto.OXM_OF_IPV6_DST_W, ), - ipv6_dst_int, None] + + headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] + self._set_verify(headers, ipv6_dst_int, type_='ipv6') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -905,9 +987,9 @@ class RunTest(tester.TestFlowBase): ipv6_dst_int = self.ipv6_to_int(ipv6_dst) mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' mask_int = self.ipv6_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_IPV6_DST, - dp.ofproto.OXM_OF_IPV6_DST_W, ), - ipv6_dst_int, None] + + headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] + self._set_verify(headers, ipv6_dst_int, mask_int, True, type_='ipv6') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -920,11 +1002,9 @@ class RunTest(tester.TestFlowBase): ipv6_dst_int = self.ipv6_to_int(ipv6_dst) mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:0' mask_int = self.ipv6_to_int(mask) - ipv6_dst_masked = [x & y for (x, y) in - itertools.izip(ipv6_dst_int, mask_int)] - self._verify = [(dp.ofproto.OXM_OF_IPV6_DST, - dp.ofproto.OXM_OF_IPV6_DST_W, ), - ipv6_dst_masked, mask_int] + + headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] + self._set_verify(headers, ipv6_dst_int, mask_int, type_='ipv6') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -937,9 +1017,9 @@ class RunTest(tester.TestFlowBase): ipv6_dst_int = self.ipv6_to_int(ipv6_dst) mask = '0:0:0:0:0:0:0:0' mask_int = self.ipv6_to_int(mask) - self._verify = [(dp.ofproto.OXM_OF_IPV6_DST, - dp.ofproto.OXM_OF_IPV6_DST_W, ), - None, None] + + headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] + self._set_verify(headers, ipv6_dst_int, mask_int, type_='ipv6') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -949,9 +1029,10 @@ class RunTest(tester.TestFlowBase): def test_rule_set_ipv6_flabel(self, dp): dl_type = ether.ETH_TYPE_IPV6 ipv6_label = 0xc5384 - self._verify = [(dp.ofproto.OXM_OF_IPV6_FLABEL, - dp.ofproto.OXM_OF_IPV6_FLABEL_W, ), - ipv6_label, None] + + headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, + dp.ofproto.OXM_OF_IPV6_FLABEL_W] + self._set_verify(headers, ipv6_label) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -962,9 +1043,10 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IPV6 ipv6_label = 0xc5384 mask = 0xfffff - self._verify = [(dp.ofproto.OXM_OF_IPV6_FLABEL, - dp.ofproto.OXM_OF_IPV6_FLABEL_W, ), - ipv6_label, None] + + headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, + dp.ofproto.OXM_OF_IPV6_FLABEL_W] + self._set_verify(headers, ipv6_label, mask, True) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -975,9 +1057,10 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IPV6 ipv6_label = 0xc5384 mask = 0xffff0 - self._verify = [(dp.ofproto.OXM_OF_IPV6_FLABEL, - dp.ofproto.OXM_OF_IPV6_FLABEL_W, ), - ipv6_label & mask, mask] + + headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, + dp.ofproto.OXM_OF_IPV6_FLABEL_W] + self._set_verify(headers, ipv6_label, mask) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -988,9 +1071,10 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IPV6 ipv6_label = 0xc5384 mask = 0x0 - self._verify = [(dp.ofproto.OXM_OF_IPV6_FLABEL, - dp.ofproto.OXM_OF_IPV6_FLABEL_W, ), - None, None] + + headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, + dp.ofproto.OXM_OF_IPV6_FLABEL_W] + self._set_verify(headers, ipv6_label, mask) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -1001,8 +1085,9 @@ class RunTest(tester.TestFlowBase): dl_type = ether.ETH_TYPE_IPV6 ip_proto = inet.IPPROTO_ICMPV6 icmp_type = 129 - self._verify = [(dp.ofproto.OXM_OF_ICMPV6_TYPE, ), - icmp_type, None] + + headers = [dp.ofproto.OXM_OF_ICMPV6_TYPE] + self._set_verify(headers, icmp_type) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -1015,8 +1100,9 @@ class RunTest(tester.TestFlowBase): ip_proto = inet.IPPROTO_ICMPV6 icmp_type = 138 icmp_code = 1 - self._verify = [(dp.ofproto.OXM_OF_ICMPV6_CODE, ), - icmp_code, None] + + headers = [dp.ofproto.OXM_OF_ICMPV6_CODE] + self._set_verify(headers, icmp_code) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -1031,8 +1117,9 @@ class RunTest(tester.TestFlowBase): icmp_type = 135 target = "5420:db3f:921b:3e33:2791:98f:dd7f:2e19" target_int = self.ipv6_to_int(target) - self._verify = [(dp.ofproto.OXM_OF_IPV6_ND_TARGET, ), - target_int, None] + + headers = [dp.ofproto.OXM_OF_IPV6_ND_TARGET] + self._set_verify(headers, target_int, type_='ipv6') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -1047,8 +1134,9 @@ class RunTest(tester.TestFlowBase): icmp_type = 135 nd_sll = "93:6d:d0:d4:e8:36" nd_sll_bin = self.haddr_to_bin(nd_sll) - self._verify = [(dp.ofproto.OXM_OF_IPV6_ND_SLL, ), - nd_sll_bin, None] + + headers = [dp.ofproto.OXM_OF_IPV6_ND_SLL] + self._set_verify(headers, nd_sll_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -1063,8 +1151,9 @@ class RunTest(tester.TestFlowBase): icmp_type = 136 nd_tll = "18:f6:66:b6:f1:b3" nd_tll_bin = self.haddr_to_bin(nd_tll) - self._verify = [(dp.ofproto.OXM_OF_IPV6_ND_TLL, ), - nd_tll_bin, None] + + headers = [dp.ofproto.OXM_OF_IPV6_ND_TLL] + self._set_verify(headers, nd_tll_bin, type_='mac') match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -1076,8 +1165,9 @@ class RunTest(tester.TestFlowBase): def test_rule_set_mpls_label(self, dp): dl_type = 0x8847 label = 2144 - self._verify = [(dp.ofproto.OXM_OF_MPLS_LABEL, ), - label, None] + + headers = [dp.ofproto.OXM_OF_MPLS_LABEL] + self._set_verify(headers, label) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) @@ -1087,10 +1177,21 @@ class RunTest(tester.TestFlowBase): def test_rule_set_mpls_tc(self, dp): dl_type = 0x8847 tc = 3 - self._verify = [(dp.ofproto.OXM_OF_MPLS_TC, ), - tc, None] + + headers = [dp.ofproto.OXM_OF_MPLS_TC] + self._set_verify(headers, tc) match = dp.ofproto_parser.OFPMatch() match.set_dl_type(dl_type) match.set_mpls_tc(tc) self.add_matches(dp, match) + + def is_supported(self, t): + unsupported = [ + 'test_rule_set_mpls_tc', + ] + for u in unsupported: + if t.find(u) != -1: + return False + + return True diff --git a/ryu/tests/integrated/test_request_reply_v12.py b/ryu/tests/integrated/test_request_reply_v12.py index dc909722..e907c361 100644 --- a/ryu/tests/integrated/test_request_reply_v12.py +++ b/ryu/tests/integrated/test_request_reply_v12.py @@ -1069,11 +1069,9 @@ class RunTest(tester.TestFlowBase): def is_supported(self, t): unsupported = [ - 'out_port', - 'flow_removed_table_id', ] for u in unsupported: - if t.find(u) > 0: + if t.find(u) != -1: return False return True diff --git a/ryu/tests/integrated/tester.py b/ryu/tests/integrated/tester.py index 5264b78c..11cf49ad 100644 --- a/ryu/tests/integrated/tester.py +++ b/ryu/tests/integrated/tester.py @@ -17,6 +17,7 @@ import sys import logging +import itertools from ryu import utils from ryu.lib import mac @@ -108,11 +109,16 @@ class TestFlowBase(app_manager.RyuApp): dp.send_barrier() if len(self.pending): t = self.pending.pop() - LOG.info(LOG_TEST_START, t) - self.current = t - getattr(self, t)(dp) - dp.send_barrier() - self.send_flow_stats(dp) + if self.is_supported(t): + LOG.info(LOG_TEST_START, t) + self.current = t + getattr(self, t)(dp) + dp.send_barrier() + self.send_flow_stats(dp) + else: + self.results[t] = 'SKIP (unsupported)' + self.unclear -= 1 + self.start_next_test(dp) else: self.print_results() @@ -138,7 +144,7 @@ class TestFlowBase(app_manager.RyuApp): verify_func = self.verify_default v = "verify" + self.current[4:] - if v in dir(self): + if hasattr(self, v): verify_func = getattr(self, v) result = verify_func(dp, msg.body) @@ -163,6 +169,13 @@ class TestFlowBase(app_manager.RyuApp): def haddr_to_bin(self, string): return mac.haddr_to_bin(string) + def haddr_masked(self, haddr_bin, mask_bin): + return mac.haddr_bitand(haddr_bin, mask_bin) + + def ipv4_to_str(self, integre): + ip_list = [str((integre >> (24 - (n * 8)) & 255)) for n in range(4)] + return '.'.join(ip_list) + def ipv4_to_int(self, string): ip = string.split('.') assert len(ip) == 4 @@ -172,7 +185,20 @@ class TestFlowBase(app_manager.RyuApp): i = (i << 8) | b return i + def ipv4_masked(self, ip_int, mask_int): + return ip_int & mask_int + + def ipv6_to_str(self, integres): + return ':'.join(hex(x)[2:] for x in integres) + def ipv6_to_int(self, string): ip = string.split(':') assert len(ip) == 8 return [int(x, 16) for x in ip] + + def ipv6_masked(self, ipv6_int, mask_int): + return [x & y for (x, y) in + itertools.izip(ipv6_int, mask_int)] + + def is_supported(self, t): + return True |