【Mininet】Mininet脚本实现控制交换机行为

实验参考:

Mininet脚本实现控制交换机行为

实验步骤:

1. 一台交换机两台主机,实现从1端口进入的数据流转发到2端口,从2端口进入的数据流转发到1端口。

1. 创建新文件mymininet1.py并编辑以下内容(注意要将控制器设置为Opendaylight安装的虚拟机,即修改第37行代码,之后同理):

 

 1 #!/usr/bin/python 
 2 from mininet.net import Mininet
 3 from mininet.node import Node
 4 from mininet.link import Link
 5 from mininet.log import setLogLevel, info
 6 from mininet.util import quietRun
 7  
 8 from time import sleep
 9  
10 def scratchNet( cname='controller', cargs='-v ptcp:' ):
11     "Create network from scratch using Open vSwitch."
12  
13     info( "*** Creating nodes\n" )
14     controller = Node( 'c0', inNamespace=False )
15     switch0 = Node( 's0', inNamespace=False )
16     h0 = Node( 'h0' )
17     h1 = Node( 'h1' )
18  
19     info( "*** Creating links\n" )
20     Link( h0, switch0 )
21     Link( h1, switch0 )
22  
23     info( "*** Configuring hosts\n" )
24     h0.setIP( '192.168.123.1/24' )
25     h1.setIP( '192.168.123.2/24' )
26     info( str( h0 ) + '\n' )
27     info( str( h1 ) + '\n' )
28  
29     info( "*** Starting network using Open vSwitch\n" )
30     controller.cmd( cname + ' ' + cargs + '&' )
31     switch0.cmd( 'ovs-vsctl del-br dp0' )
32     switch0.cmd( 'ovs-vsctl add-br dp0' )
33  
34     for intf in switch0.intfs.values():
35         print intf
36         print switch0.cmd( 'ovs-vsctl add-port dp0 %s' % intf )
37     switch0.cmd( 'ovs-vsctl set-controller dp0 tcp:10.0.0.8:6633' )
38     switch0.cmd( 'ovs-ofctl add-flow dp0 \"in_port=1 actions=output:2\"' )
39     switch0.cmd( 'ovs-ofctl add-flow dp0 \"in_port=2 actions=output:1\"' )
40  
41     info( '*** Waiting for switch to connect to controller' )
42     while 'is_connected' not in quietRun( 'ovs-vsctl show' ):
43         sleep( 1 )
44         info( '.' )
45     info( '\n' )
46  
47     info( "*** Running test\n" )
48     h0.cmdPrint( 'ping -c6 ' + h1.IP() )
49     h1.cmdPrint( 'ping -c6 ' + h0.IP() )
50  
51     info( "*** Stopping network\n" )
52     controller.cmd( 'kill %' + cname )
53     switch0.cmd( 'ovs-vsctl del-br dp0' )
54     switch0.deleteIntfs()
55     info( '\n' )
56  
57 if __name__ == '__main__':
58     setLogLevel( 'info' )
59     info( '*** Scratch network demo (kernel datapath)\n' )
60     Mininet.init()
61     scratchNet()

 

2. 改为可执行文件并将其执行:

 

2. 两台交换机两台主机,主机0连接交换机0,主机1连接交换机1,交换机0连接交换机1,数据转发端口要求同1。

1. 创建新文件mymininet2.py并编辑以下内容:

 

 1 #!/usr/bin/python 
 2 from mininet.net import Mininet
 3 from mininet.node import Node
 4 from mininet.link import Link
 5 from mininet.log import setLogLevel, info
 6 from mininet.util import quietRun
 7  
 8 from time import sleep
 9  
