Beispiel #1
0
def network_alt(env):
    simpynet.PointToPoint.unique_number=0
    simpynet.Switch.unique_number=0
    h0 = simpynet.Host(env , simpynet.Mac("00.00.00.00.00") , simpynet.IP("192.0.0.0"))
    h1 = simpynet.Host(env , simpynet.Mac("00.00.00.00.01") , simpynet.IP("192.0.0.1"))

    link0 = simpynet.PointToPoint(env, lambda x,y:PROPAGATION_DELAY, lambda src,trg,l: TRANSMISSION_DELAY)
    link1 = simpynet.PointToPoint(env, lambda x,y:PROPAGATION_DELAY, lambda src,trg,l: TRANSMISSION_DELAY)

    switch = simpynet.Switch( env, lambda x, y : PROCESSING_DELAY )

    simpynet.physical.plug(link0,h0)
    simpynet.physical.plug(link0,switch)
    simpynet.physical.plug(link1,switch)
    simpynet.physical.plug(link1,h1)

    env.add_collector_functions( 'received_frames', switch.collector_receivedframes , TIME_INCREMENT )
    env.add_collector_functions( 'sent_frames', switch.collector_sentframes , TIME_INCREMENT )

    protocol0 = selective_repeat.Selective_Repeat( env, 10 )
    protocol0.timeout_time = 30
    protocol1 = selective_repeat.Selective_Repeat( env, 10 )
    protocol1.timeout_time = 30
    protocol0.add_handler( h0.add_transport_handler( protocol0.get_handler() ) )
    protocol1.add_handler( h1.add_transport_handler( protocol1.get_handler() ) )
    protocol0.send( NUMBER_OF_PACKETS , simpynet.IP("192.0.0.1") )
Beispiel #2
0
def network(env):
    simpynet.PointToPoint.unique_number=0
    simpynet.Switch.unique_number=0
    h0 = simpynet.Host(env , simpynet.Mac("00.00.00.00.00") , simpynet.IP("192.0.0.0"))
    h1 = simpynet.Host(env , simpynet.Mac("00.00.00.00.01") , simpynet.IP("192.0.0.1"))

    link0 = simpynet.PointToPoint(env, lambda x,y:PROPAGATION_DELAY, lambda src,trg,l: TRANSMISSION_DELAY)
    link1 = simpynet.PointToPoint(env, lambda x,y:PROPAGATION_DELAY, lambda src,trg,l: TRANSMISSION_DELAY)

    switch = simpynet.Switch( env, lambda x, y : PROCESSING_DELAY )

    tc = TimeCollector(env)
    tc.reset()
    simpynet.physical.plug(link0,h0)
    tc.add_handlers( switch , link0 )
    tc.add_handlers( switch , link1 )
    simpynet.physical.plug(link1,h1)

    env.add_collector_functions( 'data', tc.collector , float('inf')  )

    protocol0 = selective_repeat.Selective_Repeat( env, 10 )
    protocol0.timeout_time = 30
    protocol1 = selective_repeat.Selective_Repeat( env, 10 )
    protocol1.timeout_time = 30
    protocol0.add_handler( h0.add_transport_handler( protocol0.get_handler() ) )
    protocol1.add_handler( h1.add_transport_handler( protocol1.get_handler() ) )
    protocol0.send( NUMBER_OF_PACKETS , simpynet.IP("192.0.0.1") )
Beispiel #3
0
def sr_network(env):
    h0 = simpynet.Host(env, simpynet.Mac("00.00.00.00.00"),
                       simpynet.IP("192.0.0.0"))
    h1 = simpynet.Host(env, simpynet.Mac("00.00.00.00.01"),
                       simpynet.IP("192.0.0.1"))

    link = simpynet.PointToPoint(env, lambda x, y: PROPAGATION_DELAY,
                                 lambda src, trg, l: PROPAGATION_DELAY,
                                 lambda src, trg, l: LOSS_PROBABILITY)
    simpynet.physical.plug(link, h0)
    simpynet.physical.plug(link, h1)
    protocol0 = Selective_Repeat(env, 10)
    protocol1 = Selective_Repeat(env, 10)
    protocol0.add_handler(h0.add_transport_handler(protocol0.get_handler()))
    protocol1.add_handler(h1.add_transport_handler(protocol1.get_handler()))
    protocol0.send(NUMBER_OF_PACKETS, simpynet.IP("192.0.0.1"))
Beispiel #4
0
def example1(env):
    """
    This example simulates the transfer of a packet of size 1000 byte
    through a link with
    -distance 2.5 km,
    -propagation speed 2.5*10^8 m/s
    -transmission rate 2 Mbps.

    A ---link-----B

    Make reference to exercise R18 at page 95
    (Computer Networking, 6th edition, Kurose-Ross).
    """
    packet_size = 1000 * 32  # bit
    distance = 2500000  # m
    speed_propagation = 250000  #000 # m/s
    transmission_rate = 2000  #000 # 2 Mbps

    trm_delay = lambda name, data: packet_size / float(transmission_rate)
    prg_delay = lambda src, trg, link: distance / float(speed_propagation)

    link = spn.PointToPoint(env, trm_delay, prg_delay)

    def h_receiver(name, data, d_trm_delay):  # receiver' s handler
        def _new_handler(name, data, d_trm_delay):
            yield env.timeout(d_trm_delay)

        return env.process(_new_handler(name, data, d_trm_delay))

    f_send = link.add_handler('rcv',
                              h_receiver)  #  handler of Point to Point link

    packet = spn.Databits(packet_size)

    def sender():
        yield f_send('sender', packet, 0.0)


