简单RYU实现二层交换机泛洪代码解析

2018-05-10  本文已影响94人  墨痕hz

一个简单的交换机实现,使得交换机将所有收到的数据包在各个端口泛洪发送,代码如下:

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
        datapath = msg.datapath
        ofproto = datapath.ofproto
        ofp_parser = datapath.ofproto_parser

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

packet_in_handler函数的函数体:

每当RYU控制器收到OpenFlow协议中的packet_in消息时,packet_in_handler函数就会被调用,因为这个函数被注册到装饰器set_ev_cls中,并且装饰器将packet_in_handler注册到packet_in消息上,每当收到packet_in消息时就调用该函数。

set_ev_cls装饰器的参数:

上一篇 下一篇

猜你喜欢

热点阅读