Mininet 搭建自定义网络
Mininet支持参数化拓扑,用几行python代码,你就可以创建一个基于你传进去的参数配置的灵活拓扑结构,还可被多个实验重复使用。
下面是一个小例子:(基于mininet/topo.py:SingleSwitchTopo,主机h1~hn都连接到单个交换机s1上
)
- #!/usr/bin/python
- from mininet.topo import Topo
- from mininet.net import Mininet
- from mininet.util import dumpNodeConnections
- from mininet.log import setLogLevel
- class SingleSwitchTopo(Topo):
- "Single switch connected to n hosts."
- def __init__(self, n=2, **opts):
- # Initialize topology and default options
- Topo.__init__(self, **opts)
- switch = self.addSwitch('s1')
- # Python's range(N) generates 0..N-1
- for h in range(n):
- host = self.addHost('h%s' % (h + 1))
- self.addLink(host, switch)
- def simpleTest():
- "Create and test a simple network"
- topo = SingleSwitchTopo(n=4)
- net = Mininet(topo)
- net.start()
- print "Dumping host connections"
- dumpNodeConnections(net.hosts)
- print "Testing network connectivity"
- net.pingAll()
- net.stop()
- if __name__ == '__main__':
- # Tell mininet to print useful information
- setLogLevel('info')
- simpleTest()
下面逐一介绍在上述代码中主要的类、方法以及变量:
Topo:Mininet拓扑结构的基类
addSwitch():给拓扑结构中增加一个交换机,返回交换机名字
addHost():增加主机,返回主机名字
addLink():增加一个双向链接,返回链接的key。
Mininet:创建和管理网络的主要类
start():开启网络
pingAll():通过主机之间的互ping测试连通性
stop():关闭网络
net.hosts 网络中的所有主机
dumpNodeConnection():列出所有的连接
Mininet搭建网络有3种方法:
底层API:节点和links
- h1 = Host( 'h1' )
- h2 = Host( 'h2' )
- s1 = OVSSwitch( 's1', inNamespace=False )
- c0 = Controller( 'c0', inNamespace=False )
- Link( h1, s1 )
- Link( h2, s1 )
- h1.setIP( '10.1/8' )
- h2.setIP( '10.2/8' )
- c0.start()
- s1.start( [ c0 ] )
- print h1.cmd( 'ping -c1', h2.IP() )
- s1.stop()
- c0.stop()
中层API:网络对象
- net = Mininet()
- h1 = net.addHost( 'h1' )
- h2 = net.addHost( 'h2' )
- s1 = net.addSwitch( 's1' )
- c0 = net.addController( 'c0' )
- net.addLink( h1, s1 )
- net.addLink( h2, s1 )
- net.start()
- print h1.cmd( 'ping -c1', h2.IP() )
- CLI( net )
- net.stop()
高级API:拓扑模板
- class SingleSwitchTopo( Topo ):
- "Single Switch Topology"
- def __init__( self, count=1, **params ):
- Topo.__init__( self, **params )
- hosts = [ self.addHost( 'h%d' % i )
- for i in range( 1, count + 1 ) ]
- s1 = self.addSwitch( 's1' )
- for h in hosts:
- self.addLink( h, s1 )
- net = Mininet( topo=SingleSwitchTopo( 3 ) )
- net.start()
- CLI( net )
- net.stop()
Mininet 搭建自定义网络的更多相关文章
- 将Mininet与真实网络相连接
原文发表在我的博客主页,转载请注明出处 前言 Mininet是SDN网络仿真的一大利器,在小规模网络模拟使用上独领风骚,其开源性允许使用者按照自己的需求修改源码,得到想要的数据,其提供了多个函数用来满 ...
- Hyperledger Fabric手动生成CA证书搭建Fabric网络
之前介绍了使用官方脚本自动化启动一个Fabric网络,并且所有的证书都是通过官方的命令行工具cryptogen直接生成网络中的所有节点的证书.在开发环境可以这么简单进行,但是生成环境下还是需要我们自定 ...
- 仿百度壁纸客户端(一)——主框架搭建,自定义Tab+ViewPager+Fragment
仿百度壁纸客户端(一)--主框架搭建,自定义Tab+ViewPager+Fragment 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment ...
- 卷积神经网络特征图可视化(自定义网络和VGG网络)
借助Keras和Opencv实现的神经网络中间层特征图的可视化功能,方便我们研究CNN这个黑盒子里到发生了什么. 自定义网络特征可视化 代码: # coding: utf-8 from keras.m ...
- 从零开始自己搭建复杂网络2(以Tensorflow为例)
从零开始自己搭建复杂网络(以DenseNet为例) DenseNet 是一种具有密集连接的卷积神经网络.在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集, 而 ...
- CentOS6.8环境下搭建yum网络仓库
CentOS6.8环境下搭建yum网络仓库 本文利用ftp服务,在CentOS6.8系统下搭建一个yum仓库,然后用另一台虚拟机访问该仓库.并安装程序包 安装ftp服务 查询ftp服务是否安装 [ro ...
- 从零开始自己搭建复杂网络(以Tensorflow为例)
从零开始自己搭建复杂网络(以MobileNetV2为例) tensorflow经过这几年的发展,已经成长为最大的神经网络框架.而mobileNetV2在经过Xception的实践与深度可分离卷积的应用 ...
- Docker 自定义网络
1.创建自定义网络 docker network create -d bridge --subnet 172.25.0.0/16 network_name 2.redis docker 添加到网络 d ...
- vmware上搭建kickstart 网络安装centos6.2的过程
前言 什么是PXE? PXE(Pre-boot Execution Environment,预启动执行环境)协议使计算机可以通过网络启动.协议分client和server. PXE client 在网 ...
随机推荐
- 【转】ubuntu下putty的复制粘贴 -- 不错
原文网址:http://www.nwber.com/?p=165 今天在ubutnu下想用putty玩玩,突然发现在windows里直接点击右键的复制居然不管用了,调设置也没有用.这可麻烦了,要是手动 ...
- Bucket Sort
(referrence: GeekforGeeks) Bucket sort is mainly useful when input is uniformly distributed over a r ...
- Mysql 添加用户和数据库授权
注:我的运行环境是widnows xp professional + MySQL5.0 一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY ...
- IOS 从Resource文件夹下Copy文件到沙盒
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.t ...
- [Exception] 当前 TransactionScope 已完成
本文来自:http://www.cnblogs.com/loafer/archive/2010/06/03/TransactionScopeComplete.html 捕获异常的时候 经常会碰到这个异 ...
- 【Android开发经验】LayoutInflater—— 你可能对它并不了解甚至错误使用
今天,看到了一篇文章讲LayoutInflater的使用方法.瞬间感觉自己对这个类确实不够了解,于是简单的看了下LayoutInflater类的源码.对这个类有了新的认识. 首先.LayoutInfl ...
- Maven 工程下 Spring MVC 站点配置 (三) C3P0连接池与@Autowired的应用
Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 前两篇文章主要是对站点和数据库操作配置进行了演示,如果单 ...
- [KMP求最小循环节][HDU1358][Period]
题意 求所有循环次数大于1的前缀 的最大循环次数和前缀位置 解法 直接用KMP求最小循环节 当满足i%(i-next[i])&&next[i]!=0 前缀循环次数大于1 最小循环节是i ...
- .net如何后台批量删除
button_Click(Sender sender,Event e){foreach (DataListItem item in DataList1.Items){CheckBox cbox=(Ch ...
- Javascript进阶篇——(流程控制语句)笔记整理
做判断(if语句)if语句是基于条件成立才执行相应代码时使用的语句.语法: if(条件){ 条件成立时执行代码 } 例子:假设你应聘web前端技术开发岗位,如果你会HTML技术,你面试成功,欢迎加入公 ...