Re: [Roll] Semantics of DAO ACK

Csaba Kiraly <kiraly@fbk.eu> Thu, 01 October 2015 20:03 UTC

Return-Path: <kiraly@fbk.eu>
X-Original-To: roll@ietfa.amsl.com
Delivered-To: roll@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 16AF21B2EEF for <roll@ietfa.amsl.com>; Thu, 1 Oct 2015 13:03:19 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.601
X-Spam-Level:
X-Spam-Status: No, score=-2.601 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Qzg_mE9STkmA for <roll@ietfa.amsl.com>; Thu, 1 Oct 2015 13:03:16 -0700 (PDT)
Received: from mail-wi0-f174.google.com (mail-wi0-f174.google.com [209.85.212.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 104B81B2EED for <roll@ietf.org>; Thu, 1 Oct 2015 13:03:16 -0700 (PDT)
Received: by wiclk2 with SMTP id lk2so6379690wic.0 for <roll@ietf.org>; Thu, 01 Oct 2015 13:03:14 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:references:message-id:date :user-agent:mime-version:in-reply-to:content-type :content-transfer-encoding; bh=TfCI/QKrpz9mhFuVa4h6Rj1mKj0xenj4crcUDGFd8lw=; b=eVhBzOgdICtlLNlJB5p/5grb6X7A823mO5G3eIquYIOaRj3ixCpLj7LDY4D3Vzyd6C FXcm+6oPO4wPSS8FKpcEGQLiatrr+0OU//VygFbwsvsiewNFH3ABwq6DAuf19+AyJvqF U80r45aHr4lvUK/2GDdaQgwwpCNBPDhQVbttUo3M11hIoTsuWzia8elq3Fp73guZrNqB OCX5sw31jbQReWN9R/WkQJv3oCtAHqbYTImRLMB1NHRiUAFM4try7YR/L2QZQeiVywzU jv09PBoUMmhSuoK7Go2sQ54Sb2lZB6pFhezx3Io1el7SVdFofT6ukT/vgq/Tj4Ob5Qgx g1nA==
X-Gm-Message-State: ALoCoQmsZ2bFuKHum8iU+JFLa4xRjRihMOo3W34jfqt6l+BTbwVJwh91ObKzbO3+eptgB7Lls0yHdDRbOYx7oGYkZHKB0e5z/MB5Swxe1LAnXqjlWVvCwnsopJuxqJmoj7Oo09Hcd1MTukjsI/I4B1qtVpXCPIDeNOgKEyFgPGD+3T1XndF+BVg=
X-Received: by 10.180.211.39 with SMTP id mz7mr548575wic.65.1443729794522; Thu, 01 Oct 2015 13:03:14 -0700 (PDT)
Received: from cskiralys-air.homenet.telecomitalia.it (host238-105-dynamic.31-79-r.retail.telecomitalia.it. [79.31.105.238]) by smtp.googlemail.com with ESMTPSA id pu6sm7761920wjc.34.2015.10.01.13.03.13 for <roll@ietf.org> (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Oct 2015 13:03:13 -0700 (PDT)
From: Csaba Kiraly <kiraly@fbk.eu>
To: Routing Over Low power and Lossy networks <roll@ietf.org>
References: <DB5PR01MB10807DAF503BBFF45787599C80420@DB5PR01MB1080.eurprd01.prod.exchangelabs.com> <6d21d0f86ab14ae7a99ff9fe6873b1fd@XCH-RCD-001.cisco.com> <C885EE62-D889-4229-9CCB-B3CB540F5692@sics.se> <560AFDBB.8050505@gmail.com> <8f1d44568afa4348a05169bedc3c3020@XCH-RCD-001.cisco.com> <518931B3-E437-4086-82B0-ADFB57F96646@sics.se>
Message-ID: <560D9187.206@fbk.eu>
Date: Thu, 01 Oct 2015 22:03:19 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <518931B3-E437-4086-82B0-ADFB57F96646@sics.se>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: 8bit
Archived-At: <http://mailarchive.ietf.org/arch/msg/roll/5LeF9PEoIyCRlH9wB7jP4RVQXo8>
Subject: Re: [Roll] Semantics of DAO ACK
X-BeenThere: roll@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
Reply-To: Routing Over Low power and Lossy networks <roll@ietf.org>
List-Id: Routing Over Low power and Lossy networks <roll.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/roll>, <mailto:roll-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/roll/>
List-Post: <mailto:roll@ietf.org>
List-Help: <mailto:roll-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/roll>, <mailto:roll-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 01 Oct 2015 20:03:19 -0000


On 30/09/15 18:06, Joakim Eriksson wrote:
>> On 30 Sep 2015, at 09:58, Pascal Thubert (pthubert) <pthubert@cisco.com> wrote:
>>
>> Hello all:
>>
>> The DAO ACK status really is a summary that indicates that there was a problem or not, so if there is none, no need to dig further. With this, the only thing the child can do is globally pick another parent, and, depending on the range in the status, never come back.
>>
>> But the digging further, I agree, is not specified. If the groups wants it, we'll have to design additional stuff and draft it.
>>
> Yes - lets try to get this designed and detailed so that we can get interoperability between implementations!
> I would be happy to provide what we have been doing to get our implementation working!
>
>> * We could use the status as an enumeration the way people probably expect it. But you'll note that we did not create a registry for it.
> Not yet - I guess creating a registry might be fairly easy?
>
>> * Which hints you that we could also use it as a metric. A scalar degree of unwillingness to serve as a parent, that accounts for stuff like memory, available time slots in a chunk (for 6TiSCH) and/or battery depletion of the node. The status would translate in such things as serving as alternate but not as preferred parent.
> Not sure that degree of unwillingness can be specified in a clear way so that everybody will interpret it the same way. But
> sure - it is an option. I have done a “quick hack” and defined 255 as “Root is out of routes”. Because if you get that type of
> response - there is no immediate need to look for another parent and another path - it will not work anyway… (that is if the
>   node is desired to get a path all the way to/from root).
We did some tries with the memory aspect, and it is not bad, but not too 
good either. The information is simply not coming in at the right moment 
for a good decision logic. As Joakim said, squeezing it into one byte 
could also be too tight, and interoperability could be hindered. Would 
it be an absolute value with equations in the standard? If not, how 
would I confront the values received from two different implementations? 
How would I know that they are different and not comparable, in the 
first place?

I think it is better to keep the status as an enumeration, but also 
keeping the high level semantics, like now, so that implementations that 
do not know the enum have some default behavior. BTW, 127 is specified 
both for partial and for outright reject in RFC6550. For the enum 
values, we differentiate 2 cases now, and we have different decision 
logic for them.

I think it is a good idea to send the metrics you have described, but a 
DAO option or some DIO option is a better match.

>> For more selective stuff, we would have to indicate the problem in the dao-ack per route advertisement that is a problem. This is a step that we did not take with RFC 6550, people advising that the draft was workable and thick enough without it.
>>
> Yes, and we were tired of writing more I guess - and eager to implement ;-)
>
>> The path that is really accepted in storing mode is self as a transit for a given target. Transit can be aggregated for multiple targets. And there can be multiple transits for a target. The DAO Ack could include the pairs (transit/target) that are trouble  and indicate for each what the trouble is. It could in theory aggregate what's aggregatable, but the way the info in the dao ack is aggregated may have to differ from what was placed in the DAO.
> Yes, the thing with todays RFC is that there is not yet any defined options for the DAO ACK - but that is of course easy to add. One other option
> would be to add a flag into the DAO that says “all-or-nothing”. If it is set all routes or no-routes should be installed. It is a bit complex possibly but
> it would be very clear when the DAO sending node gets the ack what happened. < 128 means all routes are installed. >=128 means none was
> installed.
I think all-or-nothing flag is a good idea, and relatively easy to 
implement.

>> The path control delegates a right to propagate and eventually fan out the advertisement. If the T+T pair is placed in the dao ack, the path control could be used to refuse that right to propagate, so the child would be free to offer that particular pair to an alternate parent. We still have bits in the transit that could indicate stuff if we need it as well.
> Yes, but I my case I am doing the simple case of just registering with one single parent / one single DAO path per target.
>
>
> My current “plan” is to avoid aggregation when doing the regular DAO but possibly aggregate the no-path DAO since that one
> can not possibly cause out-of-memory or other problems (or?).
>
This reminds me that the status code is not yet defined for No-path, 
right? It can be interpreted, but the text for 1-127 and 128-255 doesn't 
really apply. I'm not sure asking for an ACK on a no-path would makes 
sense, but the option is in the standard, and behavior is unspecified.

Best regards,
Csaba

> Best regards,
> — Joakim
>
>> Thoughts?
>>
>> Pascal
>>
>>> -----Original Message-----
>>> From: Roll [mailto:roll-bounces@ietf.org] On Behalf Of Cenk Gündogan
>>> Sent: mardi 29 septembre 2015 23:08
>>> To: roll@ietf.org
>>> Subject: Re: [Roll] Semantics of DAO ACK
>>>
>>> Hello Joakim,
>>>
>>> This is an interesting question and I also couldn't find any answers in RFC
>>> 6550.
>>> However, my thoughts on this are as follows:
>>> Since a sub-set of the announced RPL targets could have been accepted
>>> before filling up the routing table (e.g.), I would choose a status code
>>> between 1 and 127.
>>> I would expect a node to choose another parent if a more aggressive status
>>> code is received ([128-255]).
>>> But a full routing table can have free space again until the next or any
>>> subsequent DAO arrives ..
>>> therefore I prefer a "mild rejection" with a status code of [1-127].
>>>
>>> To give some feedback to the originator of the DAO, it might be sensible to
>>> copy the rejected RPL Target options from the affected DAO to the DAO-
>>> ACK, so that the originator is fully aware of which Target prefixes got
>>> rejected (and which ones got accepted, implicitly).
>>> I would choose this method, because it doesn't require the originator of the
>>> DAO to save any extra state about the DAO and its contents.
>>>
>>> Nonetheless, everything I wrote is nonconform and I am also interested in
>>> the RPL experts' opinions and solutions.
>>>
>>> Best,
>>> Cenk
>>>
>>> On 29.09.2015 21:44, Joakim Eriksson wrote:
>>>> Hello All,
>>>>
>>>> I have spend quite some time to get a more stable implementation of
>>>> DAO handling for Contiki RPL and I am currently looking into DAO
>>>> aggregation. But I realised that it is for me not 100% clear what a
>>>> node that receives a DAO with several prefixes to be registered but
>>>> can only accept a sub-set of them. Should it be a DAO_NACK in this case
>>> or is there any other way to handle that case?
>>>> If each would have been sent separately it is obvious that the
>>>> receiving node can do a NACK when the routing table is full and
>>>> therefore it is possible to get fine-grained answers. But with aggregation
>>> of DAOs this is not the case.
>>>> Any ideas?
>>>>
>>>> Best regards,
>>>> — Joakim Eriksson, SICS
>>>> _______________________________________________
>>>> Roll mailing list
>>>> Roll@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/roll
>>> _______________________________________________
>>> Roll mailing list
>>> Roll@ietf.org
>>> https://www.ietf.org/mailman/listinfo/roll
>> _______________________________________________
>> Roll mailing list
>> Roll@ietf.org
>> https://www.ietf.org/mailman/listinfo/roll
> _______________________________________________
> Roll mailing list
> Roll@ietf.org
> https://www.ietf.org/mailman/listinfo/roll
>
>