Пример #1
0
def topology():
    "Create a network with some docker containers acting as hosts."

    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController('c0')   

    info('*** Adding docker containers\n')
    
    # Containers de imagenes con herramientas de red 
    A = net.addDocker('A', ip='10.0.0.100', dimage="openswitch/ubuntuscapy", volumes=["/home/tigarto/Documents/test_diarios_tesis/abril17/test1/trazas:/mnt/trazas:rw"])
    V = net.addDocker('V', ip='10.0.0.101', dimage="openswitch/ubuntuscapy") 


    info('*** Adding switch\n')
    s1 = net.addSwitch('s1')
    

    info('*** Creating links\n')
    net.addLink(A, s1)
    net.addLink(s1, V)
    

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

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network')
    net.stop()
Пример #2
0
def networkTest():
    "Create a network with some docker containers acting as hosts."
    info('*** Create the controller \n')
    c0 = POXBridge()
    net = Containernet(build=False)
    info('*** Creating the network\n')
    # Containers de imagenes con herramientas de red
    h1 = net.addDocker('h1', ip='10.0.0.100', dimage="ubuntu_net_tools")
    h2 = net.addDocker('h2', ip='10.0.0.101', dimage="ubuntu_net_tools")
    h3 = net.addDocker('h3', ip='10.0.0.102', dimage="ubuntu_net_tools")

    info('*** Adding switch\n')
    s1 = net.addSwitch('s1')

    info('*** Creating links\n')
    net.addLink(h1, s1)
    net.addLink(h2, s1)
    net.addLink(s1, h3)

    info('*** Adding controller\n')
    net.addController('c0')

    info('*** Build the network\n')
    net.build()

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

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network')
    net.stop()
Пример #3
0
 def testaddDocker(self):
     net = Containernet(controller=Controller)
     path = find_test_container("webserver_curl")
     d2 = net.addDocker("d2",
                        ip='10.0.0.252',
                        build_params={
                            "dockerfile": "Dockerfile.server",
                            "path": path
                        })
     self.assertTrue(d2._check_image_exists(_id=d2.dimage))
     d3 = net.addDocker("d3",
                        ip='10.0.0.253',
                        dimage="webserver_curl_test",
                        build_params={
                            "dockerfile": "Dockerfile.server",
                            "path": path
                        })
     self.assertTrue(d3._check_image_exists("webserver_curl_test"))
     d4 = net.addDocker("d4",
                        ip='10.0.0.254',
                        build_params={
                            "dockerfile": "Dockerfile.server",
                            "tag": "webserver_curl_test2",
                            "path": path
                        })
     self.assertTrue(d4._check_image_exists("webserver_curl_test2"))
Пример #4
0
    def run(self, sim_args, curtime, entrypoint):
        if any(v not in environ for v in ['CLIENT', 'CLIENT_PARAMS', 'SERVER', 'SERVER', 'CLIENT_LOGS', 'SERVER_LOGS', 'CL_COMMIT', 'SV_COMMIT']):
            # TODO show help
            exit(1)
        client_image = environ['CLIENT']
        client_params = environ['CLIENT_PARAMS']
        server_image = environ['SERVER']
        server_params = environ['SERVER_PARAMS']
        cl_logdir = environ['CLIENT_LOGS']
        sv_logdir = environ['SERVER_LOGS']
        clcommit = environ['CL_COMMIT']
        svcommit = environ['SV_COMMIT']

        setLogLevel('info')

        net = Containernet(controller=Controller)
        info('*** Adding controller\n')
        net.addController('c0')
        info('*** Adding docker containers\n')
        server_vs = [sv_logdir + ':/logs']
        # add kernel debug volume to allow eBPF code to run
        if sim_args.k:
            server_vs.append( '/sys/kernel/debug:/sys/kernel/debug:ro')
        server = net.addDocker('server', ip='10.0.0.251',
                               environment={"ROLE": "server", "SERVER_PARAMS": server_params, "COMMIT": svcommit},
                               dimage=server_image + ":latest",
                               volumes=server_vs)
        client = net.addDocker('client', ip='10.0.0.252', 
                               environment={"ROLE": "client", "CLIENT_PARAMS": client_params, "COMMIT": clcommit},
                               dimage=client_image + ":latest", 
                               volumes=[cl_logdir + ':/logs'])

        info('*** Adding switches\n')
        s1 = net.addSwitch('s1')
        s2 = net.addSwitch('s2')
        info('*** Creating links\n')
        net.addLink(s1, s2, cls=TCLink, delay=sim_args.delay, bw=sim_args.bandwidth, max_queue_size=sim_args.queue)
        net.addLink(s1, client)
        net.addLink(s2, server)
        info('\n*** Updating and building client/server\n')
        server.cmd('./updateAndBuild.sh')
        client.cmd('./updateAndBuild.sh')
        info('*** Starting network\n')
        net.start()
        capture = PacketCapture()
        if sim_args.k:
            client.cmd(entrypoint + " &")
        else:
            server.cmd(entrypoint + " &" )
        capture.startCapture()
        info('\n' + entrypoint + '\n')
        if sim_args.k:
            info(server.cmd(entrypoint) + "\n")
        else:
            info(client.cmd(entrypoint) + "\n")
        # Wait some time to allow server finish writing to log file
        sleep(3)
        capture.stopCapture()
        info('*** Stopping network')
        net.stop()
