RFC 9291 A YANG Network Data Model for Layer 2 VPNs

Internet Engineering Task Force (IETF)                 M. Boucadair, Ed.
Request for Comments: 9291                                        Orange
Category: Standards Track                       O. Gonzalez de Dios, Ed.
ISSN: 2070-1721                                               S. Barguil
                                                              Telefonica
                                                                L. Munoz
                                                                Vodafone
                                                          September 2022

A YANG Network Data Model for Layer 2 VPNs

Модель данных YANG для L2 VPN

PDF

Аннотация

Этот документ определяет сетевую модель L2VPN (L2VPN Network Model или L2NM), которая может служить для предоставления услуг виртуальных частных сетей на канальном уровне (Layer 2 Virtual Private Network или L2VPN) внутри сети (например, сети сервис-провайдера). L2NM дополняет модель сервиса L2VPN (L2VPN Service Model или L2SM), обеспечивая сетецентричное представление сервиса, который является внутренним для сервис-провайдера. Модель L2NM предназначена, в частности, для использования сетевыми контроллерами с целью получения данных конфигурации, которые будут передаваться соответствующим сетевым устройствам.

Документ также определяет модуль YANG для управления сегментами Ethernet и исходные версии двух поддерживаемых IANA модулей, включающих набор идентификаторов типов инкапсуляции BGP L2 и типов псевдопроводов.

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

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

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

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

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

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

1. Введение

В [RFC8466] определена модель сервиса L2VPN (L2SM) – модель данных YANG, которую можно применять сервис-провайдерам и клиентам для заказа услуг L2VPN. Этот документ дополняет модель L2SM сетецентричным представлением сервиса – моделью L2NM.

Документ также определяет исходные версии двух поддерживаемых IANA модулей, задающих набор идентификаторов типов инкапсуляции BGP L2 (8.1. Модуль IANA для типов инкапсуляции BGP L2) и типов псевдопроводов (8.2. Модуль IANA для типов псевдопроводов). Эти типы применяются в L2NM для идентификации типов инкапсуляции L2 в зависимости от опции сигнализации, применяемой для предоставления услуг L2VPN. Это модули, поддерживаемые IANA, предназначены для повышения гибкости обработки новых типов вместо применения лишь ограниченного набора идентификаторов, определённого в самой модели L2NM. В параграфе 8.3 определён модуль YANG для управления сегментами Ethernet (Ethernet Segment или ES), которые требуются для создания виртуальных частных сетей Ethernet (Ethernet VPN или EVPN). Сссылки на сегменты Ethernet созданные с использованием этого модуля, могут включаться в модели L2NM для EVPN.

Модель L2NM (8.4. L2NM) может раскрываться, например, сетевым контроллером контроллеру службы в сети сервис-провайдера. В частности, модель может применяться в коммуникационном интерфейсе между элементом, непосредственно взаимодействующим с клиентом (т. е. организатором службы), и элементом, отвечающим за организация (orchestration) и управление сетью (сетевой контроллер или оркестратор), позволяя включить больше сетецентрической информации.

L2NM поддерживает такие возможности, как раскрытие рабочих параметров, выбор транспортного протокола и придпочтения. Она может также служит многодоменным интерфейсом оркестровки (организации).

Модель L2NM предназначена для различных виртуальных частных сетей канального уровня, таких как:

  • Virtual Private LAN Service (VPLS) [RFC4761] [RFC4762];

  • Virtual Private Wire Service (VPWS) (параграф 3.1.1 в [RFC4664]);

  • различные вариант EVPN:

    • VPWS EVPN [RFC8214];

    • PBB-EVPN (Provider Backbone Bridging Combined with Ethernet VPN) [RFC7623];

    • EVPN через MPLS [RFC7432];

    • EVPN через VXLAN [RFC8365].

Модель L2NM разработана для упрощения будущих вариантов и процедур L2 VPN (например, расширенная конфигурация, такая как отказоустойчивость псевдопровода или многосегментные псевдопровода [RFC7267]). Примеры, иллюстрирующие применение L2NM, представлены в Приложении A.

Этот документ использует модель YANG VPN, определённую в [RFC9181].

Модели YANG в документе соответствуют архитектуре хранилищ сетевого управления (Network Management Datastore Architecture или NMDA), определённой в [RFC8342].

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

Этот документ использует терминологию из [RFC6241], [RFC7950], [RFC8466], [RFC4026], [RFC8309] и предполагает знакомство читателя с указанными документами.

В документе применяется термин «модель сети» (network model) в соответствии с определением из параграфа 2.1 в [RFC8969].

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

Ниже приведены определения других терминов, используемых в этом документе.

Ethernet Segment (ES) – сегмент Ethernet

Множество каналов Ethernet, используемых на стороне клиента (устройство или сеть) для подключения к одной или нескольким краевым точка провайдера (Provider Edge или PE).

L2VPN Service Model (L2SM) – модель сервиса L2VPN

Описание характеристик сервиса L2VPN, соединяющего множество сайтов, с точки зрения клиента. Модель обслуживания клиентов не содержит деталей сети сервс-провайдера. Модель сервиса L2VPN определена в [RFC8466].

L2VPN Network Model (L2NM) – модель сети L2VPN

Модель данных YANG, описывающая сервис L2VPN с точки зрения сети (сетецентричная). Модель содержит сведения о сети сервис-провайдера и может включать выделенные ресурсы. Сетевые контроллеры могут использовать модель для управления конфигурацией сервиса L2VPN в сети сервис-провайдера. Оркестратор сервиса может применять соответствующий модуль YANG для запроса услуг VPN от сетевого контроллера или раскрытия списка активных служб L2VPN. Модель L2NM можно использовать также для извлечения связанных с L2VPN данных состояния (включая OAM3).

MAC-VRF

Таблица виртуальной маршрутизации и пересылки (Virtual Routing and Forwarding или VRF) для MAC4-адреса на PE.

Network controller – контроллер сети

Функциональный элемент, отвечающий за управление сетью сервис-провайдера.

Service orchestrator – организатор (оркестратор) сервиса

Функциональный элемент, взаимодействующий с клиентом, полагающимся на L2VPN, например, L2SM. Организатор сервиса отвечает за устройства подключения CE-PE (Customer Edge to Provider Edge), выбор PE и запросы активизации услуг L2VPN от сетевого контроллера.

Service provider network – сеть сервис-провайдера

Сеть, способная предоставлять связанные с L2VPN услуги.

VPN node – узел VPN

Абстракция набора правил, применяемых на PE и относящихся к одной услуге VPN. Служба VPN включает один или несколько узлов VPN. Узел VPN идентифицирует узел сервис-провайдера, где развёрнута служба VPN.

VPN network access – доступ в сеть VPN

Абстракция, представляющая сетевые интерфейсы, которые связаны с данным узлом VPN. Трафик, исходящий из сети доступа VPN, относится к VPN. Устройства подключения (носители) между CE и PE завершаются в сети доступа VPN.

VPN service provider – поставщик услуг VPN

Сервис-провайдер, предоставляющий связанные с L2VPN услуги.

3. Сокращения

ACL

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

BGP

Border Gateway Protocol – протокол граничного шлюза (междоменной маршрутизации).

BUM

Broadcast, Unknown Unicast, or Multicast – широковещательный, неизвестный индивидуальный или групповой.

CE

Customer Edge – граница клиента.

ES

Ethernet Segment – сегмент Ethernet.

ESI

Ethernet Segment Identifier – идентификатор сегмента Ethernet.

EVPN

Ethernet VPN – виртуальная частная сеть Ethernet.

L2VPN

Layer 2 Virtual Private Network – виртуальная частная сеть канального уровня.

L2SM

L2VPN Service Model – модель сервиса L2VPN.

L2NM

L2VPN Network Model – модель сети L2VPN.

MAC

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

PBB

Provider Backbone Bridging – магистраль провайдера на основе мостов.

PCP

Priority Code Point – код приоритета.

PE

Provider Edge – граница провайдера.

QoS

Quality of Service – качество обслуживания.

RD

Route Distinguisher – отличитель маршрута.

RT

Route Target – цель маршрута.

VPLS

Virtual Private LAN Service – служба виртуальной частной ЛВС.

VPN

Virtual Private Network – виртуальная частная сеть.

VPWS

Virtual Private Wire Service – служба виртуального частного провода.

VRF

Virtual Routing and Forwarding – виртуальная маршрутизация и пересылка.

4. Эталонная архитектура

На рисунке 1 показан пример использования L2NM. Напомним, что этот рисунок является расширением архитектуры, представленной в разделе 45 [RFC8466] и делит оркестровку на 3 части – «Оркестровка службы», «Оркестровка сети» и «Оркестровка домена».

Как и в [RFC8466], соединение CE с PE обеспечивается через канал (bearer) с соединением L2. Канал-носитель относится в свойствам подключения ниже уровня L2, тогда как соединение указывает свойства, относящиеся к протоколу L2.

Читатель может обратиться к [RFC8309], где определены различия между «Моделью обслуживания клиентов» (Customer Service Model), «Моделью предоставления услуг» (Service Delivery Model), «Моделью конфигурации сети (Network Configuration Model) и «Моделью конфигурации устройства» (Device Configuration Model). Роли «Организации домена» (Domain Orchestration) и «Менеджера конфигурации» (Config Manager) могут играть контроллеры SDN.

                          +---------------+
                          |    Клиент     |
                          +-------+-------+
       Модель обслуживания клиента|
          например, l2vpn-svc     |
                          +-------+-------+
                          |  Оркестровка  |
                          |     службы    |
                          +-------+-------+
           Модель сети            |
        l2vpn-ntw + l2vpn-es      |
                          +-------+-------+
                          |  Оркестровка  |
                          |      сети     |
                          +-------+-------+
    Модель конфигурации сети      |
                      +-----------+-----------+
                      |                       |
             +--------+------+       +--------+------+
             |  Оркестровка  |       |  Оркестровка  |
             |     домена    |       |     домена    |
             +---+-----------+       +--------+------+
  Модель         |        |                   |
  конфигурации   |        |                   |
  устройства     |        |                   |
            +----+----+   |                   |
            |Менеджер |   |                   |
            |конфигур.|   |                   |
            +----+----+   |                   |
                 |        |                   |
                 | NETCONF/CLI..................
                 |        |                   |
               +--------------------------------+
                \             Сеть            /
                 \                           /
+----+  Канал     +----+              +----+         +----+
|CE A+ ---------- +PE A+              +PE B+ ------- +CE B|
+----+ Соединение +----+              +----+         +----+

        Сайт A                                 Сайт B

NETCONF:  Network Configuration Protocol
CLI:  Command-Line Interface

Рисунок 1. Взаимодействие L2SM и L2NM.


Клиенты могут применять разные средства запроса услуг, приводящие к созданию экземпляров L2NM. Киент может использовать L2SM или запрашивать на основе более абстрактных моделей услуги, основанные на службе L2VPN. Клиент может представить, например, профиль организации соединения IP (IP Connectivity Provisioning Profile или CPP), характеризующий запрошенные услуги [RFC7297], расширенные услуги VPN (VPN+) [VPN+-FRAMEWORK] или услуги сетевого слоя IETF (network slice) [IETF-NET-SLICES].

Отметим, что L2SM и L2NM могут применяться в контексте схемы абстрагирования и управления сетями TE (Abstraction and Control of TE Networks или ACTN) [RFC8453]. На рисунке 2 показан контроллер клиента (Customer Network Controller или CNC), координатор многодоменного сервиса (Multi-Domain Service Coordinator или MDSC) и контроллера сети обеспечения (Provisioning Network Controller или PNC).


        +----------------------------------+
        | Клиент                           |
        | +-----------------------------+  |
        | |             CNC             |  |
        | +-----------------------------+  |
        +----+-----------------------+-----+
             |                       |
             | L2SM                  | L2SM
             |                       |
   +---------+---------+   +---------+---------+
   | MDSC              |   |       MDSC        |
   | +---------------+ |   |    (родитель)     |
   | |  Организация  | |   +---------+---------+
   | |    сервиса    | |             |
   | +-------+-------+ |             | L2NM
   |         |         |             |
   |         | L2NM    |   +---------+---------+
   |         |         |   |       MDSC        |
   | +-------+-------+ |   |     (потомок)     |
   | |  Организация  | |   +---------+---------+
   | |      сети     | |             |
   | +---------------+ |             |
   +---------+---------+             |
             |                       |
             |   Конфигурация сети   |
             |                       |
+------------+-------+     +---------+------------+
| Контроллер         |     | Контроллер           |
| домена             |     | домена             |
|       +---------+  |     |    +---------+       |
|       |   PNC   |  |     |    |   PNC   |       |
|       +---------+  |     |    +---------+       |
+------------+-------+     +---------+------------+
             |                       |
             |Конфигурация устройства|
             |                       |
        +----+-----+            +----+-----+
        |Устройство|            |Устройство|
        +----------+            +----------+

Рисунок 2. L2SM и L2NM в контексте ACTN.

5. Взаимодействие с другими моделями YANG

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

L2NM также использует поддерживаемые IANA модули iana-bgp-l2-encaps (8.1. Модуль IANA для типов инкапсуляции BGP L2) и iana-pseudowire-types (8.2. Модуль IANA для типов псевдопроводов) для идентификации типов инкапсуляции L2 и псевдопроводов. Дополнительные сведения приведены в параграфах 7.5.2.1 и 7.5.2.3.

Для частного случая EVPN модель L2NM включает имя, указывающее сегмент Ethernet, созданный с помощью модуля ietf-ethernet-segment (8.3. Сегменты Ethernet). Примеры, связанные с ES, представлены в приложениях A.4 и A.5.

Как отмечено в разделе 4, L2NM применяется для управления службами L2VPN в сети сервис-провайдера. Модуль обеспечивает сетевое представление службы L2VPN. Это представление доступно лишь сервис-провайдеру и не раскрывается вовне (например, клиентам). Ниже описаны интерфейсы L2NM с другими модулями YANG.

L2SM

L2NM не является моделью обслуживания клиентов.
Внутреннее представление сервиса (т. е. L2NM) можно отобразить на внешнее представление, доступное клиентам, – модель службы L2VPN (L2VPN Service Model или L2SM) [RFC8466].
В L2NM можно подавать данные, запрошенные клиентами и обычно основанные на шаблоне L2SM. В частности, некоторые части модуля L2SM можно напрямую сопоставить с L2NM, тогда как другие генерируются как функция запрошенной услуги и локальный правил. Имеются локальные компоненты сервис-провайдера, не отображаемые напрямую на L2SM.
Отметим, что применение L2NM у сервис-провайдера не предполагает и не исключает экспорта услуги VPN через L2SM. Это зависит от развёртывания. Тем не менее, решение L2NM пытается максимально соответствовать функциям, поддерживаемым L2SM, для упрощения использования L2NM и L2SM при высокоавтоматизированном предоставлении и доставке услуг VPN.

Модули сетевой топологии

L2VPN включает узлы, являющиеся частью топологии, управляемой сетью сервис-провайдера. Такую топологию можно представить с помощью топологического модуля [RFC8345] или его расширения, такого как модуль YANG для точек подключения услуг (Service Attachment Point или SAP) [YANG-SAPS].

Модули устройств

L2NM не является моделью устройства.
Когда глобальная услуга VPN получена с помощью L2NM, фактическая активация и предоставление сервиса VPN включает различные модули устройств для настройки требуемых при обеспечении сервиса функций. Эти функции поддерживаются узлами VPN и могут управляться через модули YANG для устройств. Такие модули включаю, наряду с прочими:
  • Interfaces [RFC8343];
  • BGP [BGP-YANG-MODEL];
  • MPLS [RFC8960];
  • Access Control Lists (ACLs) [RFC8519].

Использование L2NM для вывода специфических для устройства действий зависит от реализации.

6. Описание модуля YANG для сегмента Ethernet

Модель ietf-ethernet-segment (Рисунок 3) служит для управления набором сегментов Ethernet в контексте службы EVPN.

   module: ietf-ethernet-segment
     +--rw ethernet-segments
        +--rw ethernet-segment* [name]
           +--rw name                                 string
           +--rw esi-type?                            identityref
           +--rw (esi-choice)?
           |  +--:(directly-assigned)
           |  |  +--rw ethernet-segment-identifier?   yang:hex-string
           |  +--:(auto-assigned)
           |     +--rw esi-auto
           |        +--rw (auto-mode)?
           |        |  +--:(from-pool)
           |        |  |  +--rw esi-pool-name?                string
           |        |  +--:(full-auto)
           |        |     +--rw auto?                         empty
           |        +--ro auto-ethernet-segment-identifier?
           |                yang:hex-string
           +--rw esi-redundancy-mode?                 identityref
           +--rw df-election
           |  +--rw df-election-method?   identityref
           |  +--rw revertive?            boolean
           |  +--rw election-wait-time?   uint32
           +--rw split-horizon-filtering?             boolean
           +--rw pbb
           |  +--rw backbone-src-mac?   yang:mac-address
           +--rw member* [ne-id interface-id]
              +--rw ne-id           string
              +--rw interface-id    string

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


Описания узлов данных, представленных на рисунке 3, приведены ниже.

name

Имя, однозначно указывающее ES в сети сервис-провайдера. Для упрощения ссылок на ES по именам в других модулях определён тип es-ref. Этот тип определён на уровне доступа в сеть VPN L2NM для указания ES (7.6. Доступ в сеть VPN). Пример такого использования в L2NM приведён в A.4. Экземпляр сервиса VPWS-EVPN.

esi-type

Идентификатор сегмента Ethernet (Ethernet Segment Identifier или ESI), как описано в разделе 5 [RFC7432]. Значения ESI могут выдаваться автоматически с указанием или без указания пула для выбора ESI (esi-pool-name). Ниже перечислены поддерживаемые типы.

esi-type-0-operator

ESI напрямую задаёт сервис-провайдер VPN. Значение представляется в ethernet-segment-identifier.

esi-type-1-lacp

ESI создаётся автоматически протоколом LACP (IEEE 802.1AX Link Aggregation Control Protocol) [IEEE802.1AX].

esi-type-2-bridge

ESI создаётся автоматически и определяется на основе протокола мостов L2.

esi-type-3-mac

ESI создаётся на основе MAC и может задаваться автоматически или провайдером VPN.

esi-type-4-router-id

ESI создаётся автоматически или задаётся провайдером VPN на основе Router ID. Можно представлять router-id (7.5. Узлы VPN) для автоматического задания ESI при использовании этого типа.

esi-type-5-asn

ESI создаётся автоматически или задаётся провайдером VPN на основе номера автономной системы (Autonomous System или AS). Можно использовать local-autonomous-system (7.4. Профили глобальных параметров) для автоматического вывода ESI при использовании этого типа.

Автоматически созданные значения можно извлекать с использованием auto-ethernet-segment-identifier.

esi-redundancy-mode

Режим резервирования EVPN для данного ES – Single-Active (параграф 14.1.1 в [RFC7432]) или All-Active (параграф 14.1.2 в [RFC7432]).

df-election

Набор параметров для выбора назначенного узла пересылки (Designated Forwarder или DF) (параграф 8.5 в [RFC7432]). Этот узел данных может служить, например, для указания метода выбора (скажем, [RFC8584] или [EVPN-PERF-DF]). Если метод выбора не задан, применяется заданный по умолчанию (параграф 8.5 в [RFC7432]).
Как указано в параграфе 1.3.2 [RFC8584], по умолчанию принято вызывать процедуру выбора DF при отказе DF (например, сбой канала). Прежний узел DF будет восстановлен, когда станет доступным. Такой режим называется реверсивным (revertive). Поведение можно изменить установкой для листа revertive значения false.
Узел данных можно применять для настройки таймера DF Wait (election-wait-time), см. параграф 2.1 в [RFC8584].

split-horizon-filtering

Управляет активацией фильтра split-horizon для сегмента ES (параграф 8.3 в [RFC7432]).

pbb

Указывает узлы данных, специфичные для PBB [IEEE-802-1ah]:

backbone-src-mac

Связывает адрес B-MAC (Provider Backbone MAC) с ES. Это особенно полезно для многодомных All-Active ES (параграф 9.1 в [RFC7623]).

member

Список членов ES в сети сервис-провайдера.

7. Описание модуля YANG L2NM

Модуль L2NM (ietf-l2vpn-ntw, 8.4. L2NM) служит для управления L2VPN в сети сервис-провайдера. В частности, он позволяет создавать, изменять, удалять и отыскивать службы L2VPN в контроллере сети. Модуль предназначен для минимизации относящихся к клиенту сведений.

Полное дерево модуля создано с помощью pyang [PYANG]. Оно не включено в документ по причине слишком большого размера (параграф 3.3 в [RFC8340]) и для удобства читателей представлены фрагменты (субдеревья).

В последующих параграфах представлены некоторые узлы данных с текстовыми описаниями (например, 7.3. Услуги VPN, 7.5. Узлы VPN, 7.6. Доступ в сеть VPN). Эти описания даны не для случайных конечных пользователей, а для инженеров (сетей, систем, программ), использующих свой локальный контекст для представления и интерпретации таких сведений. Поэтому нет необходимости в тегах языка.

7.1. Общая структура модуля

Модуль ietf-l2vpn-ntw использует два основных контейнера: vpn-profiles и vpn-services (Рисунок 4).

Контейнер vpn-profiles применяется провайдером для задания и поддержки набора базовых профилей VPN для услуг VPN (7.2. Профили VPN).

Контейнер vpn-services поддерживает набор услуг L2VPN, поддерживаемых в сети сервис-провайдера. Модуль позволяет создавать новые службы L2VPN путём добавления нового экземпляра vpn-service, являющегося абстрактной структурой для службы VPN (7.3. Услуги VPN).


   module: ietf-l2vpn-ntw
     +--rw l2vpn-ntw
        +--rw vpn-profiles
        |  ...
        +--rw vpn-services
           +--rw vpn-service* [vpn-id]
              ...
              +--rw vpn-nodes
                 +--rw vpn-node* [vpn-node-id]
                    ...
                    +--rw vpn-network-accesses
                       +--rw vpn-network-access* [id]
                          ...

Рисунок 4. Структура дерева L2NM.

7.2. Профили VPN

Контейнер vpn-profiles (Рисунок 5) применяется сервис-провайдером VPN для задания и поддержки набора профилей VPN [RFC9181], применяемых к одной или нескольким службам VPN.

     +--rw l2vpn-ntw
        +--rw vpn-profiles
        |  +--rw valid-provider-identifiers
        |     +--rw external-connectivity-identifier* [id]
        |     |       {external-connectivity}?
        |     |  +--rw id    string
        |     +--rw encryption-profile-identifier* [id]
        |     |  +--rw id    string
        |     +--rw qos-profile-identifier* [id]
        |     |  +--rw id    string
        |     +--rw bfd-profile-identifier* [id]
        |     |  +--rw id    string
        |     +--rw forwarding-profile-identifier* [id]
        |     |  +--rw id    string
        |     +--rw routing-profile-identifier* [id]
        |        +--rw id    string
        +--rw vpn-services
           ...

Рисунок 5. Субдерево профиля VPN.


Точное определение этих профилей задаёт локально провайдер VPN. Модель включает лишь идентификаторы этих профилей для упрощения указания и привязки локальных правил при создании службы VPN. Как показано на рисунке 5, можно включить приведённые ниже идентификаторы.

external-connectivity-identifier

Указывает профиль, определяющий внешнюю связность, представляемую службе VPN (или подмножеству сайтов VPN). Внешняя связность может быть доступом в Internet или ограниченные соединения, такие как доступ в общественное или частное облако.

encryption-profile-identifier

Профиль шифрования, указывающий набор правил для схем шифрования и настройки, которые могут применяться для создания и предоставления услуг VPN.

qos-profile-identifier

Профиль качества обслуживания (Quality of Service или QoS), указывающих набор правил для классификации, маркировки и действий (например, [RFC3644]).

bfd-profile-identifier

Профиль обнаружения двухсторонней пересылки (Bidirectional Forwarding Detection или BFD), указывающий набор правил BFD [RFC5880], которые могут вызываться при создании службы VPN.

forwarding-profile-identifier

Профиль пересылки, указывающий правила для применения к пакетам внутри VPN. Правила могут включать, например, применение ACL.

routing-profile-identifier

Профиль маршрутизации, указывающий правила маршрутизации (например, правила BGP), вызываемые при предоставлении услуг VPN.

7.3. Услуги VPN

Структура данных vpn-service служит абстракцией службы L2VPN в сети сервис-провайдера. Каждая служба vpn-service однозначно указывается идентификатором vpn-id, имеющим значимость лишь в рамках сетевого контроллера. Субдерево vpn-services показано на рисунке 6.

        +--rw vpn-services
           +--rw vpn-service* [vpn-id]
              +--rw vpn-id                        vpn-common:vpn-id
              +--rw vpn-name?                     string
              +--rw vpn-description?              string
              +--rw customer-name?                string
              +--rw parent-service-id?            vpn-common:vpn-id
              +--rw vpn-type?                     identityref
              +--rw vpn-service-topology?         identityref
              +--rw bgp-ad-enabled?               boolean
              +--rw signaling-type?               identityref
              +--rw global-parameters-profiles
              |  ...
              +--rw underlay-transport
              |  +--rw (type)?
              |     +--:(abstract)
              |     |  +--rw transport-instance-id?   string
              |     |  +--rw instance-type?           identityref
              |     +--:(protocol)
              |        +--rw protocol*                identityref
              +--rw status
              |  +--rw admin-status
              |  |  +--rw status?         identityref
              |  |  +--rw last-change?   yang:date-and-time
              |  +--ro oper-status
              |     +--ro status?         identityref
              |     +--ro last-change?   yang:date-and-time
              +--rw vpn-nodes
                 ...

Рисунок 6. Субдерево служб VPN.


Ниже приведены описания узлов данных службы VPN, представленных на рисунке 6.

vpn-id

Идентификатор, однозначно указывающий службу L2VPN внутри области действия L2NM.

vpn-name

Связывает имя со службой для упрощения идентификации.

vpn-description

Текстовое описание услуги, структуру которого определяет поставщик услуг VPN.

customer-name

Указывает имя клиента, заказавшего услугу.

parent-service-id

Указывает идентификатор родительской службы (например, L2SM, срез сети IETF, VPN+), вызвавшей создание услуги L2VPN. Этот идентификатор служит для упрощения сопоставления (сетевой) услуги как встроенной в сеть по номеру заказа. Контроллер может использовать это сопоставление для уточнения или заполнения некоторых полей (например, description) в зависимости от локального развёртывания.

vpn-type

Указывает тип L2VPN. Ниже приведены определённые в [RFC9181] ипы, которые можно применять для L2NM.

