实验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控制器的原理仍然有不太懂的地方需要进一步去了解。

posted @ 2022-10-11 21:41  Jf_Pan  阅读(6)  评论(0编辑  收藏  举报