Hi Govind,

I think your app needs some modification.

1. The method name "_packet_in_handler" is duplicated.
   If you need to add another method for Packet-In,
   Please change the method name.

2. Import module of "tcp" packet lib is missing.
   + from ryu.lib.packet import tcp

3. If the processing of sending OFPFlowMod messase from "add_flow" method,
   L2 swtiching functions are lost.
   I recommend you to reuse "add_flow" method with some modification.


Then how about the following? I modified the simple_switch.py.
Please note that there are some TODOs.

$ git diff
diff --git a/ryu/app/simple_switch.py b/ryu/app/simple_switch.py
index 8fd3d21..b9a785b 100644
--- a/ryu/app/simple_switch.py
+++ b/ryu/app/simple_switch.py
@@ -29,6 +29,7 @@ from ryu.ofproto import ofproto_v1_0
 from ryu.lib.mac import haddr_to_bin
 from ryu.lib.packet import packet
 from ryu.lib.packet import ethernet
+from ryu.lib.packet import tcp
 
 
 class SimpleSwitch(app_manager.RyuApp):
@@ -38,7 +39,7 @@ class SimpleSwitch(app_manager.RyuApp):
         super(SimpleSwitch, self).__init__(*args, **kwargs)
         self.mac_to_port = {}
 
