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

pip命令安装

pip命令安装

pip命令安装可能没办法安装到自定义目录,不便于定位,推荐源码安装

Ryu源码安装

1.安装依赖

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

2.下载源码

  1. mkdir RYU
  2. cd RYU
  3. git clone https://github.com/osrg/ryu.git

3.进入主目录

  1. cd ryu

4.其他组件依赖

根据GitHub提示



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

  1. sudo pip install -r tools/optional-requires

如果提示无pip命令,那么需要安装pip

  1. sudo apt-get install python-pip

继续运行sudo pip install -r tools/optional-requires,如果看到提示pip版本问题:



请用下面的命令解决↓↓↓↓↓↓↓↓↓↓

  1. sudo apt-get remove python-pip
  2. wget https://bootstrap.pypa.io/get-pip.py
  3. sudo python3 get-pip.py
  4. hash -r

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

  1. sudo pip install .

6.查看版本

  1. ryu --version

安装心得

按照Ryu网站给的方法,不论是pip简易安装还是源码安装,都可能会因为pip版本问题而报错

为了解决这个问题,除了上述解决方法外,可以参考博客,直接尝试安装pip3,更方便。

  1. sudo apt-get install python3-pip
  2. git clone https://github.com/osrg/ryu.git
  3. cd ryu
  4. sudo pip3 install -r tools/pip-requires -i https://pypi.tuna.tsinghua.edu.cn/simple
  5. sudo python3 setup.py install

我在装依赖的时候报错了,重新执行一次命令成功了。

这个方法比之前更方便,pip和pip3分开装。

Ryu入门

官方参考资料

SDNLAB参考资料

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

  • 从最简单开始

    新建一个l2.py,添加代码:
  1. from ryu.base import app_manager
  2. class L2Switch(app_manager.RyuApp):
  3. def __init__(self, *args, **kwargs):
  4. super(L2Switch, self).__init__(*args, **kwargs)

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

在l2.py目录下执行:

  1. 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版本的定义,具体亦可查看文件内容。
  1. from ryu.base import app_manager
  2. from ryu.controller import ofp_event
  3. from ryu.controller.handler import MAIN_DISPATCHER
  4. from ryu.controller.handler import set_ev_cls
  5. from ryu.ofproto import ofproto_v1_0
  6. class L2Switch(app_manager.RyuApp):
  7. OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]
  8. def __init__(self, *args, **kwargs):
  9. super(L2Switch, self).__init__(*args, **kwargs)
  10. @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
  11. def packet_in_handler(self, ev):
  12. msg = ev.msg
  13. dp = msg.datapath
  14. ofp = dp.ofproto
  15. ofp_parser = dp.ofproto_parser
  16. actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
  17. out = ofp_parser.OFPPacketOut(
  18. datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
  19. actions=actions)
  20. 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对交换机的自定义控制。

Ryu控制器安装部署和入门的更多相关文章

  1. 2-MySQL DBA笔记-MySQL安装部署和入门

    第2章 MySQL安装部署和入门 第1章介绍了MySQL的一些基础知识,本章将为读者介绍MySQL的部署.安装及一些常用命令和参数的设置.2.1 如何选择MySQL版本 在选择MySQL的版本时,要根 ...

  2. CentOS 6.5上MySQL安装部署与入门。

    centos 6.5 yum 安装mysql1. 安装软件:yum install -y mysql-server mysql mysql-devel2.启动服务:service mysqld sta ...

  3. influxDB安装部署及入门

    1.下载安装包,本文使用1.7.7版本 https://portal.influxdata.com/downloads/ 2.安装 yum localinstall influxdb-1.7.7.x8 ...

  4. 微服务(入门一):netcore安装部署consul

    环境准备  vs开发环境:vs2017 consul版本: 1.4.4 netcore版本:2.1 安裝Consul  1.从官网下载consul到本地,选择系统对应的版本进行下载到本地,下载地址:h ...

  5. 通过源码安装RYU控制器

    目录 安装 测试 安装 安装pip3 sudo apt-get install python3-pip 获取ryu源码 git clone https://github.com/osrg/ryu.gi ...

  6. office web apps安装部署,配置https,负载均衡(三)服务器连接域控制器

    前提条件:1>一台window server 2008R2 服务器 2>您已经在同一内网的另外一台服务器上安装好了域控制器文档请看我写的另外一篇文章: office web apps安装部 ...

  7. Kubernetes入门(一)——Kubernetes v1.18.5 安装部署

    Kubernetes的安装有两种方式:一是使用各个厂商封装的Kubernetes发行版,优点是可以一键安装部署,操作简单,缺点也很明显,若安装过程中某一步骤出现问题,很难定位处理:二是使用官方提供的k ...

  8. Azure DevOps Server 入门实践与安装部署

    一,引言 最近一段时间,公司希望在自己的服务器上安装本地版的 Azure DevOps Service(Azure DevOps Server),用于项目内的测试,学习.本着学习的目的,我也就开始学习 ...

  9. hadoop入门(3)——hadoop2.0理论基础:安装部署方法

    一.hadoop2.0安装部署流程         1.自动安装部署:Ambari.Minos(小米).Cloudera Manager(收费)         2.使用RPM包安装部署:Apache ...

随机推荐

  1. jQuery_了解jQuery

  2. [转载]Linux 命令详解:./configure、make、make install 命令

    [转载]Linux 命令详解:./configure.make.make install 命令 来源:https://www.cnblogs.com/tinywan/p/7230039.html 这些 ...

  3. js之向div contenteditable光标位置添加字符

    js之向div contenteditable光标位置添加字符  原理: 在HTML里面,光标是一个对象,光标对象是只有当你选中某个元素的时候才会出现的. 当我们去点击一个输入框的时候,实际上它会产生 ...

  4. 如何结合插件 vue-lazyload 来简单实现图片懒加载?

    插件地址:https://www.npmjs.com/package/vue-lazyload: 一.使用场景: 在项目中有很多条数的信息,且图片很多的时候,不需要一次把整个页面的图片都加载完,而是在 ...

  5. MySQL5.7.28免安装版配置

    下载 安装配置 问题及解决方案 一.下载 找到你要的版本点击“looking for the latest GA version?”切换,我这个安装的是5.7.28,然后往下拉: 找到免安装的压缩包: ...

  6. sql基础的基础

    一.数据定义语言(DDL) create table alter table drop table create index alter index drop index create view dr ...

  7. golang的序列化与反序列化的几种方式

    golang用来序列化的模块有很多,我们来介绍3个. json 首先登场的是json,这个几乎毋庸置疑. 序列化 package main import ( "encoding/json&q ...

  8. DNS原理极限剖析

    how does DNS server work DNS Root Servers: The most critical infrastructure on the internet What is ...

  9. 读HTTP权威指南的体会

    国庆期间,我读了HTTP权威指南一书,现在我把总节为大家讲一下: Web 浏览器.服务器和相关的Web 应用程序都是通过HTTP 相互通信的.HTTP 是 现代全球因特网中使用的公共语言. 是对HTT ...

  10. JDK源码那些事儿之我眼中的HashMap

    源码部分从HashMap说起是因为笔者看了很多遍这个类的源码部分,同时感觉网上很多都是粗略的介绍,有些可能还不正确,最后只能自己看源码来验证理解,写下这篇文章一方面是为了促使自己能深入,另一方面也是给 ...