RFC 6991 Common YANG Data Types

Internet Engineering Task Force (IETF)             J. Schoenwaelder, Ed.
Request for Comments: 6991                             Jacobs University
Obsoletes: 6021                                                July 2013
Category: Standards Track
ISSN: 2070-1721

Common YANG Data Types

Типы данных YANG общего назначения

PDF

Аннотация

Этот документ вводит набор типов данных общего назначения для использования в языке моделирования данных YANG. Документ отменяет RFC 6021.

Статус документа

Документ относится к категории Internet Standards Track.

Документ является результатом работы IETF1 и представляет согласованный взгляд сообщества IETF. Документ прошёл открытое обсуждение и был одобрен для публикации IESG2. Не все одобренные IESG документы претендуют на статус Internet Standard (см. раздел 2 в RFC 5741).

Информацию о текущем статусе документа, ошибках и способах обратной связи можно найти по ссылке http://www.rfc-editor.org/info/rfc6991.

Авторские права

Авторские права (Copyright (c) 2013) принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.

К документу применимы права и ограничения, указанные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно. Фрагменты программного кода, включённые в этот документ, распространяются в соответствии с упрощённой лицензией BSD, как указано в параграфе 4.e документа IETF Trust Legal Provisions, без каких-либо гарантий (как указано в Simplified BSD License).

Документ может содержать материалы из IETF Document или IETF Contribution, опубликованных или публично доступных до 10 ноября 2008 года. Лица, контролирующие авторские права на некоторые из таких документов, могли не предоставить IETF Trust права разрешать внесение изменений в такие документы за рамками процессов IETF Standards. Без получения соответствующего разрешения от лиц, контролирующих авторские права этот документ не может быть изменён вне рамок процесса IETF Standards, не могут также создаваться производные документы за рамками процесса IETF Standards за исключением форматирования документа для публикации или перевода с английского языка на другие языки.

1. Введение

YANG [RFC6020] является языком моделирования данных, служащим для создания моделей конфигурации и состояния, которыми манипулирует протокол NETCONF3 [RFC6241]. YANG поддерживает небольшой набор встроенных типов данных и обеспечивает механизмы создания производных типов на основе встроенных.

В этом документе представлен набор производных типов данных общего назначения, выведенных из встроенных в YANG типов данных. Производные типы рассчитаны на применение в моделировании всех типов данных управления. Определения типов организованы в несколько модулей YANG. Модуль ietf-yang-types содержит типы данных общего назначения, а в модуле ietf-inet-types содержатся определения, относящиеся к стеку протоколов Internet.

Этот документ добавляет определения новых типов данных и отменяет действие [RFC6021]. Подробности приведены в операторах revision модулей YANG (разделы 3 и 4), а различия между документами описаны в Приложении A.

Ключевые слова необходимо (MUST), недопустимо (MUST NOT), требуется (REQUIRED), нужно (SHALL), не нужно (SHALL NOT), следует (SHOULD), не следует (SHOULD NOT), рекомендуется (RECOMMENDED), возможно (MAY), необязательно (OPTIONAL) в данном документе интерпретируются в соответствии с BCP 14 [RFC2119].

2. Обзор

В этом разделе представлен краткий обзор типов данных, определённых в последующих разделах, и их эквивалентов в SMIv24 [RFC2578][RFC2579]. Тип данных YANG считается эквивалентным типу данных SMIv2, если их семантика и набор значений эквивалентны.

В таблице 1 перечислены типы данных, определённые в модуле ietf-yang-types, и соответствующие типы SMIv2 (- указывает отсутствие соответствующего типа в SMIv2).

Таблица 1. Модуль ietf-yang-types.

 

Тип YANG

Эквивалентный тип SMIv2 (модуль)

counter32

Counter32 (SNMPv2-SMI)

zero-based-counter32

ZeroBasedCounter32 (RMON2-MIB)

counter64

Counter64 (SNMPv2-SMI)

zero-based-counter64

ZeroBasedCounter64 (HCNUM-TC)

gauge32

Gauge32 (SNMPv2-SMI)

gauge64

CounterBasedGauge64 (HCNUM-TC)

object-identifier

object-identifier-128

OBJECT IDENTIFIER

yang-identifier

date-and-time

timeticks

TimeTicks (SNMPv2-SMI)

timestamp

TimeStamp (SNMPv2-TC)

phys-address

PhysAddress (SNMPv2-TC)

mac-address

MacAddress (SNMPv2-TC)

xpath1.0

hex-string

uuid

dotted-quad

 

В таблице 2 перечислены типы данных, определённые в модуле ietf-inet-types, и соответствующие типы SMIv2 (если они имеются).

Таблица 2. Модуль ietf-inet-types.

 

Тип YANG

Эквивалентный тип SMIv2 (модуль)

ip-version

InetVersion (INET-ADDRESS-MIB)

dscp

Dscp (DIFFSERV-DSCP-TC)

ipv6-flow-label

IPv6FlowLabel (IPV6-FLOW-LABEL-MIB)

port-number

InetPortNumber (INET-ADDRESS-MIB)

as-number

InetAutonomousSystemNumber (INET-ADDRESS-MIB)

ip-address

ipv4-address

ipv6-address

ip-address-no-zone

ipv4-address-no-zone

ipv6-address-no-zone

ip-prefix

ipv4-prefix

ipv6-prefix

domain-name

host

uri

Uri (URI-TC-MIB)

 

3. Базовые производные типы YANG

