def Network(argv):
    
    cmd = ns.core.CommandLine()
    
    cmd.tcp = None
    cmd.AddValue("tcp", "iperf bandwidth")
    
    cmd.udp = None
    cmd.AddValue("udp", "iperf jitter and packet loss")  
    
    cmd.json = None
    cmd.AddValue("json", "iper3 in JSON format")
    
    cmd.distance = None
    cmd.AddValue("distance", "set distance between routers")
    
    cmd.Parse(argv)
       
    if cmd.distance is not None:
        distance = float(cmd.distance)
        
    setLogLevel( 'info' )

    info( "*** Create an Wifi network and add nodes to it\n" )
    net = Mininet(controller=RemoteController, link=CSMALink)

    info( '*** Adding controller\n' )
    net.addController('c0', ip='127.0.0.1', port=6633)
    
    info( "*** Creating mobility models\n" )
    """ Constant position """
    mobilityHelper1 = ns.mobility.MobilityHelper()
    mobilityHelper1.SetMobilityModel("ns3::ConstantPositionMobilityModel")
   
    """ Random walk """
    mobilityHelper2 = ns.mobility.MobilityHelper()
    mobilityHelper2.SetMobilityModel("ns3::RandomWalk2dMobilityModel")
        
    info( "*** Creating swtich\n" )
    s0 = net.addSwitch('s0', listenPort=6634) 
    
    info( "*** Creating server node h0\n" )
    h0 = net.addHost('h0', mac='aa:aa:aa:aa:aa:01', ip="10.0.1.100/24")
    
    info( "*** Creating mobile node h1\n" )
    h1 = net.addHost('h1', mac='aa:aa:aa:aa:aa:02', ip="10.0.2.100/24")
    
    info( "*** Creating mobile node h2\n" )
    h2 = net.addHost('h2', mac='aa:aa:aa:aa:aa:03', ip="10.0.3.100/24")
    
    info( "*** Creating access point h3\n" )
    h3 = net.addHost('h3', mac='aa:aa:aa:aa:aa:04', ip="10.0.1.1")
    
    info( "*** Creating access point h4\n" )
    h4 = net.addHost('h4', mac='aa:aa:aa:aa:aa:05', ip="10.0.1.2")

    info( "*** Adding wired links\n" )
    csma0 = CSMALink(s0, h0, DataRate="10Mbps", Delay="1ms") 
    csma1 = CSMALink(s0, h3, DataRate="10Mbps", Delay="1ms")
    csma2 = CSMALink(s0, h4, DataRate="10Mbps", Delay="1ms")
    
    info( "*** Adding wireless links\n" ) 
    wifi1_channelNumber = 1
    wifi2_channelNumber = 11     

    wifiChannelHelper = ns.wifi.YansWifiChannelHelper.Default()
    wifiChannel = wifiChannelHelper.Create()
    wifiPhy1 = ns.wifi.YansWifiPhyHelper.Default()
    wifiPhy2 = ns.wifi.YansWifiPhyHelper.Default()

    wifi1 = WIFISegment()
    wifi2 = WIFISegment()
    
    wifi1.channel = wifiChannel
    wifi1.phyhelper = wifiPhy1
    if wifi1_channelNumber <= 0 or wifi1_channelNumber > maxChannelNumber: 
        wifi1_channelNumber = random.randint(1, maxChannelNumber)
        warn("illegal channel number, choose a random channel number %s.\n", 
             wifi1_channelNumber)
    else:
        wifiPhy1.Set("ChannelNumber", ns.core.UintegerValue(wifi1_channelNumber))
    
    wifi2.channel = wifiChannel
    wifi2.phyhelper = wifiPhy2
    if wifi2_channelNumber <= 0 or wifi2_channelNumber > maxChannelNumber: 
        wifi2_channelNumber = random.randint(1, maxChannelNumber)
        warn("illegal channel number, choose a random channel number %s.\n", 
             wifi2_channelNumber)
    else:
        wifiPhy2.Set("ChannelNumber", ns.core.UintegerValue(wifi2_channelNumber))
        
    # same YansWifiPhyHelper for the 2 WifiAPs for interference
    wifiPhy1.SetChannel(wifiChannel)
    wifiPhy2.SetChannel(wifiChannel)
    
    tb_h3 = wifi1.addAp(h3, ssid='ssid1')
    tb_h1 = wifi1.addSta(h1, ssid='ssid1')
    tb_h4 = wifi2.addAp(h4, ssid='ssid2')
    tb_h2 = wifi2.addSta(h2, ssid='ssid2')

    """ Set IPs for access points """
    h3.setIP('10.0.2.1', intf='h3-eth1')
    h4.setIP('10.0.3.1', intf='h4-eth1')
    
    # set mobility model (before setting positions !!!)
    info("*** Mobility models\n")
    mininet.ns3.setMobilityModel(s0, mobilityHelper1)
    print mininet.ns3.getMobilityModel(s0)
    mininet.ns3.setMobilityModel(h0, mobilityHelper1)
    print mininet.ns3.getMobilityModel(h0)
    mininet.ns3.setMobilityModel(h1, mobilityHelper1)
    print mininet.ns3.getMobilityModel(h1)
    mininet.ns3.setMobilityModel(h2, mobilityHelper1)
    print mininet.ns3.getMobilityModel(h2)
    mininet.ns3.setMobilityModel(h3, mobilityHelper1)
    print mininet.ns3.getMobilityModel(h3)
    mininet.ns3.setMobilityModel(h4, mobilityHelper1)
    print mininet.ns3.getMobilityModel(h4)
    
    y_h3 = -distance/2
    y_h4 = distance/2
    
    # set position (after wifi.addAp/Sta() otherwise node position become 0.0,0.0)
    info("*** Positions\n") 
    mininet.ns3.setPosition(s0, -3.0, 0.0, 0.0)
    print mininet.ns3.getPosition(s0)
    mininet.ns3.setPosition(h0, -5.0, 0.0, 0.0)
    print mininet.ns3.getPosition(h0)
    mininet.ns3.setPosition(h1, 1.5, -1.5, 0.0)
    print mininet.ns3.getPosition(h1)
    mininet.ns3.setPosition(h2, 1.5, 1.5, 0.0)
    print mininet.ns3.getPosition(h2)
    mininet.ns3.setPosition(h3, 0.0, y_h3, 0.0)
    print mininet.ns3.getPosition(h3)
    mininet.ns3.setPosition(h4, 0.0, y_h4, 0.0)
    print mininet.ns3.getPosition(h4)
    
    """
    # Wireshark files
    rv = os.path.isdir("/tmp/pcap/interference_scenario")
    if rv is False:
        os.mkdir("/tmp/pcap/interference_scenario")
    ns.wifi.YansWifiPhyHelper().Default().EnablePcapAll("/tmp/pcap/wifi")
    ns.csma.CsmaHelper().EnablePcapAll("/tmp/pcap/csma")
    """
    """ NetAnim configuration """
    rv = os.path.isdir("/tmp/xml")
    if rv is False:
        os.mkdir("/tmp/xml")    
    anim = ns.netanim.AnimationInterface("/tmp/xml/interference_scenario.xml")
    anim.EnablePacketMetadata(True)

    anim.UpdateNodeDescription(s0.nsNode, 's0 - switch '+str(s0.nsNode.GetId()))
    anim.UpdateNodeColor(s0.nsNode, switch_color[0], switch_color[1], switch_color[2])
        
    anim.UpdateNodeDescription(h0.nsNode, 'h0 - server node ' + str(h0.nsNode.GetId()))
    anim.UpdateNodeColor(h0.nsNode, server_color[0], server_color[1], server_color[2]) 
    
    anim.UpdateNodeDescription(h1.nsNode, 'h1 - mobile node ' + str(h1.nsNode.GetId()))
    anim.UpdateNodeColor(h1.nsNode, mobile_node_color[0], mobile_node_color[1], mobile_node_color[2]) 

    anim.UpdateNodeDescription(h2.nsNode, 'h2 - mobile node ' + str(h2.nsNode.GetId()))
    anim.UpdateNodeColor(h2.nsNode, mobile_node_color[0], mobile_node_color[1], mobile_node_color[2])
    
    anim.UpdateNodeDescription(h3.nsNode, 'h3 - access point ' + str(h3.nsNode.GetId()))
    anim.UpdateNodeColor(h3.nsNode, access_point_color[0], access_point_color[1], access_point_color[2]) 
    
    anim.UpdateNodeDescription(h4.nsNode, 'h4 - access point ' + str(h4.nsNode.GetId()))
    anim.UpdateNodeColor(h4.nsNode, access_point_color[0], access_point_color[1], access_point_color[2])  

    info( '*** Starting network\n' )
    net.start()

    mininet.ns3.start()  
    
    """ Adding route entries """
    h0.cmd('route add -net 10.0.2.0 netmask 255.255.255.0 gw 10.0.1.1 dev h0-eth0')
    h0.cmd('route add -net 10.0.3.0 netmask 255.255.255.0 gw 10.0.1.2 dev h0-eth0')
    
    h1.cmd('route add default gw 10.0.2.1')
    h2.cmd('route add default gw 10.0.3.1')
    
    h3.cmd('route add -net 10.0.2.0 netmask 255.255.255.0 dev h3-eth1')
    h3.cmd('route add -net 10.0.3.0 netmask 255.255.255.0 gw 10.0.1.2 dev h3-eth0')
    
    h4.cmd('route add -net 10.0.3.0 netmask 255.255.255.0 dev h4-eth1')
    h4.cmd('route add -net 10.0.2.0 netmask 255.255.255.0 gw 10.0.1.1 dev h4-eth0')
    
    print "*** Dumping host connections"
    dumpNodeConnections(net.hosts)

    """ static measurements """
    # h1, h2 -> h0
    if cmd.udp is not None:
        if cmd.json is not None:
            h2.cmdPrint('ping 10.0.1.100 -c 30 > /home/luca/ping_h2_h0_udp &')
            h0.cmdPrint('iperf3 -s -p 5003 -i 1 -J > /home/luca/iperf_interference_h0_server_h1_client_udp.json &')
            #h0.cmdPrint('iperf3 -s -p 5004 -i 1 > /home/luca/iperf_interference_h0_server_h2_client &')
            h1.cmdPrint('iperf3 -c 10.0.1.100 -u -b 2M -p 5003 -n 5M -J > /home/luca/iperf_interference_h1_client_udp.json &')
            #h2.cmdPrint('iperf3 -c 10.0.1.100 -u -b 2M -p 5004 -n 5M > /home/luca/iperf_interference_h2_client &')
        else:
            """
            h2.cmdPrint('ping 10.0.1.100 -c 30 > /home/luca/stats/interference_scenario/ping_h2_h0_udp &')
            #h1.cmdPrint('ping 10.0.1.100 -c 30 > /home/luca/ping_h1_h0_udp &')
            h0.cmdPrint('iperf3 -s -p 5003 -i 1 > /home/luca/stats/interference_scenario/iperf_interference_h0_server_h1_client_udp &')
            #h0.cmdPrint('iperf3 -s -p 5004 -i 1 > /home/luca/iperf_interference_h0_server_h2_client &')
            h1.cmdPrint('iperf3 -c 10.0.1.100 -u -b 2M -p 5003 -n 5M > /home/luca/stats/interference_scenario/iperf_interference_h1_client_udp &')
            #h2.cmdPrint('iperf3 -c 10.0.1.100 -u -b 2M -p 5004 -n 5M > /home/luca/iperf_interference_h2_client &')
            """
            h2.cmdPrint('ping 10.0.1.100 -c 100 -i 0.5 > /home/luca/stats/interference_scenario/ping_h2_h0_udp_'+str(distance)+' &')
            src1, src2, dst = net.hosts[1], net.hosts[2], net.hosts[0]
            net.iperf([src1, dst], l4Type='UDP', udpBw='2M', seconds=55)

    if cmd.tcp is not None:  
        if cmd.json is not None:
            h2.cmdPrint('ping 10.0.1.100 -c 30 > /home/luca/ping_h2_h0_tcp &')
            h0.cmdPrint('iperf3 -s -p 5003 -i 1 -J > /home/luca/iperf_interference_h0_server_h1_client_tcp.json &')
            h1.cmdPrint('iperf3 -c 10.0.1.100 -p 5003 -J > /home/luca/iperf_interference_h1_client_tcp.json &') 
        else:
            h2.cmdPrint('ping 10.0.1.100 -c 30 -i 0.5 > /home/luca/ping_h2_h0_tcp &')
            h0.cmdPrint('iperf3 -s -p 5003 -i 1 > /home/luca/iperf_interference_h0_server_h1_client_tcp &')
            h1.cmdPrint('iperf3 -c 10.0.1.100 -p 5003 > /home/luca/iperf_interference_h1_client_tcp &')

    # h0 -> h1, h2
    #h1.cmdPrint('iperf3 -s -p 5003 -i 1 > /home/luca/iperf_interference_h0_server_h1_client &')
    #h2.cmdPrint('iperf3 -s -p 5003 -i 1 > /home/luca/iperf_interference_h0_server_h2_client &')
    #h0.cmdPrint('iperf3 -c 10.0.2.100 -u -b 2M -p 5003 -n 5M > /home/luca/iperf_interference_h1_client &')
    #h0.cmdPrint('iperf3 -c 10.0.3.100 -u -b 2M -p 5003 -n 5M > /home/luca/iperf_interference_h2_client &')
    
    # h3 -> h0
    #h0.cmdPrint( 'iperf3 -s -p 5003 -i 1 -J > /home/luca/iperf_static_h0_server.json &' )
    #h3.cmdPrint( 'iperf3 -c 192.168.0.1 -u -b 3M -p 5003 -J > /home/luca/iperf_static_h3_client.json &' )
    
    # h0 -> h1
    #h1.cmdPrint( 'iperf3 -s -p 5003 -i 1 -J > /home/luca/iperf_static_h1_server.json &' )
    #h0.cmdPrint( 'iperf3 -c 192.168.0.2 -u -b 3M -p 5003 -J > /home/luca/iperf_static_h0_client.json &' )
    
    # h1 -> h2
    #h2.cmdPrint( 'iperf3 -s -p 5003 -i 1 -J > /home/luca/iperf_static_h2_server.json &' )
    #h1.cmdPrint( 'iperf3 -c 192.168.0.3 -u -b 3M -p 5003 -J > /home/luca/iperf_static_h1_client.json &' )
   
    
    info( 'Testing network connectivity\n' )
    #net.pingAll()
    
    """
    src, dst = net.hosts[0], net.hosts[2]
    packet_loss_perc = net.ping([src, dst], timeout)
    src, dst = net.hosts[0], net.hosts[2]
    bandwidth = net.iperf([src, dst], seconds=5)
    """
 
    #CLI(net)    
    
    info( '*** Stopping network\n' )
    mininet.ns3.stop()
    info( '*** mininet.ns3.stop()\n' )
    mininet.ns3.clear()
    info( '*** mininet.ns3.clear()\n' )
    net.stop()
    info( '*** net.stop()\n' )
