RFC 9181 A Common YANG Data Model for Layer 2 and Layer 3 VPNs

image_print
Internet Engineering Task Force (IETF)                        S. Barguil
Request for Comments: 9181                      O. Gonzalez de Dios, Ed.
Category: Standards Track                                     Telefonica
ISSN: 2070-1721                                        M. Boucadair, Ed.
                                                                  Orange
                                                                   Q. Wu
                                                                  Huawei
                                                           February 2022

A Common YANG Data Model for Layer 2 and Layer 3 VPNs

Базовая модель данных для VPN L2 и L3

PDF

Аннотация

Этот документ определяет модуль YANG общего назначения, который может применяться в разных модулях, связанных с VPN, таких как модели виртуальных частных сетей L3 и L2.

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

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

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

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

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

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

Оглавление

Исключено в версии HTML.

1. Введение

IETF задаёт модули YANG для служб VPN, например, L3 VPN Service Model (L3SM) [RFC8299] и L2 VPN Service Model (L2SM) [RFC8466]. Другими примерами могут служить модели данных YANG L3 VPN Network Model (L3NM) [RFC9182] и L2 VPN Network Model (L2NM) [L2NM-YANG]. Имеются базовые узлы данных и структуры, присутствующие во всех или части этих моделей.

Этот документ определяет базовый модуль YANG, который может применяться связанными с VPN модулями, такими как L3NM [RFC9182] и L2NM [L2NM-YANG]: ietf-vpn-common (4. Модуль общего назначения VPN L2/3).

Модуль ietf-vpn-common включает набор идентификаторов, типов и группировок, которые могут применяться связанными с VPN модулями YANG, независимо от их уровня (например, L2, L3) и типа модуля (например, модель сети или службы), включая будущие выпуски имеющихся модулей (например, L3SM [RFC8299] и L2SM [RFC8466]).

2. Терминология

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

Значения символов в схемах деревьев описаны в [RFC8340].

Термины, связанные с VPN, определены в [RFC4026] и [RFC4176].

В документе применяется много терминов из [RFC8299] и [RFC8466] (например, Enhanced Mobile Broadband (eMBB), Ultra-Reliable and Low Latency Communications (URLLC), Massive Machine Type Communications (mMTC)).

3. Описание модуля YANG VPN общего назначения

Модуль ietf-vpn-common определяет набор связанных с VPN свойств общего назначения, включая указанные ниже.

Свойства инкапсуляции, такие как:

  • dot1Q [IEEE802.1Q];

  • QinQ [IEEE802.1ad];

  • агрегирование каналов [IEEE802.1AX];

  • виртуальные расширяемые ЛВС (Virtual eXtensible Local Area Network или VXLAN) [RFC7348].

Групповая передача[RFC6513].

Свойства маршрутизации, включая:

  • BGP [RFC4271];

  • OSPF [RFC4577] [RFC6565];

  • IS-IS [ISO10589];

  • RIP [RFC2080] [RFC2453];

  • двухстороннее обнаружение пересылки (Bidirectional Forwarding Detection или BFD) [RFC5880] [RFC7880];

  • протокол резервирования виртуального маршрутизатора (Virtual Router Redundancy Protocol или VRRP) [RFC5798].

Модуль также определяет набор отождествлений, включая указанные ниже.

service-type

Служит для идентификации типа сервиса VPN. Примеры поддерживаемых услуг включают:
  • L3VPN;
  • виртуальные частные ЛВС (Virtual Private LAN Service или VPLS) с использованием BGP [RFC4761];
  • VPLS с использованием протокола распространения меток (Label Distribution Protocol или LDP) [RFC4762];
  • виртуальные частные провода (Virtual Private Wire Service или VPWS) [RFC8214];
  • Ethernet BGP VPN на основе MPLS [RFC7432];
  • Ethernet VPN (EVPN) [RFC8365];
  • Провайдерские магистрали на основе мостов в комбинации с Ethernet VPN (Provider Backbone Bridging Combined with Ethernet VPN или PBB-EVPN) [RFC7623].

vpn-signaling-type

Служит для указания режима сигнализации данного типа сервиса. Примерами поддерживаемых типов сигнализации VPN являются:
  • L2VPN с использованием BGP [RFC6624];
  • LDP [RFC5036];
  • протокол туннелирования канального уровня (Layer Two Tunneling Protocol или L2TP) [RFC3931].

Модуль охватывает IPv4 [RFC0791] и IPv6 [RFC8200], а также включает связанные с групповой адресацией отождествления, такие как протоколы управления группами IGMPv1 (Internet Group Management Protocol version 1) [RFC1112], IGMPv2 [RFC2236], IGMPv3 [RFC3376], протоколы обнаружения групповых получателей (Multicast Listener Discovery version 1 или MLDv1) [RFC2710], MLDv2 [RFC3810], независимая от протокола групповая передача (Protocol Independent Multicast или PIM) [RFC7761].

Читателям следует обратиться к разделу 4, где приведён полный список поддерживаемых отождествлений (отождествления, связанные с семействами адресов, топологии VPN, типы доступа в сеть, операционный и административный статус, роль сайта или узла, ограничения сервиса VPN, протоколы маршрутизации, правила импорта и экспорта маршрутов, пропускная способность, качество обслуживания – QoS и т. п.).

Модуль ietf-vpn-common содержит также набор связанных с VPN группировок. На рисунке 1 представлено дерево, указывающее группировки общего назначения для модуля ietf-vpn-common.

   module: ietf-vpn-common
     grouping vpn-description:
       +-- vpn-id?            vpn-id
       +-- vpn-name?          string
       +-- vpn-description?   string
       +-- customer-name?     string
     grouping vpn-profile-cfg:
       +-- valid-provider-identifiers
          +-- external-connectivity-identifier* [id]
          |       {external-connectivity}?
          |  +-- id   string
          +-- encryption-profile-identifier* [id]
          |  +-- id   string
          +-- qos-profile-identifier* [id]
          |  +-- id   string
          +-- bfd-profile-identifier* [id]
          |  +-- id   string
          +-- forwarding-profile-identifier* [id]
          |  +-- id   string
          +-- routing-profile-identifier* [id]
             +-- id   string
     grouping oper-status-timestamp:
       +--ro status?         identityref
       +--ro last-change?   yang:date-and-time
     grouping service-status:
       +-- status
          +-- admin-status
          |  +-- status?         identityref
          |  +-- last-change?    yang:date-and-time
          +--ro oper-status
             +--ro status?         identityref
             +--ro last-change?    yang:date-and-time
     grouping underlay-transport:
       +-- (type)?
          +--:(abstract)
          |  +-- transport-instance-id?   string
          |  +-- instance-type?           identityref
          +--:(protocol)
             +-- protocol*                identityref
     grouping vpn-route-targets:
       +-- vpn-target* [id]
       |  +-- id                  uint8
       |  +-- route-targets* [route-target]
       |  |  +-- route-target      rt-types:route-target
       |  +-- route-target-type    rt-types:route-target-type
       +-- vpn-policies
          +-- import-policy?   string
          +-- export-policy?   string
     grouping route-distinguisher:
       ...
     grouping vpn-components-group:
       +-- groups
          +-- group* [group-id]
             +-- group-id    string
     grouping placement-constraints:
       +-- constraint* [constraint-type]
          +-- constraint-type?   identityref
          +-- target
             +-- (target-flavor)?
                +--:(id)
                |  +-- group* [group-id]
                |     +-- group-id    string
                +--:(all-accesses)
                |  +-- all-other-accesses?   empty
                +--:(all-groups)
                   +-- all-other-groups?     empty
     grouping ports:
       ...
     grouping qos-classification-policy:
       ...

Рисунок 1. Базовое дерево VPN.

Описания группировок общего назначения приведены ниже.

vpn-description

Группировка YANG, предоставляющая административные сведения общего назначения о VPN, такие как идентификатор, имя, текстовое описание, имя клиента.

vpn-profile-cfg

Группировка YANG, определяющая набор действительных профилей (шифрование, маршрутизация, пересылка и пр.), которые могут быть связаны с L2/3 VPN. Этот документ не включает предположений о структуре таких профилей, но позволяет «склеивать» услугу VPN с другими параметрами, которые могут потребоваться локально для обеспечения дополнительных функций запрашивающим клиентам.
Например, сервис-провайдер может предоставлять клиенту VPN внешнюю связность (например, с частным или общественным облаком, Internet). Такая услуга может включать настройку правил фильтрации и NAT (например, связывая интерфейс виртуальной маршрутизации и пересылки VRF с экземпляром NAT, как описано в параграфе 2.10 [RFC8512]). Эти добавленные функции могут быть привязаны ко всему доступу в сети или его части. Некоторые из таких функций могут быть реализованы на границах провайдера (Provider Edge или PE), например, узел P или даже выделенный узел, на котором размещаются функции NAT.
Детализация структуры таких профилей выходит за рамки этого документа.

oper-status-timestamp

Группировка YANG, определяющая обновления рабочего состояния службы или компонент VPN.

service-status

Группировка YANG, определяющая административное или рабочее состояние компонента. Группировка может применяться к службе в целом или конечной точке.

underlay-transport

Группировка YANG, определяющая тип базового транспорта для услуги VPN и его установки (организации).
Базовый транспорт может указываться как экземпляр абстрактного транспорта (например, идентификатором экземпляра VPN+ [Enhanced-VPN-Framework] или виртуальной сети [ACTN-VN-YANG] [RFC8453], именем сетевого слоя [Network-Slices-Framework]) или упорядоченный список протоколов, которые будут разрешены в сети.
Модуль поддерживает большой набор идентификаторов протоколов, который может служить, например, для указания базового транспорта. Примеры поддерживаемых протоколов включают:
  • IP в IP [RFC2003] [RFC2473];
  • базовая инкапсуляция маршрутизации (Generic Routing Encapsulation или GRE) [RFC1701] [RFC1702] [RFC7676];
  • MPLS по протоколу UDP [RFC7510];
  • инкапсуляция базовой виртуализации сети (Generic Network Virtualization Encapsulation или Geneve) [RFC8926];
  • маршрутизация по сегментам (Segment Routing или SR) [RFC8660] [RFC8663] [RFC8754];
  • протокол резервирования ресурсов (Resource ReSerVation Protocol или RSVP) с расширениями организации трафика [RFC3209];
  • BGP с помеченными префиксами [RFC8277].

vpn-route-targets

Группировка YANG, определяющая правила импорта-экспорта цели маршрута (Route Target или RT), используемые VPN с включённым BGP. Группировка может применяться в L3VPN [RFC4364] и L2VPN [RFC4664]. Отметим, что группировка моделируется списком для упрощения её применения в модулях, где требуется идентификатор RT (например, связывание оператора с RT).

route-distinguisher