-    def add_flow(self, datapath, in_port, dst, actions):
+    def add_flow(self, datapath, in_port, dst, actions, idle_timeout):
         ofproto = datapath.ofproto
 
         match = datapath.ofproto_parser.OFPMatch(
@@ -46,8 +47,8 @@ class SimpleSwitch(app_manager.RyuApp):
 
         mod = datapath.ofproto_parser.OFPFlowMod(
             datapath=datapath, match=match, cookie=0,
-            command=ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0,
-            priority=ofproto.OFP_DEFAULT_PRIORITY,
+            command=ofproto.OFPFC_ADD, idle_timeout=idle_timeout,
+            hard_timeout=0, priority=ofproto.OFP_DEFAULT_PRIORITY,
             flags=ofproto.OFPFF_SEND_FLOW_REM, actions=actions)
         datapath.send_msg(mod)
 
@@ -59,10 +60,16 @@ class SimpleSwitch(app_manager.RyuApp):
 
         pkt = packet.Packet(msg.data)
         eth = pkt.get_protocol(ethernet.ethernet)
+        pkt_tcp = pkt.get_protocol(tcp.tcp)
 
         dst = eth.dst
         src = eth.src
 
+        dst_port = None
+        if pkt_tcp:
+            dst_port = pkt_tcp.dst_port
+            print "dst_port = %d" % dst_port
+
         dpid = datapath.id
         self.mac_to_port.setdefault(dpid, {})
 
@@ -80,7 +87,15 @@ class SimpleSwitch(app_manager.RyuApp):
 
         # install a flow to avoid packet_in next time
         if out_port != ofproto.OFPP_FLOOD:
-            self.add_flow(datapath, msg.in_port, dst, actions)
+            if dst_port is None:
+                # TODO: in case of non-TCP packet.
+                # If install a flow, no longer packet-in comes.
+                # Please handle this case as you want.
+                pass
+            elif dst_port<5000:
+                self.add_flow(datapath, msg.in_port, dst, actions, 100)
+            else:
+                self.add_flow(datapath, msg.in_port, dst, actions, 30)
 
         data = None
         if msg.buffer_id == ofproto.OFP_NO_BUFFER:


Thanks,
Iwase

On 2015年04月14日 08:10, Govind Prasad wrote:
> Hi Yusuke,
> 
> Please let me know if you need any more information on this to achieve the 
> desired result.
> 
> Thanks a lot for your esteemed support !!!
> 
> Regards,
> Govind Prasad
> 
> On Mon, Apr 13, 2015 at 1:56 PM, Govind Prasad <pr.govind1...@gmail.com 
> <mailto:pr.govind1...@gmail.com>> wrote:
> 
>     Hi Yusuke,
> 
>     The following is my openflow version:
> 
>     govind@govind-RYU-virtual-machine:~/ryu$ ovs-vswitchd --version
>     ovs-vswitchd (Open vSwitch) 2.0.2
>     Compiled Aug 15 2014 14:31:03
>     OpenFlow versions 0x1:0x1
> 
>     when I run the controller script "simple_switch_scott.py" my edited file 
> (also attached herewith for your reference), I am not able to see the logs 
> for flow modification in the switch as shown below:
> 
>     2015-04-13T18:49:00.223Z|00624|rconn|INFO|s1<->tcp:127.0.0.1:6633 
> <http://127.0.0.1:6633>: connecting...
>     2015-04-13T18:49:00.238Z|00625|rconn|INFO|s1<->tcp:127.0.0.1:6633 
> <http://127.0.0.1:6633>: connected
> 
>     However, when I run the normal simple_switch.py script, I get a flow mod 
> message from controller to switch as shown below:
> 
>     2015-04-13T18:40:45.951Z|00416|rconn|INFO|s1<->tcp:127.0.0.1:6633 
> <http://127.0.0.1:6633>: connected
>     2015-04-13T18:41:59.927Z|00417|ofproto|INFO|s1: 2 flow_mods 10 s ago (2 
> adds)
> 
> 
>     Please suggest what should be my next step to achieve the desired result.
> 
>     Regards,
>     Govind Prasad
> 
>     On Mon, Apr 13, 2015 at 1:42 AM, Yusuke Iwase <iwase.yusu...@gmail.com 
> <mailto:iwase.yusu...@gmail.com>> wrote:
> 
>         Hi Govind,
> 
>         Did you get any error messages from ryu-manager?
>         If not, first, please check OpenFlow version of your swtich.
>         ("simple_switch.py" is OpenFlow 1.0 App.)
> 
>         And, by capturing packet with Wireshark, you can get the helpful 
> information for debug.
>         (e.g. whether Controller sends FlowMod message? Switch sends any 
> Error Message?...etc)
> 
>         Thanks,
>         Iwase
> 
>         On 2015年04月13日 15:02, Govind Prasad wrote:
>         > Hi Yusuke,
>         >
>         > Thanks for the suggestion, I tried the following code in 
> "simple_switch.py" however when I send TCP packets from h1 to h2 using iperf 
> in mininet, the packets are getting transmitted but the flows are not getting 
> written in the switch table:
>         >
>         > @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
>         >     def _packet_in_handler(self, ev):
>         >         msg = ev.msg
>         >
>         >         pkt = packet.Packet(msg.data)
>         >         pkt_tcp = pkt.get_protocol(tcp.tcp)
>         >
>         >         if pkt_tcp:
>         >            mod = datapath.ofproto_parser.OFPFlowMod(
>         >                datapath=datapath, match=match, cookie=0,
>         >                command=ofproto.OFPFC_ADD, idle_timeout=100, 
> hard_timeout=0,
>         >                priority=ofproto.OFP_DEFAULT_PRIORITY,
>         >                flags=ofproto.OFPFF_SEND_FLOW_REM, actions=actions)
>         >            datapath.send_msg(mod)
>         >         else:
>         >            mod = datapath.ofproto_parser.OFPFlowMod(
>         >                 datapath=datapath, match=match, cookie=0,
>         >                 command=ofproto.OFPFC_ADD, idle_timeout=30, 
> hard_timeout=0,
>         >                 priority=ofproto.OFP_DEFAULT_PRIORITY,
>         >                 flags=ofproto.OFPFF_SEND_FLOW_REM, actions=actions)
>         >            datapath.send_msg(mod)
>         >
>         >
>         > can you please advise whether I am doing it right as I am not very 
> good in programming and started learning python these days.
>         >
>         > Appreciate your help!!!
>         >
>         > Regards,
>         > Govind Prasad
>         >
>         >
>         >
>         > On Sun, Apr 12, 2015 at 8:30 PM, Yusuke Iwase 
> <iwase.yusu...@gmail.com <mailto:iwase.yusu...@gmail.com> 
> <mailto:iwase.yusu...@gmail.com <mailto:iwase.yusu...@gmail.com>>> wrote:
>         >
>         >     Hi Govind,
>         >
>         >     > 4. If port numbe is greater than 5000, idle timeout is 100 
> seconds.
>         >
>         >     You can parse the Packet-In data and get the port number by 
> using packet library.
>         >
>         >     e.g.)
>         >         @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
>         >         def _packet_in_handler(self, ev):
>         >             msg = ev.msg
>         >
>         >             pkt = packet.Packet(msg.data)
>         >             pkt_tcp = pkt.get_protocol(tcp.tcp)
>         >
>         >             if pkt_tcp:
>         >                 dst_port = pkt_tcp.dst_port
>         >                 print "dst_port = %d" % dst_port
>         >
>         >
>         >     For more information of packet library, please refer to the 
> Ryu-Book.
>         >      (http://osrg.github.io/ryu-book/en/html/packet_lib.html)
>         >
>         >     Thanks,
>         >     Iwase
>         >
>         >     On 2015年04月13日 08:18, Govind Prasad wrote:
>         >     > Hi yusuke,
>         >     >
>         >     > Thanks fir the info however can you please specify how to 
> implement the following scenario:
>         >     >
>         >     > 1. Iperf client send the tcp message on port 8000
>         >     > 2. Iperf server receives the tcp port through ovs
>         >     > 3. Ryu asks the ovs to write the flow with default values
>         >     > 4. If port numbe is greater than 5000, idle timeout is 100 
> seconds.
>         >     >
>         >     > This is what I want to implement. Can you please guide.
>         >     >
>         >     > Regard,
>         >     > Govind
>         >     >
>         >     > Sent from my iPhone
>         >     >
>         >     >> On Apr 10, 2015, at 10:23 AM, Govind Prasad 
> <pr.govind1...@gmail.com <mailto:pr.govind1...@gmail.com> 
> <mailto:pr.govind1...@gmail.com <mailto:pr.govind1...@gmail.com>>> wrote:
>         >     >>
>         >     >> Hi Yusuke,
>         >     >>
>         >     >> Thanks a lot for the response, I will check and reply with 
> my queries today.
>         >     >>
>         >     >> Thanks once again!!!
>         >     >>
>         >     >> Regards,
>         >     >> Govind
>         >     >>
>         >     >> Sent from my iPhone
>         >     >>
>         >     >>> On Apr 10, 2015, at 12:45 AM, Yusuke Iwase 
> <iwase.yusu...@gmail.com <mailto:iwase.yusu...@gmail.com> 
> <mailto:iwase.yusu...@gmail.com <mailto:iwase.yusu...@gmail.com>>> wrote:
>         >     >>>
>         >     >>> Hi Govind,
>         >     >>>
>         >     >>> To learn "How to implement Ryu Application", please refer 
> to the ryu-book.
>         >     >>> The first chapter shows implementation of a simple 
> switching hub.
>         >     >>> (http://osrg.github.io/ryu-book/en/html/switching_hub.html)
>         >     >>>
>         >     >>> And, to set the idle timeout, please refer to "OpenFlow 
> protocol API reference" on the Ryu-Documentations.
>         >     >>> If you use OpenFlow 1.3, the following section is helpful 
> for you.
>         >     >>> 
> (http://ryu.readthedocs.org/en/latest/ofproto_v1_3_ref.html#modify-state-messages)
>         >     >>>
>         >     >>> Thanks,
>         >     >>> Iwase
>         >     >>>
>         >     >>>> On 2015年04月08日 23:44, Govind prasad wrote:
>         >     >>>>
>         >     >>>> Hi experts,
>         >     >>>>
>         >     >>>> I am working on an application which works as follows:
>         >     >>>>
>         >     >>>> 1. The switch gets the first TCP packet
>         >     >>>> 2. It sends the packet to the controller
>         >     >>>> 3. The controller invokes an application which was looking 
> for TCP packets.
>         >     >>>> 4. The application sets a extended idle timeout (fore 
> ample 1 hour) and sends the flow back to the controller.
>         >     >>>> 5. Now the controller sends the flow modification message 
> for this flow with the extended idle timeout.
>         >     >>>>
>         >     >>>> Can anyone help me in building this application which 
> extends the idle timeout. I am very new to sdn and programming so would 
> require your esteemed support on this.
>         >     >>>>
>         >     >>>> Regards,
>         >     >>>> Govind
>         >     >>>> Sent from my iPhone
>         >     >>>> 
> ------------------------------------------------------------------------------
>         >     >>>> BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM 
> EDT
>         >     >>>> Develop your own process in accordance with the BPMN 2 
> standard
>         >     >>>> Learn Process modeling best practices with Bonita BPM 
> through live exercises
>         >     >>>> 
> http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
>         >     >>>> 
> source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
>         >     >>>> _______________________________________________
>         >     >>>> Ryu-devel mailing list
>         >     >>>> Ryu-devel@lists.sourceforge.net 
> <mailto:Ryu-devel@lists.sourceforge.net> 
> <mailto:Ryu-devel@lists.sourceforge.net 
> <mailto:Ryu-devel@lists.sourceforge.net>>
>         >     >>>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>         >     >>>
>         >     >>> 
> ------------------------------------------------------------------------------
>         >     >>> BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
>         >     >>> Develop your own process in accordance with the BPMN 2 
> standard
>         >     >>> Learn Process modeling best practices with Bonita BPM 
> through live exercises
>         >     >>> 
> http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
>         >     >>> 
> source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
>         >     >>> _______________________________________________
>         >     >>> Ryu-devel mailing list
>         >     >>> Ryu-devel@lists.sourceforge.net 
> <mailto:Ryu-devel@lists.sourceforge.net> 
> <mailto:Ryu-devel@lists.sourceforge.net 
> <mailto:Ryu-devel@lists.sourceforge.net>>
>         >     >>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>         >     >
>         >     > 
> ------------------------------------------------------------------------------
>         >     > BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
>         >     > Develop your own process in accordance with the BPMN 2 
> standard
>         >     > Learn Process modeling best practices with Bonita BPM through 
> live exercises
>         >     > 
> http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
>         >     > 
> source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
>         >     > _______________________________________________
>         >     > Ryu-devel mailing list
>         >     > Ryu-devel@lists.sourceforge.net 
> <mailto:Ryu-devel@lists.sourceforge.net> 
> <mailto:Ryu-devel@lists.sourceforge.net 
> <mailto:Ryu-devel@lists.sourceforge.net>>
>         >     > https://lists.sourceforge.net/lists/listinfo/ryu-devel
>         >     >
>         >
>         >
>         >
>         >
>         > 
> ------------------------------------------------------------------------------
>         > BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
>         > Develop your own process in accordance with the BPMN 2 standard
>         > Learn Process modeling best practices with Bonita BPM through live 
> exercises
>         > http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- 
> event?utm_
>         > 
> source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
>         >
>         >
>         >
>         > _______________________________________________
>         > Ryu-devel mailing list
>         > Ryu-devel@lists.sourceforge.net 
> <mailto:Ryu-devel@lists.sourceforge.net>
>         > https://lists.sourceforge.net/lists/listinfo/ryu-devel
>         >
> 
> 
> 
> 
> 
> ------------------------------------------------------------------------------
> BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
> Develop your own process in accordance with the BPMN 2 standard
> Learn Process modeling best practices with Bonita BPM through live exercises
> http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
> source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
> 
> 
> 
> _______________________________________________
> Ryu-devel mailing list
> Ryu-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
> 

------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to