10 def scratchNet( cname='controller', cargs='-v ptcp:' ):
11     "Create network from scratch using Open vSwitch."
12  
13     info( "*** Creating nodes\n" )
14     controller = Node( 'c0', inNamespace=False )
15     switch0 = Node( 's0', inNamespace=False )
16     switch1 = Node( 's1', inNamespace=False )
17     h0 = Node( 'h0' )
18     h1 = Node( 'h1' )
19  
20     info( "*** Creating links\n" )
21     Link( h0, switch0 )
22     Link( h1, switch1 )
23     Link( switch0, switch1 )
24  
25     info( "*** Configuring hosts\n" )
26     h0.setIP( '192.168.123.1/24' )
27     h1.setIP( '192.168.123.2/24' )
28     info( str( h0 ) + '\n' )
29     info( str( h1 ) + '\n' )
30  
31     info( "*** Starting network using Open vSwitch\n" )
32     controller.cmd( cname + ' ' + cargs + '&' )
33     switch0.cmd( 'ovs-vsctl del-br dp0' )
34     switch0.cmd( 'ovs-vsctl add-br dp0' )
35     switch1.cmd( 'ovs-vsctl del-br dp1' )
36     switch1.cmd( 'ovs-vsctl add-br dp1' )
37  
38  
39     for intf in switch0.intfs.values():
40         print intf
41         print switch0.cmd( 'ovs-vsctl add-port dp0 %s' % intf )
42  
43     for intf in switch1.intfs.values():
44         print intf
45         print switch1.cmd( 'ovs-vsctl add-port dp1 %s' % intf )
46  
47     switch0.cmd( 'ovs-vsctl set-controller dp0 tcp:10.0.0.8:6633' )
48     switch1.cmd( 'ovs-vsctl set-controller dp1 tcp: 10.0.0.8:6633' )
49     switch0.cmd( 'ovs-ofctl add-flow dp0 \"in_port=1 actions=output:2\"' )
50     switch0.cmd( 'ovs-ofctl add-flow dp0 \"in_port=2 actions=output:1\"' )
51     switch1.cmd( 'ovs-ofctl add-flow dp1 \"in_port=1 actions=output:2\"' )
52     switch1.cmd( 'ovs-ofctl add-flow dp1 \"in_port=2 actions=output:1\"' )
53  
54  
55     info( '*** Waiting for switch to connect to controller' )
56     while 'is_connected' not in quietRun( 'ovs-vsctl show' ):
57         sleep( 1 )
58         info( '.' )
59     info( '\n' )
60     print switch0.cmd( 'ovs-ofctl show dp0' )
61     print switch1.cmd( 'ovs-ofctl show dp1' )
62  
63  
64     info( "*** Running test\n" )
65     h0.cmdPrint( 'ping -c3 ' + h1.IP() )
66     h1.cmdPrint( 'ping -c3 ' + h0.IP() )
67  
68     info( "*** Stopping network\n" )
69     controller.cmd( 'kill %' + cname )
70     switch0.cmd( 'ovs-vsctl del-br dp0' )
71     switch0.deleteIntfs()
72     switch1.cmd( 'ovs-vsctl del-br dp1' )
73     switch1.deleteIntfs()
74     info( '\n' )
75  
76 if __name__ == '__main__':
77     setLogLevel( 'info' )
78     info( '*** Scratch network demo (kernel datapath)\n' )
79     Mininet.init()
80     scratchNet()

 

2. 改为可执行文件并将其执行:

 

3. 与2类似,但是在创建link的时候,设置带宽、延迟以及丢包率。

1. 创建新文件mymininet3.py并编辑以下内容:

 

 1 #!/usr/bin/python 
 2 from mininet.net import Mininet
 3 from mininet.node import Node
 4 from mininet.link import TCLink
 5 from mininet.log import setLogLevel, info
 6 from mininet.util import quietRun
 7  
 8 from time import sleep
 9  
