Ryu 实现一个HUB

from ryu.base import app_manager
from ryu.ofproto import ofproto_v1_3
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER, CONFIG_DISPATCHER
from ryu.controller.handler import set_ev_cls

class Hub(app_manager.RyuApp):
‘’‘Create a virtual hub’’’

OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

def __init__(self, *args, **kwargs):
    super(Hub, self).__init__(*args, **kwargs)

@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
def switch_features_handler(self, ev):
    datapath = ev.msg.datapath
    ofproto = datapath.ofproto
    ofp_parser = datapath.ofproto_parser

    #install the table-miss flow entry
    match = ofp_parser.OFPMatch()
    actions = [ofp_parser.OFPActionOutput(ofproto.OFPP_CONTROLLER,
                                          ofproto.OFPCML_NO_BUFFER)]
    self.add_flow(datapath, 0, match, actions)

def add_flow(self, datapath, priority, match, actions):
    #add a flow entry, and install it into datapath
    ofproto = datapath.ofproto
    ofp_parser = datapath.ofproto_parser

    #contruct a flow_mod msg and sent it
    inst = [ofp_parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,
                                             actions)]
    mod = ofp_parser.OFPFlowMod(datapath=datapath, priority=priority,
                                match=match, instructions=inst)

    datapath.send_msg(mod)

@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
    in_port = msg.match['in_port']

    #contruct a flow entry
    match = ofp_parser.OFPMatch()
    actions = [ofp_parser.OFPActionOutput(ofproto.OFPP_FLOOD)]

    #install flow_mod to a avoid packet_ining next time
    self.add_flow(datapath, 1, match, actions)

    out = ofp_parser.OFPPacterOut(
        datapath=datapath, buffer_id=msg.buffer_id, in_port=in_port,
        actions=actions)
    datapath.send_msg(out)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值