vpls

Виртуальные частные ЛВС (Virtual Private LAN Service VPLS) определены в [RFC4761] и [RFC4762]. Этот тип также используется для иерархических VPLS (H-VPLS) (раздел 10 в [RFC4762]).

vpws

Виртуальные частные провода (Virtual Private Wire Service или VPWS), заданные в параграфе 3.1.1 [RFC4664].

vpws-evpn

VPWS EVPN, определённые в [RFC8214].

pbb-evpn

Магистрали провайдеров на базе мостов (Provider Backbone Bridging или PBB) EVPN, заданные в [RFC7623].

mpls-evpn

EVPN на основе MPLS [RFC7432].

vxlan-evpn

EVPN на основе VXLAN [RFC8365].
Для некоторых узлов данных в L2NM тип применяется в качестве условия.

vpn-service-topology

Указывает топологию сети для службы – hub-spoke, any-to-any, custom. Эти типы заданы в [RFC9181].

bgp-ad-enabled

Управляет использованием автоматического обнаружения BGP, при включении которого применяются дополнительные узлы данных (7.5.1. Автоматическое обнаружение BGP).

signaling-type

Сигнализация, служащая для организации псевдопроводов. Типы сигнализации взяты из [RFC9181], поддерживаемые опции указаны ниже.

bgp-signaling

L2NM поддерживает две разновидности L2VPN с сигнализацией BGP:

l2vpn-bgp

служба Multipoint VPLS с плоскостью управления BGP в соответствии с [RFC4761] и [RFC6624];

evpn-bgp

служба Multipoint VPLS с плоскостью управления BGP и дополнительными функциями и параметрами EVPN в соответствии с [RFC7432] и [RFC7209].

ldp-signaling

Multipoint VPLS с мэш-структурой псевдопроводов с сигнализацией LDP [RFC6074].

l2tp-signaling

L2NM применяет псевдопровода с сигнализацией L2TP, как описано в [RFC6074].
В таблице 1 дана сводка типов сигнализации для каждго типа услуг VPN (vpn-type). Дополнительные сведения приведены в параграфе 7.5.2. Сигнальные опции.

Таблица 1. Опции сигнализации для типа услуг VPN.

Тип VPN

Опции сигнализации

vpls

l2tp-signaling, ldp-signaling, bgp-signaling (l2vpn-bgp)

vpws

l2tp-signaling, ldp-signaling, bgp-signaling (l2vpn-bgp)

vpws-evpn

bgp-signaling (evpn-bgp)

pbb-evpn

bgp-signaling (evpn-bgp)

mpls-evpn

bgp-signaling (evpn-bgp)

vxlan-evpn

bgp-signaling (evpn-bgp)

global-parameters-profiles

Задаёт многократно применяемые параметры для одной службы L2VPN (7.4. Профили глобальных параметров).

underlay-transport

Описывает предпочтения для транспортной технологии передачи трафика службы VPN. Эти предпочтения особенно полезны в сетях с множеством доменов и типов межсетевых интерфейсов (Network-to-Network Interface или NNI). Базовый транспорт можно указать как экземпляр абстрактного транспорта (например, идентификатором экземпляра VPN+ или виртуальной сети, именем сетевого слоя – slice) или упорядоченным списком фактически разрешённых в сети протоколов. Можно использовать широкий спектр идентификаторов протоколов (или способов организации базового транспорта), указанных в [RFC9181].
Можно использовать модель, заданную в параграфе 6.3.2 [TE-SERVICE-MAPPING], если между PE нуэны специфические требования к защите и доступности.

status

Служит для отслеживания общего состояния данной службы VPN. Услугу можно создать, но не вводить в действие. Рабочее и административное состояние поддерживаются с временными метками и их можно применять в качестве триггеров для обнаружения аномалий в службе. Например, служба, объявленная на уровне сервиса как созданная, но все ещё не активная на уровне сети, указывает, что нужны действия по подготовке сети для согласования наблюдаемого состояния с ожидаемым.

vpn-node

Абстрактное представление набора профилей, применяемых к узлу сети в рамках одного vpn-service. Служба L2VPN обычно создаётся путём добавления экземпляров vpn-node в контейнер vpn-nodes.
В vpn-node содержатся узлы vpn-network-accesses, служащие интерфейсом, подключённым к VPN для приёма клиентского трафика. Поэтому сайты клиентов соединяются с vpn-network-accesses.
Поскольку это модель сети, сведения о сайтах клиентов не требуются в ней и относятся скорее к L2SM. Включение их в L2NM, например, для заполнения узлов description, зависит от реализации.
Дополнительные сведения приведены в параграфе 7.5. Узлы VPN.

7.4. Профили глобальных параметров

В global-parameters-profile определены параметры для многократного применения в одном экземпляре службы L2VPN (vpn-service). Профили глобальных параметров задаются на уровне службы VPN, активируются на уровне узла VPN, а затем активированный профиль VPN может применяться на уровне доступа в сеть VPN. Каждый профиль экземпляра VPN указывается profile-id. Некоторые узлы данных могут подстраиваться на уровне узла или доступа в сеть VPN и будут предпочтительней глобальных значений. Субдерево global-parameters-profile показано на рисунке7.

        ...
        +--rw vpn-services
           +--rw vpn-service* [vpn-id]
              ...
              +--rw global-parameters-profiles
              |  +--rw global-parameters-profile* [profile-id]
              |     +--rw profile-id                  string
              |     +--rw (rd-choice)?
              |     |  +--:(directly-assigned)
              |     |  |  +--rw rd?
              |     |  |          rt-types:route-distinguisher
              |     |  +--:(directly-assigned-suffix)
              |     |  |  +--rw rd-suffix?            uint16
              |     |  +--:(auto-assigned)
              |     |  |  +--rw rd-auto
              |     |  |     +--rw (auto-mode)?
              |     |  |     |  +--:(from-pool)
              |     |  |     |  |  +--rw rd-pool-name?   string
              |     |  |     |  +--:(full-auto)
              |     |  |     |     +--rw auto?           empty
              |     |  |     +--ro auto-assigned-rd?
              |     |  |             rt-types:route-distinguisher
              |     |  +--:(auto-assigned-suffix)
              |     |  |  +--rw rd-auto-suffix
              |     |  |     +--rw (auto-mode)?
              |     |  |     |  +--:(from-pool)
              |     |  |     |  |  +--rw rd-pool-name?        string
              |     |  |     |  +--:(full-auto)
              |     |  |     |     +--rw auto?                empty
              |     |  |     +--ro auto-assigned-rd-suffix?   uint16
              |     |  +--:(no-rd)
              |     |     +--rw no-rd?                empty
              |     +--rw vpn-target* [id]
              |     |  +--rw id                  uint8
              |     |  +--rw route-targets* [route-target]
              |     |  |  +--rw route-target    rt-types:route-target
              |     |  +--rw route-target-type
              |     |          rt-types:route-target-type
              |     +--rw vpn-policies
              |     |  +--rw import-policy?   string
              |     |  +--rw export-policy?   string
              |     +--rw local-autonomous-system?    inet:as-number
              |     +--rw svc-mtu?                    uint32
              |     +--rw ce-vlan-preservation?       boolean
              |     +--rw ce-vlan-cos-preservation?   boolean
              |     +--rw control-word-negotiation?   boolean
              |     +--rw mac-policies
              |     |  +--rw mac-addr-limit
              |     |  |  +--rw limit-number?    uint16
              |     |  |  +--rw time-interval?   uint32
              |     |  |  +--rw action?          identityref
              |     |  +--rw mac-loop-prevention
              |     |     +--rw window?            uint32
              |     |     +--rw frequency?         uint32
              |     |     +--rw retry-timer?       uint32
              |     |     +--rw protection-type?   identityref
              |     +--rw multicast {vpn-common:multicast}?
              |        +--rw enabled?                 boolean
              |        +--rw customer-tree-flavors
              |           +--rw tree-flavor*   identityref
                       ...

Рисунок 7. Субдерево профиля глобальных параметров.

profile-id

Уникальный в контексте службы L2VPN идентификатор профиля глобальных параметров.

rd

Поддерживаются режимы назначения RD в соответствии с [RFC9181]: непосредственное (direct) назначение, автоматическое назначение из заданного пула, полностью автоматическое назначение, отсутствие назначения.
Модуль также приспособлен к развёртываниям, где поле Assigned Number в RD назначается из пула, а в поле Administrator устанавливается, например, значение Router ID, выделенное узлу VPN. Модуль поддерживает для управления полем Assigned Number режимы явного (назначения), автоматического назначения из пула и полностью автоматического назначения.

vpn-targets

Задаёт правила импорта-экспорта для службы VPN.

local-autonomous-system

Указывает номер автономной системы (Autonomous System Number или ASN), настроенный для узла VPN. ASN может служить для автоматического вывода других атрибутов, таких как RD или идентификаторы сегментов Ethernet (Ethernet Segment Identifier или ESI).

svc-mtu

Значение MTU для службы L2VPN (например, L2 MTU, включая заголовок и трейлер L2) в байтах. Его называют также максимальным передаваемым блоком и максимальным размером кадра.

ce-vlan-preservation

Устанавливается для сохранения идентификаторов Customer Edge VLAN (CE VLAN) от входа до выхода, т. е. тег CE VLAN в выходном кадре будет совпадать с тегом входного кадра, из которого получен данный кадр службы. Если на сайте включена привязка «все к одному» (all-to-one), сохранение применяется для всех входящих кадров службы. Если такая привязка отключена, сохранение применяется для входных (Ingress) кадров сервиса с тегами CE VLAN ID от 1 до 4094.

ce-vlan-cos-preservation

Управляет сохранением класса обслуживания CE VLAN (Class of Service или CoS). При установленном флаге биты кода приоритета (Priority Code Point или PCP) в теге CE VLAN выходных кадров идентичны тагам соответствующих входных кадров.

control-word-negotiation

Управляет согласованием слова управления (control-word). Подробности приведены в разделе 7 [RFC8077].

mac-policies

Набор правил MAC, применяемых к службе:

mac-addr-limit

Контейнер конфигурации ограничений MAC-адресов, включающий узлы:

limit-number

максимальное число адресов MAC, полученных при обучении от клиента в одном экземпляре службы;

time-interval

время устаревания MAC-адреса;

action

действие при достижении предела: отбрасывание пакета, лавинная пересылка, предупреждение.

mac-loop-prevention

Контейнер для предотвращения петель MAC.

window

Интервал времени, в котором обнаруживаются и проверяются события перемещения MAC.

frequency

Число обнаружения дубликатов MAC, после которого возникает ситуация дублирования (duplicate MAC address) в интервале window и MAC-адрес добавляется в список дубликатов.

retry-timer

таймер повторого, по истечении которого дубликаты MAC-адресов исключаются из MAC-VRF.

protection-type

Задаёт тип предоствращения петель (например, shut).

multicast

Управляет поддержкой группового трафика для службы.

7.5. Узлы VPN

Абстракция vpn-node (Рисунок 8) представляет набор правил для узла сети, относящегося к одному vpn-service. Узел vpn-node содержит vpn-network-accesses, являющиеся интерфейсами для создания VPN. Сайты клиентов подключаются к vpn-network-accesses.

     +--rw l2vpn-ntw
        +--rw vpn-profiles
        |  ...
        +--rw vpn-services
           +--rw vpn-service* [vpn-id]
              ...
              +--rw vpn-nodes
                 +--rw vpn-node* [vpn-node-id]
                    +--rw vpn-node-id            vpn-common:vpn-id
                    +--rw description?           string
                    +--rw ne-id?                 string
                    +--rw role?                  identityref
                    +--rw router-id?             rt-types:router-id
                    +--rw active-global-parameters-profiles
                    |  +--rw global-parameters-profile* [profile-id]
                    |     +--rw profile-id                  leafref
                    |     +--rw local-autonomous-system?
                    |     |       inet:as-number
                    |     +--rw svc-mtu?                    uint32
                    |     +--rw ce-vlan-preservation?       boolean
                    |     +--rw ce-vlan-cos-preservation?   boolean
                    |     +--rw control-word-negotiation?   boolean
                    |     +--rw mac-policies
                    |     |  +--rw mac-addr-limit
                    |     |  |  +--rw limit-number?    uint16
                    |     |  |  +--rw time-interval?   uint32
                    |     |  |  +--rw action?          identityref
                    |     |  +--rw mac-loop-prevention
                    |     |     +--rw window?            uint32
                    |     |     +--rw frequency?         uint32
                    |     |     +--rw retry-timer?       uint32
                    |     |     +--rw protection-type?   identityref
                    |     +--rw multicast {vpn-common:multicast}?
                    |        +--rw enabled?                 boolean
                    |        +--rw customer-tree-flavors
                    |           +--rw tree-flavor*   identityref
                    +--rw status
                    |  ...
                    +--rw bgp-auto-discovery
                    |  ...
                    +--rw signaling-option
                    |  ...
                    +--rw vpn-network-accesses
                       ...

Рисунок 8. Субдерево узлов VPN.

vpn-node-id

Уникальный идентификатор узла, разрешающего доступ в сеть VPN.

description

Текстовое описание узла VPN.

ne-id

Идентификатор элемента сети, на котором развернут узел VPN.

role

Роль профиля экземпляра VPN в сети VPN [RFC9181] (например, any-to-any-role, spoke-role, hub-role).

router-id

Уникальный 32-битовый идентификатор маршрутизатора внутри AS.

active-global-parameters-profiles

Список активных профилей глобальных параметров VPN для узла VPN. Один или несколько глобальных профилей, заданных на уровне службы VPN (т. е. под l2vpn-ntw/vpn-services/vpn-service), можно активировать на уровне узла VPN и каждый из них однозначно указывается profile-id. Структура active-global-parameters-profiles использует те же узлы, которые указаны в параграфе 7.4, за исключением узлов, относящихся к RD и RT. Значения в active-global-parameters-profiles переопределяют значения, заданные на уровне службы VPN.

status

Отслеживает статус узла, вовлечённого в службу VPN. Поддерживается административное и рабочее состояние и их несовпадение может служить триггером для обнаружения аномалий.

bgp-auto-discovery

См. 7.5.1. Автоматическое обнаружение BGP.

signaling-option

См. 7.5.2. Сигнальные опции.

vpn-network-accesses

Представляет точку, к которой подключаются сайты. В отличие от L2SM в L2NM не требуется моделировать сайт клиента и охватываются лишь точки, получающие трафик с сайта (т. е. сторона PE в соединениях PE-CE). Поэтому доступ в сеть VPN содержит сведения о связности между сетью провайдера и площадками клиента. Профили VPN (vpn-profiles) включают набор правил маршрутизации, которые могут применяться при создании службы.
Дополнительные сведения приведены в параграфе 7.6. Доступ в сеть VPN.

7.5.1. Автоматическое обнаружение BGP

Контейнер bgp-auto-discovery (Рисунок 9) включает сведения, требуемые для активизации автоматического обнаружения BGP [RFC4761][RFC6624].

     +--rw l2vpn-ntw
        +--rw vpn-profiles
        |  ...
        +--rw vpn-services
           +--rw vpn-service* [vpn-id]
              ...
              +--rw vpn-nodes
                 +--rw vpn-node* [vpn-node-id]
                    ...
                    +--rw bgp-auto-discovery
                    |  +--rw (bgp-type)?
                    |  |  +--:(l2vpn-bgp)
                    |  |  |  +--rw vpn-id?
                    |  |  |          vpn-common:vpn-id
                    |  |  +--:(evpn-bgp)
                    |  |     +--rw evpn-type?           leafref
                    |  |     +--rw auto-rt-enable?      boolean
                    |  |     +--ro auto-route-target?
                    |  |             rt-types:route-target
                    |  +--rw (rd-choice)?
                    |  |  +--:(directly-assigned)
                    |  |  |  +--rw rd?
                    |  |  |          rt-types:route-distinguisher
                    |  |  +--:(directly-assigned-suffix)
                    |  |  |  +--rw rd-suffix?           uint16
                    |  |  +--:(auto-assigned)
                    |  |  |  +--rw rd-auto
                    |  |  |     +--rw (auto-mode)?
                    |  |  |     |  +--:(from-pool)
                    |  |  |     |  |  +--rw rd-pool-name?   string
                    |  |  |     |  +--:(full-auto)
                    |  |  |     |     +--rw auto?           empty
                    |  |  |     +--ro auto-assigned-rd?
                    |  |  |             rt-types:route-distinguisher
                    |  |  +--:(auto-assigned-suffix)
                    |  |  |  +--rw rd-auto-suffix
                    |  |  |     +--rw (auto-mode)?
                    |  |  |     |  +--:(from-pool)
                    |  |  |     |  |  +--rw rd-pool-name?        string
                    |  |  |     |  +--:(full-auto)
                    |  |  |     |     +--rw auto?                empty
                    |  |  |     +--ro auto-assigned-rd-suffix?   uint16
                    |  |  +--:(no-rd)
                    |  |     +--rw no-rd?               empty
                    |  +--rw vpn-target* [id]
                    |  |  +--rw id                   uint8
                    |  |  +--rw route-targets* [route-target]
                    |  |  |  +--rw route-target    rt-types:route-target
                    |  |  +--rw route-target-type
                    |  |          rt-types:route-target-type
                    |  +--rw vpn-policies
                    |     +--rw import-policy?   string
                    |     +--rw export-policy?   string
                    +--rw signaling-option
                    |  ...
                    +--rw vpn-network-accesses
                       ...

Рисунок 9. Субдерево автоматического обнаружения BGP.

Как отмечено в разделе 1 [RFC6624], все методы на основе BGP включают указание идентификатора VPN, служащего для унификации компонентов данной сети VPN и поддержки автоматического обнаружения, отсюда и vpn-id.

Для частного случая EVPN в L2NM поддерживается автоматических вывод RT на основе Ethernet Tag ID, заданного в параграфе 7.10.1 [RFC7432]. Поставщик услуг VPN может включить или отключить эту функцию с помощью auto-rt-enable. Заданное значение RT можно получить с использованием auto-route-target. Для всех вариантов L2VPN на основе BGP применяются другие узлы данных, такие как RD и RT. Эти узлы имеют такую же структуру, которая показана в параграфе 7.4. Профили глобальных параметров.

7.5.2. Сигнальные опции

Контейнер signaling-option (Рисунок 10) определяет набор узлов для данного протокола сигнализации, применяемого услугой L2VPN. Как указано в параграфе 7.3поддерживается несколько опций сигнализации для обмена сведениями о членстве между PE в L2VPN. Применяемый в L2VPN тип сигнализации контрлируется на уровне сервиса VPN с помощью signaling-type.

   ...
   +--rw vpn-nodes
      +--rw vpn-node* [vpn-node-id]
      ...
      +--rw signaling-option
      |  +--rw advertise-mtu?        boolean
      |  +--rw mtu-allow-mismatch?   boolean
      |  +--rw signaling-type?       leafref
      |  +--rw (signaling-option)?
      |     +--:(bgp)
      |     |  ...
      |     +--:(ldp-or-l2tp)
      |        +--rw ldp-or-l2tp
      |           ...
      |           +--rw (ldp-or-l2tp)?
      |              +--:(ldp)
      |              |  ...
      |              +--:(l2tp)
      |                 ...

Рисунок 10. Субдерево опций сигнализации.

advertise-mtu

Управляет анонсированием MTU при организации псевдопровода (например, параграф 4.3 в [RFC4667], параграф 5.1 в [RFC6624] или параграф 6.1 в [RFC4762]).

mtu-allow-mismatch

Значение true разрешает несоответствие MTU для псевдопровода (см., например, параграф 4.3 в [RFC4667]).

signaling-type

Тип сигнализации, наследуемый из signaling-type, заданного на уровне службы (7.3. Услуги VPN).

bgp

Предоставляется при использовании BGP для сигнализации L2VPN (см. 7.5.2.1. BGP).

ldp

Модель поддерживает настройку параметров, описанных в разделе 6 [RFC4762] (см. 7.5.2.2. LDP).

l2tp

Модель поддерживает настройку параметров, описанных в разделе 4 [RFC4667] (см. 7.5.2.3. L2TP).

Отметим, что варианты LDP и L2TP связаны (ldp-or-l2tp), поскольку они используют общий набор параметров, подробно описанных в параграфах 7.5.2.2. LDP и 7.5.2.3. L2TP.

7.5.2.1. BGP

Структура связанных с BGP узлов данных приведена на рисунке 11.

      ...
      |  +--rw (signaling-option)?
      |     ...
      |     +--:(bgp)
      |     |  +--rw (bgp-type)?
      |     |     +--:(l2vpn-bgp)
      |     |     |  +--rw ce-range?     uint16
      |     |     |  +--rw pw-encapsulation-type?
      |     |     |  |       identityref
      |     |     |  +--rw vpls-instance
      |     |     |     +--rw vpls-edge-id?         uint16
      |     |     |     +--rw vpls-edge-id-range?   uint16
      |     |     +--:(evpn-bgp)
      |     |        +--rw evpn-type?                leafref
      |     |        +--rw service-interface-type?
      |     |        |       identityref
      |     |        +--rw evpn-policies
      |     |           +--rw mac-learning-mode?
      |     |           |       identityref
      |     |           +--rw ingress-replication?
      |     |           |       boolean
      |     |           +--rw p2mp-replication?
      |     |           |       boolean
      |     |           +--rw arp-proxy {vpn-common:ipv4}?
      |     |           |  +--rw enable?           boolean
      |     |           |  +--rw arp-suppression?
      |     |           |  |       boolean
      |     |           |  +--rw ip-mobility-threshold?
      |     |           |  |       uint16
      |     |           |  +--rw duplicate-ip-detection-interval?
      |     |           |          uint16
      |     |           +--rw nd-proxy {vpn-common:ipv6}?
      |     |           |  +--rw enable?          boolean
      |     |           |  +--rw nd-suppression?
      |     |           |  |       boolean
      |     |           |  +--rw ip-mobility-threshold?
      |     |           |  |       uint16
      |     |           |  +--rw duplicate-ip-detection-interval?
      |     |           |          uint16
      |     |           +--rw underlay-multicast?
      |     |           |       boolean
      |     |           +--rw flood-unknown-unicast-suppression?
      |     |           |       boolean
      |     |           +--rw vpws-vlan-aware?        boolean
      |     |           +--rw bum-management
      |     |           |  +--rw discard-broadcast?
      |     |           |  |       boolean
      |     |           |  +--rw discard-unknown-multicast?
      |     |           |  |       boolean
      |     |           |  +--rw discard-unknown-unicast?
      |     |           |          boolean
      |     |           +--rw pbb
      |     |              +--rw backbone-src-mac?
      |     |                      yang:mac-address
      |     +--:(ldp-or-l2tp)
      |        ...

Рисунок 11. Субдерево опции сигнализации (BGP).

Удалённым CE, имеющим право подключаться к одной VPN, следует соответствовать диапазону CE (‘ce-range’), как указано в параграфе 2.2.3 [RFC6624]. Тип pw-encapsulation-type служит для управления типом инкапсуляции псевдопровода control (раздел 3 в [RFC6624]), значение берётся из модуля IANA iana-bgp-l2-encaps (параграф 8.1).

Для конкретного случая VPLS представлен идентификатор VE ID (VPLS Edge Identifier, vpls-edge-id) и диапазон VE ID (vpls-edge-id-range) в соответствии с параграфом 3.2 в [RFC4761]. Если нужны разные VE ID (например, множество адресов, как в параграфе 3.5 [RFC4761]), эти идентификаторы настраиваются на уровне доступа VPN (signaling-option, 7.6. Доступ в сеть VPN).

Для L2VPN, связанных с EVPN, service-interface-type указывает, имеет ли служба основанный на VLAN, осведомленный о VLAN, или привязанный к VLAN интерфейс (раздел 6 в [RFC7432]). Кроме того, может быть представлен набор правил, такой как режим изучения MAC адресов (раздел 9 в [RFC7432]), входная репликация (параграф 12.1 в [RFC7432]), протокол распознавания адресов (Address Resolution Protocol или ARP) прокси обнаружения соседей (Neighbor Discovery или ND, раздел 10 в [RFC7432]), обработка широковещательных, неизвестных индивидуальных и групповых (Broadcast, Unknown Unicast, or Multicast или BUM) пакетов (раздел 12 в [RFC7432]) и т. п.

7.5.2.2. LDP

L2NM поддерживает настройку параметров, рассмотренных в разделе 6 [RFC4762]. Такие параметры включают идентификатор группы подключений (Attachment Group Identifier или AGI, он же VPLS-id), индивидуальный идентификатор подключения источника (Source Attachment Individual Identifier или SAII), список партнёров, связанных с индивидуальным идентификатором целевого подключения (Target Attachment Individual Identifier или TAII), тип и описание псевдопровода type (Рисунок 12). В отличие от BGP, поддерживаются лишь режимы Ethernet и Ethernet с тегами. AGI, SAII и TAII кодируются в соответствии с типами, заданными в параграфе 3.4 [RFC4446].

      ...
      |  +--rw (signaling-option)?
      |     ...
      |     +--:(bgp)
      |     |  ...
      |     +--:(ldp-or-l2tp)
      |        +--rw ldp-or-l2tp
      |           +--rw agi?
      |           |       rt-types:route-distinguisher
      |           +--rw saii?                      uint32
      |           +--rw remote-targets* [taii]
      |           |  +--rw taii         uint32
      |           |  +--rw peer-addr    inet:ip-address
      |           +--rw (ldp-or-l2tp)?
      |              +--:(ldp)
      |              |  +--rw t-ldp-pw-type?
      |              |  |       identityref
      |              |  +--rw pw-type?       identityref
      |              |  +--rw pw-description?      string
      |              |  +--rw mac-addr-withdraw?   boolean
      |              |  +--rw pw-peer-list*
      |              |  |       [peer-addr vc-id]
      |              |  |  +--rw peer-addr
      |              |  |  |       inet:ip-address
      |              |  |  +--rw vc-id   string
      |              |  |  +--rw pw-priority?   uint32
      |              |  +--rw qinq
      |              |     +--rw s-tag   dot1q-types:vlanid
      |              |     +--rw c-tag   dot1q-types:vlanid
      |              +--:(l2tp)
      |                 ...
      ...

Рисунок 12. Субдерево опции сигнализации (LDP).

7.5.2.3. L2TP

