如何识别从Ryucontroller到OF交换机的数据包?

2024-10-01 17:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从pythonryu控制器识别一个控制包。 换言之:我怎样才能做下面的指示?在

If (I receive a OFPT_PACKET_OUT msg from ryu-controller)
   do something (for example all control traffic must mirroring to an output port)

我怎么才能符合这个规则?在

我在openflowv1.3规范中看到有一个OFPP®控制器方案保留端口:如何将其用作入口端口?在

来自OFv1.3规范: “OFPP_CONTROLLER:表示带有OpenFlow控制器的控制通道。可以用作入口端口或输出端口。在

当用作输出端口时,将数据包封装在消息中的数据包中,并使用OpenFlow协议发送它。在

当用作入口端口时,标识来自控制器的数据包。“

谢谢你的帮助。在


Tags: 端口from规范ifpacketmsg控制器out
1条回答
网友
1楼 · 发布于 2024-10-01 17:26:23

让我们先看一看关于输入端口2的一个基本问题:

from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER
from ryu.controller.handler import set_ev_cls

class L2Switch(app_manager.RyuApp):
    def __init__(self, *args, **kwargs):
        super(L2Switch, self).__init__(*args, **kwargs)

    @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
    def packet_in_handler(self, ev):
        msg = ev.msg
        dp = msg.datapath
        ofp = dp.ofproto
        ofp_parser = dp.ofproto_parser

        actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
        out = ofp_parser.OFPPacketOut(
            datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
            actions=actions)
        dp.send_msg(out)

最后两个陈述是

^{pr2}$

这些语句生成packet_out消息,但是,我不认为存在为packet_out消息引发的相应事件(就像packet_in消息生成可以在代码中检测到的EventOFPPacketIn事件,并且可以附加一个方法)。我没怎么用过RyuAPI,但我觉得原因很简单。一条packet_out消息是通过代码本身发送的,您只需在生成该事件的行之后再添加几行代码即可。这几行代码可以在生成packet_out消息时执行您想执行的任何操作。例如,在上面的代码中,您只需在dp.send_msg(out)行之后添加镜像控制流量到特定端口的行。如果我错了,请更正/修改我的答案。在

相关问题 更多 >

    热门问题