Группировка YANG, определяющая различители маршрутов (Route Distinguisher или RD).
Как показано на рисунке 2, модуль поддерживает режимы назначения RD – прямое и полностью автоматическое назначение, автоматическое назначение из заданного пула и отсутствие назначения.
Модуль также поддерживает развёртывание, где назначается лишь субполе Assigned Number в RD (параграф 4.2 в [RFC4364]) из пула, где указано субполе Administrator, например, Router ID для узла VPN. Модуль поддерживает три режима управления субполем Assigned Number: явное назначение, автоматическое назначение из данного пула, полностью автоматическое назначение.
        grouping route-distinguisher:
          +-- (rd-choice)?
             +--:(directly-assigned)
             |  +-- rd?               rt-types:route-distinguisher
             +--:(directly-assigned-suffix)
             |  +-- rd-suffix?        uint16
             +--:(auto-assigned)
             |  +-- rd-auto
             |     +-- (auto-mode)?
             |     |  +--:(from-pool)
             |     |  |  +-- rd-pool-name?   string
             |     |  +--:(full-auto)
             |     |     +-- auto?           empty
             |     +--ro auto-assigned-rd?
             |     |       rt-types:route-distinguisher
             +--:(auto-assigned-suffix)
             |  +-- rd-auto-suffix
             |     +-- (auto-mode)?
             |     |  +--:(from-pool)
             |     |  |  +-- rd-pool-name?        string
             |     |  +--:(full-auto)
             |     |     +-- auto?                empty
             |     +--ro auto-assigned-rd-suffix?   uint16
             +--:(no-rd)
                +-- no-rd?            empty

Рисунок 2. Субдерево группировки отличителя маршрута.

vpn-components-group

Группа YANG, служащая для группировки узлов VPN, доступа в сеть VPN, сайтов. Например, ограничения разнообразия или избыточности могут применяться на уровне группы.

placement-constraints

Группа YANG, служащая для для задания ограничений по размещению узлов VPN, доступа в сеть VPN, сайтов.

ports

Группировка YANG, определяющая диапазоны портов отправителя и получателя, а также операторы. Субдерево группы приведено на рисунке 3.
        grouping ports:
          +-- (source-port)?
          |  +--:(source-port-range-or-operator)
          |     +-- source-port-range-or-operator
          |        +-- (port-range-or-operator)?
          |           +--:(range)
          |           |  +-- lower-port    inet:port-number
          |           |  +-- upper-port    inet:port-number
          |           +--:(operator)
          |              +-- operator?     operator
          |              +-- port          inet:port-number
          +-- (destination-port)?
             +--:(destination-port-range-or-operator)
                +-- destination-port-range-or-operator
                   +-- (port-range-or-operator)?
                      +--:(range)
                      |  +-- lower-port    inet:port-number
                      |  +-- upper-port    inet:port-number
                      +--:(operator)
                         +-- operator?     operator
                         +-- port          inet:port-number

Рисунок 3. Субдерево группировки номеров портов.

qos-classification-policy

Группировка YANG, определяющая набор правил классификации QoS по различным критериям сопоставления L3/4 и приложений. Дерево группы показано на рисунке 4.
Критерии сопоставления QoS используют группировки, которые определены в модулей полей пакета ietf-packet-fields (параграф 4.2 в [RFC8519]).
Любой протокол L4 может быть указан в узле данных protocol под l3, но в этой версии рассматриваются лишь критерии сопоставления, связанные с TCP и UDP, поскольку эти протоколы широко применяются в контексте услуг VPN. В будущих версиях могут добавиться параметры L4 (например, Stream Control Transmission Protocol [RFC4960]), если это потребуется.
Некоторые транспортные протоколы используют имеющиеся протоколы (например, TCP или UDP) в качестве основы. Критерии сопоставления для таких протоколов могут основываться на узле protocol под l3 критерия сопоставления TCP/UDP, как показано на рисунке 4, части данных TCP/UDP или их комбинации. Эта версия модуля не поддерживает такие расширенные критерии. В будущих версиях модуля могут быть добавлены критерии сопоставления на основе полей данных транспортного протокола (например, по битовой маске).
        grouping qos-classification-policy:
          +-- rule* [id]
             +-- id                         string
             +-- (match-type)?
             |  +--:(match-flow)
             |  |  +-- (l3)?
             |  |  |  +--:(ipv4)
             |  |  |  |  +-- ipv4
             |  |  |  |     +-- dscp?                          inet:dscp
             |  |  |  |     +-- ecn?                           uint8
             |  |  |  |     +-- length?                        uint16
             |  |  |  |     +-- ttl?                           uint8
             |  |  |  |     +-- protocol?                      uint8
             |  |  |  |     +-- ihl?                           uint8
             |  |  |  |     +-- flags?                         bits
             |  |  |  |     +-- offset?                        uint16
             |  |  |  |     +-- identification?                uint16
             |  |  |  |     +-- (destination-network)?
             |  |  |  |     |  +--:(destination-ipv4-network)
             |  |  |  |     |     +-- destination-ipv4-network?
             |  |  |  |     |             inet:ipv4-prefix
             |  |  |  |     +-- (source-network)?
             |  |  |  |        +--:(source-ipv4-network)
             |  |  |  |           +-- source-ipv4-network?
             |  |  |  |                   inet:ipv4-prefix
             |  |  |  +--:(ipv6)
             |  |  |     +-- ipv6
             |  |  |        +-- dscp?                          inet:dscp
             |  |  |        +-- ecn?                           uint8
             |  |  |        +-- length?                        uint16
             |  |  |        +-- ttl?                           uint8
             |  |  |        +-- protocol?                      uint8
             |  |  |        +-- (destination-network)?
             |  |  |        |  +--:(destination-ipv6-network)
             |  |  |        |     +-- destination-ipv6-network?
             |  |  |        |             inet:ipv6-prefix
             |  |  |        +-- (source-network)?
             |  |  |        |  +--:(source-ipv6-network)
             |  |  |        |     +-- source-ipv6-network?
             |  |  |        |             inet:ipv6-prefix
             |  |  |        +-- flow-label?
             |  |  |                inet:ipv6-flow-label
             |  |  +-- (l4)?
             |  |     +--:(tcp)
             |  |     |  +-- tcp
             |  |     |     +-- sequence-number?               uint32
             |  |     |     +-- acknowledgement-number?        uint32
             |  |     |     +-- data-offset?                   uint8
             |  |     |     +-- reserved?                      uint8
             |  |     |     +-- flags?                         bits
             |  |     |     +-- window-size?                   uint16
             |  |     |     +-- urgent-pointer?                uint16
             |  |     |     +-- options?                       binary
             |  |     |     +-- (source-port)?
             |  |     |     |  +--:(source-port-range-or-operator)
             |  |     |     |     +-- source-port-range-or-operator
             |  |     |     |        +-- (port-range-or-operator)?
             |  |     |     |           +--:(range)
             |  |     |     |           |  +-- lower-port
             |  |     |     |           |  |       inet:port-number
             |  |     |     |           |  +-- upper-port
             |  |     |     |           |          inet:port-number
             |  |     |     |           +--:(operator)
             |  |     |     |              +-- operator?     operator
             |  |     |     |              +-- port
             |  |     |     |                      inet:port-number
             |  |     |     +-- (destination-port)?
             |  |     |        +--:(destination-port-range-or-operator)
             |  |     |           +-- destination-port-range-or-operator
             |  |     |              +-- (port-range-or-operator)?
             |  |     |                 +--:(range)
             |  |     |                 |  +-- lower-port
             |  |     |                 |  |       inet:port-number
             |  |     |                 |  +-- upper-port
             |  |     |                 |          inet:port-number
             |  |     |                 +--:(operator)
             |  |     |                    +-- operator?     operator
             |  |     |                    +-- port
             |  |     |                            inet:port-number
             |  |     +--:(udp)
             |  |        +-- udp
             |  |           +-- length?                        uint16
             |  |           +-- (source-port)?
             |  |           |  +--:(source-port-range-or-operator)
             |  |           |     +-- source-port-range-or-operator
             |  |           |        +-- (port-range-or-operator)?
             |  |           |           +--:(range)
             |  |           |           |  +-- lower-port
             |  |           |           |  |       inet:port-number
             |  |           |           |  +-- upper-port
             |  |           |           |          inet:port-number
             |  |           |           +--:(operator)
             |  |           |              +-- operator?     operator
             |  |           |              +-- port
             |  |           |                      inet:port-number
             |  |           +-- (destination-port)?
             |  |              +--:(destination-port-range-or-operator)
             |  |                 +-- destination-port-range-or-operator
             |  |                    +-- (port-range-or-operator)?
             |  |                       +--:(range)
             |  |                       |  +-- lower-port
             |  |                       |  |       inet:port-number
             |  |                       |  +-- upper-port
             |  |                       |          inet:port-number
             |  |                       +--:(operator)
             |  |                          +-- operator?     operator
             |  |                          +-- port
             |  |                                  inet:port-number
             |  +--:(match-application)
             |     +-- match-application?   identityref
             +-- target-class-id?           string

Рисунок 4. Субдерево классификации QoS.

4. Модуль общего назначения VPN L2/3

