首页 > 其他分享 >实验6:开源控制器实践——RYU

实验6:开源控制器实践——RYU

时间:2022-10-19 17:05:59浏览次数:37  
标签:控制器 parser 开源 actions datapath msg ofp ofproto RYU

一、基本要求

1. 搭建SDN拓扑,协议使用Open Flow 1.0,并连接Ryu控制器,通过Ryu的图形界面查看网络拓扑。

2.阅读Ryu文档的The First Application一节,运行当中的L2Switch,h1 ping h2或h3,在目标主机使用 tcpdump 验证L2Switch,分析L2Switch和POX的Hub模块有何不同。

L2Switch.py


from ryu.controller import ofp_event

from ryu.controller.handler import MAIN_DISPATCHER

from ryu.controller.handler import set_ev_cls

from ryu.ofproto import ofproto_v1_0

class L2Switch(app_manager.RyuApp):

    OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]

    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)]

        data = None

        if msg.buffer_id == ofp.OFP_NO_BUFFER:

             data = msg.data

        out = ofp_parser.OFPPacketOut(

            datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,

            actions=actions, data = data)

        dp.send_msg(out)

h1 ping h2

L2Switch和POX的Hub模块有何不同:

RYU的L2Switch模块和POX的Hub模块都是洪泛转发,但pox的Hub模块是下发流表到交换机,然后交换机直接根据流表进行洪泛转发,ryu的L2Switch模块运行时不下发对应的转发流表,而是将包发送给控制器,由控制器利用packet-out指定为洪泛转发。

修改后的l2switch代码:

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):

    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_feathers_handler(self, ev):

        datapath = ev.msg.datapath

        ofproto = datapath.ofproto

        ofp_parser = datapath.ofproto_parser

        # install flow table-miss flow entry

        match = ofp_parser.OFPMatch()

        actions = [ofp_parser.OFPActionOutput(ofproto.OFPP_CONTROLLER, ofproto.OFPCML_NO_BUFFER)]

        # 1\OUTPUT PORT, 2\BUFF IN SWITCH?

        self.add_flow(datapath, 0, match, actions)

    def add_flow(self, datapath, priority, match, actions):

        # 1\ datapath for the switch, 2\priority for flow entry, 3\match field, 4\action for packet

        ofproto = datapath.ofproto

        ofp_parser = datapath.ofproto_parser

        # install flow

        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']  # get in port of the packet

        # add a flow entry for the packet

        match = ofp_parser.OFPMatch()

        actions = [ofp_parser.OFPActionOutput(ofproto.OFPP_FLOOD)]

        self.add_flow(datapath, 1, match, actions)

        # to output the current packet. for install rules only output later packets

        out = ofp_parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id, in_port=in_port, actions=actions)

        # buffer id: locate the buffered packet

        datapath.send_msg(out)

查看流表

三、个人总结

本机的python版本不同,有一些函数的名字已经改变了,导致一开始一直现实找不到相对性的函数。多亏有同学和我遇到了相同的问题并在总结中说明了解决方法,靠他给的方法很成功就让ryu运行了。

标签:控制器,parser,开源,actions,datapath,msg,ofp,ofproto,RYU
From: https://www.cnblogs.com/a178161654/p/16806942.html

相关文章

  • 实验6:开源控制器实践——RYU
    一、基本要求1、搭建下图所示SDN拓扑,协议使用OpenFlow1.0,并连接Ryu控制器,通过Ryu的图形界面查看网络拓扑2、阅读Ryu文档的TheFirstApplication一节,运行当中的L2Swit......
  • K8S之StatefulSet控制器
    无状态应用进程客户端的每次连接均可独立地处理,一次请求和响应即构成一个完整的事务,它们不受已完成的连接或现有其他连接的影响,且意外中断或关闭时仅需要重新建立连接即可,因......
  • 图像分类经典项目:基于开源数据集Fashion-MNIST的应用实践
    Datawhale作者:何新,Datawhale优秀学习者简介:何新,武汉理工大学硕士​​https://github.com/whut2962575697​​图像分类是计算机视觉和数字图像处理的一个基本问题。传统的图......
  • 实验6:开源控制器实践——RYU
    一、实验目的1.能够独立部署RYU控制器;2.能够理解RYU控制器实现软件定义的集线器原理;3.能够理解RYU控制器实现软件定义的交换机原理。二、实验环境Ubuntu20.04Deskto......
  • 实验6:开源控制器实践——RYU
    一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环境Ubuntu20.04Desktopamd6......
  • 实验6:开源控制器实践——RYU
    一、实验目的1、能够独立部署RYU控制器;2.能够理解RYU控制器实现软件定义的集线器原理;3.能够理解RYU控制器实现软件定义的交换机原理。二、实验环境Ubuntu20.04Des......
  • 阿里巴巴 Noslate 正式开源 - 面向云原生的 JavaScript 容器方案
    继 2019 年开源 Midway 框架之后,阿里一直在 Node.js 的前沿进行深度研究,除了加入 TC39 参与标准化建设,向上游 Node.js 项目持续贡献,与龙蜥社区合作优化之外,也在......
  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU一、实验目的1.能够独立部署RYU控制器;2.能够理解RYU控制器实现软件定义的集线器原理;3.能够理解RYU控制器实现软件定义的交换机原理。二、......
  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU(一)基础要求1.建立拓扑并接连RYU控制器,并通过RYU的图形界面查看网络拓扑。2.运行当中的L2Switch,在目标主机使用tcpdump验证L2Switch。......
  • 如何参与开源项目详细步骤
    前言本文作者是华为开源组件库VueDevUI的负责人kagol。感谢他的无私分享!配套视频点下面观看我和kagol视频直播实录,学习更轻松!别忘了关注+三连!​​参与开源项目的详细步骤......