Я пытаюсь запустить ryu, особенно обнаружение топологии.Datapath # ports поддерживается для совместимости
Теперь я запускаю демонстрационное приложение для этого под ryu/topology/dumper.py
, которое должно сбрасывать все события топологии. Я в директории ryu/topology
и запускаю его, используя ryu-manager dumper.py
. Версия ryu-manager - 2.23.2.
Вскоре после начала он дает мне эту ошибку:
/usr/local/lib/python2.7/dist-packages/ryu/topology/switches.py:478: UserWarning:
Datapath#ports is kept for compatibility with the previous openflow versions (< 1.3).
This not be updated by EventOFPPortStatus message. If you want to be updated,
you can use 'ryu.controller.dpset' or 'ryu.topology.switches'.
for port in dp.ports.values():
Что действительно странно для меня является то, что он рекомендует использовать ryu.topology.switches
, но эта ошибка вызвана линией 478, что очень файл!
Функция в вопросе заключается в следующем:
class Switches(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION, ofproto_v1_2.OFP_VERSION,
ofproto_v1_3.OFP_VERSION, ofproto_v1_4.OFP_VERSION]
_EVENTS = [event.EventSwitchEnter, event.EventSwitchLeave,
event.EventPortAdd, event.EventPortDelete,
event.EventPortModify,
event.EventLinkAdd, event.EventLinkDelete]
DEFAULT_TTL = 120 # unused. ignored.
LLDP_PACKET_LEN = len(LLDPPacket.lldp_packet(0, 0, DONTCARE_STR, 0))
LLDP_SEND_GUARD = .05
LLDP_SEND_PERIOD_PER_PORT = .9
TIMEOUT_CHECK_PERIOD = 5.
LINK_TIMEOUT = TIMEOUT_CHECK_PERIOD * 2
LINK_LLDP_DROP = 5
#...
def _register(self, dp):
assert dp.id is not None
self.dps[dp.id] = dp
if dp.id not in self.port_state:
self.port_state[dp.id] = PortState()
for port in dp.ports.values(): # THIS LINE
self.port_state[dp.id].add(port.port_no, port)
Кто-нибудь еще сталкивался с этой проблемой раньше? Как я могу это исправить?
Дайте мне знать, если ответ ниже. –