#    env.add_collector_functions('l1 sent data', link.collector_sentdatabits , 4)

    env.process(sender())
Beispiel #5
0
def example3(env):
    """
    This example simulate a trasfer from a Host A to two hosts B and C,
    A hub connects three links.

    A---l1---Hub ---l2---B
              |
              |
             l3
              |
              |
              C

    Statistics are collected from different intervall for every collector.
    """
    packet_size = 12000  #bits
    trm_rate = 2000  # b/s

    trm_delay = lambda name, data: len(data) / float(trm_rate)

    packet = spn.Databits(packet_size)

    hub = spn.Hub(env, lambda d, l: 0.0)

    def prg_delay(src_interface, trg_interface, link):
        if (src_interface == 'sender' and trg_interface == repr(hub)):
            return 4
        if (src_interface == repr(hub) and trg_interface == 'b'):
            return 8
        if (src_interface == repr(hub) and trg_interface == 'c'):
            return 16

    l1 = spn.PointToPoint(env, trm_delay, prg_delay)
    l2 = spn.PointToPoint(env, trm_delay, prg_delay)
    l3 = spn.PointToPoint(env, trm_delay, prg_delay)

    spn.physical.plug(l1, hub)
    spn.physical.plug(hub, l2)
    spn.physical.plug(hub, l3)

    f_send = l1.get_handler()

    def sender():
        yield f_send('sender', packet, trm_delay=0.0)

    def h_receiver(name, data, trm_delay):
        def _new_handler(name, data, trm_delay):
            yield env.timeout(trm_delay)

        return env.process(_new_handler(name, data, trm_delay))

    l1.add_handler('b', h_receiver)
    l2.add_handler('c', h_receiver)

    d = hub.collector_sentdatabits
    c_l1 = l1.collector_sentdatabits

    #    env.set_stat_file_name('SPHY.EX3')

    env.add_collector_functions('sent hub', d)
    env.add_collector_functions('l1 sent data ', c_l1)

    #    def massimo( l ):
    #        return max(l)
    #
    #    env.add_statistical_index( np.mean )
    #    env.add_statistical_index( massimo )

    env.process(sender())
Beispiel #6
0
def network(env):

    domains = {
        "moogle.com": simpynet.IP("192.0.0.50"),
        "mybank.com": simpynet.IP("192.0.0.80")
    }

    def dns_function(name):
        if domains.has_key(name):
            return domains[name]
        else:
            return None

    def sender(env):
        client.send("Hello", "moogle.com")
        yield env.timeout(5)
        client.send("Hello", "mybank.com")
        yield env.timeout(5)
        client.send("Hello", "random.com")
        client.send("Hello again", "moogle.com")

    def forwarding(datagram, router):
        if datagram.dst_ip == simpynet.IP("192.0.0.0"):
            return simpynet.Mac("00.00.00.00.00")
        if datagram.dst_ip == simpynet.IP("192.0.0.1"):
            return simpynet.Mac("00.00.00.00.01")
        if datagram.dst_ip == simpynet.IP("192.0.0.50"):
            return simpynet.Mac("00.00.00.00.02")
        if datagram.dst_ip == simpynet.IP("192.0.0.80"):
            return simpynet.Mac("00.00.00.00.03")
        else:
            return None

    router = simpynet.Router(env, simpynet.Mac("00.00.00.00.10"), forwarding,
                             lambda x, y: PROCESSING_DELAY)
    host = simpynet.Host(env, simpynet.Mac("00.00.00.00.00"),
                         simpynet.IP("192.0.0.0"))
    dns_host = simpynet.Host(env, simpynet.Mac("00.00.00.00.01"),
                             simpynet.IP("192.0.0.1"))
    server_host0 = simpynet.Host(env, simpynet.Mac("00.00.00.00.02"),
                                 simpynet.IP("192.0.0.50"))
    server_host1 = simpynet.Host(env, simpynet.Mac("00.00.00.00.03"),
                                 simpynet.IP("192.0.0.80"))

    host.set_default_gateway(simpynet.Mac("00.00.00.00.10"))
    dns_host.set_default_gateway(simpynet.Mac("00.00.00.00.10"))
    server_host0.set_default_gateway(simpynet.Mac("00.00.00.00.10"))
    server_host1.set_default_gateway(simpynet.Mac("00.00.00.00.10"))

    client = Client(env, host, dns_host.ip_addr)
    dns = DNS_Server(env, dns_host, dns_function)
    moogle = Server(env, server_host0, "moogle.com")
    mybank = Server(env, server_host1, "mybank.com")

    link0 = simpynet.PointToPoint(env, lambda x, y: PROPAGATION_DELAY,
                                  lambda src, trg, l: PROPAGATION_DELAY)
    link1 = simpynet.PointToPoint(env, lambda x, y: PROPAGATION_DELAY,
                                  lambda src, trg, l: PROPAGATION_DELAY)
    link2 = simpynet.PointToPoint(env, lambda x, y: PROPAGATION_DELAY,
                                  lambda src, trg, l: PROPAGATION_DELAY)
    link3 = simpynet.PointToPoint(env, lambda x, y: PROPAGATION_DELAY,
                                  lambda src, trg, l: PROPAGATION_DELAY)

    simpynet.physical.plug(link0, host)
    simpynet.physical.plug(link0, router)
    simpynet.physical.plug(link1, dns_host)
    simpynet.physical.plug(link1, router)
    simpynet.physical.plug(link2, server_host0)
    simpynet.physical.plug(link2, router)
    simpynet.physical.plug(link3, server_host1)
    simpynet.physical.plug(link3, router)

    env.process(sender(env))