我的问题可能有点模糊,因为我明显误解了很多,但我还是试试看: 假设我在Fat Tree topology中有7个交换机,而后四个每个都连接到两个主机。当我启动控制器时,我指示交换机发送LLDP数据包,这就是我学习拓扑的方法。此外,我计算了一个生成树,当我像ARP请求一样泛滥数据包时使用它。
我的问题:如何了解某个主机所连接的交换机?如果h1
向h3
发送第3层数据包,我知道如何路由数据包,因为我有生成树,但这可能不是最短路由。我使用Dijkstra计算从每个交换机到所有其他交换机的最短路由,但如果我想向h3
发送消息,我不知道哪个交换机直接连接到它。
有什么想法吗?
答案 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)