Вызов функции * C внутри файла ян - PullRequest
0 голосов
/ 29 марта 2020

Можем ли мы вызвать функцию 'C' в файле ян? Или есть ли способ сделать это? По сути, я хочу вызвать забаву 'C', которая вернет целочисленное значение и использует его в моем файле .yang.

Ниже приведена структура моего листа:

leaf memory {
  type int16;
  default 100;
}

Я надеваю не хочу stati c значение по умолчанию, которое здесь 100. Я хочу, чтобы значение в поле по умолчанию было выбрано из функции "C".

Есть ли способ выполнить sh это?

Спасибо

1 Ответ

0 голосов
/ 07 апреля 2020

YANG не определяет детали реализации, он просто определяет схему данных, которыми обмениваются сервер и клиент. Возможным способом достижения модели YANG для ссылок на реализацию является использование расширений YANG. Это позволяет модели данных включать дополнительную информацию, которую стандарт YANG не распознает, но агент YANG делает.

Это означает:

  1. определяет расширение для YANG file
  2. использует это расширение вместо default ключевое слово
  3. в вашей реализации, имеет механизм, который всякий раз, когда определенное значение 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;
  }
...