> On 07 Sep 2016, at 19:44, Vladimir Vassilev <vladi...@transpacket.com> wrote:
> 
> On 09/07/2016 02:18 PM, Martin Bjorklund wrote:
>> Hi,
>> 
>> Your example is not circular, and it is legal.  However, the 'when'
>> expression refers to the node in which the when expression is defined.
>> Note that this expression will always evaluates to 'false' (see the
>> third bullet in 7.21.5 in RFC 7950).
> This is true for YANG 1.1 due to that 3rd bullet in 7.21.5.
> 
> However it should be noted that in YANG 1.0 nothing says the data node for 
> which the "when" statement is defined will be replaced with dummy node 
> without a value so that this expression always evaluates to 'false'. In YANG 
> 1.0 the expression can evaluate to 'true' when a+b=100.

Using "when" expressions that refer to the context node or its descendants 
could easily lead to deadlocks in YANG 1.0, so this part was underspecifed and 
ill-defined. The new 1.1 procedure for evaluating "when" expressions is thus a 
bug fix. Although it is somewhat tricky and sometimes (as in your example) 
counter-intuitive at first sight, it leads to unambiguous and stable results. 

>> 
>> Take a step back and consider what the 'when' statement means - it is
>> used to indicate if the node can be present or not.  As such, it
>> doesn't make any sense to refer to the node itself in the xpath
>> expression.
> 
>> In your case, you probably want to use a 'must' expression.  This is
>> evaluated once the node is present, in order to enforce some
>> constraint.
>> 
> I agree. I think the conclusion can be generalized to: there is no point in 
> using "when" expressions directly depending on the value of the data node for 
> which the "when" statement is defined or its children when the parent is not 
> 'augment', 'uses', 'case' or 'choice' statement in YANG 1.1 because the 
> 'when' statement will always evaluate to 'false' and the data node will never 
> exist.

Not necessarily. The following expression is always true:

leaf foo {
    when ".";
    ...
} 

> 
> Would be helpful if model validation tools could issue at least warning in 
> such cases.

This is rather difficult to detect in general. XPath is a complicated beast.

Lada

> 
> Vladimir
>> 
>> /martin
>> 
>> 
>> Vladimir Vassilev <vladi...@transpacket.com> wrote:
>>> Hi,
>>> 
>>> Is there any practical value of 'when' statements with circular
>>> dependency to the value of the parent (in case it is a leaf) or any
>>> children of the parent?
>>> 
>>>   container circular-dependency-when {
>>>       leaf a {
>>>           when "(. + ../b) = 100";
>>>           type uint16 {
>>>               range "0 .. 100";
>>>           }
>>>       }
>>>       leaf b {
>>>           type uint16 {
>>>               range "0 .. 100";
>>>           }
>>>       }
>>>   }
>>> 
>>> 
> 
> _______________________________________________
> netmod mailing list
> netmod@ietf.org
> https://www.ietf.org/mailman/listinfo/netmod

--
Ladislav Lhotka, CZ.NIC Labs
PGP Key ID: E74E8C0C




_______________________________________________
netmod mailing list
netmod@ietf.org
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to