解析Floodlight之Forwarding模块

Floodlight的流表下发模块是Forwarding类。处理Packet-in消息的方法是processPacketInMessage(),该方法根据决策(Decision)或者包的类型决定对Packet-in消息执行动作,对于广播包(BroadCast)或多播包(MutiCast),执行泛洪doFlood()方法,其它类型数据包执行doForwardFlow()方法。
Forwarding类中对数据包的几种操作方法:

  • doForwardFlow():转发
  • doFlood():泛洪
  • doDropFlow():丢包
    接下来重点分析doForwardFlow()方法的实现流程。如图所示:
    forwarding

doForwardFlow方法的工作流程:

  • Step1:首先该方法会获取Packet_in消息中的数据包的匹配域,提取数据包中的交换机信息,依次判断源/目的交换机是否存在,是则继续执行,否则执行泛洪doFlood()
  • Step2:当源、目的交换机均存在,接着会判断两者是否同属一个island(即同一个二层网络),判断后的操作与前面步骤一样;
  • Step3:若同属一个island,然后会判断源目的交换机是否同一端口;
  • Step4:如果是在同一个island不同端口,便调取路径引擎(routingEngine)中的getRoute()方法获取源、目的交换机的路径,最后执行pushRoute()方法将路径下发到相应的交换机。

个人分析,欢迎指正,若转载请注明出处!