Этот модуль использует типы, определённые в [RFC6991], [RFC8294], [RFC8519] и расширения из [RFC8341].

   <CODE BEGINS> file "ietf-vpn-common@2022-02-11.yang"
   module ietf-vpn-common {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-vpn-common";
     prefix vpn-common;

     import ietf-netconf-acm {
       prefix nacm;
       reference
         "RFC 8341: Network Configuration Access Control Model";
     }
     import ietf-routing-types {
       prefix rt-types;
       reference
         "RFC 8294: Common YANG Data Types for the Routing Area";
     }
     import ietf-yang-types {
       prefix yang;
       reference
         "RFC 6991: Common YANG Data Types, Section 3";
     }
     import ietf-packet-fields {
       prefix packet-fields;
       reference
         "RFC 8519: YANG Data Model for Network Access
                    Control Lists (ACLs)";
     }

     organization
       "IETF OPSAWG (Operations and Management Area Working Group)";
     contact
       "WG Web:   <https://datatracker.ietf.org/wg/opsawg/> 
        WG List:  <mailto:opsawg@ietf.org> 

        Editor:   Mohamed Boucadair
                  <mailto:mohamed.boucadair@orange.com> 
        Author:   Samier Barguil
                  <mailto:samier.barguilgiraldo.ext@telefonica.com> 
        Editor:   Oscar Gonzalez de Dios
                  <mailto:oscar.gonzalezdedios@telefonica.com> 
        Author:   Qin Wu
                  <mailto:bill.wu@huawei.com>"; 
     description
       "Этот модуль YANG определяет базу, предназначенную для применения
        в различных модулях VPN (например, Layer 3 VPN Service Model 
        (L3SM), Layer 2 VPN Service Model (L2SM), Layer 3 VPN Network 
        Model (L3NM), Layer 2 VPN Network Model (L2NM)).

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

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

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

     revision 2022-02-11 {
       description
         "Исходная версия.";
       reference
         "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3
                    VPNs";
     }

     /******** Набор связанных с VPN свойств ********/
     /*
      * Свойства, относящиеся к схемам инкапсуляции
      */

     feature dot1q {
       description
         "Указывает поддержку инкапсуляции dot1Q.";
       reference
         "IEEE Std 802.1Q: IEEE Standard for Local and Metropolitan
                           Area Networks--Bridges and Bridged
                           Networks";
     }

     feature qinq {
       description
         "Указывает поддержку инкапсуляции QinQ.";
       reference
         "IEEE Std 802.1ad: IEEE Standard for Local and Metropolitan
                            Area Networks---Virtual Bridged Local
                            Area Networks---Amendment 4: Provider
                            Bridges";
     }

     feature vxlan {
       description
         "Указывает поддержку инкапсуляции VXLAN.";
       reference
         "RFC 7348: Virtual eXtensible Local Area Network (VXLAN):
                    A Framework for Overlaying Virtualized Layer 2
                    Networks over Layer 3 Networks";
     }

     feature qinany {
       description
         "Указывает поддержку инкапсуляции QinAny.
          Во внешнем теге VLAN указывается конкретное значение, а
          внутренний тег VLAN может быть любым.";
     }

     feature lag-interface {
       description
         "Указывает поддержку групп агрегирования каналов (LAG)
          между системами доступа VPN.";
       reference
         "IEEE Std 802.1AX: IEEE Standard for Local and Metropolitan
                            Area Networks--Link Aggregation";
     }

     /*
      * Свойства, относящиеся к групповой передаче
      */

     feature multicast {
       description
         "Указывает поддержку групповой передачи в VPN.";
       reference
         "RFC 6513: Multicast in MPLS/BGP IP VPNs";
     }

     feature igmp {
       description
         "Указывает поддержку протокола управления группами IGMP.";
       reference
         "RFC 1112: Host Extensions for IP Multicasting
          RFC 2236: Internet Group Management Protocol, Version 2
          RFC 3376: Internet Group Management Protocol, Version 3";
     }

     feature mld {
       description
         "Указывает поддержку обнаружения групповых получателей MLD).";
       reference
         "RFC 2710: Multicast Listener Discovery (MLD) for IPv6
          RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
                    for IPv6";
     }

     feature pim {
       description
         "Указывает поддержку независимой от протокола групповой передачи
          (PIM).";
       reference
         "RFC 7761: Protocol Independent Multicast - Sparse Mode
                    (PIM-SM): Protocol Specification (Revised)";
     }

     /*
      * Свойства, относящиеся к семействам адресов
      */

     feature ipv4 {
       description
         "Указывает поддержку IPv4 для VPN. Трафик IPv4 может передаваться
          в VPN, адреса/префиксы IPv4 могут назначаться для доступа в сеть
          VPN, маршруты IPv4 могут устанавливаться на каналах между 
          клиентом и провайдером (CE-PE) и т. п.";
       reference
         "RFC 791: Internet Protocol";
     }

     feature ipv6 {
       description
         "Указывает поддержку IPv6 для VPN. Трафик IPv6 может передаваться
          в VPN, адреса/префиксы IPv6 могут назначаться для доступа в сеть
          VPN, маршруты IPv6 могут устанавливаться на каналах между 
          клиентом и провайдером (CE-PE) и т. п.";
       reference
         "RFC 8200: Internet Protocol, Version 6 (IPv6)
                    Specification";
     }

     /*
      * Свойства, относящиеся к протоколам маршрутизации
      */
     feature rtg-ospf {
       description
         "Указывает поддержку OSPF как протокола маршрутизации PE-CE.";
       reference
         "RFC 4577: OSPF as the Provider/Customer Edge Protocol
                    for BGP/MPLS IP Virtual Private Networks (VPNs)
          RFC 6565: OSPFv3 as a Provider Edge to Customer Edge
                    (PE-CE) Routing Protocol";
     }

     feature rtg-ospf-sham-link {
       description
         "Указывает поддержку фиктивных каналов OSPF.";
       reference
         "RFC 4577: OSPF as the Provider/Customer Edge Protocol
                    for BGP/MPLS IP Virtual Private Networks (VPNs),
                    Section 4.2.7
          RFC 6565: OSPFv3 as a Provider Edge to Customer Edge
                    (PE-CE) Routing Protocol, Section 5";
     }

     feature rtg-bgp {
       description
         "Указывает поддержку BGP как протокола маршрутизации PE-CE.";
       reference
         "RFC 4271: A Border Gateway Protocol 4 (BGP-4)";
     }
     feature rtg-rip {
       description
         "Указывает поддержку RIP как протокола маршрутизации PE-CE.";
       reference
         "RFC 2453: RIP Version 2
          RFC 2080: RIPng for IPv6";
     }

     feature rtg-isis {
       description
         "Указывает поддержку IS-IS как протокола маршрутизации PE-CE.";
       reference
         "ISO10589: Information technology - Telecommunications and
                    information exchange between systems -
                    Intermediate System to Intermediate System
                    intra-domain routeing information exchange
                    protocol for use in conjunction with the protocol
                    for providing the connectionless-mode network
                    service (ISO 8473)";
     }

     feature rtg-vrrp {
       description
         "Указывает поддержку VRRP как протокола маршрутизации PE-CE.";
       reference
         "RFC 5798: Virtual Router Redundancy Protocol (VRRP)
                    Version 3 for IPv4 and IPv6";
     }

     feature bfd {
       description
         "Указывает поддержку BFD между PE и CE.";
       reference
         "RFC 5880: Bidirectional Forwarding Detection (BFD)";
     }

     /*
      * Свойства, связанные с ограничениями сервиса VPN
      */

     feature bearer-reference {
       description
         "Указывает свойства присоединения CE-PE ниже уровня L3.
          Это свойство указывает поддержку задания ограничений доступа,
          т. е. повторное использование сетевого соединения, которое уже
          заказано у сервис-провайдера помимо сайта IP VPN.";
     }

     feature placement-diversity {
       description
         "Указывает поддержку ограничения разнообразия размещения на 
          площадках клиента. Примером таких ограничений служит 
          предотвращение подключения сайта к тому же элементу PE, что
          и целевой доступ к сайту.";
     }

     /*
      * Свойства, относящиеся к пропускной способности и QoS
      */

     feature qos {
       description
         "Указывает поддержку CoS в VPN.";
     }

     feature inbound-bw {
       description
         "Указывает поддержку пропускной способности на входе в VPN,
          т. е. поддержку полосы загрузки из сети сервис-провайдера
          на сайт VPN. Отметим, что L3SM использует input для указания
          того же свойства. От этой терминологии следует отказаться в
          пользу определённых здесь терминов.";
     }

     feature outbound-bw {
       description
         "Указывает поддержку пропускной способности на выходе из VPN,
          т. е. поддержку полосы выгрузки в сеть сервис-провайдера с
          сайта VPN. Отметим, что L3SM использует output для указания
          того же свойства. От этой терминологии следует отказаться в
          пользу определённых здесь терминов.";
  }

     /*
      * Свойства, связанные с безопасностью и отказоустойчивостью
      */
     feature encryption {
       description
         "Указывает поддержку шифрования в VPN.";
     }

     feature fast-reroute {
       description
         "Указывает поддержку FRR для сайта VPN.";
     }

     /*
      * Свойства, связанные с расширенными опциями VPN
      */
     feature external-connectivity {
       description
         "Указывает поддержку внешних соединений для VPN (например,
          Internet, частное или общественное облако).";
       reference
         "RFC 4364: BGP/MPLS IP Virtual Private Networks
                    (VPNs), Section 11";
     }

     feature extranet-vpn {
       description
         "Указывает поддержку extranet VPN, т. е. возможность VPN иметь 
          доступ к списку других VPN.";
       reference
         "RFC 4364: BGP/MPLS IP Virtual Private Networks
                    (VPNs), Section 1.1";
     }

     feature carriers-carrier {
       description
         "Указывает поддержку операторов в VPN.";
       reference
         "RFC 4364: BGP/MPLS IP Virtual Private Networks
                    (VPNs), Section 9";
     }

     /*
      * Отождествления, связанные с семействами адресов
      */
     identity address-family {
       description
         "Указывает семейство адресов.";
     }

     identity ipv4 {
       base address-family;
       description
         "Указывает семейство адресов IPv4.";
     }

     identity ipv6 {
       base address-family;
       description
         "Указывает семейство адресов IPv6.";
     }

     identity dual-stack {
       base address-family;
       description
         "Указывает семейства адресов IPv4 и IPv6.";
     }

     /*
      * Отождествления, связанные с топологией VPN
      */
     identity vpn-topology {
       description
         "Базовое отождествление топологии VPN.";
     }

     identity any-to-any {
       base vpn-topology;
       description
         "Указывает топологию VPN «каждый с каждым». Каждый сайт VPN может
          взаимодействовать с каждым другим сайтом без ограничений.";
     }

     identity hub-spoke {
       base vpn-topology;
       description
         "Топология «звезда» (Hub-and-Spoke). Лучи могут взаимодействовать
          лишь с хабами, которые могут взаимодействовать между собой.";
     }
     identity hub-spoke-disjoint {
       base vpn-topology;
       description
         "Топология Hub-and-Spoke, где хабы не могут взаимодействовать.";
     }

     identity custom {
       base vpn-topology;
       description
         "Клиентская топология VPN где роли узлов отличаются от «чистых»
          Hub и Spoke. Топология управляется правилами импорта-экспорта.
          Клиентская топология отражает более сложные узлы VPN, которые 
          играть роль Hub узлов и Spoke - для других.";
     }

     /*
      * Отождествления, связанные с типами доступа
      */

     identity site-network-access-type {
       description
         "Базовое отождествление типа доступа в сеть сайта.";
     }

     identity point-to-point {
       base site-network-access-type;
       description
         "Доступ «точка-точка».";
     }

     identity multipoint {
       base site-network-access-type;
       description
         "Многоточечный доступ.";
     }

     identity irb {
       base site-network-access-type;
       description
         "Отождествление IRB для псевдопроводов.";
     }

     identity loopback {
       base site-network-access-type;
       description
         "Loopback-доступ.";
     }

     /*
      * Отождествления, связанные с рабочим и административным статусом
      */

     identity operational-status {
       description
         "Базовое отождествление для рабочего состояния.";
     }

     identity op-up {
       base operational-status;
       description
         "Рабочее состояние Up/Enabled.";
     }

     identity op-down {
       base operational-status;
       description
         "Рабочее состояние Down/Disabled.";
     }

     identity op-unknown {
       base operational-status;
       description
         "Рабочее состояние неизвестно.";
     }

     identity administrative-status {
       description
         "Базовое отождествление для административного состояния.";
     }

     identity admin-up {
       base administrative-status;
       description
         "Административное состояние Up/Enabled.";
     }

     identity admin-down {
       base administrative-status;
       description
         "Административное состояние Down/Disabled.";
     }

     identity admin-testing {
       base administrative-status;
       description
         "Административное состояние Up для тестирования.";
     }

     identity admin-pre-deployment {
       base administrative-status;
       description
         "Административное состояние отражает фазу до фактического
          развёртывания сервиса.";
     }

     /*
      * Отождествления, связанные с ролями сайта и узлов
      */
     identity role {
       description
         "Базовое отождествление роли сайта или узла.";
     }

     identity any-to-any-role {
       base role;
       description
         "Каждый с каждым.";
     }

     identity spoke-role {
       base role;
       description
         "Узел или сайт в роли Spoke.";
     }

     identity hub-role {
       base role;
       description
         "Узел или сайт в роли Hub.";
     }

     identity custom-role {
       base role;
       description
         "Узел VPN с заказной или комплексной ролью в VPN. Для некоторых
          источников/получателей он может быть хабом, для других - лучом.";
     }

     /*
      * Отождествления, связанные с ограничениями службы VPN
      */
     identity placement-diversity {
       description
         "Базовое отождествление ограничений размещения доступа.";
     }

     identity bearer-diverse {
       base placement-diversity;
       description
         "Разнообразие носителей. Носителям не следует применять 
          базовые элементы.";
     }

     identity pe-diverse {
       base placement-diversity;
       description
         "Разнообразие PE.";
     }

     identity pop-diverse {
       base placement-diversity;
       description
         "Разнообразие точек присутствия (Point of Presence или POP).";
     }

     identity linecard-diverse {
       base placement-diversity;
       description
         "Разнообразие линейных плат.";
     }


     identity same-pe {
       base placement-diversity;
       description
         "Наличие сайтов, подключённых к тому же PE.";
     }

     identity same-bearer {
       base placement-diversity;
       description
         "Наличие сайтов, подключённых к тому же носителю.";
     }

     /*
      * Отождествления, связанные с типами сервиса
      */
     identity service-type {
       description
         "Базовое отождествление типа сервиса.";
     }

     identity l3vpn {
       base service-type;
       description
         "Служба L3VPN.";
       reference
         "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs)";
     }

     identity vpls {
       base service-type;
       description
         "Услуга виртуальной частной ЛВС (VPLS).";
       reference
         "RFC 4761: Virtual Private LAN Service (VPLS) Using BGP for
                    Auto-Discovery and Signaling
          RFC 4762: Virtual Private LAN Service (VPLS) Using Label
                    Distribution Protocol (LDP) Signaling";
     }

     identity vpws {
       base service-type;
       description
         "Услуга виртуального частного провода (VPWS).";
       reference
         "RFC 4664: Framework for Layer 2 Virtual Private Networks
                    (L2VPNs), Section 3.1.1";
     }

     identity vpws-evpn {
       base service-type;
       description
         "Ethernet VPN (EVPN) для поддержки VPWS.";
       reference
         "RFC 8214: Virtual Private Wire Service Support in
                    Ethernet VPN";
     }

     identity pbb-evpn {
       base service-type;
       description
         "Служба PBB EVPN.";
       reference
         "RFC 7623: Provider Backbone Bridging Combined with
                    Ethernet VPN (PBB-EVPN)";
     }

     identity mpls-evpn {
       base service-type;
       description
         "Служба EVPN на основе MPLS.";
       reference
         "RFC 7432: BGP MPLS-Based Ethernet VPN";
     }

     identity vxlan-evpn {
       base service-type;
       description
         "Служба EVPN на основе VXLAN.";
       reference
         "RFC 8365: A Network Virtualization Overlay Solution Using
                    Ethernet VPN (EVPN)";
     }

     /*
      * Отождествления для типов сигнализации VPN
      */
     identity vpn-signaling-type {
       description
         "Базовое отождествление для типов сигнализации VPN.";
     }

     identity bgp-signaling {
       base vpn-signaling-type;
       description
         "L2 VPN с сигнализацией BGP.";
       reference
         "RFC 6624: Layer 2 Virtual Private Networks Using BGP for
                    Auto-Discovery and Signaling
          RFC 7432: BGP MPLS-Based Ethernet VPN";
     }

     identity ldp-signaling {
       base vpn-signaling-type;
       description
         "Целевая сигнализация LDP.";
       reference
         "RFC 5036: LDP Specification";
     }

     identity l2tp-signaling {
       base vpn-signaling-type;
       description
         "Сигнализация L2TP.";
       reference
         "RFC 3931: Layer Two Tunneling Protocol - Version 3 (L2TPv3)";
     }

     /*
      * Отождествления, связанные с протоколами маршрутизации
      */

     identity routing-protocol-type {
       description
         "Базовое отождествление для типа протокола маршрутизации.";
     }

     identity static-routing {
       base routing-protocol-type;
       description
         "Статическая маршрутизация.";
     }

     identity bgp-routing {
       if-feature "rtg-bgp";
       base routing-protocol-type;
       description
         "Протокол BGP.";
       reference
         "RFC 4271: A Border Gateway Protocol 4 (BGP-4)";
     }

     identity ospf-routing {
       if-feature "rtg-ospf";
       base routing-protocol-type;
       description
         "Протокол OSPF.";
       reference
         "RFC 4577: OSPF as the Provider/Customer Edge Protocol
                    for BGP/MPLS IP Virtual Private Networks (VPNs)
          RFC 6565: OSPFv3 as a Provider Edge to Customer Edge
                    (PE-CE) Routing Protocol";
     }

     identity rip-routing {
       if-feature "rtg-rip";
       base routing-protocol-type;
       description
         "Протокол RIP.";
       reference
         "RFC 2453: RIP Version 2
          RFC 2080: RIPng for IPv6";
     }

     identity isis-routing {
       if-feature "rtg-isis";
       base routing-protocol-type;
       description
         "Протокол IS-IS.";
       reference
         "ISO10589: Information technology - Telecommunications and
                    information exchange between systems - Intermediate
                    System to Intermediate System intra-domain routeing
                    information exchange protocol for use in conjunction
                    with the protocol for providing the connectionless-mode
                    network service (ISO 8473)";
     }

     identity vrrp-routing {
       if-feature "rtg-vrrp";
       base routing-protocol-type;
       description
         "Протокол VRRP. Применяется при прямом соединении ЛВС с PEs";
       reference
         "RFC 5798: Virtual Router Redundancy Protocol (VRRP)
                    Version 3 for IPv4 and IPv6";
     }

     identity direct-routing {
       base routing-protocol-type;
       description
         "Непосредственная маршрутизация. Применяется при прямом
          соедиении ЛВС с PE и необходимости анонсирования в VPN.";
     }

     identity any-routing {
       base routing-protocol-type;
       description
         "Любой протокол маршрутизации. Может служить, например,
          для установки правил, применимых к любому протоколу.";
     }

     identity isis-level {
       if-feature "rtg-isis";
       description
         "Базовое отождествление для уровня IS-IS.";
       reference
         "ISO10589: Information technology - Telecommunications and
                    information exchange between systems - Intermediate
                    System to Intermediate System intra-domain routeing
                    information exchange protocol for use in conjunction
                    with the protocol for providing the connectionless-mode
                    network service (ISO 8473)";
     }

     identity level-1 {
       base isis-level;
       description
         "IS-IS Level 1.";
     }

     identity level-2 {
       base isis-level;
       description
         "IS-IS Level 2.";
     }

     identity level-1-2 {
       base isis-level;
       description
         "IS-IS Levels 1 and 2.";
     }

     identity bfd-session-type {
       if-feature "bfd";
       description
         "Базовое отождествление типа сессии BFD.";
     }

     identity classic-bfd {
       base bfd-session-type;
       description
         "Classic BFD.";
       reference
         "RFC 5880: Bidirectional Forwarding Detection (BFD)";
     }

     identity s-bfd {
       base bfd-session-type;
       description
         "Seamless BFD.";
       reference
         "RFC 7880: Seamless Bidirectional Forwarding Detection
                    (S-BFD)";
     }

     /*
      * Отождествления для правил импорта и экспорта маршрутов
      */
     identity ie-type {
       description
         "базовое отождествление профилей импорта-экспорта.
          Профиль может применять несколько узлов VPN.";
     }

     identity import {
       base ie-type;
       description
         "Профиль импорта маршрутизации.";
       reference
         "RFC 4364: BGP/MPLS IP Virtual Private Networks
                    (VPNs), Section 4.3.1";
     }

     identity export {
       base ie-type;
       description
         "Профиль экспорта маршрутизации.";
       reference
         "RFC 4364: BGP/MPLS IP Virtual Private Networks
                    (VPNs), Section 4.3.1";
     }

     identity import-export {
       base ie-type;
       description
         "Профиль импорта-экспорта маршрутизации.";
     }

     /*
      * Отождествления для пропускной способности и QoS
      */

     identity bw-direction {
       description
         "Базовое отождествление для полосы в одном направлении.";
     }

     identity inbound-bw {
       if-feature "inbound-bw";
       base bw-direction;
       description
         "Пропускная способность на входе.";
     }

     identity outbound-bw {
       if-feature "outbound-bw";
       base bw-direction;
       description
         "Пропускная способность на выходе.";
     }

     identity bw-type {
       description
         "Базовое отождествление для типа пропускной способности.";
     }

     identity bw-per-cos {
       if-feature "qos";
       base bw-type;
       description
         "Пропускная способность по CoS.";
     }

     identity bw-per-port {
       base bw-type;
       description
         "Пропускная способность по доступу в сеть для сайта.";
     }

     identity bw-per-site {
       base bw-type;
       description
         "Пропускная способность по сайтам. Применима ко всему доступу
          в рамках сайта.";
     }

     identity bw-per-service {
       base bw-type;
       description
         "Пропускная способность на услугу VPN.";
     }

     identity qos-profile-direction {
       if-feature "qos";
       description
         "Базовое отождествление профиля QoS в одном направлении.";
     }

     identity site-to-wan {
       base qos-profile-direction;
       description
         "От сайта клиента в сеть провайдера, обычно это от CE к PE.";
     }

     identity wan-to-site {
       base qos-profile-direction;
       description
         "Из сети провайдера к сайту клиента, обычно это от PE к CE.";
     }

     identity both {
       base qos-profile-direction;
       description
         "Оба направления между сайтом и WAN.";
     }

     /*
      * Отождествления, связанные с экземпляром базового транспорта
      */

     identity transport-instance-type {
       description
         "Базовое отождествление типа экземпляра базового транспорта.";
     }

     identity virtual-network {
       base transport-instance-type;
       description
         "Виртуальная сеть.";
       reference
         "RFC 8453: Framework for Abstraction and Control of TE
                    Networks (ACTN)";
     }

     identity enhanced-vpn {
       base transport-instance-type;
       description
         "Расширенная VPN (VPN+) - подход, основанный на имеющихся
          технологиях VPN и организации трафика (TE) с добавлением
          характеристик, нужных услугам на базе классических VPN.";
       reference
         "draft-ietf-teas-enhanced-vpn-09:
            A Framework for Enhanced Virtual Private Network
            (VPN+) Services";
     }

     identity ietf-network-slice {
       base transport-instance-type;
       description
         "Сетевой срез (slice) IETF - логическая топология сети,
          соединяющей множество конечных точек с применением набора
          общих или выделенных сетевых ресурсов для организации
          конкретных услуг.";
       reference
         "draft-ietf-teas-ietf-network-slices-05:
            Framework for IETF Network Slices";
     }

     /*
      * Отождествления для типа протоколов (обычно базового транспорта).
      */

     identity protocol-type {
       description
         "Базовое отождествление типов протоколов.";
     }

     identity ip-in-ip {
       base protocol-type;
       description
         "Транспорт на основе IP-in-IP.";
       reference
         "RFC 2003: IP Encapsulation within IP
          RFC 2473: Generic Packet Tunneling in IPv6 Specification";
     }

     identity ip-in-ipv4 {
       base ip-in-ip;
       description
         "Транспорт на основе IP по протоколу IPv4.";
       reference
         "RFC 2003: IP Encapsulation within IP";
     }

     identity ip-in-ipv6 {
       base ip-in-ip;
       description
         "Транспорт на основе IP по протоколу IPv6.";
       reference
         "RFC 2473: Generic Packet Tunneling in IPv6 Specification";
     }

     identity gre {
       base protocol-type;
       description
         "Транспорт на основе инкапсуляции (GRE).";
       reference
         "RFC 1701: Generic Routing Encapsulation (GRE)
          RFC 1702: Generic Routing Encapsulation over IPv4 networks
          RFC 7676: IPv6 Support for Generic Routing Encapsulation
                    (GRE)";
     }

     identity gre-v4 {
       base gre;
       description
         "Транспорт на основе GRE по протоколу IPv4.";
       reference
         "RFC 1702: Generic Routing Encapsulation over IPv4
                    networks";
     }

     identity gre-v6 {
       base gre;
       description
         "Транспорт на основе GRE по протоколу IPv6.";
       reference
         "RFC 7676: IPv6 Support for Generic Routing Encapsulation
                    (GRE)";
     }

     identity vxlan-trans {
       base protocol-type;
       description
         "Транспорт на основе VXLAN.";
       reference
         "RFC 7348: Virtual eXtensible Local Area Network (VXLAN):
                    A Framework for Overlaying Virtualized Layer 2
                    Networks over Layer 3 Networks";
     }

     identity geneve {
       base protocol-type;
       description
         "Транспорт на основе инкапсуляции Geneve.";
       reference
         "RFC 8926: Geneve: Generic Network Virtualization
                    Encapsulation";
     }

     identity ldp {
       base protocol-type;
       description
         "Транспорт на основе LDP.";
       reference
         "RFC 5036: LDP Specification";
     }

     identity mpls-in-udp {
       base protocol-type;
       description
         "Транспорт на основе MPLS по протоколу UDP.";
       reference
         "RFC 7510: Encapsulating MPLS in UDP";
     }

     identity sr {
       base protocol-type;
       description
         "Транспорт на основе маршрутизации по сегментам (SR).";
       reference
         "RFC 8660: Segment Routing with the MPLS Data Plane
          RFC 8663: MPLS Segment Routing over IP
          RFC 8754: IPv6 Segment Routing Header (SRH)";
     }

     identity sr-mpls {
       base sr;
       description
         "Транспорт на основе SR с плоскостью данных MPLS.";
       reference
         "RFC 8660: Segment Routing with the MPLS Data Plane";
     }

     identity srv6 {
       base sr;
       description
         "Транспорт на основе SR по протоколу IPv6.";
       reference
         "RFC 8754: IPv6 Segment Routing Header (SRH)";
     }

     identity sr-mpls-over-ip {
       base sr;
       description
         "Транспорт на основе SR через MPLS по протоколу IP.";
       reference
         "RFC 8663: MPLS Segment Routing over IP";
     }

     identity rsvp-te {
       base protocol-type;
       description
         "Транспорт на основе RSVP-TE.";
       reference
         "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
     }

     identity bgp-lu {
       base protocol-type;
       description
         "Транспорт на основе префиксов с метками BGP.";
       reference
         "RFC 8277: Using BGP to Bind MPLS Labels to Address Prefixes";
     }

     identity unknown {
       base protocol-type;
       description
         "Неизвестный тип протокола.";
     }

     /*
      * Отождествления для типов инкапсуляции
      */

     identity encapsulation-type {
       description
         "Базовое отождествление типов инкапсуляции.";
     }

     identity priority-tagged {
       base encapsulation-type;
       description
         "Интерфейс с тегами приоритета.";
     }

     identity dot1q {
       if-feature "dot1q";
       base encapsulation-type;
       description
         "Инкапсуляция dot1Q.";
     }

     identity qinq {
       if-feature "qinq";
       base encapsulation-type;
       description
         "Инкапсуляция QinQ.";
     }

     identity qinany {
       if-feature "qinany";
       base encapsulation-type;
       description
         "Инкапсуляция QinAny.";
     }

     identity vxlan {
       if-feature "vxlan";
       base encapsulation-type;
       description
         "Инкапсуляция VXLAN.";
     }

     identity ethernet-type {
       base encapsulation-type;
       description
         "Инкапсуляция Ethernet.";
     }

     identity vlan-type {
       base encapsulation-type;
       description
         "Инкапсуляция VLAN.";
     }

     identity untagged-int {
       base encapsulation-type;
       description
         "Инкапсуляция без тегов.";
     }

     identity tagged-int {
       base encapsulation-type;
       description
         "Инкапсуляция с тегами.";
     }

     identity lag-int {
       if-feature "lag-interface";
       base encapsulation-type;
       description
         "Интерфейс LAG.";
     }

     /*
      * Отождествления, связанные с тегами VLAN
      */

     identity tag-type {
       description
         "Базовое отождествление для типов тегов VLAN.";
     }

     identity c-vlan {
       base tag-type;
       description
         "Клиентская VLAN (C-VLAN), обычно с Ethertype 0x8100.";
     }

     identity s-vlan {
       base tag-type;
       description
         "Тег Service VLAN (S-VLAN).";
     }

     identity s-c-vlan {
       base tag-type;
       description
         "Применяется для тегов S-VLAN и C-VLAN.";
     }

     /*
      * Отождествления, связанные с VXLAN
      */

     identity vxlan-peer-mode {
       if-feature "vxlan";
       description
         "базовое отождествление для режимов партнёра VXLAN.";
     }

     identity static-mode {
       base vxlan-peer-mode;
       description
         "Доступ VXLAN в статическом режиме.";
     }

     identity bgp-mode {
       base vxlan-peer-mode;
       description
         "Доступ VXLAN с обучением BGP EVPN.";
     }

     /*
      * Отождествления для групповой передачи
      */
     identity multicast-gp-address-mapping {
       if-feature "multicast";
       description
         "Базовое отождествление типов сопоставления multicast-групп.";
     }

     identity static-mapping {
       base multicast-gp-address-mapping;
       description
         "Статическое сопоставление - интерфейс, подключенный к группе
          как ститический член.";
     }

     identity dynamic-mapping {
       base multicast-gp-address-mapping;
       description
         "Динамическое сопоставление - интерфейс, добавленный в 
          результате отслеживания.";
     }

     identity multicast-tree-type {
       if-feature "multicast";
       description
         "Базовое отождествление типов дерева группы.";
     }

     identity ssm-tree-type {
       base multicast-tree-type;
       description
         "Дерево с групповой передачей из заданного источника (SSM).";
     }

     identity asm-tree-type {
       base multicast-tree-type;
       description
         "Дерево с групповой передачей из любого источника (ASM).";
     }

     identity bidir-tree-type {
       base multicast-tree-type;
       description
         "Двунаправленное дерево.";
     }

     identity multicast-rp-discovery-type {
       if-feature "multicast";
       description
         "Базовое отождествление для обнаружения точки встречи (RP).";
     }

     identity auto-rp {
       base multicast-rp-discovery-type;
       description
         "Тип обнаружения Auto-RP.";
     }

     identity static-rp {
       base multicast-rp-discovery-type;
       description
         "Статический тип.";
     }

     identity bsr-rp {
       base multicast-rp-discovery-type;
       description
         "Тип обнаружения Bootstrap Router (BSR).";
     }

     identity group-management-protocol {
       if-feature "multicast";
       description
         "Базовое отождествление для протоколов управления группами.";
     }

     identity igmp-proto {
       base group-management-protocol;
       description
         "IGMP.";
       reference
         "RFC 1112: Host Extensions for IP Multicasting
          RFC 2236: Internet Group Management Protocol, Version 2
          RFC 3376: Internet Group Management Protocol, Version 3";
     }

     identity mld-proto {
       base group-management-protocol;
       description
         "MLD.";
       reference
         "RFC 2710: Multicast Listener Discovery (MLD) for IPv6
          RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
                    for IPv6";
     }

     identity pim-proto {
       if-feature "pim";
       base routing-protocol-type;
       description
         "PIM.";
       reference
         "RFC 7761: Protocol Independent Multicast - Sparse Mode
                    (PIM-SM): Protocol Specification (Revised)";
     }

     identity igmp-version {
       if-feature "igmp";
       description
         "Базовое отождествление для указания версии IGMP.";
     }

     identity igmpv1 {
       base igmp-version;
       description
         "IGMPv1.";
       reference
         "RFC 1112: Host Extensions for IP Multicasting";
     }

     identity igmpv2 {
       base igmp-version;
       description
         "IGMPv2.";
       reference
         "RFC 2236: Internet Group Management Protocol, Version 2";
     }

     identity igmpv3 {
       base igmp-version;
       description
         "IGMPv3.";
       reference
         "RFC 3376: Internet Group Management Protocol, Version 3";
     }

     identity mld-version {
       if-feature "mld";
       description
         "Базовое отождествление для указания версии MLD.";
     }

     identity mldv1 {
       base mld-version;
       description
         "MLDv1.";
       reference
         "RFC 2710: Multicast Listener Discovery (MLD) for IPv6";
     }

     identity mldv2 {
       base mld-version;
       description
         "MLDv2.";
       reference
         "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
                    for IPv6";
     }

     /*
      * Отождествления для типов трафика
      */

     identity tf-type {
       description
         "Базовое отождествление для типов трафика.";
     }

     identity multicast-traffic {
       base tf-type;
       description
         "Групповой трафик.";
     }

     identity broadcast-traffic {
       base tf-type;
       description
         "Широковещательный трафик.";
     }

     identity unknown-unicast-traffic {
       base tf-type;
       description
         "Неизвестный индивидуальный трафик.";
     }

     /*
      * Отождествления для пользовательских приложений
      */

     identity customer-application {
       description
         "Базовое отождествление для пользовательских приложений.";
     }

     identity web {
       base customer-application;
       description
         "Web-приложения (например, HTTP, HTTPS).";
     }

     identity mail {
       base customer-application;
       description
         "Почтовое приложение.";
     }

     identity file-transfer {
       base customer-application;
       description
         "Приложение для передачи файлов (например, FTP, Secure FTP (SFTP)).";
     }

     identity database {
       base customer-application;
       description
         "Приложение баз данных.";
     }

     identity social {
       base customer-application;
       description
         "Приложение социальной сети.";
     }

     identity games {
       base customer-application;
       description
         "Игровое приложение.";
     }

     identity p2p {
       base customer-application;
       description
         "Одноранговое приложение.";
     }

     identity network-management {
       base customer-application;
       description
         "Управляющее приложение (например, Telnet, syslog, SNMP).";
     }

     identity voice {
       base customer-application;
       description
         "Голосовое приложение.";
     }

     identity video {
       base customer-application;
       description
         "Приложение видеоконференций.";
     }

     identity embb {
       base customer-application;
       description
         "Расширенное широкополосное мобильное приложение (eMBB).
          Таким приложениям могут требоваться очень разные параметры
          производительности сети, такие как скорость передачи данных,
          задержка, частота потерь, надёжность и многие другие.";
     }

     identity urllc {
       base customer-application;
       description
         "Приложение URLLC (сверхнадежные коммуникации с малой задержкой).
          Приложениям URLLC могут требоваться очень разные параметры,
          такие как задержка, надёжность и многие другие.";
     }

     identity mmtc {
       base customer-application;
       description
         "Приложение mMTC (коммуникации больших машин). Таким приложениям
          могут требоваться очень разные параметры производительности, 
          такие как скорость передачи данных, задержка, частота потерь,
          надёжность и многие другие.";
     }

     /*
      * Отождествления, связанные с группировкой услуг
      */

     identity bundling-type {
       description
         "Базовое отождествление типа группировки. Поддерживаются все или
          часть CE-VLAN ID, связанных с услугой L2VPN.";
     }

     identity multi-svc-bundling {
       base bundling-type;
       description
         "Мультисервисная грруппировка, т. е. возможность связать 
          множество CE-VLAN ID со службой L2VPN на сайте.";
     }

     identity one2one-bundling {
       base bundling-type;
       description
         "Группировка служб «один к одному», т. е. каждая сеть L2VPN 
          может быть связана лишь с одним CE-VLAN ID на сайте.";
     }

     identity all2one-bundling {
       base bundling-type;
       description
         "Группировка служб «все с одним», т. е. все CE-VLAN ID
          сопоставляются с одной службой L2VPN.";
     }


     /*
      * Отождествления для служб Ethernet
      */

     identity control-mode {
       description
         "Базовое отождествление режима управления для L2CP.";
     }

     identity peer {
       base control-mode;
       description
         "Режим peer, т. е. участие в протоколе в направлении CE.
          Партнерство применяется для протокола управления агрегированием
          LACP и локального интерфейса управления Ethernet (E-LMI), а
          иногда - для протокола обнаружения канального уровня (LLDP).
          Для VPLS и VPWS абоненты могут запрашивать у провайдера
          партнерского сервиса включения связующего дерева.";
     }

     identity tunnel {
       base control-mode;
       description
         "Режим tunnel, т. е. передача выходному или целевому сайту.
          Для частных линий Ethernet (EPL) предполагается туннелирование
          кадров L2CP.";
     }

     identity discard {
       base control-mode;
       description
         "Режим Discard, т. е. отбрасывание кадра.";
     }
     identity neg-mode {
       description
         "Базовое отождествление типа согласования.";
     }

     identity full-duplex {
       base neg-mode;
       description
         "Полнодуплексный режим согласования.";
     }

     identity auto-neg {
       base neg-mode;
       description
         "Режим автосогласования.";
     }

     /******** Связанный с VPN тип ********/

     typedef vpn-id {
       type string;
       description
         "Идентификатор, применяемый с модулем VPN, например,
          идентификатор службы, узла и т. п.";
     }

     /******* Связанные с VPN группировки *******/

     grouping vpn-description {
       description
         "Общие сведения о VPN.";
       leaf vpn-id {
         type vpn-common:vpn-id;
         description
           "Идентификатор, однозначно указывающий VPN. Имеет локальную
            значимость, например, в сети сервис-провайдера.";
       }
       leaf vpn-name {
         type string;
         description
           "Служит для связывания имени с сервисом, для упрощения
            идентификации сервиса.";
       }
       leaf vpn-description {
         type string;
         description
           "Текстовое описание VPN.";
       }
       leaf customer-name {
         type string;
         description
           "Имя клиента, фактически использующего VPN.";
       }
     }

     grouping vpn-profile-cfg {
       description
         "Группировка для конфигурации профиля VPN.";
       container valid-provider-identifiers {
         description
           "Контейнер идентификаторов действительного профиля провайдера.";
         list external-connectivity-identifier {
           if-feature "external-connectivity";
           key "id";
           description
             "Список идентификаторов, однозначно указывающих профили, 
              управляющие предоставлением внешней связности для VPN. 
              Профиль указывает тип внешней связности (Internet, облако 
              и т. п.), связанные сайты и узлы и т. п. Профиль может
              также указывать правила фильтрации и/или трансляции
              адресов. Такие функции могут включать PE, P, выделенные
              узлы в зависимости от развёртывания.";
           leaf id {
             type string;
             description
               "Идентификация профиля внешней связности. Профиль имеет
                значимость лишь в административном домене провайдера.";
           }
         }
         list encryption-profile-identifier {
           key "id";
           description
             "Список идентификаторов профилей шифрования.";
           leaf id {
             type string;
             description
               "Идентификация применяемого профиля шифрования. Профиль имеет
                значимость лишь в административном домене провайдера.";
           }
         }
         list qos-profile-identifier {
           key "id";
           description
             "Список идентификаторов профилей QoS.";
           leaf id {
             type string;
             description
               "Идентификация применяемого профиля QoS. Профиль имеет
                значимость лишь в административном домене провайдера.";
           }
         }
         list bfd-profile-identifier {
           key "id";
           description
             "List of BFD profile identifiers.";
           leaf id {
             type string;
             description
               "Идентификация применяемого профиля BFD. Профиль имеет
                значимость лишь в административном домене провайдера.";
           }
         }
         list forwarding-profile-identifier {
           key "id";
           description
             "Список идентификаторов профилей пересылки.";
           leaf id {
             type string;
             description
               "Идентификация применяемого профиля пересылки. Профиль имеет
                значимость лишь в административном домене провайдера.";
           }
         }
         list routing-profile-identifier {
           key "id";
           description
             " Список идентификаторов профилей маршрутизации.";
           leaf id {
             type string;
             description
               "Идентификация профиля, используемого протоколами
                маршрутизации на сайтах, при доступе в сеть VPN или
                узлах VPN для указания правили импорта-экспорта VRF.

                Профиль имеет значимость лишь в административном 
                домене провайдера.";
           }
         }
         nacm:default-deny-write;
       }
     }

     grouping oper-status-timestamp {
       description
         "Определяет некоторые рабочие параметры для службы.";
       leaf status {
         type identityref {
           base operational-status;
         }
         config false;
         description
           "Рабочее состояние.";
       }
       leaf last-change {
         type yang:date-and-time;
         config false;
         description
           "Фактическая дата и время смены состояния сервиса.";
       }
     }

     grouping service-status {
       description
         "Группировка состояния сервиса.";
       container status {
         description
           "Состояние сервиса.";
         container admin-status {
           description
             "Административный статус сервиса.";
           leaf status {
             type identityref {
               base administrative-status;
             }
             description
               "Административный статус сервиса.";
           }
           leaf last-change {
             type yang:date-and-time;
             description
               "Фактическая дата и время смены состояния сервиса.";
           }
         }
         container oper-status {
           config false;
           description
             "Рабочее состояние сервиса.";
           uses oper-status-timestamp;
         }
       }
     }

     grouping underlay-transport {
       description
         "Тип базового транспорта для услуги VPN или способ организации
          этой базы. Может включать идентификатор экземпляра абстрактного
          транспорта, с которым связана VPN, или указывать техническую 
          реализацию упорядоченным списком протоколов.";
       choice type {
         description
           "Выбор на основе типа ограничений базового транспорта.";
         case abstract {
           description
             "Указывает, что ограничение транспорта является абстракцией.";
           leaf transport-instance-id {
             type string;
             description
               "Необязательный идентификатор экземпляра абстрактного 
                транспорта.";
           }
           leaf instance-type {
             type identityref {
               base transport-instance-type;
             }
             description
               "Тип экземпляра транспорта, например, VPN+, сетевой слой 
                IETF, виртуальная сеть и т. п.";
           }
         }
         case protocol {
           description
             "Указывает список протоколов.";
           leaf-list protocol {
             type identityref {
               base protocol-type;
             }
             ordered-by user;
             description
               "Упорядоченный клиентом список транспортных протоколов.";
           }
         }
       }
     }

     grouping vpn-route-targets {
       description
         "Группировка, задающая правила импорта-экспорта RT в VPN с
          поддержкой BGP.";
       reference
         "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs)
          RFC 4664: Framework for Layer 2 Virtual Private Networks
                    (L2VPNs)";
       list vpn-target {
         key "id";
         description
           "RT. Могут быть заданы операции AND/OR на основе заданных RT.";
         leaf id {
           type uint8;
           description
             "Указывает каждую цель VPN.";
         }
         list route-targets {
           key "route-target";
           description
             "Список RT.";
           leaf route-target {
             type rt-types:route-target;
             description
               "Значение RT.";
           }
         }
         leaf route-target-type {
           type rt-types:route-target-type;
           mandatory true;
           description
             "Тип импорта-экспорта RT.";
         }
       }
       container vpn-policies {
         description
           "Правила сервиса VPN - ссылки на на правила, которые будут
            связаны с услугой VPN.";
         leaf import-policy {
           type string;
           description
             "Указывает политику импорта.";
         }
         leaf export-policy {
           type string;
           description
             "Указывает политику экспорта.";
         }
       }
     }

     grouping route-distinguisher {
       description
         "Группировка для различителей маршрутов (RD).";
       choice rd-choice {
         description
           "Выбор RD из нескольких значений.";
         case directly-assigned {
           description
             "Явное задание значения RD.";
           leaf rd {
             type rt-types:route-distinguisher;
             description
               "Указывает явное задание значения RD.";
           }
         }
         case directly-assigned-suffix {
           description
             "Значение поля Assigned Number для RD. Субполе
              Administrator в RD будет основано на других данных
              конфигурации, таких как Router ID или ASN.";
           leaf rd-suffix {
             type uint16;
             description
               "Указывает явное задание значения поля Assigned Number.";
           }
         }
         case auto-assigned {
           description
             "RD назначается автоматически.";
           container rd-auto {
             description
               "RD назначается автоматически.";
             choice auto-mode {
               description
                 "Режим автоназначения. RD может задаваться автоматически
                  с указанием или без указания пула, из которого следует
                  брать RD. В обоих случаях сервер автоматически задаёт 
                  значение RD auto-assigned-rd и применяет его в работе.";
               case from-pool {
                 leaf rd-pool-name {
                   type string;
                   description
                     "Автоназначение из пула, указанного rd-pool-name.";
                 }
               }
               case full-auto {
                 leaf auto {
                   type empty;
                   description
                     "Полностью автоматическое назначение RD.";
                 }
               }
             }
             leaf auto-assigned-rd {
               type rt-types:route-distinguisher;
               config false;
               description
                 "Автоматически заданное значение RD.";
             }
           }
         }
         case auto-assigned-suffix {
           description
             "Значение поля Assigned Number будет задаваться 
              автоматически. Поле Administrator будет основано на
              других данных конфигурации, таких как Router ID или ASN.";
           container rd-auto-suffix {
             description
               "Поле Assigned Number назначено автоматически.";
             choice auto-mode {
               description
                 "Режим автоматического назначения для Assigned Number.
                  Это число задаётся автоматически с указанием или без
                  указания используемого для выбора пула. В обоих случаях
                  сервер автоматически задаёт auto-assigned-rd-suffix и
                  использует это значение при создании RD для работы.";
               case from-pool {
                 leaf rd-pool-name {
                   type string;
                   description
                     "Назначение из пула, указанного rd-pool-name.";
                 }
               }
               case full-auto {
                 leaf auto {
                   type empty;
                   description
                     "Полностью автоматическое задание Assigned Number.";
                 }
               }
             }
             leaf auto-assigned-rd-suffix {
               type uint16;
               config false;
               description
                 "Автоматически заданное значение Assigned Number.";
             }
           }
         }
         case no-rd {
           description
             "Использует тип empty для указания отсутствия значения RD
              и его автоматического задания.";
           leaf no-rd {
             type empty;
             description
               "Значение RD не задано.";
           }
         }
       }
     }

     grouping vpn-components-group {
       description
         "Группировка для назначение групповых идентификаторов,
          связывающих узлы VPN, сайты или доступ в сеть.";
       container groups {
         description
           "Список групп, к которым относится узел VPN, сайт или
            доступ в сеть.";
         list group {
           key "group-id";
           description
             "Список групповых идентификаторов.";
           leaf group-id {
             type string;
             description
               "Идентификатор группы, к которой относится узел VPN, 
                сайт или доступ в сеть.";
           }
         }
       }
     }

     grouping placement-constraints {
       description
         "Ограничения по размещению доступа в сеть.";
       list constraint {
         key "constraint-type";
         description
           "Список ограничений.";
         leaf constraint-type {
           type identityref {
             base placement-diversity;
           }
           description
             "Тип ограничения разнообразия.";
         }
         container target {
           description
             "Ограничения будут применяться к этому списку групп.";
           choice target-flavor {
             description
               "Выбор для определения группы.";
             case id {
               list group {
                 key "group-id";
                 description
                   "Список групп.";
                 leaf group-id {
                   type string;
                   description
                     "Ограничения будут применяться к этой группе.";
                 }
               }
             }
             case all-accesses {
               leaf all-other-accesses {
                 type empty;
                 description
                   "Ограничения будут применяться ко всем другим видам
                    сетевого доступа к сайту.";
               }
             }
             case all-groups {
               leaf all-other-groups {
                 type empty;
                 description
                   "Ограничения будут применяться ко всем другим
                    группам, поддерживаемым клиентом.";
               }
             }
           }
         }
       }
     }

     grouping ports {
       description
         "Выбор для задания портов отправителя и получателя.";
       choice source-port {
         description
           "Указание порта источника или ссылка на группу портов.";
         container source-port-range-or-operator {
           description
             "Определение порта источника.";
           uses packet-fields:port-range-or-operator;
         }
       }
       choice destination-port {
         description
           "Указание порта получателя или ссылка на группу портов.";
         container destination-port-range-or-operator {
           description
             "Определение порта получателя.";
           uses packet-fields:port-range-or-operator;
         }
       }
     }

     grouping qos-classification-policy {
       description
         "Конфигурация правила классификации трафика.";
       list rule {
         key "id";
         ordered-by user;
         description
           "Список правил маркировки.";
         leaf id {
           type string;
           description
             "Идентификатор правила классификации QoS.";
         }
         choice match-type {
           default "match-flow";
           description
             "Выбор для классификации.";
           case match-flow {
             choice l3 {
               description
                 "IPv4 или IPv6.";
               container ipv4 {
                 description
                   "Набор правил для заголовка IPv4.";
                 uses packet-fields:acl-ip-header-fields;
                 uses packet-fields:acl-ipv4-header-fields;
               }
               container ipv6 {
                 description
                   "Набор правил для заголовка IPv6.";
                 uses packet-fields:acl-ip-header-fields;
                 uses packet-fields:acl-ipv6-header-fields;
               }
             }
             choice l4 {
               description
                 "Включает сведения L4 (TCP и UDP).";
               container tcp {
                 description
                   "Набор правил для заголовка TCP.";
                 uses packet-fields:acl-tcp-header-fields;
                 uses ports;
               }
               container udp {
                 description
                   "Набор правил для заголовка UDP.";
                 uses packet-fields:acl-udp-header-fields;
                 uses ports;
               }
             }
           }
           case match-application {
             leaf match-application {
               type identityref {
                 base customer-application;
               }
               description
                 "Задаёт приложение для сопоставления.";
             }
           }
         }
         leaf target-class-id {
           type string;
           description
             "Идентификатор класса сервиса (внутренний для
              домена администрирования).";
         }
       }
     }
   }
   <CODE ENDS>

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

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

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