10 def scratchNet( cname='controller', cargs='-v ptcp:' ):
11     "Create network from scratch using Open vSwitch."
12  
13     info( "*** Creating nodes\n" )
14     controller = Node( 'c0', inNamespace=False )
15     switch0 = Node( 's0', inNamespace=False )
16     switch1 = Node( 's1', inNamespace=False )
17     h0 = Node( 'h0' )
18     h1 = Node( 'h1' )
19  
20     info( "*** Creating links\n" )
21  
22     linkopts0=dict(bw=10)
23     linkopts1=dict(bw=10, delay='5ms', loss=10)
24     TCLink( h0, switch0,**linkopts0)
25     TCLink( h1, switch1,**linkopts0)
26     TCLink( switch0, switch1,**linkopts1)
27  
28  
29     info( "*** Configuring hosts\n" )
30     h0.setIP( '192.168.123.1/24' )
31     h1.setIP( '192.168.123.2/24' )
32     info( str( h0 ) + '\n' )
33     info( str( h1 ) + '\n' )
34  
35     info( "*** Starting network using Open vSwitch\n" )
36     controller.cmd( cname + ' ' + cargs + '&' )
37     switch0.cmd( 'ovs-vsctl del-br dp0' )
38     switch0.cmd( 'ovs-vsctl add-br dp0' )
39     switch1.cmd( 'ovs-vsctl del-br dp1' )
40     switch1.cmd( 'ovs-vsctl add-br dp1' )
41  
42  
43     for intf in switch0.intfs.values():
44         print intf
45         print switch0.cmd( 'ovs-vsctl add-port dp0 %s' % intf )
46  
47     for intf in switch1.intfs.values():
48         print intf
49         print switch1.cmd( 'ovs-vsctl add-port dp1 %s' % intf )
50  
51     switch0.cmd( 'ovs-vsctl set-controller dp0 tcp:10.0.0.8:6633' )
52     switch1.cmd( 'ovs-vsctl set-controller dp1 tcp: 10.0.0.8:6633' )
53     switch0.cmd( 'ovs-ofctl add-flow dp0 \"in_port=1 actions=output:2\"' )
54     switch0.cmd( 'ovs-ofctl add-flow dp0 \"in_port=2 actions=output:1\"' )
55     switch1.cmd( 'ovs-ofctl add-flow dp1 \"in_port=1 actions=output:2\"' )
56     switch1.cmd( 'ovs-ofctl add-flow dp1 \"in_port=2 actions=output:1\"' )
57  
58  
59     info( '*** Waiting for switch to connect to controller' )
60     while 'is_connected' not in quietRun( 'ovs-vsctl show' ):
61         sleep( 1 )
62         info( '.' )
63     info( '\n' )
64     print switch0.cmd( 'ovs-ofctl show dp0' )
65     print switch1.cmd( 'ovs-ofctl show dp1' )
66  
67  
68     info( "*** Running test\n" )
69     h0.cmdPrint( 'ping -c3 ' + h1.IP() )
70     h1.cmdPrint( 'ping -c3 ' + h0.IP() )
71  
72     info( "*** Stopping network\n" )
73     controller.cmd( 'kill %' + cname )
74     switch0.cmd( 'ovs-vsctl del-br dp0' )
75     switch0.deleteIntfs()
76     switch1.cmd( 'ovs-vsctl del-br dp1' )
77     switch1.deleteIntfs()
78     info( '\n' )
79  
80 if __name__ == '__main__':
81     setLogLevel( 'info' )
82     info( '*** Scratch network demo (kernel datapath)\n' )
83     Mininet.init()
84     scratchNet()

 

2. 改为可执行文件并将其执行:

 

 

实验结论:

在Mininet脚本中,可以通过使用“ovs-vsctl”命令直接控制Open vSwitch,实现通信。

转载于:https://www.cnblogs.com/ptolemy/p/11255985.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab2018b中svm无法运行,关于matlab2018a版本错误使用 svmclassify 分类器

当我们照常使用分类器函数svmclassify时,2018版的matlab会报出以下错误:解决办法:1,下载libsvm(一般下载最新版本就ok了)包,并将其添加至matlab的toolbox文件里。并打开matlab编辑器,主页 / 设置路径 / 添…

【Mininet】Mininet MAC地址学习实验

