2015-07-15 3 views
3

Я пытаюсь запустить 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) 

Кто-нибудь еще сталкивался с этой проблемой раньше? Как я могу это исправить?

+0

Дайте мне знать, если ответ ниже. –

ответ

1

Я столкнулся с той же проблемой (в зависимости от вашего приложения, может быть, это не проблема, просто предупреждение, которое можно игнорировать). Вот что я понял, после того, как find . -type f | xargs grep "ports is kept"

Это предупреждение срабатывает в ryu.topology.switches, вызовом _get_ports() в class Datapath файла ryu/controller/controller.py.

class Datapath(ofproto_protocol.ProtocolDesc): 
    #...... 
    def _get_ports(self): 
     if (self.ofproto_parser is not None and 
       self.ofproto_parser.ofproto.OFP_VERSION >= 0x04): 
      message = (
       '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\'.' 
      ) 
      warnings.warn(message, stacklevel=2) 
     return self._ports 

    def _set_ports(self, ports): 
     self._ports = ports 

    # To show warning when Datapath#ports is read 
    ports = property(_get_ports, _set_ports) 

Я понимаю, что если предупреждение от ryu.topology.switches или ryu.controller.dpset, вы можете игнорировать его; потому что эти два класса обрабатывают событие для вас. Но если вы напрямую используете Datapath, статус порта не обновляется автоматически. Кто-нибудь исправит меня, если я ошибаюсь.

class Switches(app_manager.RyuApp): 
    #...... 
    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER) 
    def port_status_handler(self, ev): 
1

Я столкнулся с этой проблемой раньше, но я просто проигнорировал ее, и до сих пор все работает так, как ожидалось.

Если вы пытаетесь изучить топологию, я бы рекомендовал использовать ryu.topology.api. т.е.

from ryu.topology.api import get_switch, get_link 

Существует tutorial. Однако есть некоторые недостающие вещи.

Вот то, что я до сих пор: Controller.py

Controller.py В двух функций get_switch(self, None) и get_link(self, None) даст вам список ссылок и переключателей.

+0

Спасибо за ответ! Я не могу проверить это прямо сейчас. Я вернусь к вам, когда смогу проверить это. Кажется, будет полезно! – Dakkaron

 Смежные вопросы

  • Нет связанных вопросов^_^