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.

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.

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

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

Reply via email to