Если реализация вашего сервера не поддерживает определенный узел в исходной модели, вам следует создать модуль отклонения YANG, который выражает это ограничение. Таким образом, клиенты получают информацию об этом, и все довольны - вы, конечно, рекламируете свой модуль отклонения вместе с отклоненным модулем.
Например:
module target {
yang-version 1.1;
namespace "target:uri";
prefix "tgt";
container state {
config false;
leaf some-counter {
type uint64;
mandatory true;
}
}
}
Допустим, ваше устройство не поддерживает лист some-counter
выше. Затем вы создаете модуль создания отклонений, который описывает, как ваша реализация отличается от совместимой реализации.
module target-dev {
yang-version 1.1;
namespace "target-dev:uri";
prefix "tgtd";
import target {
prefix tgt;
}
deviation "/tgt:state/tgt:some-counter" {
deviate not-supported;
}
}
Когда приходит запрос get, вы ничего не возвращаете для этого листа, так как он не существует в мире вашей реализации.
Подробности операторов deviation
и deviate
можно найти в RFC7950:
Вы должны быть очень осторожны, полагаясь на этот механизм! Всегда создавайте отдельный модуль, который содержит только отклонения, возможно отклоняющиеся от одного целевого модуля. Существует руководящий документ , который следует прочитать на всякий случай.