实验参考: Mininet MAC地址学习实验 实验步骤: 1. 在虚拟机上启动mininet,创建一个线型拓扑(如下图所示),控制器设置为无(# sudo mn –-topo linear –-mac –-switch ovsk –-controllernone&a…

【Mininet】基于Mininet的VxLAN实验

实验参考: 基于Mininet的VxLAN实验 实验步骤: 1. 如下图所示,在两台虚拟机中利用mininet创建两个网络,利用VxLAN连通这两个mininet环境。关闭默认的控制器后,通过下发流表确保网络的连通性: 2. 先查看两台虚…

Ajax基石脚本异步并发调用参数传递

在Ajax开发框架中,最基本的划分是服务器端和客户端。服务器端相对来说比较简单,只要是可以开发动态网页的语言都可以胜任;客户端浏览器就是JScript/JavaScript的天下了,好像没有看到有VBScript做的Ajax客户端库,就算它…

matlab disteclud,机器学习实战ByMatlab(3)K-means算法

K-means算法属于无监督学习聚类算法,其计算步骤还是挺简单的,思想也挺容易理解,而且还可以在思想中体会到EM算法的思想。K-means 算法的优缺点:1.优点:容易实现2.缺点:可能收敛到局部最小值,在大…

智能安全实验室-Defendio杀马2.4.0.420-实时防护-内存防护、新浏览器导航界面...

智能安全实验室-杀马(Defendio) 2.4.0.420 :实时防护-内存防护、新浏览器导航界面等 详细信息请访问:http://unruledboy.cnblogs.com/archive/2006/02/02/Defendio.html怎样获取最新版本?□智能更新:打开现…

【RTOS】基于V7开发板的最新版FreeRTOS V10.2.0程序模板,含MDK和IAR,支持串口打印任务执行情况...

模板下载: 链接:https://pan.baidu.com/s/1N32Hx7cTbDoRinuzTUB3zw 提取码:6aox 1、MDK使用MDK5.26及其以上版本。 2、IAR使用IAR8.30及其以上版本。 3、教程直可以先看之前发布的,除了新增的一些功能,其它功能基本…

自动图片轮播php源码,js实现自动图片轮播代码

本文实例为大家分享了轮播的具体代码,自动轮播,居中显示,供大家参考,具体内容如下#div1{width: 192px;height: 120px;border: 1px solid gray;margin: 0 auto;position: relative;overflow: hidden;}#div1 img{position: absolute…

【Open vSwitch】Open vSwitch使用案例扩展实验

实验参考: Open vSwitch使用案例扩展实验 实验步骤: 1. 实验任务一。 1.创建新文件ovsSingleBr.py并编辑以下内容: 1 #!/usr/bin/python2 3 from mininet.net import Mininet4 from mininet.node import Node5 from mininet.link import Lin…

【Open vSwitch】Open vSwitch的GRE隧道实验网络

实验参考: Open vSwitch的GRE隧道实验网络 实验步骤: 1. 配置VM: 1. 本次要实现的拓扑如下: 先验证虚拟机VM1的OvS服务是否被启动好: 2. 在VM1中创建两个bridge: 1 # ovs-vsctl add-br br0 2 # ovs-vsctl add-br br1 3…

php web音视频通话,实现音视频通话(Web)

实现音视频通话(Web)网易云信音视频通话产品的基本功能包括高质量的实时音视频通话。当您成功初始化 SDK 之后,您可以简单体验本产品的基本业务流程。本文档为您展示音视频通话提供的基本业务流程。前提条件请确认您已完成以下操作:快速跑通Sample Code注…

【Open vSwitch】Open vSwitch的VxLAN隧道网络实验

验参考: Open vSwitch的VxLAN隧道网络实验 实验步骤: 1. 预先配置: 1. 验证两虚拟机的OvS服务是否被启动好: # ps –ef|grep ovs 2. 登陆两台安装Mininet的虚拟机,分别查看IP地址: VM1(192.168.0.102&#…

centos oracle创建库,CentOS Oracle安装必要的软件创建数据库

CentOS Oracle安装系统的特性,既可作为高校计算机专业CentOS Oracle安装学习,也可以作为CentOS系统开源爱好者、CentOS系统用户CentOS Oracle安装系统的特性,,既可作为高校计算机专业CentOS Oracle安装学习,也可以作为…

【Open vSwitch】Open vSwitch流表应用实战

实验参考: Open vSwitch流表应用实战 如何在ubuntu系统下搭建一个opendaylight Beryllium版本环境 实验步骤: 1. 前期准备。 1.创建2个虚拟机,一个是选择OpenDaylight镜像的虚拟机作为控制器(注:内存大于2G&#xff09…

oracle sql loop merge,Oracle之存储过程和MERGE INTO语句

一、MERGE INTO语句1、merge into语句的功能:我们操作数据库的时候,有时候会遇到insert或者Update这种需求。我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方法效验数据是否存在,这种操作完全可以用merge into语句代替&…

七月暴雨

狼是弱者 是生命无从着落的弱者 是黯然神伤的异族 它们此刻在星光月夜里 悲情地凝望厮守缠绵过的故园 在逡巡的感伤里作别 为了生命 为了延续 选择死亡或者选择离去 就像时间无意从指间滑过一样 悄悄的溜走 没有…

【OpenFlow】OpenFlow1.3协议基于Mininet部署与验证

实验参考: OpenFlow1.3协议基于Mininet部署与验证 实验步骤: 1. 安装mininet,具体步骤请看实验参考。 2. Mininet创建拓扑后连接支持OpenFlow1.3的控制器: 在连接前,可以通过命令确认控制器的端口号: 3. 进…

【OpenDaylight】OpenDaylight的C/S模式实验

实验参考: OpenDaylight的C/S模式实验 实验步骤: 1. 启动OpenDaylight: 查看是否开启: 或: 2. 查看OpenDaylight的IP地址: 3. 用Miniet创建简易拓扑并连接ODL: 4. 在OpenDaylight虚拟机上查看监…

linux vnc 改端口号,基于Linux中vnc配置端口号的修改方法

vnc的默认端口是自己配置的,并不是这有一个端口号。通过打开/etc/sysconfig/vncservers。 这里就配置了2个桌面,一个桌面号是1, 一个是2.这里的配置的参数VNCSERVERS"2:root"VNCSERVERARGS[2]"-geometry 1280x800"就可以…

linux怎么查看本地磁盘空间,linux怎么查看磁盘空间

如果你在使用Linux过程中遇到无法读写磁盘,应用程序无法执行,请求响应不了等问题,那多半是Linux系统磁盘空间满了,那么怎么查看Linux磁盘空间呢?下面跟着学习啦小编一起来了解一下吧。linux怎么查看磁盘空间首先如果需要查看整个…