2

明らかに多くの誤解をしているため、私の質問は少し曖昧かもしれませんが、とにかく試してみます: ファットツリー トポロジに 7 つのスイッチがあり、下の 4 つがそれぞれ 2 つのホストに接続されているとします。コントローラを起動するときに、スイッチに 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 に答える