L2NM поддерживает настройку параметров, рассмотренных в разделе 4 [RFC4667]. Эти параметры включают Router ID для однозначного указания PE, тип псевдопровода, AGI, SAII и список партнеров, связанных с TAII (Рисунок 13). Значение pseudowire-type берётся из модуля IANA iana-pseudowire-types (8.2. Модуль IANA для типов псевдопроводов).

      ...
      |  +--rw (signaling-option)?
      |     ...
      |     +--:(bgp)
      |     |  ...
      |     +--:(ldp-or-l2tp)
      |        +--rw ldp-or-l2tp
      |           +--rw agi?
      |           |       rt-types:route-distinguisher
      |           +--rw saii?                      uint32
      |           +--rw remote-targets* [taii]
      |           |  +--rw taii         uint32
      |           |  +--rw peer-addr    inet:ip-address
      |           +--rw (ldp-or-l2tp)?
      |              +--:(ldp)
      |              |  ...
      |              +--:(l2tp)
      |                 +--rw router-id?
      |                 |       rt-types:router-id
      |                 +--rw pseudowire-type?
      |                         identityref
      ...

Рисунок 13. Субдерево опции сигнализации (L2TP).

7.6. Доступ в сеть VPN

Доступ к службе VPN представляет контейнер vpn-network-access (Рисунок 14), содержащий параметры, описывающие свеедния о доступе для трафика, относящегося к отдельной сети L2VPN. В vpn-network-access включаются такие сведения, как соединение, для которого определяется доступ, конкретные требования к службе уровня L2 и т. п.

              ...
              +--rw vpn-nodes
                 +--rw vpn-node* [vpn-node-id]
                    ...
                    +--rw vpn-network-accesses
                       +--rw vpn-network-access* [id]
                          +--rw id                     vpn-common:vpn-id
                          +--rw description?              string
                          +--rw interface-id?             string
                          +--rw active-vpn-node-profile?   leafref
                          +--rw status
                          |  ...
                          +--rw connection
                          |  ...
                          +--rw (signaling-option)?
                          |  +--:(bgp)
                          |     +--rw (bgp-type)?
                          |        +--:(l2vpn-bgp)
                          |        |  +--rw ce-id?             uint16
                          |        |  +--rw remote-ce-id?      uint16
                          |        |  +--rw vpls-instance
                          |        |     +--rw vpls-edge-id?   uint16
                          |        +--:(evpn-bgp)
                          |           +--rw df-preference?     uint16
                          |           +--rw vpws-service-instance
                          |              ...
                          +--rw group* [group-id]
                          |  +--rw group-id                       string
                          |  +--rw precedence?               identityref
                          |  +--rw ethernet-segment-identifier?
                          |                              l2vpn-es:es-ref
                          +--rw ethernet-service-oam
                          |  ...
                          +--rw service
                             ...

Рисунок 14. Субдерево доступа с сеть VPN.

id

Идентификатор доступа в VPN.

description

текстовое описание доступа в VPN.

interface-id

Интерфейс, с которым связан доступ в VPN.

active-vpn-node-profile

Указатель на активнй профиль global-parameters-profile на уровне узла VPN. Ссылка предполагает, что все связанные узлы данных будут наследоваться доступом в VPN. Однако некоторые наследуемые узлы (например, правила ACL) могут переопределяться на уровне доступа в VPN. Такие значения будут иметь больший приоритет.

status

Административное и рабочее состояние доступа в VPN.

connection

Представляет и группирует множество подключения L2, из которых приходит трафик L2VPN в конкретную сеть VPN (7.6.1. Соединение).

signaling-option

Указывает набор сигнальных опций, относящихся к данному доступу в VPN, например, CE ID (ce-id, указывающий CE внутри VPN) и удалённый CE ID, как описано в параграфе 2.2.2 [RFC6624]. Набор включает также узлы данных, которые нужны для настройки VPWS-EVPN [RFC8214] (см. 7.6.2. Экземпляр службы EVPN-VPWS).

group

Служит для группировки доступа в сети VPN путём назначения им общего идентификатора. Для выделения основного и вторичных вариантов доступа служит атрибут предпочтений. Пример использования этого контейнера для резервирования, приведён в приложении A.6. Контейнер служит также для указания канала ES путём выделения одного ESI, пример этого представлен в приложениях A.4 и A.5.

ethernet-service-oam

Сведения об OAM для службы (см. 7.6.3. Ethernet OAM).

service

Задаёт параметры сервиса (например, QoS и групповая передача), применяемые к доступу в VPN (7.6.4. Службы).

7.6.1. Соединение

Контейнер connection (Рисунок 15) служит для настройки соответствующих свойств интерфейса, с которым соединён экземпляр L2VPN (например, типа инкапсуляции, интерфейсов агрегирования LAG, split-horizon). L2NM поддерживает манипуляции с тегами (например, перезапись).

Отметим, что контейнер connection не включает связанной с физическими параметрами конфигурации, поскольку предполагается, что это напрямую контролируют модули устройств (например, модуль интерфейсов). Кроме того, это позволяет избежать манипулирования глобальными параметрами на уровне сервиса и снижает риск влияния на другие службы, использующие тот же физический интерфейс.

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

Реализации (обычно, контроллеру сети) следует обеспечивать некоторые проверки согласованности для интерфейсов LAG, поскольку вовлечённым узлам нужно предоставлять одни и те же сведения (например, LACP system-id).

L2NM наследует структуру member-link-list от L2SM (включая индикацию поддержки OAM 802.3ah [IEEE-802-3ah]).

              ...
              +--rw vpn-nodes
                 +--rw vpn-node* [vpn-node-id]
                    ...
                    +--rw vpn-network-accesses
                       +--rw vpn-network-access* [id]
                          ...
                          +--rw connection
                          |  +--rw l2-termination-point?
                          |  |       string
                          |  +--rw local-bridge-reference?
                          |  |       string
                          |  +--rw bearer-reference?         string
                          |  |       {vpn-common:bearer-reference}?
                          |  +--rw encapsulation
                          |  |  +--rw encap-type?            identityref
                          |  |  +--rw dot1q
                          |  |  |  +--rw tag-type?           identityref
                          |  |  |  +--rw cvlan-id?
                          |  |  |  |       dot1q-types:vlanid
                          |  |  |  +--rw tag-operations
                          |  |  |     +--rw (op-choice)?
                          |  |  |     |  +--:(pop)
                          |  |  |     |  |  +--rw pop?         empty
                          |  |  |     |  +--:(push)
                          |  |  |     |  |  +--rw push?        empty
                          |  |  |     |  +--:(translate)
                          |  |  |     |     +--rw translate?   empty
                          |  |  |     +--rw tag-1?
                          |  |  |     |       dot1q-types:vlanid
                          |  |  |     +--rw tag-1-type?
                          |  |  |     |       dot1q-types:dot1q-tag-type
                          |  |  |     +--rw tag-2?
                          |  |  |     |       dot1q-types:vlanid
                          |  |  |     +--rw tag-2-type?
                          |  |  |             dot1q-types:dot1q-tag-type
                          |  |  +--rw priority-tagged
                          |  |  |  +--rw tag-type?   identityref
                          |  |  +--rw qinq
                          |  |     +--rw tag-type?         identityref
                          |  |     +--rw svlan-id
                          |  |     |       dot1q-types:vlanid
                          |  |     +--rw cvlan-id
                          |  |     |       dot1q-types:vlanid
                          |  |     +--rw tag-operations
                          |  |        +--rw (op-choice)?
                          |  |        |  +--:(pop)
                          |  |        |  |  +--rw pop?         uint8
                          |  |        |  +--:(push)
                          |  |        |  |  +--rw push?        empty
                          |  |        |  +--:(translate)
                          |  |        |     +--rw translate?   empty
                          |  |        +--rw tag-1?
                          |  |        |       dot1q-types:vlanid
                          |  |        +--rw tag-1-type?
                          |  |        |       dot1q-types:dot1q-tag-type
                          |  |        +--rw tag-2?
                          |  |        |       dot1q-types:vlanid
                          |  |        +--rw tag-2-type?
                          |  |                dot1q-types:dot1q-tag-type
                          |  +--rw lag-interface
                          |     |    {vpn-common:lag-interface}?
                          |     +--rw lag-interface-id?   string
                          |     +--rw lacp
                          |     |  +--rw lacp-state?         boolean
                          |     |  +--rw mode?               identityref
                          |     |  +--rw speed?              uint32
                          |     |  +--rw mini-link-num?      uint32
                          |     |  +--rw system-id?
                          |     |  |       yang:mac-address
                          |     |  +--rw admin-key?          uint16
                          |     |  +--rw system-priority?    uint16
                          |     |  +--rw member-link-list
                          |     |  |  +--rw member-link* [name]
                          |     |  |     +--rw name         string
                          |     |  |     +--rw speed?       uint32
                          |     |  |     +--rw mode?   identityref
                          |     |  |     +--rw link-mtu?    uint32
                          |     |  |     +--rw oam-802.3ah-link
                          |     |  |        |    {oam-3ah}?
                          |     |  |        +--rw enable?   boolean
                          |     |  +--rw flow-control?       boolean
                          |     |  +--rw lldp?               boolean
                          |     +--rw split-horizon
                          |        +--rw group-name?   string
                          ...

Рисунок 15. Субдерево соединения.

7.6.2. Экземпляр службы EVPN-VPWS

Контейнер vpws-service-instance представляет локальный и удалённый экземпляр службы VPWS (VPWS Service Instance или VSI) [RFC8214] и присутствует лишь при vpn-type = VPWS-EVPN. Как показано на рисунке 16, VSI могут настравиваться сервис-провайдером или создаваться автоматически. Пример использования L2NM для настройки экземпляров VPWS-EVPN приведён в приложении A.4.

   ...
   +--rw vpn-nodes
      +--rw vpn-node* [vpn-node-id]
         ...
         +--rw vpn-network-accesses
            +--rw vpn-network-access* [id]
               ...
               +--rw (signaling-option)?
               |  +--:(bgp)
               |     +--rw (bgp-type)?
               |        +--:(l2vpn-bgp)
               |        |  ...
               |        +--:(evpn-bgp)
               |           +--rw df-preference?     uint16
               |           +--rw vpws-service-instance
               |              +--rw (local-vsi-choice)?
               |              |  +--:(directly-assigned)
               |              |  |  +--rw local-vpws-service-instance?
               |              |  |          uint32
               |              |  +--:(auto-assigned)
               |              |     +--rw local-vsi-auto
               |              |        +--rw (auto-mode)?
               |              |        |  +--:(from-pool)
               |              |        |  |  +--rw vsi-pool-name?
               |              |        |  |          string
               |              |        |  +--:(full-auto)
               |              |        |     +--rw auto?      empty
               |              |        +--ro auto-local-vsi?  uint32
               |              +--rw (remote-vsi-choice)?
               |                 +--:(directly-assigned)
               |                 |  +--rw remote-vpws-service-instance?
               |                 |          uint32
               |                 +--:(auto-assigned)
               |                    +--rw remote-vsi-auto
               |                       +--rw (auto-mode)?
               |                       |  +--:(from-pool)
               |                       |  |  +--rw vsi-pool-name?
               |                       |  |          string
               |                       |  +--:(full-auto)
               |                       |     +--rw auto?       empty
               |                       +--ro auto-remote-vsi?  uint32
               ...

Рисунок 16. Субдерево экземпляра службы EVPN-VPWS.

7.6.3. Ethernet OAM

Ethernet OAM относится к [IEEE-802-1ag] и [ITU-T-Y-1731]. Как показано на рисунке 17, L2NM наследует структуру из параграфа 5.3.2.2.6 в [RFC8466] для OAM.

     +--rw l2vpn-ntw
        +--rw vpn-profiles
        |  ...
        +--rw vpn-services
           +--rw vpn-service* [vpn-id]
              ...
              +--rw vpn-nodes
                 +--rw vpn-node* [vpn-node-id]
                    ...
                    +--rw vpn-network-accesses
                       +--rw vpn-network-access* [id]
                          ...
                          +--rw ethernet-service-oam
                          |  +--rw md-name?        string
                          |  +--rw md-level?       uint8
                          |  +--rw cfm-802.1-ag
                          |  |  +--rw n2-uni-c* [maid]
                          |  |  |  +--rw maid                string
                          |  |  |  +--rw mep-id?             uint32
                          |  |  |  +--rw mep-level?          uint32
                          |  |  |  +--rw mep-up-down?
                          |  |  |  |                   enumeration
                          |  |  |  +--rw remote-mep-id?      uint32
                          |  |  |  +--rw cos-for-cfm-pdus?   uint32
                          |  |  |  +--rw ccm-interval?       uint32
                          |  |  |  +--rw ccm-holdtime?       uint32
                          |  |  |  +--rw ccm-p-bits-pri?
                          |  |  |          ccm-priority-type
                          |  |  +--rw n2-uni-n* [maid]
                          |  |     +--rw maid                string
                          |  |     +--rw mep-id?             uint32
                          |  |     +--rw mep-level?          uint32
                          |  |     +--rw mep-up-down?
                          |  |     |                    enumeration
                          |  |     +--rw remote-mep-id?      uint32
                          |  |     +--rw cos-for-cfm-pdus?   uint32
                          |  |     +--rw ccm-interval?       uint32
                          |  |     +--rw ccm-holdtime?       uint32
                          |  |     +--rw ccm-p-bits-pri?
                          |  |             ccm-priority-type
                          |  +--rw y-1731* [maid]
                          |     +--rw maid               string
                          |     +--rw mep-id?            uint32
                          |     +--rw pm-type?           identityref
                          |     +--rw remote-mep-id?     uint32
                          |     +--rw message-period?    uint32
                          |     +--rw measurement-interval?   uint32
                          |     +--rw cos?        uint32
                          |     +--rw loss-measurement?      boolean
                          |     +--rw synthetic-loss-measurement?
                          |     |       boolean
                          |     +--rw delay-measurement
                          |     |  +--rw enable-dm?   boolean
                          |     |  +--rw two-way?     boolean
                          |     +--rw frame-size?     uint32
                          |     +--rw session-type?   enumeration
                          ...

Рисунок 17. Субдерево OAM.

7.6.4. Службы

Контейнер service (Рисунок 18) обеспечивает набор специфических для сервиса конфигураций, таких как QoS.

     +--rw l2vpn-ntw
        +--rw vpn-profiles
        |  ...
        +--rw vpn-services
           +--rw vpn-service* [vpn-id]
              ...
              +--rw vpn-nodes
                 +--rw vpn-node* [vpn-node-id]
                    ...
                    +--rw vpn-network-accesses
                       +--rw vpn-network-access* [id]
                          ...
                          +--rw service
                             +--rw mtu?            uint32
                             +--rw svc-pe-to-ce-bandwidth
                             |       {vpn-common:inbound-bw}?
                             |  ...
                             +--rw svc-ce-to-pe-bandwidth
                             |       {vpn-common:outbound-bw}?
                             |  ...
                             +--rw qos {vpn-common:qos}?
                             |  ...
                             +--rw mac-policies
                             |  ...
                             +--rw broadcast-unknown-unicast-multicast
                                ...

Рисунок 18. Субдерево службы в целом.

mtu

Задаёт L2 MTU для доступа в VPN (в байтах).

svc-pe-to-ce-bandwidth и svc-ce-to-pe-bandwidth

Задают пропускную способность для службы L2VPN. Значение svc-pe-to-ce-bandwidth указывает входную пропускную способность (от сервис-провайдера на сайт), svc-ce-to-pe-bandwidth – выходную (с сайта в сеть провайдера). Значения svc-pe-to-ce-bandwidth и svc-ce-to-pe-bandwidth могут быть представлены с использованием гарантированной (Committed Information Rate или CIR), избыточной (Excess Information Rate или EIR) или пиковой (Peak Information Rate или PIR) скорости передачи.
Как показано на рисунке 19, структура узлов данных наследуется от L2SM [RFC8466]. Ниже приведены определённые в [RFC9181] типы, которые можно использовать для указания пропускной способности.

bw-per-cos

Пропускная способность на CoS.

bw-per-port

Пропускная способность на доступ в VPN.

bw-per-site

Пропускная способность на все пути доступа в VPN, односящиеся к сайту.

bw-per-service

Пропускная способность на службу L2VPN.
                             +--rw service
                                ...
                                +--rw svc-pe-to-ce-bandwidth
                                |       {vpn-common:inbound-bw}?
                                |  +--rw pe-to-ce-bandwidth* [bw-type]
                                |     +--rw bw-type      identityref
                                |     +--rw (type)?
                                |        +--:(per-cos)
                                |        |  +--rw cos* [cos-id]
                                |        |     +--rw cos-id    uint8
                                |        |     +--rw cir?      uint64
                                |        |     +--rw cbs?      uint64
                                |        |     +--rw eir?      uint64
                                |        |     +--rw ebs?      uint64
                                |        |     +--rw pir?      uint64
                                |        |     +--rw pbs?      uint64
                                |        +--:(other)
                                |           +--rw cir?   uint64
                                |           +--rw cbs?   uint64
                                |           +--rw eir?   uint64
                                |           +--rw ebs?   uint64
                                |           +--rw pir?   uint64
                                |           +--rw pbs?   uint64
                                +--rw svc-ce-to-pe-bandwidth
                                |       {vpn-common:outbound-bw}?
                                |  +--rw ce-to-pe-bandwidth* [bw-type]
                                |     +--rw bw-type      identityref
                                |     +--rw (type)?
                                |        +--:(per-cos)
                                |        |  +--rw cos* [cos-id]
                                |        |     +--rw cos-id    uint8
                                |        |     +--rw cir?      uint64
                                |        |     +--rw cbs?      uint64
                                |        |     +--rw eir?      uint64
                                |        |     +--rw ebs?      uint64
                                |        |     +--rw pir?      uint64
                                |        |     +--rw pbs?      uint64
                                |        +--:(other)
                                |           +--rw cir?   uint64
                                |           +--rw cbs?   uint64
                                |           +--rw eir?   uint64
                                |           +--rw ebs?   uint64
                                |           +--rw pir?   uint64
                                |           +--rw pbs?   uint64
                                ...

Рисунок 19. Субдерево пропускной способности службы.

qos

Служит для задания набора правил QoS, применяемых к данному доступу в VPN (Рисунок 20). Классификация QoS может основываться на таких критериях, как MAC-адреса отправителя и получателя и т. п. В параграфе 5.10.2.1 [RFC8466] рассмотрена классификация QoS, включая некоторые типы окрашивания.
                           +--rw service
                              ...
                              +--rw qos {vpn-common:qos}?
                              |  +--rw qos-classification-policy
                              |  |  +--rw rule* [id]
                              |  |     +--rw id                string
                              |  |     +--rw (match-type)?
                              |  |     |  +--:(match-flow)
                              |  |     |  |  +--rw match-flow
                              |  |     |  |     +--rw dscp?   inet:dscp
                              |  |     |  |     +--rw dot1q?     uint16
                              |  |     |  |     +--rw pcp?       uint8
                              |  |     |  |     +--rw src-mac-address?
                              |  |     |  |     |       yang:mac-address
                              |  |     |  |     +--rw dst-mac-address?
                              |  |     |  |     |       yang:mac-address
                              |  |     |  |     +--rw color-type?
                              |  |     |  |     |       identityref
                              |  |     |  |     +--rw any?         empty
                              |  |     |  +--:(match-application)
                              |  |     |     +--rw match-application?
                              |  |     |             identityref
                              |  |     +--rw target-class-id?     string
                              |  +--rw qos-profile
                              |     +--rw qos-profile* [profile]
                              |        +--rw profile      leafref
                              |        +--rw direction?   identityref
                              ...

Рисунок 20. Субдерево QoS.

mac-policies

Список связанных с MAC правил, таких как MAC ACL. Подобно [RFC8519], сопоставление ACL может быть основано на MAC-адресах отправителя и получателя, маске MAC или их комбинации. Кадр данных, соответствующий ACL может быть отброшен, разослан лавинно или вызвать сигнал. Можно задать правила для частоты при обработке кадров, соответствующих ACL с действием flood (лавинная рассылка).
При наличии узлов mac-loop-prevention или mac-addr-limit они будут иметь предпочтение перед узлами из global-parameters-profile на уровне службы или узла VPN.
                            +--rw service
                               ...
                               +--rw mac-policies
                               |  +--rw access-control-list* [name]
                               |  |  +--rw name                  string
                               |  |  +--rw src-mac-address*
                               |  |  |       yang:mac-address
                               |  |  +--rw src-mac-address-mask*
                               |  |  |       yang:mac-address
                               |  |  +--rw dst-mac-address*
                               |  |  |       yang:mac-address
                               |  |  +--rw dst-mac-address-mask*
                               |  |  |       yang:mac-address
                               |  |  +--rw action?          identityref
                               |  |  +--rw rate-limit?      decimal64
                               |  +--rw mac-loop-prevention
                               |  |  +--rw window?            uint32
                               |  |  +--rw frequency?         uint32
                               |  |  +--rw retry-timer?       uint32
                               |  |  +--rw protection-type?  identityref
                               |  +--rw mac-addr-limit
                               |     +--rw limit-number?    uint16
                               |     +--rw time-interval?   uint32
                               |     +--rw action?          identityref
                               ...

Рисунок 21. Субдерево правил MAC.

broadcast-unknown-unicast-multicast

Тип сайта в групповой топологии (источник, получатель или оба) для сопоставлений групп с портами.
                          +--rw service
                             ...
                             +--rw broadcast-unknown-unicast-multicast
                                +--rw multicast-site-type?
                                |       enumeration
                                +--rw multicast-gp-address-mapping* [id]
                                |  +--rw id                 uint16
                                |  +--rw vlan-id            uint32
                                |  +--rw mac-gp-address
                                |  |       yang:mac-address
                                |  +--rw port-lag-number?   uint32
                                +--rw bum-overall-rate?     uint64

Рисунок 22. Субдерево BUM.

8. Модули YANG

8.1. Модуль IANA для типов инкапсуляции BGP L2

