def test_single_field_2(): start_new_test() virtual_field("test2", range(0,15), type="integer") m = vdict(test2=14, srcip=ip1) assert (m['vlan_id'] == 14 and m['vlan_total_stages'] == 1 and m['vlan_nbits'] == 4) success()
def test_single_field_2(): start_new_test() virtual_field("test2", range(0, 15), type="integer") m = vdict(test2=14, srcip=ip1) assert (m['vlan_id'] == 14 and m['vlan_total_stages'] == 1 and m['vlan_nbits'] == 4) success()
def test_single_field_1(): start_new_test() virtual_field("test1", range(0, 10), type="integer") m = vdict(test1=4, srcip=ip1) assert m['vlan_id'] == 4 assert m['vlan_total_stages'] == 1 assert m['vlan_nbits'] == 4 success()
def test_single_stage_2(): start_new_test() virtual_field("field11", range(0, 10), type="integer", stage=4) virtual_field("field12", range(0, 5), type="integer", stage=4) m1 = vdict(field11=0, field12=0, srcip=ip2) assert m1['vlan_id'] == 0 and m1['vlan_nbits'] == 7 m2 = vdict(field11=4, field12=3, srcip=ip2) assert m2['vlan_id'] == 27 m3 = vdict(field11=4, srcip=ip2) assert m3['vlan_id'] == 29 m4 = vdict(srcip=ip3) assert not 'vlan_id' in m4 success()
def test_decode(): start_new_test() virtual_field("field11", range(0, 10), type="integer", stage=0) virtual_field("field21", range(0, 10), type="integer", stage=1) virtual_field("field12", range(0, 5), type="integer", stage=0) virtual_field("field22", range(0, 5), type="integer", stage=1) vlan_16bit = 2 + (27 << 7) vals = { 'vlan_id': vlan_16bit & ((1 << 12) - 1), 'vlan_pcp': (vlan_16bit >> 12) & ((1 << 3) - 1) } m = virtual_field.expand(vals) assert 'field11' in m and m['field11'] == 0 assert 'field12' in m and m['field12'] == 2 assert 'field21' in m and m['field21'] == 4 assert 'field22' in m and m['field22'] == 3 vlan_16bit = 2 + (29 << 7) vals = { 'vlan_id': vlan_16bit & ((1 << 12) - 1), 'vlan_pcp': (vlan_16bit >> 12) & ((1 << 3) - 1) } m = virtual_field.expand(vals) assert 'field11' in m and m['field11'] == 0 assert 'field12' in m and m['field12'] == 2 assert 'field21' in m and m['field21'] == 4 assert 'field22' in m and m['field22'] == None success()
def test_multi_stage_3(): start_new_test() virtual_field("field1", range(0,10), type="integer", stage=0) virtual_field("field21", range(0,10), type="integer", stage=1) virtual_field("field22", range(0, 4), type="integer", stage=1) virtual_field("field3", range(0, 5), type="integer", stage=2) m1 = vdict(field21=5, field22=3, srcip=ip1) assert m1['vlan_id'] == 28 << 4 assert m1['vlan_offset'] == 4 assert m1['vlan_nbits'] == 6 assert m1['vlan_total_stages'] == 3 m2 = vdict(field3=4, dstip=ip3) vlan_16bit = 4 << 10 assert m2['vlan_id'] == vlan_16bit & ((1<<12)-1) assert m2['vlan_pcp'] == vlan_16bit >> 12 assert m2['vlan_offset'] == 10 assert m2['vlan_nbits'] == 3 success()
def test_multi_stage_2(): start_new_test() virtual_field("field11", range(0,10), type="integer", stage=0) virtual_field("field21", range(0,10), type="integer", stage=1) virtual_field("field12", range(0, 5), type="integer", stage=0) virtual_field("field22", range(0, 5), type="integer", stage=1) m1 = vdict(field11=0, field12=0, srcip=ip1) assert m1['vlan_total_stages'] == 2 assert m1['vlan_id'] == 0 assert m1['vlan_offset'] == 0 assert m1['vlan_nbits'] == 7 m2 = vdict(field21=4, field22=3, dstip=ip3) assert m2['vlan_total_stages'] == 2 assert m2['vlan_offset'] == 7 assert m2['vlan_nbits'] == 7 assert m2['vlan_id'] == (27 << 7) & ((1<<12)-1) # least 12 bits assert m2['vlan_pcp'] == ((27 << 7) >> 12) & ((1<<3)-1) # highest 3 bits success()
def test_multi_stage_3(): start_new_test() virtual_field("field1", range(0, 10), type="integer", stage=0) virtual_field("field21", range(0, 10), type="integer", stage=1) virtual_field("field22", range(0, 4), type="integer", stage=1) virtual_field("field3", range(0, 5), type="integer", stage=2) m1 = vdict(field21=5, field22=3, srcip=ip1) assert m1['vlan_id'] == 28 << 4 assert m1['vlan_offset'] == 4 assert m1['vlan_nbits'] == 6 assert m1['vlan_total_stages'] == 3 m2 = vdict(field3=4, dstip=ip3) vlan_16bit = 4 << 10 assert m2['vlan_id'] == vlan_16bit & ((1 << 12) - 1) assert m2['vlan_pcp'] == vlan_16bit >> 12 assert m2['vlan_offset'] == 10 assert m2['vlan_nbits'] == 3 success()
def test_multi_stage_2(): start_new_test() virtual_field("field11", range(0, 10), type="integer", stage=0) virtual_field("field21", range(0, 10), type="integer", stage=1) virtual_field("field12", range(0, 5), type="integer", stage=0) virtual_field("field22", range(0, 5), type="integer", stage=1) m1 = vdict(field11=0, field12=0, srcip=ip1) assert m1['vlan_total_stages'] == 2 assert m1['vlan_id'] == 0 assert m1['vlan_offset'] == 0 assert m1['vlan_nbits'] == 7 m2 = vdict(field21=4, field22=3, dstip=ip3) assert m2['vlan_total_stages'] == 2 assert m2['vlan_offset'] == 7 assert m2['vlan_nbits'] == 7 assert m2['vlan_id'] == (27 << 7) & ((1 << 12) - 1) # least 12 bits assert m2['vlan_pcp'] == ((27 << 7) >> 12) & ( (1 << 3) - 1) # highest 3 bits success()
def test_multi_stage_1(): start_new_test() virtual_field("field11", range(0,10), type="integer", stage=0) virtual_field("field12", range(0, 5), type="integer", stage=0) virtual_field("field2", range(0, 15), type="integer", stage=1) m1 = vdict(field11=4, field12=3, srcip=ip1) assert (m1['vlan_total_stages'] == 2 and m1['vlan_id'] == 27 and m1['vlan_offset'] == 0 and m1['vlan_nbits'] == 7) m2 = vdict(field2=2, dstip=ip3) assert m2['vlan_total_stages'] == 2 assert m2['vlan_offset'] == 7 assert m2['vlan_nbits'] == 4 assert m2['vlan_id'] == 2 << 7 success()
def test_multi_stage_1(): start_new_test() virtual_field("field11", range(0, 10), type="integer", stage=0) virtual_field("field12", range(0, 5), type="integer", stage=0) virtual_field("field2", range(0, 15), type="integer", stage=1) m1 = vdict(field11=4, field12=3, srcip=ip1) assert (m1['vlan_total_stages'] == 2 and m1['vlan_id'] == 27 and m1['vlan_offset'] == 0 and m1['vlan_nbits'] == 7) m2 = vdict(field2=2, dstip=ip3) assert m2['vlan_total_stages'] == 2 assert m2['vlan_offset'] == 7 assert m2['vlan_nbits'] == 4 assert m2['vlan_id'] == 2 << 7 success()
def test_decode(): start_new_test() virtual_field("field11", range(0,10), type="integer", stage=0) virtual_field("field21", range(0,10), type="integer", stage=1) virtual_field("field12", range(0, 5), type="integer", stage=0) virtual_field("field22", range(0, 5), type="integer", stage=1) vlan_16bit = 2 + (27 << 7) vals = {'vlan_id': vlan_16bit & ((1<<12)-1), 'vlan_pcp': (vlan_16bit >> 12) & ((1<<3)-1)} m = virtual_field.expand(vals) assert 'field11' in m and m['field11'] == 0 assert 'field12' in m and m['field12'] == 2 assert 'field21' in m and m['field21'] == 4 assert 'field22' in m and m['field22'] == 3 vlan_16bit = 2 + (29 << 7) vals = {'vlan_id': vlan_16bit & ((1<<12)-1), 'vlan_pcp': (vlan_16bit >> 12) & ((1<<3)-1)} m = virtual_field.expand(vals) assert 'field11' in m and m['field11'] == 0 assert 'field12' in m and m['field12'] == 2 assert 'field21' in m and m['field21'] == 4 assert 'field22' in m and m['field22'] == None success()
def test_single_field_3(): start_new_test() virtual_field("test3", range(0, 16), type="integer") m = vdict(test3=4, srcip=ip1) assert m['vlan_id'] == 4 and m['vlan_nbits'] == 5 success()
def test_single_field_3(): start_new_test() virtual_field("test3", range(0,16), type="integer") m = vdict(test3=4, srcip=ip1) assert m['vlan_id'] == 4 and m['vlan_nbits'] == 5 success()
from pyretic.lib.std import * from pyretic.modules.mac_learner import * from pyretic.modules.hub import * from pyretic.modules.hub import * from pyretic.examples.dpi import dpi from pyretic.core.runtime import virtual_field from pyretic.core.language import egress_network, ingress_network virtual_field(name="acl", values=["permit", "deny", "inspect"], type="string") def main(): firewall_policy = ( (match(srcip=IPAddr("10.0.0.1")) >> modify(acl="permit")) + (match(srcip=IPAddr("10.0.0.3")) >> modify(acl="inspect")) + (match(srcip=IPAddr("10.0.0.2")) >> modify(acl="deny"))) routing_policy = ((match(acl="inspect") >> (dpi() + hub)) + (match(acl="deny") >> drop) + (match(acl="permit") >> hub)) return firewall_policy >> routing_policy
out_table_pol) setup_tfs_data_from_policy(hs_format, pol, sw_ports, net_links) portids = get_portid_map(sw_ports) edge_ports = get_hsa_edge_ports(sw_ports, net_links) for (sw,ports) in edge_ports.iteritems(): for p in ports: for outm in outmatches_list: print '*****' print "Testing reachability from sw %d p %d to %s" % ( sw,p,str(outm)) print get_reachable_inheaders(hs_format, portids, sw_ports, sw, p, outm, no_vlan=True) def hsa_path_test_0(): hsa_path_test(0, sample_in_table_policy_0(), sample_out_table_policy_0(), sample_outmatches_0()) def hsa_path_test_5(): hsa_path_test('5.1', sample_in_table_policy_5(), sample_out_table_policy_5(), sample_outmatches_5()) if __name__ == "__main__": logging.basicConfig() basic_test() virtual_field(name="test_tag", values=range(0, 10), type="integer") hsa_path_test_0() hsa_path_test_5()
from pyretic.lib.std import * from pyretic.modules.mac_learner import * from pyretic.modules.hub import * from pyretic.modules.hub import * from pyretic.examples.dpi import dpi from pyretic.core.runtime import virtual_field from pyretic.core.language import egress_network, ingress_network virtual_field(name="acl",values=["permit","deny","inspect"],type="string") def main(): firewall_policy = ( (match(srcip=IPAddr("10.0.1.1")) >> modify(acl="permit")) + (match(srcip=IPAddr("10.0.2.1")) >> modify(acl="inspect")) + (match(srcip=IPAddr("10.0.0.2")) >> modify(acl="deny"))) routing_policy = ( (match(acl="inspect") >> (dpi() + hub)) + (match(acl="deny") >> drop) + (match(acl="permit") >> hub)) return firewall_policy >> routing_policy