Пример #5
0
def topology():

    "Create a network with some docker containers acting as hosts."

    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController('c0')

    info('*** Adding hosts\n')
    h1 = net.addHost('h1')
    h2 = net.addHost('h2')

    info('*** Adding docker containers\n')
    d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty")
    d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty", cpu_period=50000, cpu_quota=25000)
    d3 = net.addHost(
        'd3', ip='11.0.0.253', cls=Docker, dimage="ubuntu:trusty", cpu_shares=20)
    d5 = net.addDocker('d5', dimage="ubuntu:trusty", volumes=["/:/mnt/vol1:rw"])

    info('*** Adding switch\n')
    s1 = net.addSwitch('s1')
    s2 = net.addSwitch('s2', cls=OVSSwitch)
    s3 = net.addSwitch('s3')

    info('*** Creating links\n')
    net.addLink(h1, s1)
    net.addLink(s1, d1)
    net.addLink(h2, s2)
    net.addLink(d2, s2)
    net.addLink(s1, s2)
    #net.addLink(s1, s2, cls=TCLink, delay="100ms", bw=1, loss=10)
    # try to add a second interface to a docker container
    net.addLink(d2, s3, params1={"ip": "11.0.0.254/8"})
    net.addLink(d3, s3)

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

    net.ping([d1, d2])

    # our extended ping functionality
    net.ping([d1], manualdestip="10.0.0.252")
    net.ping([d2, d3], manualdestip="11.0.0.254")

    info('*** Dynamically add a container at runtime\n')
    d4 = net.addDocker('d4', dimage="ubuntu:trusty")
    # we have to specify a manual ip when we add a link at runtime
    net.addLink(d4, s1, params1={"ip": "10.0.0.254/8"})
    # other options to do this
    #d4.defaultIntf().ifconfig("10.0.0.254 up")
    #d4.setIP("10.0.0.254")

    net.ping([d1], manualdestip="10.0.0.254")

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network')
    net.stop()
Пример #6
0
class Network():
    def __init__(self):
        self.containers = {}
        self.switches = {}

        self.cn = Containernet(controller=Controller)

        info('*** Adding controller\n')
        self.cn.addController('c0')

        info('*** Adding switches\n')
        self.switches['sw0'] = self.cn.addSwitch('sw0')

        info('*** Adding docker containers\n')
        self.containers['u0'] = self.cn.addDocker('u0',
                                                  ip='10.0.0.10',
                                                  dimage="ubuntu:trusty")
        self.containers['u1'] = self.cn.addDocker('u1',
                                                  ip='10.0.0.11',
                                                  dimage="ubuntu:trusty")
        self.containers['p0'] = self.cn.addDocker(
            'p0',
            ip='10.0.0.100',
            dimage="cachecashproject/go-cachecash",
            dcmd='')

        info('*** Creating links\n')
        for c in self.containers.values():
            self.cn.addLink(c, self.switches['sw0'])
Пример #7
0
def topo():

    net = Containernet(controller=RemoteController,
                       link=TCLink,
                       switch=OVSKernelSwitch)
    info("*** Adding Controller ")
    c1 = net.addController('c1', ip='127.0.0.1', port=6633)
    info('*** Adding Switch')
    s2 = net.addSwitch('s2',
                       protocols='OpenFlow10',
                       listenPort=6670,
                       mac='00:00:00:00:00:02')
    s3 = net.addSwitch('s3',
                       protocols='OpenFlow10',
                       listenPort=6671,
                       mac='00:00:00:00:00:03')

    info('*** Adding Docker Containers')
    d4 = net.addDocker('d4',
                       mac='00:00:00:00:00:04',
                       ip='10.0.20.3/24',
                       dimage="ubuntu:trusty",
                       cpu_period=50000,
                       cpu_quota=25000)
    d5 = net.addDocker('d5',
                       mac='00:00:00:00:00:05',
                       ip='10.0.10.3/24',
                       dimage="ubuntu:trusty",
                       cpu_period=50000,
                       cpu_quota=25000)
    d6 = net.addDocker('d6',
                       mac='00:00:00:00:00:06',
                       ip='10.0.10.2/24',
                       dimage="ubuntu:trusty",
                       cpu_period=50000,
                       cpu_quota=25000)
    d7 = net.addDocker('d7',
                       mac='00:00:00:00:00:07',
                       ip='10.0.20.2/24',
                       dimage="ubuntu:trusty",
                       cpu_period=50000,
                       cpu_quota=25000)

    info('*** Adding links ')
    net.addLink(d4, s2, cls=TCLink, delay="5ms", bw=1, loss=0)
    net.addLink(d6, s2, cls=TCLink, delay="10ms", bw=10, loss=0)
    net.addLink(d7, s3, cls=TCLink, delay="5ms", bw=1, loss=0)
    net.addLink(d5, s3, cls=TCLink, delay="10ms", bw=10, loss=0)
    net.addLink(s2, s3, cls=TCLink, delay="100ms", bw=1, loss=0)

    info('*** Starting ')
    net.build()
    c1.start()
    s3.start([c1])
    s2.start([c1])

    CLI(net)
    net.stop()
Пример #8
0
def myNetwork():
    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController(name='c0')

    info('*** Add switches\n')
    s1 = net.addSwitch('s1', cls=OVSSwitch)

    info('*** Add hosts\n')
    # attacker 2 docker containers
    mn_args = {
        "network_mode": "none",
        "dimage": "lab05/crypto",
        "dcmd": "./start_app.sh",
        "ip": "192.168.16.2/24",
    }
    H1 = net.addDocker('h1', **mn_args)
    mn_args = {
        "network_mode": "none",
        "dimage": "lab05/crypto",
        "dcmd": "./start_app.sh",
        "ip": "192.168.16.100/24",
    }
    H2 = net.addDocker('h2', **mn_args)

    info('*** Add links\n')
    net.addLink(H1, s1)
    net.addLink(H2, s1)

    info('*** Add Internet access\n')
    mn_args = {
        "ip": "192.168.16.1/24",
    }
    nat = net.addHost('nat0',
                      cls=NAT,
                      inNamespace=False,
                      subnet='192.168.16.0/24',
                      **mn_args)
    # Connect the nat to the switch
    net.addLink(nat, s1)

    info('*** Starting network\n')
    net.start()
    H1.cmd('ip r a default via 192.168.16.1')
    H2.cmd('ip r a default via 192.168.16.1')

    CLI(net)
    net.stop()
Пример #9
0
 def addDocker(self, label, **params):
     """
     Wrapper for addDocker method to use custom container class.
     """
     self.DCNetwork_graph.add_node(label, type=params.get('type', 'docker'))
     return Containernet.addDocker(
         self, label, cls=EmulatorCompute, **params)