Модуль YANG iana-bgp-l2-encaps соответствует реестру BGP Layer 2 Encapsulation Types [IANA-BGP-L2]. Модуль ссылается на [RFC3032], [RFC4446], [RFC4448], [RFC4553], [RFC4618], [RFC4619], [RFC4717], [RFC4761], [RFC4816], [RFC4842], [RFC5086].

   <CODE BEGINS> file "iana-bgp-l2-encaps@2022-09-20.yang"
   module iana-bgp-l2-encaps {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:iana-bgp-l2-encaps";
     prefix iana-bgp-l2-encaps;

     organization
       "IANA";
     contact
       "Internet Assigned Numbers Authority

        Postal: ICANN
             12025 Waterfront Drive, Suite 300
             Los Angeles, CA  90094-2536
             United States of America
        Tel:    +1 310 301 5800
        <mailto:iana@iana.org>"; 
     description
       "Этот модуль YANG содержит набор поддерживаемых IANA типов данных
        YANG, применяемых для ссылок на типы инкапсуляции BGP L2.

        Авторские права (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 9291, где правовые
        аспекты приведены более полно.";

     revision 2022-09-20 {
       description
         "Первый выпуск.";
       reference
         "RFC 9291: A YANG Network Data Model for Layer 2 VPNs.";
     }

     identity bgp-l2-encaps-type {
       description
         "Базовый тип инкапсуляции BGP L2.";
       reference
         "RFC 6624: Layer 2 Virtual Private Networks Using BGP for
                    Auto-Discovery and Signaling";
     }

     identity frame-relay {
       base bgp-l2-encaps-type;
       description
         "Frame Relay.";
       reference
         "RFC 4446: IANA Allocations for Pseudowire Edge
                    to Edge Emulation (PWE3)";
     }

     identity atm-aal5 {
       base bgp-l2-encaps-type;
       description
         "Транспорт ATM AAL5 SDU VCC.";
       reference
         "RFC 4446: IANA Allocations for Pseudowire Edge
                    to Edge Emulation (PWE3)";
     }

     identity atm-cell {
       base bgp-l2-encaps-type;
       description
         "Прозрачная транспортировка ячеек ATM.";
       reference
         "RFC 4816: Pseudowire Emulation Edge-to-Edge (PWE3)
                    Asynchronous Transfer Mode (ATM) Transparent
                    Cell Transport Service";
     }

     identity ethernet-tagged-mode {
       base bgp-l2-encaps-type;
       description
         "Режим Ethernet с тегами (VLAN).";
       reference
         "RFC 4448: Encapsulation Methods for Transport of Ethernet
                    over MPLS Networks";
     }

     identity ethernet-raw-mode {
       base bgp-l2-encaps-type;
       description
         "Режим Ethernet Raw.";
       reference
         "RFC 4448: Encapsulation Methods for Transport of Ethernet
                    over MPLS Networks";
     }

     identity hdlc {
       base bgp-l2-encaps-type;
       description
         "Cisco HDLC.";
       reference
         "RFC 4618: Encapsulation Methods for Transport of
                    PPP/High-Level Data Link Control (HDLC)
                    over MPLS Networks";
     }

     identity ppp {
       base bgp-l2-encaps-type;
       description
         "PPP.";
       reference
         "RFC 4618: Encapsulation Methods for Transport of
                    PPP/High-Level Data Link Control (HDLC)
                    over MPLS Networks";
     }

     identity circuit-emulation {
       base bgp-l2-encaps-type;
       description
         "Служба эмуляции каналов (устройств) SONET/SDH.";
       reference
         "RFC 4842: Synchronous Optical Network/Synchronous Digital
                    Hierarchy (SONET/SDH) Circuit Emulation over Packet
                    (CEP)";
     }

     identity atm-to-vcc {
       base bgp-l2-encaps-type;
       description
         "Транспорт ячеек VCC ATM n-to-one.";
       reference
         "RFC 4717: Encapsulation Methods for Transport of
                    Asynchronous Transfer Mode (ATM) over MPLS
                    Networks";
     }

     identity atm-to-vpc {
       base bgp-l2-encaps-type;
       description
         "Транспорт ячеек VPC ATM n-to-one.";
       reference
         "RFC 4717: Encapsulation Methods for Transport of
                    Asynchronous Transfer Mode (ATM) over MPLS
                    Networks";
     }

     identity layer-2-transport {
       base bgp-l2-encaps-type;
       description
         "Транспорт IP L2.";
       reference
         "RFC 3032: MPLS Label Stack Encoding";
     }

     identity fr-port-mode {
       base bgp-l2-encaps-type;
       description
         "режим порта Frame Relay.";
       reference
         "RFC 4619: Encapsulation Methods for Transport of Frame Relay
                    over Multiprotocol Label Switching (MPLS)
                    Networks";
     }

     identity e1 {
       base bgp-l2-encaps-type;
       description
         "E1 в пакетах без учёта структуры.";
       reference
         "RFC 4553: Structure-Agnostic Time Division Multiplexing (TDM)
                    over Packet (SAToP)";
     }

     identity t1 {
       base bgp-l2-encaps-type;
       description
         "T1 (DS1) в пакетах без учёта структуры.";
       reference
         "RFC 4553: Structure-Agnostic Time Division Multiplexing (TDM)
                    over Packet (SAToP)";
     }

     identity vpls {
       base bgp-l2-encaps-type;
       description
         "VPLS.";
       reference
         "RFC 4761: Virtual Private LAN Service (VPLS)
                    Using BGP for Auto-Discovery and Signaling";
     }

     identity t3 {
       base bgp-l2-encaps-type;
       description
         "T3 (DS3) в пакетах без учёта структуры.";
       reference
         "RFC 4553: Structure-Agnostic Time Division Multiplexing (TDM)
                    over Packet (SAToP)";
     }

     identity structure-aware {
       base bgp-l2-encaps-type;
       description
         "Базовый сервис Nx64 кбит/с с учётом структуры.";
       reference
         "RFC 5086: Structure-Aware Time Division Multiplexed (TDM)
                    Circuit Emulation Service over Packet Switched
                    Network (CESoPSN)";
     }

     identity dlci {
       base bgp-l2-encaps-type;
       description
         "Frame Relay DLCI.";
       reference
         "RFC 4619: Encapsulation Methods for Transport of Frame Relay
                    over Multiprotocol Label Switching (MPLS)
                    Networks";
     }

     identity e3 {
       base bgp-l2-encaps-type;
       description
         "E3 в пакетах без учёта структуры.";
       reference
         "RFC 4553: Structure-Agnostic Time Division Multiplexing (TDM)
                    over Packet (SAToP)";
     }

     identity ds1 {
       base bgp-l2-encaps-type;
       description
         "Выровненное по октетам содержимое для каналов DS1 без учёта
          структуры.";
       reference
         "RFC 4553: Structure-Agnostic Time Division Multiplexing (TDM)
                    over Packet (SAToP)";
     }

     identity cas {
       base bgp-l2-encaps-type;
       description
         "E1 Nx64 кбит/с с CAS и учётом структуры.";
       reference
         "RFC 5086: Structure-Aware Time Division Multiplexed (TDM)
                    Circuit Emulation Service over Packet Switched
                    Network (CESoPSN)";
     }

     identity esf {
       base bgp-l2-encaps-type;
       description
         "DS1 (ESF) Nx64 кбит/с с CAS и учётом структуры.";
       reference
         "RFC 5086: Structure-Aware Time Division Multiplexed (TDM)
                    Circuit Emulation Service over Packet Switched
                    Network (CESoPSN)";
     }

     identity sf {
       base bgp-l2-encaps-type;
       description
         "DS1 (SF) Nx64 кбит/с с CAS и учётом структуры.";
       reference
         "RFC 5086: Structure-Aware Time Division Multiplexed (TDM)
                    Circuit Emulation Service over Packet Switched
                    Network (CESoPSN)";
     }
   }
   <CODE ENDS>

8.2. Модуль IANA для типов псевдопроводов

Исходная версия модуля YANG iana-pseudowire-types соответствует реестру MPLS Pseudowire Types Registry [IANA-PW-TYPES]. Модуль ссылается на [MFA], [RFC2507], [RFC2508], [RFC3032], [RFC3545], [RFC4448], [RFC4553], [RFC4618], [RFC4619], [RFC4717], [RFC4842], [RFC4863], [RFC4901], [RFC5086], [RFC5087], [RFC5143], [RFC5795], [RFC6307].

   <CODE BEGINS> file "iana-pseudowire-types@2022-09-20.yang"
   module iana-pseudowire-types {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:iana-pseudowire-types";
     prefix iana-pw-types;

     organization
       "IANA";
     contact
       "Internet Assigned Numbers Authority

        Postal: ICANN
             12025 Waterfront Drive, Suite 300
             Los Angeles, CA  90094-2536
             United States of America
        Tel:    +1 310 301 5800
        <mailto:iana@iana.org>"; 
     description
       "Этот модуль содержит набор поддерживаемых IANA типов данных YANG
        для указания типов псевдопроводов.

        Авторские права (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 9291, где правовые
        аспекты приведены более полно.";

     revision 2022-09-20 {
       description
         "Первый выпуск.";
       reference
         "RFC RFC 9291: A YANG Network Data Model for Layer 2 VPNs.";
     }

     identity iana-pw-types {
       description
         "Базовый тип инкапсуляции псевдопровода L2.";
     }

     identity frame-relay {
       base iana-pw-types;
       description
         "Frame Relay DLCI (режим Martini).";
       reference
         "RFC 4619: Encapsulation Methods for Transport of Frame Relay
                    over Multiprotocol Label Switching (MPLS)
                    Networks";
     }

     identity atm-aal5 {
       base iana-pw-types;
       description
         "Транспорт ATM AAL5 SDU VCC.";
       reference
         "RFC 4717: Encapsulation Methods for Transport of
                    Asynchronous Transfer Mode (ATM) over MPLS
                    Networks";
     }

     identity atm-cell {
       base iana-pw-types;
       description
         "Прозрачная доставка ячеек ATM.";
       reference
         "RFC 4717: Encapsulation Methods for Transport of
                    Asynchronous Transfer Mode (ATM) over MPLS
                    Networks";
     }

     identity ethernet-tagged-mode {
       base iana-pw-types;
       description
         "Теговый режим Ethernet (VLAN).";
       reference
         "RFC 4448: Encapsulation Methods for Transport of Ethernet
                    over MPLS Networks";
     }

     identity ethernet {
       base iana-pw-types;
       description
         "Ethernet.";
       reference
         "RFC 4448: Encapsulation Methods for Transport of Ethernet
                    over MPLS Networks";
     }

     identity hdlc {
       base iana-pw-types;
       description
         "HDLC.";
       reference
         "RFC 4618: Encapsulation Methods for Transport of
                    PPP/High-Level Data Link Control (HDLC)
                    over MPLS Networks";
     }

     identity ppp {
       base iana-pw-types;
       description
         "PPP.";
       reference
         "RFC 4618: Encapsulation Methods for Transport of
                    PPP/High-Level Data Link Control (HDLC)
                    over MPLS Networks";
     }

     identity circuit-emulation-mpls {
       base iana-pw-types;
       description
         "Инкапсуляция SONET/SDH CES через MPLS.";
       reference
         "RFC 5143: Synchronous Optical Network/Synchronous Digital
                    Hierarchy (SONET/SDH) Circuit Emulation Service over
                    MPLS (CEM) Encapsulation";
     }

     identity atm-to-vcc {
       base iana-pw-types;
       description
         "Транспорт ячеек VCC ATM n-to-one.";
       reference
         "RFC 4717: Encapsulation Methods for Transport of
                    Asynchronous Transfer Mode (ATM) over MPLS
                    Networks";
     }

     identity atm-to-vpc {
       base iana-pw-types;
       description
         "Транспорт ячеек VPC ATM n-to-one.";
       reference
         "RFC 4717: Encapsulation Methods for Transport of
                    Asynchronous Transfer Mode (ATM) over MPLS
                    Networks";
     }

     identity layer-2-transport {
       base iana-pw-types;
       description
         "Транспорт IP L2.";
       reference
         "RFC 3032: MPLS Label Stack Encoding";
     }

     identity atm-one-to-one-vcc {
       base iana-pw-types;
       description
         "Режим ячеек VCC ATM one-to-one.";
       reference
         "RFC 4717: Encapsulation Methods for Transport of
                    Asynchronous Transfer Mode (ATM) over MPLS
                    Networks";
     }

     identity atm-one-to-one-vpc {
       base iana-pw-types;
       description
         "Режим ячеек VPC ATM one-to-one.";
       reference
         "RFC 4717: Encapsulation Methods for Transport of
                    Asynchronous Transfer Mode (ATM) over MPLS
                    Networks";
     }

     identity atm-aal5-vcc {
       base iana-pw-types;
       description
         "Транспорт ATM AAL5 PDU VCC.";
       reference
         "RFC 4717: Encapsulation Methods for Transport of
                    Asynchronous Transfer Mode (ATM) over MPLS
                    Networks";
     }

     identity fr-port-mode {
       base iana-pw-types;
       description
         "Режим порта Frame-Relay.";
       reference
         "RFC 4619: Encapsulation Methods for Transport of Frame Relay
                    over Multiprotocol Label Switching (MPLS)
                    Networks";
     }

     identity circuit-emulation-packet {
       base iana-pw-types;
       description
         "Режим эмуляции каналов SONET/SDH в пакетной сети.";
       reference
         "RFC 4842: Synchronous Optical Network/Synchronous Digital
                    Hierarchy (SONET/SDH) Circuit Emulation over Packet
                    (CEP)";
     }

     identity e1 {
       base iana-pw-types;
       description
         "E1 в пакетах без учёта структуры.";
       reference
         "RFC 4553: Structure-Agnostic Time Division Multiplexing (TDM)
                    over Packet (SAToP)";
     }

     identity t1 {
       base iana-pw-types;
       description
         "T1 (DS1) в пакетах без учёта структуры.";
       reference
         "RFC 4553: Structure-Agnostic Time Division Multiplexing (TDM)
                    over Packet (SAToP)";
     }

     identity e3 {
       base iana-pw-types;
       description
         "E3 в пакетах без учёта структуры.";
       reference
         "RFC 4553: Structure-Agnostic Time Division Multiplexing (TDM)
                    over Packet (SAToP)";
     }

     identity t3 {
       base iana-pw-types;
       description
         "T3 (DS3) в пакетах без учёта структуры.";
       reference
         "RFC 4553: Structure-Agnostic Time Division Multiplexing (TDM)
                    over Packet (SAToP)";
     }

     identity ces-over-psn {
       base iana-pw-types;
       description
         "Базовый режим CESoPSN.";
       reference
         "RFC 5086: Structure-Aware Time Division Multiplexed (TDM)
                    Circuit Emulation Service over Packet Switched
                    Network (CESoPSN)";
     }

     identity tdm-over-ip-aal1 {
       base iana-pw-types;
       description
         "Режим TDMoIP AAL1.";
       reference
         "RFC 5087: Time Division Multiplexing over IP (TDMoIP)";
     }

     identity ces-over-psn-cas {
       base iana-pw-types;
       description
         "CESoPSN TDM с CAS.";
       reference
         "RFC 5086: Structure-Aware Time Division Multiplexed (TDM)
                    Circuit Emulation Service over Packet Switched
                    Network (CESoPSN)";
     }

     identity tdm-over-ip-aal2 {
       base iana-pw-types;
       description
         "Режим TDMoIP AAL2.";
       reference
         "RFC 5087: Time Division Multiplexing over IP (TDMoIP)";
     }

     identity dlci {
       base iana-pw-types;
       description
         "Frame Relay DLCI.";
       reference
         "RFC 4619: Encapsulation Methods for Transport of Frame Relay
                    over Multiprotocol Label Switching (MPLS)
                    Networks";
     }

     identity rohc {
       base iana-pw-types;
       description
         "Транспорт ROHC в пакетах со сжатием заголовков.";
       reference
         "RFC 5795: The RObust Header Compression (ROHC) Framework
          RFC 4901: Protocol Extensions for Header Compression over
                    MPLS";
     }

     identity ecrtp {
       base iana-pw-types;
       description
         "Транспорт ECRTP в пакетах со сжатием заголовков.";
       reference
         "RFC 3545: Enhanced Compressed RTP (CRTP) for Links with High
                    Delay, Packet Loss and Reordering
          RFC 4901: Protocol Extensions for Header Compression over
                    MPLS";
     }

     identity iphc {
       base iana-pw-types;
       description
         "Транспорт IPHC в пакетах со сжатием заголовков.";
       reference
         "RFC 2507: IP Header Compression
          RFC 4901: Protocol Extensions for Header Compression over
                    MPLS";
     }

     identity crtp {
       base iana-pw-types;
       description
         "Транспорт cRTP в пакетах со сжатием заголовков.";
       reference
         "RFC 2508: Compressing IP/UDP/RTP Headers for Low-Speed Serial
                    Links
          RFC 4901: Protocol Extensions for Header Compression over
                    MPLS";
     }

     identity atm-vp-virtual-trunk {
       base iana-pw-types;
       description
         "Виртуальный транк ATM VP.";
       reference
         "MFA Forum: The Use of Virtual Trunks for ATM/MPLS
                     Control Plane Interworking Specification";
     }

     identity fc-port-mode {
       base iana-pw-types;
       description
         "Режим порта FC.";
       reference
         "RFC 6307: Encapsulation Methods for Transport of
                    Fibre Channel Traffic over MPLS Networks";
     }

     identity wildcard {
       base iana-pw-types;
       description
         "Шаблон.";
       reference
         "RFC 4863: Wildcard Pseudowire Type";
     }
   }
   <CODE ENDS>

8.3. Сегменты Ethernet

Модуль YANG ietf-ethernet-segment использует типы, определённые в [RFC6991].

   <CODE BEGINS> file "ietf-ethernet-segment@2022-09-20.yang"
   module ietf-ethernet-segment {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-ethernet-segment";
     prefix l2vpn-es;

     import ietf-yang-types {
       prefix yang;
       reference
         "RFC 6991: Common YANG Data Types (see Section 3)";
     }

     organization
       "IETF OPSA (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> 

        Editor:    Samier Barguil
                  <mailto:samier.barguilgiraldo.ext@telefonica.com> 

        Author:    Oscar Gonzalez de Dios
                  <mailto:oscar.gonzalezdedios@telefonica.com>"; 

     description
       "Этот модуль YANG определяет модель для сегментов Ethernet.

        Авторские права (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 9291, где правовые
        аспекты приведены более полно.";

     revision 2022-09-20 {
       description
         "Исходная версия.";
       reference
         "RFC 9291: A YANG Network Data Model for Layer 2 VPNs.";
     }
     /* Определения типов */

     typedef es-ref {
       type leafref {
         path "/l2vpn-es:ethernet-segments/l2vpn-es:ethernet-segment"
            + "/l2vpn-es:name";
       }
       description
         "Defines a type for referencing an Ethernet segment in
          other modules.";
     }

     /* Идентификаторы (отождествления) */

     identity esi-type {
       description
         "T - тип идентификатора сегмента Ethernet (Ethernet Segment 
          Identifier или ESI) — 1-октетное поле (старший октет), 
          задающее формат оставшихся 9 октетов (значение ESI).";
       reference
         "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 5";
     }

     identity esi-type-0-operator {
       base esi-type;
       description
         "Произвольное 9-октетное значение ESI, поддерживаемое и
          настраиваемое оператором.";
     }

     identity esi-type-1-lacp {
       base esi-type;
       description
         "При использовании протокола объединения каналов IEEE 802.1AX 
          LACP между устройствами PE и CE этот тип ESI указывает 
          автоматически созданное значение ESI, определённое из LACP.";
       reference
         "IEEE Std 802.1AX: Link Aggregation";
     }

     identity esi-type-2-bridge {
       base esi-type;
       description
         "Значение ESI создаётся автоматически по протоколу моста L2.";
     }

     identity esi-type-3-mac {
       base esi-type;
       description
         "Значение ESI на основе MAC, которое может создаваться
          автоматически или настраиваться оператором.";
     }

     identity esi-type-4-router-id {
       base esi-type;
       description
         "Значение ESI на основе Router ID, которое может создаваться
          автоматически или настраиваться оператором.";
     }

     identity esi-type-5-asn {
       base esi-type;
       description
         "Значение ESI на основе номера AS, которое может создаваться
          автоматически или настраиваться оператором.";
     }

     identity df-election-methods {
       description
         "Базовый идентификатор метода выбора DF.";
     }

     identity default-7432 {
       base df-election-methods;
       description
         "Принятый по умолчанию метод выбора DF.

          Принятая по умолчанию процедура выбора DF с детализацией
          <ES,VLAN> для службы на основе VLAN или <ES, связка VLAN> для
          привязки к VLAN называется service carving.";
       reference
         "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 8.5";
     }

     identity highest-random-weight {
       base df-election-methods;
       description
         "Метод выбора по наибольшему случайному весу (HRW).";
       reference
         "RFC 8584: Framework for Ethernet VPN Designated
                    Forwarder Election Extensibility, Section 3";
     }

     identity preference {
       base df-election-methods;
       description
         "Выбор на основе предпочтения. С PE связываются предпочтение
          при выборе DF в сегменте Ethernet (ES). Конкретный алгоритм
          выбора (например, наименьшего или наибольшего значния)
          указывается сигнализацией в плоскости управления.";
     }

     identity es-redundancy-mode {
       description
         "Базовое отождествление для режимов резервирования ES.";
     }

     identity single-active {
       base es-redundancy-mode;
       description
         "Режим Single-Active (активен один) для данного ES.";
       reference
         "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 14.1.1";
     }

     identity all-active {
       base es-redundancy-mode;
       description
         "Режим All-Active (активны все) для данного ES.";
       reference
         "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 14.1.2";
     }

     /* Основной контейнер сегмента Ethernet */

     container ethernet-segments {
       description
         "Контейнер верхнего уровня для ESI.";
       list ethernet-segment {
         key "name";
         description
           "Список ESI.";
         leaf name {
           type string;
           description
             "Имя сегмента Ethernet (ES) для однозначного указания ES.";
         }
         leaf esi-type {
           type identityref {
             base esi-type;
           }
           default "esi-type-0-operator";
           description
             "T - тип идентификатора сегмента Ethernet (Ethernet Segment 
              Identifier или ESI) — 1-октетное поле (старший октет), 
              задающее формат оставшихся 9 октетов (значение ESI).";
           reference
             "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 5";
         }
         choice esi-choice {
           description
             "Выбор из нескольких типов сегмента Ethernet.
              ESI типа 0: задаётся оператором напрямую.
              ESI типа 1: должен применяться автоматический режим.
              ESI типа 2: должен применяться автоматический режим.
              ESI типа 3: автоматический режим или прямое назначение.
              ESI типа 4: автоматический режим или прямое назначение.
              ESI типа 5: автоматический режим или прямое назначение.;
           case directly-assigned {
             description
               "Явное задание значения ESI.";
             leaf ethernet-segment-identifier {
               type yang:hex-string {
                 length "29";
               }
               description
                 "10-октетное значение ESI.";
             }
           }
           case auto-assigned {
             description
               "ESI назначается автоматически.";
             container esi-auto {
               description
                 "ESI назначается автоматически .";
               choice auto-mode {
                 description
                   "Режим автоматического назначения ESI с указанием или
                    без указания пула для выбора значения ESI. Сервер
                    автоматически выбирает значение auto-assigned-ESI и
                    применять его при работе.";
                 case from-pool {
                   leaf esi-pool-name {
                     type string;
                     description
                       "Автоматический выбор из пула ESI-pool-name.";
                   }
                 }
                 case full-auto {
                   leaf auto {
                     type empty;
                     description
                       "Полностью автоматическое назначение ESI.";
                   }
                 }
               }
               leaf auto-ethernet-segment-identifier {
                 type yang:hex-string {
                   length "29";
                 }
                 config false;
                 description
                   "Значение автоматически заданного ESI.";
               }
             }
           }
         }
         leaf esi-redundancy-mode {
           type identityref {
             base es-redundancy-mode;
           }
           description
             "Режим резервирования ES.";
           reference
             "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 14.1";
         }
         container df-election {
           description
             "Контейнер верхнего уровня для свойств метода выбора DF.";
           leaf df-election-method {
             type identityref {
               base df-election-methods;
             }
             default "default-7432";
             description
               "задаёт метод выбора DF.";
             reference
               "RFC 8584: Framework for Ethernet VPN Designated
                          Forwarder Election Extensibility";
           }
           leaf revertive {
             when "derived-from-or-self(../df-election-method, "
                + "'preference')" {
               description
                 "Найденное значение применимо лишь для 
                  предпочтительного метода.";
             }
             type boolean;
             default "true";
             description
               "По умолчанию процедура выбора DF запускается при отказах
                PE в соответствии с заданными предпочтениями. Этот режим
                называется извлечением (revertive). Он может не подойти
                для некоторых случаев, например, когда оператор хочет 
                поддерживать новый DF даже при восстановлении прежнего.
                В этом случае режим называется non-revertive и его можно 
                задать, установив для листа revertive значение false.";
             reference
               "RFC 8584: Framework for Ethernet VPN Designated
                          Forwarder Election Extensibility,
                          Section 1.3.2";
           }
           leaf election-wait-time {
             type uint32;
             units "seconds";
             default "3";
             description
               "Таймер ожидания DF.";
             reference
               "RFC 8584: Framework for Ethernet VPN Designated
                          Forwarder Election Extensibility";
           }
         }
         leaf split-horizon-filtering {
           type boolean;
           description
             "Управляет фильтром расщепления горизонта (split-horizon). 
              Включается значением true.

              Для фильтрации split-horizon каждый широковещательный,
              неопознанный индивидуальный или групповой (BUM) пакет,
              исходящий не от DF PE, инкапсулируется с меткой MPLS,
              указывающей исходный сегмент ES.";
           reference
             "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 8.3";
         }
         container pbb {
           description
             "Параметры моста магистрали провайдера (PBB).";
           reference
             "IEEE 802.1ah: Provider Backbone Bridges";
           leaf backbone-src-mac {
             type yang:mac-address;
             description
               "PE, подключённые к одному CE, должны применять общий
                адрес магистрали провайдера (B-MAC) в режиме All-Active.";
             reference
               "RFC 7623: Provider Backbone Bridging Combined with
                          Ethernet VPN (PBB-EVPN), Section 6.2.1.1";
           }
         }
         list member {
           key "ne-id interface-id";
           description
             "Список членов ES.";
           leaf ne-id {
             type string;
             description
               "Идентификатор элемента сети с настроенным ES внутри
                сети сервис-провайдера.";
           }
           leaf interface-id {
             type string;
             description
               "Идентификатор интерфейса узла.";
           }
         }
       }
     }
   }
   <CODE ENDS>

8.4. L2NM

Модуль YANG ietf-l2vpn-ntw использует типы, определённые в [RFC6991], [RFC9181], [RFC8294], [IEEE802.1Qcp].

   <CODE BEGINS> file "ietf-l2vpn-ntw@2022-09-20.yang"
   module ietf-l2vpn-ntw {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw";
     prefix l2vpn-ntw;

     import ietf-inet-types {
       prefix inet;
       reference
         "RFC 6991: Common YANG Data Types, Section 4";
     }
     import ietf-yang-types {
       prefix yang;
       reference
         "RFC 6991: Common YANG Data Types, Section 3";
     }
     import ietf-vpn-common {
       prefix vpn-common;
       reference
         "RFC 9181: A Common YANG for Data Model for Layer 2
                    and Layer 3 VPNs";
     }
     import iana-bgp-l2-encaps {
       prefix iana-bgp-l2-encaps;
       reference
         "RFC 9291: A YANG Network Data Model for Layer 2 VPNs.";
     }
     import iana-pseudowire-types {
       prefix iana-pw-types;
       reference
         "RFC 9291: A YANG Network Data Model for Layer 2 VPNs.";
     }
     import ietf-ethernet-segment {
       prefix l2vpn-es;
       reference
         "RFC 9291: A YANG Network Data Model for Layer 2 VPNs.";
     }
     import ietf-routing-types {
       prefix rt-types;
       reference
         "RFC 8294: Common YANG Data Types for the Routing Area";
     }
     import ieee802-dot1q-types {
       prefix dot1q-types;
       reference
         "IEEE Std 802.1Qcp: Bridges and Bridged Networks--
                             Amendment 30: YANG Data Model";
     }

     organization
       "IETF OPSA (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> 

        Editor:    Samier Barguil
                  <mailto:samier.barguilgiraldo.ext@telefonica.com> 

        Author:    Oscar Gonzalez de Dios
                  <mailto:oscar.gonzalezdedios@telefonica.com>"; 

     description
       "Этот модуль YANG определяет модель сети для услуг L2 VPN.

        Авторские права (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 9291, где правовые
        аспекты приведены более полно.";

     revision 2022-09-20 {
       description
         "Исходная версия.";
       reference
         "RFC 9291: A YANG Network Data Model for Layer 2 VPNs.";
     }

     /* Функции (свойства) */

     feature oam-3ah {
       description
         "Указывает поддержку OAM 802.3ah.";
       reference
         "IEEE Std 802.3ah: Media Access Control Parameters, Physical
                            Layers, and  Management Parameters for
                            Subscriber Access Networks";
     }

     /* Идентификаторы (отождествления) */

     identity evpn-service-interface-type {
       description
         "Базовый идентификатор типа интерфейса службы EVPN.";
     }

     identity vlan-based-service-interface {
       base evpn-service-interface-type;
       description
         "Интерфейс службы на основе VLAN.";
       reference
         "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 6.1";
     }

     identity vlan-bundle-service-interface {
       base evpn-service-interface-type;
       description
         "Интерфейс службы с группой VLAN (bundle).";
       reference
         "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 6.2";
     }

     identity vlan-aware-bundle-service-interface {
       base evpn-service-interface-type;
       description
         "Интерфейс групповой (bundle) службы с поддержкой VLAN.";
       reference
         "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 6.3";
     }

     identity mapping-type {
       base vpn-common:multicast-gp-address-mapping;
       description
         "Идентификатор типа отображения multicast-группы.";
     }

     identity loop-prevention-type {
       description
         "Идентификатор предотвращения петель.";
     }

     identity shut {
       base loop-prevention-type;
       description
         "Тип защиты Shut.";
     }

     identity trap {
       base loop-prevention-type;
       description
         "Тип защиты Trap.";
     }

     identity color-type {
       description
         "Указание цветовых типов. Тип связывается с кадром службы
          для указания соответствия профилю QoS.";
     }

     identity green {
       base color-type;
       description
         "Зеленый тип - кадры, соответствующие согласованной (committed)
          в профиле пропускной способности скорости.";
     }

     identity yellow {
       base color-type;
       description
         "Желтый тип - кадры, выходящие за предел согласованной 
          в профиле пропускной способности скорости, но не превышающие
          избыточную (excess) скорость.";
     }

     identity red {
       base color-type;
       description
         "Красный тип - кадры, выходящие за пределы согласованной и
          избыточной скорости в профиле пропускной способности.";
     }

     identity t-ldp-pw-type {
       description
         "Тип псевдопровода (PW) T-LDP.";
     }

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

     identity vpls-type {
       base t-ldp-pw-type;
       description
         "t-ldp-pw-type для виртуальной частной ЛВС (VPLS).";
       reference
         "RFC 4762: Virtual Private LAN Service (VPLS) Using Label
                    Distribution Protocol (LDP) Signaling, Section 6.1";
     }
     identity hvpls {
       base t-ldp-pw-type;
       description
         "t-ldp-pw-type для иерахических частных виртуальных ЛВС 
          (H-VPLS).";
       reference
         "RFC 4762: Virtual Private LAN Service (VPLS) Using Label
                    Distribution Protocol (LDP) Signaling, Section 10";
     }

     identity lacp-mode {
       description
         "Режим LACP.";
     }

     identity lacp-active {
       base lacp-mode;
       description
         "Активный режим LACP, где автоматическое согласование скорости
          вызывается созданием соединения Ethernet с другой стороной.";
     }

     identity lacp-passive {
       base lacp-mode;
       description
         "Пассивный режим LACP, где конечная точка не инициирует 
          согласование, а лишь отвечает на пакеты LACP от другой стороны
          (например, полудуплексный или полнодуплексный режим).";
     }

     identity pm-type {
       description
         "Тип мониторинга производительности.";
     }

     identity loss {
       base pm-type;
       description
         "Мониторинг производительности путём измерения потерь.";
     }

     identity delay {
       base pm-type;
       description
         "Мониторинг производительности путём измерения задержки.";
     }

     identity mac-learning-mode {
       description
         "Режим обучения MAC.";
     }

     identity data-plane {
       base mac-learning-mode;
       description
         "MAC-адреса пользователей изучаются по широковещанию ARP.";
     }

     identity control-plane {
       base mac-learning-mode;
       description
         " MAC-адреса пользователей анонсируются через EVPN-BGP.";
     }

     identity mac-action {
       description
         "Базовое отождествление действия MAC.";
     }

     identity drop {
       base mac-action;
       description
         "Действие MAC по отбрасыванию пакета.";
     }

     identity flood {
       base mac-action;
       description
         "Действие MAC по лавинной рассылке пакета.";
     }

     identity warning {
       base mac-action;
       description
         "Действие MAC по по записи предупреждения в журнал.";
     }
     identity precedence-type {
       description
         "Тип резервирования. Служба может быть создана с основной
          или вторичной сигнализацией.";
     }

     identity primary {
       base precedence-type;
       description
         "Указывает основной доступ в VPN.";
     }

     identity secondary {
       base precedence-type;
       description
         "Указывает вторичный (резервный) доступ в VPN .";
     }

     identity ldp-pw-type {
       description
         "Указывает разрешенный тип псевдопроводов (PW) на базе LDP.";
       reference
         "RFC 4762: Virtual Private LAN Service (VPLS) Using
                    Label Distribution Protocol (LDP)
                    Signaling, Section 6.1.1";
     }

     identity ethernet {
       base ldp-pw-type;
       description
         "Тип PW Ethernet.";
     }

     identity ethernet-tagged {
       base ldp-pw-type;
       description
         "Тип PW Ethernet с тегами.";
     }

     /* Определения типов */

     typedef ccm-priority-type {
       type uint8 {
         range "0..7";
       }
       description
         "3-битовое значение приоритета в теге VLAN при его наличии в
          переданном кадре. Приоритет пропорционален значению.";
     }

     /* Группировки */

     grouping cfm-802 {
       description
         "Группировка для атрибутов 802.1ag CFM.";
       reference
         "IEEE Std 802.1ag: Virtual Bridged Local Area Networks
                            Amendment 5: Connectivity Fault Management";
       leaf maid {
         type string;
         description
           "Идентификатор ассоциации поддержки (MAID).";
       }
       leaf mep-id {
         type uint32;
         description
           "Идентификатор конечной точки локальной группы поддержки (MEP).";
       }
       leaf mep-level {
         type uint32;
         description
           "Уровень MEP.";
       }
       leaf mep-up-down {
         type enumeration {
           enum up {
             description
               "MEP активна.";
           }
           enum down {
             description
               "MEP отключена.";
           }
         }
         default "up";
         description
           "MEP активна/отключена.";
       }
       leaf remote-mep-id {
         type uint32;
         description
           "Идентификатор удалённой MEP.";
       }
       leaf cos-for-cfm-pdus {
         type uint32;
         description
           "Класс обслуживания для CFM PDU.";
       }
       leaf ccm-interval {
         type uint32;
         units "milliseconds";
         default "10000";
         description
           "Интервал сообщений проверки непрерывности (CCM).";
       }
       leaf ccm-holdtime {
         type uint32;
         units "milliseconds";
         default "35000";
         description
           "Время удержания CCM.";
       }
       leaf ccm-p-bits-pri {
         type ccm-priority-type;
         description
           "Параметр приоритета для CCM, передаваемых MEP.";
       }
     }

     grouping y-1731 {
       description
         "Группировка для Y-1731";
       reference
         "ITU-T G.8013/Y.1731:  Operations, administration and
                                maintenance (OAM) functions and
                                mechanisms for Ethernet-based
                                networks";
       list y-1731 {
         key "maid";
         description
           "Список настроенных экземпляров Y-1731.";
         leaf maid {
           type string;
           description
             "MAID.";
         }
         leaf mep-id {
           type uint32;
           description
             "Идентификатор локальной MEP.";
         }
         leaf pm-type {
           type identityref {
             base pm-type;
           }
           default "delay";
           description
             "Типы мониторинга производительности.";
         }
         leaf remote-mep-id {
           type uint32;
           description
             "Идентификатор удаленной MEP.";
         }
         leaf message-period {
           type uint32;
           units "milliseconds";
           default "10000";
           description
             "Интервал между сообщениями OAM.";
         }
         leaf measurement-interval {
           type uint32;
           units "seconds";
           description
             "Интервал измерений для статистики.";
         }
         leaf cos {
           type uint32;
           description
             "Класс обслуживания.";
         }
         leaf loss-measurement {
           type boolean;
           default "false";
           description
             "Включено (true) или отключено (false) измерение потерь.";
         }
         leaf synthetic-loss-measurement {
           type boolean;
           default "false";
           description
             "Включено (true) или отключено (false) синтетическое 
              измерение потерь.";
         }
         container delay-measurement {
           description
             "Контейнер для измерения задержки.";
           leaf enable-dm {
             type boolean;
             default "false";
             description
              "Включено (true) или отключено (false) измерение задержки.";
           }
           leaf two-way {
             type boolean;
             default "false";
             description
               "Измерение двухсторонней (true) или односторонней (false)
                задержки.";
           }
         }
         leaf frame-size {
           type uint32;
           units "bytes";
           description
             "Указывает размер кадров.";
         }
         leaf session-type {
           type enumeration {
             enum proactive {
               description
                 "Упреждающий (проактивный) режим.";
             }
             enum on-demand {
               description
                 "Режим по запросу (On-demand).";
             }
           }
           default "on-demand";
           description
             "Указывает тип сессии.";
         }
       }
     }

     grouping parameters-profile {
       description
         "Контейнер для параметров службы.";
       leaf local-autonomous-system {
         type inet:as-number;
         description
           "Локальный номер AS (ASN).";
       }
       leaf svc-mtu {
         type uint32;
         units "bytes";
         description
           "L2 MTU для службы. Называется также максимальным 
            передаваемым блоком и максимальным размером кадра.";
       }
       leaf ce-vlan-preservation {
         type boolean;
         description
           "Сохраняет CE VLAN ID со входа на выход, т. е. тег CE VLAN в 
            выходном кадре идентичен тегу в вызвавшем его входном кадре.
            При включённой на сайте привязке all-to-one это применяется
            ка всем входным кадрам службы. При отключённой привязке 
            all-to-one представление применяется к входным кадрам службы
            с тегами CE VLAN ID от 1 до 4094.";
       }
       leaf ce-vlan-cos-preservation {
         type boolean;
         description
           "Представление CE VLAN CoS. Биты кода приоритета (PCP) в теге
            CE VLAN выходного кадра идентичны битам входного кадра,
            вызвавшего этот выходной кадр службы.";
       }
       leaf control-word-negotiation {
         type boolean;
         description
           "Включает (true) или отключает (false) слово управления.";
         reference
           "RFC 8077: Pseudowire Setup and Maintenance
                      Using the Label Distribution Protocol (LDP),
                      Section 7";
       }
       container mac-policies {
         description
           "Контейнер правил MAC.";
         container mac-addr-limit {
           description
             "Контейнер настройки предельного числа MAC-адресов.";
           leaf limit-number {
             type uint16;
             description
               "Максимальное число MAC-адресов, изучаемых от клиента, 
                для одного экземпляра службы. По умолчанию это 2, когда
                эта группировка применяется на уровне службы.";
           }
           leaf time-interval {
             type uint32;
             units "milliseconds";
             description
               "Время устаревания MAC-адреса. По умолчанию это 300, 
                когда эта группировка применяется на уровне службы.";
           }
           leaf action {
             type identityref {
               base mac-action;
             }
             description
               "Действие при достижении верхнего предела — отбрасывание,
                лавинная рассылка, запись предупреждения в журнал (без
                отбрасывания пакета). По умолчанию применяется warning,
                когда эта группировка применяется на уровне службы.";
           }
         }
         container mac-loop-prevention {
           description
             "Контейнер для предотвращения петель MAC.";
           leaf window {
             type uint32;
             units "seconds";
             description
               "Интервал времени, в течение которого события переноса MAC
                обнаруживаются и проверяются. По умолчанию установлено
                180, когда группировка применяется на уровне службы.";
           }
           leaf frequency {
             type uint32;
             description
               "Число фактов обнаружения дубликатов MAC с интервале 
                времени window с добавлением MAC-адреса в список 
                дубликатов. По умолчанию установлено значение 5,
                когда группировка применяется на уровне службы.";
           }
           leaf retry-timer {
             type uint32;
             units "seconds";
             description
               "Таймер повтора, по истечении которого MAC-адрес
                исключается из MAC-VRF.";
           }
           leaf protection-type {
             type identityref {
               base loop-prevention-type;
             }
             description
               "Тип защиты. По умолчанию применяется trap,
                когда группировка применяется на уровне службы.";
           }
         }
       }
       container multicast {
         if-feature "vpn-common:multicast";
         description
           "Контейнер групповой передачи.";
         leaf enabled {
           type boolean;
           default "false";
           description
             "Разрешает групповую передачу.";
         }
         container customer-tree-flavors {
           description
             "Тип деревьев, применяемый клиентом.";
           leaf-list tree-flavor {
             type identityref {
               base vpn-common:multicast-tree-type;
             }
             description
               "Тип multicast-дерева для использования.";
           }
         }
       }
     }

     grouping bandwidth-parameters {
       description
         "Группировка для параметров пропускной способности.";
       leaf cir {
         type uint64;
         units "bps";
         description
           "Согласованная скорость (Committed Information Rate или CIR).
            Максимальное число битов, которые порт может принять или 
            передать через интерфейс за 1 секунду.";
       }
       leaf cbs {
         type uint64;
         units "bytes";
         description
           "Согласованный размер пиков (Committed Burst Size или CBS) 
            для контроля пиков трафика. Трафик меньше заданного CIR
            накапливает кридит, пока тот не достигнет заданного CBS.";
       }
       leaf eir {
         type uint64;
         units "bps";
         description
           "Избыточная скорость (Excess Information Rate или EIR), т. е.
            доставка даров, выходящих за пределы соглашения об уровне
            обслуживания (Service Level Agreement или SLA). Трафик может
            ограничиваться значением EIR.";
       }
       leaf ebs {
         type uint64;
         units "bytes";
         description
           "Избыточный размер пиков (Excess Burst Size или EBS). 
            Пропускная способность для пиков трафика выше EBS может
            быть ограничена значением, накопленным в периоды, когда
            трафик, выделенный по правилу EIR не используется.";
       }
       leaf pir {
         type uint64;
         units "bps";
         description
           "Пиковая скорость (Peak Information Rate или PIR), т. е. 
            разрешена максимальная скорость доставки кадров. Это
            значение не превышает CIR + EIR.";
       }
       leaf pbs {
         type uint64;
         units "bytes";
         description
           "Максимальный размер пиков (Peak Burst Size или PBS).";
       }
     }

     /* Основной контейнер L2NM */

     container l2vpn-ntw {
       description
         "Контейнер для L2NM.";
       container vpn-profiles {
         description
           "Контейнер для профилей VPN.";
         uses vpn-common:vpn-profile-cfg;
       }
       container vpn-services {
         description
           "Контейнер для служб L2VPN.";
         list vpn-service {
           key "vpn-id";
           description
             "Контейнер для службы VPN.";
           uses vpn-common:vpn-description;
           leaf parent-service-id {
             type vpn-common:vpn-id;
             description
               "Указатель на родительскую службу, вызвавшую L2NM.";
           }
           leaf vpn-type {
             type identityref {
               base vpn-common:service-type;
             }
             must "not(derived-from-or-self(current(), "
                + "'vpn-common:l3vpn'))" {
               error-message "L3VPN is only applicable in L3NM.";
             }
             description
               "Тип сервиса.";
           }
           leaf vpn-service-topology {
             type identityref {
               base vpn-common:vpn-topology;
             }
             description
               "Определяет топологию сервиса (any-to-any, hub-spoke).";
           }
           leaf bgp-ad-enabled {
             type boolean;
             description
               "Указывает, включено ли автообнаружение BGP.";
           }
           leaf signaling-type {
             type identityref {
               base vpn-common:vpn-signaling-type;
             }
             description
               "Тип сигнализации VPN.";
           }
           container global-parameters-profiles {
             description
               "Контейнер для списка профилей глобальных параметров.";
             list global-parameters-profile {
               key "profile-id";
               description
                 "Список профилей глобальных параметров.";
               leaf profile-id {
                 type string;
                 description
                   "Идентификатор профиля глобальных параметров.";
               }
               uses vpn-common:route-distinguisher;
               uses vpn-common:vpn-route-targets;
               uses parameters-profile;
             }
           }
           container underlay-transport {
             description
               "Контейнер для базового транспорта.";
             uses vpn-common:underlay-transport;
           }
           uses vpn-common:service-status;
           container vpn-nodes {
             description
               "Набор узлов VPN, вовлечённых в L2NM.";
             list vpn-node {
               key "vpn-node-id";
               description
                 "Контейнер для узлов VPN.";
               leaf vpn-node-id {
                 type vpn-common:vpn-id;
                 description
                   "Идентификатор узла VPN.";
               }
               leaf description {
                 type string;
                 description
                   "Текстовое описание узла VPN.";
               }
               leaf ne-id {
                 type string;
                 description
                   "Идентификатор элемента сети, где развернут узел VPN.
                    Однозначно указывает элемент сети в административном
                    домене.";
               }
               leaf role {
                 type identityref {
                   base vpn-common:role;
                 }
                 default "vpn-common:any-to-any-role";
                 description
                   "Роль узла в VPN.";
               }
               leaf router-id {
                 type rt-types:router-id;
                 description
                   "32-битовое значение с разделением точками, служащее
                    для однозначного указания узла в AS.";
               }
               container active-global-parameters-profiles {
                 description
                   "Контейнер для списка профилей глобальных параметров.";
                 list global-parameters-profile {
                   key "profile-id";
                   description
                     "Список активных профилей глобальных параметров.";
                   leaf profile-id {
                     type leafref {
                       path "../../../../../global-parameters-profiles"
                          + "/global-parameters-profile/profile-id";
                     }
                     description
                       "Глобальный профиль, заданный на уровне службы.";
                   }
                   uses parameters-profile;
                 }
               }
               uses vpn-common:service-status;
               container bgp-auto-discovery {
                 when "../../../bgp-ad-enabled = 'true'" {
                   description
                     "Применяется лишь при включённом автообнаружении
                      BGP.";
                 }
                 description
                   "Для автоматического обнаружения применяется BGP.";
                 choice bgp-type {
                   description
                     "Выбор для типа BGP.";
                   case l2vpn-bgp {
                     description
                       "Контейнер для BGP L2VPN.";
                     leaf vpn-id {
                       type vpn-common:vpn-id;
                       description
                         "Идентификатор VPN, служащий для унификации
                          компонентов данной VPN при автообнаружении.";
                       reference
                         "RFC 6624: Layer 2 Virtual Private Networks
                                    Using BGP for Auto-Discovery and
                                    Signaling";
                     }
                   }
                   case evpn-bgp {
                     description
                       "Вариант EVPN.";
                     leaf evpn-type {
                       type leafref {
                         path "../../../../vpn-type";
                       }
                       description
                         "Тип EVPN.";
                     }
                     leaf auto-rt-enable {
                       type boolean;
                       default "false";
                       description
                         "Управляет автоматическим созданием RT 
                          на основе ASN и Ethernet Tag ID.";
                       reference
                         "RFC 7432: BGP MPLS-Based Ethernet VPN,
                                    Section 7.10.1";
                     }
                     leaf auto-route-target {
                       when "../auto-rt-enable = 'true'" {
                         description
                           "Используется лишь при включённом auto-RD.";
                       }
                       type rt-types:route-target;
                       config false;
                       description
                         "Автоматически заданное значение RT.";
                     }
                   }
                 }
                 uses vpn-common:route-distinguisher;
                 uses vpn-common:vpn-route-targets;
               }
               container signaling-option {
                 description
                   "Контейнер для сигнализации L2VPN.";
                 leaf advertise-mtu {
                   type boolean;
                   description
                     "Управляет анонсированием MTU.";
                   reference
                     "RFC 4667: Layer 2 Virtual Private Network (L2VPN)
                                Extensions for Layer 2 Tunneling
                                Protocol (L2TP), Section 4.3";
                 }
                 leaf mtu-allow-mismatch {
                   type boolean;
                   description
                     "Значение true разрешает несоответствие MTU.";
                   reference
                     "RFC 4667: Layer 2 Virtual Private Network (L2VPN)
                                Extensions for Layer 2 Tunneling
                                Protocol (L2TP), Section 4.3";
                 }
                 leaf signaling-type {
                   type leafref {
                     path "../../../../signaling-type";
                   }
                   description
                     "Тип сигнализации VPN.";
                 }
                 choice signaling-option {
                   description
                     "Выбор для опции сигнализации.";
                   case bgp {
                     description
                       "BGP применяется как сигнальный протокол.";
                     choice bgp-type {
                       description
                         "Выбор для типа BGP.";
                       case l2vpn-bgp {
                         description
                           "Контейнер для BGP L2VPN.";
                         leaf ce-range {
                           type uint16;
                           description
                             "Задаёт число удалённых CE, с которыми это
                              устройство CE может взаимодействовать в 
                              контексте VPN.";
                           reference
                             "RFC 6624: Layer 2 Virtual Private Networks
                                        Using BGP for Auto-Discovery and
                                        Signaling";
                         }
                         leaf pw-encapsulation-type {
                           type identityref {
                             base iana-bgp-l2-encaps:bgp-l2-encaps-type;
                           }
                           description
                             "Тип инкапсуляции PW.";
                         }
                         container vpls-instance {
                           when "derived-from-or-self(../../../../"
                              + "vpn-type, 'vpn-common:vpls')" {
                             description
                               "Применимо лишь для VPLS.";
                           }
                           description
                             "Экземпляр VPLS.";
                           leaf vpls-edge-id {
                             type uint16;
                             description
                               "Идентификатор VPLS Edge (VE ID), применяемый
                                при настройке того же VE ID для PE.";
                             reference
                               "RFC 4761: Virtual Private LAN Service
                                          (VPLS) Using BGP for Auto-
                                          Discovery and Signaling,
                                          Section 3.5";
                           }
                           leaf vpls-edge-id-range {
                             type uint16;
                             description
                               "Диапазон VE ID в службе VPLS, для контроля
                                размера блока меток, анонсируемого в 
                                контексте экземпляра VPLS.";
                             reference
                               "RFC 4761: Virtual Private LAN Service
                                          (VPLS) Using BGP for Auto-
                                          Discovery and Signaling";
                           }
                         }
                       }
                       case evpn-bgp {
                         description
                           "Применяется для EVPN.";
                         leaf evpn-type {
                           type leafref {
                             path "../../bgp-auto-discovery/evpn-type";
                           }
                           description
                             "Тип EVPN.";
                         }
                         leaf service-interface-type {
                           type identityref {
                             base evpn-service-interface-type;
                           }
                           description
                             "Тип интерфейса службы EVPN.";
                         }
                         container evpn-policies {
                           description
                             "Набор правил EVPN, таких как связанные
                              с обработкой MAC-адресов.";
                           leaf mac-learning-mode {
                             type identityref {
                               base mac-learning-mode;
                             }
                             description
                               "Плоскость для анонсов MAC-адресов.";
                           }
                           leaf ingress-replication {
                             type boolean;
                             description
                               "Включает (true) или отключает (false)
                                репликацию на входе.";
                             reference
                               "RFC 7432: BGP MPLS-Based Ethernet VPN,
                                          Section 8.3.1.1";
                           }
                           leaf p2mp-replication {
                             type boolean;
                             description
                               "Включает (true) или отключает (false)
                                репликацию P2MP";
                             reference
                               "RFC 7432: BGP MPLS-Based Ethernet VPN,
                                          Section 8.3.1.2";
                           }
                           container arp-proxy {
                             if-feature "vpn-common:ipv4";
                             description
                               "Контейнер верхнего уровня для ARP proxy.";
                             leaf enable {
                               type boolean;
                               default "false";
                               description
                                 "Включает (true) или отключает (false)
                                  ARP proxy.";
                               reference
                                 "RFC 7432: BGP MPLS-Based Ethernet VPN,
                                            Section 10";
                             }
                             leaf arp-suppression {
                               type boolean;
                               default "false";
                               description
                                 "Включает (true) или отключает (false)
                                  подавление ARP.";
                               reference
                                 "RFC 7432: BGP MPLS-Based Ethernet
                                            VPN";
                             }
                             leaf ip-mobility-threshold {
                               type uint16;
                               description
                                 "Для данного хоста (как определено его
                                  адресом IP) возможен переход из одного
                                  ES в другой. Порог мобильности IP
                                  задаёт число переносов IP, которые
                                  детектируются для данного IP-адреса
                                  в рамках порога обнаружения до того,
                                  как адрес IP будет сочтён дубликатом.
                                  По достижении порога обновления для
                                  адреса IP подавляются.";
                             }
                             leaf duplicate-ip-detection-interval {
                               type uint16;
                               units "seconds";
                               description
                                 "Интервал времени для обнаружения
                                  дубликатов адресов IP. В течение этого
                                  интервала допускается перемещение 
                                  хостов с дублированием адресов.";
                             }
                           }
                           container nd-proxy {
                             if-feature "vpn-common:ipv6";
                             description
                               "Контейнер верхнего уровня для ND proxy.";
                             leaf enable {
                               type boolean;
                               default "false";
                               description
                                 "Включает (true) или отключает (false)
                                  ND proxy.";
                               reference
                                 "RFC 7432: BGP MPLS-Based Ethernet VPN,
                                            Section 10";
                             }
                             leaf nd-suppression {
                               type boolean;
                               default "false";
                               description
                                 "Включает (true) или отключает (false)
                                  подавление сообщений обнаружения
                                  соседей (Neighbor Discovery или ND).
                                  Метод подавления ND служит для
                                  сокращения числа пакетов ND лавинно
                                  рассылаемых в отдельных сегментах
                                  между хостами, подключёнными к одному
                                  логическому коммутатору.";
                             }
                             leaf ip-mobility-threshold {
                               type uint16;
                               description
                                 "Данный хост (определённый его адресом
                                  IP) может перейти в другой ES.
                                  Порог мобильности IP задаёт число
                                  переносов IP, обнаруженных для данного
                                  IP-адреса в рамках порога обнаружения
                                  до того, как адрес будет сочтён
                                  дубликатом IP. По достижении порога
                                  обновления адресов IP подавляются.";
                             }
                             leaf duplicate-ip-detection-interval {
                               type uint16;
                               units "seconds";
                               description
                                 "Интервал времени для обнаружения 
                                  дубликатов IP. В течение этого
                                  интервала допускается перемещение 
                                  хостов с дублированием адресов.";
                             }
                           }
                           leaf underlay-multicast {
                             type boolean;
                             default "false";
                             description
                               "Включает (true) или отключает (false)
                                базовую групповую передачу.";
                           }
                           leaf flood-unknown-unicast-suppression {
                             type boolean;
                             default "false";
                             description
                               "Включает (true) или отключает (false)
                                подавление лавинной рассылки по
                                неизвестным индивидуальным адресам.";
                           }
                           leaf vpws-vlan-aware {
                             type boolean;
                             default "false";
                             description
                               "Включает (true) или отключает (false)
                                сервис VPWS с поддержкой VLAN для
                                экземпляра EVPN.";
                           }
                           container bum-management {
                             description
                               "Управление BUM.";
                             leaf discard-broadcast {
                               type boolean;
                               default "false";
                               description
                                 "true для отбрасывания широковещания.";
                             }
                             leaf discard-unknown-multicast {
                               type boolean;
                               default "false";
                               description
                                 "true для отбрасывания неизвестных.";
                                  multicast.";
                             }
                             leaf discard-unknown-unicast {
                               type boolean;
                               default "false";
                               description
                                 "true для отбрасывания неизвестных.";
                                  unicast.";
                             }
                           }
                           container pbb {
                             when "derived-from-or-self("
                                + "../../evpn-type, 'pbb-evpn')" {
                               description
                                 "Применимо лишь к PBB EVPN.";
                             }
                             description
                               "Контейнер параметров PBB.";
                             reference
                               "IEEE 802.1ah: Provider Backbone
                                              Bridges";
                             leaf backbone-src-mac {
                               type yang:mac-address;
                               description
                                 "Адрес B-MAC.";
                               reference
                                 "RFC 7623: Provider Backbone Bridging
                                            Combined with Ethernet VPN
                                            (PBB-EVPN), Section 8.1";
                             }
                           }
                         }
                       }
                     }
                   }
                   container ldp-or-l2tp {
                     description
                       "Контейнер для выбора PW по сигналам LDP или L2TP.";
                     leaf agi {
                       type rt-types:route-distinguisher;
                       description
                         "Идентификатор устройства подключения (VPLS-Id).";
                       reference
                         "RFC 4667: Layer 2 Virtual Private Network
                                    (L2VPN) Extensions for Layer 2
                                    Tunneling Protocol (L2TP),
                                    Section 4.3
                          RFC 4762: Virtual Private LAN Service (VPLS)
                                    Using Label Distribution Protocol
                                    (LDP) Signaling, Section 6.1.1";
                     }
                     leaf saii {
                       type uint32;
                       description
                         "Идентификатор SAII.";
                       reference
                         "RFC 4667: Layer 2 Virtual Private Network
                                    (L2VPN) Extensions for Layer 2
                                    Tunneling Protocol (L2TP),
                                    Section 3";
                     }
                     list remote-targets {
                       key "taii";
                       description
                         "Список разрешённых AII и партнёров.";
                       reference
                         "RFC 4667: Layer 2 Virtual Private Network
                                    (L2VPN) Extensions for Layer 2
                                    Tunneling Protocol (L2TP),
                                    Section 5";
                       leaf taii {
                         type uint32;
                         description
                           "Идентификатор TAI.";
                         reference
                           "RFC 4667: Layer 2 Virtual Private Network
                                      (L2VPN) Extensions for Layer 2
                                      Tunneling  Protocol (L2TP),
                                      Section 3";
                       }
                       leaf peer-addr {
                         type inet:ip-address;
                         description
                           "IP-адрес партнёрского узла пересылки.";
                       }
                     }
                     choice ldp-or-l2tp {
                       description
                         "Выбор PW с сигнализацией LDP или L2TP.";
                       case ldp {
                         description
                           "Контейнер для конфигураций T-LDP PW.";
                         leaf t-ldp-pw-type {
                           type identityref {
                             base t-ldp-pw-type;
                           }
                           description
                             "Тип T-LDP PW.";
                         }
                         leaf pw-type {
                           type identityref {
                             base ldp-pw-type;
                           }
                           description
                             "Тип инкапсуляции PW.";
                           reference
                             "RFC 4762: Virtual Private LAN Service
                                        (VPLS) Using Label Distribution
                                        Protocol (LDP) Signaling,
                                        Section 6.1.1";
                         }
                         leaf pw-description {
                           type string;
                           description
                             "Понятное человеку описание интерфейса, 
                              которое может применяться при связи
                              с удаленным партнером.";
                           reference
                             "RFC 4762: Virtual Private LAN Service
                                        (VPLS) Using Label Distribution
                                        Protocol (LDP) Signaling,
                                        Section 6.1.1";
                         }
                         leaf mac-addr-withdraw {
                           type boolean;
                           description
                             "Разрешает (true) или запрещает (false) 
                              отзыв MAC-адреса.";
                           reference
                             "RFC 4762: Virtual Private LAN Service
                                        (VPLS) Using Label Distribution
                                        Protocol (LDP) Signaling,
                                        Section 6.2";
                         }
                         list pw-peer-list {
                           key "peer-addr vc-id";
                           description
                             "Список устройств подключения (AC) и 
                              привязок PW.";
                           leaf peer-addr {
                             type inet:ip-address;
                             description
                               "IP-адрес партнёра.";
                           }
                           leaf vc-id {
                             type string;
                             description
                               "Метка VC для идентификации PW.";
                           }
                           leaf pw-priority {
                             type uint32;
                             description
                               "Указывает приоритет PW. Большее значение
                                pw-priority задаёт предпочтение PW.";
                           }
                         }
                         container qinq {
                           when "derived-from-or-self("
                              + "../t-ldp-pw-type, 'hvpls')" {
                             description
                               "Применимо лишь к T-LDP PW типа H-VPLS.";
                           }
                           description
                             "Контейнер для QinQ.";
                           leaf s-tag {
                             type dot1q-types:vlanid;
                             mandatory true;
                             description
                               "S-TAG.";
                           }
                           leaf c-tag {
                             type dot1q-types:vlanid;
                             mandatory true;
                             description
                               "C-TAG.";
                           }
                         }
                       }
                       case l2tp {
                         description
                           "Контейнер для L2TP PW.";
                         leaf router-id {
                           type rt-types:router-id;
                           description
                             "32-битовое значение с разделением точками
                              для однозначного указания узла в сети
                              сервис-провайдера.";
                           reference
                             "RFC 4667: Layer 2 Virtual Private Network
                                        (L2VPN) Extensions for Layer 2
                                        Tunneling Protocol (L2TP),
                                        Section 4.2";
                         }
                         leaf pseudowire-type {
                           type identityref {
                             base iana-pw-types:iana-pw-types;
                           }
                           description
                             "Тип инкапсуляции.";
                           reference
                             "RFC 4667: Layer 2 Virtual Private Network
                                        (L2VPN) Extensions for Layer 2
                                        Tunneling Protocol (L2TP),
                                        Section 4.2";
                         }
                       }
                     }
                   }
                 }
               }
               container vpn-network-accesses {
                 description
                   "Основной контейнер для доступа в сеть VPN.";
                 list vpn-network-access {
                   key "id";
                   description
                     "Список доступов в VPN.";
                   leaf id {
                     type vpn-common:vpn-id;
                     description
                       "Идентификатор доступа в сеть.";
                   }
                   leaf description {
                     type string;
                     description
                       "Текстовое описание доступа в сеть VPN.";
                   }
                   leaf interface-id {
                     type string;
                     description
                       "Указывает физический или логический интерфейс.";
                   }
                   leaf active-vpn-node-profile {
                     type leafref {
                       path "../../.."
                          + "/active-global-parameters-profiles"
                          + "/global-parameters-profile/profile-id";
                     }
                     description
                       "Идентификатор профиля активного экземпляра VPN.";
                   }
                   uses vpn-common:service-status;
                   container connection {
                     description
                       "Контейнер носителя (bearer) и AC.";
                     leaf l2-termination-point {
                       type string;
                       description
                         "Ссылка на локальную точку завершения L2,
                          такую как субинтерфейс L2.";
                     }
                     leaf local-bridge-reference {
                       type string;
                       description
                         "Ссылка на локальный мост, для предоставления, 
                          например, реализациям, требующим внутренний
                          мост. Это может быть локальный домен мостов.";
                     }
                     leaf bearer-reference {
                       if-feature "vpn-common:bearer-reference";
                       type string;
                       description
                         "Внутренняя ссылка сервис-провайдера для 
                          указания носителя, связанного с VPN.";
                     }
                     container encapsulation {
                       description
                         "Контейнер для инкапсуляции L2.";
                       leaf encap-type {
                         type identityref {
                           base vpn-common:encapsulation-type;
                         }
                         default "vpn-common:priority-tagged";
                         description
                           "Интерфейс с тегами. По умолчанию имеет тип
                            priority-tagged.";
                       }
                       container dot1q {
                         when "derived-from-or-self(../encap-type, "
                            + "'vpn-common:dot1q')" {
                           description
                             "Применимо лишь к интерфейсам с 
                              тегами dot1q.";
                         }
                         description
                           "Интерфейс с тегами.";
                         leaf tag-type {
                           type identityref {
                             base vpn-common:tag-type;
                           }
                           default "vpn-common:c-vlan";
                           description
                             "Тип тега. По умолчанию c-vlan.";
                         }
                         leaf cvlan-id {
                           type dot1q-types:vlanid;
                           description
                             "Идентификатор VLAN.";
                         }
                         container tag-operations {
                           description
                             "Задаёт правила манипуляция с тегами для
                              этого доступа в VPN. Это набор действий по
                              вставке, удалению или перезаписи тегов
                              VLAN 802.1Q. Эти операции указываются для
                              направления от CE к PE. По умолчанию
                              ориентация тегов симметрична, поэтому для
                              направления от PE к CE предполагаются
                              обратные операции.";
                           choice op-choice {
                             description
                               "Правила перезаписи тегов для доступа в
                                сеть VPN.";
                             leaf pop {
                               type empty;
                               description
                                 "Втолкнуть внешний тег.";
                             }
                             leaf push {
                               type empty;
                               description
                                 "Выталкивает 1 или 2 тега, заданных
                                  листьями tag-1 и tag-2. Предполагается,
                                  что в отсутствие каких-либо правил для
                                  установки PCP применяется значение 0.";
                             }
                             leaf translate {
                               type empty;
                               description
                                 "Транслирует внешний тег в 1 или 2 тега.
                                  Биты PCP сохраняются.";
                             }
                           }
                           leaf tag-1 {
                             when 'not(../pop)';
                             type dot1q-types:vlanid;
                             description
                               "Первый тег для выталкивания или 
                                трансляции, который в результате операции
                                будет использоваться как внешний.";
                           }
                           leaf tag-1-type {
                             type dot1q-types:dot1q-tag-type;
                             default "dot1q-types:s-vlan";
                             description
                               "Конкретный тип тега 802.1Q из tag-1.";
                           }
                           leaf tag-2 {
                             when '(../translate)';
                             type dot1q-types:vlanid;
                             description
                               "Второй тег для трансляции.";
                           }
                           leaf tag-2-type {
                             type dot1q-types:dot1q-tag-type;
                             default "dot1q-types:c-vlan";
                             description
                               "Конкретный тип тега 802.1Q из tag-2.";
                           }
                         }
                       }
                       container priority-tagged {
                         when "derived-from-or-self(../encap-type, "
                            + "'vpn-common:priority-tagged')" {
                           description
                             "Применимо лишь к теговым интерфейсам типа
                              priority-tagged.";
                         }
                         description
                           "Контейнер тегов приоритета.";
                         leaf tag-type {
                           type identityref {
                             base vpn-common:tag-type;
                           }
                           default "vpn-common:c-vlan";
                           description
                             "Тип тега. По умолчанию c-vlan.";
                         }
                       }
                       container qinq {
                         when "derived-from-or-self(../encap-type, "
                            + "'vpn-common:qinq')" {
                           description
                             "Применимо лишь к теговым интерфейсам типа
                              QinQ.";
                         }
                         description
                           "Includes QinQ parameters.";
                         leaf tag-type {
                           type identityref {
                             base vpn-common:tag-type;
                           }
                           default "vpn-common:s-c-vlan";
                           description
                             "Тип тега. По умолчанию s-c-vlan.";
                         }
                         leaf svlan-id {
                           type dot1q-types:vlanid;
                           mandatory true;
                           description
                             "Идентификатор S-VLAN.";
                         }
                         leaf cvlan-id {
                           type dot1q-types:vlanid;
                           mandatory true;
                           description
                             "Идентификатор C-VLAN.";
                         }
                         container tag-operations {
                           description
                             "Правила действий с тегами для доступа в VPN,
                              задающие набор операция по вставке, удалению
                              и перезаписи тегов VLAN 802.1Q. Операции 
                              указываются для направления от CE к PE. По 
                              умолчанию ориентация тегов симметрична и
                              направления от PE к CE предполагаются
                              обратные операции.";
                           choice op-choice {
                             description
                               "Правила перезаписи тегов для доступа в 
                                сеть VPN.";
                             leaf pop {
                               type uint8 {
                                 range "1|2";
                               }
                               description
                                 "Вталкивает 1 или 2 тега в зависимости 
                                  от указанного значения pop.";
                             }
                             leaf push {
                               type empty;
                               description
                                 "Выталкивает 1 или 2 тега, заданных
                                  листьями tag-1 и tag-2. Предполагается,
                                  что в отсутствие каких-либо правил для
                                  установки PCP применяется значение 0.";
                             }
                             leaf translate {
                               type uint8 {
                                 range "1|2";
                               }
                               description
                                 "Транслирует 1 или 2 внешних тега. 
                                  Биты PCP сохраняются.

                                  Поддерживаются операции:
                                  - трансляция 1 с представленным листом
                                    tag-1 - транслируется лишь внешний 
                                    тег в значение tag-1.

                                  - трансляция 2 с представленными 
                                    листьями tag-1 и tag-2 — внешний и 
                                    внутренний тег транслируются в tag-1 
                                    и tag-2, соответственно
                                    respectively.

                                  - трансляция 2 представленным листом
                                    tag-1 - внешний тег вталкивается, а
                                    внутренний транслируется в tag-1.";
                             }
                           }
                           leaf tag-1 {
                             when 'not(../pop)';
                             type dot1q-types:vlanid;
                             description
                               "Первый тег для выталкивания или 
                                трансляции. В результате операции тег
                                будет использоваться как внешний.";
                           }
                           leaf tag-1-type {
                             type dot1q-types:dot1q-tag-type;
                             default "dot1q-types:s-vlan";
                             description
                               "Конкретный тип 802.1Q для tag-1.";
                           }
                           leaf tag-2 {
                             when 'not(../pop)';
                             type dot1q-types:vlanid;
                             description
                               "Второй тег для выталкивания или 
                                трансляции.";
                           }
                           leaf tag-2-type {
                             type dot1q-types:dot1q-tag-type;
                             default "dot1q-types:c-vlan";
                             description
                               "Конкретный тип 802.1Q для tag-2.";
                           }
                         }
                       }
                     }
                     container lag-interface {
                       if-feature "vpn-common:lag-interface";
                       description
                         "Контейнер для конфигурации атрибутов 
                          интерфейса LAG.";
                       leaf lag-interface-id {
                         type string;
                         description
                           "Контейнер интерфейса LAG.";
                       }
                       container lacp {
                         description
                           "Контейнер для LACP.";
                         leaf lacp-state {
                           type boolean;
                           default "false";
                           description
                             "Управляет включением LACP.";
                         }
                         leaf mode {
                           type identityref {
                             base lacp-mode;
                           }
                           description
                             "Режим LACP.";
                         }
                         leaf speed {
                           type uint32;
                           units "mbps";
                           default "10";
                           description
                             "Скорость LACP - это нижнее принятое по
                              умолчанию значения, наследуемое из L2SM.";
                         }
                         leaf mini-link-num {
                           type uint32;
                           description
                             "Минимальное число активных каналов, 
                              для активации композитного канала.";
                         }
                         leaf system-id {
                           type yang:mac-address;
                           description
                             "System ID, используемый LACP.";
                         }
                         leaf admin-key {
                           type uint16;
                           description
                             "Значение ключа, используемое для 
                              композитного интерфейса.";
                         }
                         leaf system-priority {
                           type uint16 {
                             range "0..65535";
                           }
                           default "32768";
                           description
                             "Приоритет LACP для системы.";
                         }
                         container member-link-list {
                           description
                             "Контейнер для списка каналов (Member).";
                           list member-link {
                             key "name";
                             description
                               "Канал группы (Member link).";
                             leaf name {
                               type string;
                               description
                                 "Имя канала (Member link).";
                             }
                             leaf speed {
                               type uint32;
                               units "mbps";
                               default "10";
                               description
                                 "Скорость порта.";
                             }
                             leaf mode {
                               type identityref {
                                 base vpn-common:neg-mode;
                               }
                               description
                                 "Режим согласования.";
                             }
                             leaf link-mtu {
                               type uint32;
                               units "bytes";
                               description
                                 "Размер MTU на канале.";
                             }
                             container oam-802.3ah-link {
                               if-feature "oam-3ah";
                               description
                                 "Контейнер для OAM 802.3ah на канале.";
                               leaf enable {
                                 type boolean;
                                 default "false";
                                 description
                                   "Поддержка канала OAM 802.3ah.";
                               }
                             }
                           }
                         }
                         leaf flow-control {
                           type boolean;
                           default "false";
                           description
                             "Управление потоком данных.";
                         }
                         leaf lldp {
                           type boolean;
                           default "false";
                           description
                             "Поддержка протокола LLDP.";
                         }
                       }
                       container split-horizon {
                         description
                           "Поддержка Split Horizon включена.";
                         leaf group-name {
                           type string;
                           description
                             "Имя группы Split Horizon.";
                         }
                       }
                     }
                   }
                   choice signaling-option {
                     description
                       "Выбор опций сигнализации.";
                     case bgp {
                       description
                         "BGP в качестве сигнального протокола.";
                       choice bgp-type {
                         description
                           "Выбор типа BGP.";
                         case l2vpn-bgp {
                           description
                             "Контейнер для BGP L2VPN.";
                           leaf ce-id {
                             type uint16;
                             description
                               "Указывает CE внутри VPN.";
                             reference
                               "RFC 6624: Layer 2 Virtual Private
                                          Networks Using BGP for
                                          Auto-Discovery and Signaling";
                           }
                           leaf remote-ce-id {
                             type uint16;
                             description
                               "Идентификатор удалённого CE.";
                           }
                           container vpls-instance {
                             when "derived-from-or-self(../../../../../"
                                + "vpn-type, 'vpn-common:vpls')" {
                               description
                                 "Применим лишь для VPLS.";
                             }
                             description
                               "Экземпляр VPLS.";
                             leaf vpls-edge-id {
                               type uint16;
                               description
                                 "Идентификатор VPLS Edge (VE ID).";
                               reference
                                 "RFC 4761: Virtual Private LAN Service
                                            (VPLS) Using BGP for Auto-
                                            Discovery and Signaling,
                                            Section 3.2.1";
                             }
                           }
                         }
                         case evpn-bgp {
                           description
                             "Применяется для EVPN.";
                           leaf df-preference {
                             type uint16;
                             default "32767";
                             description
                               "2-октетное значение предпочтения PE при
                                выборе DF в ES. Применимо лишь для 
                                метода preference-based.";
                             reference
                               "RFC 8584: Framework for Ethernet VPN
                                          Designated Forwarder Election
                                          Extensibility";
                           }
                           container vpws-service-instance {
                             when "derived-from-or-self(../../../../../"
                                + "vpn-type, 'vpn-common:vpws-evpn')" {
                               description
                                 "Применим лишь для EVPN-VPWS.";
                             }
                             description
                               "Локальный и удалённый экземпляр VSI.";
                             reference
                               "RFC 8214: Virtual Private Wire Service
                                          Support in Ethernet VPN";
                             choice local-vsi-choice {
                               description
                                 "Выбор для назначения локального VSI.";
                               case directly-assigned {
                                 description
                                   "Явно заданное локальное значение VSI.";
                                 leaf local-vpws-service-instance {
                                   type uint32 {
                                     range "1..16777215";
                                   }
                                   description
                                     "Заданное локальное значение VSI.";
                                 }
                               }
                               case auto-assigned {
                                 description
                                   "Автоназначение локального VSI.";
                                 container local-vsi-auto {
                                   description
                                     "Локальный VSI задан автоматически.";
                                   choice auto-mode {
                                     description
                                       "Режим автоназначения локального
                                        VSI (с указанием или без указания
                                        пула для выбора VSI). В обоих
                                        случаях сервер будет автоматически
                                        задавать и применять VSI.";
                                     case from-pool {
                                       leaf vsi-pool-name {
                                         type string;
                                         description
                                           "Автоматическое назначение из
                                            данного пула.";
                                       }
                                     }
                                     case full-auto {
                                       leaf auto {
                                         type empty;
                                         description
                                           "Полностью автоматическое
                                            назначение локального VSI.";
                                       }
                                     }
                                   }
                                   leaf auto-local-vsi {
                                     type uint32 {
                                       range "1..16777215";
                                     }
                                     config false;
                                     description
                                       "Автоматически заданное значение
                                        локального VSI.";
                                   }
                                 }
                               }
                             }
                             choice remote-vsi-choice {
                               description
                                 "Выбор для удалённого VSI.";
                               case directly-assigned {
                                 description
                                   "Явное назначение удалённого VSI.";
                                 leaf remote-vpws-service-instance {
                                   type uint32 {
                                     range "1..16777215";
                                   }
                                   description
                                     "Значение удалённого VSI.";
                                 }
                               }
                               case auto-assigned {
                                 description
                                   "Автоназначение удалённого VSI.";
                                 container remote-vsi-auto {
                                   description
                                     "Удалённый VSI задан автоматически.";
                                   choice auto-mode {
                                     description
                                       "Режим автоназначения удаленного
                                        VSI (с указанием или без указания
                                        пула для выбора VSI). В обоих
                                        случаях сервер будет автоматически
                                        задавать и применять VSI.";
                                     case from-pool {
                                       leaf vsi-pool-name {
                                         type string;
                                         description
                                           "Автоназначение из этого пула.";
                                       }
                                     }
                                     case full-auto {
                                       leaf auto {
                                         type empty;
                                         description
                                           "Полностью автоматическое 
                                            назначение удалённого VSI.";
                                       }
                                     }
                                   }
                                   leaf auto-remote-vsi {
                                     type uint32 {
                                       range "1..16777215";
                                     }
                                     config false;
                                     description
                                       "Автоматически заданное значение
                                        удалённого VSI.";
                                   }
                                 }
                               }
                             }
                           }
                         }
                       }
                     }
                   }
                   list group {
                     key "group-id";
                     description
                       "Список group-id.";
                     leaf group-id {
                       type string;
                       description
                         "group-id группы, к относится доступ в сеть.";
                     }
                     leaf precedence {
                       type identityref {
                         base precedence-type;
                       }
                       description
                         "Задаёт избыточность транспортной сети.";
                     }
                     leaf ethernet-segment-identifier {
                       type l2vpn-es:es-ref;
                       description
                         "Ссылка на ESI, связанный с доступом в VPN.";
                     }
                   }
                   container ethernet-service-oam {
                     description
                       "Контейнер для OAM службы Ethernet.";
                     leaf md-name {
                       type string;
                       description
                         "Имя домена поддержки.";
                     }
                     leaf md-level {
                       type uint8;
                       description
                         "Уровень домена поддержки.";
                     }
                     container cfm-802.1-ag {
                       description
                         "Контейнер для конфигурации 802.1ag CFM.";
                       list n2-uni-c {
                         key "maid";
                         description
                           "Список UNI-N в UNI-C.";
                         uses cfm-802;
                       }
                       list n2-uni-n {
                         key "maid";
                         description
                           "Список UNI-N в UNI-N.";
                         uses cfm-802;
                       }
                     }
                     uses y-1731;
                   }
                   container service {
                     description
                       "Контейнер для службы.";
                     leaf mtu {
                       type uint32;
                       units "bytes";
                       description
                         "L2 MTU, называется также максимальным блоком
                          передачи или максимальным размером кадра.";
                     }
                     container svc-pe-to-ce-bandwidth {
                       if-feature "vpn-common:inbound-bw";
                       description
                         "Пропускная способность на входе с точки зрения
                          сайта клиента или на выходе с точки зрения
                          провайдера. Отметим, что в L2SM для этого
                          применяется input-bandwidth.";
                       list pe-to-ce-bandwidth {
                         key "bw-type";
                         description
                           "Список узлов данных для полосы от PE к CE.";
                         leaf bw-type {
                           type identityref {
                             base vpn-common:bw-type;
                           }
                           description
                             "Тип пропускной способности.";
                         }
                         choice type {
                           description
                             "Выбор по типу пропускной способности.";
                           case per-cos {
                             description
                               "Пропускная способность на CoS.";
                             list cos {
                               key "cos-id";
                               description
                                 "Список классов обслуживания (CoS).";
                               leaf cos-id {
                                 type uint8;
                                 description
                                   "Идентификатор CoS, указываемый DSCP
                                    или значением CE-CLAN CoS (802.1p) в
                                    кадре сервиса.";
                                 reference
                                   "IEEE Std 802.1Q: Bridges and Bridged
                                                     Networks";
                               }
                               uses bandwidth-parameters;
                             }
                           }
                           case other {
                             description
                               "Иные типы пропускной способности.";
                             uses bandwidth-parameters;
                           }
                         }
                       }
                     }
                     container svc-ce-to-pe-bandwidth {
                       if-feature "vpn-common:outbound-bw";
                       description
                         "Выходная пропускная способность с точки 
                          зрения сайта или полоса выгрузки от CE к PE.
                          Отметим, что в L2SM для этого служит
                          output-bandwidth.";
                       list ce-to-pe-bandwidth {
                         key "bw-type";
                         description
                           "Список значений полосы от CE к PE.";
                         leaf bw-type {
                           type identityref {
                             base vpn-common:bw-type;
                           }
                           description
                             "Тип пропускной способности.";
                         }
                         choice type {
                           description
                             "Выбор по типу пропускной способности.";
                           case per-cos {
                             description
                               "Пропускная способность на CoS.";
                             list cos {
                               key "cos-id";
                               description
                                 "Список классов обслуживания CoS).";
                               leaf cos-id {
                                 type uint8;
                                 description
                                   "Идентификатор CoS, указываемый DSCP
                                    или значением CE-CLAN CoS (802.1p) в
                                    кадре сервиса.";
                                 reference
                                   "IEEE Std 802.1Q: Bridges and Bridged
                                                     Networks";
                               }
                               uses bandwidth-parameters;
                             }
                           }
                           case other {
                             description
                               "Не знающие CoS типы пропускной способности.";
                             uses bandwidth-parameters;
                           }
                         }
                       }
                     }
                     container qos {
                       if-feature "vpn-common:qos";
                       description
                         "Конфигурация QoS.";
                       container 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 {
                               container match-flow {
                                 description
                                   "Критерии соответствия потоку.";
                                 leaf dscp {
                                   type inet:dscp;
                                   description
                                     "Значение DSCP.";
                                 }
                                 leaf dot1q {
                                   type uint16;
                                   description
                                     "Сопоставление 802.1Q - тег VLAN, 
                                      добавленный в кадр.";
                                   reference
                                     "IEEE Std 802.1Q: Bridges and
                                                       Bridged
                                                       Networks";
                                 }
                                 leaf pcp {
                                   type uint8 {
                                     range "0..7";
                                   }
                                   description
                                     "Код приоритета (PCP).";
                                 }
                                 leaf src-mac-address {
                                   type yang:mac-address;
                                   description
                                     "MAC-адрес источника.";
                                 }
                                 leaf dst-mac-address {
                                   type yang:mac-address;
                                   description
                                     "MAC-адрес получателя.";
                                 }
                                 leaf color-type {
                                   type identityref {
                                     base color-type;
                                   }
                                   description
                                     "Цветовой тип.";
                                 }
                                 leaf any {
                                   type empty;
                                   description
                                     "Разрешено все.";
                                 }
                               }
                             }
                             case match-application {
                               leaf match-application {
                                 type identityref {
                                   base vpn-common:customer-application;
                                 }
                                 description
                                   "Задаёт приложение для сопоставления.";
                               }
                             }
                           }
                           leaf target-class-id {
                             type string;
                             description
                               "Указание CoS (для администратора).";
                           }
                         }
                       }
                       container qos-profile {
                         description
                           "Конфигурация профиля QoS.";
                         list qos-profile {
                           key "profile";
                           description
                             "Профиль QoS (стандартный или свой).";
                           leaf profile {
                             type leafref {
                               path "/l2vpn-ntw/vpn-profiles"
                                  + "/valid-provider-identifiers"
                                  + "/qos-profile-identifier/id";
                             }
                             description
                               "Профиль QoS для использования.";
                           }
                           leaf direction {
                             type identityref {
                               base vpn-common:qos-profile-direction;
                             }
                             default "vpn-common:both";
                             description
                               "Направление для применения профиля QoS.";
                           }
                         }
                       }
                     }
                     container mac-policies {
                       description
                         "Контейнер для связанных с MAC правил.";
                       list access-control-list {
                         key "name";
                         description
                           "Контейнер для списков ACL.";
                         leaf name {
                           type string;
                           description
                             "Имя ACL.";
                         }
                         leaf-list src-mac-address {
                           type yang:mac-address;
                           description
                             "MAC-адрес источника.";
                         }
                         leaf-list src-mac-address-mask {
                           type yang:mac-address;
                           description
                             "Маска MAC для источника.";
                         }
                         leaf-list dst-mac-address {
                           type yang:mac-address;
                           description
                             "MAC-адрес получателя.";
                         }
                         leaf-list dst-mac-address-mask {
                           type yang:mac-address;
                           description
                             "Маска MAC для получателя.";                         }
                         leaf action {
                           type identityref {
                             base mac-action;
                           }
                           default "drop";
                           description
                             "Задаёт действие для фильтра.";
                         }
                         leaf rate-limit {
                           when "derived-from-or-self(../action, "
                              + "'flood')" {
                             description
                               "Ограничение скорости применимо лишь
                                для восприятия соответствующего кадра.";
                           }
                           type decimal64 {
                             fraction-digits 2;
                           }
                           units "bytes per second";
                           description
                             "Ограничение скорости трафика.";
                         }
                       }
                       container mac-loop-prevention {
                         description
                           "Контейнер для предотвращения петель MAC.";
                         leaf window {
                           type uint32;
                           units "seconds";
                           default "180";
                           description
                             "Таймер обнаружения переноса MAC.";
                         }
                         leaf frequency {
                           type uint32;
                           default "5";
                           description
                             "Число обнаружений дублирования MAC,
                              при котором фиксируется событие и
                              адрес MAC добавляется в таблицу
                              дубликатов.";
                         }
                         leaf retry-timer {
                           type uint32;
                           units "seconds";
                           description
                             "Таймер повтора, по истечении которого
                              дубликат MAC удаляется из MAC-VRF.";
                         }
                         leaf protection-type {
                           type identityref {
                             base loop-prevention-type;
                           }
                           default "trap";
                           description
                             "Тип защиты";
                         }
                       }
                       container mac-addr-limit {
                         description
                           "Контейнер для настройки предела MAC-Addr.";
                         leaf limit-number {
                           type uint16;
                           default "2";
                           description
                             "Максимальное число MAC-адресов, узнанных
                              от клиента для 1 экземпляра службы.";
                         }
                         leaf time-interval {
                           type uint32;
                           units "milliseconds";
                           default "300";
                           description
                             "Время устаревания MAC-адреса.";
                         }
                         leaf action {
                           type identityref {
                             base mac-action;
                           }
                           default "warning";
                           description
                             "Действие при достижении верхнего предела - 
                              отбрасывание, лавинная рассылка или запись
                              предупреждения (без отбрасывания пакета).";
                         }
                       }
                     }
                     container broadcast-unknown-unicast-multicast {
                       description
                         "Контейнер для настройки BUM.";
                       leaf multicast-site-type {
                         type enumeration {
                           enum receiver-only {
                             description
                               "На сайте имеются лишь получатели.";
                           }
                           enum source-only {
                             description
                               "На сайте имеются лишь источники.";
                           }
                           enum source-receiver {
                             description
                               " На сайте имеются источники и получатели.";
                           }
                         }
                         default "source-receiver";
                         description
                           "Тип multicast-сайта.";
                       }
                       list multicast-gp-address-mapping {
                         key "id";
                         description
                           "Список отображений портов на группы.";
                         leaf id {
                           type uint16;
                           description
                             "Уникальный идентификатор отображения.";
                         }
                         leaf vlan-id {
                           type uint32;
                           mandatory true;
                           description
                             "VLAN ID для multicast-группы.";
                         }
                         leaf mac-gp-address {
                           type yang:mac-address;
                           mandatory true;
                           description
                             "MAC-адрес multicast-группы.";
                         }
                         leaf port-lag-number {
                           type uint32;
                           description
                             "Порт/LAG, относящийся к multicast-группе.";
                         }
                       }
                       leaf bum-overall-rate {
                         type uint64;
                         units "bps";
                         description
                           "Общая скорость для BUM.";
                       }
                     }
                   }
                 }
               }
             }
           }
         }
       }
     }
   }
   <CODE ENDS>

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

