Pox/Mininet: место обучения хозяев
Мой вопрос может быть немного расплывчатым, поскольку я явно неправильно понимаю, но я все равно попробую: предположим, у меня есть 7 переключателей в топологии Fat Tree, и четыре нижних подключены к двум хостам. Когда я запускаю контроллер, я приказываю коммутаторам отправлять пакеты LLDP, и именно так я изучаю топологию. Также я вычисляю Spanning Tree, чтобы использовать, когда я заливаю пакеты как запросы ARP.
Моя проблема: как узнать, к какому коммутатору подключен определенный хост? Если h1
отправляет пакет уровня 3 h3
Я знаю, как маршрутизировать пакеты, потому что у меня есть связующее дерево, но это может быть не самый короткий маршрут. Я использую Dijkstra для вычисления кратчайших маршрутов от каждого коммутатора ко всем другим, но если я хочу отправить сообщение h3
Я не знаю, какой переключатель напрямую подключен к нему.
Есть идеи?
1 ответ
Компонент, ответственный за это, является 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)