RFC 8533 A YANG Data Model for Retrieval Methods for the Management of Operations, Administration, and Maintenance (OAM) Protocols That Use Connectionless Communications

Internet Engineering Task Force (IETF)                          D. Kumar
Request for Comments: 8533                                         Cisco
Category: Standards Track                                        M. Wang
ISSN: 2070-1721                                               Q. Wu, Ed.
                                                                  Huawei
                                                               R. Rahman
                                                             S. Raghavan
                                                                   Cisco
                                                              April 2019

A YANG Data Model for Retrieval Methods for the Management of Operations, Administration, and Maintenance (OAM) Protocols That Use Connectionless Communications

Модель данных YANG для методов извлечения в протоколах OAM без использования соединений

PDF

Аннотация

В этом документе представлена модель данных YANG для метода извлечения в протоколах OAM1 без организации явных соединений. Модель обеспечивает независимые от протокола операции RPC для протоколов OAM, использующих обмен данными без организации соединений. Представленную здесь модель методов извлечения можно расширить для включения зависящих от технологии деталей. Такой подход обеспечивает два важных преимущества – во-первых, единообразие для разных протоколов OAM, во-вторых, поддержка как вложенных рабочих процессов OAM (т. е. выполнение функций OAM на одном или разных уровнях через один унифицированный интерфейс), так и интерактивных процессов OAM (т. е. выполнение функций OAM на одном уровне через унифицированный интерфейс).

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

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

Документ является результатом работы IETF2 и представляет согласованный взгляд сообщества IETF. Документ прошёл открытое обсуждение и был одобрен для публикации IESG3. Дополнительную информацию о стандартах Internet можно найти в разделе 2 в RFC 7841.

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

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

Copyright (c) 2019. Авторские права принадлежат 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).

1. Введение

Функции OAM важны для сети и позволяют операторам:

  1. отслеживать сетевые коммуникации (т. е. проверка доступности и непрерывности работы);

  2. находить и устранять неполадки;

  3. отслеживать соглашения о уровне обслуживания и производительность (управление производительностью).

Обзор инструментов OAM представлен в [RFC7276].

Утилиты Ping и Traceroute [RFC4443], а также обнаружение двухсторонней пересылки (Bidirectional Forwarding Detection или BFD) [RFC5880] являются общеизвестными инструментами проверки и отыскания точки отказа, особенно в сетях IP [RFC792]. За прошедшие годы в разных технологиях были разработаны похожие наборы для решения таких же задач.

В этом документе представлена модель данных YANG для извлечения по запросам сведений для протоколов OAM без организации соединений. Модель обеспечивает независимые от протоколов операции RPC для протоколов OAM, которые не используют явных соединений (connectionless OAM). Это отделено от базовой модели данных YANG для OAM без организации соединений [RFC8532] и позволяет не смешивать модели при извлечении данных. Предполагается, что процедуры извлечения будут развиваться быстрее, чем модель данных [RFC8532] и такой подход позволит определять новые процедуры для извлечения тех же данных, которые определены в базовой модели данных YANG для OAM без организации соединений.

2. Используемые соглашения

Ниже указаны используемые в этом документе термины, которые определены в [RFC6241].

  • client – клиент;
  • configuration data – данные конфигурации;
  • server – сервер;
  • state data – данные состояния.

Ниже указаны используемые в этом документе термины, которые определены в [RFC6020].

  • augment – дополнение;
  • data model – модель данных;
  • data node – узел данных.

Термины для описания моделей данных YANG представлены в [RFC6020].

2.1. Термины

TP – Test Point – точка тестирования.

MAC – Media Access Control – управление доступом к среде.

RPC – Remote Procedure Call – удалённый вызов процедуры.

RPC Operation – конкретный вызов RPC.

2.2. Диаграммы деревьев

Диаграмма дерева данных в этом документе использует нотацию [RFC8340].

3. Обзор модели методов извлечения данных OAM без соединений

Этот документ описывает модель данных YANG для извлечения сведений по запросу в протоколах OAM без организации соединений. Модель описывает независимые от протокола процедуры извлечения (операции RPC) для протоколов OAM без соединений. Это обеспечивает гибкое извлечение данных, определённых в модуле ietf-connectionless-oam.yang [RFC8532].

3.1. Определения операций RPC

Модель RPC упрощает отправку команд серверу протокола управления сетью (Network Configuration Protocol или NETCONF), которым в данном случае является устройство, где нужно выполнить команду OAM и получить отклик.

В модуле connectionless-oam-methods обобщены базовые функции OAM и определены две базовых операции RPC – continuity-check и path-discovery. На практике эти операции RPC активируются по запросу и поддерживаются соответствующими инструментами OAM для конкретной технологии [RFC7276]. Например, для модели IP OAM вызов Continuity Check RPC соответствует IP Ping [RFC792] [RFC4443], а операция обнаружения пути – IP Traceroute [RFC792] [RFC4443].

Отметим, что представленная в документе операция RPC является основой для вывода моделей для зависящих от технологии OAM (т. е. ICMP Ping [RFC792] [RFC4443] и LSP Ping [RFC8029]). Эту основу следует расширять специфичными для технологии параметрами. Для упрощения этого в будущих расширениях методов извлечения данных, RPC собраны в отдельный модуль.

Базовая группировка tp-address применяется как ввод данных из различных RPC, описанных в документе. Базовые группировки path-discovery-data и continuity-check-data, заданные в модуле ietf-connectionless-oam.yang [RFC8532], применяются как вывод данных из различных RPC, описанных в документе. Аналогичные методы, включая другие RPC, могут извлекать данные с использованием той же модели (т. е. модуля ietf-connectionless-oam.yang). Ниже представлен фрагмент кода для операций RPC.

        rpc continuity-check {
         if-feature cl-oam:continuity-check;
         description
           "Continuity Check RPC в соответствии с RFC 7276.";
         reference
           "RFC 7276: An Overview of Operations, Administration, and
            Maintenance (OAM) Tools";
         input {
         uses rpc-input-parameters;
         ....
         }
       output {
         container response-info {
           leaf protocol-id {
             type identityref {
               base protocol-id;
             }
             mandatory true;
             description
               "Протокол, применяемый в Continuity Check. ";
           }
           leaf protocol-id-meta-data {
              type identityref {
               base protocol-id-meta-data;
               }
                description
                "Необязательные метаданные, относящиеся к protocol ID.";
           }
           leaf status-code {
             type identityref{
            base status-code;
          }
             mandatory true;
             description
               "Код статуса для операции Continuity Check RPC.";
           }
           leaf status-sub-code {
             type identityref{
             base status-sub-code;
          }
             mandatory true;
             description
               "Субкод статуса для операции Continuity Check RPC.";
           }
           description
             "Код и субкод статуса для операции Continuity Check RPC.";
         }
         uses cl-oam:continuity-check-data;
       }
     }

       rpc path-discovery {
         description
           "RPC обнаружения пути в соответствии с RFC 7276.";
         reference
           "RFC 7276: An Overview of Operations, Administration, and
            Maintenance (OAM) Tools";
         input {
         uses rpc-input-parameters;
         .....
         }
       output {
         list response-list {
           key "response-index";
           description
             "Список откликов при обнаружении путей.";
           leaf response-index {
             type uint32;
             mandatory true;
             description
               "Индекс отклика.";
           }
           leaf protocol-id {
             type identityref {
               base protocol-id;
             }
             mandatory true;
             description
               "Протокол, применяемый для обнаружения пути. ";
           }
           leaf protocol-id-meta-data {
              type identityref {
               base protocol-id-meta-data;
               }
                description
                "Необязательные метаданные, относящиеся к protocol ID.";
           }
           leaf status-code {
             type identityref{
             base status-code;
           }
             mandatory true;
             description
               "Код состояния для RPC обнаружения пути. ";
           }
           leaf status-sub-code {
             type identityref{
             base status-sub-code;
          }
             mandatory true;
             description
               "Субкод состояния для RPC обнаружения пути . ";
           }
         }
         uses cl-oam:path-discovery-data;
       }
     }