Заданные в этом документе модули 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-l2vpn-ntw и ietf-ethernet-segment определено множество узлов данных, доступных для записи/создания/удаления (т. е. по умолчанию задано config true). Эти узлы могут оказаться чувствительными или уязвимыми в некоторых сетевых средах. Операции записи (например, edit-config) и удаления для таких узлов данных без подобающей защиты и аутентификации могут оказывать негативное влияние на работу сети. Ниже указаны субдеревья и узлы данных модулей ietf-l2vpn-ntw и ietf-ethernet-segment с присущими им уязвимостями.

vpn-profiles

Этот контейнер включает набор деликатных сведений, влияющих на предоставление услуг L3VPN. Атакующий с доступом к таким узлам сможет, например, менять правила маршрутизации и QoS, а также параметры шифрования. Эти данные определены с тегами nacm:default-deny-write [RFC9181].

ethernet-segments и vpn-services

Атакующий с возможностью доступа к таким узлам может предпринять различные атаки, такие как удаление запущенных служб L2VPN или полное прерывание трафика клиента. Кроме того, злоумышленник может поменять атрибуты работающей службы (например, QoS, пропускную способность) или ES, что приведёт к некорректной работе службы и нарушению SLA. Атакующий также может попытаться создать службу L2VPN, добавить доступ в сеть и перехватить или перенаправить трафик на неуполномоченный узел. Помимо использования NACM для предотвращения несанкционированного доступа, такие действия можно обнаружить за счёт адекватного мониторинга и отслеживания изменений в конфигурации сети.

