Floodlight的拓扑管理模块主要由TopologyManager 类来实现。TopologyManager监听LinkDiscoverManager的更新信息,一旦有链路更新了,就会实例化拓扑计算模块TopologyInstance,并运行函数compute()
重新计算路径,并为转发模块Forwarding提供路径转发服务。模块启动后会间隔500ms运行一次线程UpdateTopologyWorker
:
UpdateTopologyWorker
线程中只运行了一个方法updateTopology()
,该方法大致的流程:
- Step1:首先调用
applyUpdates()
方法获取拓扑更新,如果链路有更新如新增链路就执行addOrUpdateLink()
,如果链路down掉了,就执行删除removeLink()
; - Step2:然后调用
createNewInstance()
方法创建一个TopologyInstance
实例,并运行方法compute()
计算路径; - Step3:
lastUpdateTime
用于记录上一次更新的时间,informListeners()
向所有需要监听拓扑信息的模块传递拓扑更新信息。
个人分析,欢迎指正,若转载请注明出处!