实验5:开源控制器实践——POX
基本要求
1.使用 tcpdump 验证Hub模块的抓包结果截图
-
h1 ping h2,h3主机同样收到icmp报文
-
h1 ping h3,h2主机同样收到icmp报文
2、L2_learning程序流程图
3、使用 tcpdump 验证Switch模块的抓包结果截图
-
h1 ping h2,只有h2能收到icmp报文
-
h1 ping h3,只有h3能收到icmp报文
进阶要求
- 编写Python程序自定义一个POX模块SendFlowInSingle3
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)
-
将拓扑连接至SendFlowInSingle3(默认端口6633),实现向s1发送流表规则使得所有主机两两互通
-
完成ODL实验的硬超时功能
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() # 使用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)
个人总结
本次实验验证了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控制器的原理仍然有不太懂的地方需要进一步去了解。
标签:控制器,POX,开源,actions,ofp,msg,output,port,append From: https://www.cnblogs.com/stellaxin/p/16782581.html