zoukankan      html  css  js  c++  java
  • Ryu控制器安装部署和入门

    Ryu官网简介,原滋原味
    Ryu is a component-based software defined networking framework. Ryu provides software components with well defined API that make it easy for developers to create new network management and control applications. Ryu supports various protocols for managing network devices, such as OpenFlow, Netconf, OF-config, etc. About OpenFlow, Ryu supports fully 1.0, 1.2, 1.3, 1.4, 1.5 and Nicira Extensions. All of the code is freely available under the Apache 2.0 license.(内容来源:Ryu网站

    Ryu安装

    • 系统环境:Ubuntu16.04 / 18.04

    使用pip3的Ryu源码安装

    1.安装依赖

    sudo apt install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev
    

    2.安装pip3

    sudo apt-get install python3-pip
    

    3.下载源码

    git clone https://github.com/osrg/ryu.git
    

    4.进入主目录,安装其他组件依赖
    根据GitHub提示

    下载安装额外的组件用于支持ryu的OF-ConfigNETCONFBGP speaker (SSH console)Zebra protocol service (database)组件

    cd ryu
    sudo pip3 install -r tools/pip-requires -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    5.安装ryu(install后面有空格和点)

    sudo python3 setup.py install
    

    6.查看版本

    ryu --version
    

    参考资料

    参考博客,直接尝试安装pip3,更方便。
    RYU+mininet实践

    Ryu入门

    官方参考资料
    SDNLAB参考资料
    Ryu一大特点就是便于二次开发,用户可以自定义控制器的功能。

    • 从最简单开始
      新建一个l2.py,添加代码:
    from ryu.base import app_manager
    
    class L2Switch(app_manager.RyuApp):
        def __init__(self, *args, **kwargs):
            super(L2Switch, self).__init__(*args, **kwargs)
    

    代码中定义了一个L2Switch类,它继承自RyuApp这个基类(在~/ryu/ryu/base/app_manager.py文件中定义),然后只做了声明、初始化,所以这段代码执行后不会做什么实质的事情,但是它确实一个ryu应用程序。
    在l2.py目录下执行:

    ryu-manager l2.py
    

    • 继续添加内容
      新的代码开头多了几行from ryu.xxx,涉及到ryu安装目录~/ryu/ryu/中controller、ofphoto文件夹

      controller目录下的ofo_event.py定义了OpenFlow事件,handler.py定义了事件的处理,具体可以查看两个文件的内容。
      ofphoto目录下主要是OpenFlow版本信息,ofproto_v1_0是OpenFlow1.0版本的定义,具体亦可查看文件内容。
    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)]
            out = ofp_parser.OFPPacketOut(
                datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
                actions=actions)
            dp.send_msg(out)
    

    新增的代码中加入了新方法packet_in_handler,当Ryu收到OpenFlow交换机送来的packet_in消息时调用,set_ev_cls的第一个参数也声明了。
    set_ev_cls的第二个参数MAIN_DISPATCHER意味着当Ryu和交换机握手过程(即hello, features request/reply, Set Config等)完毕,才会调用packet_in_handler。
    之后定义packet_in消息数据结构,交换机datapath,OpenFlow协议和解析过程;
    定义发给交换机packet_out的动作,要求交换机将数据包泛洪广播;定义Ryu向交换机发送的packet_out内容,最后发送消息。
    至此,一个能够接收packet和转发packet的交换机完成了(接收packet,广播packet)。

    • 继续扩展
      Ryu主目录的app文件夹下可以查看各种应用并做二次开发,实现Ryu对交换机的自定义控制。
  • 相关阅读:
    python操作excel文件一(xlrd读取文件)
    pytest 1.简单介绍一,安装和如何运行
    request鉴权的处理和判断
    Struts2 easy UI插件
    Struts2 JQuery UI常用插件
    Struts2 JSON
    Struts2 使用jQuery实现Ajax
    Struts2 Ajax校验
    oracle连接方式、创建数据库用户、忘记数据库密码、用户锁定
    第二次考试:错题总结
  • 原文地址:https://www.cnblogs.com/fjlinww/p/11904076.html
Copyright © 2011-2022 走看看