예제 #1
0
def add_internet(ntf,ttf,port_map,cs,campus_ip_list):
    '''
    Campus IP list is a list of (ip address,subnet mask) for each IP subnet on campus
    '''
    s = TF(cs.HS_FORMAT()["length"]*2)
    s.set_prefix_id("internet")
    for entry in campus_ip_list:
        match = byte_array_get_all_x(cs.HS_FORMAT()["length"]*2)
        cs.set_field(match,'ip_dst',dotted_ip_to_int(entry[0]),32-entry[1])
        rule = TF.create_standard_rule([0], match, [0], None, None, "", [])
        s.add_fwd_rule(rule)
    ntf.append_tf(s)

    bbra_internet_port1 = port_map["bbra_rtr"]["te1/1"]
    bbra_internet_port2 = port_map["bbra_rtr"]["te7/4"]
    bbrb_internet_port1 = port_map["bbrb_rtr"]["te1/4"]
    bbrb_internet_port2 = port_map["bbrb_rtr"]["te7/3"]
    rule = TF.create_standard_rule([bbra_internet_port1], None,[0], None, None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([bbra_internet_port2], None,[0], None, None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([bbrb_internet_port1], None,[0], None, None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([bbrb_internet_port2], None,[0], None, None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([0], None,[bbra_internet_port1], None, None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([0], None,[bbra_internet_port2], None, None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([0], None,[bbrb_internet_port1], None, None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([0], None,[bbrb_internet_port2], None, None, "", [])
    ttf.add_link_rule(rule)
예제 #2
0
 def __add_action_to_rule(self, action, rule, rtr):
     #print "Action:", action, " Rule: ",rule
     mask = wildcard_create_bit_repeat(self.format["length"], 2)
     rewrite = wildcard_create_bit_repeat(self.format["length"], 1)
     out_ports = []
     rw = False
     push = False
     pop = False
     for operation in action.keys():
         if operation == "set_nw_src" or operation == "set_nw_dst":
             rw = True
             set_header_field(self.format, mask, operation[4:], 0, 0)
             set_header_field(self.format, rewrite, operation[4:],
                              dotted_ip_to_int(action[operation]), 0)
         elif operation == "set_dl_src" or operation == "set_dl_dst":
             rw = True
             set_header_field(self.format, mask, operation[4:], 0, 0)
             set_header_field(self.format, rewrite, operation[4:],
                              mac_to_int(action[operation]), 0)
         elif operation == "output":
             '''
             if action[operation] in self.port_members:
               out_ports = self.__encode_port_list(self.port_members[action[operation]],rtr)
             else:
             '''
             if action[operation].startswith("mport"):
                 out_ports = self.__expand_mport(rtr, action[operation])
             else:
                 out_ports = [action[operation]]
             out_ports = self.__compress_port_list(out_ports)
             out_ports = self.__encode_port_list(out_ports, rtr)
         elif operation == "push_ip":
             push = True
             rule["encap_pos"] = self.format["nw_src_pos"]
             rule["encap_len"] = 8
         elif operation == "pop_ip":
             pop = True
             rule["decap_pos"] = self.format["nw_src_pos"]
             rule["decap_len"] = 8
     rule["out_ports"] = out_ports
     if push:
         rule["action"] = "encap"
         rule["mask"] = mask
         rule["rewrite"] = rewrite
     elif pop:
         rule["action"] = "decap"
         rule["mask"] = None
         rule["rewrite"] = None
     elif rw:
         rule["action"] = "rw"
         rule["mask"] = mask
         rule["rewrite"] = rewrite
     else:
         rule["action"] = "fwd"
         rule["mask"] = None
         rule["rewrite"] = None
예제 #3
0
 def __add_action_to_rule(self,action,rule,rtr):
   #print "Action:", action, " Rule: ",rule
   mask = wildcard_create_bit_repeat(self.format["length"],2)
   rewrite = wildcard_create_bit_repeat(self.format["length"],1)
   out_ports = []
   rw = False
   push = False
   pop = False
   for operation in action.keys():
     if operation == "set_nw_src" or operation == "set_nw_dst":
       rw = True
       set_header_field(self.format, mask, operation[4:], 0, 0)
       set_header_field(self.format, rewrite, operation[4:], dotted_ip_to_int(action[operation]), 0)
     elif operation == "set_dl_src" or operation == "set_dl_dst":
       rw = True
       set_header_field(self.format, mask, operation[4:], 0, 0)
       set_header_field(self.format, rewrite, operation[4:], mac_to_int(action[operation]), 0)
     elif operation == "output":
       '''
       if action[operation] in self.port_members:
         out_ports = self.__encode_port_list(self.port_members[action[operation]],rtr)
       else:
       '''
       if action[operation].startswith("mport"):
         out_ports = self.__expand_mport(rtr, action[operation])
       else:
         out_ports = [action[operation]]
       out_ports = self.__compress_port_list(out_ports)
       out_ports = self.__encode_port_list(out_ports, rtr)
     elif operation == "push_ip":
       push = True
       rule["encap_pos"] = self.format["nw_src_pos"]
       rule["encap_len"] = 8
     elif operation == "pop_ip":
       pop = True
       rule["decap_pos"] = self.format["nw_src_pos"]
       rule["decap_len"] = 8
   rule["out_ports"] = out_ports
   if push:
     rule["action"] = "encap"
     rule["mask"] = mask
     rule["rewrite"] = rewrite
   elif pop:
     rule["action"] = "decap"
     rule["mask"] = None
     rule["rewrite"] = None
   elif rw:
     rule["action"] = "rw"
     rule["mask"] = mask
     rule["rewrite"] = rewrite
   else:
     rule["action"] = "fwd"
     rule["mask"] = None
     rule["rewrite"] = None
예제 #4
0
def add_internet(ntf, ttf, port_map, cs, campus_ip_list):
    '''
    Campus IP list is a list of (ip address,subnet mask) for each IP subnet on campus
    '''
    s = TF(cs.HS_FORMAT()["length"] * 2)
    s.set_prefix_id("internet")
    for entry in campus_ip_list:
        match = byte_array_get_all_x(cs.HS_FORMAT()["length"] * 2)
        cs.set_field(match, 'ip_dst', dotted_ip_to_int(entry[0]),
                     32 - entry[1])
        rule = TF.create_standard_rule([0], match, [0], None, None, "", [])
        s.add_fwd_rule(rule)
    ntf.append_tf(s)

    bbra_internet_port1 = port_map["bbra_rtr"]["te1/1"]
    bbra_internet_port2 = port_map["bbra_rtr"]["te7/4"]
    bbrb_internet_port1 = port_map["bbrb_rtr"]["te1/4"]
    bbrb_internet_port2 = port_map["bbrb_rtr"]["te7/3"]
    rule = TF.create_standard_rule([bbra_internet_port1], None, [0], None,
                                   None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([bbra_internet_port2], None, [0], None,
                                   None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([bbrb_internet_port1], None, [0], None,
                                   None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([bbrb_internet_port2], None, [0], None,
                                   None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([0], None, [bbra_internet_port1], None,
                                   None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([0], None, [bbra_internet_port2], None,
                                   None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([0], None, [bbrb_internet_port1], None,
                                   None, "", [])
    ttf.add_link_rule(rule)
    rule = TF.create_standard_rule([0], None, [bbrb_internet_port2], None,
                                   None, "", [])
    ttf.add_link_rule(rule)