OS-Ken API 参考¶
- class os_ken.base.app_manager.OSKenApp(*_args, **_kwargs)¶
OSKen 应用的基础类。
OSKenApp 子类在 osken-manager 加载所有请求的 OSKen 应用模块后实例化。 __init__ 应该使用相同的参数调用 OSKenApp.__init__。 在 __init__ 中发送任何事件是非法的。
实例属性 'name' 是用于 OSKen 应用之间消息路由的类名。 (参见 send_event) 它由 OSKenApp.__init__ 设置为 __class__.__name__。 不建议子类覆盖此属性。
- OFP_VERSIONS = None¶
此 OSKenApp 支持的 OpenFlow 版本列表。 默认值是框架支持的所有版本。
示例
OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION, ofproto_v1_2.OFP_VERSION]
如果系统中加载了多个 OSKen 应用,则使用它们的 OFP_VERSIONS 的交集。
- _CONTEXTS = {}¶
一个字典,用于指定此 OSKen 应用想要使用的上下文。 它的键是上下文的名称,它的值是一个实现上下文的普通类。 该类由 app_manager 实例化,并且实例在具有相同键的 _CONTEXTS 成员的 OSKenApp 子类之间共享。 OSKenApp 子类可以通过其 __init__ 的 kwargs 获得实例的引用,如下所示。
示例
_CONTEXTS = { 'network': network.Network } def __init__(self, *args, *kwargs): self.network = kwargs['network']
- _EVENTS = []¶
此 OSKenApp 子类将生成的事件类的列表。 应该仅在事件类定义在与 OSKenApp 子类不同的 python 模块中时才指定此列表。
- close()¶
清理方法。 方法名 close 是为 python 上下文管理器而选择的
- classmethod context_iteritems()¶
返回应用程序上下文的 (key, context class) 迭代器
- reply_to_request(req, rep)¶
发送对 send_request 发送的同步请求的回复。 第一个参数应该是 EventRequestBase 的实例。 第二个参数应该是 EventReplyBase 的实例。
- send_event(name, ev, state=None)¶
将指定的事件发送到由 name 指定的 OSKenApp 实例。
- send_event_to_observers(ev, state=None)¶
将指定的事件发送到此 OSKenApp 的所有观察者。
- send_request(req)¶
发出同步请求。 将 req.sync 设置为 True,将其发送到由 req.dst 指定的 OSKen 应用,并阻塞直到收到回复。 返回收到的回复。 该参数应该是 EventRequestBase 的实例。
- start()¶
在启动初始化完成后调用的钩子。
- class os_ken.controller.dpset.DPSet(*args, **kwargs)¶
DPSet 应用管理连接到此控制器的交换机(数据路径)集合。
用法示例
# ...(snip)... from os_ken.controller import dpset class MyApp(app_manager.OSKenApp): _CONTEXTS = { 'dpset': dpset.DPSet, } def __init__(self, *args, **kwargs): super(MyApp, self).__init__(*args, **kwargs) # Stores DPSet instance to call its API in this app self.dpset = kwargs['dpset'] def _my_handler(self): # Get the datapath object which has the given dpid dpid = 1 dp = self.dpset.get(dpid) if dp is None: self.logger.info('No such datapath: dpid=%d', dpid)
- get(dp_id)¶
此方法返回给定数据路径 ID 的 os_ken.controller.controller.Datapath 实例。
- get_all()¶
此方法返回一个元组列表,该列表表示连接到此控制器的交换机的实例。 该元组由数据路径 ID 和 os_ken.controller.controller.Datapath 的实例组成。
返回值如下所示
[ (dpid_A, Datapath_A), (dpid_B, Datapath_B), ... ]
- get_port(dpid, port_no)¶
此方法返回给定数据路径 ID 和端口号的 os_ken.controller.dpset.PortState 实例。 如果没有这样的数据路径连接到此控制器或没有这样的端口存在,则引发 os_ken_exc.PortNotFound。
- get_ports(dpid)¶
此方法返回给定数据路径 ID 的 os_ken.controller.dpset.PortState 实例列表。 如果没有这样的数据路径连接到此控制器,则引发 KeyError。