Mininet系列实验(七):Mininet脚本实现控制交换机行为

1 实验目的

  • 熟悉Mininet自定义拓扑脚本的编写;
  • 掌握使用“ovs-vsctl”命令直接控制Open vSwitch。

2 实验原理

在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为。在本实验中,使用Mininet基于python的脚本,调用“ovs-vsctl”命令直接控制Open vSwitch。

3 实验任务

本实验在基于Mininet脚本的不同拓扑环境下使用OpenDaylight控制交换机行为。任务一:一台交换机两台主机,从1端口进入的数据流转发到2端口,从2端口进入的数据流转发到1端口;任务二:两台交换机两台主机,主机0连接交换机0,主机1连接交换机1,交换机0连接交换机1,数据转发端口同任务一;任务三:与任务二类似,但是在创建link的时候,设置带宽、延迟以及丢包率。

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

还是那个流程:

打开mininet文件夹——创建mymininet1.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 # 调用Mininet相关模块
 8
 9 from time import sleep
10 # 调用sleep模块
11
12 def scratchNet( cname='controller', cargs='-v ptcp:' ):
13     "Create network from scratch using Open vSwitch."
14
15     # 创建网络节点其中有两个主机,一个交换机,一个控制器
16     info( "*** Creating nodes\n" )
17     controller = Node( 'c0', inNamespace=False )
18     switch0 = Node( 's0', inNamespace=False )
19     h0 = Node( 'h0' )
20     h1 = Node( 'h1' )
21
22     # 创建网络连接,分别是h0-s0和h1-s0
23     info( "*** Creating links\n" )
24     Link( h0, switch0 )
25     Link( h1, switch0 )
26
27     # 设置主机的IP地址,然后再诊断的同时打印出string化的h0h1
28     info( "*** Configuring hosts\n" )
29     h0.setIP( '192.168.123.1/24' )
30     h1.setIP( '192.168.123.2/24' )
31     info( str( h0 ) + '\n' )
32     info( str( h1 ) + '\n' )
33
34     # 开启控制器和s0的链路
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
40     # 在交换机的信息库里面依次打出信息
41     for intf in switch0.intfs.values():
42         print intf
43         print switch0.cmd( 'ovs-vsctl add-port dp0 %s' % intf )
44     switch0.cmd( 'ovs-vsctl set-controller dp0 tcp:10.0.0.8:6633' )
45     switch0.cmd( 'ovs-ofctl add-flow dp0 \"in_port=1 actions=output:2\"' )
46     switch0.cmd( 'ovs-ofctl add-flow dp0 \"in_port=2 actions=output:1\"' )
47
48     # 等待连接的小程序
49     info( '*** Waiting for switch to connect to controller' )
50     while 'is_connected' not in quietRun( 'ovs-vsctl show' ):
51         sleep( 1 )
52         info( '.' )
53     info( '\n' )
54
55     # 两个互ping6次
56     info( "*** Running test\n" )
57     h0.cmdPrint( 'ping -c6 ' + h1.IP() )
58     h1.cmdPrint( 'ping -c6 ' + h0.IP() )
59
60     # 关闭这个网络
61     info( "*** Stopping network\n" )
62     controller.cmd( 'kill %' + cname )
63     switch0.cmd( 'ovs-vsctl del-br dp0' )
64     switch0.deleteIntfs()
65     info( '\n' )
66
67 # 主函数部分,设置打印等级,还有调用以上的一些函数
68 if __name__ == '__main__':
69     setLogLevel( 'info' )
70     info( '*** Scratch network demo (kernel datapath)\n' )
71     Mininet.init()
72     scratchNet()

任务二:两台交换机两台主机,主机0连接交换机0,主机1连接交换机1,交换机0连接交换机1,数据转发端口要求同任务一。

和前者的脚本大同小异,这里就解释mymininet1.py没有的,print switch0.cmd( 'ovs-ofctl show dp0' )意思就是打出关于s0的信息

  1.  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()

任务三:与任务二类似,但是在创建link的时候,设置带宽、延迟以及丢包率。

 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()

总结:

1.对ovs加深理解

2.能够完全看懂脚本

3.需要更深一步了解mininet的模块的函数

posted on 2018-09-11 17:42 李承泽 阅读(...) 评论(...) 编辑 收藏

