ONOS意图框架

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内实现)
    新增waypoint意图
    构建并提交意图,不经过2,4点
    在这里插入图片描述
    在这里插入图片描述

5 代码仓库

https://github.com/custhk/intentx

猜你喜欢

转载自blog.csdn.net/daihanglai7622/article/details/109131042