Пример #1
0
def generate_transfer_functions(settings):
    st = time()

    if ("replace_vlans" in settings.keys()):
        has_replaced_vlan = True
    else:
        has_replaced_vlan = False

    if "arp_table_file_sfx" in settings.keys():
        arp_sfx = settings["arp_table_file_sfx"]
    else:
        arp_sfx = "_arp_table.txt"
    if "mac_table_file_sfx" in settings.keys():
        mac_sfx = settings["mac_table_file_sfx"]
    else:
        mac_sfx = "_mac_table.txt"
    if "config_file_sfx" in settings.keys():
        config_sfx = settings["config_file_sfx"]
    else:
        config_sfx = "_config.txt"
    if "spanning_tree_file_sfx" in settings.keys():
        span_sfx = settings["spanning_tree_file_sfx"]
    else:
        span_sfx = "_spanning_tree.txt"
    if "route_table_file_sfx" in settings.keys():
        route_sfx = settings["route_table_file_sfx"]
    else:
        route_sfx = "_route.txt"

    # generate transfer functions
    L = 0
    id = 1
    cs_list = {}
    for i in range(len(settings["rtr_names"])):
        rtr_name = settings["rtr_names"][i]
        cs = cisco_router(id)
        if has_replaced_vlan:
            cs.set_replaced_vlan(settings["replace_vlans"][i])
        if "hs_format" in settings.keys():
            cs.set_hs_format(settings["hs_format"])
        L = cs.hs_format["length"]
        tf = TF(L)
        tf.set_prefix_id(rtr_name)
        cs.read_arp_table_file("%s/%s%s" %
                               (settings["input_path"], rtr_name, arp_sfx))
        cs.read_mac_table_file("%s/%s%s" %
                               (settings["input_path"], rtr_name, mac_sfx))
        cs.read_spanning_tree_file("%s/%s%s"%\
                                   (settings["input_path"],rtr_name,span_sfx))
        cs.read_config_file("%s/%s%s" %
                            (settings["input_path"], rtr_name, config_sfx))
        cs.read_route_file("%s/%s%s" %
                           (settings["input_path"], rtr_name, route_sfx))
        if ("optimize_fwd_table" not in settings.keys() or \
            settings["optimize_fwd_table"]):
            cs.optimize_forwarding_table()
        if ("fwd_table_only" in settings.keys()
                and settings["fwd_table_only"]):
            cs.generate_port_ids_only_for_output_ports()
            cs.generate_fwd_table_tf(tf)
        else:
            cs.generate_port_ids([])
            cs.generate_transfer_function(tf)
        if (not os.path.isdir(settings["output_path"])):
            os.makedirs(settings["output_path"])
        tf.save_as_json("%s/%s.tf.json" % (settings["output_path"], rtr_name))
        tf.save_object_to_file("%s/%s.tf" %
                               (settings["output_path"], rtr_name))
        id += 1
        cs_list[rtr_name] = cs

    #generate port maps
    f = open("%s/port_map.json" % settings["output_path"], 'w')
    port_map = {}
    for rtr in cs_list.keys():
        cs = cs_list[rtr]
        port_map[rtr] = cs.port_to_id
    f.write(json.dumps(port_map))
    f.close()

    #write topology:
    if "topology" in settings.keys():
        print "===Generating Topology==="
        out_port_addition = cisco_router.PORT_TYPE_MULTIPLIER * \
              cisco_router.OUTPUT_PORT_TYPE_CONST
        topology = settings["topology"]
        tf = TF(L)
        for (from_router, from_port, to_router, to_port) in topology:
            from_cs = cs_list[from_router]
            to_cs = cs_list[to_router]
            rule = TF.create_standard_rule(\
                          [from_cs.get_port_id(from_port) + out_port_addition],\
                            None,[to_cs.get_port_id(to_port)],\
                            None, None, "", [])
            tf.add_link_rule(rule)
            rule = TF.create_standard_rule(\
                          [to_cs.get_port_id(to_port) + out_port_addition], \
                            None,[from_cs.get_port_id(from_port)], \
                            None, None, "", [])
            tf.add_link_rule(rule)
        tf.save_as_json("%s/topology.tf.json" % settings["output_path"])
        tf.save_object_to_file("%s/topology.tf" % settings["output_path"])

    en = time()
    print "completed in ", en - st, "seconds"
Пример #2
0
path = sys.argv[1]
out_path = sys.argv[2]
#path = "i2_tfs"
#out_path = "i2_json"

