简介
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.git
cd 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