Модуль ietf-vpn-common определяет набор идентификаторов, типов и группировок, предназначенных для использования в других модулях YANG. Сам модуль не раскрывает каких-либо узлов данных, доступных для записи, узлов, доступных лишь для чтения, или RPC. Поэтому с модулем ietf-vpn-common не связаны какие-либо дополнительные проблемы безопасности.

Модулям, использующим определённые здесь группировки, следует указывать соответствующие соображения безопасности. Например, использование некоторых из описанных группировок может раскрывать связанные с приватностью сведения (скажем, customer-name). Раскрытие такой информации может считаться нарушением соглашений о доверии между клиентом и провайдером.

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

Агентство IANA зарегистрировало указанный ниже идентификатор URI в субреестре ns реестра IETF XML Registry [RFC3688].

   URI:  urn:ietf:params:xml:ns:yang:ietf-vpn-common
   Registrant Contact:  The IESG.
   XML:  N/A; the requested URI is an XML namespace.

Агентство IANA зарегистрировало указанный ниже модуль YANG в субреестре YANG Module Names [RFC6020] реестра YANG Parameters.

   Name:  ietf-vpn-common
   Namespace:  urn:ietf:params:xml:ns:yang:ietf-vpn-common
   Maintained by IANA?  N
   Prefix:  vpn-common
   Reference:  RFC 9181

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>.

