实验5:开源控制器实践——POX

建立拓扑

hub验证

h1 ping h2

都能收到

h1 ping h3

都能收到

switch验证

h1 ping h2

仅h2收到

h1 ping h3

仅h3收到

流程图

进阶

重新建立拓扑,无流表,编写POX模块SendFlowInSingle3

  • 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)
  • SendHardTimeOut
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)

运行后

硬超时

个人总结

本次实验难点在于pox的使用及SendFlowInSingle3、SendHardTimeOut的编写。进阶要求比较困难,需要根据官方的文档进行API的调用。
遇到的问题:

  • 开启pox时显示6633端口被占用,开启pox失败。学习后发现可以查看占用端口的进程并使用kill消灭该进程,即可解决该问题。
posted @ 2022-10-13 15:11  知星晓宇  阅读(53)  评论(0)    收藏  举报