标签子系统
说明:翻译自学自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命令也已实现以访问标签存储。
下图显示了标签子系统的体系结构。
工作流程:
- 设备连接到网络后,它将池信息(pool information)上载到Store中。
- 应用程序可以通过北向API来应用或释放标签。
- 应用程序侦听标签子系统事件,而标签子系统侦听设备子系统事件。
- 设备消失后,设备子系统会通知标签子系统指示哪个设备已消失,然后标签子系统销毁相应设备的标签池。应用了已消失设备中标签的所有应用程序都会收到通知,并释放已消失设备的所有应用标签。
特点:
- 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
来获取全局标签资源池,然后调用applyFromDevicePool
或applyFromGlobalPool
以从设备标签池或全局标签池中获取标签。在需要标签之前,应用程序有机会在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与生产者进行通信以创建隧道。
下图描述了隧道子系统的体系结构。
工作流程:
- 隧道首先由隧道生产者创建,然后隧道消费者可以从隧道存储中借用隧道。
- 当隧道内的消费者请求是不可用,则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
返回通过隧道标识符,源点,终点,隧道类型或隧道名称返回所有隧道。被消费者使用。