[RFC4364] Rosen, E. and Y. Rekhter, “BGP/MPLS IP Virtual Private Networks (VPNs)”, RFC 4364, DOI 10.17487/RFC4364, February 2006, <https://www.rfc-editor.org/info/rfc4364>.

[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>.

[RFC6991] Schoenwaelder, J., Ed., “Common YANG Data Types”, RFC 6991, DOI 10.17487/RFC6991, July 2013, <https://www.rfc-editor.org/info/rfc6991>.

[RFC7950] Bjorklund, M., Ed., “The YANG 1.1 Data Modeling Language”, RFC 7950, DOI 10.17487/RFC7950, August 2016, <https://www.rfc-editor.org/info/rfc7950>.

[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>.

[RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, “Common YANG Data Types for the Routing Area”, RFC 8294, DOI 10.17487/RFC8294, December 2017, <https://www.rfc-editor.org/info/rfc8294>.

[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>.

[RFC8519] Jethanandani, M., Agarwal, S., Huang, L., and D. Blair, “YANG Data Model for Network Access Control Lists (ACLs)”, RFC 8519, DOI 10.17487/RFC8519, March 2019, <https://www.rfc-editor.org/info/rfc8519>.

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

[ACTN-VN-YANG] Lee, Y., Ed., Dhody, D., Ed., Ceccarelli, D., Bryskin, I., and B. Yoon, “A YANG Data Model for VN Operation”, Work in Progress, Internet-Draft, draft-ietf-teas-actn-vn-yang-13, 23 October 2021, <https://datatracker.ietf.org/doc/html/draft-ietf-teas-actn-vn-yang-13>.

[Enhanced-VPN-Framework] Dong, J., Bryant, S., Li, Z., Miyasaka, T., and Y. Lee, “A Framework for Enhanced Virtual Private Network (VPN+) Services”, Work in Progress, Internet-Draft, draft-ietf-teas-enhanced-vpn-09, 25 October 2021, <https://datatracker.ietf.org/doc/html/draft-ietf-teas-enhanced-vpn-09>.

[IEEE802.1ad] IEEE, “IEEE Standard for Local and Metropolitan Area Networks—Virtual Bridged Local Area Networks—Amendment 4: Provider Bridges”, <https://standards.ieee.org/standard/802_1ad-2005.html>.

[IEEE802.1AX] IEEE, “IEEE Standard for Local and Metropolitan Area Networks–Link Aggregation”, <https://standards.ieee.org/standard/802_1AX-2020.html>.

[IEEE802.1Q] IEEE, “IEEE Standard for Local and Metropolitan Area Networks–Bridges and Bridged Networks”, <https://standards.ieee.org/standard/802_1Q-2018.html>.

[ISO10589] ISO, “Information technology – Telecommunications and information exchange between systems – Intermediate System to Intermediate System intra-domain routeing information exchange protocol for use in conjunction with the protocol for providing the connectionless-mode network service (ISO 8473)”, International Standard 10589:2002, Second Edition, November 2002, <https://www.iso.org/standard/30932.html>.

[L2NM-YANG] Barguil, S., Gonzalez de Dios, O., Ed., Boucadair, M., Ed., and L. Munoz, “A Layer 2 VPN Network YANG Model”, Work in Progress, Internet-Draft, draft-ietf-opsawg-l2nm-12, 22 November 2021, <https://datatracker.ietf.org/doc/html/draft-ietf-opsawg-l2nm-12>.

[Network-Slices-Framework] Farrel, A., Ed., Gray, E., Drake, J., Rokui, R., Homma, S., Makhijani, K., Contreras, LM., and J. Tantsura, “Framework for IETF Network Slices”, Work in Progress, Internet-Draft, draft-ietf-teas-ietf-network-slices-05, 25 October 2021, <https://datatracker.ietf.org/doc/html/draft-ietf-teas-ietf-network-slices-05>.

[RFC0791] Postel, J., “Internet Protocol”, STD 5, RFC 791, DOI 10.17487/RFC0791, September 1981, <https://www.rfc-editor.org/info/rfc791>.

[RFC1112] Deering, S., “Host extensions for IP multicasting”, STD 5, RFC 1112, DOI 10.17487/RFC1112, August 1989, <https://www.rfc-editor.org/info/rfc1112>.

[RFC1701] Hanks, S., Li, T., Farinacci, D., and P. Traina, “Generic Routing Encapsulation (GRE)”, RFC 1701, DOI 10.17487/RFC1701, October 1994, <https://www.rfc-editor.org/info/rfc1701>.

[RFC1702] Hanks, S., Li, T., Farinacci, D., and P. Traina, “Generic Routing Encapsulation over IPv4 networks”, RFC 1702, DOI 10.17487/RFC1702, October 1994, <https://www.rfc-editor.org/info/rfc1702>.

[RFC2003] Perkins, C., “IP Encapsulation within IP”, RFC 2003, DOI 10.17487/RFC2003, October 1996, <https://www.rfc-editor.org/info/rfc2003>.

[RFC2080] Malkin, G. and R. Minnear, “RIPng for IPv6”, RFC 2080, DOI 10.17487/RFC2080, January 1997, <https://www.rfc-editor.org/info/rfc2080>.

[RFC2236] Fenner, W., “Internet Group Management Protocol, Version 2”, RFC 2236, DOI 10.17487/RFC2236, November 1997, <https://www.rfc-editor.org/info/rfc2236>.

[RFC2453] Malkin, G., “RIP Version 2”, STD 56, RFC 2453, DOI 10.17487/RFC2453, November 1998, <https://www.rfc-editor.org/info/rfc2453>.

[RFC2473] Conta, A. and S. Deering, “Generic Packet Tunneling in IPv6 Specification”, RFC 2473, DOI 10.17487/RFC2473, December 1998, <https://www.rfc-editor.org/info/rfc2473>.

[RFC2710] Deering, S., Fenner, W., and B. Haberman, “Multicast Listener Discovery (MLD) for IPv6”, RFC 2710, DOI 10.17487/RFC2710, October 1999, <https://www.rfc-editor.org/info/rfc2710>.

[RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., and G. Swallow, “RSVP-TE: Extensions to RSVP for LSP Tunnels”, RFC 3209, DOI 10.17487/RFC3209, December 2001, <https://www.rfc-editor.org/info/rfc3209>.

[RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. Thyagarajan, “Internet Group Management Protocol, Version 3”, RFC 3376, DOI 10.17487/RFC3376, October 2002, <https://www.rfc-editor.org/info/rfc3376>.

[RFC3810] Vida, R., Ed. and L. Costa, Ed., “Multicast Listener Discovery Version 2 (MLDv2) for IPv6”, RFC 3810, DOI 10.17487/RFC3810, June 2004, <https://www.rfc-editor.org/info/rfc3810>.

[RFC3931] Lau, J., Ed., Townsley, M., Ed., and I. Goyret, Ed., “Layer Two Tunneling Protocol – Version 3 (L2TPv3)”, RFC 3931, DOI 10.17487/RFC3931, March 2005, <https://www.rfc-editor.org/info/rfc3931>.

[RFC4026] Andersson, L. and T. Madsen, “Provider Provisioned Virtual Private Network (VPN) Terminology”, RFC 4026, DOI 10.17487/RFC4026, March 2005, <https://www.rfc-editor.org/info/rfc4026>.

[RFC4176] El Mghazli, Y., Ed., Nadeau, T., Boucadair, M., Chan, K., and A. Gonguet, “Framework for Layer 3 Virtual Private Networks (L3VPN) Operations and Management”, RFC 4176, DOI 10.17487/RFC4176, October 2005, <https://www.rfc-editor.org/info/rfc4176>.

[RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., “A Border Gateway Protocol 4 (BGP-4)”, RFC 4271, DOI 10.17487/RFC4271, January 2006, <https://www.rfc-editor.org/info/rfc4271>.

[RFC4577] Rosen, E., Psenak, P., and P. Pillay-Esnault, “OSPF as the Provider/Customer Edge Protocol for BGP/MPLS IP Virtual Private Networks (VPNs)”, RFC 4577, DOI 10.17487/RFC4577, June 2006, <https://www.rfc-editor.org/info/rfc4577>.

[RFC4664] Andersson, L., Ed. and E. Rosen, Ed., “Framework for Layer 2 Virtual Private Networks (L2VPNs)”, RFC 4664, DOI 10.17487/RFC4664, September 2006, <https://www.rfc-editor.org/info/rfc4664>.

[RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., “Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery and Signaling”, RFC 4761, DOI 10.17487/RFC4761, January 2007, <https://www.rfc-editor.org/info/rfc4761>.

[RFC4762] Lasserre, M., Ed. and V. Kompella, Ed., “Virtual Private LAN Service (VPLS) Using Label Distribution Protocol (LDP) Signaling”, RFC 4762, DOI 10.17487/RFC4762, January 2007, <https://www.rfc-editor.org/info/rfc4762>.

[RFC4960] Stewart, R., Ed., “Stream Control Transmission Protocol”, RFC 4960, DOI 10.17487/RFC4960, September 2007, <https://www.rfc-editor.org/info/rfc4960>.

[RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., “LDP Specification”, RFC 5036, DOI 10.17487/RFC5036, October 2007, <https://www.rfc-editor.org/info/rfc5036>.

[RFC5798] Nadas, S., Ed., “Virtual Router Redundancy Protocol (VRRP) Version 3 for IPv4 and IPv6”, RFC 5798, DOI 10.17487/RFC5798, March 2010, <https://www.rfc-editor.org/info/rfc5798>.

[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>.

[RFC6513] Rosen, E., Ed. and R. Aggarwal, Ed., “Multicast in MPLS/BGP IP VPNs”, RFC 6513, DOI 10.17487/RFC6513, February 2012, <https://www.rfc-editor.org/info/rfc6513>.

[RFC6565] Pillay-Esnault, P., Moyer, P., Doyle, J., Ertekin, E., and M. Lundberg, “OSPFv3 as a Provider Edge to Customer Edge (PE-CE) Routing Protocol”, RFC 6565, DOI 10.17487/RFC6565, June 2012, <https://www.rfc-editor.org/info/rfc6565>.

[RFC6624] Kompella, K., Kothari, B., and R. Cherukuri, “Layer 2 Virtual Private Networks Using BGP for Auto-Discovery and Signaling”, RFC 6624, DOI 10.17487/RFC6624, May 2012, <https://www.rfc-editor.org/info/rfc6624>.

[RFC7348] Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger, L., Sridhar, T., Bursell, M., and C. Wright, “Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks”, RFC 7348, DOI 10.17487/RFC7348, August 2014, <https://www.rfc-editor.org/info/rfc7348>.

[RFC7432] Sajassi, A., Ed., Aggarwal, R., Bitar, N., Isaac, A., Uttaro, J., Drake, J., and W. Henderickx, “BGP MPLS-Based Ethernet VPN”, RFC 7432, DOI 10.17487/RFC7432, February 2015, <https://www.rfc-editor.org/info/rfc7432>.

[RFC7510] Xu, X., Sheth, N., Yong, L., Callon, R., and D. Black, “Encapsulating MPLS in UDP”, RFC 7510, DOI 10.17487/RFC7510, April 2015, <https://www.rfc-editor.org/info/rfc7510>.

[RFC7623] Sajassi, A., Ed., Salam, S., Bitar, N., Isaac, A., and W. Henderickx, “Provider Backbone Bridging Combined with Ethernet VPN (PBB-EVPN)”, RFC 7623, DOI 10.17487/RFC7623, September 2015, <https://www.rfc-editor.org/info/rfc7623>.

[RFC7676] Pignataro, C., Bonica, R., and S. Krishnan, “IPv6 Support for Generic Routing Encapsulation (GRE)”, RFC 7676, DOI 10.17487/RFC7676, October 2015, <https://www.rfc-editor.org/info/rfc7676>.

[RFC7761] Fenner, B., Handley, M., Holbrook, H., Kouvelas, I., Parekh, R., Zhang, Z., and L. Zheng, “Protocol Independent Multicast – Sparse Mode (PIM-SM): Protocol Specification (Revised)”, STD 83, RFC 7761, DOI 10.17487/RFC7761, March 2016, <https://www.rfc-editor.org/info/rfc7761>.

[RFC7880] Pignataro, C., Ward, D., Akiya, N., Bhatia, M., and S. Pallagatti, “Seamless Bidirectional Forwarding Detection (S-BFD)”, RFC 7880, DOI 10.17487/RFC7880, July 2016, <https://www.rfc-editor.org/info/rfc7880>.

[RFC8200] Deering, S. and R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, STD 86, RFC 8200, DOI 10.17487/RFC8200, July 2017, <https://www.rfc-editor.org/info/rfc8200>.

[RFC8214] Boutros, S., Sajassi, A., Salam, S., Drake, J., and J. Rabadan, “Virtual Private Wire Service Support in Ethernet VPN”, RFC 8214, DOI 10.17487/RFC8214, August 2017, <https://www.rfc-editor.org/info/rfc8214>.

[RFC8277] Rosen, E., “Using BGP to Bind MPLS Labels to Address Prefixes”, RFC 8277, DOI 10.17487/RFC8277, October 2017, <https://www.rfc-editor.org/info/rfc8277>.

[RFC8299] Wu, Q., Ed., Litkowski, S., Tomotaki, L., and K. Ogaki, “YANG Data Model for L3VPN Service Delivery”, RFC 8299, DOI 10.17487/RFC8299, January 2018, <https://www.rfc-editor.org/info/rfc8299>.

[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>.

[RFC8365] Sajassi, A., Ed., Drake, J., Ed., Bitar, N., Shekhar, R., Uttaro, J., and W. Henderickx, “A Network Virtualization Overlay Solution Using Ethernet VPN (EVPN)”, RFC 8365, DOI 10.17487/RFC8365, March 2018, <https://www.rfc-editor.org/info/rfc8365>.

[RFC8453] Ceccarelli, D., Ed. and Y. Lee, Ed., “Framework for Abstraction and Control of TE Networks (ACTN)”, RFC 8453, DOI 10.17487/RFC8453, August 2018, <https://www.rfc-editor.org/info/rfc8453>.

[RFC8466] Wen, B., Fioccola, G., Ed., Xie, C., and L. Jalil, “A YANG Data Model for Layer 2 Virtual Private Network (L2VPN) Service Delivery”, RFC 8466, DOI 10.17487/RFC8466, October 2018, <https://www.rfc-editor.org/info/rfc8466>.

[RFC8512] Boucadair, M., Ed., Sivakumar, S., Jacquenet, C., Vinapamula, S., and Q. Wu, “A YANG Module for Network Address Translation (NAT) and Network Prefix Translation (NPT)”, RFC 8512, DOI 10.17487/RFC8512, January 2019, <https://www.rfc-editor.org/info/rfc8512>.

[RFC8660] Bashandy, A., Ed., Filsfils, C., Ed., Previdi, S., Decraene, B., Litkowski, S., and R. Shakir, “Segment Routing with the MPLS Data Plane”, RFC 8660, DOI 10.17487/RFC8660, December 2019, <https://www.rfc-editor.org/info/rfc8660>.

[RFC8663] Xu, X., Bryant, S., Farrel, A., Hassan, S., Henderickx, W., and Z. Li, “MPLS Segment Routing over IP”, RFC 8663, DOI 10.17487/RFC8663, December 2019, <https://www.rfc-editor.org/info/rfc8663>.

[RFC8754] Filsfils, C., Ed., Dukes, D., Ed., Previdi, S., Leddy, J., Matsushima, S., and D. Voyer, “IPv6 Segment Routing Header (SRH)”, RFC 8754, DOI 10.17487/RFC8754, March 2020, <https://www.rfc-editor.org/info/rfc8754>.

[RFC8926] Gross, J., Ed., Ganga, I., Ed., and T. Sridhar, Ed., “Geneve: Generic Network Virtualization Encapsulation”, RFC 8926, DOI 10.17487/RFC8926, November 2020, <https://www.rfc-editor.org/info/rfc8926>.

[RFC9182] Barguil, S., Gonzalez de Dios, O., Ed., Boucadair, M., Ed., Munoz, L., and A. Aguado, “A YANG Network Data Model for Layer 3 VPNs”, RFC 9182, DOI 10.17487/RFC9182, February 2022, <https://www.rfc-editor.org/info/rfc9182>.

Приложение A. Пример базовых узлов в ранних решениях L2NM/L3NM

Во избежание дублирования узлов данных и для упрощения обмена данными между уровнями (т. е. от сервисного уровня к сетевому и обратно) в ранних версиях L3NM применяется много узлов данных, определённых в L3SM. Тем не менее, от этого подхода отказались, поскольку он интерпретировался как зависимость развёртывания L3NM от L3SM, которая на деле не нужна. Например, сервис-провайдер может применять L3NM для организации услуг L3VPN без раскрытия клиентам L3SM.

Точно так же ранние версии L2NM использовали множество узлов данных, определённых в L2SM и L3NM. Пример группировки L3NM, применяемой в L2NM, показан на рисунке 5. Такое использование интерпретировалось как зависимость развёртывания L2NM от поддержки L3NM, которая на деле не требуется.

   module ietf-l2vpn-ntw {
    ...
     import ietf-l3vpn-ntw {
       prefix l3vpn-ntw;
       reference
         "RFC 9182: A YANG Network Data Model for Layer 3 VPNs";
     }
     ...
     container l2vpn-ntw {
       ...
       container vpn-services {
         list vpn-service {
           ...
           uses l3vpn-ntw:service-status;
           uses l3vpn-ntw:svc-transport-encapsulation;
           ...
         }
       }
       ...
     }
   }

Рисунок 5. Извлечение из модуля L2NM YANG.

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

В ходе обсуждения этой работы были получены полезные комментарии и обзоры от (в алфавитном порядке) Alejandro Aguado, Raul Arco, Miguel Cros Cecilia, Joe Clarke, Dhruv Dhody, Adrian Farrel, Roque Gagliano, Christian Jacquenet, Kireeti Kompella, Julian Lucek, Tom Petch, Erez Segev, Paul Sherratt. Большое им спасибо.

Работа частично поддерживалась европейской комиссией в рамках проекта Horizon 2020 Secured autonomic traffic management for a Tera of SDN flows (Teraflow), грант № 101015857.

Большое спасибо Radek Krejci за рецензию YANG Doctors, Wesley Eddy за рецензию tsvart, Ron Bonica и Victoria Pritchard за рецензию RtgDir, Joel Halpern за рецензию genart, Tim Wicinski за рецензию opsdir и Suresh Krishnan за рецензию intdir.

Отдельная благодарность Robert Wilton за рецензию AD.

Спасибо Roman Danyliw, Lars Eggert, Warren Kumari, Erik Kline, Zaheduzzaman Sarker, Benjamin Kaduk, Éric Vyncke за рецензию IESG.

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

Italo Busi
Huawei Technologies
Email: Italo.Busi@huawei.com
 
Luis Angel Munoz
Vodafone
Email: luis-angel.munoz@vodafone.com
 
Victor Lopez
Nokia
Madrid
Spain
Email: victor.lopez@nokia.com

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

Samier Barguil
Telefonica
Madrid
Spain
Email: samier.barguilgiraldo.ext@telefonica.com
 
Oscar Gonzalez de Dios (editor)
Telefonica
Madrid
Spain
Email: oscar.gonzalezdedios@telefonica.com
 
Mohamed Boucadair (editor)
Orange
France
Email: mohamed.boucadair@orange.com
 
Qin Wu
Huawei
101 Software Avenue
Yuhua District
Nanjing
Jiangsu, 210012
China
Email: bill.wu@huawei.com

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

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

nmalykh@protokols.ru

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

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

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

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