Hi Yusuke, Many thanks, will try this and update you.
Also, have you tried it working? If yes could you please share the ".py" file you modified Regards, Govind Prasad Sent from my iPhone > On Apr 14, 2015, at 1:46 AM, Yusuke Iwase <iwase.yusu...@gmail.com> wrote: > > 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