3.2. Иерархия методов извлечений OAM

Ниже представлена полная иерархия данных, относящихся к модели данных YANG для методов извлечения OAM без организации содинений.

   module: ietf-connectionless-oam-methods

     rpcs:
       +---x continuity-check {cl-oam:continuity-check}?
       |  +---w input
       |  |  +---w destination-tp
       |  |  |  +---w tp-location-type    identityref
       |  |  |  +---w mac-address
       |  |  |  |  +---w mac-address    yang:mac-address
       |  |  |  +---w ipv4-address
       |  |  |  |  +---w ipv4-address    inet:ipv4-address
       |  |  |  +---w ipv6-address
       |  |  |  |  +---w ipv6-address    inet:ipv6-address
       |  |  |  +---w tp-attribute
       |  |  |  |  +---w tp-attribute-type?
       |  |  |  |  |       address-attribute-type
       |  |  |  |  +---w (tp-attribute-value)?
       |  |  |  |     +--:(ip-prefix)
       |  |  |  |     |  +---w ip-prefix?
       |  |  |  |     |          inet:ip-prefix
       |  |  |  |     +--:(bgp)
       |  |  |  |     |  +---w bgp?
       |  |  |  |     |          inet:ip-prefix
       |  |  |  |     +--:(tunnel)
       |  |  |  |     |  +---w tunnel-interface?         uint32
       |  |  |  |     +--:(pw)
       |  |  |  |     |  +---w remote-pe-address?
       |  |  |  |     |  |       inet:ip-address
       |  |  |  |     |  +---w pw-id?                    uint32
       |  |  |  |     +--:(vpls)
       |  |  |  |     |  +---w route-distinguisher?
       |  |  |  |     |  |       rt:route-distinguisher
       |  |  |  |     |  +---w sender-ve-id?             uint16
       |  |  |  |     |  +---w receiver-ve-id?           uint16
       |  |  |  |     +--:(mpls-mldp)
       |  |  |  |        +---w (root-address)?
       |  |  |  |           +--:(ip-address)
       |  |  |  |           |  +---w source-address?
       |  |  |  |           |  |       inet:ip-address
       |  |  |  |           |  +---w group-ip-address?
       |  |  |  |           |          inet:ip-address
       |  |  |  |           +--:(vpn)
       |  |  |  |           |  +---w as-number?
       |  |  |  |           |          inet:as-number
       |  |  |  |           +--:(global-id)
       |  |  |  |              +---w lsp-id?             string
       |  |  |  +---w system-info
       |  |  |     +---w router-id?   rt:router-id
       |  |  +---w source-interface      if:interface-ref
       |  |  +---w outbound-interface    if:interface-ref
       |  |  +---w vrf?
       |  |  |       cl-oam:routing-instance-ref
       |  |  +---w session-type?         enumeration
       |  |  +---w count?                uint32
       |  |  +---w ttl?                  uint8
       |  |  +---w packet-size?          uint32
       |  +--ro output
       |     +--ro response-info
       |     |  +--ro protocol-id              identityref
       |     |  +--ro protocol-id-meta-data?   identityref
       |     |  +--ro status-code              identityref
       |     |  +--ro status-sub-code          identityref
       |     +--ro src-test-point
       |     |  +--ro ni?                 routing-instance-ref
       |     |  +--ro tp-location-type    identityref
       |     |  +--ro mac-address
       |     |  |  +--ro mac-address    yang:mac-address
       |     |  +--ro ipv4-address
       |     |  |  +--ro ipv4-address    inet:ipv4-address
       |     |  +--ro ipv6-address
       |     |  |  +--ro ipv6-address    inet:ipv6-address
       |     |  +--ro tp-attribute
       |     |  |  +--ro tp-attribute-type?
       |     |  |  |       address-attribute-type
       |     |  |  +--ro (tp-attribute-value)?
       |     |  |     +--:(ip-prefix)
       |     |  |     |  +--ro ip-prefix?
       |     |  |     |          inet:ip-prefix
       |     |  |     +--:(bgp)
       |     |  |     |  +--ro bgp?
       |     |  |     |          inet:ip-prefix
       |     |  |     +--:(tunnel)
       |     |  |     |  +--ro tunnel-interface?         uint32
       |     |  |     +--:(pw)
       |     |  |     |  +--ro remote-pe-address?
       |     |  |     |  |       inet:ip-address
       |     |  |     |  +--ro pw-id?                    uint32
       |     |  |     +--:(vpls)
       |     |  |     |  +--ro route-distinguisher?
       |     |  |     |  |       rt:route-distinguisher
       |     |  |     |  +--ro sender-ve-id?             uint16
       |     |  |     |  +--ro receiver-ve-id?           uint16
       |     |  |     +--:(mpls-mldp)
       |     |  |        +--ro (root-address)?
       |     |  |           +--:(ip-address)
       |     |  |           |  +--ro source-address?
       |     |  |           |  |       inet:ip-address
       |     |  |           |  +--ro group-ip-address?
       |     |  |           |          inet:ip-address
       |     |  |           +--:(vpn)
       |     |  |           |  +--ro as-number?
       |     |  |           |          inet:as-number
       |     |  |           +--:(global-id)
       |     |  |              +--ro lsp-id?             string
       |     |  +--ro system-info
       |     |  |  +--ro router-id?   rt:router-id
       |     |  +--ro egress-intf-name?   if:interface-ref
       |     +--ro dest-test-point
       |     |  +--ro ni?                  routing-instance-ref
       |     |  +--ro tp-location-type     identityref
       |     |  +--ro mac-address
       |     |  |  +--ro mac-address    yang:mac-address
       |     |  +--ro ipv4-address
       |     |  |  +--ro ipv4-address    inet:ipv4-address
       |     |  +--ro ipv6-address
       |     |  |  +--ro ipv6-address    inet:ipv6-address
       |     |  +--ro tp-attribute
       |     |  |  +--ro tp-attribute-type?
       |     |  |  |       address-attribute-type
       |     |  |  +--ro (tp-attribute-value)?
       |     |  |     +--:(ip-prefix)
       |     |  |     |  +--ro ip-prefix?
       |     |  |     |          inet:ip-prefix
       |     |  |     +--:(bgp)
       |     |  |     |  +--ro bgp?
       |     |  |     |          inet:ip-prefix
       |     |  |     +--:(tunnel)
       |     |  |     |  +--ro tunnel-interface?         uint32
       |     |  |     +--:(pw)
       |     |  |     |  +--ro remote-pe-address?
       |     |  |     |  |       inet:ip-address
       |     |  |     |  +--ro pw-id?                    uint32
       |     |  |     +--:(vpls)
       |     |  |     |  +--ro route-distinguisher?
       |     |  |     |  |       rt:route-distinguisher
       |     |  |     |  +--ro sender-ve-id?             uint16
       |     |  |     |  +--ro receiver-ve-id?           uint16
       |     |  |     +--:(mpls-mldp)
       |     |  |        +--ro (root-address)?
       |     |  |           +--:(ip-address)
       |     |  |           |  +--ro source-address?
       |     |  |           |  |       inet:ip-address
       |     |  |           |  +--ro group-ip-address?
       |     |  |           |          inet:ip-address
       |     |  |           +--:(vpn)
       |     |  |           |  +--ro as-number?
       |     |  |           |          inet:as-number
       |     |  |           +--:(global-id)
       |     |  |              +--ro lsp-id?             string
       |     |  +--ro system-info
       |     |  |  +--ro router-id?   rt:router-id
       |     |  +--ro ingress-intf-name?   if:interface-ref
       |     +--ro sequence-number?             uint64
       |     +--ro hop-cnt?                     uint8
       |     +--ro session-packet-statistics
       |     |  +--ro rx-packet-count?    uint32
       |     |  +--ro tx-packet-count?    uint32
       |     |  +--ro rx-bad-packet?      uint32
       |     |  +--ro tx-packet-failed?   uint32
       |     +--ro session-error-statistics
       |     |  +--ro packet-loss-count?          uint32
       |     |  +--ro loss-ratio?                 percentage
       |     |  +--ro packet-reorder-count?       uint32
       |     |  +--ro packets-out-of-seq-count?   uint32
       |     |  +--ro packets-dup-count?          uint32
       |     +--ro session-delay-statistics
       |     |  +--ro time-unit-value?       identityref
       |     |  +--ro min-delay-value?       uint32
       |     |  +--ro max-delay-value?       uint32
       |     |  +--ro average-delay-value?   uint32
       |     +--ro session-jitter-statistics
       |        +--ro unit-value?             identityref
       |        +--ro min-jitter-value?       uint32
       |        +--ro max-jitter-value?       uint32
       |        +--ro average-jitter-value?   uint32
       +---x path-discovery {cl-oam:path-discovery}?
          +---w input
          |  +---w destination-tp
          |  |  +---w tp-location-type    identityref
          |  |  +---w mac-address
          |  |  |  +---w mac-address    yang:mac-address
          |  |  +---w ipv4-address
          |  |  |  +---w ipv4-address    inet:ipv4-address
          |  |  +---w ipv6-address
          |  |  |  +---w ipv6-address    inet:ipv6-address
          |  |  +---w tp-attribute
          |  |  |  +---w tp-attribute-type?
          |  |  |  |       address-attribute-type
          |  |  |  +---w (tp-attribute-value)?
          |  |  |     +--:(ip-prefix)
          |  |  |     |  +---w ip-prefix?
          |  |  |     |          inet:ip-prefix
          |  |  |     +--:(bgp)
          |  |  |     |  +---w bgp?
          |  |  |     |          inet:ip-prefix
          |  |  |     +--:(tunnel)
          |  |  |     |  +---w tunnel-interface?         uint32
          |  |  |     +--:(pw)
          |  |  |     |  +---w remote-pe-address?
          |  |  |     |  |       inet:ip-address
          |  |  |     |  +---w pw-id?                    uint32
          |  |  |     +--:(vpls)
          |  |  |     |  +---w route-distinguisher?
          |  |  |     |  |       rt:route-distinguisher
          |  |  |     |  +---w sender-ve-id?             uint16
          |  |  |     |  +---w receiver-ve-id?           uint16
          |  |  |     +--:(mpls-mldp)
          |  |  |        +---w (root-address)?
          |  |  |           +--:(ip-address)
          |  |  |           |  +---w source-address?
          |  |  |           |  |       inet:ip-address
          |  |  |           |  +---w group-ip-address?
          |  |  |           |          inet:ip-address
          |  |  |           +--:(vpn)
          |  |  |           |  +---w as-number?
          |  |  |           |          inet:as-number
          |  |  |           +--:(global-id)
          |  |  |              +---w lsp-id?             string
          |  |  +---w system-info
          |  |     +---w router-id?   rt:router-id
          |  +---w source-interface      if:interface-ref
          |  +---w outbound-interface    if:interface-ref
          |  +---w vrf?
          |  |       cl-oam:routing-instance-ref
          |  +---w session-type?         enumeration
          |  +---w max-ttl?              uint8
          +--ro output
             +--ro response-list* [response-index]
             |  +--ro response-index           uint32
             |  +--ro protocol-id              identityref
             |  +--ro protocol-id-meta-data?   identityref
             |  +--ro status-code              identityref
             |  +--ro status-sub-code          identityref
             +--ro src-test-point
             |  +--ro ni?                 routing-instance-ref
             |  +--ro tp-location-type    identityref
             |  +--ro mac-address
             |  |  +--ro mac-address    yang:mac-address
             |  +--ro ipv4-address
             |  |  +--ro ipv4-address    inet:ipv4-address
             |  +--ro ipv6-address
             |  |  +--ro ipv6-address    inet:ipv6-address
             |  +--ro tp-attribute
             |  |  +--ro tp-attribute-type?
             |  |  |       address-attribute-type
             |  |  +--ro (tp-attribute-value)?
             |  |     +--:(ip-prefix)
             |  |     |  +--ro ip-prefix?
             |  |     |          inet:ip-prefix
             |  |     +--:(bgp)
             |  |     |  +--ro bgp?
             |  |     |          inet:ip-prefix
             |  |     +--:(tunnel)
             |  |     |  +--ro tunnel-interface?         uint32
             |  |     +--:(pw)
             |  |     |  +--ro remote-pe-address?
             |  |     |  |       inet:ip-address
             |  |     |  +--ro pw-id?                    uint32
             |  |     +--:(vpls)
             |  |     |  +--ro route-distinguisher?
             |  |     |  |       rt:route-distinguisher
             |  |     |  +--ro sender-ve-id?             uint16
             |  |     |  +--ro receiver-ve-id?           uint16
             |  |     +--:(mpls-mldp)
             |  |        +--ro (root-address)?
             |  |           +--:(ip-address)
             |  |           |  +--ro source-address?
             |  |           |  |       inet:ip-address
             |  |           |  +--ro group-ip-address?
             |  |           |          inet:ip-address
             |  |           +--:(vpn)
             |  |           |  +--ro as-number?
             |  |           |          inet:as-number
             |  |           +--:(global-id)
             |  |              +--ro lsp-id?             string
             |  +--ro system-info
             |     +--ro router-id?   rt:router-id
             +--ro dest-test-point
             |  +--ro ni?                 routing-instance-ref
             |  +--ro tp-location-type    identityref
             |  +--ro mac-address
             |  |  +--ro mac-address    yang:mac-address
             |  +--ro ipv4-address
             |  |  +--ro ipv4-address    inet:ipv4-address
             |  +--ro ipv6-address
             |  |  +--ro ipv6-address    inet:ipv6-address
             |  +--ro tp-attribute
             |  |  +--ro tp-attribute-type?
             |  |  |       address-attribute-type
             |  |  +--ro (tp-attribute-value)?
             |  |     +--:(ip-prefix)
             |  |     |  +--ro ip-prefix?
             |  |     |          inet:ip-prefix
             |  |     +--:(bgp)
             |  |     |  +--ro bgp?
             |  |     |          inet:ip-prefix
             |  |     +--:(tunnel)
             |  |     |  +--ro tunnel-interface?         uint32
             |  |     +--:(pw)
             |  |     |  +--ro remote-pe-address?
             |  |     |  |       inet:ip-address
             |  |     |  +--ro pw-id?                    uint32
             |  |     +--:(vpls)
             |  |     |  +--ro route-distinguisher?
             |  |     |  |       rt:route-distinguisher
             |  |     |  +--ro sender-ve-id?             uint16
             |  |     |  +--ro receiver-ve-id?           uint16
             |  |     +--:(mpls-mldp)
             |  |        +--ro (root-address)?
             |  |           +--:(ip-address)
             |  |           |  +--ro source-address?
             |  |           |  |       inet:ip-address
             |  |           |  +--ro group-ip-address?
             |  |           |          inet:ip-address
             |  |           +--:(vpn)
             |  |           |  +--ro as-number?
             |  |           |          inet:as-number
             |  |           +--:(global-id)
             |  |              +--ro lsp-id?             string
             |  +--ro system-info
             |     +--ro router-id?   rt:router-id
             +--ro sequence-number?             uint64
             +--ro hop-cnt?                     uint8
             +--ro session-packet-statistics
             |  +--ro rx-packet-count?    uint32
             |  +--ro tx-packet-count?    uint32
             |  +--ro rx-bad-packet?      uint32
             |  +--ro tx-packet-failed?   uint32
             +--ro session-error-statistics
             |  +--ro packet-loss-count?          uint32
             |  +--ro loss-ratio?                 percentage
             |  +--ro packet-reorder-count?       uint32
             |  +--ro packets-out-of-seq-count?   uint32
             |  +--ro packets-dup-count?          uint32
             +--ro session-delay-statistics
             |  +--ro time-unit-value?       identityref
             |  +--ro min-delay-value?       uint32
             |  +--ro max-delay-value?       uint32
             |  +--ro average-delay-value?   uint32
             +--ro session-jitter-statistics
             |  +--ro unit-value?             identityref
             |  +--ro min-jitter-value?       uint32
             |  +--ro max-jitter-value?       uint32
             |  +--ro average-jitter-value?   uint32
             +--ro path-verification
             |  +--ro flow-info?
             |  |       string
             |  +--ro session-path-verification-statistics
             |     +--ro verified-count?   uint32
             |     +--ro failed-count?     uint32
             +--ro path-trace-info
                +--ro path-trace-info-list* [index]
                   +--ro index                   uint32
                   +--ro ni?
                   |       routing-instance-ref
                   +--ro tp-location-type        identityref
                   +--ro mac-address
                   |  +--ro mac-address    yang:mac-address
                   +--ro ipv4-address
                   |  +--ro ipv4-address    inet:ipv4-address
                   +--ro ipv6-address
                   |  +--ro ipv6-address    inet:ipv6-address
                   +--ro tp-attribute
                   |  +--ro tp-attribute-type?
                   |  |       address-attribute-type
                   |  +--ro (tp-attribute-value)?
                   |     +--:(ip-prefix)
                   |     |  +--ro ip-prefix?
                   |     |          inet:ip-prefix
                   |     +--:(bgp)
                   |     |  +--ro bgp?
                   |     |          inet:ip-prefix
                   |     +--:(tunnel)
                   |     |  +--ro tunnel-interface?
                   |     |          uint32
                   |     +--:(pw)
                   |     |  +--ro remote-pe-address?
                   |     |  |       inet:ip-address
                   |     |  +--ro pw-id?
                   |     |          uint32
                   |     +--:(vpls)
                   |     |  +--ro route-distinguisher?
                   |     |  |       rt:route-distinguisher
                   |     |  +--ro sender-ve-id?
                   |     |  |       uint16
                   |     |  +--ro receiver-ve-id?
                   |     |          uint16
                   |     +--:(mpls-mldp)
                   |        +--ro (root-address)?
                   |           +--:(ip-address)
                   |           |  +--ro source-address?
                   |           |  |       inet:ip-address
                   |           |  +--ro group-ip-address?
                   |           |          inet:ip-address
                   |           +--:(vpn)
                   |           |  +--ro as-number?
                   |           |          inet:as-number
                   |           +--:(global-id)
                   |              +--ro lsp-id?
                   |                      string
                   +--ro system-info
                   |  +--ro router-id?   rt:router-id
                   +--ro timestamp-type?         identityref
                   +--ro timestamp-64bit
                   |  +--ro timestamp-sec?       uint32
                   |  +--ro timestamp-nanosec?   uint32
                   +--ro timestamp-80bit {ptp-long-format}?
                   |  +--ro timestamp-sec?       uint64
                   |  +--ro timestamp-nanosec?   uint32
                   +--ro ntp-timestamp-32bit
                   |       {ntp-short-format}?
                   |  +--ro timestamp-sec?       uint16
                   |  +--ro timestamp-nanosec?   uint16
                   +--ro icmp-timestamp-32bit {icmp-timestamp}?
                   |  +--ro timestamp-millisec?   uint32
                   +--ro ingress-intf-name?
                   |       if:interface-ref
                   +--ro egress-intf-name?
                   |       if:interface-ref
                   +--ro queue-depth?            uint32
                   +--ro transit-delay?          uint32
                   +--ro app-meta-data?          uint64

