2

我的问题可能有点模糊,因为我显然误解了很多,但无论如何我都会尝试一下:假设我在 Fat Tree 拓扑中有 7 个交换机,并且底部的四个每个都连接到两个主机。当我启动控制器时,我指示交换机发送 LLDP 数据包,这就是我学习拓扑的方式。我还计算了一个生成树,以便在我泛滥 ARP 请求之类的数据包时使用。

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

有任何想法吗?

4

1 回答 1

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)
于 2014-12-11T22:29:38.293 回答