RYU 灭龙战 second day(内容大部分引自网络)

写好的markdown重启忘了保存。。。再写一次RLG

巨龙的稀有装备—RYU代码结构

RYU控制器代码结构的总结

RYU入门教程

RYU基础整理

  • app

在RYU控制器上面运行的应用,基于控制器完成特定的功能。其中的拓扑图应用,就在该文件夹下,app/gui_topology/gui_topology.py,使用方法可参照[RYU_firstday]>>(http://www.cnblogs.com/wpqwpq/p/6464225.html)

  • base

该文件夹目录下的app_manager.py是RYU应用的管理中心。用于加载RYU应用程序,接受从APP发送过来的信息,同时也完成消息的路由。

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

AppManager基类,用于管理APP。定义了加载APP等函数。

  • cmd

定义了RYU的命令系统

  • contrib

开源社区贡献者的代码

  • controller

包含处理OpenFlow功能的一系列文件。例如,来自交换机的数据包,生成flows,处理网络事件,汇总状态信息等与OpenFlow相关的数据处理。

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

ofp_handler.py中定义了基本的handler,完成了基本的如:握手,错误信息处理和keep alive 等功能。

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

  • lib

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

lib目录下,还有ovs,netconf,of_config,xflow目录,对应的目录下有一些定义好的数据类型。

  • ofproto

包含了OpenFlow 1.0到1.5的基本数据结构,其中ofproto_v1_x_parser.py定义了1.x版本的协议编码和解码。

  • services

完成了BGP、vrrp、ovsdb的实现。

  • tests

目录下存放了单元测试以及整合测试的代码

  • topology

包括关于OpenFlow交换机相关的拓扑发现的代码以及对于和拓扑发现相关的信息的处理(例如ports, links等)。内部使用LLDP协议进行拓扑发现

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

恶龙与人类的沟通方式—WSGI

RYU中WSGI学习笔记

WSGI

WSIG接口

WSGI:Web Server Gateway Interface

学习方式,基于廖雪峰老师教程WSIG接口呈神源码,并做相应实践,会比较好理解

from cgi import parse_qs
from cgi import escape
import logging
#hello_world为make_server相应函数
#environ:一个包含有所有HTTP请求信息的字典对象
#start_response:一个发送HTTP响应的函数
def hello_world(environ, start_response):
parameters = parse_qs(environ.get('QUERY_STRING', '')) if 'subject' in parameters:
subject = escape(parameters['subject'][0])
else:
subject = 'World.' #start_response()函数接收两个参数,一个是HTTP响应码,一个是一组list表示的HTTP Header,每个Header用一个包含两个str的tuple表示。
#
#通常情况下,都应该把Content-Type头发送给浏览器。其他很多常用的HTTP Header也应该发送。
start_response('200 OK', [('Context-Type', 'text/html')])
return ['''Hello %(subject)s
Hello %(subject)s!''' %{'subject': subject}] #运行WSGI服务 if __name__ == '__main__':
from wsgiref.simple_server import make_server
IP = 'localhost'
port = 8080 # 创建一个服务器,IP地址为localhost,端口是8080,处理函数是application server = make_server(IP, port, hello_world)
logging.basicConfig(level=logging.INFO)
LOG = logging.getLogger('wsgi')
LOG.info('listening on %s: %d'%(IP, port))
# 开始监听HTTP请求:
server.serve_forever()

RYU 灭龙战 second day(内容大部分引自网络)的更多相关文章

  1. RYU 灭龙战 fourth day (2)

    RYU 灭龙战 fourth day (2) 前言 之前试过在ODL调用他们的rest api,一直想自己写一个基于ODL的rest api,结果还是无果而终.这个小目标却在RYU身上实现了.今日说法 ...

  2. RYU 灭龙战 fourth day (1)

    RYU 灭龙战 fourth day (1) 前言 对于流量的监控,对于一个网络管理人员来说是非常重要的,可以从可视化的角度,方便检测出哪里的设备出了问题:而在传统网络中,如果是哪里的设备出了问题的话 ...

  3. RYU 灭龙战 third day

    RYU 灭龙战 third day 前言 传统的交换机有自学习能力.然而你知道在SDN的世界里,脑子空空的OpenFlow交换机是如何学习的吗?今日说法带你领略SDN的mac学习能力. RYUBook ...

  4. RYU 灭龙战 first day

    RYU 灭龙战 first day 前言 由于RYU翻译过来是龙的意思,此次主题就叫灭龙战吧 灵感来源 恶龙的三位真火-问题所在 参照了官方文档的基本操作 笔者以此执行 一个终端里 sudo mn - ...

  5. 3.2 GUN as汇编(本文内容大部分引用原文,非原创)

    as86汇编仅仅用于编译内核中的boot/bootsect.s引导扇区程序和实模式下的设置程序boot/setup.s.内核中其余所有汇编语言程序(包括C语言产生的汇编程序)均使用gas来编译,并与C ...

  6. 级联关系(内容大部分来自JavaEE轻量型解决方案其余的是我的想法)

    1. 级联关系 在Hibernate程序中持久化的对象之间会通过关联关系互相引用.对象进行保存.更新和删除等操作时,有时需要被关联的对象也执行相应的操作,如:假设需要关联关系的主动方对象执行操作时,被 ...

  7. sql boolean类型

    关于 MySQL 的 boolean 和 tinyint(1) boolean类型MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint ...

  8. 分布式环境下的id生成方法

    分布式环境下的id生成方法   前几天研究数据库分表分库的问题,其中有一个关键的地方就是生成唯一键的问题,假如数据表有1亿条数据,而且还在不断的增加,这里我们就需要考虑到分表分库,假设我们采用Hash ...

  9. iOS面试题大全-点亮你iOS技能树

    所有的内容大部分来自于网络的搜集,所以我不是一个创造者,而是一个搬运工.我尽量把题目,尤其是参考答案的出处列明.若有任何疑问,建议,意见,请联系我. 第一部分面试题来源于iOS-Developer-I ...

随机推荐

  1. 谁对EXTJS熟悉,有关关闭panel的问题?

    谁对EXTJS熟悉,有关关闭panel的问题?比如:我在A.js 中写了一个  var  win  =   new  Ext.Window( { b.js });   win.show(); 打开了一 ...

  2. 2-2 R语言基础 向量

    #Vector 向量的三种创建方法,两个参数:类型,长度 > x <- vector("character",length=10)> x1 <- 1:4&g ...

  3. 3.HBase In Action 第一章-HBase简介(1.1.1 大数据你好呀)

    Let's take a closer look at the term Big Data. To be honest, it's become something of a loaded term, ...

  4. 关于$namespace$和重载运算符

    $namespace$ 还记得列队和天天爱跑步吗?记得当时写部分分写的非常艰难,一大原因就是部分分之间有很多重名的数组,而且大小还不一样大,经常写着写着就串了,而且$maxn$有一次提交时用错了直接全 ...

  5. etcd管理

    操作etcd有命令行工具etcdctl,有两个api版本互不兼容的,系统默认的v2版本,kubernetes集群使用的是v3版本,v2版本下是看不到v3版本的数据的,我也是找了些资料才了解这个情况. ...

  6. linux问题解答

    1.Linux如何查询进程?杀死一个进程? ps命令提供进程的一次性查看(瞬时信息),结果不是动态的:top对命令实时监控 ps只是查看进程,而top还可以监视系统性能,如平均负载,cpu和内存的消耗 ...

  7. jsp操作javabean

    一:介绍 javabean: java语言编写的一个可重用的组件. 狭义上来说就是我们编写的一个普通的java类,例如:User... javabean规范: 1.必须是一个公共具体的类:public ...

  8. 使用Tortoise结合Git比较两个版本的差异

    1.右键项目,TortoiseGit -------> Diff with previous version 2.单击出分支选择弹窗,进行选择要比较的两个分支 3.比较同个分支的两个不同的版本 ...

  9. js 获取当前页url网址信息

    转载地址:js如何准确获取当前页面url网址信息 摘录: 举例一个URL,然后获得它的各个组成部分:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.window ...

  10. 所做更改会影响共用模板Normal.dotm。是否保存此更改

    最近安装了Office 2010版本,但是发现个问题,每次在关闭word 2010时,都会提示所做更改会影响共用模板Normal.dotm …… 确实是烦恼,每次都需要点击是否保存,于是我在仔细研究了 ...