ryu 基础

简介

RYU控制器是日本NTT公司负责研发的一款开源的SDN/OpenFlow控制器,这个控制器是取名于日本的flow的意思,所以叫RYU,RYU控制器完全有python语言编写,和POX类似。RYU控制器现在支持到OpenFlow版本的1.0,1.2,1.3,1.4版本,同时支持与OpenStack结合使用,应用 于云计算领域。RYU采用Apache Licence开源协议标准。

安装

首先安装ryu控制器的依赖

  • python-eventlet 是一个高性能网络编程并发框架,eventlet的基础是greenlet,后者是实现协程(coroutine)的基础
  • python-routes 它将不同的URL自动匹配到不同的应用
  • python-webob 在WSGI中对请求的环境变量进行封装
  • python-paramiko 遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接

以下,以ubuntu系统为例,安装以上依赖库

apt-get install  python-eventlet python-routes python-webob python-paramiko

或者使用pip安装

pip install eventlet routes webob paramiko

安装ryu

pip install ryu

或者源码安装

git clone git://github.com/osrg/ryu.gitcd ryu sudo python setup.py install

ryu命令

ryu的使用非常简单,执行使用如下命令

ryu-manager 

如,进入ryu/app目录,运行simple_switch_13.py

ryu-manager simple_switch_13.py

ryu启动参数

ryu-manager 启动ryu, 如果不加任何参数,则默认启动ofphandler模块。Ryu-manager -h 查看帮助信息--verbose 打印详细信息--version--observe-links 自动下发LLDP,用于拓扑发现。…

ryu目录结构

  • base: base中有一个非常重要的文件:app_manager.py.其作用是RYU 应用的管理中心。用于加载RYU应用程序,接受从APP发送过来的信息,同时也完成消息的路由。

其主要的函数有app注册、注销、查找、并定义了RYUAPP基类,定义了RYUAPP的基本属性。包含name,threads,events、event_handlers和observers等成员,以及对应的许多基本函数。如:start(),stop()等。

这个文件中还定义了AppManager基类,用于管理APP。定义了加载APP等函数。不过如果仅仅是开发APP的话,这个类可以不必关心。

  • controller:controller文件夹中许多非常重要的文件,如events.py,ofp_handler.py,controller.py等。其中controller.py中定义了OpenFlowController基类。用于定义OpenFlow的控制器,用于处理交换机和控制器的连接等事件,同时还可以产生事件和路由事件。其事件系统的定义,可以查看events.py和ofp_events.py。

在ofp_handler.py中定义了基本的handler(应该怎么称呼呢?句柄?处理函数?),完成了基本的如:握手,错误信息处理和keep alive 等功能。更多的如packet_in_handler应该在app中定义。

在dpset.py文件中,定义了交换机端的一些消息,如端口状态信息等,用于描述和操作交换机。如添加端口,删除端口等操作。

其他的文件不再赘述。

  • lib:lib中定义了我们需要使用到的基本的数据结构,如dpid,mac和ip等数据结构。在lib/packet目录下,还定义了许多网络协议,如ICMP,DHCP,MPLS和IGMP等协议内容。而每一个数据包的类中都有parser和serialize两个函数。用于解析和序列化数据包。

lib目录下,还有ovs,netconf目录,对应的目录下有一些定义好的数据类型,不再赘述。

  • ofproto:在这个目录下,基本分为两类文件,一类是协议的数据结构定义,另一类是协议解析,也即数据包处理函数文件。如ofproto_v1_0.py是1.0版本的OpenFlow协议数据结构的定义,而ofproto_v1_0_parser.py则定义了1.0版本的协议编码和解码。具体内容不赘述,实现功能与协议相同。

  • topology:包含了switches.py等文件,基本定义了一套交换机的数据结构。event.py定义了交换上的事件。dumper.py定义了获取网络拓扑的内容。最后api.py向上提供了一套调用topology目录中定义函数的接口。

  • contrib:这个文件夹主要存放的是开源社区贡献者的代码。我没看过。

  • cmd:定义了RYU的命令系统,具体不赘述。

  • services:完成了BGP和vrrp的实现。具体我还没有使用这个模块。 tests

  • tests:目录下存放了单元测试以及整合测试的代码,有兴趣的读者可以自行研究。

Was this helpful?

0 / 0

发表回复 0