https://blog.csdn.net/sdnlab/article/details/41962879

https://www.sdnlab.com/16874.html

https://github.com/floodlight/oftest

【概要】SDN功能测试工具通过发送协议数据包并根据被测试对象的反馈来判断其功能的完整性,比较典型的工具是OFTest,它模拟控制器向交换机发送OpenFlow协议从而达到测试OpenFlow交换机的目的。

1 工具简介

OFTest是一个基于Python的测试OpenFlow规范的框架和测试套件,它支持1.0/1.2/1.3版本的OpenFlow协议。在测试环境中OFTest相当于一个控制器,   它可以主动或者被动与交换机连接,获取交换机信息来测试OF交换机基本功能。

OFTest对OpenFlow不同协议的支持是通过分析控制平面和数据平面的数据包来判定的,当OFTest模拟控制器发送消息到交换机,收到交换机的响应时,确定出交换机支持的功能。OFTest测试框架如图1所示:

图1 OFTest测试框架

Oftest/oft脚本是进入test框架的接入点,所有测试例都从oft脚本开始运行并在test mode list中进行匹配。运行oftest框架包括两个部分:

(1)建立支持OF协议的python库,所有测试脚本都用python写;

(2)运行oft 。

2 安装

(1)安装依赖:Python2.4/2.5/2.6/2.7、pypcap、scapy。

其它可选软件:Doxygen、doxypy、lint、tcpdump。如果没有安装pypcap可能会导致有关使用VLAN标签的测试失败。

(2)安装OFTest


OFTest安装好后,其默认配置为一个协议为OpenFlow1.0的交换机一直试图连接OFTest的控制器上,端口是6653,使用虚拟端口veth1, veth3, veth5, and veth7连接到数据平面。

(3)运行OFTest,必须在超级用户下执行。

3 使用方法

表 1. OFTest命令通用参数

说明:

(1)--list详细的罗列出所有的测试用例,包括标准用例、非标准用例和禁用用例,非标准用例使用'*'标志,可要求供应商扩展或特殊的交换机配置。禁用用例通常用于试验,有某些特殊用途的,或者是太长而无法正常运行,这些都不是标准测试组的一部分。这里列出输入该参数后的部分测试列表:

(2)--list-test-names屏蔽了对每一个测试例的解释:

表 2. OFTest测试对象参数

测试用例模块可以通过刚刚介绍的list查出来,如执行一个load模块:

表 3. OFTest交换机连接参数

说明:

(1)platform主要是定义oft与switch连接的portmap。它使用veth.py脚本连接本地虚拟机,参数platform的默认值是“veth”,测试远程的交换机使用remote.py,此时参数platform值配置为“remote”,或者使用命令行sudo ./oft --platform=remote修改,也可以添加自己的*.py文件测试远程交换机,方法同remote。

(2)配置oft与switch连接使用的协议版本,OFTest默认测试版本为1.0,也可以手动修改为1.2或者1.3版本,如./oft –V 1.2将OFTest测试版本修改为1.2,测试过程中需要注意交换机和oft的OF协议版本要保持一致。

表 4. OFTest日志参数

说明:

log-file参数可以用于日志的输出位置设置,默认产生的log输出到oft.log文件中,修改log-file=“”可以使log输出到控制台上,也可以定义自己的log文件。

表 5. OFTest测试行为参数

4 应用实例

下面一共例举了三个实例,分别是测试本地OvS交换机、物理SDN交换机、Mininet自带的交换机。

测试环境准备:

■用于测试的3种OpenFlow交换机;

■Root权限运行oft测试工具;

■交换机运行OpenFlow1.0协议,并尝试与oft模拟的控制器连接;

实例一:使用OFTest测试本地虚拟OF交换机

通过测试本地虚拟交换机的功能初步了解oft的运行方式。

(1)下载并运行本地虚拟交换机.

run_switch.py是OFtest提供的一个用于veth口并启动交换机进程的脚本,在最初执行该脚本时我们可以看到如下结果。

可以看出模拟的交换机一直在尝试与OFTest建立连接,由于OFTest还没启动所以日志中连接失败了。

(2)运行oft。