Mininet系列实验(七):Mininet脚本实现控制交换机行为相关推荐

  1. Mininet 系列实验(七)

    实验内容 本实验在基于 Mininet 脚本的不同拓扑环境下使用 OpenDaylight 控制交换机行为.任务一:一台交换机两台主机,从1端口进入的数据流转发到 2 端口,从 2 端口进入的数据流转 ...

  2. Mininet系列实验(六):Mininet动态改变转发规则实验

    Mininet系列实验(六):Mininet动态改变转发规则实验 一. 实验目的 熟悉Mininet自定义拓扑脚本的编写: 熟悉编写POX脚本动态改变转发规则 二.实验原理 在SDN环境中,控制器可以 ...

  3. Mininet系列实验(三):Mininet命令延伸实验扩展

    Mininet系列实验(三):Mininet命令延伸实验扩展 1 实验目的 熟悉Mininet自定义拓扑三种实现方式:命令行创建.Python脚本编写.交互式界面创建. 2 实验原理 Mininet ...

  4. Mininet系列实验(五):Mininet设置带宽之简单性能测试

    Mininet系列实验(五):Mininet设置带宽之简单性能测试 1.实验目的 该实验通过Mininet学习python自定义拓扑实现,可在python脚本文件中设计任意想要的拓扑,简单方便,并通过 ...

  5. Mininet系列实验(二):Mininet可视化应用

    Mininet系列实验(二):Mininet可视化应用 1 实验目的 该实验通过Mininet学习miniedit可视化操作,可直接在界面上编辑任意想要的拓扑,生成python自定义拓扑脚本,简单方便 ...

  6. Mininet 系列实验(一)

    关于SDN的第一个实验,似乎实验室里的前辈们也都是从这里开始的. 实验内容 使用源码安装Mininet 参考 Mininet使用源码安装 实验环境 虚拟机:Oracle VM VirtualBox U ...

  7. Mininet系列实验(一):Mininet使用源码安装

    Mininet系列实验(一):Mininet使用源码安装 1 实验目的 掌握Mininet使用源码安装的方法. 2 实验原理 Mininet 是一个轻量级软件定义网络和测试平台:它采用轻量级的虚拟化技 ...

  8. shell的建立与执行实验报告_实验七 Shell脚本运行的优化

    实验七 Shell脚本运行的优化 一.添加窗口 在Shell脚本的运行过程中,也可以实现类似于Windows系统和Linux系统中的窗口效果,使脚本运行美观. 1.dialog软件的安装 - dial ...

  9. Mininet系列实验(四):基于Mininet测量路径的损耗率

    1 实验目的 熟悉Mininet自定义拓扑脚本的编写与损耗率的设定: 熟悉编写POX脚本,测量路径损耗速率 2 实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为,此外 ...

最新文章

  1. 清华北大等12校首批开设“未来技术学院”,它们都设置了哪些专业?
  2. 求解一个数的所有约数之积
  3. 开启云原生 MOSN 新篇章 — 融合 Envoy 和 Golang 生态
  4. 央视记者王冰冰为何走红?博导和研究生写了一篇论文进行了分析
  5. 使用Python快速压缩目录中图片
  6. mysql中dml操作_MySQL的DML语言操作实例
  7. 第一次冲刺团队绩效评估
  8. Javascript 刷新框架及页面的方法汇总(转)
  9. php mysql追踪器_zf框架的数据库追踪器使用示例
  10. Device Mapper Multipath(DM-Multipath)
  11. H5 新特性之 fileReader 实现本地图片视频资源的预览
  12. 串口 浮点数 结构体_quot;结构体quot;和quot;共用体quot;在单片机中的妙用
  13. 复数加减结构体 c语言,C++定义描述复数的结构体类型变量,是想复数的输入输出。设计三个函数实现复数的加法,减法和乘法运算。...
  14. mate7 刷机 android 7,华为Mate7如何刷机 华为Mate7详细root刷机教程
  15. Linux 并发测试工具 httpd-tools工具的安装和使用
  16. 学术论文的标准格式是什么?写论文有哪些小技巧?
  17. php解析失败,php – 解析错误:语法错误,意外(T_VARIABLE)
  18. 不知道是真是假的流量购买---有待考察
  19. 胡小胖:微商创业必备的软件工具
  20. kindle4.1.1越狱

热门文章

  1. springboot:实现文件上传下载实时进度条功能【附带源码】
  2. Yocto系列讲解[理论篇]26 - BitBake全过程(4)
  3. 小学生体测测试环境怎么填_小学体测在各个学校展开 最新六年级测试项目及评价标准表一览...
  4. 考研英语词汇(部分)快速记忆
  5. android 阅读器自动滚动,在Android手机上实现阅读器翻页效果.doc
  6. 网站编辑企业如何应用智能员工节省了工资支出
  7. php云打印类,PHP应用:PHP云打印类完整示例
  8. system分区签名校验方法
  9. 如何用U盘进行装机?
  10. Pytorch简单一览表