首页 » SDN » Ryu代码解析(三)

Ryu代码解析(三)

 

RyuApp基类

_CONTEXTS

该变量是RyuApp基类中定义的上下文字典,app子类来填充这个变量。该变量用来说明子类想要使用的上下文模块。但是这个上下文模块的初始化是由AppManager来做的,而且相同的上下文模块对象在不同的app子类之间是共享的。例如:

_EVENTS

A list of event classes which this RyuApp subclass would generate.This should be specified if and only if event classes are defined in a different Python module from the RyuApp subclass is.

暂时不太懂怎么用,请懂的朋友留言指点。

init函数:初始化成员变量

start函数:启动该app,新建一个线程,线程执行_event_loop函数

_event_loop函数: app主线程执行的函数,从消息队列event中取出事件,并根据事件类型调用不同的处理函数

stop函数:停止app主线程

register_handler:注册处理函数,保存在event_handlers变量中,key是事件类,value是一个list,保存关注该事件的处理函数,关注同一个事件的处理函数可能有多个所以保存在list中。

unregister_handler: 注销处理函数,具体操作为从event_handlers中删除该handler

register_observer函数:该函数的主要作用是注册某个事件的观察者app(observer)。观察者的主要用途是,当本app收到一个事件时,会将该事件发送到注册的关心该事件的观察者的event队列中。主要是ofp_handler调用该函数来注册各种app,从而将其接受到的事件发送给各app

unregister_observer函数:将app从ev_cls事件的观察者set中去除。

observe_event函数:向提供ev_cls事件的app注册本app为ev_cls的观察者,这个函数跟上面的不同的是让其他的app注册自己为一个观察者。

observe_event函数:从提供ev_cls事件的app的观察者列表中删除本app。

get_handlers函数: 该函数主要功能是获取 交换机处于state状态时的ev事件的处理函数。在当某一个app编写一个handler的时候使用se_ev_cls装饰器时,就指定了该处理函数处理的事件以及其关心的dispatcher(也就是这里的state),因此当调用get_handlers函数时,state和处理函数定义的dispatcher不符合时,就不包括该处理函数了。如果state是空,则返回ev的所有处理函数。

get_getobservers函数:获取observers中保存的所有的观察者

send_request函数:发送一个同步的请求。seq是一个EventRequestBase的实例,sync属性设置为真,表示为同步请求,回复结果保存在reply_q队列中,通过send_event函数发送给req.dst,然后阻塞自己更待回复

send_event函数: 发送事件ev给名叫name的app实例。

send_event_to_observers函数:将事件发送给observers中的app实例。

reply_to_request函数:这个是send_request函数的应答函数,将rep回复发送给req端

close函数:关闭app函数,什么都没做。

 

原文链接:Ryu代码解析(三),转载请注明来源!

1