测试用例的执行方式有多种,执行./oft为直接运行所有的测试用例,运行时可以看到每个测试用例的运行结果是成功还是失败。如下:

此时我们也可以从run_switch.py日志看出交换机的连接情况:

另外我们还可以运行具体的某个测试用例,可以先用sudo ./oft --list列出所有的mode和其对应的测试用例。 例如 sudo ./oft flow_matches.UdpDstPort就表明使用flow_matches模块下的UdpDstPort测试用例。

用例执行的其他方式大家可以自行研究。

(3)通过抓包和日志分析虚拟交换机功能是否正常。测试的抓包分析部分截图如下图所示:

(4)测试结束后,使用sudo rmmod veth命令删除交换机产生的虚接口。

实例二:使用OFTest测试物理交换机

该实例使用真实物理交换机,OFTest作为控制器,测试真实的物理交换机与OFTest交互是否正确。

(1)修改platforms/remote.py,port_map={eth0}(根据自己虚拟机的环境修改,此处eth0为运行oft的虚拟机的网口),其它配置使用默认即可。

(2)根据测试环境修改测试用例。如测试port_stats,需要修改OFTest/tests/port_stats.py,原测试用例要求oftset与被测试交换机的端口建立连接,被测试交换机有3个port,并且需要在这3个port之间添加流表并互相收发数据包改变端口的状态,而测试物理交换机只需要向交换机发送port stats请求包即可,以上过程需要去除。

(3)物理交换机向OFTest发起连接请求。例如ovs-vsctl set-controller br0 tcp:192.168.5.124:6653,其中192.168.5.124为OFTest的eth0地址,6653为监听端口。我们可以看到物理交换机与OFTest建立了连接关系:

(4)运行测试用例,命令如下:

(5)通过抓包和日志分析交换机与OFTest之间的交互过程。

实例三:使用OFTest测试远端Mininet中的OF交换机

该实例测试对象为Mininet中的虚拟交换机,重点是为了测试交换机为remote的情况。

(1)根据实际环境修改oft监听交换机的 IP地址和端口;

(2)修改oftest/platforms/remote.py,port_map={eth0}(portmap终端为运行oft的虚拟机的网口,根据虚拟机的实际情况修改);

(3)安装远端Mininet,运行Mininet交换机,并向oft发出连接请求;

(4)运行OFTest,将platform参数改为remote,testmod.testcase换成真实的测试用例:

或者将oft脚本中的platform参数改为remote:

在Mininet中也可看出交换机与OFTest建立连接:

一般情况下oft提供的测试用例与测试环境不相符,直接使用会使测试结果不正确,建议使用Wireshark抓包、查看oft.log日志和脚本调试信息等方法分析错误原因,修改测试脚本。

5 结束语

由此可见OFTest确实是一款功能强大的SDN交换机测试工具,但这仅仅是不够的,SDN交换机还需要从其他方面进行全面的测试,例如:

●图像更新测试:检查image的下载时间和状态、冷启动和热启动后系统的工作情况、逆向更新image等。

●复杂拓扑测试:分别在不同的Packet bytes下检查丢包情况。

●重启测试: 测试设备在各种工作状态下重启,是否可以正常重启,是否可以正确进入系统,启动过程中/启动后系统/串口无错误打印。

●表项测试:检查各profile的可配置资源数、满配检查各项是否可以满配等。

●性能测试:测试对RFC2544协议的支持、流安装和卸载、Packet-In /Out发送接收等。

●互通性与压力测试:与控制器的互通情况,或者通过自动化脚本进行文件读写的操作等。

本文来源于SDNLAB,可点击此阅读原文。如果您对本文感兴趣,可参与以下互动方式与作者近距离交流。
————————————————