Пример #10
0
 def addDocker(self, label, **params):
     """
     Wrapper for addDocker method to use custom container class.
     """
     self.DCNetwork_graph.add_node(label, type=params.get('type', 'docker'))
     return Containernet.addDocker(
         self, label, cls=EmulatorCompute, **params)
Пример #11
0
def example():
    from mininet.log import setLogLevel
    from mininet.clean import cleanup
    from mininet.net import Containernet
    from mininet.cli import CLI

    setLogLevel('debug')

    cleanup()

    net = Containernet(controller=None)

    kali = net.addDocker(
        'kali',
        cls=Kali,
        resolution="1920x1080x24",  # OPTIONAL
        port_vnc=5900,  # OPTIONAL
        port_web=6080,  # OPTIONAL
        ip='10.10.10.1/24')

    kali.install_package("iproute2", "dnmap")

    h1 = net.addHost('h1', ip='10.10.10.2/24')
    s1 = net.addSwitch('s1')

    net.addLink(h1, s1)
    net.addLink(kali, s1)

    net.start()

    kali.install_package(["nmap"])

    CLI(net)
    net.stop()
Пример #12
0
def topology():
    "Create a network with different node types, also utilizing Libvirt"

    net = Containernet(controller=Controller)

    net.addController("c0")

    n1 = net.addHost("h1", ip='10.0.0.1')
    n2 = net.addLibvirthost("vm1", ip='10.0.0.2', domain_name="ubuntu16.04")
    n3 = net.addDocker('d1', ip='10.0.0.3', dimage="ubuntu:trusty")
    n4 = net.addLibvirthost("vm2",
                            ip='10.0.0.4',
                            disk_image="/var/libvirt/images/ubuntu16.04.qcow2")

    info('*** Starting Switches and Links\n')
    s1 = net.addSwitch("s1")
    net.addLink(n1, s1)
    net.addLink(n2, s1)
    net.addLink(n3, s1)
    net.addLink(n4, s1)

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

    CLI(net)

    info('*** Stopping network')
    net.stop()
Пример #13
0
def example():
    from mininet.clean import cleanup
    from mininet.cli import CLI
    from mininet.log import info, setLogLevel
    from mininet.net import Containernet

    if __name__ == "__main__":
        setLogLevel('info')

        info('*** Running Cleanup\n')
        cleanup()

        net = Containernet(controller=None)

        info('*** Adding host\n')
        h1 = net.addHost('h1', ip='10.10.10.2/24')
        info('*** Adding switch\n')
        s1 = net.addSwitch('s1')
        info('*** Adding dhcpd\n')
        dhcpd = net.addDocker('dhcpd',
                              cls=Dhcpd,
                              dhcp_switch=s1,
                              ip='10.10.10.1/24')  # type: Dhcpd
        dhcpd.add_subnet(IPv4Network(u'10.10.10.0/24'))
        info('*** Creating links\n')
        net.addLink(h1, s1)
        net.addLink(dhcpd, s1)
        info('*** Starting network\n')
        net.start()
        info('*** Running CLI\n')
        CLI(net)
        info('*** Stopping network')
        net.stop()
Пример #14
0
def main():
    info('Starting network...\n')
    net = Containernet(controller=Controller)
    controller = net.addController('c0')
    middlebox = net.addDocker('d1', ip='10.0.0.251', dimage="middlebox:latest")
    tester = net.addDocker('d2', ip='10.0.0.252', dimage="tester:latest")

    def cmd(c):
        info('Running command %s on all hosts...\n' % c)
        middlebox.cmd(c)
        tester.cmd(c)

    info('Adding links...\n')
    switch = net.addSwitch('s1')
    net.addLink(middlebox, switch, cls=TCLink, delay='0ms', bw=1000)
    net.addLink(tester, switch, cls=TCLink, delay='0ms', bw=1000)
    net.addLink(middlebox, tester, cls=TCLink, delay='1ms', bw=1000)
    middlebox.setMAC('00:00:00:00:00:fb', 'd1-eth1')
    tester.setMAC('00:00:00:00:00:fc', 'd2-eth1')
    net.start()
    info('Network started.\n')

    # info('Pinging all hosts...\n')
    # net.ping([middlebox, tester])

    info('Running the experiment...\n')
    nf = 'dpdk-nat-basichash'
    scenario = 'latency'    # either 'thru-1p' or 'latency'
    pcap_file = '1packet.pcap'
    result_file = 'bench-%s-%s-%s.results' % (nf, scenario, pcap_file)

    middlebox.cmd('mkdir /mnt/huge')
    middlebox.cmd('mount -t hugetlbfs nodev /mnt/huge')
    # middlebox.cmd('/bin/bash ~/castan/scripts/perf/start-middlebox.sh %s' % nf)
    # middlebox.cmd('/bin/bash ~/castan/scripts/perf/run.sh %s %s %s %s' % (nf, scenario, result_file, pcap_file))

    info('Starting CLI...\n')
    CLI(net)

    info('Stopping network...\n')
    net.stop()
Пример #15
0
def topology():
    "Create a network with some docker containers acting as hosts."

    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController('c0')

    info('*** Adding docker containers\n')
    '''
    Containers de imagenes sin herramientas de red
    h1 = net.addDocker('h1', ip='10.0.0.100', dimage="ubuntu:latest")
    h2 = net.addDocker('h2', ip='10.0.0.101', dimage="ubuntu:latest") 
    h3 = net.addDocker('h3', ip='10.0.0.102', dimage="ubuntu:latest")  
    '''
    # Containers de imagenes con herramientas de red
    h1 = net.addDocker('h1', ip='10.0.0.100', dimage="ubuntu_net_tools")
    h2 = net.addDocker('h2', ip='10.0.0.101', dimage="ubuntu_net_tools")
    h3 = net.addDocker('h3', ip='10.0.0.102', dimage="ubuntu_net_tools")

    info('*** Adding switch\n')
    s1 = net.addSwitch('s1')

    info('*** Creating links\n')
    net.addLink(h1, s1)
    net.addLink(h2, s1)
    net.addLink(s1, h3)

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

    info('***Testing network connectivity***')
    net.pingAll()

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network')
    net.stop()
