看看有趣的ONOS Ⅵ:标签、隧道子系统

标签子系统

说明:翻译自学自https://wiki.onosproject.org/display/ONOS/Label+Subsystem

总览

标签子系统旨在支持基于MPLS的应用程序。作为系统资源,标签在ONOS中进行管理,应用程序可以通过北向API调用获取或释放标签资源。标签被构造为资源池,并保存在ONOS存储中。标签池是一种容器。池中的标签定义为连续数字。根据应用程序的类型及其特定要求,提供了两种标签池。第一个,设备标签池,由装置本身提供当设备被连接到网络。另一个是global-label-pool,是手动创建的。用户应用程序可以通过名为“”的虚拟设备标识将全局标签池作为特殊的设备标签池。global_resource_pool_device_id”。

设备标签池和全局标签池可以共存于具有不同标签范围的ONOS存储中。因此,当运营商开始在其网络中部署ONOS时,应仔细计划每个池中的标签范围。

提供了两组相应的API,以在ONOS中的这两种类型的池上运行。CLI命令也已实现以访问标签存储。

下图显示了标签子系统的体系结构。

标签子系统的体系结构

工作流程:

  1. 设备连接到网络后,它将池信息(pool information)上载到Store中。
  2. 应用程序可以通过北向API来应用或释放标签。
  3. 应用程序侦听标签子系统事件,而标签子系统侦听设备子系统事件。
  4. 设备消失后,设备子系统会通知标签子系统指示哪个设备已消失,然后标签子系统销毁相应设备的标签池。应用了已消失设备中标签的所有应用程序都会收到通知,并释放已消失设备的所有应用标签。

特点

  • LabelResourceAdminService为管理员提供与标签资源池清单交互的服务。
  • LabelResourceService为应用程序提供服务,以应用,发布和查询标签。
  • 一个LabelResourceManager通过一个LabelResourceProviderService接口管理与多个Providers程序的接口,并通过一个LabelResourceService接口管理多个侦听器
  • LabelResourceProviders支持其自己的网络协议库或与网络接口的方式
  • 一个LabelResourceStore跟踪LabelResourcPool模型对象并生成LabelResourceEvent

用于ONOS应用程序的编程API

标签在ONOS中作为公共系统资源提供。独立的应用程序通过调用ONOS北向API使用标签资源。

同时,ONOS为设备驱动程序提供了南向标签API,以与ONOS进行通信。

有两种方法可以创建设备的初始标签资源池,即设备上载和管理员计划。首先,设备驱动程序可以调用南向API即deviceLabelResourcePoolDetected,以将其本地标签上传到ONOS。另一种方法是在部署ONOS时计划标签。在为每个设备计划标签范围之后,网络管理应用程序将调用北向API即createDevicePool为设备创建标签池。管理员策划的标签将覆盖设备中所有报告的标签。全局标签始终由管理应用程序通过调用createGlobalPool创建。

创建标签池后,客户应用程序可以通过调用ONOS的北向API使用标签资源。应用程序调用getDeviceLabelResourcePool来获取设备标签资源池,或调用getGlobalLabelResourcePool来获取全局标签资源池,然后调用applyFromDevicePoolapplyFromGlobalPool以从设备标签池或全局标签池中获取标签。在需要标签之前,应用程序有机会在ONOS中检查标签资源的状态。例如,调用isDevicePoolFull来检查池中是否有可用的标签,或者调用getFreeNumOfDevicePool来获取池中当前未使用的标签。使用标签后,应用程序应通过调用releaseToDevicePool*releaseToGlobalPool*将标签返回到ONOS标签池。

以下列出了ONOS中可用的当前API。

南向API

LabelResourceProviderService

  • deviceLabelResourcePoolDetected:表示已检测到设备标签资源池,并将标签上载到ONOS。
  • deviceLabelResourcePoolDestroyed:表明标签资源池已被破坏的信号。

北向API

LabelResourceAdminService

  • createDevicePool从开始标签到结束标签创建设备标签资源。
  • createGlobalPool创建全局标签资源池。
  • destroyDevicePool销毁设备标签资源池。
  • destroyGlobalPool销毁全局标签资源池。

