Pox / Mininet:学习主机的位置

时间:2014-09-26 18:40:27

标签: pox mininet

我的问题可能有点模糊,因为我明显误解了很多,但我还是试试看: 假设我在Fat Tree topology中有7个交换机,而后四个每个都连接到两个主机。当我启动控制器时,我指示交换机发送LLDP数据包,这就是我学习拓扑的方法。此外,我计算了一个生成树,当我像ARP请求一样泛滥数据包时使用它。

我的问题:如何了解某个主机所连接的交换机?如果h1h3发送第3层数据包,我知道如何路由数据包,因为我有生成树,但这可能不是最短路由。我使用Dijkstra计算从每个交换机到所有其他交换机的最短路由,但如果我想向h3发送消息,我不知道哪个交换机直接连接到它。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

负责这样做的组件是Host_tracker。您需要在代码中监听Host_tracker事件,如下所示:

from pox.core import core
import pox
import pox.lib.packet as pkt
from pox.lib.revent import *
from pox.openflow.discovery import Discovery
from pox.host_tracker import host_tracker
import pox.openflow.libopenflow_01 as of

class YourController(EventMixin):
  def __init__ (self):
    def startup ():
      core.openflow.addListeners(self, priority=0)
      core.openflow_discovery.addListeners(self)
      core.host_tracker.addListeners(self)
      """ Here is the place where is created the listener"""
    core.call_when_ready(startup, ('openflow','openflow_discovery', 'host_tracker'))


  def _handle_HostEvent (self, event):
    """ Here is the place where is used the listener"""
    print "Host, switchport and switch...", event.entry

  def _handle_PacketIn(self, event):
    """ Packet processing """
def launch():
  from host_tracker import launch
  launch()
  core.registerNew(YourController)