1

RYU で OpenFlow アプリケーションの情報を OpenFlow から取得しようとしています。

取得したい情報を以下に示します。

SWITCHごとに欲しい

        - DPID
        - STATE   (ACTIVE/INACTIVE)

PORTごとに、欲しい

         - DPID
         - PORT_NUMBER
         - STATE
         - PORT_STATE

ポート状態 - OF からのポート ステータス メッセージを追跡します。1 - アクティブ。0 - INACTIVE.OpenFlow 1.0 には、メモリからの 2 種類のポート ステータスがあります。1 つはポートにリンクがあるかどうかに関するもので、もう 1 つはポートが管理上稼働しているかどうかに関するものです。このポート ステータスは 2 番目のタイプを追跡していると思います。つまり、リンクがなくても、ポートが管理上稼働している場合、ポート ステータスは 1 になるはずです。

上記の情報を得るには、どのメッセージを聴けばよいか、また、ofp_event.EventOFPStateChange に関する情報を取得してみました。

http://ryu.readthedocs.org/en/latest/genindex.htmlを見てみまし たが、ofp_event.EventOFPStateChange に関する情報が見つかりませんでした。

私を正しい方向に向ける助けがあれば、高く評価されます。

4

1 に答える 1

3

次のコードを使用できます。接続されているすべてのスイッチを識別するために使用しています。DPID と出力ポートだけが必要でした。ただし、他の情報については「ev.link」を使用できます。お役に立てれば。`

class OF13(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

_CONTEXTS = {
    'dpset': dpset.DPSet,
}

def __init__(self, *args, **kwargs):
    super(OF13, self).__init__(*args, **kwargs)
    self.dpset = kwargs['dpset']     

def _get_hwaddr(self, dpid, port_no):
    return self.dpset.get_port(dpid, port_no).hw_addr

@handler.set_ev_cls(event.EventLinkAdd)
def link_add(self, ev):
    print ev.link.src, ev.link.dst
    print self._get_hwaddr(ev.link.src.dpid, ev.link.src.port_no)        
于 2014-07-17T03:35:04.373 に答える