ONOS意图框架
程序员文章站
2022-07-06 20:20:51
...
1 意图基本概念
Intent是用于描述应用需求的不可变模型对象,ONOS核心根据其改变网络行为。
在最低级别上,可以用以下方式描述意图,即意图的组成:
1、Network Resource:一组对象模型,例如链路,它们绑定到受意图影响的网络部分。
2、Constraints:应用于一组网络资源的权重,例如带宽,光频率和链路类型
3、Criteria:数据包头字段或描述流量切片的模式。 Intent的TrafficSelector会将标准作为实现Criterion接口的一组对象进行承载。(对应流表项的匹配项)
4、Instructions :应用于流量切片的操作,例如标头字段修改或通过特定端口输出。 Intent的TrafficTreatment会将指令作为一组实现指令接口的对象进行传递。(对应流表项的Action)
2 意图状态转换
- (1)橙色为过渡状态,处于该状态时间较短。
- (2)蓝色为停车状态,处于该状态时间较长。
应用通过IntentManager接口实现意图提交,意图会先进入编译阶段,然后到安装阶段最后到已安装阶段。
编译阶段可能会失败,比如找不到符合要求的路径,这个时候意图进入失败阶段。当环境变化时,意图会重新进入编译阶段。
安装阶段可能会失败,比如设备断开与控制器的连接,框架会重新编译意图。如果编译成功重新回到安装阶段,如果编译失败则进入失败阶段。
已安装意图相关的网络资源发生变化时,意图会重新进入编译阶段。
对于已安装或安装失败的意图,应用可以发起撤回请求,成功撤回后,意图会从存储中移除。
意图重编译过程可以看成是一种重路由
3 意图相关源码
意图批量处理相关的核心类IntentManager、IntentAccumulator、AbstractAccumulator
意图重构流程
TopologyEvent
->ObjectiveTracker.TopologyChangeHandler
->IntentManager.InternalTopoChangeDelegate.triggerCompile
->IntentManager.buildAndSubmitBatches
->IntentManager.submit(intent)
->IntentStore.addPending(intentData)
->GossipIntentStore.addPending
->GossipIntentStore.pendingMap.put
->GossipIntentStore.InternalPendingListener
->IntentManager.InternalStoreDelegate.process
->IntentManager.IntentAccumulator.add
->IntentMager. InternalStoreDelegate.notify
->post(event)
->if WITHDRAW and !skipReleaseResourcesOnWithdrawal
->releaseResources
4 新增新类型意图基本流程
- (1)添加新类型意图,将其添加到core/api/net/intent包内,需要在org.onosproject.store.serializers.KryoNamespace注册自己的意图,以实现序列化。
- (2)实现一个新内部应用,在其内实现新Compiler,并向IntentManager注册。当新类型意图提交到IntentManager时候,其会根据意图类型调用相关的Compiler。
- (3)在新内部应用内添加路径计算服务,新Compiler调用新路径计算服务,实现路径计算。(原有的路径计算方法在onos/utils/misc/src/main/java/org.onlab/graph内实现)