Некоторые из доступных для чтения узлов данных в модуле ietf-l2vpn-ntw могут оказаться чувствительными или уязвимыми в некоторых сетевых средах. Важно контролировать доступ к чтению (например, get, get-config, notification) таких узлов. Ниже указаны субдеревья и узлы данных модулей с присущими им уязвимостями.

customer-name и ip-connection

Атакующий может получить связанные с приватностью данные, пригодные для отслеживания клиентов. Раскрытие таких сведений может считаться нарушением соглашения о доверии между провайдером и клиентом.

Модули iana-bgp-l2-encaps и iana-pseudowire-types указывают типы инкапсуляции и псевдопроводов. Эти идентификаторы предназначены для ссылок из других модулей YANG и сами по себе не раскрывают каких-либо узлов, которые доступны для записи или содержать предназначенные лишь для чтения (read-only) состояния или RPC.

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

10.1. Регистрация модулей YANG

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

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

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

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

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

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

   name:  iana-bgp-l2-encaps
   namespace:  urn:ietf:params:xml:ns:yang:iana-bgp-l2-encaps
   maintained by IANA:  Y
   prefix:  iana-bgp-l2-encaps
   reference:  RFC 9291

   name:  iana-pseudowire-types
   namespace:  urn:ietf:params:xml:ns:yang:iana-pseudowire-types
   maintained by IANA:  Y
   prefix:  iana-pw-types
   reference:  RFC 9291

   name:  ietf-ethernet-segment
   namespace:  urn:ietf:params:xml:ns:yang:ietf-ethernet-segment
   maintained by IANA:  N
   prefix:  l2vpn-es
   reference:  RFC 9291

   name:  ietf-l2vpn-ntw
   namespace:  urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw
   maintained by IANA:  N
   prefix:  l2vpn-ntw
   reference:  RFC 9291

