def test_convert_flow1(self): """ Test converting OFPFlowMod and OFPFlowStats from ovs """ expected_insts = Instructions() expected_insts.apply_actions.append("POP_VLAN", None) expected_insts.apply_actions.append("SET_FIELD", ("ETH_DST", 0x101010101010)) expected_insts.apply_actions.append("OUTPUT", 7) expected_insts.goto_table = 4 expected = Rule(priority=789, cookie=0xABCD, table=3, match=Match([("ETH_TYPE", 0x0800, None), ("IPV4_SRC", 1, None), ("VLAN_VID", 0x1100, None)]), instructions=expected_insts) handcrafted = ( "priority=789 cookie=0xABCD table=3 eth_type=0x800,ip_src=0.0.0.1,vlan_vid=0x1100 actions=pop_vlan,set_field:10:10:10:10:10:10->eth_dst,output:7,goto_table:4" ) # After going in and out of OVS, ovs-ofctl -O OpenFlowXX dumpflows br0 ofctl10 = " cookie=0xabcd, duration=30.907s, table=3, n_packets=0, n_bytes=0, priority=789,ip,dl_vlan=256,nw_src=0.0.0.1 actions=strip_vlan,mod_dl_dst:10:10:10:10:10:10,output:7,resubmit(,4)" ofctl13 = " cookie=0xabcd, duration=24.104s, table=3, n_packets=0, n_bytes=0, priority=789,ip,dl_vlan=256,nw_src=0.0.0.1 actions=pop_vlan,set_field:10:10:10:10:10:10->eth_dst,output:7,goto_table:4" ofctl13_nostats = " cookie=0xabcd, table=3, priority=789,ip,dl_vlan=256,nw_src=0.0.0.1 actions=pop_vlan,set_field:10:10:10:10:10:10->eth_dst,output:7,goto_table:4" ofctl15 = " cookie=0xabcd, duration=28.969s, table=3, n_packets=0, n_bytes=0, idle_age=28, priority=789,ip,dl_vlan=256,nw_src=0.0.0.1 actions=pop_vlan,set_field:10:10:10:10:10:10->eth_dst,output:7,goto_table:4" # From ovs-appctl bridge/dumpflows appctl = "table_id=3, duration=51s, n_packets=0, n_bytes=0, priority=789,ip,dl_vlan=256,nw_src=0.0.0.1,actions=pop_vlan,set_field:10:10:10:10:10:10->eth_dst,output:7,goto_table:4" rule_hand = rule_from_ovs(handcrafted, {}) rule_10 = rule_from_ovs(ofctl10, {}) rule_13 = rule_from_ovs(ofctl13, {}) rule_13nostats = rule_from_ovs(ofctl13_nostats, {}) rule_15 = rule_from_ovs(ofctl15, {}) rule_appctl = rule_from_ovs(appctl, {}) self.assertEqual(rule_hand, expected) self.assertEqual(rule_10, expected) self.assertEqual(rule_13, expected) self.assertEqual(rule_13nostats, expected) self.assertEqual(rule_15, expected) # appctl output doesn't display cookies expected.cookie = None self.assertEqual(rule_appctl, expected)
def test_convert_flow2(self): """ Test converting OFPFlowMod and OFPFlowStats from ovs """ match = Match([("IPV4_SRC", 1, None), ("ETH_TYPE", 0x800, None), ("VLAN_VID", 0x1100, None)]) instructions = Instructions() instructions.goto_table = 9 instructions.clear_actions = True instructions.write_actions.append("POP_VLAN", None) instructions.write_actions.append("SET_FIELD", ("ETH_DST", 0x101010101010)) instructions.write_actions.append("OUTPUT", 7) instructions.write_metadata = (0x99, 0xff) expected = Rule(priority=0x8000, cookie=0xABCD, table=0, match=match, instructions=instructions) # Now for write actions and clear actions etc. # Note priority=0x8000 is the default priority and ovs omits it, # Similarly table 0 is often omitted handcrafted = ( "priority=0x8000 cookie=0xABCD table=0 eth_type=0x800,ip_src=0.0.0.1,vlan_vid=0x1100 actions=clear_actions,write_actions(pop_vlan,set_field:10:10:10:10:10:10->eth_dst,output:7),write_metadata:0x99/0xff,goto_table:9" ) ofctl11 = " cookie=0xabcd, duration=10.778s, table=0, n_packets=0, n_bytes=0, ip,dl_vlan=256,nw_src=0.0.0.1 actions=clear_actions,write_actions(pop_vlan,mod_dl_dst:10:10:10:10:10:10,output:7),write_metadata:0x99/0xff,goto_table:9" # Also the same for of12 to of15 ofctl13 = " cookie=0xabcd, duration=24.097s, table=0, n_packets=0, n_bytes=0, ip,dl_vlan=256,nw_src=0.0.0.1 actions=clear_actions,write_actions(pop_vlan,set_field:10:10:10:10:10:10->eth_dst,output:7),write_metadata:0x99/0xff,goto_table:9" # From ovs-appctl bridge/dumpflows appctl = "duration=369s, n_packets=0, n_bytes=0, ip,dl_vlan=256,nw_src=0.0.0.1,actions=clear_actions,write_actions(pop_vlan,set_field:10:10:10:10:10:10->eth_dst,output:7),write_metadata:0x99/0xff,goto_table:9" rule_hand = rule_from_ovs(handcrafted, {}) rule_11 = rule_from_ovs(ofctl11, {}) rule_13 = rule_from_ovs(ofctl13, {}) rule_appctl = rule_from_ovs(appctl, {}) self.assertEqual(rule_hand, expected) self.assertEqual(rule_11, expected) self.assertEqual(rule_13, expected) # appctl output doesn't display cookies expected.cookie = None self.assertEqual(rule_appctl, expected)