def simpleTest():
    info('*** Starting network\n')
    topo = TestingTopo()
    c1 = RemoteController('c1', ip='127.0.0.1')
    net = Containernet(topo=topo, link=link, controller=c1)  #
    d1 = net.addDocker('d1',
                       dimage="tests",
                       volumes=["/home/osboxes/Documents/tests/:/mnt/vol1:rw"])
    net.addLink(d1, net.get('s1'))
    s1 = net.get('s1')
    net.start()

    # Connect switch to Internet NAT
    s1.cmdPrint('ovs-vsctl add-port s1 enp0s3')

    # Setup mirrored port interface
    s1.cmdPrint('ovs-vsctl add-port s1 snort0')
    s1.cmdPrint('ovs-vsctl set interface snort0 type=internal')
    s1.cmdPrint('sudo ip link set snort0 up')
    s1.cmdPrint('ovs-vsctl show')

    # Disable docker NAT connection
    d1.cmdPrint('ifconfig eth0 down')

    # Reset and connect d1 to internet through s1
    d1.cmdPrint('ifconfig d1-eth0 0')
    d1.cmdPrint('dhclient d1-eth0')
    # Confirm d1 is connected to internet
    d1.cmdPrint('ping -c 2 google.com')
    info('*** Running CLI\n')
    CLI(net)
    # Quit CLI to start packet capture
    tcpdump = 'sudo timeout 930 tcpdump -i snort0 -w /home/osboxes/Documents/tests/pcaps/vulahometrain1.pcap'
    process = subprocess.Popen(tcpdump.split())
    # Start selenium powered application test (simulate website interaction)
    d1.cmdPrint('python /mnt/vol1/WebTrafficSDN/vulatest.py')
    #CLI(net)
    tcpdump = 'sudo timeout 930 tcpdump -i snort0 -w /home/osboxes/Documents/tests/pcaps/youtubehometrain1.pcap'
    process = subprocess.Popen(tcpdump.split())
    d1.cmdPrint('python /mnt/vol1/WebTrafficSDN/youtubetest.py')
    #CLI(net)
    tcpdump = 'sudo timeout 930 tcpdump -i snort0 -w /home/osboxes/Documents/tests/pcaps/outlookhometrain1.pcap'
    process = subprocess.Popen(tcpdump.split())
    d1.cmdPrint('python /mnt/vol1/WebTrafficSDN/outlooktest.py')

    info('*** Stopping network')
    net.stop()
Пример #17
0
def topology():

    "Create a network with some docker containers acting as hosts."

    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController('c0')

    info('*** Adding normal Mininet hosts\n')
    h1 = net.addHost('h1')
    h2 = net.addHost('h2')

    info('*** Adding docker containers\n')
    d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty")
    d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty")

    info('*** Adding switch\n')
    s1 = net.addSwitch('s1')
    s2 = net.addSwitch('s2')
    s3 = net.addSwitch('s3')

    info('*** Creating links\n')
    net.addLink(h1, s1)
    net.addLink(h2, s2)
    net.addLink(d1, s1)
    net.addLink(d2, s2)
    net.addLink(s1, s2, cls=TCLink, delay="100ms", bw=1)

    # we can even add multiple interfaces to a single docker container
    net.addLink(d2, s3, params1={"ip": "11.0.0.254/24"})

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

    # run a short test
    net.ping([d1, d2])

    info('*** Running CLI\n')
    CLI(net)  # wait for user input

    info('*** Stopping network')
    net.stop()
Пример #18
0
def setup(service, n=3):
    n = int(n)
    # - Core setup -------

    net = Containernet(controller=Controller, switch=OVSSwitch)
    info("*** Adding controller\n")
    net.addController("c0")

    info("*** Adding switches\n")
    s1 = net.addSwitch("s1")

    info("*** Adding docker containers and adding links\n")
    cluster_ips = [ip_from_int(i + 2) for i in range(n)]
    dimage = "cjj39_dks28/" + service
    print("*** Using image: " + dimage)
    dockers = [
        net.addDocker("d" + str(i + 1), ip=cluster_ips[i], dimage=dimage)
        for i in range(n)
    ]

    for d in dockers:
        net.addLink(d, s1, cls=TCLink, delay="50ms", bw=1, max_queue_size=200)

    microclient = addClient(net, service, "mc", ip="10.0.0.1")

    net.addLink(microclient, s1)

    net.start()

    system_setup_func = (
        importlib.import_module("systems.{0}.scripts.setup".format(service))
    ).setup

    restarters = system_setup_func(dockers, cluster_ips)
    # TODO add mininet restart stuff here
    restarters = [
        lambda: [restart_host(docker), restart][-1]
        for restert, docker in zip(restarters, dockers)
    ]

    return (net, cluster_ips, [microclient], restarters)
Пример #19
0
def topology():

    "Create a network with some docker containers acting as hosts."

    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController('c0')

    info('*** Adding docker containers\n')
    d1 = net.addDocker('d1', ip='10.0.0.251', dimage="mpeuster/stress", cpuset_cpus="0,1")
    d1.sendCmd("./start.sh")

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

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network')
    net.stop()
Пример #20
0
def topology():

    "Create a network with some docker containers acting as hosts."

    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController('c0')

    info('*** Adding docker containers\n')
    d1 = net.addDocker('d1', ip='10.0.0.251', dimage="mpeuster/stress", cpuset="0,1")
    d1.sendCmd("./start.sh")

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

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network')
    net.stop()
