Hi Evan,

I'm very sorry for delay.


On 2016年06月29日 04:36, Evan Gray wrote:
> Hello Iwase,
>
> We are still experiencing the issues that this patch is intended to
> address-- have you had a moment to look at Patch v3 and the previous
> message in this thread?
>
> Here are the patches that I am referring to:
>   - https://sourceforge.net/p/ryu/mailman/message/35102100/
>   - https://sourceforge.net/p/ryu/mailman/message/35102101/

I have no comments for your v3 Patch.
It looks good to me.

Thanks,
Iwase

>
> Thanks,
>
> /Evan
>
> On Tue, May 31, 2016 at 2:55 PM, Evan Gray <evanscottg...@gmail.com> wrote:
>> Hello Iwase,
>>
>> Thank you again for the feedback!
>>
>> We can comment out the assert here:
>> https://github.com/osrg/ryu/blob/master/ryu/lib/packet/cfm.py#L271
>> however it is possible that another assert will just cause a similar
>> issue later on. Long term it might be a good idea to consider moving
>> away from asserts like that entirely.
>>
>> I think that the "host_discovery_packet_in_handler" is actually made a
>> bit more simple this way because of the fact that the handler really
>> only cares about packets of very specific ethertypes like
>> "ETH_TYPE_ARP", "ETH_TYPE_IP", or "ETH_TYPE_IPV6".
>>
>> I believe that this solution might be more robust and efficient
>> because it ensures that the "host_discovery_packet_in_handler" will
>> only process packets that it needs to.
>>
>> Also, since the packets are now being parsed as ethernet frames first,
>> it is made very apparent that actions will only be made on packets of
>> specific ethertypes.
>>
>> In our environment we are getting CCM packets with interval=0 from a
>> vendor specific implementation that happens to touch the networks we
>> operate ryu on-- it appears that they do not follow the IEEE standard
>> in their CCM implementation unfortunately.
>>
>> Patch v3 should be the latest version of the patch, I am not sure that
>> I submitted it correctly as it is not in this thread.
>>
>> Thanks,
>>
>> /Evan
>>
>> On Thu, May 19, 2016 at 8:16 PM, Iwase Yusuke <iwase.yusu...@gmail.com> 
>> wrote:
>>> Hi,
>>>
>>> Thank you for updating the patches!
>>>
>>>
>>> On 2016年05月20日 07:11, Evan Gray wrote:
>>>>
>>>> Hello Iwase,
>>>>
>>>> Thank you for the feedback!
>>>>
>>>> You are correct, this will parse the "msg.data" as an ethernet frame
>>>> only and I believe parsing "msg.data" as an ethernet frame before
>>>> parsing it further can potentially be a more robust solution.
>>>>
>>>> We are trying to avoid causing "AssertionError" like the one here:
>>>> https://github.com/osrg/ryu/blob/master/ryu/lib/packet/cfm.py#L271
>>>
>>>
>>> Could we comment out this assert statement instead?
>>> Is it not appropriate?
>>> (Indeed, IEEE standard (802.1ag - 2007) say "interval" field does not
>>> contain the value 0 though...)
>>>
>>> I think if we can comment out this assert statement with some "Note:"
>>> comments,
>>> we can keep "host_discovery_packet_in_handler" simple.
>>>
>>> BTW, why did you get CCM with interval=0? Is is unavoidable in your
>>> environment?
>>>
>>>
>>>>
>>>> Today since the "host_discovery_packet_in_handler" parses any
>>>> "msg.data" it sees with "packet.Packet()", there is a real possibility
>>>> of causing an exception or crash like the one that we encountered
>>>> caused by CFM packets with an interval of 0. Causing exceptions like
>>>> that to be raised can even slow down the execution of the rest of the
>>>> application due to exceptions locking the entire process.
>>>>
>>>> In the "host_discovery_packet_in_handler" it appears that the parsed
>>>> packet data is not needed until much later in the handler where it
>>>> might not even need to be parsed at all depending on the ethertype of
>>>> the frame here:
>>>> https://github.com/osrg/ryu/blob/master/ryu/topology/switches.py#L870-L883
>>>>
>>>> After reading your feedback and thinking about this a little bit more,
>>>> I believe that we should delay parsing "msg.data" as more than an
>>>> ethernet frame until just before the parsed version of the packet is
>>>> needed and we know that the contents of "msg.data" are of an ethertype
>>>> that "host_discovery_packet_in_handler" cares about like
>>>> "ETH_TYPE_ARP", "ETH_TYPE_IP", or "ETH_TYPE_IPV6".
>>>>
>>>> I will submit a revised patch including these changes.
>>>>
>>>> Thank you,
>>>>
>>>> /Evan
>>>>
>>>>
>>>> On Wed, May 18, 2016 at 9:16 PM, Iwase Yusuke <iwase.yusu...@gmail.com>
>>>> wrote:
>>>>>
>>>>>
>>>>> Hi,
>>>>>
>>>>> Pardon me for jumping in.
>>>>>
>>>>>
>>>>>
>>>>> On 2016年05月19日 10:30, evanscottg...@gmail.com wrote:
>>>>>>
>>>>>>
>>>>>> From: Evan Gray <evanscottg...@gmail.com>
>>>>>>
>>>>>> This commit will allow the host_discovery_packet_in_handler to ignore
>>>>>> invalid
>>>>>> cfm packets. Ryu will fail to parse cfm packets with an interval of 0 --
>>>>>> We
>>>>>> discovered this when one of our systems sent cfm packets with an
>>>>>> interval of 0.
>>>>>>
>>>>>> Signed-off-by: Evan Gray <evanscottg...@gmail.com>
>>>>>> ---
>>>>>>     ryu/topology/switches.py | 20 +++++++++-----------
>>>>>>     1 file changed, 9 insertions(+), 11 deletions(-)
>>>>>>
>>>>>> diff --git a/ryu/topology/switches.py b/ryu/topology/switches.py
>>>>>> index 333407a..7df3220 100644
>>>>>> --- a/ryu/topology/switches.py
>>>>>> +++ b/ryu/topology/switches.py
>>>>>> @@ -31,8 +31,8 @@ from ryu.lib.dpid import dpid_to_str, str_to_dpid
>>>>>>     from ryu.lib.port_no import port_no_to_str
>>>>>>     from ryu.lib.packet import packet, ethernet
>>>>>>     from ryu.lib.packet import lldp, ether_types
>>>>>> -from ryu.lib.packet import arp, ipv4, ipv6
>>>>>>     from ryu.ofproto.ether import ETH_TYPE_LLDP
>>>>>> +from ryu.ofproto.ether import ETH_TYPE_CFM
>>>>>>     from ryu.ofproto import nx_match
>>>>>>     from ryu.ofproto import ofproto_v1_0
>>>>>>     from ryu.ofproto import ofproto_v1_2
>>>>>> @@ -832,11 +832,10 @@ class Switches(app_manager.RyuApp):
>>>>>>         @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
>>>>>>         def host_discovery_packet_in_handler(self, ev):
>>>>>>             msg = ev.msg
>>>>>> -        pkt = packet.Packet(msg.data)
>>>>>> -        eth = pkt.get_protocols(ethernet.ethernet)[0]
>>>>>> +        eth, pkt_type, pkt_data = ethernet.ethernet.parser(msg.data)
>>>>>
>>>>>
>>>>>
>>>>> "packet.Packet()" will parse the entire packet data while estimating
>>>>> protocol types
>>>>> and stores the parsed packet instance into "pkt.protocols".
>>>>>     https://github.com/osrg/ryu/blob/master/ryu/lib/packet/packet.py#L24
>>>>>
>>>>> If we change to "ethernet.ethernet.parser()", "msg.data" will be parsed
>>>>> as the
>>>>> ethernet frame only.
>>>>>
>>>>>
>>>>>>
>>>>>> -        # ignore lldp packet
>>>>>> -        if eth.ethertype == ETH_TYPE_LLDP:
>>>>>> +        # ignore lldp and cfm packets
>>>>>> +        if eth.ethertype in (ETH_TYPE_LLDP, ETH_TYPE_CFM):
>>>>>>                 return
>>>>>>
>>>>>>             datapath = msg.datapath
>>>>>> @@ -865,21 +864,20 @@ class Switches(app_manager.RyuApp):
>>>>>>                 ev = event.EventHostAdd(host)
>>>>>>                 self.send_event_to_observers(ev)
>>>>>>
>>>>>> +        pkt = pkt_type.parser(pkt_data)
>>>>>> +
>>>>>
>>>>>
>>>>>
>>>>> As I mentioned above, "packet.Packet()" have already parsed the packet
>>>>> data.
>>>>> I think we need not parse "pkt_data here".
>>>>>
>>>>> And, if "pkt_data" is the malformed data, "pkt_type.parser()" can raise
>>>>> an exception,
>>>>> so this may cause this App crash.
>>>>>
>>>>>
>>>>> Thanks,
>>>>> Iwase
>>>>>
>>>>>
>>>>>>             # arp packet, update ip address
>>>>>>             if eth.ethertype == ether_types.ETH_TYPE_ARP:
>>>>>> -            arp_pkt = pkt.get_protocols(arp.arp)[0]
>>>>>> -            self.hosts.update_ip(host, ip_v4=arp_pkt.src_ip)
>>>>>> +            self.hosts.update_ip(host, ip_v4=pkt.src_ip)
>>>>>>
>>>>>>             # ipv4 packet, update ipv4 address
>>>>>>             elif eth.ethertype == ether_types.ETH_TYPE_IP:
>>>>>> -            ipv4_pkt = pkt.get_protocols(ipv4.ipv4)[0]
>>>>>> -            self.hosts.update_ip(host, ip_v4=ipv4_pkt.src)
>>>>>> +            self.hosts.update_ip(host, ip_v4=pkt.src)
>>>>>>
>>>>>>             # ipv6 packet, update ipv6 address
>>>>>>             elif eth.ethertype == ether_types.ETH_TYPE_IPV6:
>>>>>>                 # TODO: need to handle NDP
>>>>>> -            ipv6_pkt = pkt.get_protocols(ipv6.ipv6)[0]
>>>>>> -            self.hosts.update_ip(host, ip_v6=ipv6_pkt.src)
>>>>>> +            self.hosts.update_ip(host, ip_v6=pkt.src)
>>>>>>
>>>>>>         def send_lldp_packet(self, port):
>>>>>>             try:
>>>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Mobile security can be enabling, not merely restricting. Employees who
>>>> bring their own devices (BYOD) to work are irked by the imposition of MDM
>>>> restrictions. Mobile Device Manager Plus allows you to control only the
>>>> apps on BYO-devices by containerizing them, leaving personal data
>>>> untouched!
>>>> https://ad.doubleclick.net/ddm/clk/304595813;131938128;j
>>>> _______________________________________________
>>>> Ryu-devel mailing list
>>>> Ryu-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>>>
>>>
>
> ------------------------------------------------------------------------------
> Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
> Francisco, CA to explore cutting-edge tech and listen to tech luminaries
> present their vision of the future. This family event has something for
> everyone, including kids. Get more information and register today.
> http://sdm.link/attshape
> _______________________________________________
> Ryu-devel mailing list
> Ryu-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>

------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to