2

Python の 2 つの関数を理解しようとしています。これは、ryu オープンソース コントローラーのコードに由来します。何らかの方法で LLDP を実装し、トポロジー情報を保存しようとしていると思われます。

 @set_ev_cls(event.EventSwitchRequest)

@set_ev_cls(event.EventLinkRequest)

上記のステートメントが Python で何を意味するのかわかりません。誰かが意味を説明できれば素晴らしいと思います。ファイル全体をここに示します。Python ソースファイルへのリンク

 @set_ev_cls(event.EventSwitchRequest)
    def switch_request_handler(self, req):
        # LOG.debug(req)
        dpid = req.dpid

        switches = []
        if dpid is None:
            # reply all list
            for dp in self.dps.itervalues():
                switches.append(self._get_switch(dp.id))
        elif dpid in self.dps:
            switches.append(self._get_switch(dpid))

        rep = event.EventSwitchReply(req.src, switches)
        self.reply_to_request(req, rep)

    @set_ev_cls(event.EventLinkRequest)
    def link_request_handler(self, req):
        # LOG.debug(req)
        dpid = req.dpid

        if dpid is None:
            links = self.links
        else:
            links = [link for link in self.links if link.src.dpid == dpid]
        rep = event.EventLinkReply(req.src, dpid, links)
        self.reply_to_request(req, rep)
4

2 に答える 2

0

@set_event_cls(event.*)行はpythonデコレータです。それらを説明するリソースはたくさんあるので、ここでは説明しません。

この場合、それらはネットワーク イベントのコールバックを登録するために使用されます。基本的に、set_event_clsデコレーターはその関数 (例: switch_request_handler) をイベント クラスに関連付けます (例: event.EventSwitchRequestRyu が を受け取ると、パラメーターとして渡されたリクエストEventSwitchRequestで呼び出します.switch_request_handlerreq

実際のデコレータ関数set_event_cls()handler.pyで定義されています。

于 2015-05-05T06:06:23.933 に答える
0

イベントの観察: Ryu アプリケーションは、ryu.controller.handler.set_ev_cls デコレーターを使用してハンドラー メソッドを提供することにより、特定のタイプのイベントに対する関心を登録できます。

訪問: http://ryu.readthedocs.org/en/latest/ryu_app_api.html

于 2014-05-27T01:22:47.880 に答える