table_id = 0
topo = TF(1)
topo.load_object_from_file("%s/%s.tf" % (path, "backbone_topology"))
topology = {"topology": []}
for rule in topo.rules:
    in_ports = rule["in_ports"]
    out_ports = rule["out_ports"]
    for in_port in in_ports:
        for out_port in out_ports:
            topology["topology"].append({"src": in_port, "dst": out_port})
topo.save_as_json("%s/%s.json" % (path, "topology"))

for rtr in rtr_names:
    tf = TF(1)
    tf.load_object_from_file("%s/%s.tf" % (path, rtr))
    #tf.save_as_json("%s/%s.tf.json"%(path,rtr))
    table_id += 1
    tf_in = {"rules": [], "ports": [], "id": table_id * 10}
    tf_out = {"rules": [], "ports": [], "id": table_id * 10 + 1}
    in_table_out_port = table_id * SWITCH_ID_MULTIPLIER
    out_table_in_port = table_id * SWITCH_ID_MULTIPLIER + PORT_TYPE_MULTIPLIER
    topology["topology"].append({
        "src": in_table_out_port,
        "dst": out_table_in_port
    })
    rtr_ports = set()
Пример #3
0
PORT_TYPE_MULTIPLIER = 10000
SWITCH_ID_MULTIPLIER = 100000
path = "i2_tfs"
out_path = "i2_json_rules"

table_id = 0
topo = TF(1)
topo.load_object_from_file("%s/%s.tf"%(path,"topology"))
topology = {"topology":[]}
for rule in topo.rules:
  in_ports = rule["in_ports"]
  out_ports = rule["out_ports"]
  for in_port in in_ports:
    for out_port in out_ports:
      topology["topology"].append({"src":in_port,"dst":out_port})
topo.save_as_json("%s/%s.json"%(path,"topology"))

for rtr in rtr_names:
  tf = TF(1)
  tf.load_object_from_file("%s/%s.tf"%(path,rtr))
  tf.save_as_json("%s/%s.tf.json"%(path,rtr))
  table_id += 1
  tf_in = {"rules":[], "ports":[], "id":table_id*10}
  tf_out = {"rules":[], "ports":[], "id":table_id*10+1}
  topology["topology"].append({"src":table_id * SWITCH_ID_MULTIPLIER, "dst":table_id * SWITCH_ID_MULTIPLIER + PORT_TYPE_MULTIPLIER})
  rtr_ports = set()
  for rule in tf.rules:
    rule.pop("line")
    rule.pop("file")
    rule.pop("influence_on")
    rule.pop("affected_by")
Пример #4
0
if args.view:
    stage = args.view[0]
    i = 1
    for rule in f.rules:
        if stage == get_stage(rule):
            print i,":",get_openflow_rule(rule,inv_mapf)
        i = i + 1;
if args.rm:
    indices = args.rm[0].split(",")
    indices = [int(i) for i in indices]
    indices.sort(reverse=True)
    for index in indices:
        f.remove_rule(index-1)

if args.add:
    positions = (args.add[0]).split(",")
    rules = (args.add[1]).split(":")
    if len(rules) != len(positions):
        sys.stderr.write("Number of positions and number of rules should be the same")
    for i in range(len(positions)):
        position = int(positions[i])-1
        tokens = rules[i].split(";")
        rule = parse_new_rule_tokens(tokens,mapf_extended,args.rtr_name)
        if rule["mask"] == None:
            f.add_fwd_rule(rule,position)
        elif rule["mask"] != None:
            f.add_rewrite_rule(rule,position)

