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
 
pip命令安装
pip命令安装
pip命令安装可能没办法安装到自定义目录,不便于定位,推荐源码安装
Ryu源码安装
1.安装依赖
sudo apt install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev
2.下载源码
mkdir RYU
cd RYU
git clone https://github.com/osrg/ryu.git

3.进入主目录
cd ryu
4.其他组件依赖
根据GitHub提示

下载安装额外的组件用于支持ryu的OF-Config,NETCONF,BGP speaker (SSH console),Zebra protocol service (database)组件
sudo pip install -r tools/optional-requires
如果提示无pip命令,那么需要安装pip

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

请用下面的命令解决↓↓↓↓↓↓↓↓↓↓
sudo apt-get remove python-pip
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
hash -r
5.安装ryu(install后面有空格和点)
sudo pip install .
6.查看版本
ryu --version

安装心得
按照Ryu网站给的方法,不论是pip简易安装还是源码安装,都可能会因为pip版本问题而报错
为了解决这个问题,除了上述解决方法外,可以参考博客,直接尝试安装pip3,更方便。
sudo apt-get install python3-pip
git clone https://github.com/osrg/ryu.git
cd ryu
sudo pip3 install -r tools/pip-requires -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo python3 setup.py install
我在装依赖的时候报错了,重新执行一次命令成功了。
这个方法比之前更方便,pip和pip3分开装。

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对交换机的自定义控制。 
Ryu控制器安装部署和入门的更多相关文章
- 2-MySQL DBA笔记-MySQL安装部署和入门
		
第2章 MySQL安装部署和入门 第1章介绍了MySQL的一些基础知识,本章将为读者介绍MySQL的部署.安装及一些常用命令和参数的设置.2.1 如何选择MySQL版本 在选择MySQL的版本时,要根 ...
 - CentOS 6.5上MySQL安装部署与入门。
		
centos 6.5 yum 安装mysql1. 安装软件:yum install -y mysql-server mysql mysql-devel2.启动服务:service mysqld sta ...
 - influxDB安装部署及入门
		
1.下载安装包,本文使用1.7.7版本 https://portal.influxdata.com/downloads/ 2.安装 yum localinstall influxdb-1.7.7.x8 ...
 - 微服务(入门一):netcore安装部署consul
		
环境准备 vs开发环境:vs2017 consul版本: 1.4.4 netcore版本:2.1 安裝Consul 1.从官网下载consul到本地,选择系统对应的版本进行下载到本地,下载地址:h ...
 - 通过源码安装RYU控制器
		
目录 安装 测试 安装 安装pip3 sudo apt-get install python3-pip 获取ryu源码 git clone https://github.com/osrg/ryu.gi ...
 - office web apps安装部署,配置https,负载均衡(三)服务器连接域控制器
		
前提条件:1>一台window server 2008R2 服务器 2>您已经在同一内网的另外一台服务器上安装好了域控制器文档请看我写的另外一篇文章: office web apps安装部 ...
 - Kubernetes入门(一)——Kubernetes  v1.18.5 安装部署
		
Kubernetes的安装有两种方式:一是使用各个厂商封装的Kubernetes发行版,优点是可以一键安装部署,操作简单,缺点也很明显,若安装过程中某一步骤出现问题,很难定位处理:二是使用官方提供的k ...
 - Azure DevOps Server 入门实践与安装部署
		
一,引言 最近一段时间,公司希望在自己的服务器上安装本地版的 Azure DevOps Service(Azure DevOps Server),用于项目内的测试,学习.本着学习的目的,我也就开始学习 ...
 - hadoop入门(3)——hadoop2.0理论基础:安装部署方法
		
一.hadoop2.0安装部署流程 1.自动安装部署:Ambari.Minos(小米).Cloudera Manager(收费) 2.使用RPM包安装部署:Apache ...
 
随机推荐
- DotNet跨平台 - docker部署.net core2.0项目
			
参考文档: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document htt ...
 - CritterAI 翻译 Configuration Parameters
			
翻译自: http://www.critterai.org/projects/nmgen_study/config.html 参考: http://blog.csdn.net/kun1234567/a ...
 - ES6对数组的增强
			
来看数组的改变,Array.from()可以将类数组对象变为数组: Array.of方法用于将一组值,转化为数组: 寻找数组中是否拥有某项find().findIndex(),里面要放置回调函数: 要 ...
 - mac下自己实现re-sign.jar对apk进行重签名
			
利用Robotinum对给的apk文件进行自动化测试,在不知道源码的情况下,只有apk文件如何进行自动化测试呢? 首先需要对apk文件进行重签名,并获得该apk文件的包名和程序入口的类名. 最开始网上 ...
 - Linux Ubuntu XShell连接虚拟机问题记录
			
我们先用ip addr / ifconfig查看虚拟机ip地址,然后到windows下的cmd中ping 一下对应地址 一般是可以ping通的. 然后用Xshell或者其他工具连接虚拟机. 如果连不上 ...
 - nginx增加新模块
			
以gunzip这个模块为例,讲述一下,在nginx中如何安装新的模块 1.首先查看nginx已经安装了哪些模块. nginx –V 2.发现没有gunzip模块,安装 进入nginx的安装目录中,不是 ...
 - Image Processing and Analysis_15_Image Registration:a survey of image registration techniques——1992
			
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
 - Flutter——AspectRatio组件
			
AspectRatio 的作用是根据设置调整子元素 child 的宽高比. AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度是由宽度和比率决定的,类似于 Bo ...
 - asp.net的web程序适用后台线程做异步任务
			
耗时的任务适用异步线程来完成. 像记录日志,发邮件,发短信,通知其他系统等.可以进行封装,让后台线程来完成,不过最好适用消息队列,redis缓存等中间件,适用定时任务来做.可以保证消息不丢失. usi ...
 - Fillder的前后端的应用
			
测试需求:有一个功能,允许用钻石兑换金币,假设1钻石=1金币,前端控制一次至少兑换10个,最多100个,后台不做验证. 测试方案:输入10,也就是告诉前端我要兑换10个金币,等前端验证通过之后,截取要 ...