Esempio n. 2
0
import mininet.log
import mininet.net
import os
import sys
import time
from functools import partial

mininet.log.setLogLevel('info')

Switch = partial(mininet.node.OVSSwitch, protocols='OpenFlow13')
net = mininet.net.Containernet(switch=Switch)
net.addController('c0', controller=mininet.node.RemoteController, ip='172.17.42.1', port=6652)

runtime_id = os.urandom(2).encode('hex')
# runtime_id = sys.argv[1]
s0 = net.addSwitch("s0")
s1 = net.addSwitch("s1")
s2 = net.addSwitch("s2")
s3 = net.addSwitch("s3")
s4 = net.addSwitch("s4")
net.addLink(s0, s1, cls=mininet.link.TCLink, delay="100ms", bw=40)
net.addLink(s1, s2, cls=mininet.link.TCLink, delay="10ms", bw=20)
net.addLink(s0, s3, cls=mininet.link.TCLink, delay="100ms", bw=40)
net.addLink(s3, s4, cls=mininet.link.TCLink, delay="10ms", bw=20)

c0 = net.addDocker(
    'c0' + runtime_id,
    ip='10.0.1.1/8',
    dimage='dx_cloud',
    # dcmd='python deploy-service/main.py',
    dcmd='bash boot.sh',
Esempio n. 3
0
import sys
import time
from functools import partial

mininet.log.setLogLevel('info')

Switch = partial(mininet.node.OVSSwitch, protocols='OpenFlow13')
net = mininet.net.Containernet(switch=Switch)
net.addController('c0',
                  controller=mininet.node.RemoteController,
                  ip='172.17.42.1',
                  port=6652)

# runtime_id = os.urandom(2).encode('hex')
runtime_id = sys.argv[1]
s0 = net.addSwitch("s0")
s1 = net.addSwitch("s1")
s2 = net.addSwitch("s2")
s3 = net.addSwitch("s3")
s4 = net.addSwitch("s4")
s5 = net.addSwitch("s5")
s6 = net.addSwitch("s6")
net.addLink(s0, s1, cls=mininet.link.TCLink, delay="100ms", bw=40)
net.addLink(s1, s2, cls=mininet.link.TCLink, delay="10ms", bw=20)
net.addLink(s0, s3, cls=mininet.link.TCLink, delay="100ms", bw=40)
net.addLink(s3, s4, cls=mininet.link.TCLink, delay="10ms", bw=20)
net.addLink(s0, s5, cls=mininet.link.TCLink, delay="100ms", bw=40)
net.addLink(s5, s6, cls=mininet.link.TCLink, delay="10ms", bw=20)
net.addLink(s1, s5, cls=mininet.link.TCLink, delay="30ms", bw=25)
net.addLink(s3, s5, cls=mininet.link.TCLink, delay="50ms", bw=25)