f.save_object_to_file("%s/%s.tf"%(args.data_path,args.rtr_name))
f.save_as_json("%s/%s.tf.json"%(args.data_path,args.rtr_name))
Пример #5
0
def generate_transfer_functions(settings):
  st = time()
  
  if ("replace_vlans" in settings.keys()):
    has_replaced_vlan = True
  else:
    has_replaced_vlan = False
    
  if "arp_table_file_sfx" in settings.keys():
    arp_sfx = settings["arp_table_file_sfx"]
  else:
    arp_sfx = "_arp_table.txt"
  if "mac_table_file_sfx" in settings.keys():
    mac_sfx = settings["mac_table_file_sfx"]
  else:
    mac_sfx = "_mac_table.txt"
  if "config_file_sfx" in settings.keys():
    config_sfx = settings["config_file_sfx"]
  else:
    config_sfx = "_config.txt"
  if "spanning_tree_file_sfx" in settings.keys():
    span_sfx = settings["spanning_tree_file_sfx"]
  else:
    span_sfx = "_spanning_tree.txt"
  if "route_table_file_sfx" in settings.keys():
    route_sfx = settings["route_table_file_sfx"]
  else:
    route_sfx = "_route.txt"

  # generate transfer functions
  L = 0
  id = 1
  cs_list = {}
  for i in range(len(settings["rtr_names"])):
    rtr_name = settings["rtr_names"][i]
    cs = cisco_router(id)
    if has_replaced_vlan:
      cs.set_replaced_vlan(settings["replace_vlans"][i])
    if "hs_format" in settings.keys():
      cs.set_hs_format(settings["hs_format"])
    L = cs.hs_format["length"]
    tf = TF(L)
    tf.set_prefix_id(rtr_name)
    cs.read_arp_table_file("%s/%s%s"%(settings["input_path"],rtr_name,arp_sfx))
    cs.read_mac_table_file("%s/%s%s"%(settings["input_path"],rtr_name,mac_sfx))
    cs.read_spanning_tree_file("%s/%s%s"%\
                               (settings["input_path"],rtr_name,span_sfx))
    cs.read_config_file("%s/%s%s"%(settings["input_path"],rtr_name,config_sfx))
    cs.read_route_file("%s/%s%s"%(settings["input_path"],rtr_name,route_sfx))
    if ("optimize_fwd_table" not in settings.keys() or \
        settings["optimize_fwd_table"]):
      cs.optimize_forwarding_table()
    if ("fwd_table_only" in settings.keys() and settings["fwd_table_only"]):
      cs.generate_port_ids_only_for_output_ports()
      cs.generate_fwd_table_tf(tf)
    else:
      cs.generate_port_ids([])
      cs.generate_transfer_function(tf)
    tf.save_as_json("%s/%s.tf.json"%(settings["output_path"],rtr_name))
    tf.save_object_to_file("%s/%s.tf"%(settings["output_path"],rtr_name))
    id += 1
    cs_list[rtr_name] = cs
    
  #generate port maps
  f = open("%s/port_map.json"%settings["output_path"],'w')
  port_map = {}
  for rtr in cs_list.keys():
    cs = cs_list[rtr]
    port_map[rtr] = cs.port_to_id
  f.write(json.dumps(port_map))
  f.close()
  
  #write topology:
  if "topology" in settings.keys():
    print "===Generating Topology==="
    out_port_addition = cisco_router.PORT_TYPE_MULTIPLIER * \
          cisco_router.OUTPUT_PORT_TYPE_CONST
    topology = settings["topology"]
    tf = TF(L)
    for (from_router,from_port,to_router,to_port) in topology:
        from_cs = cs_list[from_router]
        to_cs = cs_list[to_router]
        rule = TF.create_standard_rule(\
                      [from_cs.get_port_id(from_port) + out_port_addition],\
                        None,[to_cs.get_port_id(to_port)],\
                        None, None, "", [])
        tf.add_link_rule(rule)
        rule = TF.create_standard_rule(\
                      [to_cs.get_port_id(to_port) + out_port_addition], \
                        None,[from_cs.get_port_id(from_port)], \
                        None, None, "", [])
        tf.add_link_rule(rule)
    tf.save_as_json("%s/topology.tf.json"%settings["output_path"])
    tf.save_object_to_file("%s/topology.tf"%settings["output_path"])
    
  en = time()
  print "completed in ",en - st, "seconds"
Пример #6
0
    stage = args.view[0]
    i = 1
    for rule in f.rules:
        if stage == get_stage(rule):
            print i, ":", get_openflow_rule(rule, inv_mapf)
        i = i + 1
if args.rm:
    indices = args.rm[0].split(",")
    indices = [int(i) for i in indices]
    indices.sort(reverse=True)
    for index in indices:
        f.remove_rule(index - 1)

if args.add:
    positions = (args.add[0]).split(",")
    rules = (args.add[1]).split(":")
    if len(rules) != len(positions):
        sys.stderr.write(
            "Number of positions and number of rules should be the same")
    for i in range(len(positions)):
        position = int(positions[i]) - 1
        tokens = rules[i].split(";")
        rule = parse_new_rule_tokens(tokens, mapf_extended, args.rtr_name)
        if rule["mask"] == None:
            f.add_fwd_rule(rule, position)
        elif rule["mask"] != None:
            f.add_rewrite_rule(rule, position)

f.save_object_to_file("%s/%s.tf" % (args.data_path, args.rtr_name))
f.save_as_json("%s/%s.tf.json" % (args.data_path, args.rtr_name))