Floodlight下发流表过程分析

当一个packet到达openflow交换机,会进行流表的匹配,如果没有找到相应的流表项,就会发送一个packet_in消息到达SDN controller端,控制器根据一定的路由算法决策后,会向该路径上的所有交换机下发流表(也就是发送FLOW_MOD消息,里面有对应的action)。这里要知道的是在SDN的环境下,控制器具有全局拓扑信息,每当有链路状态改变时就会跟新拓扑,而路由的计算是需要下发转发规则的时候进行。下面对这个流程进行详细分析。  
LinkDiscoveryManager完成的工作是增加或更新链路状态,加入到一个LDUpdates队列中,接下来看拓扑管理模块TopologyManager,它在启动的时候会新起一个线程 NewInstanceWorker :首先根据消息类型来增删该链路的状态,然后创建一个计算拓扑的实例TopologyInstance来计算出拓扑并存储,具体过程如下:
  当完成拓扑计算后,当来了一个packet_in,就会根据源目SW得到路径。 接下来防火墙,负载均衡模块会发挥作用(这里先略过)。 最后路由模块会完成最终的下发流表操作,这里看Forwarding模块中的processPacketInMessage()。会从packet中得到相应的源目设备实例IDevice,而后判断是否在同一个openflow island上,如果不在的话就doFlood(sw, pi, cntx),这里主要看二者在同一个island的情况。然后得到每个设备的AttachmentPoints,然后找到二者能够连通的粘合点,接下来得到路劲,最后构造flow_mod消息,写入通道,下发给SW。  

相关内容推荐