Hi,
I'm using Ryu version 3.29 and the original file ryu/controller/controller.py 
is different from what you have posted to me.
Can you send that modified version?
Thanks
Maurizio



________________________________
Da: Shinpei Muraoka <shinpei.mura...@gmail.com>
Inviato: mercoledì 14 settembre 2016 03.20
A: soldie...@hotmail.it; ryu-devel@lists.sourceforge.net
Oggetto: Re: [Ryu-devel] Ho to extract message type (e.g. pktIN/pktOut) from 
OpenFlow v1.3 header structure?

Hi,

@set_ev_cls() can be used only at the reception.
By performing the following modifications,
you can process separately each message types when controller sends a
message.

diff --git a/ryu/controller/controller.py b/ryu/controller/controller.py
index 8300f1a..0911789 100644
--- a/ryu/controller/controller.py
+++ b/ryu/controller/controller.py
@@ -293,9 +293,11 @@ class Datapath(ofproto_protocol.ProtocolDesc):
      def _send_loop(self):
          try:
              while self.state != DEAD_DISPATCHER:
-                buf = self.send_q.get()
+                msg = self.send_q.get()
                  self._send_q_sem.release()
-                self.socket.sendall(buf)
+                ev = ofp_event.ofp_msg_to_ev(msg)
+                self.ofp_brick.send_event_to_observers(ev, self.state)
+                self.socket.sendall(msg.buf)
          except SocketTimeout:
              LOG.debug("Socket timed out while sending data to switch
at address %s",
                        self.address)
@@ -318,11 +320,11 @@ class Datapath(ofproto_protocol.ProtocolDesc):
              # Finally, ensure the _recv_loop terminates.
              self.close()

-    def send(self, buf):
+    def send(self, msg):
          msg_enqueued = False
          self._send_q_sem.acquire()
          if self.send_q:
-            self.send_q.put(buf)
+            self.send_q.put(msg)
              msg_enqueued = True
          else:
              self._send_q_sem.release()
@@ -343,7 +345,7 @@ class Datapath(ofproto_protocol.ProtocolDesc):
              self.set_xid(msg)
          msg.serialize()
          # LOG.debug('send_msg %s', msg)
-        return self.send(msg.buf)
+        return self.send(msg)

      def _echo_request_loop(self):
          if not self.max_unreplied_echo_requests:



The following is an example of when to send the FlowMod.

diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
index 3e7c598..aef4cfd 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -63,6 +63,13 @@ class SimpleSwitch13(app_manager.RyuApp):
                                      match=match, instructions=inst)
          datapath.send_msg(mod)

+    @set_ev_cls(ofp_event.EventOFPFlowMod, MAIN_DISPATCHER)
+    def _flow_mod_handler(self, ev):
+        msg = ev.msg
+        ofproto = msg.datapath.ofproto
+        self.logger.info("msg.msg_type == ofproto.OFPT_FLOW_MOD : %s",
+                          msg.msg_type == ofproto.OFPT_FLOW_MOD)
+
      @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
      def _packet_in_handler(self, ev):
          # If you hit this you might want to increase



Please refer to the following about the event.
http://ryu.readthedocs.io/en/latest/ryu_app_api.html?highlight=set_ev_cls#openflow-event-classes


Please refer to the following about set_ev_cls.
http://ryu.readthedocs.io/en/latest/ryu_app_api.html?highlight=set_ev_cls#ryu-controller-handler-set-ev-cls


Thanks,

On 2016年09月13日 17:53, Maurizio Marrocco wrote:
> Hi
> Thank you for fast reply.  I need decision of message type because I
> would to implement a state machine based on that decision: arriving of
> packetOut to switch.
> In fact, I would to intercept PktOut. And how to do with @set_ev_cls()?
> Maurizio.
>
>
>
> ------------------------------------------------------------------------
> *Da:* Shinpei Muraoka <shinpei.mura...@gmail.com>
> *Inviato:* martedì 13 settembre 2016 04.59
> *A:* soldie...@hotmail.it; ryu-devel@lists.sourceforge.net
> *Oggetto:* Re: [Ryu-devel] Ho to extract message type (e.g.
> pktIN/pktOut) from OpenFlow v1.3 header structure?
>
> Hi,
>
> sorry. I responded a difficult answer.
>
> The following is example of the message type check.
>
>
> diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
> index 3e7c598..89dedb9 100644
> --- a/ryu/app/simple_switch_13.py
> +++ b/ryu/app/simple_switch_13.py
> @@ -76,6 +76,9 @@ class SimpleSwitch13(app_manager.RyuApp):
>           parser = datapath.ofproto_parser
>           in_port = msg.match['in_port']
>
> +        self.logger.info("msg.msg_type == ofproto.OFPT_PACKET_IN : %s",
> +                          msg.msg_type == ofproto.OFPT_PACKET_IN)
> +
>           pkt = packet.Packet(msg.data)
>           eth = pkt.get_protocols(ethernet.ethernet)[0]
>
>
> Message type for the check is defined in ofproto/ofproto_v1_3.py.
>
> Why do you need a decision of the message type?
> I think it can check of message type by @set_ev_cls().
>
> Thanks,
>
> On 2016年09月12日 20:50, Maurizio Marrocco wrote:
>> Hi, Shinpei. Sorry if I'm disturbing.
>> I read the documentation
>> (http://ryu.readthedocs.io/en/latest/ofproto_base.html#base-class-for-openflow-messages)
>> but could not find examples of how to pick the type of message from the
>> header OpenFlow.
>> You could give me a hand? For example in simple_switch_13.py script, how
>> can I use the class: class ryu.ofproto.ofproto_parser.MsgBase (* args,
>> ** kwargs) to take msg_type == pktOut ?
>> Thanks so much.
>> Maurizio
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------
>> *Da:* Shinpei Muraoka <shinpei.mura...@gmail.com>
>> *Inviato:* lunedì 12 settembre 2016 03.15
>> *A:* soldie...@hotmail.it; ryu-devel@lists.sourceforge.net;
>> ryu-devel@lists.sourceforge.net
>> *Oggetto:* Re: [Ryu-devel] Ho to extract message type (e.g.
>> pktIN/pktOut) from OpenFlow v1.3 header structure?
>>
>> Hi,
>>
>> Please refer to the following for extraction method of the type of
>> OpenFlow message.
>> http://ryu.readthedocs.io/en/latest/ofproto_base.html#base-class-for-openflow-messages
>>
>> Also, Please refer to the chapter 7.1.1 of OpenFlow Spec version 1.3.5
>> for the type of OpenFlow message.
>>
>> Thanks,
>>
>> On 2016年09月10日 22:55, Maurizio Marrocco wrote:
>>> Hi Ryu team.
>>> The question is the following: How to extract message ofp_type (e.g.
>>> OFPT_PACKET_OUT or OFPT_PACKET_IN) from openflow v1.3 ofp_header structure?
>>> I would to do this statement:
>>>
>>> if(header(received PDU)==PacketOut)
>>>     do something.
>>>
>>> Have some reference in the documentation about this and in general to
>>> process the packets?
>>> PS: I'm using RYU 3.29
>>> Thanks.
>>> Maurizio.
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>>
>>>
>>>
>>> _______________________________________________
>>> Ryu-devel mailing list
>>> Ryu-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>>
>
>
> ------------------------------------------------------------------------------
>
>
>
> _______________________________________________
> Ryu-devel mailing list
> Ryu-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>
------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to