Пример #21
0
def main():
    os.system("rm -f /tmp/R*.log /tmp/R*.pid logs/*")
    os.system("mn -c >/dev/null 2>&1")
    os.system("killall -9 zebra bgpd > /dev/null 2>&1")

    net = Containernet(topo=SimpleTopo(), switch=Router)
    net.start()
    for router in net.switches:
        router.cmd("sysctl -w net.ipv4.ip_forward=1")
        router.waitOutput()

    log("Waiting %d seconds for sysctl changes to take effect..." % args.sleep)
    sleep(args.sleep)

    for router in net.switches:
        router.cmd(
            "/usr/sbin/zebra -f conf/zebra-%s.conf -d -i /tmp/zebra-%s.pid > logs/%s-zebra-stdout 2>&1"
            % (router.name, router.name, router.name))
        router.waitOutput()
        router.cmd(
            "/usr/sbin/bgpd -f conf/bgpd-%s.conf -d -i /tmp/bgp-%s.pid > logs/%s-bgpd-stdout 2>&1"
            % (router.name, router.name, router.name),
            shell=True)
        router.waitOutput()
        log("Starting zebra and bgpd on %s" % router.name)
        if router.name == "R1":
            r1 = router
        if router.name == "R2":
            r2 = router

    info('*** Adding docker containers\n')
    d1 = net.addDocker('d1', path="./Dockerfile.webserver", rm=True)
    d2 = net.addDocker('d2', path="./Dockerfile.webserver", rm=True)

    net.addLink(d1, r1)
    net.addLink(d2, r2)

    CLI(net)
    net.stop()
    os.system("killall -9 zebra bgpd")
Пример #22
0
def emptyNet():

    "Create an empty network and add nodes to it."

    net = Containernet(controller=Controller, link=TCLink)

    info('*** Adding controller\n')
    net.addController('c0')

    info('*** Adding hosts\n')
    h1 = net.addHost('h1', ip='10.0.0.1')
    h2 = net.addHost('h2', ip='10.0.0.2')
    d5 = net.addDocker('d5', dimage='kumokay/ubuntu_wifi:v6')
    d6 = net.addDocker('d6', dimage='kumokay/ubuntu_wifi:v6')

    info('*** Adding switch\n')
    s3 = net.addSwitch('s3')
    s4 = net.addSwitch('s4')

    info('*** Creating links\n')
    net.addLink(h1, s3)
    link = net.addLink(s3, s4, delay='100ms')
    net.addLink(h2, s4)
    net.addLink(d5, s3)
    net.addLink(d6, s4)

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

    info('*** Running CLI\n')
    CLI(net)

    link.intf1.config(delay='500ms')
    CLI(net)

    link.intf2.config(delay='300ms')
    CLI(net)

    info('*** Stopping network')
    net.stop()
Пример #23
0
def example():
    setLogLevel('debug')

    cleanup()

    net = Containernet(controller=Controller)
    net.addController('c0')

    ftp = net.addDocker('ftp',
                        cls=Vsftpd,
                        ip='10.10.10.1/24')
    h1 = net.addHost('h1', ip='10.10.10.2/24')
    s1 = net.addSwitch('s1')
    net.addLink(h1, s1)
    net.addLink(ftp, s1)

    net.start()
    # Add test:test to users
    add_user(ftp, "test", "test")

    CLI(net)
    net.stop()
Пример #24
0
def example():
    from mininet.log import setLogLevel
    from mininet.clean import cleanup
    from mininet.net import Containernet
    from mininet.cli import CLI

    setLogLevel('debug')

    cleanup()

    net = Containernet(controller=None)

    base = net.addDocker('base', cls=Base)

    h1 = net.addHost('h1', ip='10.10.10.2/24')
    s1 = net.addSwitch('s1')

    net.addLink(h1, s1)
    net.addLink(base, s1)

    net.start()

    CLI(net)
    net.stop()
"""
This is the most simple example to showcase Containernet.
"""
from mininet.net import Containernet
from mininet.node import Controller
from mininet.cli import CLI
from mininet.link import TCLink
from mininet.log import info, setLogLevel
setLogLevel('info')

net = Containernet(controller=Controller)
info('*** Adding controller\n')
net.addController('c0')

info('*** Adding Docker containers - Routers\n')
r1 = net.addDocker('r1', ip='20.0.0.1', dimage="ubuntu:trusty")

info('*** Adding Mininet containers - Hosts\n')
h1 = net.addHost('h1', ip='20.0.0.2/30')
h2 = net.addHost('h2', ip='50.0.0.2/30')

#info('*** Adding Mininet containers - Router\n')
#r1 = net.addHost('r1', ip='20.0.0.1/30')

info('*** Creating links\n')
#net.addLink(g1, h1, cls=TCLink, delay='100ms', bw=1)
net.addLink(h1, r1, cls=TCLink, bw=10)
net.addLink(h2, r1, cls=TCLink, bw=10)

info('*** Setting IP addresses\n')
r1.setIP('50.0.0.1/30', intf="r1-eth1")
Пример #26
0
# Get node count from commandline
if len(sys.argv) != 2:
  raise Exception('Invalid number of command line arguments. Expected 1 but ' + str(len(sys.argv) - 1) + ' given.')
hostCount = int(sys.argv[1])
if hostCount < 1:
  raise Exception('Host count must be greater than 0.')

net = Containernet(controller=Controller)
info('*** Adding controller\n')
net.addController('c0')
info('*** Adding docker containers using serverlessnet images\n')

# Add relayer
r0 = net.addDocker('r0',
                   dimage='serverlessnet/relayer',
                   ports=[5000],
                   port_bindings={5000:4999},
                   dcmd='python -u relayer.py ' + ,
                   publish_all_ports=True)
