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

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

时间:2022-10-23 21:56:39浏览次数:65  
标签:控制器 parser 开源 actions datapath msg ofp ofproto RYU

基本要求

  • 搭建下图所示SDN拓扑,协议使用Open Flow 1.0,并连接Ryu控制器
  • 建立拓扑
  • 连接RYU控制器
  • L2Switch.py
    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
    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)
  • 运行L2Switch

  • h1 ping h2


  • h1 ping h3


  • 分析L2Switch和POX的Hub模块有何不同
  • Hub和L2Switch模块都是洪泛转发,但L2Switch模块下发的流表无法查看,而Hub模块下发的流表可以查看
  • L032002404.py
    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)
  • 查看流表

实验总结

本次实验的难度相较于之前的几次实验要有所提升,本次实验中运用RYU控制器,这使得我熟悉了这一控制器的安装方法及其基础使用方法,同时对于在前几次实验中学习到的知识也有了新的体会,在本次实验的过程中,许多操作还不够熟练,还需多多熟悉掌握,望下次实验能够有所进步

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

相关文章

  • 实验5:开源控制器实践——POX
    一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够运用POX控制器编写自定义网络......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够运......
  • 实验5:开源控制器实践——POX
    基本要求1.阅读Hub模块代码,使用tcpdump验证Hub模块;2.阅读L2_learning模块代码,画出程序流程图,使用tcpdump验证Switch模块;进阶要求1.重新搭建(一)的拓扑,此时交换机......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够......
  • 实验6:开源控制器实践——RYU
    一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环境Ubuntu20.04Desktopamd64......
  • 构建端到端的开源现代数据平台
    了解使用开源技术构建现代数据栈的详细指南。在过去的几年里,数据工程领域的重要性突飞猛进,为加速创新和进步打开了大门——从今天开始,越来越多的人开始思考数据资源以及......
  • 实验5:开源控制器实践——POX
    一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够运用POX控制器编写自定义网络......
  • 海思3516系列芯片SPI速率慢问题深入分析与优化(基于PL022 SPI 控制器)
    海思3516系列芯片SPI速率慢问题深入分析与优化(基于PL022SPI控制器)我在某个海思主控的项目中需要使用SPI接口来驱动一块液晶屏,液晶屏主控为st7789,分辨率240x240,图像格......
  • 实验5:开源控制器实践——POX
    实验要求(一)基本要求1、搭建下图所示SDN拓扑,协议使用OpenFlow1.0,控制器使用部署于本地的POX(默认监听6633端口)(1)搭建拓扑命令:sudomn--topo=single,3--mac--controll......
  • 实验6:开源控制器实践——RYU
    一、基础要求 1、使用OpenFlow1.0搭建SDN拓扑。连接Ryu控制器,并图形界面查看网络拓扑topo=single,3时Ryu的图行界面 2、阅读Ryu文档,验证并分析Ryu的L2Switch和Pox......