首先介绍代码是如何走到消息处理的 APP ,然后分析分发消息的规则的代码的结构和语法。
代码如何走到消息处理的方法
- ① OFChannelHandler在Channel状态WAIT_DESCRIPTION_STAT_REPLY中调用Controller类的getOFSwitchInstance方法来获取交换机实例;
- ② Controller类的getOFSwitchInstance方法,则调用DriverManager的静态方法getSwitch来获取不同厂家实现的交换机实例,获取的原则是基于OFDescStatsReply消息中的“厂家信息”和“硬件信息”。注意:在实例化交换机之后,将OpenFlowAgent实例赋给了该交换机,其中OpenFlowAgent实例的产生是在OpenFlowControllerImpl类的内部类OpenFlowSwitchAgent类实例化的,见⑤。
- ③ 这里的driver意味着对接不同厂家的OF交换机,上图只是列出了少数几种OF交换机,例如:支持OF_13的OVS,OF_10的OVS和光的OF交换机
- ④ 这里的OF交换机都继承了AbstractOpenFlowSwitch的handleMessage方法,而handleMessage方法调用了就是agent的processMessage方法,然后processMessage方法调用了processPacket方法,在processPacket方法中,就是处理消息分发的分发口
-
分析分发消息的规则的代码的结构和语法