SDN交换机功能测试工具OFTest安装与使用总结相关推荐

  1. SDN网络下有哪些SDN交换机选择?

    随着SDN技术的发展,SDN网络架构迎来了历史性的变革,SDN被认为是下一代网络变革的重要方向.而SDN交换机作为一款高性能,高密度的下一代交换机,为SDN大规模的商用部署和下一代网络技术的创新应用, ...

  2. [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(四) -- 安装bitbucket 5.7.0

    [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(四) -- 安装bitbucket 5.7.0 安装Bitbucket的教程, 网上能找见的不多, ...

  3. [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(三) -- 安装confluence 6.6.1

    [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(三) -- 安装confluence 6.6.1 有了安装Jira的经验, 这次再安装conflue ...

  4. SDN交换机配置说明—微云

    SDN交换机采用虚拟网络设备技术,不仅可以实现扩展数据链路层,而且还能够实现安全.具有弹性.自适应的云计算基础网络.那么SDN交换机该如何安装配置. SDN交换机的安装 1.为了能够使SDN交换机实现 ...

  5. SDN交换机在云计算网络中的应用场景

    SDN的技术已经发展了好几年了,而云计算的历史更长,两者的结合更是作为SDN的一个杀手级应用在近两年炒得火热,一些知名咨询公司的关于SDN逐年增加的市场份额的论断,也主要是指SDN在云计算网络中的应用 ...

  6. Mininet+OVS:如何更改SDN交换机的流表条目上限

    前言 流表是SDN交换机转发的重要环节.当一个不匹配的流量进入交换机时,交换机通过packet-in上报控制器,控制器以flow-mod应答,并在交换机中安装对应规则. OVS中提供了对于流表的支持, ...

  7. FAST:基于FPGA的SDN交换机开源项目

    自1983年自由软件运动领袖Richard Stallman提出了GNU计划以来,开源为软件开发带来了创造性的革命和商业成功.SDN如今的快速发展也离不开开源社区的力量,比如NOX.Floodligh ...

  8. mysql 物理备份工具_mysql物理备份工具Xtrabackup安装配置

    mysql物理备份工具Xtrabackup安装配置 1Xtrabackup工具介绍 Xtrabackup是一个对InnoDB做物理数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具 ...

  9. Xamarin.Form的Android SDK工具下载安装

    Xamarin.Form的Android SDK工具下载安装 本节将讲解如何下载Xamarin.Form的Android SDK工具,并使用其中的工具管理Android SDK,如何创建模拟器等内容. ...

最新文章

  1. 使用扩展方法和静态门面类实现伪领域对象
  2. LR12的log解释
  3. java面试题2(java基础)
  4. mysql操作日志记录查询_详解mysql数据库参数log_timestamps--控制日志记录使用的时区...
  5. ARM Cortex-A 编程手册学习笔记
  6. 关于const变量的一点理解
  7. .NET Core开发实战(第21课:中间件:掌控请求处理过程的关键)--学习笔记(下)...
  8. 共享打印机从网络访问此计算机,win7连接共享打印机时出现,你没有权限访问网络资源...
  9. 【ZooKeeper Notes 5】单机启动多个zk实例注意点
  10. [渝粤教育] 中国地质大学 审计学 复习题 (2)
  11. 高中计算机课程事例,【高中信息技术教学案例】_《高中信息技术新课程教学案例集》介绍...
  12. 备查:ASCII码表
  13. HBase shell命令
  14. 12个开放平台大家一起来玩
  15. 基于微信网页版二维码扫码支付
  16. 这些问题你是否也有中招?TMT行业质量报告新鲜出炉
  17. mysql生日提醒_生日提醒为我所有的用户mysql
  18. CSDN上传资源无法设置积分了吗
  19. jar -cvfM0 暂使用 jar cvf不好用
  20. Ae:导入 Photoshop 文件

热门文章

  1. mmdetection报错:ImportError: /home/user/repos/mmdetection/mmdet/ops/dcn/deform_conv_cuda.cpython-37m-x
  2. P2P 终结者 for Linux
  3. 基于asp.net345汽车销售管理系统
  4. springboot中药知识分享网站设计 毕业设计-附源码201818
  5. TCP多线程实现文件上传
  6. rust中文补丁steam_steam腐蚀中文设置
  7. 求助:使用jCreator编写一个applet小程序
  8. 4个好用的图片去水印工具,图片去水印这样做就对了
  9. PRD产品需求文档概要
  10. 在配有英特尔® Iris™ 显卡的系统上通过优化对 Just Cause 3 进行增强