zoukankan      html  css  js  c++  java
  • 初试mininet(可选PyCharm)

    0x00 Mininet

    尝试理解一下mininet,话说mininet是基于python编写的,代码结构清晰,简直清醒脱俗((≧▽≦)/啦啦啦),附上链接mininet,mark一下。

    0x01 Important classes, methods, functions

    简单记录一下比较重要的类和方法

    Important classes, methods, functions and variables in the above code include:
    
    Topo: the base class for Mininet topologies
    
    build(): The method to override in your topology class. Constructor parameters (n) will be passed through to it automatically by Topo.__init__().
    
    addSwitch(): adds a switch to a topology and returns the switch name
    
    addHost(): adds a host to a topology and returns the host name
    
    addLink(): adds a bidirectional link to a topology (and returns a link key, but this is not important). Links in Mininet are bidirectional unless noted otherwise.
    
    Mininet: main class to create and manage a network
    
    start(): starts your network
    
    pingAll(): tests connectivity by trying to have all nodes ping each other
    
    stop(): stops your network
    
    net.hosts: all the hosts in a network
    
    dumpNodeConnections(): dumps connections to/from a set of nodes.
    
    setLogLevel( 'info' | 'debug' | 'output' ): set Mininet's default output level; 'info' is recommended as it provides useful information.
    

    0x02 Sample

    自己写了一个简单的,h1~h5链接到s1, h6~h10链接到s2,然后s1和s2互联
    一开始想着SingleSwitchTopo的方法来写LinearTopo,结果一直报错,╮(╯_╰)╭,明明人家代码都写好了
    SingleSwitchTopoSingle switch connected to k hosts,而Linear topology of k switches, with n hosts per switch

    #!/usr/bin/python
    
    from mininet.topo import Topo
    from mininet.net import Mininet
    from mininet.util import irange,dumpNodeConnections
    from mininet.log import setLogLevel
    
    class LinearTopo(Topo):
        ""
        """Linear topology of k switches, with n hosts per switch."""
        ""
        def __init__(self, k=2, n=5,**opts):
    
            """k:number of switches (and hosts)"""
            """hconf: host configuration options"""
            """lconf: ling configuration options"""
            super(LinearTopo, self).__init__(**opts)
            self.n = n
            self.k = k
            """creates 2 switchs"""
            switch1 = self.addSwitch('s1')
            switch2 = self.addSwitch('s2')
    
            """creates h1~h5 and addLink switch1"""
    
            for i in irange(1,n):
                host = self.addHost('h%s' %i)
                self.addLink(host,switch1)
    
            """creates h6~h10 and addLink switch2"""
    
            for i in irange(n+1,n+5):
                host =self.addHost('h%s' %i)
                self.addLink(host,switch2)
    
            """addLink switch1 and switch2"""
            self.addLink(switch1,switch2)
    
    
    def simpleTest():
        "Create and test a simple network"
        topo = LinearTopo(k=2,n=5)
        net = Mininet(topo)
        #start the network
        net.start()
        print "Dumping host connections"
        dumpNodeConnections(net.hosts)
    
        #test the connections of the network
        print "Testing network connectivity"
        net.pingAll()
    
        #Test the bandwidth of the h* and h*
        print "Testing bandwidth between h1 and h2"
        h1, h2 = net.get('h1', 'h2')
        net.iperf((h1,h2))
    
        print "Testing bandwidth between h10 and h1"
        h10, h1 = net.get('h10', 'h1')
        net.iperf((h10,h1))
    
    
        #stop the network
        net.stop()
    
    if __name__== '__main__':
        # Tell mininet to print useful information
        setLogLevel('info')
        simpleTest()
    

    0x04 run in shell

    命令行直接运行

    #将代码保存到一个文件中
    sudo vi test.py
    
    #运行
    sudo python test.py
    

    0x05 Output

    *** Creating network
    *** Adding controller
    *** Adding hosts:
    h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 
    *** Adding switches:
    s1 s2 
    *** Adding links:
    (h1, s1) (h2, s1) (h3, s1) (h4, s1) (h5, s1) (h6, s2) (h7, s2) (h8, s2) (h9, s2) (h10, s2) (s1, s2) 
    *** Configuring hosts
    h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 
    *** Starting controller
    c0 
    *** Starting 2 switches
    s1 s2 ...
    Dumping host connections
    h1 h1-eth0:s1-eth1
    h2 h2-eth0:s1-eth2
    h3 h3-eth0:s1-eth3
    h4 h4-eth0:s1-eth4
    h5 h5-eth0:s1-eth5
    h6 h6-eth0:s2-eth1
    h7 h7-eth0:s2-eth2
    h8 h8-eth0:s2-eth3
    h9 h9-eth0:s2-eth4
    h10 h10-eth0:s2-eth5
    Testing network connectivity
    *** Ping: testing ping reachability
    h1 -> h2 h3 h4 h5 h6 h7 h8 h9 h10 
    h2 -> h1 h3 h4 h5 h6 h7 h8 h9 h10 
    h3 -> h1 h2 h4 h5 h6 h7 h8 h9 h10 
    h4 -> h1 h2 h3 h5 h6 h7 h8 h9 h10 
    h5 -> h1 h2 h3 h4 h6 h7 h8 h9 h10 
    h6 -> h1 h2 h3 h4 h5 h7 h8 h9 h10 
    h7 -> h1 h2 h3 h4 h5 h6 h8 h9 h10 
    h8 -> h1 h2 h3 h4 h5 h6 h7 h9 h10 
    h9 -> h1 h2 h3 h4 h5 h6 h7 h8 h10 
    h10 -> h1 h2 h3 h4 h5 h6 h7 h8 h9 
    *** Results: 0% dropped (90/90 received)
    Testing bandwidth between h1 and h2
    *** Iperf: testing TCP bandwidth between h1 and h2 
    *** Results: ['35.8 Gbits/sec', '35.8 Gbits/sec']
    Testing bandwidth between h10 and h1
    *** Iperf: testing TCP bandwidth between h10 and h1 
    *** Results: ['36.4 Gbits/sec', '36.4 Gbits/sec']
    *** Stopping 1 controllers
    c0 
    *** Stopping 11 links
    ...........
    *** Stopping 2 switches
    s1 s2 
    *** Stopping 10 hosts
    h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 
    *** Done
    

    0x06 Problems

    遇到的问题:
    一.Mininet只能使用python2使用python3不行,即使用外部库也不行
    二.PyCharm配置root运行文件
    一开始我没有使用shell来运行,而是使用了PyCharm来跑,然后出现了一个问题,就是Mininet must run as a root,即必须以管理员身份进行,所以需要在PyCharm上设置管理员运行,具体做法:

    • 1.在/usr/bin/目录下新建文件 python_sudo.sh :
    sudo gedit /usr/bin/python_sudo.sh
    

    在文件中写入下列代码:

    #! /bin/bash 
    sudo python $*
    
    • 2.给sh文件赋予权限:
    cd /usr/bin/
    sudo chmod a+x python_sudo.sh
    
    • 3.编辑visudo(其他工具有点问题):
    sudo visudo
    
    • 4.在最后一行输入,然后保存:
    %sudo ALL=NOPASSWD: /usr/bin/python
    
    • 5.将pycharm 中的

    File→Settings→Project Interpreter
    置换为自己写的python_sudo.sh,在下图选中框右边有个小齿轮,点那个进行Add就OK了

    • 6.同理可以对python3等进行设定,只要在将python改成对应版本就可以(前提是在这个目录下已安装)

    0x07 Paint

    一个能用画图工具

    sudo apt-get install kolourpaint4
    

    然后搜paint就OK了

  • 相关阅读:
    网站优化记录
    在pc游览器端模拟移动端幻灯片
    jquery消息提示框
    开发jquery tab 插件
    js检测是否安装了flash插件
    javaweb项目下解决360兼容模式不能下载文件问题
    简单的excel上传解析和错误反馈信息下载
    sqlserver带游标存储过程及调用函数
    oracle带游标存储过程编写
    简单的spring+dubbo提供和消费方
  • 原文地址:https://www.cnblogs.com/FlyerBird/p/10453772.html
Copyright © 2011-2022 走看看