目录
实验5:开源控制器实践——POX
基础要求
- h1 ping h2的tcpdump抓包结果
- h2 ping h3的tcpdump抓包结果
- L2_learning模块代码流程图
进阶要求
- SendFlowInSingle3.py
from pox.core import core import pox.openflow.libopenflow_01 as of class SendFlowInSingle3(object): def __init__ (self): core.openflow.addListeners(self) def _handle_ConnectionUp(self, event): msg = of.ofp_flow_mod() msg.priority = 1 msg.match.in_port = 1 msg.actions.append(of.ofp_action_output(port=2)) msg.actions.append(of.ofp_action_output(port=3)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 1 msg.match.in_port = 2 msg.actions.append(of.ofp_action_output(port=1)) msg.actions.append(of.ofp_action_output(port=3)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 1 msg.match.in_port = 3 msg.actions.append(of.ofp_action_output(port=1)) msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) def launch(): core.registerNew(SendFlowInSingle3)
- SendPoxHardTimeOut.py
from pox.core import core import pox.openflow.libopenflow_01 as of from pox.openflow.of_json import * def _handle_ConnectionUp(event): msg = of.ofp_flow_mod() msg.priority = 1 msg.match.in_port = 1 msg.actions.append(of.ofp_action_output(port=2)) #msg.actions.append(of.ofp_action_output(port=3)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 1 msg.match.in_port = 2 msg.actions.append(of.ofp_action_output(port=1)) msg.actions.append(of.ofp_action_output(port=3)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 1 msg.match.in_port = 3 #msg.actions.append(of.ofp_action_output(port=1)) msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) def launch(): core.openflow.addListenerByName("ConnectionUp", _handle_ConnectionUp)
- 运行结果
- 重新搭建(一)的拓扑,此时交换机内无流表规则,拓扑内主机互不相通;编写Python程序自定义一个POX模块SendFlowInSingle3,并且将拓扑连接至SendFlowInSingle3(默认端口6633),实现向s1发送流表规则使得所有主机两两互通
- 基于进阶1的代码,完成ODL实验的硬超时功能
- 重新搭建(一)的拓扑,此时交换机内无流表规则,拓扑内主机互不相通;编写Python程序自定义一个POX模块SendFlowInSingle3,并且将拓扑连接至SendFlowInSingle3(默认端口6633),实现向s1发送流表规则使得所有主机两两互通
- ovs-ofctl交换机流表项
个人总结
- 实验难度:本次实验难度偏难,基本要求比较适中,进阶要求比较困难。
- 实验过程遇到的困难及解决办法:
- SendFlowInSingle3和SendPoxTimeOut不会写无从下手:百度翻译官方文档,然后跟同学讨论,按照模板进行学习编写,但是还是失败了无法运行,最终学习他人进行编写终于成功。
- 个人感想:本次实验难度偏难,基本要求比较简单,只需要搭建拓扑然后学着使用tcpdump验证Hub模块,然后顺着L2_learning.py的代码顺序执行即可,但是有些代码阅读起来还是比较困难的,因为不知道其中的详细接口的用处;进阶要求比较困难,需要根据官方的文档进行API的调用,但是由于是全英,看起来还是有点吃力,但最后还是做出来,总的来说,还是初步掌握了POX 控制器的使用和编写,以及Hub模块、Switch模块的了解。