编者按:上一篇《SDN控制器测试专题三:Floodlight南向接口测试报告(上)》根据SDN控制器南向接口测试方案,对Floodlight控制器做了功能测试,本篇将继续对Floodlight控制器进行虚网间隔离、故障倒换以及QoS的测试实验。
1 测试目的
验证Floodlight v1.0控制器的南向接口基本功能:
- 跨网段测试
- 虚网间隔离
- 故障倒换
- Qos测试
2 测试准备
测试环境同上篇《SDN控制器测试专题三:Floodlight南向接口测试报告(上)》,此处不再赘述。
3 测试执行
3.1 跨网段测
测试目的:
验证控制器通过配置虚拟网络和交换策略,实现跨网段通信。
测试拓扑:
预期结果:
1.跨网段可以通信。
实际结果:
1.Floodlight不支持跨网段三层通信。
测试说明:
备注:floodligt是基于二层转发,不支持跨网段三层通信配置,具体可查看官网文档http://docs.projectfloodlight.org/display/floodlightcontroller。
3.2 虚网间隔离
测试目的:
1.验证虚网间通信隔离。
测试拓扑:
操作步骤:
1.启动Floodlight控制器,在配置文件Floodlightdefault.properties,指定
VirtualNetworkFilter模块路径
2.启动控制器成功后,登陆控制器web页面,查看VirtualNetworkFilter模块是否已加载成功,在modules loaded中有下面截图中所展示的模块,说明已加载成功
3.模拟测试拓扑,连接Floodlight控制器,控制器发现拓扑正确
4.控制器配置虚网,虚网网关,使用如下命令
创建两个虚网:virtualNetwork1 virtualNetwork2
1 |
curl -X PUT -d '{ "network": { "gateway": "100.0.0.254", "name": "virtualNetwork1" } }' http://192.168.5.36:8080/networkService/v1.1/tenants/default/networks/1 |
1 |
curl -X PUT -d '{ "network": { "gateway": "200.0.0.254", "name": "virtualNetwork2" } }' http://192.168.5.36:8080 /networkService/v1.1/tenants/default/networks/2 |
绑定h1到虚网virtualNetwork1:
1 |
curl -X PUT -d '{"attachment": {"id": "1", "mac": "00:01:00:00:00:00"}}' http://192.168.5.36:8080/networkService/v1.1/tenants/default/networks/1/ports/2/attachment |
绑定h2到虚网virtualNetwork2:
1 |
curl -X PUT -d '{"attachment": {"id": "2", "mac": "00:01:00:00:00:01"}}' http://192.168.5.36:8080/networkService/v1.1/tenants/default/networks/2/ports/2/attachment |
5.配置成功后,查看配置情况,使用如下命令
http://192.168.5.36:8080/networkService/v1.1/tenants/default/networks
查看结果如下
6.通过源host向目的host 发ping包,不通。
预期结果:
1.虚网间隔离,host之间不能通信。
实际结果:
1.源host向目的host发ping包,ping不通,与预期结果一致。
测试说明:
Floodlight控制器虚网间ping不通流程分析:
通过查看Floodlight官网资料,发现VirtualNetworkFilter模块工作原理如下:
当加载了虚网模块,Floodlight启动时没有创建虚拟网络,结果是主机之间不能相互通信。一旦用户创建了虚拟网络,就可以将主机加入虚网。虚网模块会在包消息处理链转发前,将自己插入其中。包接收到后它会查找源mac地址和目的mac地址。如果两个mac地址在相同的虚拟网络中,模块会返回继续命令(Command.CONTINUE),流量就会继续被处理。如果源mac地址和目的mac地址在不同的网络中,模块会返回停止命令(Command.STOP),包就被丢弃了。
结论:在我们的测试组网中,源host的mac地址属于virtualNetwork1,目的host 的mac属于virtualNetwork2.当源host向目的host发ping包时,在虚网模块包就会根据mac不在同一个虚网间的条件被丢弃而导致Floodlight控制器虚网间不能互通。
3.3故障倒换
测试目的:
1.验证交换机链路状态发生拥塞或者故障时,控制器能感知网络链路的状态,下发新流表正确。
测试拓扑:
操作步骤:
1.启动Floodlight控制器
2.模拟上图测试拓扑,控制器链路发现正常
3.在源host上ping目的host,可ping通,通过控制器web页面,查看流表信息
流表:h1 --s1-- s5-- h5
4.在ping的过程中将交换机dpid为 00:00:00:00:00:00:00:01与00:00:00:00:00:00:00:05之间的直连link down掉,从web页面查看拓扑动态更新如下图
5.继续观测流表情况,link down掉之后,ping不通,重新ping后观察流表情况如下
流表:h1 --s1-- s2-- s5-- h5
预期结果:
1.链路断开ping操作会产生丢包,但是能迅速恢复。
实际结果:
1.ping的过程中将link down掉,ping不通,不能迅速恢复;
2.重新ping,控制器重新下发流表,可以ping通。
测试说明:
一直ping过程中将link down掉,不能自动恢复,必须重新ping才能触发控制器下发新流表。测试未达到预期结果。
3.4 Qos测试
测试目的:
1.验证控制器下发具有Qos标记的流表项正确。
测试拓扑:
操作步骤:
1.下载支持Qos的Floodlight版本,下载路径:
https://github.com/wallnerryan/floodlight-qos-beta.git
1 2 3 |
$git clone https://github.com/wallnerryan/floodlight-qos-beta.git $cd floodlight-qos-beta $ant; |
2.配置文件中指定Qos路径加载Qos模块
启动Floodlight控制器:
1 |
./floodlight.sh |
3.登陆http://192.168.5.114:8080/ui/index.html后,点击tools->Quality of service,然后点击下图中的enable按钮,enable Qos模块
4.模拟上图测试拓扑,控制器拓扑发现正常
5.使用iperf h2 h1,iperf h2 h3 查看初始带宽如下:
6.在交换机端口上添加Qos队列q0 限速为800M,q1限速为50M
使用如下命令:
1 2 3 4 |
ovs-vsctl -- set port s1-eth1 qos=@newqos -- --id=@newqos create qos type=linux-htb \ queues=0=@q0,1=@q1 -- --id=@q0 create queue other-config:min-rate=200000000 \ other-config:max-rate=800000000 -- --id=@q1 create queue other-config:min-rate=50000 \ other-config:max-rate=50000000 |
1 2 3 4 |
ovs-vsctl -- set port s3-eth1 qos=@newqos -- --id=@newqos create qos type=linux-htb \ queues=0=@q0,1=@q1 -- --id=@q0 create queue other-config:min-rate=200000000 \ other-config:max-rate=800000000 -- --id=@q1 create queue other-config:min-rate=50000 \ other-config:max-rate=50000000 |
7.使用如下命令,在Floodlight控制器上下发流表信息,使h2->h1的流通过q0队列,h2->h3的流通过q1队列
1 |
curl -d '{"switch": "00:00:00:00:00:00:00:01", "name":"flow-mod-1", "cookie":"0", "priority":"32768","ingress-port":"2","active":"true", "actions":"enqueue=1:0"}' http://192.168.5.114:8080/wm/staticflowentrypusher/json |
1 |
curl -d '{"switch": "00:00:00:00:00:00:00:03", "name":"flow-mod-1", "cookie":"0", "priority":"32768","ingress-port":"2","active":"true", "actions":"enqueue=1:1"}' http://192.168.5.114:8080/wm/staticflowentrypusher/json |
8.使用iperf打流查看限速后的流量
预期结果:
1.通过各队列的限速值均小于或等于限速值。
实际结果:
1.与预期结果一致,通过Qos配置,从控制器上下发流表使其入队,达到限速效果。
4后语
编者在测试过程中,了解到Floodlight是基于二层转发的,不支持三层转发,所以不支持跨网段测试。在测试故障倒换用例时,在一直ping的过程中,将交换机之间直连link down掉,Floodlight能动态发现链路变化情况,但是不会自动触发新流表,ping一直在丢包,不能自动恢复。只有重新ping,才能触发控制器下发新流表到交换机。其它的测试用例按照《南向接口测试方案》中用例执行,均达到了测试预期。后续编者将对控制器性能进行测试实验,也希望能与大家多讨论测试过程中发现的问题,共同提高。