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

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

时间:2022-10-18 19:58:49浏览次数:47  
标签:控制器 parser 开源 actions datapath msg ofp ofproto RYU

一、实验要求

1.搭建下图所示SDN拓扑,协议使用Open Flow 1.0,并连接Ryu控制器。

建立拓扑

连接Ryu控制器

通过Ryu的图形界面查看网络拓扑

在本机浏览器中输入地址http://虚拟机地址:8080即可打开ryu的图形界面

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

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模块下发的流表可以查看

3.编程修改L2Switch.py,另存为L2xxxxxxxxx.py,使之和POX的Hub模块的变得一致?(xxxxxxxxx为学号)

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)

查看流表

三、实验总结

本次实验实验基础部分难度较低,在基础部分遇到运行L2xxxx.py但是ping不通,通过舍友的帮助成功解决这个问题。还有遇到查询到的流表不为空的情况,后来发现是上一次构建的拓扑没有删干净的原因。

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

相关文章

  • 实验6:开源控制器实践——RYU
    一、实验目的1.能够独立部署RYU控制器2.能够理解RYU控制器实现软件定义的集线器原理3.能够理解RYU控制器实现软件定义的交换机原理二、实验环境Ubuntu20.04Desktop......
  • 【模糊神经网络】基于simulink的模糊神经网络控制器设计
    1.软件版本版本:MATLAB2010b2.模糊神经网络理论概述由于模糊控制是建立在专家经验的基础之上的,但这有很大的局限性,而人工神经网络可以充分逼近任意复杂的时变非线性系统,......
  • CVPR21小样本检测:蒸馏&上下文助力小样本检测(代码已开源)
    计算机视觉研究院专栏作者:Edison_G目标检测现在的框架越来越多,我们“计算机视觉研究院”最近也分享了众多的目标检测框架!今天我们继续分享一个最新的检测框架——DCNet。论......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够......
  • 实验6:开源控制器实践——RYU
    一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环境Ubuntu20.04Desktopam......
  • 目标检测开源数据集汇总(二)
    编辑丨极市平台导  读 本文汇总了一些开源目标检测类的数据集,附下载链接。多显著性对象数据集数据集链接:​​http://m6z.cn/5AsmXB​​本数据集共有1224张图像来自四......
  • Jmeterif控制器、操作数据库、正则
    一、Jmeter逻辑控制器可以控制取样器(Sampler)的执行顺序,它由多个逻辑控制语句封装成不同功能的组件组成。只对其子节点的Sampler有效。分为两种类型:1、......
  • 实验6:开源控制器实践——RYU
    一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环境Ubuntu20.04Desktopamd6......
  • 实验6: 开源控制器实践——RYU
    开源控制器实践——RYU一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环境U......
  • 一文读懂:开源大数据调度系统Taier1.2版本新增的「工作流」到底是什么?
    一、什么是工作流?在阐述什么是工作流之前,先说一下工作流和普通任务的区别,在于依赖视图。普通任务本身他只会有自己的dag图,依赖视图是无边界的,不可控的,而工作流则是把整个......