# r0 = net.addDocker('r0',
#                    dimage='serverlessnet/switch',
#                    ports=[5000],
#                    port_bindings={5000:4999},
#                    dcmd='python -u switch.py 5001',
#                    publish_all_ports=True)                   
# Add switch and actuator                  
# nodes = {'switch': [],
#         'actuator': []}
# for i in range(hostCount):
#   nodes['switch'].append(net.addDocker('sw' + str(i),
#                         dimage='serverlessnet/switch',
def run():
    net = Containernet(controller=Controller)  # controller is used by s1-s3
    net.addController('c0', port=6654)

    # net = ipaddress.ip_network('192.0.2.0/24')
    # router_1 = ipaddress.ip_address('10.0.1.1')
    # router_2 = ipaddress.ip_address('10.0.2.1')
    # router_3 = ipaddress.ip_address('10.0.3.1')
    #

    networks = [
        ipaddress.ip_network('10.0.{}.0/24'.format(net))
        for net in range(0, 3)
    ]
    linking_networks = [
        ipaddress.ip_network('10.{}.0.0/24'.format(net))
        for net in range(10, 40, 10)
    ]
    print(networks)
    print(linking_networks)

    router_1 = '{}/24'.format(next(networks[0].hosts()))
    router_2 = '{}/24'.format(next(networks[1].hosts()))
    router_3 = '{}/24'.format(next(networks[2].hosts()))

    info('*** Adding routers\n')
    r1 = net.addHost('r1', cls=LinuxRouter, ip=router_1)
    r2 = net.addHost('r2', cls=LinuxRouter, ip=router_2)
    r3 = net.addHost('r3', cls=LinuxRouter, ip=router_3)

    info('*** Adding switches\n')
    s1, s2, s3 = [net.addSwitch(s) for s in ('s1', 's2', 's3')]

    info('*** Adding host-switch links\n')
    net.addLink(s1, r1, intfName2='r1-eth1', params2={'ip': router_1})

    net.addLink(s2, r2, intfName2='r2-eth1', params2={'ip': router_2})

    net.addLink(s3, r3, intfName2='r3-eth1', params2={'ip': router_3})

    info('*** Adding router-router links\n')
    net.addLink(
        r1,
        r2,
        intfName1='r1-eth2',
        intfName2='r2-eth2',
        params1={'ip': '{}/24'.format(linking_networks[0][1].compressed)},
        params2={'ip': '{}/24'.format(linking_networks[0][2].compressed)})
    net.addLink(
        r2,
        r3,
        intfName1='r2-eth3',
        intfName2='r3-eth2',
        params1={'ip': '{}/24'.format(linking_networks[1][1].compressed)},
        params2={'ip': '{}/24'.format(linking_networks[1][2].compressed)})
    net.addLink(
        r1,
        r3,
        intfName1='r1-eth3',
        intfName2='r3-eth3',
        params1={'ip': '{}/24'.format(linking_networks[2][1].compressed)},
        params2={'ip': '{}/24'.format(linking_networks[2][2].compressed)})

    info('*** Adding routing\n')
    r1.cmd("ip route add 10.0.1.0/24 via 10.10.0.2 dev r1-eth2")
    r2.cmd("ip route add 10.0.0.0/24 via 10.10.0.1 dev r2-eth2")

    r2.cmd("ip route add 10.0.2.0/24 via 10.20.0.2 dev r2-eth3")
    r3.cmd("ip route add 10.0.1.0/24 via 10.20.0.1 dev r3-eth2")

    r1.cmd("ip route add 10.0.2.0/24 via 10.30.0.2 dev r1-eth3")
    r3.cmd("ip route add 10.0.0.0/24 via 10.30.0.1 dev r3-eth3")

    info('*** Adding hosts\n')
    d1 = net.addDocker(name='d1',
                       ip='10.0.0.251/24',
                       defaultRoute='via 10.0.0.1',
                       ports=[1883],
                       port_bindings={1883: 1883},
                       dimage=IMAGE_NAME,
                       environment={
                           "EMQX_NAME": "docker1",
                           "EMQX_HOST": "10.0.0.251",
                           "EMQX_NODE__DIST_LISTEN_MAX": 6379,
                           "EMQX_LISTENER__TCP__EXTERNAL": 1883,
                           "EMQX_CLUSTER__DISCOVERY": "static",
                           "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"
                       })

    d2 = net.addDocker(name='d2',
                       ip='10.0.1.252/24',
                       defaultRoute='via 10.0.1.1',
                       ports=[1883],
                       port_bindings={1883: 1884},
                       dimage=IMAGE_NAME,
                       environment={
                           "EMQX_NAME": "docker2",
                           "EMQX_HOST": "10.0.1.252",
                           "EMQX_NODE__DIST_LISTEN_MAX": 6379,
                           "EMQX_LISTENER__TCP__EXTERNAL": 1883,
                           "EMQX_CLUSTER__DISCOVERY": "static",
                           "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"
                       })

    d3 = net.addDocker(name='d3',
                       ip='10.0.2.253/24',
                       defaultRoute='via 10.0.2.1',
                       ports=[1883],
                       port_bindings={1883: 1885},
                       dimage=IMAGE_NAME,
                       environment={
                           "EMQX_NAME": "docker3",
                           "EMQX_HOST": "10.0.2.253",
                           "EMQX_NODE__DIST_LISTEN_MAX": 6379,
                           "EMQX_LISTENER__TCP__EXTERNAL": 1883,
                           "EMQX_CLUSTER__DISCOVERY": "static",
                           "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"
                       })

    info('*** Adding host-switch link\n')
    for d, s in [(d1, s1), (d2, s2), (d3, s3)]:
        print(net.addLink(d, s))

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

    info('*** Routing Table on Router:\n')
    print((net['r1'].cmd('route')))

    info('*** Routing Table on Router:\n')
    print((net['r2'].cmd('route')))

    info('*** Routing Table on Router:\n')
    print((net['r3'].cmd('route')))

    info('*** Testing connectivity\n')
    net.pingAll()

    info('*** Starting brokers\n')
    d1.start()
    d2.start()
    d3.start()

    CLI(net)
    net.stop()
