Genera1559

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

基础要求

构建拓扑并打开pox控制器

开启POX: ./pox.py log.level --DEBUG forwarding.hub
开启主机终端mininet> xterm h2 h3
监视h2-eth0与h3-eth0



h1 ping h2,h1 ping h3,ping all,h2与h3均会同时收到数据
L2_learning模块代码流程图

开启pox,运行L2_learning


h1 ping h2,h1 ping h3均只有各自端口收到数据包

进阶要求

1.重新搭建(一)的拓扑,此时交换机内无流表规则,拓扑内主机互不相通;编写Python程序自定义一个POX模块SendFlowInSingle3,并且将拓扑连接至SendFlowInSingle3(默认端口6633),实现向s1发送流表规则使得所有主机两两互通。
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)`

ping通
TimeOut代码

点击查看代码
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代码

点击查看代码
`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的使用,使用过程中曾经出现没有正常退出控制器导致的端口占用问题,需要使用重启或者杀进程的方式才能重新打开POX,xterm和TCPDUMP的使用,进阶部分较难,尤其是进阶二,虽然实现了断十秒但是后续无法再通。

posted on 2022-10-12 11:28  102299248  阅读(49)  评论(0)    收藏  举报