Ryu Tutorial Nachtrag

Ein Hinweis, dass ich es schwer hatte, ihn in der ryu Python Openflow-Bibliothek zu finden, da er im Tutorial aufgeführt zu sein scheint.

Schreiben Sie es zunächst in "ryu" als "ereignisgesteuerte" Anwendung. Ereignisse sind abgeleitete Klassen von ryu.event.EventBase.

Beim Schreiben einer Openflow-Anwendung wird häufig "first" gesagt. Mit ryu frage ich mich, welches Ereignis ich zu diesem Zeitpunkt verwenden soll, aber das scheint gut zu sein.

app.py


from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import set_ev_cls, MAIN_DISPATCHER

class App1(app_manager.RyuApp):
    @set_ev_cls(ofp_event.EventOFPStateChange, MAIN_DISPATCHER)
    def on_switch_ready(self, ev):
        assert isinstance(ev, ofp_event.EventOFPStateChange)
        print("switch ready")

Ausführungsbeispiel. Unter Ubuntu können Sie es beispielsweise ausführen, indem Sie das Paket "ryu-bin" einschließen.

ryu-manager --config-file=/dev/null app.py

Event

Da Ryu ereignisgesteuert ist, beginnt die Geschichte nicht, ohne das Ereignis zu kennen. Unter ryu.controller, das standardmäßig verwendet wird, gibt es die folgenden Ereignisse. Zunächst werde ich sie kurz auflisten. Ich werde später einen Kommentar schreiben.

from repräsentiert die Herausgeberseite der Veranstaltung und to repräsentiert die Abonnentenseite.

ryu.controller.ofp_event

Ereignisse mit einer 1: 1-Entsprechung zu relativ offenen Protokollnachrichten werden behandelt.

Datenpfadstatus Benachrichtigungssystem

Das Folgende wird dynamisch als Unterklasse von "EventOFPMsgBase" generiert. Alle Ereignisse werden aus der recv-Schleife generiert.

Portstatus Benachrichtigungssystem. Wird nach EventOFPPortStatus ausgegeben.

ryu.controller.dpset

openflow-Protokoll Ein Ereignis, mit dem Sie das Aktivieren / Deaktivieren von Datenpfaden und den Status eines Ports auf einer höheren Ebene als direkt behandeln können. Es kann als DPSet-Dienst verwendet werden.

Veranstaltungskommentar

Zusammengenommen werden beim Anschließen an einen Openflow 1.3-Switch die folgenden Ereignisse automatisch abgespielt.

--TCP-Verbindung hergestellt

Die sogenannten Einschaltbereitschaftspunkte sind also "EventOFPStateChange", "MAIN_DISPATCHER" oder "EventDP".

Service

Wie beim obigen DPSet können Ereignisquellen jetzt als Dienste hinzugefügt werden. Dienste werden durch Zeichenfolgen in "ryu" gekennzeichnet. Die folgenden Dienste sind in Ryu vorhanden. Diese werden normalerweise automatisch aktiviert, wenn Sie einen Ereignishandler registrieren und ihn verwenden (set_ev_cls).

Zum Beispiel, um ryu.controller.dpset zu verwenden:

app2.py


from ryu.base import app_manager
from ryu.controller import dpset, ofp_event
from ryu.controller.handler import set_ev_cls

class App2(app_manager.RyuApp):
    @set_ev_cls(dpset.EventDP)
    def on_dp_change(self, ev):
        print("datapath event", ev.enter)

Das folgende Beispiel ist auch eine Ameise als Einschaltbereitschaftspunkt unter Verwendung von Service.

app3.py


import ryu.topology.event
from ryu.base import app_manager
from ryu.controller.handler import set_ev_cls

class App3(app_manager.RyuApp):
    @set_ev_cls(ryu.topology.event.EventSwitchEnter)
    def on_enter(self, ev):
        print("switch ready")

Dependent singleton

Als nicht bedientes Formular können Sie auch eine Klasse registrieren und verwenden, die explizit von "RyuApp._CONTEXTS" abhängt. Wird beim Start als Singleton generiert und über kwargs in RyuApp .__ init__ übergeben.

app4.py


from ryu.base import app_manager

class A(object):
   def __init__(self):
       print("init A")

class App4(app_manager.RyuApp):
    _CONTEXTS = dict(a=A)
    def __init__(self, *args, **kwargs):
        super(App4, self).__init__(*args, **kwargs)
        print(kwargs)

In diesem Beispiel wird kein Handler für die Openflow-Nachricht festgelegt. Beenden Sie den Vorgang nach Abschluss der Initialisierung. Das ryu selbst ist ein Ereignis-Hub, und das Openflow-Protokoll scheint mit der Idee erstellt worden zu sein, dass es eine der Anwendungen ist, die von Ereignissen in der Kategorie ofp_event gesteuert werden.

Recommended Posts

Ryu Tutorial Nachtrag
sqlalchemy Tutorial
PyODE Tutorial 2
Python-Tutorial
PyODE Tutorial 1
PyODE Tutorial 3
TensorFlow Tutorial Tutorial