def emulate():

    "Create a network with some docker containers acting as hosts."

    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController('c0')

    info('*** Adding hosts\n')
    h1 = net.addHost('h1')
    h2 = net.addHost('h2')

    info('*** Adding docker containers\n')
    d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty")
    
    # A container with more specific params: cpu period and cpu quota
    d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty", cpu_period=50000, cpu_quota=25000)

    # Add a container as a host, using Docker class option.
    d3 = net.addHost('d3', ip='11.0.0.253', cls=Docker, dimage="ubuntu:trusty", cpu_shares=20)

    # Add a container with a specific volume.
    d5 = net.addDocker('d5', dimage="ubuntu:trusty", volumes=["/:/mnt/vol1:rw"])

    info('*** Adding switch\n')
    s1 = net.addSwitch('s1')
    s2 = net.addSwitch('s2', cls=OVSSwitch)
    s3 = net.addSwitch('s3')

    info('*** Creating links\n')
    net.addLink(h1, s1)
    net.addLink(s1, d1)
    net.addLink(h2, s2)
    net.addLink(d2, s2)
    net.addLink(s1, s2)

    # try to add a second interface to a docker container
    net.addLink(d2, s3, params1={"ip": "11.0.0.254/8"})
    net.addLink(d3, s3)

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

    # The typical ping example, with two docker instances in place of hosts.
    net.ping([d1, d2])

    # our extended ping functionality
    net.ping([d1], manualdestip="10.0.0.252")
    net.ping([d2, d3], manualdestip="11.0.0.254")

    info('*** Dynamically add a container at runtime\n')
    d4 = net.addDocker('d4', dimage="ubuntu:trusty")

    # we have to specify a manual ip when we add a link at runtime
    net.addLink(d4, s1, params1={"ip": "10.0.0.254/8"})

    # Ping docker instance d1.
    net.ping([d1], manualdestip="10.0.0.254")

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network')
    net.stop()
Пример #29
0
    raise Exception(
        'Invalid number of command line arguments. Expected 1 but ' +
        str(len(sys.argv) - 1) + ' given.')
hostCount = int(sys.argv[1])
if hostCount < 1:
    raise Exception('Host count must be greater than 0.')

net = Containernet(controller=Controller)
info('*** Adding controller\n')
net.addController('c0')
info('*** Adding docker containers using ubuntu:trusty images\n')

# Add relayer
r0 = net.addDocker('r0',
                   dimage="lsk567/lambda_relayer",
                   ports=[5000],
                   port_bindings={5000: 4999},
                   dcmd="python -u relayer.py",
                   publish_all_ports=True)
# Add switch and actuator
nodes = {'switch': [], 'actuator': []}
for i in range(hostCount):
    nodes['switch'].append(
        net.addDocker(
            'sw' + str(i),
            dimage='lsk567/lambda_switch',
            ports=[5000],  # docker host ports to be opened
            port_bindings={5000:
                           (5000 + i)},  # { docker host port : machine port }
            dcmd='python -u switch.py ' +
            str(5000 + hostCount + i),  # pass in target actuator's port
            publish_all_ports=True))
Пример #30
0
def topology():
    "Create a network with some docker containers acting as hosts."

    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController('c0',
                      controller=RemoteController,
                      ip=CONTROLLER_IP,
                      port=6653)

    info('*** Adding hosts\n')
    h1 = net.addHost('h1')
    h2 = net.addHost('h2')

    info('*** Adding docker containers\n')
    d1 = net.addDocker('d1',
                       ip='10.0.0.251',
                       dimage="host-fluentd:latest",
                       log_driver='fluentd',
                       log_opts={
                           'fluentd-address': '{}:24224'.format(FLUENTD_IP),
                           'tag': 'docker-host-1'
                       },
                       environment={'FLUENTD_IP': FLUENTD_IP})
    d2 = net.addDocker('d2',
                       ip='10.0.0.252',
                       dimage="host-fluentd:latest",
                       cpu_period=50000,
                       cpu_quota=25000,
                       log_driver='fluentd',
                       log_opts={
                           'fluentd-address': '{}:24224'.format(FLUENTD_IP),
                           'tag': 'docker-host-2'
                       },
                       environment={'FLUENTD_IP': FLUENTD_IP})
    d3 = net.addHost('d3',
                     ip='11.0.0.253',
                     cls=Docker,
                     dimage="ubuntu:trusty",
                     cpu_shares=20)
    # using advanced features like volumes and exposed ports
    d5 = net.addDocker('d5',
                       dimage="ubuntu:trusty",
                       volumes=["/:/mnt/vol1:rw"],
                       ports=[9999],
                       port_bindings={9999: 9999},
                       publish_all_ports=True)

    info('*** Adding switch\n')
    s1 = net.addSwitch('s1')
    s2 = net.addSwitch('s2', cls=OVSSwitch)
    s3 = net.addSwitch('s3')

    info('*** Creating links\n')
    net.addLink(h1, s1)
    net.addLink(s1, d1)
    net.addLink(h2, s2)
    net.addLink(d2, s2)
    net.addLink(s1, s2)
    # net.addLink(s1, s2, cls=TCLink, delay="100ms", bw=1, loss=10)
    # try to add a second interface to a docker container
    net.addLink(d2, s3, params1={"ip": "11.0.0.254/8"})
    net.addLink(d3, s3)

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

    net.ping([d1, d2])

    # our extended ping functionality
    net.ping([d1], manualdestip="10.0.0.252")
    net.ping([d2, d3], manualdestip="11.0.0.254")

    info('*** Dynamically add a container at runtime\n')
    d4 = net.addDocker('d4', dimage="ubuntu:trusty")
    # we have to specify a manual ip when we add a link at runtime
    net.addLink(d4, s1, params1={"ip": "10.0.0.254/8"})
    # other options to do this
    # d4.defaultIntf().ifconfig("10.0.0.254 up")
    # d4.setIP("10.0.0.254")

    net.ping([d1], manualdestip="10.0.0.254")

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network')
    net.stop()
