概述
设备子系统负责发现和跟踪组成网络的设备,并使管理员和应用程序能够控制它们。大多数ONOS核心子系统都依赖Device子系统的Device和Port的模型对象来进行管理和创建,也会通过Device Provider来和网络进行交互。
Device子系统由以下几个部分组成:
- DeviceManager : 能够与多个Provider通过deviceproviderservice接口交互和多个监听者通过deviceservice接口进行交互。
- DeviceProviders,各有自己的网络协议库或手段与网络进行交互。
- Devicestore,跟踪Device模型对象并生成deviceevents。
Model Objects and Provider Representations
上一节曾讲过ONOS会描述各种网络组件和属性为Core层协议无关的模型对象,在Provider层表述为协议相关的具体对象。以下是两层之间翻译的主要表达方式:
The OpenFlow Subsystem
OpenFlow的南向是由openflowdeviceprovider和OpenFlow驱动组件组成的。OpenFlow的子系统实现了控制器端的OpenFlow协议,通过Loxi工具来生成java代码实现的。因此,当前支持的协议版本1.0和1.3,前者有Nicira扩展的角色协商功能。
下图概述了南向的组织情况:
The OpenFlow Controller
OpenFlow的功能是通过openflowcontroller(OFController图)来进行协同的。这个组件的存储了Switch dpid和OpenFlowSwitch对象之间的映射关系,并生成OpenFlow事件给听众(Provider)订阅。Provider可以订阅以下侦听器中的一个或多个:
- openflowswitchlistener - 设备事件监听器,例如设备连接和断开。例子:openflowdeviceprovider,openflowlinkprovider。
- openfloweventlistener - OpenFlow消息监听器。例如:在openflowruleprovider。
- packetlistener - 传入流量包监听器(packetins)。例子:openflowpacketprovider,openflowlinkprovider,openflowhostprovider。
OpenflowController还负责给每一个Switch对象建立、管理沟通Channel为每个开关对象的了解。连接是通过控制器的建立的,和每个连接的Switch的状态是由openflowswitchagent来记录的。具体来说,控制器将TCP OpenFlow通道(OFChannelHandler, 当前是Netty实现)和一个接入的TCP连接相关联(标记为“通道”上)。