使用 pox 控制器显示 SDN 中所有连接的交换机

Show all connected Switches in a SDN with pox controller

我的环境是mininet。我试图实现的是,每次开关连接或断开连接到 pox 控制器时,控制器应打印所有连接的开关(它们的 DPID)。

def _handle_ConnectionUp (self, event):

print "Switch %s has come up." % event.dpid

我可以使用它吗?在我可以使用 _handle_ConnectionUp 之前我需要实施什么?

提前致谢。

最好的方法是在您的控制器中定义一个集合 Class 并在其中添加所有交换机的 DPID。因此,每次在 _handle_ConnectionUp 中发生事件时,您都可以获得交换机的 DPID 并相应地添加它。

在你的主控制器中class初始化函数

self.switches = set()

和_handle_ConnectionUp函数

def _handle_ConnectionUp(self, event):
        """
        Fired up openflow connection with the switch
        save the switch dpid
        Args:
            event: openflow ConnectionUp event
        Returns: Nada
        """
        self.switches.add(pox.lib.util.dpid_to_str(event.dpid))

因此,如果需要,您应该捕获连接断开事件以移除开关。要获取 Dart 版本的 POX 控制器中当前可用的所有开放流事件混合的列表,请转到 https://github.com/noxrepo/pox/blob/dart/pox/openflow/init.py 事件混合

处的第 336 行
 _eventMixin_events = set([
    ConnectionUp,
    ConnectionDown,
    FeaturesReceived,
    PortStatus,
    FlowRemoved,
    PacketIn,
    BarrierIn,
    ErrorIn,
    RawStatsReply,
    SwitchDescReceived,
    FlowStatsReceived,
    AggregateFlowStatsReceived,
    TableStatsReceived,
    PortStatsReceived,
    QueueStatsReceived,
    FlowRemoved,
  ])

如需进一步帮助,您可以使用 Dart POX 查看功能齐全的 SDN 控制器代码,我为希腊塞萨洛尼基的 Python 聚会编写了该代码,可在 https://github.com/tsartsaris/pythess-SDN