10.2. Типы инкапсуляции BGP L2

Этот документ задаёт исходную версию поддерживаемого IANA модуля YANG iana-bgp-l2-encaps (8.1. Модуль IANA для типов инкапсуляции BGP L2). Агентство IANA добавило приведённый ниже текст в реестр YANG Module Names.

Типы инкапсуляции BGP L2 недопустимо напрямую добавлять в модуль iana-bgp-l2-encaps, они должны добавляться в реестр BGP Layer 2 Encapsulation Types [IANA-BGP-L2].

При добавлении типа инкапсуляции L2 в реестр BGP Layer 2 Encapsulation Types должен добавляться оператор identity в модуль iana-bgp-l2-encaps. Имя identity указывается символами нижнего регистра и содержит имя инкапсуляции, представленного в описании. В оператор identity следует включать указанные ниже субоператоры.

   "base":        содержит bgp-l2-encaps-type.
   "description": копия описания из реестра.
   "reference":   копия ссылки из реестра с указанием названия документа.

В модуле нет невыделенных и зарезервированных значений.

При обновлении модуля iana-bgp-l2-encaps должен добавляться оператор revision с уникальной датой выпуска, указанной перед имеющимися операторами revision.

Агентство IANA добавило в [IANA-BGP-L2] приведённый ниже текст.

При обновлении реестра должен обновляться модуль YANG iana-bgp-l2-encaps, как указано в RFC 9291.

10.3. Типы псевдопроводов

Этот документ задаёт исходную версию поддерживаемого IANA модуля YANG iana-pseudowire-types (8.2. Модуль IANA для типов псевдопроводов). Агентство IANA добавило приведённый ниже текст в реестр YANG Module Names.

Типы псевдопроводов MPLS недопустимо напрямую добавлять в модуль iana-pseudowire-types, они должны добавляться в реестр MPLS Pseudowire Types [IANA-PW-TYPES].

При добавлении псевдопровода в реестр iana-pseudowire-types должен добавляться оператор identity в модуль iana-pseudowire-types. Имя identity указывается символами нижнего регистра и содержит имя инкапсуляции, представленного в описании. В оператор identity следует включать указанные ниже субоператоры.

   "base":        содержит iana-pw-types.
   "description": копия описания из реестра.
   "reference":   копия ссылки из реестра с указанием названия документа.

В модуле нет невыделенных и зарезервированных значений.

При обновлении модуля iana-pseudowire-types должен добавляться оператор revision с уникальной датой выпуска, указанной перед имеющимися операторами revision.

Агентство IANA добавило в [IANA-PW-TYPES] приведённый ниже текст.

При обновлении реестра должен обновляться модуль YANG iana-pseudowire-types, как указано в RFC 9291.

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

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

[IANA-BGP-L2] IANA, “BGP Layer 2 Encapsulation Types”, <https://www.iana.org/assignments/bgp-parameters>.

[IANA-PW-TYPES] IANA, “MPLS Pseudowire Types Registry”, <http://www.iana.org/assignments/pwe3-parameters/>.

[IEEE-802-1ag] IEEE, “IEEE Standard for Local and Metropolitan Area Networks – Virtual Bridged Local Area Networks Amendment 5: Connectivity Fault Management”, DOI 10.1109/IEEESTD.2007.4431836, IEEE Std 802.1ag-2007, December 2007, <https://doi.org/10.1109/IEEESTD.2007.4431836>.

[IEEE802.1Qcp] IEEE, “IEEE Standard for Local and metropolitan area networks–Bridges and Bridged Networks–Amendment 30: YANG Data Model”, DOI 10.1109/IEEESTD.2018.8467507, IEEE Std 802.1Qcp-2018, September 2018, <https://doi.org/10.1109/IEEESTD.2018.8467507>.

[ITU-T-Y-1731] ITU-T, “Operation, administration and maintenance (OAM) functions and mechanisms for Ethernet-based networks”, ITU-T Recommendation G.8013/Y.1731, August 2015, <https://www.itu.int/rec/T-REC-Y.1731/en>.

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

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

[RFC4446] Martini, L., “IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3)”, BCP 116, RFC 4446, DOI 10.17487/RFC4446, April 2006, <https://www.rfc-editor.org/info/rfc4446>.

[RFC4667] Luo, W., “Layer 2 Virtual Private Network (L2VPN) Extensions for Layer 2 Tunneling Protocol (L2TP)”, RFC 4667, DOI 10.17487/RFC4667, September 2006, <https://www.rfc-editor.org/info/rfc4667>.

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

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

[RFC6074] Rosen, E., Davie, B., Radoaca, V., and W. Luo, “Provisioning, Auto-Discovery, and Signaling in Layer 2 Virtual Private Networks (L2VPNs)”, RFC 6074, DOI 10.17487/RFC6074, January 2011, <https://www.rfc-editor.org/info/rfc6074>.

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

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

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

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

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

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

[RFC8077] Martini, L., Ed. and G. Heron, Ed., “Pseudowire Setup and Maintenance Using the Label Distribution Protocol (LDP)”, STD 84, RFC 8077, DOI 10.17487/RFC8077, February 2017, <https://www.rfc-editor.org/info/rfc8077>.

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

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

[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., and R. Wilton, “Network Management Datastore Architecture (NMDA)”, RFC 8342, DOI 10.17487/RFC8342, March 2018, <https://www.rfc-editor.org/info/rfc8342>.

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

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

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

[RFC8584] Rabadan, J., Ed., Mohanty, S., Ed., Sajassi, A., Drake, J., Nagaraj, K., and S. Sathappan, “Framework for Ethernet VPN Designated Forwarder Election Extensibility”, RFC 8584, DOI 10.17487/RFC8584, April 2019, <https://www.rfc-editor.org/info/rfc8584>.

[RFC9181] Barguil, S., Gonzalez de Dios, O., Ed., Boucadair, M., Ed., and Q. Wu, “A Common YANG Data Model for Layer 2 and Layer 3 VPNs”, RFC 9181, DOI 10.17487/RFC9181, February 2022, <https://www.rfc-editor.org/info/rfc9181>.

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

[BGP-YANG-MODEL] Jethanandani, M., Patel, K., Hares, S., and J. Haas, “BGP YANG Model for Service Provider Networks”, Work in Progress, Internet-Draft, draft-ietf-idr-bgp-model-14, 3 July 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-idr-bgp-model-14>.

[EVPN-PERF-DF] Rabadan, J., Ed., Sathappan, S., Lin, W., Drake, J., and A. Sajassi, “Preference-based EVPN DF Election”, Work in Progress, Internet-Draft, draft-ietf-bess-evpn-pref-df-10, 2 September 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-bess-evpn-pref-df-10>.

[EVPN-YANG] Brissette, P., Ed., Shah, H., Ed., Chen, I., Ed., Hussain, I., Ed., Tiruveedhula, K., Ed., and J. Rabadan, Ed., “Yang Data Model for EVPN”, Work in Progress, Internet-Draft, draft-ietf-bess-evpn-yang-07, 11 March 2019, <https://datatracker.ietf.org/doc/html/draft-ietf-bess-evpn-yang-07>.

[IEEE-802-1ah] IEEE, “IEEE Standard for Local and metropolitan area networks — Virtual Bridged Local Area Networks Amendment 7: Provider Backbone Bridges”, IEEE Std 801.3AH-2008, August 2008, <https://standards.ieee.org/standard/802_1ah-2008.html>.

[IEEE-802-3ah] IEEE, “IEEE Standard for Information technology– Local and metropolitan area networks– Part 3: CSMA/CD Access Method and Physical Layer Specifications Amendment: Media Access Control Parameters, Physical Layers, and Management Parameters for Subscriber Access Networks”, DOI 10.1109/IEEESTD.2004.94617, IEEE Std 802.3AH-2004, September 2004, <https://doi.org/10.1109/IEEESTD.2004.94617>.

[IEEE802.1AX] IEEE, “IEEE Standard for Local and Metropolitan Area Networks–Link Aggregation”, DOI 10.1109/IEEESTD.2020.9105034, IEEE Std 802.1AX-2020, May 2020, <https://doi.org/10.1109/IEEESTD.2020.9105034>.

[IEEE802.1Q] IEEE, “IEEE Standard for Local and Metropolitan Area Network–Bridges and Bridged Networks”, DOI 10.1109/IEEESTD.2018.8403927, IEEE Std 802.1Q-2018, July 2018, <https://doi.org/10.1109/IEEESTD.2018.8403927>.

[IETF-NET-SLICES] Farrel, A., Ed., Drake, J., Ed., Rokui, R., Homma, S., Makhijani, K., Contreras, L. M., and J. Tantsura, “Framework for IETF Network Slices”, Work in Progress, Internet-Draft, draft-ietf-teas-ietf-network-slices-14, 3 August 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-teas-ietf-network-slices-14>.

[MFA] MFA Forum Technical Committee, “The Use of Virtual Trunks for ATM/MPLS Control Plane Interworking Specification”, MFA Forum 9.0.0, February 2006.

[PYANG] “pyang”, November 2020, <https://github.com/mbj4668/pyang>.

[RFC2507] Degermark, M., Nordgren, B., and S. Pink, “IP Header Compression”, RFC 2507, DOI 10.17487/RFC2507, February 1999, <https://www.rfc-editor.org/info/rfc2507>.

[RFC2508] Casner, S. and V. Jacobson, “Compressing IP/UDP/RTP Headers for Low-Speed Serial Links”, RFC 2508, DOI 10.17487/RFC2508, February 1999, <https://www.rfc-editor.org/info/rfc2508>.

[RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., Farinacci, D., Li, T., and A. Conta, “MPLS Label Stack Encoding”, RFC 3032, DOI 10.17487/RFC3032, January 2001, <https://www.rfc-editor.org/info/rfc3032>.

[RFC3545] Koren, T., Casner, S., Geevarghese, J., Thompson, B., and P. Ruddy, “Enhanced Compressed RTP (CRTP) for Links with High Delay, Packet Loss and Reordering”, RFC 3545, DOI 10.17487/RFC3545, July 2003, <https://www.rfc-editor.org/info/rfc3545>.

[RFC3644] Snir, Y., Ramberg, Y., Strassner, J., Cohen, R., and B. Moore, “Policy Quality of Service (QoS) Information Model”, RFC 3644, DOI 10.17487/RFC3644, November 2003, <https://www.rfc-editor.org/info/rfc3644>.

[RFC4448] Martini, L., Ed., Rosen, E., El-Aawar, N., and G. Heron, “Encapsulation Methods for Transport of Ethernet over MPLS Networks”, RFC 4448, DOI 10.17487/RFC4448, April 2006, <https://www.rfc-editor.org/info/rfc4448>.

[RFC4553] Vainshtein, A., Ed. and YJ. Stein, Ed., “Structure-Agnostic Time Division Multiplexing (TDM) over Packet (SAToP)”, RFC 4553, DOI 10.17487/RFC4553, June 2006, <https://www.rfc-editor.org/info/rfc4553>.

[RFC4618] Martini, L., Rosen, E., Heron, G., and A. Malis, “Encapsulation Methods for Transport of PPP/High-Level Data Link Control (HDLC) over MPLS Networks”, RFC 4618, DOI 10.17487/RFC4618, September 2006, <https://www.rfc-editor.org/info/rfc4618>.

[RFC4619] Martini, L., Ed., Kawa, C., Ed., and A. Malis, Ed., “Encapsulation Methods for Transport of Frame Relay over Multiprotocol Label Switching (MPLS) Networks”, RFC 4619, DOI 10.17487/RFC4619, September 2006, <https://www.rfc-editor.org/info/rfc4619>.

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

[RFC4717] Martini, L., Jayakumar, J., Bocci, M., El-Aawar, N., Brayley, J., and G. Koleyni, “Encapsulation Methods for Transport of Asynchronous Transfer Mode (ATM) over MPLS Networks”, RFC 4717, DOI 10.17487/RFC4717, December 2006, <https://www.rfc-editor.org/info/rfc4717>.

[RFC4816] Malis, A., Martini, L., Brayley, J., and T. Walsh, “Pseudowire Emulation Edge-to-Edge (PWE3) Asynchronous Transfer Mode (ATM) Transparent Cell Transport Service”, RFC 4816, DOI 10.17487/RFC4816, February 2007, <https://www.rfc-editor.org/info/rfc4816>.

[RFC4842] Malis, A., Pate, P., Cohen, R., Ed., and D. Zelig, “Synchronous Optical Network/Synchronous Digital Hierarchy (SONET/SDH) Circuit Emulation over Packet (CEP)”, RFC 4842, DOI 10.17487/RFC4842, April 2007, <https://www.rfc-editor.org/info/rfc4842>.

[RFC4863] Martini, L. and G. Swallow, “Wildcard Pseudowire Type”, RFC 4863, DOI 10.17487/RFC4863, May 2007, <https://www.rfc-editor.org/info/rfc4863>.

[RFC4901] Ash, J., Ed., Hand, J., Ed., and A. Malis, Ed., “Protocol Extensions for Header Compression over MPLS”, RFC 4901, DOI 10.17487/RFC4901, June 2007, <https://www.rfc-editor.org/info/rfc4901>.

[RFC5086] Vainshtein, A., Ed., Sasson, I., Metz, E., Frost, T., and P. Pate, “Structure-Aware Time Division Multiplexed (TDM) Circuit Emulation Service over Packet Switched Network (CESoPSN)”, RFC 5086, DOI 10.17487/RFC5086, December 2007, <https://www.rfc-editor.org/info/rfc5086>.

[RFC5087] Stein, Y(J)., Shashoua, R., Insler, R., and M. Anavi, “Time Division Multiplexing over IP (TDMoIP)”, RFC 5087, DOI 10.17487/RFC5087, December 2007, <https://www.rfc-editor.org/info/rfc5087>.

[RFC5143] Malis, A., Brayley, J., Shirron, J., Martini, L., and S. Vogelsang, “Synchronous Optical Network/Synchronous Digital Hierarchy (SONET/SDH) Circuit Emulation Service over MPLS (CEM) Encapsulation”, RFC 5143, DOI 10.17487/RFC5143, February 2008, <https://www.rfc-editor.org/info/rfc5143>.

[RFC5795] Sandlund, K., Pelletier, G., and L-E. Jonsson, “The Robust Header Compression (ROHC) Framework”, RFC 5795, DOI 10.17487/RFC5795, March 2010, <https://www.rfc-editor.org/info/rfc5795>.

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

[RFC6307] Black, D., Ed., Dunbar, L., Ed., Roth, M., and R. Solomon, “Encapsulation Methods for Transport of Fibre Channel Traffic over MPLS Networks”, RFC 6307, DOI 10.17487/RFC6307, April 2012, <https://www.rfc-editor.org/info/rfc6307>.

[RFC7209] Sajassi, A., Aggarwal, R., Uttaro, J., Bitar, N., Henderickx, W., and A. Isaac, “Requirements for Ethernet VPN (EVPN)”, RFC 7209, DOI 10.17487/RFC7209, May 2014, <https://www.rfc-editor.org/info/rfc7209>.

[RFC7267] Martini, L., Ed., Bocci, M., Ed., and F. Balus, Ed., “Dynamic Placement of Multi-Segment Pseudowires”, RFC 7267, DOI 10.17487/RFC7267, June 2014, <https://www.rfc-editor.org/info/rfc7267>.

[RFC7297] Boucadair, M., Jacquenet, C., and N. Wang, “IP Connectivity Provisioning Profile (CPP)”, RFC 7297, DOI 10.17487/RFC7297, July 2014, <https://www.rfc-editor.org/info/rfc7297>.

[RFC7951] Lhotka, L., “JSON Encoding of Data Modeled with YANG”, RFC 7951, DOI 10.17487/RFC7951, August 2016, <https://www.rfc-editor.org/info/rfc7951>.

[RFC8309] Wu, Q., Liu, W., and A. Farrel, “Service Models Explained”, RFC 8309, DOI 10.17487/RFC8309, January 2018, <https://www.rfc-editor.org/info/rfc8309>.

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

[RFC8343] Bjorklund, M., “A YANG Data Model for Interface Management”, RFC 8343, DOI 10.17487/RFC8343, March 2018, <https://www.rfc-editor.org/info/rfc8343>.

[RFC8345] Clemm, A., Medved, J., Varga, R., Bahadur, N., Ananthakrishnan, H., and X. Liu, “A YANG Data Model for Network Topologies”, RFC 8345, DOI 10.17487/RFC8345, March 2018, <https://www.rfc-editor.org/info/rfc8345>.

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

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

[RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, “Handling Long Lines in Content of Internet-Drafts and RFCs”, RFC 8792, DOI 10.17487/RFC8792, June 2020, <https://www.rfc-editor.org/info/rfc8792>.

[RFC8960] Saad, T., Raza, K., Gandhi, R., Liu, X., and V. Beeram, “A YANG Data Model for MPLS Base”, RFC 8960, DOI 10.17487/RFC8960, December 2020, <https://www.rfc-editor.org/info/rfc8960>.

[RFC8969] Wu, Q., Ed., Boucadair, M., Ed., Lopez, D., Xie, C., and L. Geng, “A Framework for Automating Service and Network Management with YANG”, RFC 8969, DOI 10.17487/RFC8969, January 2021, <https://www.rfc-editor.org/info/rfc8969>.

[TE-SERVICE-MAPPING] Lee, Y., Ed., Dhody, D., Ed., Fioccola, G., Wu, Q., Ed., Ceccarelli, D., and J. Tantsura, “Traffic Engineering (TE) and Service Mapping YANG Data Model”, Work in Progress, Internet-Draft, draft-ietf-teas-te-service-mapping-yang-11, 11 July 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-teas-te-service-mapping-yang-11>.

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

[YANG-SAPS] Boucadair, M., Ed., Gonzalez de Dios, O., Barguil, S., Wu, Q., and V. Lopez, “A YANG Network Model for Service Attachment Points (SAPs)”, Work in Progress, Internet-Draft, draft-ietf-opsawg-sap-09, 28 July 2022, <https://datatracker.ietf.org/doc/html/draft-ietf-opsawg-sap-09>.

Приложение A. Примеры

В этом приложении даны некоторые примеры, иллюстрирующие применение L2NM. В последующих параграфах представлено лишь содержимое тел сообщений в нотации JSON [RFC7951]. Для длинных строк применяются переносы, определённые в [RFC8792].

A.1. VPLS на основе BGP

В этом приложении дан пример, иллюстрирующий применение L2NM для управления VPLS на основе BGP. Рассмотрен образец службы VPLS, предоставляемой в архитектуре, показанной на рисунке 23. В соответствии с [RFC4761] предполагается, полная связность (full mesh) между всеми PE. Детали связей не рассматриваются.

                      +-----+   +--------------+   +-----+
         +----+       | PE1 |===|              |===| PE3 |       +----+
         | CE1+-------+     |   |              |   |     +-------+ CE3|
         +----+       +-----+   |              |   +-----+       +----+
                                |     Ядро     |
         +----+       +-----+   |              |   +-----+       +----+
         |CE2 +-------+     |   |              |   |     +-------+ CE4|
         +----+       | PE2 |===|              |===| PE4 |       +----+
                      +-----+   +--------------+   +-----+

Рисунок 23. Пример VPLS.

На рисунке 24 приведён пример тела сообщения для настройки экземпляра VPLS с применением L2NM и протокола BGP для автоматического обнаружения и сигнализации. Для signaling-type задано значение vpn-common:bgp-signaling’.

Здесь и далее символ \ в конце строки указывает перенос на другую строку в соответствии с RFC 8792.

   {
     "ietf-l2vpn-ntw:l2vpn-ntw": {
       "vpn-services": {
         "vpn-service": [
           {
             "vpn-id": "vpls7714825356",
             "vpn-description": "Sample BGP-based VPLS",
             "customer-name": "customer-7714825356",
             "vpn-type": "ietf-vpn-common:vpls",
             "bgp-ad-enabled": true,
             "signaling-type": "ietf-vpn-common:bgp-signaling",
             "global-parameters-profiles": {
               "global-parameters-profile": [
                 {
                   "profile-id": "simple-profile",
                   "local-autonomous-system": 65535,
                   "svc-mtu": 1518,
                   "rd-suffix": 1,
                   "vpn-target": [
                     {
                       "id": 1,
                       "route-targets": [
                         {
                           "route-target": "0:65535:1"
                         }
                       ],
                       "route-target-type": "both"
                     }
                   ]
                 }
               ]
             },
             "vpn-nodes": {
               "vpn-node": [
                 {
                   "vpn-node-id": "pe1",
                   "ne-id": "198.51.100.1",
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "bgp-auto-discovery": {
                     "vpn-id": "1"
                   },
                   "signaling-option": {
                     "pw-encapsulation-type": "iana-bgp-l2-encaps:\
                      ethernet-tagged-mode",
                     "vpls-instance": {
                       "vpls-edge-id": 1,
                       "vpls-edge-id-range": 100
                     }
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "1/1/1.1",
                         "interface-id": "1/1/1",
                         "description": "Interface to CE1",
                         "active-vpn-node-profile": "simple-profile",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "encapsulation": {
                             "encap-type": "ietf-vpn-common:dot1q",
                             "dot1q": {
                               "cvlan-id": 1
                             }
                           }
                         }
                       }
                     ]
                   }
                 },
                 {
                   "vpn-node-id": "pe2",
                   "ne-id": "198.51.100.2",
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "bgp-auto-discovery": {
                     "vpn-id": "1"
                   },
                   "signaling-option": {
                     "pw-encapsulation-type": "iana-bgp-l2-encaps:\
                      ethernet-tagged-mode",
                     "vpls-instance": {
                       "vpls-edge-id": 2,
                       "vpls-edge-id-range": 100
                     }
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "1/1/1.1",
                         "interface-id": "1/1/1",
                         "description": "Interface to CE2",
                         "active-vpn-node-profile": "simple-profile",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "encapsulation": {
                             "encap-type": "ietf-vpn-common:dot1q",
                             "dot1q": {
                               "cvlan-id": 1
                             }
                           }
                         }
                       }
                     ]
                   }
                 },
                 {
                   "vpn-node-id": "pe3",
                   "ne-id": "198.51.100.3",
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "bgp-auto-discovery": {
                     "vpn-id": "1"
                   },
                   "signaling-option": {
                     "pw-encapsulation-type": "iana-bgp-l2-encaps:\
                      ethernet-tagged-mode",
                     "vpls-instance": {
                       "vpls-edge-id": 3,
                       "vpls-edge-id-range": 100
                     }
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "1/1/1.1",
                         "interface-id": "1/1/1",
                         "description": "Interface to CE3",
                         "active-vpn-node-profile": "simple-profile",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "encapsulation": {
                             "encap-type": "ietf-vpn-common:dot1q",
                             "dot1q": {
                               "cvlan-id": 1
                             }
                           }
                         }
                       }
                     ]
                   }
                 },
                 {
                   "vpn-node-id": "pe4",
                   "ne-id": "198.51.100.4",
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "bgp-auto-discovery": {
                     "vpn-id": "1"
                   },
                   "signaling-option": {
                     "pw-encapsulation-type": "iana-bgp-l2-encaps:\
                      ethernet-tagged-mode",
                     "vpls-instance": {
                       "vpls-edge-id": 4,
                       "vpls-edge-id-range": 100
                     }
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "1/1/1.1",
                         "interface-id": "1/1/1",
                         "description": "Interface to CE4",
                         "active-vpn-node-profile": "simple-profile",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "encapsulation": {
                             "encap-type": "ietf-vpn-common:dot1q",
                             "dot1q": {
                               "cvlan-id": 1
                             }
                           }
                         }
                       }
                     ]
                   }
                 }
               ]
             }
           }
         ]
       }
     }
   }

