Exemple #1
0
def make_TTF(num_mbox):
    TTF = TF(format["length"]*2)
    rule = {}
    rule["in_ports"] = [0]
    rule["out_ports"] = [1]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [1]
    rule["out_ports"] = [0]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [2]
    rule["out_ports"] = [3]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [3]
    rule["out_ports"] = [2]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [5]
    rule["out_ports"] = [4]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [4]
    rule["out_ports"] = [5]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [6]
    rule["out_ports"] = [7]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [7]
    rule["out_ports"] = [6]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [8]
    rule["out_ports"] = [9]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [9]
    rule["out_ports"] = [8]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [10]
    rule["out_ports"] = [11]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [11]
    rule["out_ports"] = [10]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [12]
    rule["out_ports"] = [13]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [13]
    rule["out_ports"] = [12]
    TTF.add_link_rule(rule)
    for i in range(num_mbox):
        rule["in_ports"] = [14 + i*4]
        rule["out_ports"] = [15 + i*4]
        TTF.add_link_rule(rule)
        rule["in_ports"] = [15 + i*4]
        rule["out_ports"] = [14 + i*4]
        TTF.add_link_rule(rule)
        rule["in_ports"] = [16 + i*4]
        rule["out_ports"] = [17 + i*4]
        TTF.add_link_rule(rule)
        rule["in_ports"] = [17 + i*4]
        rule["out_ports"] = [16 + i*4]
        TTF.add_link_rule(rule)
        
    return TTF
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"
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"
Exemple #4
0
def make_TTF(num_mbox):
    TTF = TF(format["length"]*2)
    rule = {}
    rule["in_ports"] = [0]
    rule["out_ports"] = [1]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [1]
    rule["out_ports"] = [0]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [2]
    rule["out_ports"] = [3]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [3]
    rule["out_ports"] = [2]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [5]
    rule["out_ports"] = [4]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [4]
    rule["out_ports"] = [5]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [6]
    rule["out_ports"] = [7]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [7]
    rule["out_ports"] = [6]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [8]
    rule["out_ports"] = [9]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [9]
    rule["out_ports"] = [8]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [10]
    rule["out_ports"] = [11]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [11]
    rule["out_ports"] = [10]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [12]
    rule["out_ports"] = [13]
    TTF.add_link_rule(rule)
    rule["in_ports"] = [13]
    rule["out_ports"] = [12]
    TTF.add_link_rule(rule)
    for i in range(num_mbox):
        rule["in_ports"] = [14 + i*4]
        rule["out_ports"] = [15 + i*4]
        TTF.add_link_rule(rule)
        rule["in_ports"] = [15 + i*4]
        rule["out_ports"] = [14 + i*4]
        TTF.add_link_rule(rule)
        rule["in_ports"] = [16 + i*4]
        rule["out_ports"] = [17 + i*4]
        TTF.add_link_rule(rule)
        rule["in_ports"] = [17 + i*4]
        rule["out_ports"] = [16 + i*4]
        TTF.add_link_rule(rule)
        
    return TTF