LabelResourceService

  • applyFromDevicePool从设备资源池中应用标签。
  • applyFromGlobalPool从全局标签资源池中应用标签。
  • releaseToDevicePool将标签释放到设备池。
  • releaseToGlobalPool将标签发布到全局资源池。
  • isDevicePoolFull检查设备池是否已满。
  • isGlobalPoolFull检查全局资源池是否已满。
  • getFreeNumOfDevicePool获取设备标签资源池的未使用标签号。
  • getFreeNumOfGlobalPool获取全局标签资源池的未使用标签号。
  • getDeviceLabelResourcePool获取设备标签资源池。
  • getGlobalLabelResourcePool获取全局标签资源池。

标签管理CLI命令

除了API,ONOS还提供CLI命令以用于标签使用和管理目的。管理员可以使用CLI命令与标签资源池的清单进行交互。当前ONOS支持以下CLI命令:

  • label-apply通过特定的设备ID应用从设备池标签资源
  • global-label-apply从全局资源池中应用全局标签
  • label-pool-create通过特定设备ID创建标签资源池
  • global-label-pool-create创建全局标签资源池。
  • label-pool-destroy按特定设备ID销毁标签资源池
  • global-label-pool-destroy销毁全局标签资源池
  • global-label-pool获取全局标签资源池信息。
  • label-pool通过特定设备ID获取标签资源池信息
  • global-label-release将标签发布到全局标签资源池。
  • label-release释放标签ID以按特定设备ID标记资源池

隧道子系统

说明:翻译自https://wiki.onosproject.org/display/ONOS/Tunnel+Subsystem

总览

隧道是ONOS中的一种系统资源。隧道子系统旨在支持应用程序的隧道设置。该子系统是基于生产者和消费者(PC)模型的处理方法构造的。PC模型区分两种类型的应用程序:隧道生产者和隧道使用者。隧道生产者是能够创建,更新和删除隧道的应用程序。隧道子系统负责在ONOS存储中存储和管理隧道。隧道使用者是可以从ONOS存储借用隧道并将隧道返回到ONOS存储的应用程序。消费者可以通过ONOS与生产者进行通信以创建隧道。

隧道生产者与消费者模型

下图描述了隧道子系统的体系结构。

体系结构

工作流程:

  1. 隧道首先由隧道生产者创建,然后隧道消费者可以从隧道存储中借用隧道。
  2. 当隧道内的消费者请求是不可用,则TunnelManager调用的方法TunnelProvider告知一下消费者与隧道的属性,要求生产商。生产者创建隧道后,该隧道将存储在ONOS的TunnelStore中。最终,TunnelStore将通知消费者该隧道可用,并且消费者可以再次开始借用。

特点

  • TunnelAdminService为管理员提供与隧道清单进行交互的服务。
  • TunnelService为消费者提供服务、借阅、归还、查询隧道服务。
  • 一个TunnelManager通过一个TunnelProviderService接口管理与多个提供程序的对接,并通过一个TunnelService接口管理多个侦听器。
  • TunnelProvider支持它们自己的网络协议库或与网络接口的方法。
  • 一个TunnelStore跟踪Tunnel模型对象并生成TunnelEvent

用于ONOS应用程序的编程API

隧道由ONOS作为一种系统资源进行管理。作为隧道使用方的客户应用程序可能需要通过北向API从发出ONOS隧道调用。隧道由生产者应用程序通过南向API创建,并存储在ONOS内部。当前的北向API支持能够删除和更新未来的特定隧道应用程序(通常为admin)。

首先,应用程序应注册隧道事件以通知新的隧道创建。应用程序开始通过调用borrowTunnel从ONOS请求隧道。如果两个或多个应用程序需要同一条隧道,则ONOS将根据FIFO顺序为应用程序服务,直到该隧道的带宽不再满足要求为止,然后将拒绝未服务的请求。在获取隧道或出于管理目的之前,应用程序可以通过隧道的ID、类型、源/目标点等查询隧道资源的可用性。类似地,应用程序可能需要具有不同参数的隧道。如果所需的隧道在资源池中不可用,则ONOS将通过调用南向API来请求生产者应用程序创建它来生成这种类型的隧道。应用程序完成对隧道的使用后,应通过调用北向API即returnTunnel将它们返回到ONOS资源池。

