Ryu开发文档编写:部门:编写日期:审核:审核日期:年月日批准:批准日期:年月日文件编号:文件版本:受控状态:归档日期:
Ryu开发文档清华紫光比威网络技术有限公司第2页共13页修订记录修订记录版本日期提交人批准人修改历史0.109/17/2014初始版本
Ryu开发文档清华紫光比威网络技术有限公司第3页共13页目目录录1.RYU是什么..............................................................................................................41.1What'sRyu.....................................................................................................................................41.2Ryu控制器简介..............................................................................................................................41.3Support...........................................................................................................................................42.RYUSDNFRAMEWORK.....................................................................................52.1应用程序编程模型.........................................................................................................................62.2Componentsandlibraries.............................................................................................................83.RYU处理流程..........................................................................................................93.1入口函数执行流程.........................................................................................................................93.2事件处理流程.................................................................................................................................93.3补充说明.......................................................................................................................................114.RYU主要文件(模块)介绍................................................................................115.RYU文件夹介绍....................................................................................................126.RYU/LIB下的文件................................................................................................13
Ryu开发文档清华紫光比威网络技术有限公司第4页共13页1.Ryu是什么1.1What'sRyuRyu是一种基于软件定义网络的框架。Ryu为软件组件提供了定义良好的API,方便开发人员创建新的网络管理和控制应用程序。Ryu支持各种协议来管理网络设备,如OpenFlow、Netconf、OF-config,等。Ryu完全是用Python编写的。Ryu是一个采用Python开发基于组件的开源软件定义网络控制器。Ryu为这些组件定义了良好的API,使得开发者可以简单地创建新的网络管理与控制应用。Ryu支持多种协议,例如OpenFlow、Netconf、OFconfig等。对于OpenFlow,Ryu支持1.0、1.2、1.3、1.4以及NiciraExtensions(Nicira基于开源技术OpenFlow和OpenvSwitch创建了网络虚拟平台(NVP),该产品可实现SDN(软件即网络),帮助实现网络资源的虚拟化。)。但是Ryu架构模块简单,实现的APP功能有限。1.2Ryu控制器简介RYU控制器是日本NTT公司负责研发的一款开源的SDN/OpenFlow控制器,这个控制器是取名于日本的‘flow’的意思,所以叫RYU,RYU控制器完全有python语言编写。RYU控制器现在支持到OpenFlow的1.4版本,同时支持与OpenStack结合使用,应用于云计算领域。RYU采用ApacheLicence开源协议标准。1.3SupportRyuOfficialsiteis``_.Ryudocumentation:http://ryu.readthedocs.org/en/latest/OpenFlowTutorial:http://archive.openflow.org/wk/index.php/OpenFlow_TutorialThePythonTutorial:https://docs.python.org/2/tutorial/PythonDecorators:https://wiki.python.org/moin/PythonDecorators
Ryu开发文档清华紫光比威网络技术有限公司第5页共13页2.RyuSDNframework
Ryu开发文档清华紫光比威网络技术有限公司第6页共13页2.1应用程序编程模型Ryu事件处理、进程与线程:1)Applications:该类继承自ryu.base.app_manager.RyuApp,用户逻辑被描述为一个APP。2)Event:继承自ryu.controller.event.EventBase,应用程序之间的通信由transmittingandreceivingevents完成。3)EventQueue:每一个application都有一个队列用于接收事件。4)Threads:Ryu使用第三方库eventlets运行多线程。因为线程是非抢占式的,因此,当执行耗时的处理程序时要非常小心。5)Eventloops:创建一个application时,会自动生成一个线程,该线程运行一个事件循环。当队列事件不为空时,这个事件循环会加载该事件并且调用相应的事件处理函数(注册之后)。
Ryu开发文档清华紫光比威网络技术有限公司第7页共13页6)Additionalthreads:可以使用hub.spawn()添加其它线程,用来处理特殊的应用。7)Eventlets:这是一个第三方库,里面的库函数被封装到hub模块中被开发人员加载使用。【提供线程和事件队列的实现】8)Eventhandlers:使用ryu.controller.handler.set_ev_cls修饰一个事件处理函数。当该类型的事件触发后,事件处理函数就会被应用程序的事件循环调用。Ryuapplicationprogrammingmodel【P11】1)Threads,events,andeventqueues:1Ryu应用程序APP是一种能够实现多功能的单线程实体。在它们之间,用事件传递消息。2Ryu应用程序彼此之间发送异步事件。此外,在这些异步事件之中,会有一部分不属于Ryu应用程序本身的内置事件源(事件处理过程中产生的事件)。3每一个Ryu应用程序都会有一个事件接受队列。这个队列是一个FIFO,并且保留事件的顺序。EachRyuapplicationhasathreadforeventprocessing.4该线程会一直处理接收队列内的事件,并且调用合适的事件处理函数去处理该事件类型。在事件处理线程的环境中调用事件处理函数,要小心死锁。whileaneventhandlerisblocked,nofurthereventsfortheRyuapplicationwillbeprocessed.5会有各种各样的事件,用来实现Ryu应用之间同步应用程序的调用。当这些请求使用同一种机制作为普通事件,它们的回复放到队列中,避免死锁。2)Contexts:ContextsareordinarypythonobjectssharedamongRyuapplications.Theuseofcontextsarediscouragedfornewcode.3)ryu.controller.controller.Datapath:这个类用来描述OpenFlow交换机同Controller之间的互联处理。
Ryu开发文档清华紫光比威网络技术有限公司第8页共13页2.2Componentsandlibraries