4. Модуль YANG для операций извлечения OAM

<CODE BEGINS> file "ietf-connectionless-oam-methods@2019-04-16.yang"
module ietf-connectionless-oam-methods {
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-connectionless-oam-methods";
  prefix cloam-methods;

  import ietf-interfaces {
    prefix if;
  }
  import ietf-connectionless-oam {
    prefix cl-oam;
  }

  organization
    "IETF LIME Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/lime> 
     WG List:  <mailto:lmap@ietf.org> 

     Deepak Kumar <dekumar@cisco.com> 
     Qin Wu <bill.wu@huawei.com> 
     Srihari Raghavan <rihari@cisco.com> 
     Michael Wang <wangzitao@huawei.com> 
     Reshad Rahman <rrahman@cisco.com>"; 
  description
    "Этот модуль YANG задаёт операции RPC для OAM без организации
     соединений, используемые в рамках IETF независимо от протокола.
     Предполагается, что каждый протокол отображает соответствующие
     абстракции на свой естественный формат. Протоколы могут расширять
     модель данных YANG, включая зависящие от протокола элементы.

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

     Распространение и применение модуля в исходной или двоичной 
     форме с изменениями или без таковых разрешено в соответствии с
     лицензией Simplified BSD License, изложенной в параграфе 4.c
     IETF Trust's Legal Provisions Relating to IETF Documents
     (https://trustee.ietf.org/license-info). 

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

  revision 2019-04-16 {
    description
      "Исходный выпуск.";
    reference
      "RFC 8533: Retrieval Methods YANG Data Model for the Management
       of Operations, Administration, and Maintenance (OAM)
       Protocols That Use Connectionless Communications";
  }

  identity protocol-id {
    description
      "Базовое отождествление для идентификатора протокола. Реестр 
       протоколов доступен по ссылке https://www.iana.org/protocols."; 
  }

  identity protocol-id-internet {
    base protocol-id;
    description
      "Идентификатор для протоколов Internet.";
  }

  identity protocol-id-proprietary {
    base protocol-id;
    description
      "Идентификатор для фирменных протоколов (например, IP SLA).";
  }

  identity protocol-id-sfc {
    base protocol-id;
    description
      "Идентификатор для цепочки функций службы (SFC).";
  }

  identity protocol-id-mpls {
    base protocol-id;
    description
      "Протокол MPLS.";
  }

  identity protocol-id-mpls-tp {
    base protocol-id;
    description
      "Протокол MPLS-TP.";
  }

  identity protocol-id-twamp {
    base protocol-id;
    description
      "Протокол TWAMP.";
  }

  identity protocol-id-bier {
    base protocol-id;
    description
      "Протокол BIER.";
  }

  identity status-code {
    description
      "Базовый идентификатор для кода состояния.";
  }

  identity success-reach {
    base status-code;
    description
      "Указывает доступность проверяемого адресата (см. RFC 7276).";
    reference
      "RFC 7276: An Overview of Operations, Administration, and
       Maintenance (OAM) Tools";
  }

  identity fail-reach {
    base status-code;
    description
      "Указывает недоступность проверяемого адресата (см. RFC 7276).";
    reference
      "RFC 7276: An Overview of Operations, Administration, and
       Maintenance (OAM) Tools";
  }

  identity success-path-verification {
    base status-code;
    description
      "Указывает успешную проверку пути (см. RFC 7276).";
    reference
      "RFC 7276: An Overview of Operations, Administration, and
       Maintenance (OAM) Tools";
  }

  identity fail-path-verification {
    base status-code;
    description
      "Указывает отказ при проверке пути (см. RFC 7276).";
    reference
      "RFC 7276: An Overview of Operations, Administration, and
       Maintenance (OAM) Tools";
  }

  identity status-sub-code {
    description
      "Субкод состояния IdentityBase.";
  }

  identity invalid-cc {
    base status-sub-code;
    description
      "Указывает, что сообщение Continuity Check недействительно
       (см. RFC 7276).";
    reference
      "RFC 7276: An Overview of Operations, Administration, and
       Maintenance (OAM) Tools";
  }

  identity invalid-pd {
    base status-sub-code;
    description
      "Указывает, что сообщение обнаружения пути недействительно
       (см. RFC 7276).";
    reference
      "RFC 7276: An Overview of Operations, Administration, and
       Maintenance (OAM) Tools";
  }

  identity protocol-id-meta-data {
    description
      "Базовый идентификатор для метаданных, соответствующих 
       идентификатору протокола.";
  }

  identity protocol-internet-number {
    base protocol-id-meta-data;
    description
      "Номер протокола IP для стандартных протоколов Internet
       (выделенные IANA номера протоколов Internet), помогающий при
       обработке протокола. Реестр протоколов доступен по ссылке
       https://www.iana.org/assignments/protocol-numbers."; 
  }

  grouping rpc-input-parameters {
    container destination-tp {
      uses cl-oam:tp-address;
      description
        "Целевая точка теста.";
    }
    leaf source-interface {
      type if:interface-ref;
      mandatory true;
      description
        "Интерфейс источника.";
    }
    leaf outbound-interface {
      type if:interface-ref;
      mandatory true;
      description
        "Выходной интерфейс.";
    }
    leaf vrf {
      type cl-oam:routing-instance-ref;
      description
        "Экземпляр виртуальной маршрутизации и пересылки (VRF).";
    }
    description
      "Группировка для входных параметров RPC.";
  }

  rpc continuity-check {
    if-feature "cl-oam:continuity-check";
    description
      "Операция Continuity Check RPC в соответствии с RFC 7276.";
    reference
      "RFC 7276: An Overview of Operations, Administration, and
       Maintenance (OAM) Tools";
    input {
      uses rpc-input-parameters;
      uses cl-oam:session-type {
        description
          "Если задан тип сессии, должно устанавливаться session-type
           по запросу.";
      }
      leaf count {
        type uint32 {
          range "0..4294967295" {
            description
              "Общее число пакетов, переданных отправителем. Счётчик 
               может сбрасываться (0) при создании и монотонно расти 
               монотонно до максимального значения 2^32-1 (4294967295),
               после чего снова сбрасывается в 0.";
          }
        }
        default "5";
        description
          "Число пакетов, которые будут переданы. По умолчанию 5.";
      }
      leaf ttl {
        type uint8;
        default "255";
        description
          "Значение TTL, используемое для ограничения срока действия
           пакетов с целью предотвращения петель. Значение TTL
           уменьшается при каждой пересылке пакета и при достижении 0
           пакет отбрасывается.";
      }
      leaf packet-size {
        type uint32 {
          range "64..10000";
        }
        default "64";
        description
          "Размер пакета сообщения Continuity Check в октетах 
           (по умолчанию 64).";
      }
    }
    output {
      container response-info {
        leaf protocol-id {
          type identityref {
            base protocol-id;
          }
          mandatory true;
          description
            "Протокол, используемый в сообщении Continuity Check. Это
             может быть стандартный (например, протоколы TCP/IP, MPLS
             и т. п.) или фирменный протокол.";
        }
        leaf protocol-id-meta-data {
          type identityref {
            base protocol-id-meta-data;
          }
          description
            "Необязательные метаданные, связанные с идентификатором
             протокола, например, номер стандартного протокола IP для
             помощи при обработке протокола.";
        }
        leaf status-code {
          type identityref {
            base status-code;
          }
          mandatory true;
          description
            "Код состояния для операции Continuity Check RPC. Это может
             быть базовый (например, код доступности или недоступности
             адресата, см. RFC 7276) или специализированный код.";
          reference
            "RFC 7276: An Overview of Operations, Administration, and
             Maintenance (OAM) Tools";
        }
        leaf status-sub-code {
          type identityref {
            base status-sub-code;
          }
          mandatory true;
          description
            "Необязательный субкод состояния операции Continuity Check
             RPC. Если базовый код состояния указывает доступность
             адресата, этот субкод задавать не требуется. Если базовый
             код указывает недоступность адресата, субкод может служить
             для уточнения причин. Это может быть базовый субкод
             (например, непригодность Continuity Check) или иной код
             ошибки, специфичный для протокола, использованного в 
             Continuity Checks. Например, если используется ICMP, можно
             указывать коды ошибок из RFC 4443 для указания причин,
             специфичных для ICMP. Эти коды могут задаваться в моделях
             для топологии.";
          reference
            "RFC 4443: Internet Control Message Protocol (ICMPv6) for 
             the Internet Protocol Version 6 (IPv6) Specification.";4
        }
        description
          "Код и субкод состояния для операции Continuity Check RPC.";
      }
      uses cl-oam:continuity-check-data;
    }
  }

  rpc path-discovery {
    if-feature "cl-oam:path-discovery";
    description
      "Операция RPC обнаружения пути в соответствии с RFC 7276.";
    reference
      "RFC 7276: An Overview of Operations, Administration, and
       Maintenance (OAM) Tools";
    input {
      uses rpc-input-parameters;
      uses cl-oam:session-type {
        description
          "Если задан тип сессии, это значение session-type должно
           устанавливаться по запросу.";
      }
      leaf max-ttl {
        type uint8;
        default "255";
        description
          "Максимальное значение TTL задаёт предельное число пересылок
           пакета, прежде чем он будет отброшен маршрутизатором.
           По умолчанию установлено значение 255.";
      }
    }
    output {
      list response-list {
        key "response-index";
        description
          "Список откликов при обнаружении пути.";
        leaf response-index {
          type uint32;
          mandatory true;
          description
            "Индекс отклика.";
        }
        leaf protocol-id {
          type identityref {
            base protocol-id;
          }
          mandatory true;
          description
            "Протокол, применяемый для обнаружения пути. Это может быть
             стандартный (например, протоколы TCP/IP, MPLS и т. п.) или
             фирменный протокол, указанный этим полем.";
        }
        leaf protocol-id-meta-data {
          type identityref {
            base protocol-id-meta-data;
          }
          description
            "Необязательные метаданные, связанные с идентификатором
             протокола, например, номер стандартного протокола IP для
             помощи при обработке протокола.";
        }
        leaf status-code {
          type identityref {
            base status-code;
          }
          mandatory true;
          description
            "Код состояния для операции Continuity Check RPC. Это может
             быть базовый (например, код доступности или недоступности
             адресата, см. RFC 7276) или специализированный код.";
        }
        leaf status-sub-code {
          type identityref {
            base status-sub-code;
          }
          mandatory true;
          description
            "Необязательный субкод состояния операции Continuity Check
             RPC. Если базовый код состояния указывает доступность
             адресата, этот субкод задавать не требуется. Если базовый
             код указывает недоступность адресата, субкод может служить
             для уточнения причин. Это может быть базовый субкод
             (например, непригодность Continuity Check) или иной код
             ошибки, специфичный для протокола, использованного в 
             Continuity Checks. Например, если используется ICMP, можно
             указывать коды ошибок из RFC 4443 для указания причин,
             специфичных для ICMP. Эти коды могут задаваться в моделях
             для топологии.";
          reference
            "RFC 4443: Internet Control Message Protocol (ICMPv6) for 
             the Internet Protocol Version 6 (IPv6) Specification.";5
        }
      }
      uses cl-oam:path-discovery-data;
    }
  }
}
<CODE ENDS>

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

Заданный этим документом модуль YANG определяет схему для данных, предназначенную для доступа через сеть с использованием протоколов управления, таких как NETCONF [RFC6241] или RESTCONF [RFC8040]. Нижним уровнем NETCONF служит защищённый транспорт с обязательной поддержкой SSH (Secure Shell) [RFC6242]. Нижним уровнем RESTCONF служит протокол HTTPS с обязательной поддержкой защиты на транспортном уровне (TLS) [RFC8446].

Модель доступа к конфигурации сети (NACM – Network Configuration Access Control Model) [RFC8341] обеспечивает возможность разрешить доступ лишь определённых пользователей NETCONF или RESTCONF к заранее заданному подмножеству операций NETCONF или RESTCONF и содержимого.

Некоторые из операций RPC в этом модуле YANG могут считаться чувствительными или уязвимыми в некоторых сетевых средах:

