ConfD User Community

Confdc internal error caused by relative path inside "tailf:non-strict-leafref" in a leaf


I saw the “internal error” when compiled my yang files. After investigation, I found the error is caused by the statement inside “tailf:non-strict-leafref”.
If the path inside it is an absolute path, the yang files can be compiled.
But if the path be changed to relative path, the compilation will fail which show “internal error”. I show the example as below

 tailf:non-strict-leafref {
   path "/system/interfaces/physical-interfaces[name = current()/../name]/duplex";


   tailf:non-strict-leafref {
       path "../../../interfaces/physical-interfaces[name = current()/../name]/duplex";

The relative path is correct since I have another statement inside this leaf, which works well.

    leaf duplex {
      tailf:display-when "count(../../../interfaces/physical-interfaces[name = current()/../name]/capabilities/duplex) > 0";
     type duplex;
     tailf:non-strict-leafref {
       path "../../../interfaces/physical-interfaces[name = current()/../name]/capabilities/duplex";

I have to use relative path, the absolute path will not work in my case. So how can I avoid this internal error ? Is this a bug in confdc ?



It could be a compiler bug but if it is, it doesn’t affect all instances of tails:non-strict-leafref. A small example I tried works fine.

What ConfD version do you use? (I used both ConfD 6.7.3 and ConfD 7.1)

If you attach a small YANG-model that shows the error I can try it here.


My confd version is confd-6.6.1.

Looks like it is old, maybe I should try a new version.
It is difficult to attach a small Yang-mode which show the error since my files are complicated. I will see whether I can make a small one that shown the error.
Meanwhile, could you please post your small example that I can try in my side ?


Where to download 6.7.3 or 7.1 ?
The only link I can find to download confd is confd basic:


OK, I do some tests by myself. Looks like the internal error only happen when reference a relative path in another submodule. If it is a relative path inside the same submodule, the compilation works fine.
I strongly suspect this is a confd bug.


Ok, I think I figured out. It is my relative path is wrong!
But the wrong relative path in tailf:display-when doesn’t give any error information. Then the wrong path inside tailf:non-strict-leafref directly cause confdc crash. This made me have some hard time to debug.