OpenDaylight:OpenFlow FLOW_MOD 条消息

OpenDaylight: OpenFlow FLOW_MOD messages

我正在研究 SDN 并使用不同的控制器(Floodlight 1.1、OpenDaylight Lithium-SR2)。我有 2 个可以通过专用网络进行通信的虚拟机。在第一个虚拟机中有 SDN 控制器,而在第二个虚拟机中,我可以通过 Python 脚本使用 Mininet 设置网络拓扑。

我的目标是找出控制器的行为:给定一个 topology 有 5 个开关(带循环)并且只有 2 个主机,在 "ping" 命令之后,控制器 select 用于主机之间的路径?

Mininet 中的 "ping" 命令意味着 ARP 流量(发现主机的 MAC 地址)和 ICMP 回显 requests/replies。 在 ARP_REPLY 之后,我们看到来自链接到应答主机的交换机的 PACKET_IN 并且控制器向它 select 路径的所有交换机发送 FLOW_MOD 消息,根据使用 OpenFlow 1.0 协议。查看 this 序列图作为示例。

我用"tcpdump"工具抓取流量,用Wireshark研究了一下。

使用 Floodlight 我可以看到 FLOW_MOD 消息,其中包括 "src" 和 "dst" MAC 地址(以创建路径),但不能使用 OpenDaylight(有 FLOW_MOD 消息,但仅在 ARP 流量之前且仅使用广播 "src" 和 "dst" MAC 地址)。

我想了解为什么在 ARP 回复之后(而不是之前)我无法看到具有正确 MAC 地址 "src" 和 "dst" 的 FLOW_MOD 邮件).我不知道它是否取决于控制器的代码或OpenFlow协议。

在此先感谢您的帮助。

我发现了问题:ODL 默认在 Proactive 模式下工作,所以在 ARP 流量后我无法看到带有附加 MAC 地址的 Flow_Mod 消息。我将 ODL 设置为 Reactive 模式,修改位于 Controller 文件夹的 [ODL-folder]/etc/opendaylight/karaf/ 目录中的一些配置文件:

  • 54-arphandler.xml:默认情况下,属性 <is-proactive-flood-mode> 设置为 true,因此 ODL 在主动模式下工作。如果你想要混合 mode 将 属性 设置为 false,将 <is-hybrid-mode> 设置为 true。如果两者 属性设置为 false ODL 在反应模式下工作。
  • 58-l2switchmain.xml:设置属性<is-install-dropall-flow>为 错误的。通过这种方式,交换机发送不匹配的数据包(在 开关流 table) 到控制器而不掉线。

现在我可以看到 Flow_Mod 条带有附加 MAC 地址的消息,并检查 ODL 选择了哪个开关来建立主机之间的路径。