Mininet支持参数化拓扑,用几行python代码,你就可以创建一个基于你传进去的参数配置的灵活拓扑结构,还可被多个实验重复使用。

下面是一个小例子:(基于mininet/topo.py:SingleSwitchTopo,主机h1~hn都连接到单个交换机s1上

  1. #!/usr/bin/python
  2.  
  3. from mininet.topo import Topo
  4. from mininet.net import Mininet
  5. from mininet.util import dumpNodeConnections
  6. from mininet.log import setLogLevel
  7.  
  8. class SingleSwitchTopo(Topo):
  9. "Single switch connected to n hosts."
  10. def __init__(self, n=2, **opts):
  11. # Initialize topology and default options
  12. Topo.__init__(self, **opts)
  13. switch = self.addSwitch('s1')
  14. # Python's range(N) generates 0..N-1
  15. for h in range(n):
  16. host = self.addHost('h%s' % (h + 1))
  17. self.addLink(host, switch)
  18.  
  19. def simpleTest():
  20. "Create and test a simple network"
  21. topo = SingleSwitchTopo(n=4)
  22. net = Mininet(topo)
  23. net.start()
  24. print "Dumping host connections"
  25. dumpNodeConnections(net.hosts)
  26. print "Testing network connectivity"
  27. net.pingAll()
  28. net.stop()
  29.  
  30. if __name__ == '__main__':
  31. # Tell mininet to print useful information
  32. setLogLevel('info')
  33. simpleTest()

  下面逐一介绍在上述代码中主要的类、方法以及变量:

Topo:Mininet拓扑结构的基类

addSwitch():给拓扑结构中增加一个交换机,返回交换机名字

addHost():增加主机,返回主机名字

addLink():增加一个双向链接,返回链接的key。

Mininet:创建和管理网络的主要类

start():开启网络

pingAll():通过主机之间的互ping测试连通性

stop():关闭网络

net.hosts 网络中的所有主机

dumpNodeConnection():列出所有的连接

 

Mininet搭建网络有3种方法:

底层API:节点和links

  1. h1 = Host( 'h1' )
  2. h2 = Host( 'h2' )
  3. s1 = OVSSwitch( 's1', inNamespace=False )
  4. c0 = Controller( 'c0', inNamespace=False )
  5. Link( h1, s1 )
  6. Link( h2, s1 )
  7. h1.setIP( '10.1/8' )
  8. h2.setIP( '10.2/8' )
  9. c0.start()
  10. s1.start( [ c0 ] )
  11. print h1.cmd( 'ping -c1', h2.IP() )
  12. s1.stop()
  13. c0.stop()

中层API:网络对象

  1. net = Mininet()
  2. h1 = net.addHost( 'h1' )
  3. h2 = net.addHost( 'h2' )
  4. s1 = net.addSwitch( 's1' )
  5. c0 = net.addController( 'c0' )
  6. net.addLink( h1, s1 )
  7. net.addLink( h2, s1 )
  8. net.start()
  9. print h1.cmd( 'ping -c1', h2.IP() )
  10. CLI( net )
  11. net.stop()

高级API:拓扑模板

  1. class SingleSwitchTopo( Topo ):
  2. "Single Switch Topology"
  3. def __init__( self, count=1, **params ):
  4. Topo.__init__( self, **params )
  5. hosts = [ self.addHost( 'h%d' % i )
  6. for i in range( 1, count + 1 ) ]
  7. s1 = self.addSwitch( 's1' )
  8. for h in hosts:
  9. self.addLink( h, s1 )
  10.  
  11. net = Mininet( topo=SingleSwitchTopo( 3 ) )
  12. net.start()
  13. CLI( net )
  14. net.stop()

  

Mininet 搭建自定义网络的更多相关文章

  1. 将Mininet与真实网络相连接

    原文发表在我的博客主页,转载请注明出处 前言 Mininet是SDN网络仿真的一大利器,在小规模网络模拟使用上独领风骚,其开源性允许使用者按照自己的需求修改源码,得到想要的数据,其提供了多个函数用来满 ...

  2. Hyperledger Fabric手动生成CA证书搭建Fabric网络

    之前介绍了使用官方脚本自动化启动一个Fabric网络,并且所有的证书都是通过官方的命令行工具cryptogen直接生成网络中的所有节点的证书.在开发环境可以这么简单进行,但是生成环境下还是需要我们自定 ...

  3. 仿百度壁纸客户端(一)——主框架搭建,自定义Tab+ViewPager+Fragment

    仿百度壁纸客户端(一)--主框架搭建,自定义Tab+ViewPager+Fragment 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment ...

  4. 卷积神经网络特征图可视化(自定义网络和VGG网络)

    借助Keras和Opencv实现的神经网络中间层特征图的可视化功能,方便我们研究CNN这个黑盒子里到发生了什么. 自定义网络特征可视化 代码: # coding: utf-8 from keras.m ...

  5. 从零开始自己搭建复杂网络2(以Tensorflow为例)

    从零开始自己搭建复杂网络(以DenseNet为例) DenseNet 是一种具有密集连接的卷积神经网络.在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集, 而 ...

  6. CentOS6.8环境下搭建yum网络仓库

    CentOS6.8环境下搭建yum网络仓库 本文利用ftp服务,在CentOS6.8系统下搭建一个yum仓库,然后用另一台虚拟机访问该仓库.并安装程序包 安装ftp服务 查询ftp服务是否安装 [ro ...

  7. 从零开始自己搭建复杂网络(以Tensorflow为例)

    从零开始自己搭建复杂网络(以MobileNetV2为例) tensorflow经过这几年的发展,已经成长为最大的神经网络框架.而mobileNetV2在经过Xception的实践与深度可分离卷积的应用 ...

  8. Docker 自定义网络

    1.创建自定义网络 docker network create -d bridge --subnet 172.25.0.0/16 network_name 2.redis docker 添加到网络 d ...

  9. vmware上搭建kickstart 网络安装centos6.2的过程

    前言 什么是PXE? PXE(Pre-boot Execution Environment,预启动执行环境)协议使计算机可以通过网络启动.协议分client和server. PXE client 在网 ...

随机推荐

  1. 【转】ubuntu下putty的复制粘贴 -- 不错

    原文网址:http://www.nwber.com/?p=165 今天在ubutnu下想用putty玩玩,突然发现在windows里直接点击右键的复制居然不管用了,调设置也没有用.这可麻烦了,要是手动 ...

  2. Bucket Sort

    (referrence: GeekforGeeks) Bucket sort is mainly useful when input is uniformly distributed over a r ...

  3. Mysql 添加用户和数据库授权

    注:我的运行环境是widnows xp professional + MySQL5.0 一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY ...

  4. IOS 从Resource文件夹下Copy文件到沙盒

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.t ...

  5. [Exception] 当前 TransactionScope 已完成

    本文来自:http://www.cnblogs.com/loafer/archive/2010/06/03/TransactionScopeComplete.html 捕获异常的时候 经常会碰到这个异 ...

  6. 【Android开发经验】LayoutInflater—— 你可能对它并不了解甚至错误使用

    今天,看到了一篇文章讲LayoutInflater的使用方法.瞬间感觉自己对这个类确实不够了解,于是简单的看了下LayoutInflater类的源码.对这个类有了新的认识. 首先.LayoutInfl ...

  7. Maven 工程下 Spring MVC 站点配置 (三) C3P0连接池与@Autowired的应用

    Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 前两篇文章主要是对站点和数据库操作配置进行了演示,如果单 ...

  8. [KMP求最小循环节][HDU1358][Period]

    题意 求所有循环次数大于1的前缀 的最大循环次数和前缀位置 解法 直接用KMP求最小循环节 当满足i%(i-next[i])&&next[i]!=0 前缀循环次数大于1 最小循环节是i ...

  9. .net如何后台批量删除

    button_Click(Sender sender,Event e){foreach (DataListItem item in DataList1.Items){CheckBox cbox=(Ch ...

  10. Javascript进阶篇——(流程控制语句)笔记整理

    做判断(if语句)if语句是基于条件成立才执行相应代码时使用的语句.语法: if(条件){ 条件成立时执行代码 } 例子:假设你应聘web前端技术开发岗位,如果你会HTML技术,你面试成功,欢迎加入公 ...