The images to be tested can be found in 'examples/example-containers'.
They are build with './build.sh'
"""
from mininet.net import Containernet
from mininet.node import Controller
from mininet.cli import CLI
from mininet.link import TCLink
from mininet.log import info, setLogLevel
setLogLevel('info')

net = Containernet(controller=Controller)
info('*** Adding controller\n')
net.addController('c0')

info('*** Adding docker containers\n')
d1 = net.addDocker('d1', dimage="ubuntu:trusty")
d2 = net.addDocker('d2', dimage="containernet_example:ubuntu1404")
d3 = net.addDocker('d3', dimage="containernet_example:ubuntu1604")
d4 = net.addDocker('d4', dimage="containernet_example:ubuntu1804")
d5 = net.addDocker('d5', dimage="containernet_example:centos6")
d6 = net.addDocker('d6', dimage="containernet_example:centos7")

info('*** Adding switches\n')
s1 = net.addSwitch('s1')

info('*** Creating links\n')
net.addLink(d1, s1)
net.addLink(d2, s1)
net.addLink(d3, s1)
net.addLink(d4, s1)
net.addLink(d5, s1)
net.addController('c0', port=6654)

info('*** Adding Router\n')
defaultIP = '172.17.0.0/24'  # IP address for r0-eth1
router = net.addNode('r0', cls=LinuxRouter, ip=defaultIP)

info('*** Adding docker containers using {} images\n'.format(IMAGE_NAME))

# port bindings is swapped (host_machine:docker_container)
d1 = net.addDocker(name='d1',
                   ip='10.0.0.251',
                   ports=[1883],
                   port_bindings={1883: 1883},
                   dimage=IMAGE_NAME,
                   environment={
                       "EMQX_NAME": "docker1",
                       "EMQX_HOST": "10.0.0.251",
                       "EMQX_NODE__DIST_LISTEN_MAX": 6379,
                       "EMQX_LISTENER__TCP__EXTERNAL": 1883,
                       "EMQX_CLUSTER__DISCOVERY": "static",
                       "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"
                   })

d2 = net.addDocker(name='d2',
                   ip='10.0.0.252',
                   ports=[1883],
                   port_bindings={1883: 1884},
                   dimage=IMAGE_NAME,
                   environment={
                       "EMQX_NAME": "docker2",
                       "EMQX_HOST": "10.0.0.252",
#!/usr/bin/python
"""
This is the most simple example to showcase Containernet.
"""
from mininet.net import Containernet
from mininet.node import Controller
from mininet.cli import CLI
from mininet.link import TCLink
from mininet.log import info, setLogLevel
setLogLevel('info')

net = Containernet(controller=Controller)
info('*** Adding controller\n')
net.addController('c0')
info('*** Adding docker containers\n')
d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty")
d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty")
info('*** Adding switches\n')
s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2')
info('*** Creating links\n')
net.addLink(d1, s1)
net.addLink(s1, s2, cls=TCLink, delay='100ms', bw=1)
net.addLink(s2, d2)
info('*** Starting network\n')
net.start()
info('*** Testing connectivity\n')
net.ping([d1, d2])
info('*** Running CLI\n')
CLI(net)
info('*** Stopping network')
Пример #34
0
info('*** Create the controller \n')
c0 = RemoteController('c0', ip='172.17.0.2', port=6633)
info(c0)
info('*** Create Simple topology example\n')

net = Containernet(build=False, link=TCLink)
# Initialize topology

# Add containers
info('*** Adding docker containers using local_test_machine1 images\n')

# Agregando host de la red
for i in range(0, num_machines):
    hosts.append(
        net.addDocker('h' + str(i + 1),
                      ip='10.0.0.' + str(i + 1),
                      dimage="local_test_machine1"))

# Agregando host de medida
c_h100 = net.addDocker('c_h100', ip='10.0.0.100', dimage="local_test_machine1")
s_h200 = net.addDocker('s_h200',
                       ip='10.0.0.200',
                       dimage="local_test_machine1",
                       volumes=[os.getcwd() + "/bw_logs:/mnt/bw_logs:rw"])

# Add switches
info('*** Adding switches\n')

s1 = net.addSwitch('s1', protocols='OpenFlow13')  #...
s2 = net.addSwitch('s2', protocols='OpenFlow13')  #...
class simpleTestTopology( unittest.TestCase ):
    """
        Helper class to do basic test setups.
        s1 -- s2 -- s3 -- ... -- sN
    """

    def __init__(self, *args, **kwargs):
        self.net = None
        self.s = []  # list of switches
        self.h = []  # list of hosts
        self.d = []  # list of docker containers
        self.docker_cli = None
        super(simpleTestTopology, self).__init__(*args, **kwargs)

    def createNet(
            self,
            nswitches=1, nhosts=0, ndockers=0,
            autolinkswitches=False):
        """
        Creates a Mininet instance and automatically adds some
        nodes to it.
        """
        self.net = Containernet( controller=Controller )
        self.net.addController( 'c0' )

        # add some switches
        for i in range(0, nswitches):
            self.s.append(self.net.addSwitch('s%d' % i))
        # if specified, chain all switches
        if autolinkswitches:
            for i in range(0, len(self.s) - 1):
                self.net.addLink(self.s[i], self.s[i + 1])
        # add some hosts
        for i in range(0, nhosts):
            self.h.append(self.net.addHost('h%d' % i))
        # add some dockers
        for i in range(0, ndockers):
            self.d.append(self.net.addDocker('d%d' % i, dimage="ubuntu:trusty"))

    def startNet(self):
        self.net.start()

    def stopNet(self):
        self.net.stop()

    def getDockerCli(self):
        """
        Helper to interact with local docker instance.
        """
        if self.docker_cli is None:
            self.docker_cli = docker.APIClient(
                base_url='unix://var/run/docker.sock')
        return self.docker_cli

    @staticmethod
    def setUp():
        pass

    @staticmethod
    def tearDown():
        cleanup()
        # make sure that all pending docker containers are killed
        with open(os.devnull, 'w') as devnull:
            subprocess.call(
                "docker rm -f $(docker ps --filter 'label=com.containernet' -a -q)",
                stdout=devnull,
                stderr=devnull,
                shell=True)

    def getContainernetContainers(self):
        """
        List the containers managed by containernet
        """
        return self.getDockerCli().containers(filters={"label": "com.containernet"})