def load_stanford_backbone_ntf():
    '''
    Loads Stanford backbone network transfer functions into an emulated_tf object with 3 layers.
    '''
    emul_tf = emulated_tf(3)
    emul_tf.set_fwd_engine_stage(1)
    for rtr_name in rtr_names:
        f = TF(1)
        f.load_object_from_file("tf_stanford_backbone/%s.tf" % rtr_name)
        f.activate_hash_table([15, 14])
        emul_tf.append_tf(f)
    emul_tf.length = f.length
    return emul_tf
def load_stanford_backbone_ntf():
    '''
    Loads Stanford backbone network transfer functions into an emulated_tf object with 3 layers.
    '''
    emul_tf = emulated_tf(3)
    emul_tf.set_fwd_engine_stage(1)
    for rtr_name in rtr_names:
        f = TF(1)
        f.load_object_from_file("tf_stanford_backbone/%s.tf"%rtr_name)
        f.activate_hash_table([15,14])
        emul_tf.append_tf(f)
    emul_tf.length = f.length
    return emul_tf
def load_stanford_ip_fwd_ntf():
    '''
    Loads IP forwarding part of Stanford backbone network transfer functions into an emulated_tf object with 1 layer.
    '''
    emul_tf = emulated_tf(1)
    emul_tf.set_fwd_engine_stage(0)
    emul_tf.output_port_const = 0
    for rtr_name in rtr_names:
        f = TF(1)
        f.load_object_from_file("tf_simple_stanford_backbone/%s.tf" % rtr_name)
        #f.activate_hash_table([3,2])
        emul_tf.append_tf(f)
    emul_tf.length = f.length
    return emul_tf
def load_stanford_ip_fwd_ntf():
    '''
    Loads IP forwarding part of Stanford backbone network transfer functions into an emulated_tf object with 1 layer.
    '''
    emul_tf = emulated_tf(1)
    emul_tf.set_fwd_engine_stage(0)
    emul_tf.output_port_const = 0
    for rtr_name in rtr_names:
        f = TF(1)
        f.load_object_from_file("tf_simple_stanford_backbone/%s.tf"%rtr_name)
        #f.activate_hash_table([3,2])
        emul_tf.append_tf(f)
    emul_tf.length = f.length
    return emul_tf
def load_replicated_stanford_network(replicate, path):
    '''
    Load the transfer functions created by generate_augmented_stanford_backbone_tf.py
    '''
    ttf = TF(1)
    ttf.load_object_from_file("%s/backbone_topology.tf" % path)
    (name_to_id, id_to_name) = load_port_to_id_map(path)
    emul_tf = emulated_tf(3)
    for i in range(replicate):
        for rtr_name in rtr_names:
            f = TF(1)
            f.load_object_from_file("%s/%s%d.tf" % (path, rtr_name, i + 1))
            #f.activate_hash_table([15,14])
            emul_tf.append_tf(f)
    f = TF(1)
    f.load_object_from_file("%s/root.tf" % (path))
    f.activate_hash_table([15, 14])
    emul_tf.append_tf(f)
    return (emul_tf, ttf, name_to_id, id_to_name)
def load_replicated_stanford_network(replicate,path):
    '''
    Load the transfer functions created by generate_augmented_stanford_backbone_tf.py
    '''
    ttf = TF(1)
    ttf.load_object_from_file("%s/backbone_topology.tf"%path)
    (name_to_id,id_to_name) = load_port_to_id_map(path)
    emul_tf = emulated_tf(3)
    for i in range(replicate):
        for rtr_name in rtr_names:
            f = TF(1)
            f.load_object_from_file("%s/%s%d.tf"%(path,rtr_name,i+1))
            #f.activate_hash_table([15,14])
            emul_tf.append_tf(f)
    f = TF(1)
    f.load_object_from_file("%s/root.tf"%(path))
    f.activate_hash_table([15,14])
    emul_tf.append_tf(f)
    return (emul_tf,ttf,name_to_id,id_to_name)
def load_internet2_backbone_ntf():
    emul_tf = emulated_tf(2, False)
#    i = 0

#    for rtr_name in rtr_names:
#        f = TF(1)
#        f.load_object_from_file("Internet2/%s.tf"%rtr_name)
#        f.activate_hash_table([15,14])
#        emul_tf.append_tf(f)
#        i = i+1

    pool = Pool()
    result = pool.map_async(load_ntf, rtr_names)

    # Close
    pool.close()
    pool.join()

    tfs = result.get()

    for tf in tfs:
        emul_tf.append_tf(tf)

    return emul_tf
def load_internet2_backbone_ntf():
    emul_tf = emulated_tf(2, False)
    #    i = 0

    #    for rtr_name in rtr_names:
    #        f = TF(1)
    #        f.load_object_from_file("Internet2/%s.tf"%rtr_name)
    #        f.activate_hash_table([15,14])
    #        emul_tf.append_tf(f)
    #        i = i+1

    pool = Pool()
    result = pool.map_async(load_ntf, rtr_names)

    # Close
    pool.close()
    pool.join()

    tfs = result.get()

    for tf in tfs:
        emul_tf.append_tf(tf)

    return emul_tf