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

实验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实验的硬超时功能

  • ovs-ofctl交换机流表项

个人总结

  • 实验难度:本次实验难度偏难,基本要求比较适中,进阶要求比较困难。
  • 实验过程遇到的困难及解决办法:
    • SendFlowInSingle3和SendPoxTimeOut不会写无从下手:百度翻译官方文档,然后跟同学讨论,按照模板进行学习编写,但是还是失败了无法运行,最终学习他人进行编写终于成功。
  • 个人感想:本次实验难度偏难,基本要求比较简单,只需要搭建拓扑然后学着使用tcpdump验证Hub模块,然后顺着L2_learning.py的代码顺序执行即可,但是有些代码阅读起来还是比较困难的,因为不知道其中的详细接口的用处;进阶要求比较困难,需要根据官方的文档进行API的调用,但是由于是全英,看起来还是有点吃力,但最后还是做出来,总的来说,还是初步掌握了POX 控制器的使用和编写,以及Hub模块、Switch模块的了解。
posted @ 2022-10-10 20:30  Champion_Wang  阅读(53)  评论(0)    收藏  举报