【mininet 0x03】如何使用Python API来 *** 作mininet

【mininet 0x03】如何使用Python API来 *** 作mininet,第1张

mininet 系列文章链接归类:

【mininet 0x01】mininet环境搭建
【mininet 0x02】如何使用mn工具来 *** 作mininet
【mininet 0x03】如何使用Python API来 *** 作mininet
【mininet 0x04】使用ryu作为mininet的controller完成HUB功能
【mininet 0x05】使用ryu作为mininet的controller完成L2Switch功能


文章目录
  • mininet 系列文章链接归类:
  • 前言
  • 一、mininet 库功能一览
    • 1、Topo 类
    • 2、mininet 类
  • 二、Mininet 库常用函数的详细介绍
  • 三、如何使用
  • 四、实战效果
  • 总结


前言

  上一节我们学习了如何用mn工具去进行拓扑搭建,可以进入mn之后,手动创建switch、link、host ....也可以根据mn工具预置好的拓扑形状进行拓扑创建,如果我们想自己定制一个拓扑形状,或者基于mininet做更多复杂的 *** 作,那么就需要调用 python API去 *** 作mininet

一、mininet 库功能一览 1、Topo 类

   mininet拓扑结构的main class

2、mininet 类

   建立和管理网路main class

二、Mininet 库常用函数的详细介绍

   Topo类关键 func一览表:

序号方法功能
0addHost()给拓扑结构添加一个host,并返回host的名字
1addSwitch()给拓扑结构添加一个switch,并返回switch的名字
2addLink()给拓扑结构添加一个双向link,并返回link的key
3build()Topo类init()阶段会去调用的一个函数,可以通过此函数干预初始化函数预置拓扑
4port()根据src dst switch name 获取port_list

   Mininet类关键 func一览表:

序号方法功能
0start()开启网路
1stop()关闭网路
2addSwitch()向拓扑中添加一台switch
3addHost()向拓扑中添加一台host
4addController()向拓扑中添加一个控制器
5addLink()向拓扑中添加一条双向连接
6addNAT()向mininet 网络中添加一个NAT规则
7net.hosts网路中所有的主机
8setLogLevel( ‘info’ ‘debug’ ‘output’ )设置日志等级
三、如何使用 四、实战效果

   拉出官方的例子:

"""Custom topology example

Two directly connected switches plus a host for each switch:

   host --- switch --- switch --- host

Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""

from mininet.topo import Topo

class MyTopo( Topo ):
    "Simple topology example."

    def build( self ):
        "Create custom topo."

        # Add hosts and switches
        leftHost = self.addHost( 'h1' )
        rightHost = self.addHost( 'h2' )
        leftSwitch = self.addSwitch( 's3' )
        rightSwitch = self.addSwitch( 's4' )

        # Add links
        self.addLink( leftHost, leftSwitch )
        self.addLink( leftSwitch, rightSwitch )
        self.addLink( rightSwitch, rightHost )

topos = { 'mytopo': ( lambda: MyTopo() ) }

  根据mininet库的使用介绍:

To start up a mininet with the provided custom topology, do:
  sudo mn --custom <custom_example.py> --topo mytopo

  将 替换为自己编写的py文件即可。

  在环境中 *** 作如下:

如果觉得每次都调用 sudo mn --custom --topo mytopo 比较麻烦,可以将代码改为如下,使用python代码创建mininet网络并进入mininet CLI

#!/usr/bin/python
"""Custom topology example

Two directly connected switches plus a host for each switch:

   host --- switch --- switch --- host
"""

from mininet.cli import CLI
from mininet.topo import Topo
from mininet.net import Mininet

class MyTopo( Topo ):
    "Simple topology example."

    def build( self ):
        "Create custom topo."

        # Add hosts and switches
        leftHost = self.addHost( 'h1' )
        rightHost = self.addHost( 'h2' )
        leftSwitch = self.addSwitch( 's3' )
        rightSwitch = self.addSwitch( 's4' )

        # Add links
        self.addLink( leftHost, leftSwitch )
        self.addLink( leftSwitch, rightSwitch )
        self.addLink( rightSwitch, rightHost )

if __name__ == '__main__':
    net = Mininet(topo=MyTopo())
    net.start()
    CLI(net)
    net.stop()

  PS: 在上述实验中过程中,比较好奇mininet使用的是哪个controller,无意间搜到如下进程:
  /usr/bin/ovs-testcontroller ptcp:6653

  因此demo里面用的controllerovs自带的一个test_controller,因此下一篇我们重点研究一下controller

总结

  以上便是mininet python API 的简单使用方法。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/719161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存