YANG не определяет детали реализации, он просто определяет схему данных, которыми обмениваются сервер и клиент. Возможным способом достижения модели YANG для ссылок на реализацию является использование расширений YANG. Это позволяет модели данных включать дополнительную информацию, которую стандарт YANG не распознает, но агент YANG делает.
Это означает:
- определяет расширение для YANG file
- использует это расширение вместо default ключевое слово
- в вашей реализации, имеет механизм, который всякий раз, когда определенное значение YANG инициализируется, если расширение присутствует, вызывает метод с таким именем для получения значения по умолчанию, вместо использования значения по умолчанию, которое модель описывает непосредственно.
Итак, как вы можете видеть, первые два шага проще, третий шаг сложнее , поскольку для этого требуется адаптация синтаксического анализатора YANG во время компиляции или во время выполнения, чтобы вызывать функцию C, упомянутую расширением. Для этого требуется какой-то механизм, способный обработать расширение и сохранить его в памяти, чтобы данные правильно инициализировались.
Вот пример того, как это будет выглядеть в YANG
module extensions {
namespace "http://example.com/extensions";
prefix ext;
extension default-function {
argument function-name;
description "Describes that this leaf has its default value defined by this function.";
}
}
import extensions { prefix ext; }
(...)
leaf memory {
type int16;
ext:default-function 100;
}