首页

科技
手机搜狐
SOHU.COM

云端卫士实战录 | OFTest 的安装和使用

云端卫士
2017-02-17
+关注

云端卫士《实战录》栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,2017年我们将一如既往地为朋友们奉献更多优质内容。本期分享人为云端卫士工程师欧文玉美眉,主要介绍OFTest 的安装和使用。

1. OFTest简介

OFTest是基于python的用于测试openflow交换机的框架,现已经可以用来测试Openflow 1.0, 1.2, 1.3, 1.4版本。它在测试环境中相当于一个控制器,可以主动或被动的与交换机连接,从而获取of交换机的信息并测试交换机的基本功能。

OFTest对OpenFlow不同协议的支持是通过分析控制平面和数据平面的数据包来判定的,如果oftest发送给交换机的消息得到了交换机的响应,则确定该交换机支持这项功能,反之则认为该交换机不支持。

OFTest测试框架如图1所示:

2. 安装OFTest

展开剩余91%

所用环境:一台系统为centos7的虚拟机

2.1安装依赖

首先需要安装python2.7,如果已经安装了,先用version命令确认一下自己的虚机中是不是2.7版本的,如果不是的话最好升级一下,此处就不详细说明了。

其次安装scapy,注意这里是scapy不是scrapy,scapy安装直接使用yum即可,命令如下:

# yum install scapy

其他可选软件:pypcapy,tcpdump(最好要有),doxygen,doxpy,lint(我未安装)。如果没有安装pypcapy可能会导致有关使用VLAN标签的测试失败。

2.2安装OFTest

Oftest代码直接从github下载:

# git clone git://github.com/floodlight/oftest

# cd oftest

运行OFTest

# ./oft

oftest/oft脚本是进入test框架的接入点,所有测试例都从oft脚本开始运行并在test mode list中进行匹配,所以下载完成后便可以直接使用./oft运行所有的测试用例,如需选择性的运行只需加上对应参数。运行oftest框架包括两个部分:

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

(2)运行oft 。

2.3配置OFTest

OFTest运行时默认为openflow 1.0,若要测试其他版本只需要将oft中的参数openflow_version改为相应的版本即可。 1.2、1.3、1.4的测试例分别在文件夹tests-1.2 ,tests-1.3,test-1.4中,可见测试例很少,需要根据需要自己添加。添加测试例需要按照相应的版本协议构建数据包。

# Switch connection options

……

"openflow_version" : "1.0",//修改此处切换版本号

测试远程交换机时,需要修改remote.py中的参数,按自己虚机和交换机的实际情况修改,如下:

仅供参考

# Update this dictionary to suit your environment.

remote_port_map = {

23 : "eth2",//of交换机的23端口连接到OFTest本地eth2

24 : "eth3",

25 : "eth4",

26 : "eth5"

}

修改配置之后运行./oft提示“port_map”失败,可先运行./run_switch.py激活交换机。

注意:oftest与onos一样是连接到6653口上的控制器,所以不能同时运行!

运行以下脚本确保交换机已连接到控制器并且用例能启动:./oft basic.Echo

显示成功:

以/test-1.3/groups.py为例

一个class即为一个测试用例,使用前可以进入测试用例脚本查看所需的用例,然后输入命令:# ./oft groups.GroupAdd

即可运行此用例。

以下是OFTest常用的命令参数:

表 1. OFTest命令通用参数

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

--list-test-names屏蔽了对每一个测试例的解释。

其余命令视情况用--help查询,这里就不一一例举了。

3. 实战演练

3.1用优先级来测试交换机flow容量

测试交换机型号:盛科v350

首先用python写好测试用的代码,大致如下:

仅供参考

class Overwrite(base_tests.SimpleDataPlane):

"""

Verify that overwriting a flow changes most fields but preserves stats

"""

def runTest(self):

in_port, out_port1, out_port2 = openflow_ports(3)

delete_all_flows(self.controller) //首先清空所有flow

table_id = test_param_get("table", 0)

match = ofp.match([

ofp.oxm.in_port(in_port),

])

priority = 1

ppid = priority

while ppid < 3000: //设置优先级数值如果小于3000则递增

logging.info("Inserting flow")

request = ofp.message.flow_add(

table_id=table_id,

match=match,

instructions=[

ofp.instruction.apply_actions([ofp.action.output(out_port1)]),

],

buffer_id=ofp.OFP_NO_BUFFER,

priority=ppid,

flags=ofp.OFPFF_SEND_FLOW_REM,

cookie=random.randint(0,9007199254740992))//构造flow表

self.controller.message_send(request)

do_barrier(self.controller)

ppid += 1

# Check that the fields in the flow stats entry match the second flow-add

stats = get_flow_stats(self, ofp.match())

self.assertEquals(len(stats), 1)

entry = stats[0]

logging.debug(entry.show())

self.assertEquals(entry.instructions, request.instructions)

self.assertEquals(entry.flags, request.flags)

self.assertEquals(entry.cookie, request.cookie)

将代码保存到tests-1.3目录下,并执行命令:./oft flow

等代码运行结束,到交换机上查询结果,观察最高优先级的那条flow即可得知交换机最大容量,如图:

此处使用3000作为最大值的原因是,估测到此交换机的容量大约为2000多条,使用者可根据实际情况更改用例。

3.2用groupId来测试group表容量

代码大致如下:

仅供参考

class GroupAdd(GroupTest):

def runTest(self):

port1, = openflow_ports(1)

id = 0

while id < 64: //设置groupid最大值,如果小于64则递增

msg = ofp.message.group_add(

group_type=ofp.OFPGT_ALL,

group_id=id,

buckets=[

ofp.bucket(actions=[ofp.action.output(port1)])])

self.controller.message_send(msg)

do_barrier(self.controller)

id+=1 //构建group表

Stats= get_stats(self, ofp.message.group_desc_stats_request())

self.assertEquals(stats, [

ofp.group_desc_stats_entry(

group_type=msg.group_type,

group_id=msg.group_id,

buckets=msg.buckets)])

等代码运行结束,到交换机上查询结果,观察groupId最大的那条group表即可得知交换机最大容量,如图:

原理与flow的测试用例相似。

4.总结

用oftest的测试用例来测试,用例运行结束后提示的成功或失败并不是最重要的,重要的是交换机上的表项结果是否达成预期。

参考

http://blog.163.com/he_junwei/blog/static/1979376462015124410240/

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

“云端卫士”是中盈优创资讯科技有限公司旗下的系列安全产品的主品牌,为客户提供全系列、一体化、可运营的安全产品,包括网络攻击追踪溯源系统、网络攻击检测分析系统、网络流量态势感知系统、安全威胁态势感知系统、安全运营支撑系统、分布式抗拒绝服务攻击系统等。

帅哥为什么要拒绝美女的微信?

声明:本文由入驻搜狐号作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。

网站地图

用户反馈 合作
Copyright © 2018 Sohu.com