我刚读完OpenFlow规范here的1-6.2节。
第6.1.2节说:
打包事件可以配置为缓冲数据包。对于由输出动作生成的数据包 流条目或组存储桶,可以在输出操作本身中单独指定(请参见7.2.6.1), 对于其他输入包,可以在交换机配置中进行配置(请参见7.3.2)。如果packet-in事件是 配置为缓冲数据包,并且交换机具有足够的内存来缓冲它们,数据包进入事件 仅包含一部分数据包头和一个缓冲区ID,控制器在使用该缓冲区ID时 准备好交换机转发数据包。不支持内部缓冲的交换机是 配置为不为入包事件缓冲数据包,或者内部缓冲已用完,必须 将完整的数据包作为事件的一部分发送给控制器。缓冲的数据包通常将通过 来自控制器的Packet-out或Flow-mod消息,或一段时间后自动过期
这听起来像每个到达OpenFlow交换机的数据包都必须将异步消息发送到控制器以做出转发决定。但是,第5章听起来像是交换机具有一组OpenFlow流,并在其末尾生成一个操作集,该操作集确定应对数据包执行的操作,并且仅当流表未命中时才将数据包转发给控制器。
在什么情况下会将数据包发送到控制器以做出决定?总是这样吗?还是只是偶然的?
答案 0 :(得分:0)
只要将out端口设置为控制器,数据包就会发送到OpenFlow控制器。
PACKET_IN事件在交换机上的流量不匹配时发生,然后将其发送到控制器。否则,将不会创建任何事件-交换机仅根据流规则转发数据包,而控制器则是最明智的选择。