实验5:开源控制器实践——POX
实验5:开源控制器实践——POX
基本要求
使用 tcpdump 验证Hub模块的抓包结果截图
-
h1 ping h2,h3主机同样收到icmp报文(hub)
-
h1 ping h2,h3主机同样收到icmp报文(switch)
-
L2_learning模块代码流程图
进阶要求
自定义POX模块
# 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
class SendPoxHardTimeOut(object):
def __init__(self):
core.openflow.addListeners(self)
def _handle_ConnectionUp(self, event):
msg = of.ofp_flow_mod()
msg.priority = 2
msg.match.in_port = 1
msg.hard_timeout = 10
event.connection.send(msg)
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 = 2
msg.match.in_port = 2
msg.hard_timeout = 10
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 = 2
msg.match.in_port = 3
msg.hard_timeout = 10
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(SendPoxHardTimeOut)
将拓扑连接至SendFlowInSingle3(默认端口6633),实现向s1发送流表规则使得所有主机两两互通
完成ODL实验的硬超时功能(先运行SendFlowSingle3,在运行SendPoxHardTimeOut实现自动硬超时)
- 查看流表项
个人总结
本次实验验证了POX的hub和switch模块,初步掌握了POX控制器的使用方法,并且进一步熟悉POX控制器流表下发的方法。基本要求中的实验操作还是比较简单的,但进阶要求就进行的比较困难。比如在lab5目录下创建SendFlowInSingle3.py后无法将SendFlowInSingle3.py放入pox目录下或直接在pox目录下创建,这时需要在在lab5目录下打开终端,输入“sudo cp SendFlowInSingle3.py ../pox”将py文件复制到pox目录下。还有在完成ODL实验的硬超时功能时,需要先运行SendFlowInSingle3,再运行SendPoxHardTimeOut,再运行SendFlowInSingle3。总之我对于POX控制器的原理仍然有不太懂的地方需要进一步去了解。