Hello,

That problem is more related to OpenFlow protocol than Ryu controller 
itself. One should remember that some of match fields have prerequisites 
that need to be defined first for the flow to be added correctly, as 
mentioned in OpenFlow specification ("Protocol-specic fields within 
ofp_match will  be  ignored  within  a  single  table  when  the  
corresponding protocol is not specified in the match. The MPLS match 
fields will be ignored unless the Ethertype specified as either IPv4 or 
ARP.", OpenFlow 1.1.0 spec, p.29). Therefore, your match should also 
contain "dl_type=0x0800". Here is a code of simple app that demonstrates 
IP address match (tested in OvS 2.5.0 and Ryu 4.5, OF 1.0).

        __author__ = 'Michal Rzepka'

        from ryu.base import app_manager
        from ryu.controller import ofp_event
        from ryu.controller.handler import MAIN_DISPATCHER
        from ryu.controller.handler import set_ev_cls
        from ryu.ofproto import ofproto_v1_0

        class L2Switch(app_manager.RyuApp):
                OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]

                def __init__(self, *args, **kwargs):
                    super(L2Switch, self).__init__(*args, **kwargs)

                @set_ev_cls(ofp_event.EventOFPStateChange, MAIN_DISPATCHER)
                def state_change_handler(self, ev):

                    dp = ev.datapath
                    ofproto = dp.ofproto
                    parser = dp.ofproto_parser

                    addressList = ('10.10.1.1', '10.10.1.2', '10.10.1.3')

                    for address in addressList:

                        actions = [parser.OFPActionOutput(ofproto.OFPP_NORMAL)]
                        match = parser.OFPMatch(dl_type=0x0800, nw_src=address)
                        self.add_flow(dp, match, actions, 1, 100)

                def add_flow(self, datapath, match, act, priority=0, 
idle_timeout=0):

                    parser = datapath.ofproto_parser

                    mod = parser.OFPFlowMod(datapath=datapath, 
priority=priority, 
match=match, actions=act,
                                            idle_timeout=idle_timeout)
                    datapath.send_msg(mod)

The result is as expected:

        cookie=0x0, duration=1.580s, table=0, n_packets=0, n_bytes=0, 
idle_timeout=100, idle_age=1, priority=1,ip,nw_src=10.10.1.1 
actions=NORMAL
        cookie=0x0, duration=1.580s, table=0, n_packets=0, n_bytes=0, 
idle_timeout=100, idle_age=1, priority=1,ip,nw_src=10.10.1.2 
actions=NORMAL
        cookie=0x0, duration=1.579s, table=0, n_packets=0, n_bytes=0, 
idle_timeout=100, idle_age=1, priority=1,ip,nw_src=10.10.1.3 
actions=NORMAL

Regards,

---
Michał Rzepka

W dniu 2016-09-29 07:03, Garegin Grigoryan napisał(a):
> Hi,
> 
> I'm new to RYU controller and I'm trying to install some simple rules.
> I use Openflow 1.0.
> 
> Here's my code:
> 
> addressList = ('10.10.1.1', '10.10.1.2', '10.10.1.3')
>        for address in addressList:
>          actions = [parser.OFPActionOutput(ofproto.OFPP_NORMAL)]
>          match = parser.OFPMatch(nw_src = address)
>          self.add_flow(dp, match, actions, 1, 100)
> 
> def add_flow(self, datapath, match, act, priority=0, idle_timeout=0):
>         ofproto = datapath.ofproto
>         parser = datapath.ofproto_parser
> 
>         mod = parser.OFPFlowMod(datapath=datapath, priority=priority,
> match=match, actions=act, idle_timeout=idle_timeout)
>         datapath.send_msg(mod)
> 
> Here's what I see in OVS:
> 
>  cookie=0x0, duration=13.212s, table=0, n_packets=0, n_bytes=0,
> idle_timeout=100,priority=1 actions=NORMAL
> 
> Why ip-source match was ignored?
> 
> Thanks for your help!
> 
> --
> 
> Sincerely,
> Garegin Grigoryan
> ------------------------------------------------------------------------------
> 
> _______________________________________________
> 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