  • continuity-check генерирует Continuity Check;

  • path-discovery генерирует обнаружение пути.

Эти операции служат для извлечения данный из устройства, которому нужно выполнить команду OAM. Несанкционированный доступ к чувствительной информации в указанных выше узлах может использоваться для сетевой разведки или приводить к отказам в обслуживании (denial-of-service) на локальном устройстве и в сети.

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

Этот документ регистрирует URI в реестре IETF XML Registry [RFC3688]

   URI: urn:ietf:params:xml:ns:yang:ietf-connectionless-oam-methods
   Registrant Contact: The IESG.  XML: запрошенный URI является 
   пространством имён XML.

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

   name: ietf-connectionless-oam-methods
   namespace:
      urn:ietf:params:xml:ns:yang:ietf-connectionless-oam-methods
   prefix: cloam-methods
   reference: RFC 8533

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

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

[RFC3688] Mealling, M., “The IETF XML Registry”, BCP 81, RFC 3688, DOI 10.17487/RFC3688, January 2004, <https://www.rfc-editor.org/info/rfc3688>.

[RFC6020] Bjorklund, M., Ed., “YANG – A Data Modeling Language for the Network Configuration Protocol (NETCONF)”, RFC 6020, DOI 10.17487/RFC6020, October 2010, <https://www.rfc-editor.org/info/rfc6020>.

[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., “Network Configuration Protocol (NETCONF)”, RFC 6241, DOI 10.17487/RFC6241, June 2011, <https://www.rfc-editor.org/info/rfc6241>.

[RFC6242] Wasserman, M., “Using the NETCONF Protocol over Secure Shell (SSH)”, RFC 6242, DOI 10.17487/RFC6242, June 2011, <https://www.rfc-editor.org/info/rfc6242>.

[RFC7011] Claise, B., Ed., Trammell, B., Ed., and P. Aitken, “Specification of the IP Flow Information Export (IPFIX) Protocol for the Exchange of Flow Information”, STD 77, RFC 7011, DOI 10.17487/RFC7011, September 2013, <https://www.rfc-editor.org/info/rfc7011>.

[RFC792] Postel, J., “Internet Control Message Protocol”, STD 5, RFC 792, DOI 10.17487/RFC0792, September 1981.

[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, “RESTCONF Protocol”, RFC 8040, DOI 10.17487/RFC8040, January 2017, <https://www.rfc-editor.org/info/rfc8040>.

[RFC8341] Bierman, A. and M. Bjorklund, “Network Configuration Access Control Model”, STD 91, RFC 8341, DOI 10.17487/RFC8341, March 2018, <https://www.rfc-editor.org/info/rfc8341>.

[RFC8446] Rescorla, E., “The Transport Layer Security (TLS) Protocol Version 1.3”, RFC 8446, DOI 10.17487/RFC8446, August 2018, <https://www.rfc-editor.org/info/rfc8446>.

[RFC8532] Kumar, D., Wang, M., Wu, Q., Ed., Rahman, R., and S. Raghavan, “Generic YANG Data Model for the Management of Operations, Administration, and Maintenance (OAM) Protocols That Use Connectionless Communications”, RFC 8532, DOI 10.17487/RFC8532, April 2019, <https://www.rfc-editor.org/info/rfc8532>.

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

[RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., “Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification”, STD 89, RFC 4443, DOI 10.17487/RFC4443, March 2006, <https://www.rfc-editor.org/info/rfc4443>.

[RFC5880] Katz, D. and D. Ward, “Bidirectional Forwarding Detection (BFD)”, RFC 5880, DOI 10.17487/RFC5880, June 2010, <https://www.rfc-editor.org/info/rfc5880>.

[RFC7276] Mizrahi, T., Sprecher, N., Bellagamba, E., and Y. Weingarten, “An Overview of Operations, Administration, and Maintenance (OAM) Tools”, RFC 7276, DOI 10.17487/RFC7276, June 2014, <https://www.rfc-editor.org/info/rfc7276>.

[RFC8029] Kompella, K., Swallow, G., Pignataro, C., Ed., Kumar, N., Aldrin, S., and M. Chen, “Detecting Multiprotocol Label Switched (MPLS) Data-Plane Failures”, RFC 8029, DOI 10.17487/RFC8029, March 2017, <https://www.rfc-editor.org/info/rfc8029>.

[RFC8340] Bjorklund, M. and L. Berger, Ed., “YANG Tree Diagrams”, BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, <https://www.rfc-editor.org/info/rfc8340>.

[RFC8407] Bierman, A., “Guidelines for Authors and Reviewers of Documents Containing YANG Data Models”, BCP 216, RFC 8407, DOI 10.17487/RFC8407, October 2018, <https://www.rfc-editor.org/info/rfc8407>.

[YANG-Push] Clemm, A., Voit, E., Prieto, A., Tripathy, A., Nilsen- Nygaard, E., Bierman, A., and B. Lengyel, “Subscription to YANG Datastores”, Work in Progress6, draft-ietf-netconf-yang-push-22, February 2019.

Приложение A. Пример модуля расширения OAM без соединений

Ниже приведён пример возможных расширений модуля данных YANG ietf-connectionless-oam-methods, заданного в этом документе. Фрагмент кода, представленный ниже, дополняет модуль данных YANG ietf-connectionless-oam-methods атрибутами ICMP ping.

   augment "/cloam-methods:continuity-check"
   +"/cloam-methods:output"{
     container session-rtt-statistics{
      leaf min-rtt{
       type uint32;
    description
    "Минимальное время кругового обхода (RTT) для ping.";
      }
      leaf max-rtt{
       type uint32;
    description
    "Максимальное время кругового обхода (RTT) для ping.";
      }
      leaf avg-rtt{
       type uint32;
    description
     "Текущее среднее значение RTT для ping.";
      }
      description
      "Контейнер статистики RTT для ping.";
     }
   }

A.1. Пример модели новых процедур извлечения

Как было отмечено в разделе 1. Введение, можно задать новые процедуры, извлекающие те же данные, которые определены базовой моделью данных YANG для протоколов OAM без соединений. В этом приложении показано, как базовую модель для OAM без соединений для поддержки постоянного извлечения данных отдельно от процедур извлечения по запросам, описанных в разделе 3, т. е. сначала извлекается постоянный идентификатор (persistent-id) по сведениям о местоположении тестовой точки, затем экспортируются детали по persistent-id. Как параметры экспорта данных указаны IPFIX (Internet Protocol Flow Information Export) [RFC7011] и YANG-Push [YANG-Push], а в будущем могут добавляться иные варианты экспорта.

Показанный ниже модуль YANG example-cl-oam-persistent-methods предназначен для иллюстрации а не в качестве реального определения модели операций RPC для постоянного извлечения данных. Для краткости в модуле не соблюдаются некоторые рекомендации [RFC8407].

   module example-cl-oam-persistent-methods {
     namespace "http://example.com/cl-oam-persistent-methods";
     prefix pcloam-methods;

     import ietf-interfaces {
       prefix if;
     }
     import ietf-connectionless-oam {
       prefix cl-oam;
     }
     import ietf-yang-types {
       prefix yang;
     }

     identity export-method {
       description
         "Базовый идентификатор для метода экспорта.";
     }

     identity ipfix-export {
       base export-method;
       description
         "Экспорт на основе IPFIX. Конфигурация задаётся отдельно.";
     }

     identity yang-push-export {
       base export-method;
       description
         "Экспорт YANG-Push из draft-ietf-netconf-yang-push.";
     }

     identity protocol-id {
       description
         "Базовый идентификатор протокола.";
     }

     identity status-code {
       description
         "Базовый код состояния.";
     }

     identity success-reach {
       base status-code;
       description
         "Указывает доступность проверяемого адресата.";
     }

     identity fail-reach {
       base status-code;
       description
         "Указывает недоступность проверяемого адресата.";
     }

     identity success-path-verification {
       base status-code;
       description
         "Указывает успешную проверку пути.";
     }

     identity fail-path-verification {
       base status-code;
       description
         "Указывает отказ при проверке пути.";
     }

     identity status-sub-code {
       description
         "Base status-sub-code.";
     }

     identity invalid-cc {
       base status-sub-code;
       description
         "Указывает, что сообщение Continuity Check непригодно.";
     }

     identity invalid-pd {
       base status-sub-code;
       description
         "Указывает, что сообщение обнаружения пути непригодно.";
     }

     typedef export-method {
       type identityref {
         base export-method;
       }
       description
         "Метод экспорта.";
     }

     typedef change-type {
       type enumeration {
         enum create {
           description
             "Изменение в результате создания.";
         }
         enum delete {
           description
             "Изменение в результате удаления.";
         }
         enum modify {
           description
             "Изменение в результате обновления.";
         }
       }
       description
         "Возможны разные типы изменений.";
     }

     rpc cc-get-persistent-id {
       if-feature "cl-oam:continuity-check";
       description
         "Получает постоянную идентификацию Continuity Check 
          с заданными параметрами отображения на входа.";
       input {
         container destination-tp {
           uses cl-oam:tp-address;
           description
             "Целевая тестовая точка.";
         }
         uses cl-oam:session-type;
         leaf source-interface {
           type if:interface-ref;
           description
             "Интерфейс-источник.";
         }
         leaf outbound-interface {
           type if:interface-ref;
           description
             "Выходной интерфейс.";
         }
         leaf vrf {
           type cl-oam:routing-instance-ref;
           description
             "Экземпляр VRF.";
         }
       }
       output {
         container error-code {
           leaf protocol-id {
             type identityref {
               base protocol-id;
             }
             mandatory true;
             description
               "Применяемый протокол. Это может быть стандартный
                (например, TCP/IP, MPLS и т. п.) или фирменный протокол,
                указанный этим полем.";
           }
           leaf protocol-id-meta-data {
             type uint64;
             description
               "Необязательные метаданные, связанные с идентификатором 
                протокола, например, номер стандартного протокола IP,
                используемый в помощь при обработке протокола.";
           }
           leaf status-code {
             type identityref {
               base status-code;
             }
             mandatory true;
             description
               "Код состояния.";
           }
           leaf status-sub-code {
             type identityref {
               base status-sub-code;
             }
             mandatory true;
             description
               "Субкод для Continuity Check.";
           }
           description
             "Код и субкод состояния.";
         }
         leaf cc-persistent-id {
           type string;
           description
             "Идентификатор для действия в качестве cookie.";
         }
       }
     }

     rpc cc-persistent-get-export-details {
       if-feature "cl-oam:continuity-check";
       description
         "На основе постоянного идентификатора получает параметры
          конфигурации и детали, связанные с настроенным экспортом.";
       input {
         leaf cc-persistent-id {
           type string;
           description
             "Постоянный идентификатор для применения в качестве 
              ключа поиска.";
         }
       }
       output {
         container error-code {
           leaf protocol-id {
             type identityref {
               base protocol-id;
             }
             mandatory true;
             description
               "Применяемый протокол. Это может быть стандартный
                (например, TCP/IP, MPLS и т. п.) или фирменный протокол,
                указанный этим полем.";
           }
           leaf protocol-id-meta-data {
             type uint64;
             description
               "Необязательные метаданные, связанные с идентификатором 
                протокола, например, номер стандартного протокола IP,
                используемый в помощь при обработке протокола.";
           }
           leaf status-code {
             type identityref {
               base status-code;
             }
             mandatory true;
             description
               "Код состояния.";
           }
           leaf status-sub-code {
             type identityref {
               base status-sub-code;
             }
             mandatory true;
             description
               "Субкод для Continuity Check.";
           }
           description
             "Код и субкод состояния.";
         }
         leaf data-export-method {
           type export-method;
           description
             "Используемый тип экспорта.";
         }
         choice cc-trigger {
           description
             "Требуемые условия для периодической отправки или
              отправки при изменении.";
           case periodic {
             description
               "Периодические отчёты.";
             leaf period {
               type yang:timeticks;
               description
                 "Интервал времени между отчётами.";
             }
             leaf start-time {
               type yang:date-and-time;
               description
                 "Время начала отчётов.";
             }
           }
           case on-change {
             description
               "Отправка при изменении, а не периодически.";
             leaf all-data-on-start {
               type boolean;
               description
                 "Управляет передачей полного обновления при старте.";
             }
             leaf-list excluded-change {
               type change-type;
               description
                 "Изменения, которые не будут вызывать обновление.";
             }
           }
         }
       }
     }

     rpc pd-get-persistent-id {
       if-feature "cl-oam:path-discovery";
       description
         "Получает постоянную идентификацию обнаружения пути.";
       input {
         container destination-tp {
           uses cl-oam:tp-address;
           description
             "Целевая тестовая точка.";
         }
         uses cl-oam:session-type;
         leaf source-interface {
           type if:interface-ref;
           description
             "Интерфейс-источник.";
         }
         leaf outbound-interface {
           type if:interface-ref;
           description
             "Выходной интерфейс.";
         }
         leaf vrf {
           type cl-oam:routing-instance-ref;
           description
             "VRF";
         }
       }
       output {
         list response-list {
           key "response-index";
           description
             "Список откликов на обнаружение пути.";
           leaf response-index {
             type uint32;
             mandatory true;
             description
               "Индекс отклика.";
           }
           leaf protocol-id {
             type identityref {
               base protocol-id;
             }
             mandatory true;
             description
               "Применяемый протокол. Это может быть стандартный
                (например, TCP/IP, MPLS и т. п.) или фирменный протокол,
                указанный этим полем.";
           }
           leaf protocol-id-meta-data {
             type uint64;
             description
               "Необязательные метаданные, связанные с идентификатором 
                протокола, например, номер стандартного протокола IP,
                используемый в помощь при обработке протокола.";
           }
           leaf status-code {
             type identityref {
               base status-code;
             }
             mandatory true;
             description
               "Код состояния для постоянных сведений обнаружения пути";
           }
           leaf status-sub-code {
             type identityref {
               base status-sub-code;
             }
             mandatory true;
             description
               "Субкод для постоянных сведений обнаружения пути";
           }
           leaf pd-persistent-id {
             type string;
             description
               "Идентификатор для действия в качестве cookie.";
           }
         }
       }
     }

     rpc pd-persistent-get-export-details {
       if-feature "cl-oam:path-discovery";
       description
         "На основе постоянного идентификатора получает параметры
          конфигурации и детали, связанные с настроенным экспортом.";
       input {
         leaf cc-persistent-id {
           type string;
           description
             "Постоянный идентификатор для применения в качестве 
              ключа поиска.";
         }
       }
       output {
         list response-list {
           key "response-index";
           description
             "Список откликов при обнаружении пути.";
           leaf response-index {
             type uint32;
             mandatory true;
             description
               "Индекс отклика.";
           }
           leaf protocol-id {
             type identityref {
               base protocol-id;
             }
             mandatory true;
             description
               "Применяемый протокол. Это может быть стандартный
                (например, TCP/IP, MPLS и т. п.) или фирменный протокол,
                указанный этим полем.";
           }
           leaf protocol-id-meta-data {
             type uint64;
             description
               "Необязательные метаданные, связанные с идентификатором 
                протокола, например, номер стандартного протокола IP,
                используемый в помощь при обработке протокола.";
           }
           leaf status-code {
             type identityref {
               base status-code;
             }
             mandatory true;
             description
               "Код состояния для создания постоянного обнаружения
                путей.";
           }
           leaf status-sub-code {
             type identityref {
               base status-sub-code;
             }
             mandatory true;
             description
               "Субкод состояния для создания постоянного обнаружения
                путей.";
           }
           leaf data-export-method {
             type export-method;
             description
               "Тип экспорта.";
           }
           choice pd-trigger {
             description
               "Требуемые условия для периодической отправки или
                отправки при изменении.";
             case periodic {
               description
                 "Периодические отчёты.";
               leaf period {
                 type yang:timeticks;
                 description
                   "Интервал времени между отчётами.";
               }
               leaf start-time {
                 type yang:date-and-time;
                 description
                   "Время начала отчётов.";
               }
             }
             case on-change {
               description
                 "Отправка при изменении, а не периодически.";
               leaf all-data-on-start {
                 type boolean;
                 description
                   "Управляет передачей полного обновления при старте.";
               }
               leaf-list excluded-change {
                 type change-type;
                 description
                   "Изменения, которые не будут вызывать обновления.";
               }
             }
           }
         }
       }
     }
   }

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

Авторы благодарны Elwyn Davies, Alia Atlas, Brian E. Carpenter, Greg Mirsky, Adam Roach, Alissa Cooper, Eric Rescorla, Ben Campbell, Benoit Claise, Kathleen Moriarty, Carlos Pignataro, Benjamin Kaduk и другим за подробные рецензии, комментарии и предложения по улучшению документа.

Адреса авторов

Deepak Kumar
CISCO Systems
510 McCarthy Blvd.
Milpitas, CA 95035
United States of America
Email: dekumar@cisco.com
 
Michael Wang
Huawei Technologies, Co., Ltd
101 Software Avenue, Yuhua District
Nanjing 210012
China
Email: wangzitao@huawei.com
 
Qin Wu (editor)
Huawei
101 Software Avenue, Yuhua District
Nanjing, Jiangsu 210012
China
Email: bill.wu@huawei.com
 
Reshad Rahman
CISCO Systems
2000 Innovation Drive
Kanata, Ontario K2K 3E8
Canada
Email: rrahman@cisco.com
 
Srihari Raghavan
CISCO Systems
Tril Infopark Sez, Ramanujan IT City
Neville Block, 2nd floor, Old Mahabalipuram Road
Chennai, Tamil Nadu 600113
India
Email: srihari@cisco.com

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

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

nmalykh@protokols.ru

1Operations, Administration, and Maintenance – эксплуатация, администрирование, обслуживание.

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

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

4В оригинале ошибочно указано The IETF Administrative Oversight Committee (IAOC) Member Selection Guidelines and Process. Прим. перев.

5В оригинале ошибочно указано The IETF Administrative Oversight Committee (IAOC) Member Selection Guidelines and Process. Прим. перев.

6Опубликовано в RFC 8641. Прим. перев.

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

Добавить комментарий