backing up
[vsorcdistro/.git] / ryu / build / lib.linux-armv7l-2.7 / ryu / controller / ofp_event.py
diff --git a/ryu/build/lib.linux-armv7l-2.7/ryu/controller/ofp_event.py b/ryu/build/lib.linux-armv7l-2.7/ryu/controller/ofp_event.py
new file mode 100644 (file)
index 0000000..f5c0c1c
--- /dev/null
@@ -0,0 +1,152 @@
+# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation.
+# Copyright (C) 2011 Isaku Yamahata <yamahata at valinux co jp>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+OpenFlow event definitions.
+"""
+
+import inspect
+import time
+
+from ryu.controller import handler
+from ryu import ofproto
+from . import event
+
+
+NAME = 'ofp_event'
+
+
+class EventOFPMsgBase(event.EventBase):
+    """
+    The base class of OpenFlow event class.
+
+    OpenFlow event classes have at least the following attributes.
+
+    .. tabularcolumns:: |l|L|
+
+    ============ ==============================================================
+    Attribute    Description
+    ============ ==============================================================
+    msg          An object which describes the corresponding OpenFlow message.
+    msg.datapath A ryu.controller.controller.Datapath instance
+                 which describes an OpenFlow switch from which we received
+                 this OpenFlow message.
+    timestamp    Timestamp when Datapath instance generated this event.
+    ============ ==============================================================
+
+    The msg object has some more additional members whose values are extracted
+    from the original OpenFlow message.
+    """
+
+    def __init__(self, msg):
+        self.timestamp = time.time()
+        super(EventOFPMsgBase, self).__init__()
+        self.msg = msg
+
+
+#
+# Create ofp_event type corresponding to OFP Msg
+#
+
+_OFP_MSG_EVENTS = {}
+
+
+def _ofp_msg_name_to_ev_name(msg_name):
+    return 'Event' + msg_name
+
+
+def ofp_msg_to_ev(msg):
+    return ofp_msg_to_ev_cls(msg.__class__)(msg)
+
+
+def ofp_msg_to_ev_cls(msg_cls):
+    name = _ofp_msg_name_to_ev_name(msg_cls.__name__)
+    return _OFP_MSG_EVENTS[name]
+
+
+def _create_ofp_msg_ev_class(msg_cls):
+    name = _ofp_msg_name_to_ev_name(msg_cls.__name__)
+    # print 'creating ofp_event %s' % name
+
+    if name in _OFP_MSG_EVENTS:
+        return
+
+    cls = type(name, (EventOFPMsgBase,),
+               dict(__init__=lambda self, msg:
+                    super(self.__class__, self).__init__(msg)))
+    globals()[name] = cls
+    _OFP_MSG_EVENTS[name] = cls
+
+
+def _create_ofp_msg_ev_from_module(ofp_parser):
+    # print mod
+    for _k, cls in inspect.getmembers(ofp_parser, inspect.isclass):
+        if not hasattr(cls, 'cls_msg_type'):
+            continue
+        _create_ofp_msg_ev_class(cls)
+
+
+for ofp_mods in ofproto.get_ofp_modules().values():
+    ofp_parser = ofp_mods[1]
+    # print 'loading module %s' % ofp_parser
+    _create_ofp_msg_ev_from_module(ofp_parser)
+
+
+class EventOFPStateChange(event.EventBase):
+    """
+    An event class for negotiation phase change notification.
+
+    An instance of this class is sent to observer after changing
+    the negotiation phase.
+    An instance has at least the following attributes.
+
+    ========= =================================================================
+    Attribute Description
+    ========= =================================================================
+    datapath  ryu.controller.controller.Datapath instance of the switch
+    ========= =================================================================
+    """
+
+    def __init__(self, dp):
+        super(EventOFPStateChange, self).__init__()
+        self.datapath = dp
+
+
+class EventOFPPortStateChange(event.EventBase):
+    """
+    An event class to notify the port state changes of Dtatapath instance.
+
+    This event performs like EventOFPPortStatus, but Ryu will
+    send this event after updating ``ports`` dict of Datapath instances.
+    An instance has at least the following attributes.
+
+    ========= =================================================================
+    Attribute Description
+    ========= =================================================================
+    datapath  ryu.controller.controller.Datapath instance of the switch
+    reason    one of OFPPR_*
+    port_no   Port number which state was changed
+    ========= =================================================================
+    """
+
+    def __init__(self, dp, reason, port_no):
+        super(EventOFPPortStateChange, self).__init__()
+        self.datapath = dp
+        self.reason = reason
+        self.port_no = port_no
+
+
+handler.register_service('ryu.controller.ofp_handler')