Модуль YANG ietf-yang-types ссылается на [IEEE802], [ISO9834-1], [RFC2578], [RFC2579], [RFC2856], [RFC3339], [RFC4122], [RFC4502], [RFC6020], [XPATH], [XSD-TYPES].

   <CODE BEGINS> file "ietf-yang-types@2013-07-15.yang"

   module ietf-yang-types {

     namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
     prefix "yang";

     organization
      "IETF NETMOD (NETCONF Data Modeling Language) Working Group";

     contact
      "WG Web:   <http://tools.ietf.org/wg/netmod/> 
       WG List:  <mailto:netmod@ietf.org> 

       WG Chair: David Kessens <mailto:david.kessens@nsn.com> 
       WG Chair: Juergen Schoenwaelder
                 <mailto:j.schoenwaelder@jacobs-university.de> 

       Editor:   Juergen Schoenwaelder
                 <mailto:j.schoenwaelder@jacobs-university.de>"; 

     description
      "Этот модуль содержит набор производных типов данных YANG 
       общего назначения.

       Авторские права (Copyright (c) 2013) принадлежат IETF Trust 
       и лицам, указанным как авторы кода. Все права защищены.

       Распространение и использование в исходной и двоичной форме
       с изменениями или без них разрешается в соответствии с условиями,
       указанными в упрощённой лицензии BSD, изложенной в разделе 4.c
       Правового положения IETF Trust применительно к документам IETF
       (http://trustee.ietf.org/license-info). 

       Эта версия модуля YANG является частью RFC 6991, где
       правовые аспекты выражены более полно.";

     revision 2013-07-15 {
       description
        "В этом выпуске добавлены новые типы данных:
         - yang-identifier
         - hex-string
         - uuid
         - dotted-quad";
       reference
        "RFC 6991: Common YANG Data Types";
     }

     revision 2010-09-24 {
       description
        "Исходный выпуск.";
       reference
        "RFC 6021: Common YANG Data Types";
     }

     /*** Набор типов для счётчиков и датчиков ***/
     typedef counter32 {
       type uint32;
       description
        "Тип counter32 представляет неотрицательные целые числа,
         которые монотонно растут до максимального значения
         2^32-1 (десятичное число 4294967295), затем счёт 
         повторяется с нуля.

         Для счётчиков не определены 'начальные' значения, поэтому
         одиночное значение счётчика (обычно) не имеет смысла. Разрывы
         в монотонном росте значений счётчиков обычно связаны с 
         реинициализацией системы управления или другими событиями, 
         указанными в описании узла схемы, применяющего этот тип.
         Если не связанные с инициализацией события возможны, при 
         создании счётчиков типа counter32 не в процессе инициализации
         следует определить соответствующий  узел схемы подходящего типа
         для указания последнего разрыва счётчика.

         Тип counter32 не следует применять для конфигурационных 
         узлов схемы. НЕ СЛЕДУЕТ применять оператор default вместе
         с типом counter32.

         Набор значений и семантика этого типа эквивалентны типу
         Counter32 в SMIv2.";
       reference
        "RFC 2578: Structure of Management Information Version 2
                   (SMIv2)";
     }
     typedef zero-based-counter32 {
       type yang:counter32;
       default "0";
       description
        "Тип zero-based-counter32 представляет counter32 с начальным
         значением 0. Узел схемы этого типа будет устанавливаться в 0
         при создании и далее будет монотонно расти до максимального 
         значения 2^32-1 (десятичное число 4294967295), затем 
         обращаться в 0 с последующим монотонным ростом.

         При условии, что приложение обнаруживает новый узел схемы
         этого типа в течение минимального времени от перехода через 0,
         начальное значение может считаться приращением. Для станции
         управления важно знать это минимальное время и реальное время
         между опросами, чтобы отбрасывать данные при слишком большой
         задержке или неопределённом минимальном времени.

         Набор значений и семантика этого типа эквивалентны 
         текстовому соглашению ZeroBasedCounter32 в SMIv2.";
       reference
         "RFC 4502: Remote Network Monitoring Management Information
                    Base Version 2";
     }

     typedef counter64 {
       type uint64;
       description
        "Тип counter64 представляет неотрицательные целые числа,
         которые монотонно растут до максимального значения
         2^64-1 (десятичное число 18446744073709551615), затем 
         счёт повторяется с нуля.

         Для счётчиков не определены начальные значения, поэтому
         одиночное значение счётчика (обычно) не имеет смысла.
         Разрывы в монотонном росте значений счётчиков обычно
         связаны с реинициализацией системы управления или другими
         событиями, указанными в описании узла схемы, применяющего
         этот тип. Если не связанные с инициализацией события
         возможны, при создании счётчиков типа  counter64 не в
         процессе инициализации следует определить соответствующий
         узел схемы подходящего типа для указания последнего 
         разрыва счётчика.

         Тип counter64 не следует применять для конфигурационных 
         узлов схемы. НЕ СЛЕДУЕТ применять оператор default вместе
         с типом counter64.

         Набор значений и семантика этого типа эквивалентны типу
         Counter64 в SMIv2.";
       reference
        "RFC 2578: Structure of Management Information Version 2
                   (SMIv2)";
     }

     typedef zero-based-counter64 {
       type yang:counter64;
       default "0";
       description
        "Тип zero-based-counter64 представляет counter64 с 
         начальным значением 0.

         Узел схемы этого типа будет устанавливаться в 0 при создании
         и далее будет монотонно расти до максимального значения
         2^64-1 (десятичное число 18446744073709551615), затем 
         обращаться в 0 с последующим монотонным ростом.

         При условии, что приложение обнаруживает новый узел схемы
         этого типа в течение минимального времени от перехода через 0,
         начальное значение может считаться приращением. Для станции
         управления важно знать это минимальное время и реальное время
         между опросами, чтобы отбрасывать данные при слишком большой
         задержке или неопределённом минимальному времени.

         Набор значений и семантика этого типа эквивалентны 
         текстовому соглашению ZeroBasedCounter64 в SMIv2.";
       reference
        "RFC 2856: Textual Conventions for Additional High Capacity
                   Data Types";
     }

     typedef gauge32 {
       type uint32;
       description
        "Тип gauge32 представляет неотрицательное целое число,
         которое может расти и уменьшаться, не переходя максимального
         и минимального значения. Максимальное значение не может быть
         больше 2^32-1 (десятичное число 4294967295), а минимальное -
         меньше 0. Значение gauge32 достигает максимума, когда 
         моделируемые данные не меньше максимума, а минимума - когда
         моделируемые данные не больше минимального значения. Если
         моделируемые затем данные снижаются (растут) ниже максимума 
         (выше минимума) значение gauge32 также снижается (растёт).

         Набор значений и семантика этого типа эквивалентны типу
         Gauge32 в SMIv2.";
       reference
        "RFC 2578: Structure of Management Information Version 2
                   (SMIv2)";
     }

     typedef gauge64 {
       type uint64;
       description
        "Тип gauge64 представляет неотрицательное целое число,
         которое может расти и уменьшаться, не переходя максимального
         и минимального значения. Максимальное значение не может быть
         больше 2^64-1 (десятичное число 18446744073709551615), а 
         минимальное - меньше 0. Значение gauge32 достигает максимума, 
         когда моделируемые данные не меньше максимума, а минимума - 
         когда моделируемые данные не больше минимального значения. Если
         моделируемые затем данные снижаются (растут) ниже максимума 
         (выше минимума) значение gauge64 также снижается (растёт).

         Набор значений и семантика этого типа эквивалентны  текстовому
         соглашению CounterBasedGauge64 SMIv2, определённому в RFC 2856";
       reference
        "RFC 2856: Textual Conventions for Additional High Capacity
                   Data Types";
     }

     /*** Набор связанных с идентификаторами типов ***/
     typedef object-identifier {
       type string {
         pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
               + '(\.(0|([1-9]\d*)))*';
       }
       description
        "Тип object-identifier представляет административно 
         назначаемые имена в дереве registration-hierarchical-name.

         Значения этого типа представляются последовательностью
         числовых неотрицательных значений субидентификаторов, каждое
         ДОЛЖНО быть не более 2^32-1 (десятичное число 4294967295).
         Субидентификаторы разделяются одним символом точки без
         промежуточных пробельных символов.

         Стандарт ASN.1 ограничивает пространство значений первого
         субидентификатора цифрами 0, 1 и 2. Кроме того, диапазон
         второго субидентификатора ограничен значениями от 0 до 39,
         если первый субидентификатор равен 0 или 1. В дополнение 
         стандарт ASN.1 требует наличия в идентификаторе объекта не
         менее 2 субидентификаторов. Шаблон соответствует этим
         ограничениям.

         Хотя число субидентификаторов не ограничено, разработчикам
         модулей следует понимать, что могут быть реализации, которые
         придерживаются принятого в SMIv2 ограничения в 128 значений.

         Этот тип является надмножеством типа SMIv2 OBJECT IDENTIFIER,
         поскольку не ограничен пределом в 128 субидентификаторов.
         Поэтому данный тип НЕ СЛЕДУЕТ применять для представления 
         SMIv2 OBJECT IDENTIFIER, взамен СЛЕДУЕТ использовать тип
         object-identifier-128.";
       reference
        "ISO9834-1: Information technology -- Open Systems
         Interconnection -- Procedures for the operation of OSI
         Registration Authorities: General procedures and top
         arcs of the ASN.1 Object Identifier tree";
     }

     typedef object-identifier-128 {
       type object-identifier {
         pattern '\d*(\.\d*){1,127}';
       }
       description
        "Этот тип представляет идентификаторы объектов, содержащие
         не более 128 субидентификаторов.

         Набор значений и семантика этого типа эквивалентны типу
         OBJECT IDENTIFIER в SMIv2.";
       reference
        "RFC 2578: Structure of Management Information Version 2
                   (SMIv2)";
     }

     typedef yang-identifier {
       type string {
         length "1..max";
         pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
         pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
       }
       description
         "Строка идентификатора YANG, определённая правилом 
          identifier в разделе 12 RFC 6020. Идентификатор должен
          начинаться с буквы или символа подчёркивания, за которыми
          может следовать произвольное число букв, цифр, символов
          подчёркивания, дефисов и точек. 

          Идентификаторам YANG НЕДОПУСТИМО начинаться с символов
          xml в любой комбинации строчных и прописных букв.";
       reference
         "RFC 6020: YANG - A Data Modeling Language for the Network
                    Configuration Protocol (NETCONF)";
     }

     /*** Набор типов, связанных с датами и временем ***/
     typedef date-and-time {
       type string {
         pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
               + '(Z|[\+\-]\d{2}:\d{2})';
       }
       description
        "Тип date-and-time является профилем стандарта ISO 8601
         для представления дат и времени с использованием григорианского
         календаря. Профиль определён date-time в параграфе 5.6 RFC 3339.

         Тип date-and-time совместим с типом dateTime схемы XML с учётом
         приведённых ниже исключений.

         (a) date-and-time не разрешает отрицательные значения лет.

         (b) В типа date-and-time time-offset -00:00 указывает 
             неизвестный часовой пояс (RFC 3339), тогда как -00:00, 
             +00:00 и Z представляют такой же часовой пояс в dateTime.

         (c) Канонический формат (см. ниже) значений date-and-time 
             отличается от канонического формата типа dateTime XML,
             которые требует указания времени в UTC с использованием
             смещения 'Z'.

         Этот тип не эквивалентен текстовому соглашению DateAndTime 
         в SMIv2, поскольку RFC 3339 использует другой разделитель 
         между full-date и full-time, а также обеспечивает большую
         точность time-secfrac.
         Канонический формат для значений date-and-time с известным
         часовым поясом использует сдвиг часового пояса, который
         рассчитывается с использованием настроенного в устройстве 
         смещения от UTC. Смена смещения в устройстве меняет значение
         date-and-time должным образом. Такие изменения могут быть
         периодическими в результате перехода на летнее время (DST).
         Канонический формат для значений  date-and-time с
         неизвестным часовым поясом (обычно это называют местным
         временем) использует смещение -00:00.";
       reference
        "RFC 3339: Date and Time on the Internet: Timestamps
         RFC 2579: Textual Conventions for SMIv2
         XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
     }

     typedef timeticks {
       type uint32;
       description
        "Тип timeticks представляет неотрицательные целые числа,
         которые указывают по модулю 2^32 (десятичное число
         4294967296) время в сотых долях секунды между двумя эпохами.
         При определении узла схемы, использующего этот тип, описание
         узла указывает обе опорных эпохи.

         Набор значений и семантика этого типа эквивалентны типу
         TimeTicks в SMIv2.";
       reference
        "RFC 2578: Structure of Management Information Version 2
                   (SMIv2)";
     }

     typedef timestamp {
       type yang:timeticks;
       description
        "Тип timestamp представляет значение связанного с ним узла
         схемы timeticks, где происходит конкретное вхождение,
         которое должно быть определено в описании каждого узла схемы,
         определённого с использованием этого типа. Когда конкретное
         вхождение происходит до того, как связанный атрибут timeticks
         в последний раз был равен нулю, timestamp = 0. 
         Отметим, что это требует сброса в 0 всех значений timestamp,
         когда значение связанного атрибута timeticks превышает 497
         дней и переходит через 0.

         Связанный узел схемы timeticks должен быть задан в описании
         любого узла схемы, использующего этот тип.

         Набор значений и семантика этого типа эквивалентны 
         текстовому соглашению TimeStamp в SMIv2.";
       reference
        "RFC 2579: Textual Conventions for SMIv2";
     }

     /*** Набор базовых типов для адресов ***/
     typedef phys-address {
       type string {
         pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
       }
       description
        "Представляет адрес среды или физического уровня в форме 
         последовательности октетов, каждый из которых указывается
         двумя шестнадцатеричными цифрами. В каноническом 
         представлении используются строчные буквы (нижний регистр).

         Набор значений и семантика этого типа эквивалентны 
         текстовому соглашению PhysAddress в SMIv2.";
       reference
        "RFC 2579: Textual Conventions for SMIv2";
     }

     typedef mac-address {
       type string {
         pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
       }
       description
        "Тип mac-address представляет адрес IEEE 802 MAC.
         В каноническом представлении используются строчные буквы.

         Набор значений и семантика этого типа эквивалентны 
         текстовому соглашению MacAddress в SMIv2.";
       reference
        "IEEE 802: IEEE Standard for Local and Metropolitan Area
                   Networks: Overview and Architecture
         RFC 2579: Textual Conventions for SMIv2";
     }

     /*** Набор относящихся к XML типов ***/
     typedef xpath1.0 {
       type string;
       description
        "Этот тип представляет выражение XPATH 1.0.

         Когда определяется узел схемы, использующий этот тип, 
         описание узла ДОЛЖНО указывать контекст XPath, в котором
         вычисляется выражение XPath.";
       reference
        "XPATH: XML Path Language (XPath) Version 1.0";
     }

     /*** Набор строковых типов ***/
     typedef hex-string {
       type string {
         pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
       }
       description
        "Шестнадцатеричная строка с октетами, представленными двумя
         шестнадцатеричными цифрами, разделёнными двоеточием. В 
         каноническом варианте применяются строчные буквы.";
     }

     typedef uuid {
       type string {
         pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
               + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
       }
       description
        "Глобально уникальный идентификатор (UUID) в строковом 
         представлении, определённом в RFC 4122. В каноническом вариант 
         применяются строчные буквы.

         Ниже приведён пример строкового представления UUID 
         f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
       reference
        "RFC 4122: A Universally Unique IDentifier (UUID) URN
                   Namespace";
     }

     typedef dotted-quad {
       type string {
         pattern
           '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
         + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
       }
       description
         "32-битовое целое число без знака, представленное 4 десятичными
          числами, разделёнными точками (full stop).";
     }
   }
   <CODE ENDS>

4. Связанные с Internet производные типы

Модуль YANG ietf-inet-types ссылается на [RFC0768], [RFC0791], [RFC0793], [RFC0952], [RFC1034], [RFC1123], [RFC1930], [RFC2460], [RFC2474], [RFC2780], [RFC2782], [RFC3289], [RFC3305], [RFC3595], [RFC3986], [RFC4001], [RFC4007], [RFC4271], [RFC4291], [RFC4340], [RFC4960], [RFC5017], [RFC5890], [RFC5952], [RFC6793].

   <CODE BEGINS> file "ietf-inet-types@2013-07-15.yang"

   module ietf-inet-types {

     namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
     prefix "inet";

     organization
      "IETF NETMOD (NETCONF Data Modeling Language) Working Group";

     contact
      "WG Web:   <http://tools.ietf.org/wg/netmod/> 
       WG List:  <mailto:netmod@ietf.org> 

       WG Chair: David Kessens <mailto:david.kessens@nsn.com> 

       WG Chair: Juergen Schoenwaelder
                 <mailto:j.schoenwaelder@jacobs-university.de> 

       Editor:   Juergen Schoenwaelder
                 <mailto:j.schoenwaelder@jacobs-university.de>"; 

     description
      "Этот модуль содержит набор производных типов данных YANG 
       для адресов Internet и связанных элементов.

       Авторские права (Copyright (c) 2013) принадлежат IETF Trust 
       и лицам, указанным как авторы кода. Все права защищены.

       Распространение и использование в исходной и двоичной форме
       с изменениями или без них разрешается в соответствии с условиями,
       указанными в упрощённой лицензии BSD, изложенной в разделе 4.c
       Правового положения IETF Trust применительно к документам IETF
       (http://trustee.ietf.org/license-info). 

       Эта версия модуля YANG является частью RFC 6991, где
       правовые аспекты выражены более полно.";

     revision 2013-07-15 {
       description
        "В этом выпуске добавлены новые типы данных:
         - ip-address-no-zone
         - ipv4-address-no-zone
         - ipv6-address-no-zone";
       reference
        "RFC 6991: Common YANG Data Types";
     }

     revision 2010-09-24 {
       description
        "Исходный выпуск.";
       reference
        "RFC 6021: Common YANG Data Types";
     }

     /*** Набор типов, связанных с протокольными полями ***/
     typedef ip-version {
       type enumeration {
         enum unknown {
           value "0";
           description
            "Неизвестная или не указанная версия протокола IP.";
         }
         enum ipv4 {
           value "1";
           description
            "Протокол IPv4 в соответствии с RFC 791.";
         }
         enum ipv6 {
           value "2";
           description
            "Протокол IPv6 в соответствии с RFC 2460.";
         }
       }
       description
        "Это значение представляет версию протокола IP.

         По набору значений и семантике этот тип эквивалентен
         текстовому соглашению InetVersion в SMIv2.";
       reference
        "RFC  791: Internet Protocol
         RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
         RFC 4001: Textual Conventions for Internet Network Addresses";
     }

     typedef dscp {
       type uint8 {
         range "0..63";
       }
       description
        "Тип dscp представляет коды дифференцированного обслуживания,
         которые могут применяться для маркировки пакетов в потоке.

         Набор значений и семантика этого типа эквивалентны 
         текстовому соглашению Dscp в SMIv2.";
       reference
        "RFC 3289: Management Information Base for the Differentiated
                   Services Architecture
         RFC 2474: Definition of the Differentiated Services Field
                   (DS Field) in the IPv4 and IPv6 Headers
         RFC 2780: IANA Allocation Guidelines For Values In
                   the Internet Protocol and Related Headers";
     }

     typedef ipv6-flow-label {
       type uint32 {
         range "0..1048575";
       }
       description
        "Тип ipv6-flow-label представляет идентификатор или метку 
         потока в заголовке пакета IPv6, которая может служить для 
         различения потоков трафика.

         Набор значений и семантика этого типа эквивалентны 
         текстовому соглашению IPv6FlowLabel в SMIv2.";
       reference
        "RFC 3595: Textual Conventions for IPv6 Flow Label
         RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
     }

     typedef port-number {
       type uint16 {
         range "0..65535";
       }
       description
        "Тип port-number представляет 16-битовый номер порта протоколов
         транспортного уровня Internet, таких как UDP, TCP, DCCP, SCTP.
         Номера портов распределяются IANA. Текущий список выделенных
         портов доступен на сайте <http://www.iana.org/>. 

         Отметим, что номер 0 зарезервирован IANA.  В ситуациях, где
         нулевое значение не имеет смысла, оно может быть исключено
         путём создания субтипа для port-number без 0. 
         Набор значений и семантика для этого типа эквивалентны 
         текстовому соглашению InetPortNumber в SMIv2.";
       reference
        "RFC  768: User Datagram Protocol
         RFC  793: Transmission Control Protocol
         RFC 4960: Stream Control Transmission Protocol
         RFC 4340: Datagram Congestion Control Protocol (DCCP)
         RFC 4001: Textual Conventions for Internet Network Addresses";
     }

     /*** Набор типов, связанных с автономными системами ***/
     typedef as-number {
       type uint32;
       description
        "Тип as-number представляет номера автономных систем (AS). 
         AS образует набор маршрутизаторов с общим техническим
         администрированием, использующих протокол внутренней
         маршрутизации и общую метрику внутри AS, а также протокол
         внешней маршрутизации для пересылки пакетов в другие AS. IANA 
         поддерживает пространство номеров AS, передав большую часть
         блоков AS для распределения региональным регистраторам.

         Номера AS исходно были 16-битовыми, но расширения BGP
         увеличили размер пространства номеров AS до 32 битов.
         Поэтому данный тип использует базовый тип uint32 без 
         ограничения диапазона для поддержки полного пространства.

         Набор значений и семантика этого типа эквивалентны 
         текстовому соглашению InetAutonomousSystemNumber в SMIv2.";
       reference
        "RFC 1930: Guidelines for creation, selection, and registration
                   of an Autonomous System (AS)
         RFC 4271: A Border Gateway Protocol 4 (BGP-4)
         RFC 4001: Textual Conventions for Internet Network Addresses
         RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
                   Number Space";
     }

     /*** Набор типов, связанных с адресами IP и именами хостов ***/
     typedef ip-address {
       type union {
         type inet:ipv4-address;
         type inet:ipv6-address;
       }
       description
        "Тип ip-address представляет адрес IP без учёта версии протокола.
         Формат текстового представления предполагает версию IP. 
         Этот тип поддерживает ограниченные (scoped) адреса, разрешая
         указывать идентификаторы зон в формате адресов.";
       reference
        "RFC 4007: IPv6 Scoped Address Architecture";
     }

     typedef ipv4-address {
       type string {
         pattern
           '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
         +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
         + '(%[\p{N}\p{L}]+)?';
       }
       description
         "Тип ipv4-address представляет адрес IPv4 в десятичной
          нотации с разделением точками. Адрес IPv4 может включать
          индекс зоны, отделённый символом %.

          Индекс зоны служит для того, чтобы различать идентичные
          значения адресов. Для адресов link-local индексом зоны
          обычно служит индекс или имя интерфейса. Если индекса зоны
          нет, используется принятая по умолчанию зона устройства.

          Каноническим форматом для индекса зоны является числовой
          формат.";
     }

     typedef ipv6-address {
       type string {
         pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
               + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
               + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
               + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
               + '(%[\p{N}\p{L}]+)?';
         pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
               + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
               + '(%.+)?';
       }
       description
        "Тип ipv6-address представляет адрес IPv6 в полной, смешанной
         сокращённой или сокращённой смешанной нотации. Адрес IPv6
         может включать индекс зоны, отделённый символом %.
         Индекс зоны служит для того, чтобы различать идентичные
         значения адресов. Для адресов link-local индексом зоны
         обычно служит индекс или имя интерфейса. Если индекса зоны
         нет, будет применяться принятая по умолчанию зона устройства.

         Канонический формат адреса IPv6 использует текстовое
         представление, определённое в разделе 4 RFC 5952. 
         Для индекса зоны каноническим является числовой
         формат, описанный в параграфе 11.2 RFC 4007.";
       reference
        "RFC 4291: IP Version 6 Addressing Architecture
         RFC 4007: IPv6 Scoped Address Architecture
         RFC 5952: A Recommendation for IPv6 Address Text
                   Representation";
     }

     typedef ip-address-no-zone {
       type union {
         type inet:ipv4-address-no-zone;
         type inet:ipv6-address-no-zone;
       }
       description
        "Тип ip-address представляет адрес IP без учёта версии протокола.
         Формат текстового представления предполагает версию IP. 
         Этот тип не поддерживает ограниченные (scoped) адреса, поскольку
         не разрешает указывать идентификаторы зон в формате адресов.";
       reference
        "RFC 4007: IPv6 Scoped Address Architecture";
     }

     typedef ipv4-address-no-zone {
       type inet:ipv4-address {
         pattern '[0-9\.]*';
       }
       description
         "Адрес IPv4 без индекса зоны. Этот тип, производный от 
          ipv4-address, может применяться в ситуациях, где индекс зоны
          известен из контекста и поэтому не требуется.";
     }

     typedef ipv6-address-no-zone {
       type inet:ipv6-address {
         pattern '[0-9a-fA-F:\.]*';
       }
       description
         "Адрес IPv6 без индекса зоны. Этот тип, производный от 
          ipv6-address, может применяться в ситуациях, где индекс зоны
          известен из контекста и поэтому не требуется.";
       reference
        "RFC 4291: IP Version 6 Addressing Architecture
         RFC 4007: IPv6 Scoped Address Architecture
         RFC 5952: A Recommendation for IPv6 Address Text
                   Representation";
     }

     typedef ip-prefix {
       type union {
         type inet:ipv4-prefix;
         type inet:ipv6-prefix;
       }
       description
        "Тип ip-prefix представляет префикс IP без учёта версии IP.
         Формат текстового представления предполагает версию IP.";
     }

     typedef ipv4-prefix {
       type string {
         pattern
            '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
          +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
          + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
       }
       description
        "Тип ipv4-prefix представляет адресный префикс IPv4. Размер 
         префикса указывается числом после знака / и должен
         быть не больше 32.
         Размер префикса n соответствует маске адреса IP, где
         n старших битов подряд имеют значение 1, а остальные 0.

         Канонический формат префикса IPv4 имеет значение 0 во всех
         битах адреса IPv4, не являющихся частью префикса IPv4.";
     }

     typedef ipv6-prefix {
       type string {
         pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
               + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
               + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
               + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
               + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
         pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
               + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
               + '(/.+)';
       }
       description
        "Тип ipv6-prefix представляет адресный префикс IPv6. Размер 
         префикса указывается числом после знака / и должен
         быть не больше 128.

         Размер префикса n соответствует маске адреса IP, где
         n старших битов подряд имеют значение 1, а остальные 0.

         В адресе IPv6 все биты, не относящиеся к префиксу, следует
         устанавливать в 0.

         Канонический формат префикса IPv6 имеет значение 0 во всех
         битах адреса IPv6, не являющихся частью префикса IPv6. 
         Кроме того, адреса IPv6 представляется в соответствии 
         с разделом 4 RFC 5952.";
       reference
        "RFC 5952: A Recommendation for IPv6 Address Text
                   Representation";
     }

     /*** Набор типов для доменных имён и URI ***/
     typedef domain-name {
       type string {
         pattern
           '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
         + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
         + '|\.';
         length "1..253";
       }
       description
        "Тип domain-name представляет доменные имена DNS.
         По возможности СЛЕДУЕТ применять полные имена (FQDN5). 

         Доменные имена Internet не заданы жёстко. Параграф 3.5 в
         RFC 1034 задаёт рекомендуемый синтаксис (изменён в
         параграфе 2.1 RFC 1123). Показанный выше шаблон рассчитан
         на современную практику применения доменных имён и 
         возможные расширения. Он предназначен для записи разных
         типов доменных имён, включая имена в записях A или AAAA 
         (имена хостов) и других записях, таких как SRV. Отметим, 
         что имена хостов Internet имеют более строгий синтаксис
         (см. RFC 952), чем рекомендации DNS в RFC 1034 и 1123, и 
         системам, которые хотят хранить имена хостов в узлах схем
         с применением типа domain-name, рекомендуется следовать
         более строгому синтаксису для обеспечения совместимости.

         Размер имён DNS в протоколе DNS ограничен 255 символами.
         Поскольку в кодировании применяются метки с префиксом, 
         задающим размер в байтах, и завершающим NULL-байтом, 
         максимальный размер текстовой части метки составляет 253.

         Раздел описания узлов схемы, использующих тип domain-name,
         ДОЛЖЕН указывать, когда и как эти имена преобразуются в адреса
         IP. Отметим, что для преобразования значений domain-name может
         потребоваться запрос множества записей DNS (например, A для 
         IPv4 и AAAA для IPv6). Порядок преобразования и приоритет 
         записей DNS могут указываться явно или определятся 
         конфигурацией распознавателя (resolver).

         Значения доменных имён используют кодировку US-ASCII со 
         строчными буквами US-ASCII для канонического формата. Имена на 
         других языках ДОЛЖНЫ быть A-метками в соответствии с RFC 5890";
       reference
        "RFC  952: DoD Internet Host Table Specification
         RFC 1034: Domain Names - Concepts and Facilities
         RFC 1123: Requirements for Internet Hosts -- Application
                   and Support
         RFC 2782: A DNS RR for specifying the location of services
                   (DNS SRV)
         RFC 5890: Internationalized Domain Names in Applications
                   (IDNA): Definitions and Document Framework";
     }

     typedef host {
       type union {
         type inet:ip-address;
         type inet:domain-name;
       }
       description
        "Тип host представляет адрес IP или доменное имя DNS.";
     }

     typedef uri {
       type string;
       description
        "Тип uri представляет идентификаторы URI6, определённые в STD 66.

         Объекты, использующие тип uri, ДОЛЖНЫ указываться в кодировке 
         US-ASCII и ДОЛЖНЫ нормализоваться в соответствии с параграфами 
         6.2.1, 6.2.2.1 и 6.2.2.2 в RFC 3986. Все необязательные 
         %-представления удаляются, для независимых от регистра символов
         устанавливается нижний регистр, за исключением шестнадцатеричных
         цифр, которые нормализуются в верхний регистр как указано в
         параграфе 6.2.2.1.

         Целью этой нормализации является помощь в создании уникальных
         URI. Отметим, что нормализации не достаточно для обеспечения
         уникальности. Два URI, которые после нормализации различаются
         текстом, могут оставаться эквивалентными.

         Объекты, использующие тип uri, могут ограничивать разрешённые
         схемы. Например, схемы data: и urn: могут не подойти.

         URI нулевого размера не являются пригодными. Они могут служить
         для указания отсутствия URI при необходимости.

         Набор значений и семантика этого типа эквивалентны 
         текстовому соглашению Uri SMIv2, определённому в RFC 5017.";
       reference
        "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
         RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
                   Group: Uniform Resource Identifiers (URIs), URLs,
                   and Uniform Resource Names (URNs): Clarifications
                   and Recommendations
         RFC 5017: MIB Textual Conventions for Uniform Resource
                   Identifiers (URIs)";
     }

   }

   <CODE ENDS>

5. Взаимодействие с IANA

Этот документ регистрирует два URI в реестре IETF XML [RFC3688]. В соответствии с форматом RFC 3688 были сделаны приведённые ниже регистрации.

     URI: urn:ietf:params:xml:ns:yang:ietf-yang-types
     Registrant Contact: The NETMOD WG of the IETF.
     XML: N/A, запрошенный URI является пространством имен XML.

     URI: urn:ietf:params:xml:ns:yang:ietf-inet-types
     Registrant Contact: The NETMOD WG of the IETF.
     XML: N/A, запрошенный URI является пространством имен XML.

Документ регистрирует два модуля YANG в реестре YANG Module Names [RFC6020].

     name:         ietf-yang-types
     namespace:    urn:ietf:params:xml:ns:yang:ietf-yang-types
     prefix:       yang
     reference:    RFC 6991

     name:         ietf-inet-types
     namespace:    urn:ietf:params:xml:ns:yang:ietf-inet-types
     prefix:       inet
     reference:    RFC 6991

6. Вопросы безопасности

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

7. Участники работы

Ниже перечислены внёсшие существенный вклад участники разработки начальной версии этого документа.

  • Andy Bierman (Brocade)

  • Martin Bjorklund (Tail-f Systems)

  • Balazs Lengyel (Ericsson)

  • David Partain (Ericsson)

  • Phil Shafer (Juniper Networks)

8. Благодарности

Редактор благодарит за полезные замечания к разным версиям этого документа Andy Bierman, Martin Bjorklund, Benoit Claise, Joel M. Halpern, Ladislav Lhotka, Lars-Johan Liman и Dan Romascanu.

Работу Juergen Schoenwaelder частично финансировал проект Flamingo в рамках Network of Excellence (ICT-318488), поддерживаемый Европейской комиссией по программе Seventh Framework.

9. Литература

9.1. Нормативные документы

[RFC2119] Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels”, BCP 14, RFC 2119, March 1997.

[RFC3339] Klyne, G., Ed. and C. Newman, “Date and Time on the Internet: Timestamps”, RFC 3339, July 2002.

[RFC3688] Mealling, M., “The IETF XML Registry”, BCP 81, RFC 3688, January 2004.

[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax”, STD 66, RFC 3986, January 2005.

[RFC4007] Deering, S., Haberman, B., Jinmei, T., Nordmark, E., and B. Zill, “IPv6 Scoped Address Architecture”, RFC 4007, March 2005.

[RFC4122] Leach, P., Mealling, M., and R. Salz, “A Universally Unique IDentifier (UUID) URN Namespace”, RFC 4122, July 2005.

[RFC4291] Hinden, R. and S. Deering, “IP Version 6 Addressing Architecture”, RFC 4291, February 2006.

[RFC6020] Bjorklund, M., Ed., “YANG – A Data Modeling Language for the Network Configuration Protocol (NETCONF)”, RFC 6020, October 2010.

[XPATH] Clark, J. and S. DeRose, “XML Path Language (XPath) Version 1.0”, World Wide Web Consortium Recommendation REC-xpath-19991116, November 1999, <http://www.w3.org/TR/1999/REC-xpath-19991116>.

9.2. Дополнительная литература

[IEEE802] IEEE, “IEEE Standard for Local and Metropolitan Area Networks: Overview and Architecture”, IEEE Std. 802-2001, 2001.

[ISO9834-1] ISO/IEC, “Information technology — Open Systems Interconnection — Procedures for the operation of OSI Registration Authorities: General procedures and top arcs of the ASN.1 Object Identifier tree”, ISO/IEC 9834-1:2008, 2008.

[RFC0768] Postel, J., “User Datagram Protocol”, STD 6, RFC 768, August 1980.

[RFC0791] Postel, J., “Internet Protocol”, STD 5, RFC 791, September 1981.

[RFC0793] Postel, J., “Transmission Control Protocol”, STD 7, RFC 793, September 1981.

[RFC0952] Harrenstien, K., Stahl, M., and E. Feinler, “DoD Internet host table specification”, RFC 952, October 1985.

[RFC1034] Mockapetris, P., “Domain names – concepts and facilities”, STD 13, RFC 1034, November 1987.

[RFC1123] Braden, R., “Requirements for Internet Hosts – Application and Support”, STD 3, RFC 1123, October 1989.

[RFC1930] Hawkinson, J. and T. Bates, “Guidelines for creation, selection, and registration of an Autonomous System (AS)”, BCP 6, RFC 1930, March 1996.

[RFC2460] Deering, S. and R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, RFC 2460, December 1998.

[RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, “Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers”, RFC 2474, December 1998.

[RFC2578] McCloghrie, K., Ed., Perkins, D., Ed., and J. Schoenwaelder, Ed., “Structure of Management Information Version 2 (SMIv2)”, STD 58, RFC 2578, April 1999.

[RFC2579] McCloghrie, K., Ed., Perkins, D., Ed., and J. Schoenwaelder, Ed., “Textual Conventions for SMIv2”, STD 58, RFC 2579, April 1999.

[RFC2780] Bradner, S. and V. Paxson, “IANA Allocation Guidelines For Values In the Internet Protocol and Related Headers”, BCP 37, RFC 2780, March 2000.

[RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, “A DNS RR for specifying the location of services (DNS SRV)”, RFC 2782, February 2000.

[RFC2856] Bierman, A., McCloghrie, K., and R. Presuhn, “Textual Conventions for Additional High Capacity Data Types”, RFC 2856, June 2000.

[RFC3289] Baker, F., Chan, K., and A. Smith, “Management Information Base for the Differentiated Services Architecture”, RFC 3289, May 2002.

[RFC3305] Mealling, M. and R. Denenberg, “Report from the Joint W3C/IETF URI Planning Interest Group: Uniform Resource Identifiers (URIs), URLs, and Uniform Resource Names (URNs): Clarifications and Recommendations”, RFC 3305, August 2002.

[RFC3595] Wijnen, B., “Textual Conventions for IPv6 Flow Label”, RFC 3595, September 2003.

[RFC4001] Daniele, M., Haberman, B., Routhier, S., and J. Schoenwaelder, “Textual Conventions for Internet Network Addresses”, RFC 4001, February 2005.

[RFC4271] Rekhter, Y., Li, T., and S. Hares, “A Border Gateway Protocol 4 (BGP-4)”, RFC 4271, January 2006.

[RFC4340] Kohler, E., Handley, M., and S. Floyd, “Datagram Congestion Control Protocol (DCCP)”, RFC 4340, March 2006.

[RFC4502] Waldbusser, S., “Remote Network Monitoring Management Information Base Version 2”, RFC 4502, May 2006.

[RFC4960] Stewart, R., “Stream Control Transmission Protocol”, RFC 4960, September 2007.

[RFC5017] McWalter, D., “MIB Textual Conventions for Uniform Resource Identifiers (URIs)”, RFC 5017, September 2007.

[RFC5890] Klensin, J., “Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework”, RFC 5890, August 2010.

[RFC5952] Kawamura, S. and M. Kawashima, “A Recommendation for IPv6 Address Text Representation”, RFC 5952, August 2010.

[RFC6021] Schoenwaelder, J., “Common YANG Data Types”, RFC 6021, October 2010.

[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., “Network Configuration Protocol (NETCONF)”, RFC 6241, June 2011.

[RFC6793] Vohra, Q. and E. Chen, “BGP Support for Four-Octet Autonomous System (AS) Number Space”, RFC 6793, December 2012.

[XSD-TYPES] Biron, P. and A. Malhotra, “XML Schema Part 2: Datatypes Second Edition”, World Wide Web Consortium Recommendation REC-xmlschema-2-20041028, October 2004, <http://www.w3.org/TR/2004/REC-xmlschema-2-20041028>.

Приложение A. Отличия от RFC 6021

В этой версии добавлены новые определения типов для модулей YANG. Ниже перечислены типы, добавленные в модуль ietf-yang-types.

  • yang-identifier

  • hex-string

  • uuid

  • dotted-quad

Ниже перечислены типы, добавленные в модуль ietf-inet-types.

  • ip-address-no-zone

  • ipv4-address-no-zone

  • ipv6-address-no-zone


Адрес автора

Juergen Schoenwaelder (редактор)

Jacobs University

EMail: j.schoenwaelder@jacobs-university.de


Перевод на русский язык

Николай Малых

nmalykh@protokols.ru

1Internet Engineering Task Force – комиссия по решению инженерных задач Internet.

2Internet Engineering Steering Group – комиссия по инженерным разработкам Internet.

3Network Configuration Protocol – протокол настройки конфигурации сети.

4Structure of Management Information Version 2 – структура данных управления, версия 2.

5Fully qualified domain name.

6Uniform Resource Identifier – унифицированный идентификатор ресурса.

Запись опубликована в рубрике RFC. Добавьте в закладки постоянную ссылку.