Рисунок 24. Пример тела сообщения L2NM для настройки VPLS на основе BGP.

A.2. VPWS на основе BGP с сигнализацией LDP

Рассмотрим архитектуру, показанную на рисунке 25, для организации VPWS между CE1 и CE2 с использованием BGP для автоматического обнаружения и LDP для сигнализации.

                      +-----+   +--------------+   +-----+
         +----+       | PE1 |===|              |===| PE2 |       +----+
         | CE1+-------+     |   |     Ядро     |   |     +-------+ CE2|
         +----+       +-----+   +--------------+   +-----+       +----+
               Сайт 1                                      Сайт 2

Рисунок 25. Пример VPWS.

   {
     "ietf-l2vpn-ntw:l2vpn-ntw": {
       "vpn-services": {
         "vpn-service": [
           {
             "vpn-id": "vpws12345",
             "vpn-description": "Sample VPWS",
             "customer-name": "customer-12345",
             "vpn-type": "ietf-vpn-common:vpws",
             "bgp-ad-enabled": true,
             "signaling-type": "ietf-vpn-common:ldp-signaling",
             "global-parameters-profiles": {
               "global-parameters-profile": [
                 {
                   "profile-id": "simple-profile",
                   "local-autonomous-system": 65550,
                   "rd-auto": {
                     "auto": [
                       null
                     ]
                   },
                   "vpn-target": [
                     {
                       "id": 1,
                       "route-targets": [
                         {
                           "route-target": "0:65535:1"
                         }
                       ],
                       "route-target-type": "both"
                     }
                   ]
                 }
               ]
             },
             "vpn-nodes": {
               "vpn-node": [
                 {
                   "vpn-node-id": "pe1",
                   "ne-id": "2001:db8:100::1",
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "bgp-auto-discovery": {
                     "vpn-id": "587"
                   },
                   "signaling-option": {
                     "advertise-mtu": true,
                     "ldp-or-l2tp": {
                       "saii": 1,
                       "remote-targets": [
                         {
                           "taii": 2
                         }
                       ],
                       "t-ldp-pw-type": "ethernet"
                     }
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "1/1/1.1",
                         "interface-id": "1/1/1",
                         "description": "Interface to CE1",
                         "active-vpn-node-profile": "simple-profile",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         }
                       }
                     ]
                   }
                 },
                 {
                   "vpn-node-id": "pe2",
                   "ne-id": "2001:db8:200::1",
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "bgp-auto-discovery": {
                     "vpn-id": "587"
                   },
                   "signaling-option": {
                     "advertise-mtu": true,
                     "ldp-or-l2tp": {
                       "saii": 2,
                       "remote-targets": [
                         {
                           "taii": 1
                         }
                       ],
                       "t-ldp-pw-type": "ethernet"
                     }
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "5/1/1.1",
                         "interface-id": "5/1/1",
                         "description": "Interface to CE2",
                         "active-vpn-node-profile": "simple-profile",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         }
                       }
                     ]
                   }
                 }
               ]
             }
           }
         ]
       }
     }
   }

Рисунок 26. Пример тела сообщения L2NM для настройки VPWS на основе BGP с сигнализацией LDP.

A.3. VPLS на основе LDP

Здесь приведён пример, иллюстрирующий использование L2NM для управления VPLS с сигнализацией LDP (Рисунок 27). Соединение между CE и PE организовано напрямую с использованием инкапсуляции Dot1q [IEEE802.1Q].

                     +----------  VPLS "1543" ----------+

                     +-----+   +--------------+   +-----+
         +----+      | PE1 |===|              |===| PE2 |       +----+
         | CE1 +-----+"450"|   |     Ядро     |   |"451"+-------+ CE2|
         +----+      +-----+   |     MPLS     |   +-----+       +----+
                               |              |
                               +--------------+

Рисунок 27. Пример топологии VPLS.

На рисунке 28 показано, как L2NM применяется для указания PE1 и PE2 использования сессии LDP между ними для организации VPLS “1543” между сторонами. Для этого создаётся 1 служба VPN, а также два узла VPN с соответствующими идентификаторами доступа в сеть VPN.

   {
     "ietf-l2vpn-ntw:l2vpn-ntw": {
       "vpn-services": {
         "vpn-service": [
           {
             "vpn-id": "450",
             "vpn-name": "CORPO-EXAMPLE",
             "vpn-description": "SEDE_CENTRO_450",
             "customer-name": "EXAMPLE",
             "vpn-type": "ietf-vpn-common:vpls",
             "vpn-service-topology": "ietf-vpn-common:hub-spoke",
             "bgp-ad-enabled": false,
             "signaling-type": "ietf-vpn-common:ldp-signaling",
             "global-parameters-profiles": {
               "global-parameters-profile": [
                 {
                   "profile-id": "simple-profile",
                   "ce-vlan-preservation": true,
                   "ce-vlan-cos-preservation": true
                 }
               ]
             },
             "vpn-nodes": {
               "vpn-node": [
                 {
                   "vpn-node-id": "450",
                   "description": "SEDE_CENTRO_450",
                   "ne-id": "2001:db8:5::1",
                   "role": "ietf-vpn-common:hub-role",
                   "status": {
                     "admin-status": {
                       "status": "ietf-vpn-common:admin-up"
                     }
                   },
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "signaling-option": {
                     "ldp-or-l2tp": {
                       "t-ldp-pw-type": "vpls-type",
                       "pw-peer-list": [
                         {
                           "peer-addr": "2001:db8:50::1",
                           "vc-id": "1543"
                         }
                       ]
                     }
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "4508671287",
                         "description": "VPN_450_SNA",
                         "interface-id": "gigabithethernet0/0/1",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "l2-termination-point": "550",
                           "encapsulation": {
                             "encap-type": "ietf-vpn-common:dot1q",
                             "dot1q": {
                               "tag-type": "ietf-vpn-common:c-vlan",
                               "cvlan-id": 550
                             }
                           }
                         },
                         "service": {
                           "mtu": 1550,
                           "svc-pe-to-ce-bandwidth": {
                             "pe-to-ce-bandwidth": [
                               {
                                 "bw-type": "ietf-vpn-common:\
                                  bw-per-port",
                                 "cir": "20480000"
                               }
                             ]
                           },
                           "svc-ce-to-pe-bandwidth": {
                             "ce-to-pe-bandwidth": [
                               {
                                 "bw-type": "ietf-vpn-common:\
                                  bw-per-port",
                                 "cir": "20480000"
                               }
                             ]
                           },
                           "qos": {
                             "qos-profile": {
                               "qos-profile": [
                                 {
                                   "profile": "QoS_Profile_A",
                                   "direction": "ietf-vpn-common:both"
                                 }
                               ]
                             }
                           }
                         }
                       }
                     ]
                   }
                 },
                 {
                   "vpn-node-id": "451",
                   "description": "SEDE_CHAPINERO_451",
                   "ne-id": "2001:db8:50::1",
                   "role": "ietf-vpn-common:spoke-role",
                   "status": {
                     "admin-status": {
                       "status": "ietf-vpn-common:admin-up"
                     }
                   },
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "signaling-option": {
                     "ldp-or-l2tp": {
                       "t-ldp-pw-type": "vpls-type",
                       "pw-peer-list": [
                         {
                           "peer-addr": "2001:db8:5::1",
                           "vc-id": "1543"
                         }
                       ]
                     }
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "4508671288",
                         "description": "VPN_450_SNA",
                         "interface-id": "gigabithethernet0/0/1",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "l2-termination-point": "550",
                           "encapsulation": {
                             "encap-type": "ietf-vpn-common:dot1q",
                             "dot1q": {
                               "tag-type": "ietf-vpn-common:c-vlan",
                               "cvlan-id": 550
                             }
                           }
                         },
                         "service": {
                           "mtu": 1550,
                           "svc-pe-to-ce-bandwidth": {
                             "pe-to-ce-bandwidth": [
                               {
                                 "bw-type": "ietf-vpn-common:\
                                  bw-per-port",
                                 "cir": "20480000"
                               }
                             ]
                           },
                           "svc-ce-to-pe-bandwidth": {
                             "ce-to-pe-bandwidth": [
                               {
                                 "bw-type": "ietf-vpn-common:\
                                  bw-per-port",
                                 "cir": "20480000"
                               }
                             ]
                           },
                           "qos": {
                             "qos-profile": {
                               "qos-profile": [
                                 {
                                   "profile": "QoS_Profile_A",
                                   "direction": "ietf-vpn-common:both"
                                 }
                               ]
                             }
                           }
                         }
                       }
                     ]
                   }
                 }
               ]
             }
           }
         ]
       }
     }
   }

Рисунок 28. Пример тела сообщения L2NM для настройки VPLS на основе LDP.

A.4. Экземпляр сервиса VPWS-EVPN

На рисунке 29 дан пример архитектуры для предоставления услуги VPWS-EVPN между CE1 и CE2. Оба CE являются многодомными. Сессии BGP поддерживаются между PE в соответствии с [RFC8214]. В экземпляре EVPN применяется режим избыточности All-Active (активны все).

                      |<-------- Экземпляр EVPN -------->|
                      |                                  |
                ESI1  V                                  V  ESI2
                |     +-----+   +--------------+   +-----+  |
         +----+ |     | PE1 |===|              |===| PE3 |  |    +----+
         |    +-------+     |   |              |   |     +-------+    |
         |    | |     +-----+   |              |   +-----+  |    |    |
         | CE1| |               |     Ядро     |            |    |CE2 |
         |    | |     +-----+   |              |   +-----+  |    |    |
         |    +-------+     |   |              |   |     +-------+    |
         +----+ |     | PE2 |===|              |===| PE4 |  |    +----+
              ^ |     +-----+   +--------------+   +-----+  |    ^
              | ESI1                                        ESI2 |
              |<------------ Эмулированная услуга -------------->|

Рисунок 29. Пример VPWS-EVPN.

Предположим сначала, что создаётся сегмент ES (Рисунок 30).

   {
     "ietf-ethernet-segment:ethernet-segments": {
       "ethernet-segment": [
         {
           "name": "esi1",
           "ethernet-segment-identifier": "00:11:11:11:11:11:11:\
            11:11:11",
           "esi-redundancy-mode": "all-active"
         },
         {
           "name": "esi2",
           "ethernet-segment-identifier": "00:22:22:22:22:22:22:\
            22:22:22",
           "esi-redundancy-mode": "all-active"
         }
       ]
     }
   }

Рисунок 30. Пример тела сообщения L2NM для настройки сегмента Ethernet.

На рисунке 31 показана упрощённая конфигурация для иллюстрации применения L2NM при настройке VPWS-EVPN.

   {
     "ietf-l2vpn-ntw:l2vpn-ntw": {
       "vpn-services": {
         "vpn-service": [
           {
             "vpn-id": "vpws15432855",
             "vpn-description": "Sample VPWS-EVPN",
             "customer-name": "customer_15432855",
             "vpn-type": "ietf-vpn-common:vpws-evpn",
             "bgp-ad-enabled": true,
             "signaling-type": "ietf-vpn-common:bgp-signaling",
             "global-parameters-profiles": {
               "global-parameters-profile": [
                 {
                   "profile-id": "simple-profile",
                   "local-autonomous-system": 65535,
                   "rd-suffix": 1,
                   "vpn-target": [
                     {
                       "id": 1,
                       "route-targets": [
                         {
                           "route-target": "0:65535:1"
                         }
                       ],
                       "route-target-type": "both"
                     }
                   ]
                 }
               ]
             },
             "vpn-nodes": {
               "vpn-node": [
                 {
                   "vpn-node-id": "pe1",
                   "ne-id": "198.51.100.1",
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "1/1/1.1",
                         "interface-id": "1/1/1",
                         "description": "Interface to CE1",
                         "active-vpn-node-profile": "simple-profile",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "encapsulation": {
                             "encap-type": "ietf-vpn-common:dot1q",
                             "dot1q": {
                               "cvlan-id": 1
                             }
                           }
                         },
                         "vpws-service-instance": {
                           "local-vpws-service-instance": 1111,
                           "remote-vpws-service-instance": 1112
                         },
                         "group": [
                           {
                             "group-id": "gr1",
                             "ethernet-segment-identifier": "esi1"
                           }
                         ]
                       }
                     ]
                   }
                 },
                 {
                   "vpn-node-id": "pe2",
                   "ne-id": "198.51.100.2",
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "1/1/1.1",
                         "interface-id": "1/1/1",
                         "description": "Interface to CE1",
                         "active-vpn-node-profile": "simple-profile",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "encapsulation": {
                             "encap-type": "ietf-vpn-common:dot1q",
                             "dot1q": {
                               "cvlan-id": 1
                             }
                           }
                         },
                         "vpws-service-instance": {
                           "local-vpws-service-instance": 1111,
                           "remote-vpws-service-instance": 1112
                         },
                         "group": [
                           {
                             "group-id": "gr1",
                             "ethernet-segment-identifier": "esi1"
                           }
                         ]
                       }
                     ]
                   }
                 },
                 {
                   "vpn-node-id": "pe3",
                   "ne-id": "198.51.100.3",
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "1/1/1.1",
                         "interface-id": "1/1/1",
                         "description": "Interface to CE2",
                         "active-vpn-node-profile": "simple-profile",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "encapsulation": {
                             "encap-type": "ietf-vpn-common:dot1q",
                             "dot1q": {
                               "cvlan-id": 1
                             }
                           }
                         },
                         "vpws-service-instance": {
                           "local-vpws-service-instance": 1112,
                           "remote-vpws-service-instance": 1111
                         },
                         "group": [
                           {
                             "group-id": "gr1",
                             "ethernet-segment-identifier": "esi2"
                           }
                         ]
                       }
                     ]
                   }
                 },
                 {
                   "vpn-node-id": "pe4",
                   "ne-id": "198.51.100.4",
                   "active-global-parameters-profiles": {
                     "global-parameters-profile": [
                       {
                         "profile-id": "simple-profile"
                       }
                     ]
                   },
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "1/1/1.1",
                         "interface-id": "1/1/1",
                         "description": "Interface to CE2",
                         "active-vpn-node-profile": "simple-profile",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "encapsulation": {
                             "encap-type": "ietf-vpn-common:dot1q",
                             "dot1q": {
                               "cvlan-id": 1
                             }
                           }
                         },
                         "vpws-service-instance": {
                           "local-vpws-service-instance": 1112,
                           "remote-vpws-service-instance": 1111
                         },
                         "group": [
                           {
                             "group-id": "gr1",
                             "ethernet-segment-identifier": "esi2"
                           }
                         ]
                       }
                     ]
                   }
                 }
               ]
             }
           }
         ]
       }
     }
   }

Рисунок 31. Пример тела сообщения L2NM для настройки экземпляра VPWS-EVPN.

A.5. Автоматическое назначение ESI

Здесь приведён пример, иллюстрирующий использование L2NM для управления автоматическим назначением ESI. Услуга предоставляется с использованием архитектуры, показанной на рисунке 32.

              ES
              |     +-----+      +--------------+   +-----+
       +----+ |     | PE1 |======|              |===| PE3 |       +----+
       |    +-------+     |      |              |   |     +-------+ CE3|
       |    | |     +-----+      |              |   +-----+       +----+
       | CE1| |                  |     Core     |
       |    | |     +-----+      |              |   +-----+       +----+
       |    +-------+     |      |              |   |     +-------+ CE2|
       +----+ |     | PE2 |======|              |===| PE4 |       +----+
              |     +-----+      +--------------+   +-----+
            LACP

Рисунок 32. Пример автоматического назначения ESI.

На рисунках 33 и 34 показано применение L2NM для указания PE1 и PE2 автоматически назначать ESI, указывающий ES, применяемый с CE1. Предполагается, что протокол LACP включён и применяется тип 1 (T=0x01), как указано в разделе 5 [RFC7432]. Пример не включает деталей настройки службы EVPN и сосредоточен на управлении ESI.

   {
     "ietf-ethernet-segment:ethernet-segments": {
       "ethernet-segment": [
         {
           "name": "esi1",
           "esi-type": "esi-type-1-lacp",
           "esi-redundancy-mode": "all-active"
         }
       ]
     }
   }

Рисунок 33. Пример тела сообщения L2NM для автоматического назначения ESI.

   {
     "ietf-l2vpn-ntw:l2vpn-ntw": {
       "ietf-l2vpn-ntw:vpn-services": {
         "vpn-service": [
           {
             "vpn-id": "auto-esi-lacp",
             "vpn-description": "Sample to illustrate auto-ESI",
             "vpn-type": "ietf-vpn-common:vpws-evpn",
             "vpn-nodes": {
               "vpn-node": [
                 {
                   "vpn-node-id": "pe1",
                   "ne-id": "198.51.100.1",
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "1/1/1.1",
                         "interface-id": "1/1/1",
                         "description": "Interface to CE1",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "lag-interface": {
                             "lag-interface-id": "1",
                             "lacp": {
                               "lacp-state": true,
                               "system-id": "11:00:11:00:11:11",
                               "admin-key": 154
                             }
                           }
                         },
                         "group": [
                           {
                             "group-id": "gr1",
                             "ethernet-segment-identifier": "esi1"
                           }
                         ]
                       }
                     ]
                   }
                 },
                 {
                   "vpn-node-id": "pe2",
                   "ne-id": "198.51.100.2",
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "2/2/2.5",
                         "interface-id": "2/2/2",
                         "description": "Interface to CE1",
                         "status": {
                           "admin-status": {
                             "status": "ietf-vpn-common:admin-up"
                           }
                         },
                         "connection": {
                           "lag-interface": {
                             "lag-interface-id": "1",
                             "lacp": {
                               "lacp-state": true,
                               "system-id": "11:00:11:00:11:11",
                               "admin-key": 154
                             }
                           }
                         },
                         "group": [
                           {
                             "group-id": "gr1",
                             "ethernet-segment-identifier": "esi1"
                           }
                         ]
                       }
                     ]
                   }
                 }
               ]
             }
           }
         ]
       }
     }
   }

Рисунок 34. Пример тела сообщения L2NM для автоматического назначения ESI.

Автоматически заданный идентификатор ESI можно найти с помощью, например, метода GET в RESTCONF. Заданное значение будет возвращено в узле данных esi-auto, как показано на рисунке 35.

   {
     "ietf-ethernet-segment:ethernet-segments": {
       "ethernet-segment": [
         {
           "name": "esi1",
           "ethernet-segment-identifier": "esi-type-1-lacp",
           "esi-auto": {
             "auto-ethernet-segment-identifier": "01:11:00:11:00:11:\
              11:9a:00:00"
           },
           "esi-redundancy-mode": "all-active"
         }
       ]
     }
   }

Рисунок 35. Пример тела сообщения L2NM для извлечения назначенного ESI.

A.6. Предпочтения доступа в VPN

В примере на рисунке 36 служба L2VPN включает два доступа в сеть VPN к сайтам одного клиента.

                +--------------+
                |VPN-NODE      |
                |           +--+-------+
                |           | NET-ACC-1| Основной
                |           |          +------------------
                |           +--+-------+
                |              |
                |           +--+-------+
                |           | NET-ACC-2| Вторичный
                |           |          +------------------
                |           +--+-------+
                |              |
                +--------------+

Рисунок 36. Пример множественного доступа в VPN.

Чтобы указать один из вариантов доступа в VPN как основной (primary), а другой – как вторичный (secondary), применяется конфигурация L2NM, фрагмент которой приведён на рисунке 37. Здесь оба варианта доступа привязаны к одному group-id, а узел precedence устанавливается в соответствии с ролью (основной или вторичный).

   {
     "ietf-l2vpn-ntw:l2vpn-ntw": {
       "vpn-services": {
         "vpn-service": [
           {
             "vpn-id": "Sample-Service",
             "vpn-nodes": {
               "vpn-node": [
                 {
                   "vpn-node-id": "VPN-NODE",
                   "vpn-network-accesses": {
                     "vpn-network-access": [
                       {
                         "id": "NET-ACC-1",
                         "connection": {
                           "bearer-reference": "br1"
                         },
                         "group": [
                           {
                             "group-id": "1",
                             "precedence": "primary"
                           }
                         ]
                       },
                       {
                         "id": "NET-ACC-2",
                         "connection": {
                           "bearer-reference": "br2"
                         },
                         "group": [
                           {
                             "group-id": "1",
                             "precedence": "secondary"
                           }
                         ]
                       }
                     ]
                   }
                 }
               ]
             }
           }
         ]
       }
     }
   }

Рисунок 37. Пример тела сообщения для уровней приоритета доступа в сеть VPN.

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

В ходе обсуждения этой работы полезные комментарии, предложения и рецензии представили Sergio Belotti, Italo Busi, Miguel Cros Cecilia, Joe Clarke, Dhruv Dhody, Adrian Farrel, Roque Gagliano, Christian Jacquenet, Kireeti Kompella, Julian Lucek, Moti Morgenstern, Tom Petch, Erez Segev. Большое спасибо им.

Zhang Guiyu, Luay Jalil, Daniel King, Jichun Ma внесли свой вклад в предварительные варианты документа.

Спасибо Yingzhen Qu и Himanshu Shah за рецензии rtgdir, Ladislav Lhotka за рецензию yangdoctors, Chris Lonvick за рецензию secdir, Dale Worley за рецензию gen-art. Особая благодарность Adrian Farrel за тщательный обзор Shepherd.

Спасибо Robert Wilton за тщательный обзор AD и предложения по улучшению документа.

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

Модуль YANG для сегментов Ethernet был исходно создан в контексте модуля устройства EVPN [EVPN-YANG].

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

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

Victor Lopez
Nokia
Email: victor.lopez@nokia.com
 
Qin Wu
Huawei
Email: bill.wu@huawei.com
 
Raul Arco
Nokia
Email: raul.arco@nokia.com

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

Mohamed Boucadair (editor)
Orange
Rennes
France
Email: mohamed.boucadair@orange.com
 
Oscar Gonzalez de Dios (editor)
Telefonica
Madrid
Spain
Email: oscar.gonzalezdedios@telefonica.com
 
Samier Barguil
Telefonica
Madrid
Spain
Email: samier.barguilgiraldo.ext@telefonica.com
 
Luis Angel Munoz
Vodafone
Spain
Email: luis-angel.munoz@vodafone.com

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

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

nmalykh@protokols.ru

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

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

3Operations, Administration, and Maintenance – операции, администрирование и поддержка.

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

5В оригинале ошибочно указан раздел 3. См. https://www.rfc-editor.org/errata/eid7143. Прим. перев.

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

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