以下列出了ONOS中可用的当前API。

南向API

  • setupTunnel在ONOS中为每个消费者应用程序请求设置一个隧道,以指示提供者在有或没有给定设备的情况下创建隧道。
  • releaseTunnel在ONOS中会根据每个消费者应用程序请求释放一个隧道,以指示提供程序删除有或没有给定设备的隧道。
  • updateTunnel在ONOS中会根据每个消费者应用程序请求更新隧道,以指示提供程序在有或没有给定设备的情况下更新隧道。
  • tunnelAdded生产者向ONOS发出已添加隧道的信号。
  • tunnelRemoved生产者向ONOS发出已删除隧道的信号。
  • tunnelUpdated生产者向ONOS发送信号,通知隧道已更改(例如,感测到隧道的更改)。

北向API

  • removeTunnel删除配置的隧道。
  • removeTunnel删除通向指定标签和从指定标签引出的预配置隧道。
  • removeTunnels删除通往指定连接点和从指定连接点出发的所有已配置隧道。
  • updateTunnel调用核心以根据指定的隧道参数更新隧道。
  • borrowTunnel借用特定的隧道。如果通道在存储中不可用,则返回“null”对象,并记录通道订阅。创建隧道后,ONOS会通知订阅的使用者。
  • borrowTunnel借由tunnelName特定的隧道。如果通道在商店中不可用,则返回“null”对象,并记录通道订阅。创建隧道后,ONOS会通知订阅的使用者。
  • borrowTunnel借用源和目的地之间的所有隧道。如果通道在存储中不可用,请返回一个空集合,并记录通道订阅。创建隧道后,ONOS会通知订阅的使用者。否则ONOS核心将返回所有隧道,并且消费者确定要使用哪个隧道。
  • borrowTunnel在源和目的地之间借用所有指定类型的隧道。如果通道在商店中不可用,请返回一个空集合,并记录通道订阅。创建隧道后,ONOS会通知订阅的使用者。否则ONOS核心将返回所有可用的隧道,并由消费者确定要使用哪个隧道。
  • returnTunnel返回要存储的特定隧道。
  • returnTunnel返回所有要存储的特定名称隧道。如果通道在商店中不可用,则返回“null”对象,并记录通道订阅。创建隧道后,ONOS会通知订阅的使用者。
  • returnTunnel返回要存储的源和目标之间的所有特定类型的隧道。
  • returnTunnel将源和目标之间的所有隧道返回到商店。
  • queryTunnel通过特定的隧道标识查询隧道。
  • queryTunnelSubscription按使用者查询所有隧道订阅记录。
  • queryTunnel查询所有指定类型的隧道。
  • queryTunnel查询源点和目的点之间的所有隧道。
  • queryAllTunnels查询所有隧道。
  • tunnelCount查询所有隧道。

隧道管理CLI命令

管理员可以使用以下控制台命令与隧道资源清单进行交互:

  • tunnel-create支持创建隧道。被生产者使用。
  • tunnel-update支持通过tunnel id更新隧道。被生产者使用。
  • tunnel-remove支持通过隧道标识符,源点,终点或隧道类型来删除隧道。被生产者使用。
  • tunnel-subscriptions通过消费者ID查询消费者的所有请求订单。被消费者使用。
  • tunnel通过隧道标识符,源点,终点等查询隧道。被消费者使用。
  • Tunnel-borrow通过隧道标识符,源点,终点,隧道类型或隧道名称借用隧道。被消费者使用。
  • Tunnel-return返回通过隧道标识符,源点,终点,隧道类型或隧道名称返回所有隧道。被消费者使用。

你可能感兴趣的:(看看有趣的ONOS Ⅵ:标签、隧道子系统)