Ян тип не найден

В stackoverflow не так много вопросов о моделях YANG, но я надеюсь, что вы сможете мне помочь.

Я создал модель YANG и хочу импортировать ее в другой модуль. Оператор импорта выглядит следующим образом:

import service-abstract-type-definition {
    prefix sfc-satd;
    revision-date 2015-11-15;
}

И его использование выглядит так:

leaf abstract-type {
  type sfc-satd:service-abstract-type-definition;
  description
    "Abstract Type definition for the Service Function";
}

Этот лист находится внутри группы.

Импортированный модуль выглядит так:

  module service-abstract-type-definition {

  namespace "urn:odl:params:xml:ns:yang:sfc-satd";

  prefix sfc-satd;

  import service-locator {
    prefix sfc-sl;
    revision-date 2014-07-01;
  }

  description
    "This module contains YANG definitions for managing Service Abstract Type Definition";

  revision 2015-11-15 {
    description
      "First version of Service Abstract Type Definition.";
  }

  // Service Function
  // Service Abstract Type definitions

  container service-abstract-type-definition {
    description
      "List of parameters to define an abstract type of Service Function";

    leaf name {
      type string;
      description "Service Function type names such as firewall, dpi, tcp-proxy, etc";
    }

    leaf symmetry {
      type boolean;
      description "SF is involved in a symmetric service path";
    }

    leaf bidirectionality {
      type boolean;
      description "SF handles uplink and downlink traffic";
    }

    leaf nsh-aware {
      type boolean;
      description "Service Function can handle Network Service Headers";
    }

    container dpl {
      description "Data Plane Locators from the Service Function";
      uses sfc-sl:data-plane-locator;
    }
  }
}

При компиляции получаю сообщение ОШИБКА

type satd:service-abstract-type-definition не найден

и я действительно не понимаю. Есть идеи?

Спасибо


person Ricardo    schedule 21.11.2015    source источник
comment
Хорошо, я думаю, что понял: чтобы указать ссылку на модуль как на тип, вам нужно создать typedef внутри этого модуля. В моем случае этого не хватало.   -  person Ricardo    schedule 22.11.2015
comment
Не могли бы вы сказать мне, какие инструменты мне нужно установить в моей системе Ubuntu для компиляции и тестирования модулей yang?   -  person Abhishek Sagar    schedule 01.09.2016


Ответы (1)


Обычно операторы импорта используются в NETMOD YANG 1.0 по двум причинам: повторное использование определений верхнего уровня из другого модуля и внедрение определений из вашего модуля в другой модуль.

Есть пять определений верхнего уровня, которые можно импортировать из другого модуля в YANG: группировки, определения типов, расширения, функции и идентификаторы. В вашем случае вы пытались импортировать определение, которое не является одним из них - контейнер YANG, который представляет один из операторов определения данных (они определяют узлы, которые могут быть созданы AKA дерева данных). Другие операторы определения данных: лист, лист-список, список, выбор, случай, дополнение, использование и любойxml.

Вы не можете импортировать операторы определения данных для использования в вашем модуле, если только они не определены в группе и на них не ссылаются операторы использования. Кроме того, дочерний оператор типа листового оператора представляет тип данных экземпляра листа, который ограничивает набор допустимых значений для значения экземпляра (например, набор значений для текстового узла элемента XML в кодировке XML). Листовые операторы также не могут быть родительскими по отношению к другим операторам определения данных — поэтому они называются листовыми (на них заканчивается ветвь дерева данных).

Термин type в YANG больше похож на типы данных в языках программирования, и его не следует путать с некоторыми терминами из других языков схемы (сложные типы), которые определяют структуру. Как вы сами узнали, вы можете определить пользовательские типы данных в YANG, используя оператор typedef.

person predi    schedule 25.11.2015