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. Python3 中 sys.argv[ ]的用法解释

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白.因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list), ...

  2. aused by: org.apache.xmlbeans.SchemaTypeLoaderException: XML-BEANS compiled schema: Incompatible min

    版权声明:转载请注明出处 https://blog.csdn.net/seashouwang/article/details/24025871 6.导入Word2007-docx,Excel-2007 ...

  3. 关于javascript中对浮点加,减,乘,除的精度分析

    大学专业是计算机童鞋或多或小的知道 计算机是由二进制存储和处理数字的,不能精确到处理浮点数,且javascript也没有这样的方法 所以在浏览器计算的时候也会有误差,比如说 我想用 3.3 / 1.1 ...

  4. kubernetes 生命周期问题分析

    1.Failed  -- pod里至少一个容器以非0code退出,说明应用有问题,需要debug应用容器 2.pending -- 说明API对象已经被创建和保存在etcd数据库里,但是创建过程出了问 ...

  5. jquery的$(document).ready()与js的window.onload区别

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  6. strstr(),strchr()

    strstr($a, $b)和strchr()一样,起的别名,表示查找$a中第一次出现$b,并返回字符串的剩余部分: .strrchr()从后往前查第一个出现的 直接写两行代码: <?php $ ...

  7. ISCSI工作流程target和initiator

    随着企业级的数据呈指数增长,传统的集中式存储方案已无法满足其存储要求,因而存储区域网(storage area network,SAN)技术被广泛应用,但其存在距离短.价格贵和构建复杂等不足.基于iS ...

  8. 一、CnPack源码模板功能快速添加注释

    Delphi通过CnPack源码模板功能,能快速添加注释,非常之好用,使用方法如下图: 1.选择CnPack的源码模板专家 2.设置Pacal标准过程头 3.设置内容如下,并且设置了Ctrl+W的快捷 ...

  9. Git配置用户名与邮箱

    1.用户名和邮箱地址的作用 用户名和邮箱地址是本地git客户端的一个变量 每次commit都会用用户名和邮箱纪录. github的contributions统计就是按邮箱来统计的. 2.查看用户名和邮 ...

  10. Js读取XML文件为List结构

    习惯了C#的List集合,对于Javascript没有list 极为不舒服,在一个利用Js读取XML文件的Demo中,决定自己构建List对象,将数据存入List. 第一步,Js读取XML文件知识 X ...