RYU中WSGI学习笔记与RESTAPI开发

2015-05-13 by muzi

另一篇博文中已经介绍如何使用RYU的RESTAPI,本篇将继续介绍相关内容,主要分为WSGI学习总结和以ofctl_rest.py为例的RESTAPI的实现与内部机制。由于第一次学习WSGI,还有许多地方不是特别理解,所学知识均来自Google。文中若有错误之处,敬请指出,谢谢。

WSGI

Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。为了理解WSGI,可以尝试一下的小例子。

from cgi import parse_qs
from cgi import escape
import logging


def hello_world(environ, start_response):
    parameters = parse_qs(environ.get('QUERY_STRING', ''))

    if 'subject' in parameters:
        subject = escape(parameters['subject'][0])
    else ...
read more

Getting started with RESTAPI of RYU

2015-05-10 by muzi

在使用RYU的过程中,有时需要使用web拓扑,有时也需要通过API去下发流表等操作。这些操作在RYU中都会使用到RESTAPI。在学习RYU的过程中多次涉及到REST相关的内容,总是不知道如何实现和使用。最近在做实验需要这方面的知识,才有机会去学习REST并总结成博文。希望能给其他学习者提供帮助。本篇博文将简要介绍两部分内容:

  • What is REST?
  • How to use REST API in RYU?

What is REST

REST:表征性状态传输(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。更多REST的相关介绍可以查看视频介绍.

REST架构风格中,资源是通过URI来描述的。对资源的操作采用了HTTP的GET,POST,PUT和DELETE方法相对应。资源的表现形式可以是json或xml。REST的架构是Client-Server架构,同时链接是无状态的。所以要求在传输的过程中需要包含状态信息。此外,可以使用cache机制增进性能。在上述视频中提到REST的6中限制为:

  • Uniform Interface
  • Stateless
  • Cacheable ...
read more

RYU3.16 GUI安装与Topology模块分析

2015-04-21 by muzi

最近很多SDN研究人员问起如何安装RYU的GUI,网上也有一些教程。但是由于RYU版本问题,导致安装没有成功。本片博文将介绍RYU3.16版本下如何安装GUI,以及对RYU拓扑模块进行简单分析。

安装GUI

Linton的博客已经有详细介绍,我在这里将一些可能出现问题的地方再提醒一次。

第一步:依赖安装及修改代码

建议查看Linton的博客,比较简单,不赘述。

第二步:运行相关组建

  • 运行RYU相关APP

    ryu-manager --verbose --observe-links app/simple_switch_13.py ryu.topology.switches ryu.app.rest_topology ryu.app.ofctl_rest
    

    运行截图

    运行截图如下:

  • 运行controller.py文件

    进入到gui目录,运行controller.py文件。

    python controller.py
    

  • 访问页面

    打开浏览器,访问http://127 ...

read more

RYU核心源码解读:OFPHandler,Controller,RyuApp和AppManager

2014-12-27 by muzi

每接触一个控制器我都会习惯性的把控制器的源码读一读,走一走处理流程,RYU也不例外。本篇博文将从main函数入手,讲述RYU的ryuapp基类细节、app_manager类如何load apps,注册并运行application,Event的产生以及分发,还有最重要的应用ofp_handler。文章将以RYU真实运行流程作为主线,详细讲述RYU如何运作。如果文中出现理解错的地方,敬请指出,万分感谢!转载请声明原出处。

main()

RYU的main函数在ryu/cmd/manager.py文件中。main函数中CONF部分已经在在前一篇《RYU学习:oslo》已经有所介绍,所以这次关注的重点的是后续部分,如app_manager如何工作。

def main(args=None, prog=None):
    try:
        CONF(args=args, prog=prog,
             project='ryu', version='ryu-manager %s' % version,
             default_config_files=['/usr/local/etc/ryu ...
read more

RYU学习:Oslo

2014-12-19 by muzi

前段时间开始认真看了一下RYU的源码,发现OSLO是一个非常方便的命令行解析库,可以用于CLI和CONF的解析。oslo是OpenStack发起的项目,全称为OpenStack Common Libraries,是OpenStack Projects共享的基础库。

Oslo

在RYU的目录下可以找到cfg.py文件,这个文件中import了oslo的相关模块,以便调用时减少引用数目。从文件中可以发现oslo.config.cfg文件是关键文件,其在系统中的文件位置在:/usr/local/lib/python2.7/dist-packages/oslo/config/cfg.py。想查看源码的读者可以自行查看。在该cfg.py文件中 定义了ConfigOpts类,包含了_opts, _groups等成员变量。该类完成了命令行和配置参数的解析。

如果要快速学习某一个知识,最好的办法就是把它用起来。所以首先我会介绍一个入门的教程。如果你没有看懂,可以去看原始的教程

首先安装python-virtualenv,此python库可以用于创建一个虚拟的,与外界隔离的运行环境,听起来和docker好像有点像。

sudo apt ...
read more