if __name__ == '__main__':
    object_L = []  # keeps track of objects, so we can kill their threads

    # create network nodes
    client = network.Host(1)
    object_L.append(client)
    server = network.Host(2)
    object_L.append(server)
    router_a = network.Router(name='A',
                              intf_count=1,
                              max_queue_size=router_queue_size)
    object_L.append(router_a)

    # create a Link Layer to keep track of links between network nodes
    link_layer = link.LinkLayer()
    object_L.append(link_layer)

    # add all the links
    # link parameters: from_node, from_intf_num, to_node, to_intf_num, mtu
    link_layer.add_link(link.Link(client, 0, router_a, 0, 50))
    link_layer.add_link(link.Link(router_a, 0, server, 0, 50))

    # start all the objects
    thread_L = [
        threading.Thread(name=object.__str__(), target=object.run)
        for object in object_L
    ]
    for t in thread_L:
        t.start()
if __name__ == '__main__':
    object_L = []  #keeps track of objects, so we can kill their threads

    #create network nodes
    #part 3, add hosts, etc. (and make sure to start the threads)
    client = network_1.Host(1)  #client has address 1
    object_L.append(client)
    server = network_1.Host(2)  #server has address 2
    object_L.append(server)
    router_a = network_1.Router(name='A',
                                intf_count=1,
                                max_queue_size=router_queue_size)
    object_L.append(router_a)

    #create a Link Layer to keep track of links between network nodes
    link_layer = link_1.LinkLayer()
    object_L.append(link_layer)

    #add all the links
    #client is output, router_a is input, 50 is largest size a packet can be to be transferred over a link
    link_layer.add_link(link_1.Link(client, 0, router_a, 0, 50))
    link_layer.add_link(link_1.Link(router_a, 0, server, 0,
                                    50))  #for part 2, change mtu to 30

    #start all the objects
    thread_L = []
    thread_L.append(threading.Thread(name=client.__str__(), target=client.run))
    thread_L.append(threading.Thread(name=server.__str__(), target=server.run))
    thread_L.append(
        threading.Thread(name=router_a.__str__(), target=router_a.run))