Internet Engineering Task Force (IETF) A. Lindem
Request for Comments: 9587 LabN Consulting, L.L.C.
Category: Standards Track S. Palani
ISSN: 2070-1721 Microsoft
Y. Qu
Futurewei Technologies
June 2024
YANG Data Model for OSPFv3 Extended Link State Advertisements (LSAs)
Модель данных YANG для расширенных анонсов LSA в OSPFv3
Аннотация
В этом документе определена модель данных YANG, дополняющая модель IETF OSPF YANG (RFC 9129) для поддержки расширяемости анонсов состояния каналов (Link State Advertisement или LSA) в OSPFv3, определённой в RFC 8362. OSPFv3 Extended LSA обеспечивают на основе TLV расширения типов LSA, определённых в RFC 5340.
Статус документа
Документ относится к категории Internet Standards Track.
Документ является результатом работы IETF1 и представляет согласованный взгляд сообщества IETF. Документ прошёл открытое обсуждение и был одобрен для публикации IESG2. Дополнительную информацию о стандартах Internet можно найти в разделе 2 в RFC 7841.
Информацию о текущем статусе документа, ошибках и способах обратной связи можно найти по ссылке https://www.rfc-editor.org/info/rfc9587.
Авторские права
Авторские права (Copyright (c) 2024) принадлежат IETF Trust и лицам, указанным в качестве авторов документа. Все права защищены.
К документу применимы права и ограничения, перечисленные в BCP 78 и IETF Trust Legal Provisions и относящиеся к документам IETF (http://trustee.ietf.org/license-info), на момент публикации данного документа. Прочтите упомянутые документы внимательно, поскольку в них описаны права и ограничения, относящиеся к данному документу. Фрагменты программного кода, включённые в этот документ, распространяются в соответствии с упрощённой лицензией BSD, как указано в параграфе 4.e документа Trust Legal Provisions, без каких-либо гарантий (как указано в Revised BSD License).
1. Обзор
Язык определения данных YANG [RFC7950] служит для задания содержимого концептуального хранилища данных, которое позволяет управлять сетевыми устройствами с помощью NETCONF [RFC6241]. YANG подходит и для других ситуаций, таких как привязка к другим интерфейсам (например, RESTCONF [RFC8040]) и отличное от XML кодирование (например, JSON). Кроме того, модели данных YANG могут служить основой для реализации таких интерфейсов, как командный (Command-Line Interface или CLI) или программный API.
В этом документе задана модель данных YANG, дополняющая модель IETF OSPF YANG [RFC9129], которая сама дополняет [RFC8349], для поддержки конфигурации и рабочих состояний расширенных анонсов состояния каналов OSPFv3 (LSA), определённых в [RFC8362].
Заданный здесь модуль YANG соответствует архитектуре хранилищ данных управления сетью (Network Management Datastore Architecture или NMDA) [RFC8342].
2. Диаграммы деревьев
В документе используется графическое представление моделей данных, описанное в [RFC8340].
3. OSPFv3 Extended LSA
Этот документ определяет модель данных YANG для OSPFv3 Extended LSA, дополняя базовую модель OSPF [RFC9129] для поддержки расширения OSPFv3 LSA [RFC8362]. Расширенные OSPFv3 LSA поддерживают анонсы состояния каналов на основе TLV в соответствии с [RFC5340].
Модуль YANG OSPFv3 Extended LSA требует поддержки базовой модели OSPF, определяющей базовые состояния и конфигурацию OSPF. Модуль YANG OSPF дополняет модель данных YANG ietf-routing, заданную в [RFC8349]. Дополнения модуля YANG ietf-ospfv3-extended-lsa обеспечивают поддержку глобальной конфигурации, конфигурации областей (area) и добавление OSPFv3 Extended LSA к рабочему состоянию базы состояний каналов (Link State Database или LSDB).
module: ietf-ospfv3-extended-lsa
augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/ospf:ospf:
+--rw extended-lsa-support? boolean
augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/ospf:ospf/ospf:areas
/ospf:area:
+--rw extended-lsa-support? boolean
augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
/ospf:interfaces/ospf:interface/ospf:database
/ospf:link-scope-lsa-type/ospf:link-scope-lsas
/ospf:link-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3
/ospf:body:
+--ro e-link
+--ro rtr-priority? uint8
+--ro lsa-options
| +--ro lsa-options* identityref
+--ro e-link-tlvs* []
+--ro unknown-tlv
| +--ro type? uint16
| +--ro length? uint16
| +--ro value? yang:hex-string
+--ro intra-prefix-tlv
| +--ro metric? ospf:ospf-metric
| +--ro prefix? inet:ip-prefix
| +--ro prefix-options
| | +--ro prefix-options* identityref
| +--ro sub-tlvs* []
| +--ro unknown-sub-tlv
| +--ro type? uint16
| +--ro length? uint16
| +--ro value? yang:hex-string
+--ro ipv6-link-local-addr-tlv
| +--ro link-local-address? inet:ipv6-address
| +--ro sub-tlvs* []
| +--ro unknown-sub-tlv
| +--ro type? uint16
| +--ro length? uint16
| +--ro value? yang:hex-string
+--ro ipv4-link-local-addr-tlv
+--ro link-local-address? inet:ipv4-address
+--ro sub-tlvs* []
+--ro unknown-sub-tlv
+--ro type? uint16
+--ro length? uint16
+--ro value? yang:hex-string
augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area
/ospf:database/ospf:area-scope-lsa-type
/ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version
/ospf:ospfv3/ospf:ospfv3/ospf:body:
+--ro e-router
| +--ro router-bits
| | +--ro rtr-lsa-bits* identityref
| +--ro lsa-options
| | +--ro lsa-options* identityref
| +--ro e-router-tlvs* []
| +--ro unknown-tlv
| | +--ro type? uint16
| | +--ro length? uint16
| | +--ro value? yang:hex-string
| +--ro link-tlv
| +--ro interface-id? uint32
| +--ro neighbor-interface-id? uint32
| +--ro neighbor-router-id? rt-types:router-id
| +--ro type? ospf:router-link-type
| +--ro metric? ospf:ospf-link-metric
| +--ro sub-tlvs* []
| +--ro unknown-sub-tlv
| +--ro type? uint16
| +--ro length? uint16
| +--ro value? yang:hex-string
+--ro e-network
| +--ro lsa-options
| | +--ro lsa-options* identityref
| +--ro e-network-tlvs* []
| +--ro unknown-tlv
| | +--ro type? uint16
| | +--ro length? uint16
| | +--ro value? yang:hex-string
| +--ro attached-router-tlv
| +--ro adjacent-neighbor-router-id* rt-types:router-id
+--ro e-nssa
| +--ro e-external-tlvs* []
| +--ro unknown-tlv
| | +--ro type? uint16
| | +--ro length? uint16
| | +--ro value? yang:hex-string
| +--ro external-prefix-tlv
| +--ro flags
| | +--ro ospfv3-e-external-prefix-bits* identityref
| +--ro metric? ospf:ospf-metric
| +--ro prefix? inet:ip-prefix
| +--ro prefix-options
| | +--ro prefix-options* identityref
| +--ro sub-tlvs* []
| +--ro ipv6-fwd-addr-sub-tlv
| | +--ro forwarding-address? inet:ipv6-address
| +--ro ipv4-fwd-addr-sub-tlv
| | +--ro forwarding-address? inet:ipv4-address
| +--ro route-tag-sub-tlv
| | +--ro route-tag? uint32
| +--ro unknown-sub-tlv
| +--ro type? uint16
| +--ro length? uint16
| +--ro value? yang:hex-string
+--ro e-inter-area-prefix
| +--ro e-inter-prefix-tlvs* []
| +--ro unknown-tlv
| | +--ro type? uint16
| | +--ro length? uint16
| | +--ro value? yang:hex-string
| +--ro inter-prefix-tlv
| +--ro metric? ospf:ospf-metric
| +--ro prefix? inet:ip-prefix
| +--ro prefix-options
| | +--ro prefix-options* identityref
| +--ro sub-tlvs* []
| +--ro unknown-sub-tlv
| +--ro type? uint16
| +--ro length? uint16
| +--ro value? yang:hex-string
+--ro e-inter-area-router
| +--ro e-inter-router-tlvs* []
| +--ro unknown-tlv
| | +--ro type? uint16
| | +--ro length? uint16
| | +--ro value? yang:hex-string
| +--ro inter-router-tlv
| +--ro lsa-options
| | +--ro lsa-options* identityref
| +--ro metric? ospf:ospf-metric
| +--ro destination-router-id? rt-types:router-id
| +--ro sub-tlvs* []
| +--ro unknown-sub-tlv
| +--ro type? uint16
| +--ro length? uint16
| +--ro value? yang:hex-string
+--ro e-intra-area-prefix
+--ro referenced-ls-type? uint16
+--ro referenced-link-state-id? uint32
+--ro referenced-adv-router? rt-types:router-id
+--ro e-intra-prefix-tlvs* []
+--ro unknown-tlv
| +--ro type? uint16
| +--ro length? uint16
| +--ro value? yang:hex-string
+--ro intra-prefix-tlv
+--ro metric? ospf:ospf-metric
+--ro prefix? inet:ip-prefix
+--ro prefix-options
| +--ro prefix-options* identityref
+--ro sub-tlvs* []
+--ro unknown-sub-tlv
+--ro type? uint16
+--ro length? uint16
+--ro value? yang:hex-string
augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol/ospf:ospf/ospf:database
/ospf:as-scope-lsa-type/ospf:as-scope-lsas
/ospf:as-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3
/ospf:body:
+--ro e-as-external
+--ro e-external-tlvs* []
+--ro unknown-tlv
| +--ro type? uint16
| +--ro length? uint16
| +--ro value? yang:hex-string
+--ro external-prefix-tlv
+--ro flags
| +--ro ospfv3-e-external-prefix-bits* identityref
+--ro metric? ospf:ospf-metric
+--ro prefix? inet:ip-prefix
+--ro prefix-options
| +--ro prefix-options* identityref
+--ro sub-tlvs* []
+--ro ipv6-fwd-addr-sub-tlv
| +--ro forwarding-address? inet:ipv6-address
+--ro ipv4-fwd-addr-sub-tlv
| +--ro forwarding-address? inet:ipv4-address
+--ro route-tag-sub-tlv
| +--ro route-tag? uint32
+--ro unknown-sub-tlv
+--ro type? uint16
+--ro length? uint16
+--ro value? yang:hex-string
4. Модуль YANG OSPFv3 Extended LSA
[RFC6991] и [RFC8294] не упоминаются в этом документе, но ссылки на них даны в модуле ietf-ospfv3-extended-lsa.yang.
<CODE BEGINS> file "ietf-ospfv3-extended-lsa@2024-06-07.yang"
module ietf-ospfv3-extended-lsa {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-ospfv3-extended-lsa";
prefix ospfv3-e-lsa;
import ietf-routing-types {
prefix rt-types;
reference
"RFC 8294: Common YANG Data Types for the Routing Area";
}
import ietf-inet-types {
prefix inet;
reference
"RFC 6991: Common YANG Data Types";
}
import ietf-routing {
prefix rt;
reference
"RFC 8349: A YANG Data Model for Routing
Management (NMDA Version)";
}
import ietf-ospf {
prefix ospf;
reference
"RFC 9129: YANG Data Model for the OSPF Protocol";
}
organization
"IETF LSR - Link State Routing Working Group";
contact
"WG Web: <https://datatracker.ietf.org/wg/lsr/>
WG List: <mailto:lsr@ietf.org>
Author: Acee Lindem
<mailto:acee.ietf@gmail.com>
Author: Sharmila Palani
<mailto:sharmila.palani@microsoft.com>
Author: Yingzhen Qu
<mailto:yingzhen.ietf@gmail.com>";
description
"Этот модуль YANG определяет конфигурацию и рабочее состояние
OSPFv3 Extended LSA, общие для реализаций всех производителей.
Семантика и кодирование OSPFv3 Extended LSA описаны в RFC 8362.
OSPFv3 Extended LSA обеспечивают на основе TLV расширения базовых
типов LSA, определённых в RFC 5340.
Модуль YANG соответствует архитектуре NMDA (RFC 8342).
Авторские права (Copyright (c) 2024) принадлежат IETF Trust
и лицам, указанным в качестве авторов кода. Все права защищены.
Распространение и использование в исходной или двоичной форме с
изменениями или без таковых разрешено в соответствии с лицензией
Simplified BSD, изложенной в разделе 4 IETF Trust's Legal
Provisions применительно к документам IETF
(http://trustee.ietf.org/license-info).
Эта версия данного модуля YANG является частью RFC 9587, где
правовые вопросы рассмотрены более полно.";
reference
"RFC 9587: YANG Data Model for OSPFv3 Extended Link State
Advertisements (LSAs)";
revision 2024-06-07 {
description
"Исходный выпуск.";
reference
"RFC 9587: YANG Data Model for OSPFv3 Extended Link State
Advertisements (LSAs)";
}
/*
* Идентификаторы типов OSPFv3 Extended LSA
*/
identity ospfv3-e-router-lsa {
base ospf:ospfv3-lsa-type;
description
"OSPFv3 E-Router-LSA - тип 0xA021.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.1";
}
identity ospfv3-e-network-lsa {
base ospf:ospfv3-lsa-type;
description
"OSPFv3 E-Network-LSA - тип 0xA022.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.2";
}
identity ospfv3-e-summary-lsa-type {
base ospf:ospfv3-lsa-type;
description
"Типы OSPFv3 Extended Summary LSA
E-Inter-Area-Prefix-LSA and E-Inter-Area-Router-LSA.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграфы 4.3 и 4.4";
}
identity ospfv3-e-inter-area-prefix-lsa {
base ospfv3-e-summary-lsa-type;
description
"OSPFv3 E-Inter-Area-Prefix-LSA - тип 0xA023.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.3";
}
identity ospfv3-e-inter-area-router-lsa {
base ospfv3-e-summary-lsa-type;
description
"OSPFv3 E-Inter-Area-Router-LSA - тип 0xA024.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.4";
}
identity ospfv3-e-external-lsa-type {
base ospf:ospfv3-lsa-type;
description
"Типы OSPFv3 Extended External LSA
E-AS-External-LSA и E-NSSA-LSA (NSSA- это
Not-So-Stubby-Area — не совсем тупиковая область).";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграфы 4.5 и 4.6";
}
identity ospfv3-e-as-external-lsa {
base ospfv3-e-external-lsa-type;
description
"OSPFv3 E-AS-External-LSA - тип 0xC025.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.5";
}
identity ospfv3-e-nssa-lsa {
base ospfv3-e-external-lsa-type;
description
"OSPFv3 E-NSSA-LSA - тип 0xA027.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.6";
}
identity ospfv3-e-link-lsa {
base ospf:ospfv3-lsa-type;
description
"OSPFv3 E-Link-LSA - тип 0x8028.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.7";
}
identity ospfv3-e-intra-area-prefix-lsa {
base ospf:ospfv3-lsa-type;
description
"OSPFv3 E-Intra-Area-Prefix-LSA - тип 0xA029.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.8";
}
identity ospfv3-e-prefix-option {
description
"Базовые идентификаторы для опций префикса OSPFv3.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.1";
}
identity nu-bit {
base ospfv3-e-prefix-option;
description
"При установленном флаге префикс следует исключать
из расчётов IPv6.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.1
RFC 5340: OSPF for IPv6, Приложение A.4.1.1";
}
identity la-bit {
base ospfv3-e-prefix-option;
description
"При установленном флаге префикс фактически является
адресом IPv6 анонсирующего маршрутизатора.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.1
RFC 5340: OSPF for IPv6, Приложение A.4.1.1";
}
identity p-bit {
base ospfv3-e-prefix-option;
description
"При установленном флаге префикс NSSA следует транслировать
в E-AS-External-LSA и анонсировать транслирующему NSSA BR.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.1
RFC 5340: OSPF for IPv6, Приложение A.4.1.1";
}
identity dn-bit {
base ospfv3-e-prefix-option;
description
"При установленном флаге префикс E-Inter-Area-Prefix-LSA или
E-AS-External-LSA анонсируется как префикс L3VPN.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.1
RFC 5340: OSPF for IPv6, Приложение A.4.1.1";
}
identity n-bit {
base ospfv3-e-prefix-option;
description
"При установленном флаге префикс является адресом хоста,
который идентифицирует анонсирующий маршрутизатор.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.1
RFC 5340: OSPF for IPv6, Приложение A.4.1.1";
}
identity ospfv3-e-external-prefix-option {
description
"Базовый идентификатор для опций внешнего префикса OSPFv3.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.6";
}
identity e-bit {
base ospfv3-e-external-prefix-option;
description
"При установленном флаге E заданная метрика является внешней
метрикой типа 2. Это означает, что метрика считается больше,
чем у любого пути внутри AS. Сброшенный бит E указывает
внешнюю метрику типа 1. Это означает, что она выражается в
таких же единицах, как и в других LSA (как стоимость
интерфейса в Router-LSA).";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.6";
}
grouping unknown-sub-tlv {
description
"Неизвестная группа TLV.";
container unknown-sub-tlv {
uses ospf:tlv;
description
"Неизвестный суб-TLV внешнего TLV.";
}
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 6.3";
}
grouping ospfv3-lsa-prefix {
description
"Префикс OSPFv3 LSA.";
leaf prefix {
type inet:ip-prefix;
description
"LSA prefix.";
}
container prefix-options {
leaf-list prefix-options {
type identityref {
base ospfv3-e-prefix-option;
}
description
"Список флагов опций префикса OSPFv3, содержащий
идентификаторы опций OSPFv3, установленных для
префикса OSPFv3.";
}
description
"Опции префикса.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.1";
}
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3";
}
grouping external-prefix-tlv {
container external-prefix-tlv {
description
"External-Prefix TLV.";
container flags {
leaf-list ospfv3-e-external-prefix-bits {
type identityref {
base ospfv3-e-external-prefix-option;
}
description
"Список битов OSPFv3 External-Prefix TLV.";
}
description
"Флаги внешнего префикса.";
}
leaf metric {
type ospf:ospf-metric;
description
"Метрика внешнего префикса.";
}
uses ospfv3-lsa-prefix;
list sub-tlvs {
description
"Суб-TLV External-Prefix TLV.";
container ipv6-fwd-addr-sub-tlv {
description
"Суб-TLV IPv6-Forwarding-Address для E-AS-External-LSA
и E-NSSA-LSA для семейства адресов IPv6.";
leaf forwarding-address {
type inet:ipv6-address;
description
"Адрес пересылки IPv6.";
}
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.10";
}
container ipv4-fwd-addr-sub-tlv {
description
"Суб-TLV IPv4-Forwarding-Address для E-AS-External-LSA
и E-NSSA-LSA для семейства адресов IPv4.";
leaf forwarding-address {
type inet:ipv4-address;
description
"Адрес пересылки IPv4.";
}
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.11";
}
container route-tag-sub-tlv {
description
"Суб-TLV Route-Tag.";
leaf route-tag {
type uint32;
description
"Тег маршрута.";
}
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.12";
}
uses unknown-sub-tlv;
}
}
description
"Группа External-Prefix TLV.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.6";
}
grouping intra-area-prefix-tlv {
container intra-prefix-tlv {
description
"Intra-Area-Prefix-LSA TLV.";
leaf metric {
type ospf:ospf-metric;
description
"Метрика внутриобластного префикса.";
}
uses ospfv3-lsa-prefix;
list sub-tlvs {
description
"Суб-TLV Intra-Area-Prefix TLV.";
uses unknown-sub-tlv;
}
}
description
"Группа Intra-Area-Prefix TLV.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.7";
}
grouping ipv6-link-local-addr-tlv {
container ipv6-link-local-addr-tlv {
description
"IPv6 Link-Local Address TLV.";
leaf link-local-address {
type inet:ipv6-address;
description
"Адрес IPv6 Link-Local.";
}
list sub-tlvs {
description
"Суб-TLV IPv6 Link-Local Address TLV.";
uses unknown-sub-tlv;
}
}
description
"Группа IPv6 Link-Local Address TLV.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.8";
}
grouping ipv4-link-local-addr-tlv {
container ipv4-link-local-addr-tlv {
description
"IPv4 Link-Local Address TLV.";
leaf link-local-address {
type inet:ipv4-address;
description
"Адрес IPv4 Link-Local.";
}
list sub-tlvs {
description
"Суб-TLV IPv4 Link-Local Address TLV.";
uses unknown-sub-tlv;
}
}
description
"Группа IPv4 Link-Local Address TLV.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 3.9";
}
/* Конфигурация */
augment "/rt:routing/rt:control-plane-protocols"
+ "/rt:control-plane-protocol/ospf:ospf" {
when "../rt:type = 'ospf:ospfv3'" {
description
"Дополняет протокол маршрутизации OSPFv3.";
}
description
"Дополняет конфигурацию на уровне экземпляра OSPFv3 поддержкой
Extended LSA. При включённой поддержке будут анонсироваться
OSPFv3 Extended LSA, и не будут передаваться OSPFv3 Legacy
LSA, которые анонсируются при отключённой поддержке. Однако
OSPFv3 Extended LSA могут анонсироваться в Extended LSA Sparse
Mode для поддержки постепенного внедрения, как описано в
параграфе 6.2 of RFC 8362.";
leaf extended-lsa-support {
type boolean;
default "false";
description
"Включает поддержку OSPFv3 Extended LSA для домена OSPFv3.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, Приложение A - Global Configuration Support";
}
}
augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/ospf:ospf/ospf:"
+ "areas/ospf:area" {
when "../../../rt:type = 'ospf:ospfv3'" {
description
"Дополняет конфигурацию протокола OSPFv3 на уровне области.";
}
description
"Дополняет конфигурацию протокола OSPFv3 на уровне области
поддержкой Extended LSA.";
leaf extended-lsa-support {
type boolean;
must "derived-from(../ospf:area-type,'stub-nssa-area') or "
+ "(current() = 'true') or "
+ "(../../../extended-lsa-support = 'false')" {
description
"Для обычных областей (области с лавинной рассылкой LSA
уровня AS) отключение AreaExtendedLSASupport на уровне
области запрещено при включении ExtendedLSASupport на
уровне экземпляра. Анонсы E-AS-External-LSA рассылаются
лавинно во все обычные области OSPFv3 (не тупиковые и не
NSSA), поэтому отключение поддержки на уровне области
невозможно.";
}
description
"Дополняет конфигурацию протокола OSPFv3 на уровне области
поддержкой Extended LSA. При включённой поддержке будут
анонсироваться OSPFv3 Extended LSA и не будут передаваться
OSPFv3 Legacy LSA, которые анонсируются при отключённой
поддержке. Однако OSPFv3 Extended LSA могут анонсироваться
в Extended LSA Sparse Mode для поддержки постепенного
внедрения, как описано в параграфе 6.2 of RFC 8362. По
умолчанию статус поддержки Extended LSA наследуется из
конфигурации на уровне экземпляра.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, Приложение B - Area Configuration Support";
}
}
/*
* Дополнения базы состояний каналов (Link State Database или LSDB)
*/
augment "/rt:routing/"
+ "rt:control-plane-protocols/rt:control-plane-protocol/"
+ "ospf:ospf/ospf:areas/ospf:area/"
+ "ospf:interfaces/ospf:interface/ospf:database/"
+ "ospf:link-scope-lsa-type/ospf:link-scope-lsas/"
+ "ospf:link-scope-lsa/ospf:version/ospf:ospfv3/"
+ "ospf:ospfv3/ospf:body" {
when "../../../../../../../../../../../"
+ "rt:type = 'ospf:ospfv3'" {
description
"Это дополнение применимо лишь к OSPFv3.";
}
description
"Добавляет OSPFv3 Link-scoped Extended LSA к рабочему
состоянию LSDB на интерфейсе.";
container e-link {
when "../../ospf:header/ospf:type = "
+ "'ospfv3-e-lsa:ospfv3-e-link-lsa'" {
description
"Применимо лишь к E-Link-LSA.";
}
description
"E-Link-LSA contents.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.7";
leaf rtr-priority {
type uint8;
description
"Приоритет маршрутизатора для интерфейса.";
}
uses ospf:ospfv3-lsa-options;
list e-link-tlvs {
description
"E-Link-LSA TLV.";
container unknown-tlv {
uses ospf:tlv;
description
"Неизвестный E-Link TLV.";
}
uses intra-area-prefix-tlv;
uses ipv6-link-local-addr-tlv;
uses ipv4-link-local-addr-tlv;
}
}
}
augment "/rt:routing/"
+ "rt:control-plane-protocols/rt:control-plane-protocol/"
+ "ospf:ospf/ospf:areas/ospf:area/ospf:database/"
+ "ospf:area-scope-lsa-type/ospf:area-scope-lsas/"
+ "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/"
+ "ospf:ospfv3/ospf:body" {
when "../../../../../../../../../"
+ "rt:type = 'ospf:ospfv3'" {
description
"Это дополнение применимо лишь к OSPFv3.";
}
description
"Добавляет OSPFv3 Area-scoped Extended LSA к рабочему
состоянию LSDB для области.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4";
container e-router {
when "../../ospf:header/ospf:type = "
+ "'ospfv3-e-lsa:ospfv3-e-router-lsa'" {
description
"Применимо лишь к OSPFv3 E-Router-LSA.";
}
description
"Содержимое OSPFv3 E-Router-LSA.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.1";
uses ospf:ospf-router-lsa-bits;
uses ospf:ospfv3-lsa-options;
list e-router-tlvs {
description
"E-Router-LSA TLV.";
container unknown-tlv {
uses ospf:tlv;
description
"Неизвестный E-Router TLV.";
}
container link-tlv {
description
"E-Router-LSA TLV.";
leaf interface-id {
type uint32;
description
"Идентификатор интерфейса для канала.";
}
leaf neighbor-interface-id {
type uint32;
description
"Идентификатор интерфейса соседа по каналу.";
}
leaf neighbor-router-id {
type rt-types:router-id;
description
"Идентификатор соседнего маршрутизатора на канале.";
}
leaf type {
type ospf:router-link-type;
description
"Тип канала: 1 - «точка-точка»
2 - канал в транзитную сеть
3 - канал в тупиковую сеть
4 - виртуальный канал.";
}
leaf metric {
type ospf:ospf-link-metric;
description
"Метрика канала.";
}
list sub-tlvs {
description
"Суб-TLV Link TLV.";
uses unknown-sub-tlv;
}
}
}
}
container e-network {
when "../../ospf:header/ospf:type = "
+ "'ospfv3-e-lsa:ospfv3-e-network-lsa'" {
description
"Применимо лишь к E-Network-LSA.";
}
description
"Содержимое E-Network-LSA.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.2";
uses ospf:ospfv3-lsa-options;
list e-network-tlvs {
description
"E-Network-LSA TLV.";
container unknown-tlv {
uses ospf:tlv;
description
"Неизвестный E-Network TLV.";
}
container attached-router-tlv {
description
"Attached-Routers TLV.";
leaf-list adjacent-neighbor-router-id {
type rt-types:router-id;
description
"Идентификатор смежного маршрутизатора.";
}
}
}
}
container e-nssa {
when "../../ospf:header/ospf:type = "
+ "'ospfv3-e-lsa:ospfv3-e-nssa-lsa'" {
description
"Применимо лишь к E-NSSA-LSA.";
}
description
"Содержимое E-NSSA-LSA.";
list e-external-tlvs {
description
"E-NSSA-LSA TLV.";
container unknown-tlv {
uses ospf:tlv;
description
"Неизвестный E-External TLV.";
}
uses external-prefix-tlv;
}
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.6";
}
container e-inter-area-prefix {
when "../../ospf:header/ospf:type = "
+ "'ospfv3-e-lsa:ospfv3-e-inter-area-prefix-lsa'" {
description
"Применимо лишь к E-Inter-Area-Prefix-LSA.";
}
description
"Содержимое E-Inter-Area-Prefix-LSA.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.3";
list e-inter-prefix-tlvs {
description
"E-Inter-Area-Prefix-LSA TLV.";
container unknown-tlv {
uses ospf:tlv;
description
"Неизвестный E-Inter-Area-Prefix TLV.";
}
container inter-prefix-tlv {
description
"Неизвестный E-Inter-Area-Prefix-LSA TLV.";
leaf metric {
type ospf:ospf-metric;
description
"Метрика внутриобластного префикса.";
}
uses ospfv3-lsa-prefix;
list sub-tlvs {
description
"Суб-TLV Inter-Area-Prefix TLV.";
uses unknown-sub-tlv;
}
}
}
}
container e-inter-area-router {
when "../../ospf:header/ospf:type = "
+ "'ospfv3-e-lsa:ospfv3-e-inter-area-router-lsa'" {
description
"Применимо лишь к E-Inter-Area-Router-LSA.";
}
description
"Содержимое E-Inter-Area-Router-LSA.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.4";
list e-inter-router-tlvs {
description
"E-Inter-Area-Router-LSA TLV.";
container unknown-tlv {
uses ospf:tlv;
description
"Неизвестный E-Inter-Area-Router TLV.";
}
container inter-router-tlv {
description
"Неизвестный E-Inter-Area-Router-LSA TLV.";
uses ospf:ospfv3-lsa-options;
leaf metric {
type ospf:ospf-metric;
description
"Метрика межобластного маршрутизатора.";
}
leaf destination-router-id {
type rt-types:router-id;
description
"Идентификатор целевого маршрутизатора.";
}
list sub-tlvs {
description
"Inter-Area-Router TLV sub-TLV.";
uses unknown-sub-tlv;
}
}
}
}
container e-intra-area-prefix {
when "../../ospf:header/ospf:type = "
+ "'ospfv3-e-lsa:ospfv3-e-intra-area-prefix-lsa'" {
description
"Применимо лишь к E-Intra-Area-Prefix-LSA.";
}
description
"Содержимое E-Intra-Area-Prefix-LSA.";
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.8";
leaf referenced-ls-type {
type uint16;
description
"Тип Referenced Link State.";
}
leaf referenced-link-state-id {
type uint32;
description
"Referenced Link State ID.";
}
leaf referenced-adv-router {
type rt-types:router-id;
description
"Анонсирующий маршрутизатор.";
}
list e-intra-prefix-tlvs {
description
"E-Intra-Area-Prefix-LSA TLV.";
container unknown-tlv {
uses ospf:tlv;
description
"Неизвестный E-Intra-Area-Prefix TLV.";
}
uses intra-area-prefix-tlv;
}
}
}
augment "/rt:routing/"
+ "rt:control-plane-protocols/rt:control-plane-protocol/"
+ "ospf:ospf/ospf:database/"
+ "ospf:as-scope-lsa-type/ospf:as-scope-lsas/"
+ "ospf:as-scope-lsa/ospf:version/ospf:ospfv3/"
+ "ospf:ospfv3/ospf:body" {
when "../../../../../../../"
+ "rt:type = 'ospf:ospfv3'" {
description
"Это дополнение действительно лишь для OSPFv3.";
}
description
"Это дополнение добавляет OSPFv3 AS-scoped Extended LSA к
рабочему состоянию для LSDB на уровне экземпляра AS.";
container e-as-external {
when "../../ospf:header/ospf:type = "
+ "'ospfv3-e-lsa:ospfv3-e-as-external-lsa'" {
description
"Применимо лишь к E-AS-External-LSA.";
}
description
"Содержимое E-AS-External-LSA.";
list e-external-tlvs {
description
"E-AS-External-LSA TLV.";
container unknown-tlv {
uses ospf:tlv;
description
"Неизвестный E-External TLV.";
}
uses external-prefix-tlv;
}
reference
"RFC 8362: OSPFv3 Link State Advertisement (LSA)
Extensibility, параграф 4.5";
}
}
}
<CODE ENDS>
5. Вопросы безопасности
Заданный этим документом модуль YANG определяет схему для данных, предназначенную для доступа через сеть с использованием протоколов управления, таких как NETCONF [RFC6241] или RESTCONF [RFC8040]. Нижним уровнем NETCONF служит защищённый транспорт с обязательной поддержкой SSH (Secure Shell) [RFC6242]. Нижним уровнем RESTCONF служит протокол HTTPS с обязательной поддержкой защиты на транспортном уровне (TLS) [RFC8446].
Модель доступа к конфигурации сети (NACM – Network Configuration Access Control Model) [RFC8341] обеспечивает возможность разрешить доступ лишь определённых пользователей NETCONF или RESTCONF к заранее заданному подмножеству операций NETCONF или RESTCONF и содержимого.
В заданном здесь модуле ietf-ospfv3-extended-lsa.yang определено множество узлов данных, которые разрешают запись, создание и удаление (т. е. config true, как принято по умолчанию). Эти узлы могут быть конфиденциальными или уязвимыми в некоторых сетевых средах. Запись в такие узлы (например, edit-config) без должной защиты может негативно влиять на работу сети. Ниже перечислены ветви и узлы, которые могут быть конфиденциальны или уязвимы.
/ospf:ospf/extended-lsa-support
/ospf:ospf/ospf:areas/ospf:area/extended-lsa-support
Способность управлять поддержкой OSPFv3 Extended LSA может приводить к атакам на службы (Denial-of-Service или DoS), поскольку маршрутизаторы OSPFv3 будут использовать для расчётов OSPFv3 SPF исключительно OSPFv3 Extended LSA, либо OSPFv3 Legacy LSA. Использование маршрутизаторами OSPFv3 разных типов LSA приведёт к неполной доступности и возможному разделению на части домена маршрутизации OSPFv3. Дополнительные сведения о совместимости OSPFv3 Extended LSA приведены в разделе 6 [RFC8362].Некоторые из доступных для чтения узлов в этом модуле YANG могут быть конфиденциальны или уязвимы в той или иной сетевой среде. Важно контролировать доступ к таким объектам (например, get, get-config, notification).
Раскрытие LSDB будет приводить к раскрытию топологии сети, включая топологические сведения от других маршрутизаторов. Это может быть нежелательно из-за того, что может способствовать другим атакам. Кроме того, операторы могут считать сведения о топологии своих сетей конфиденциальными.
6. Взаимодействие с IANA
В соответствии с этим документом агентство IANA внесло URI в реестр IETF XML Registry [RFC3688]
URI: urn:ietf:params:xml:ns:yang:ietf-ospfv3-extended-lsa Registrant Contact: The IESG. XML: N/A; запрошенный URI является пространством имён XML.
В соответствии с этим документом агентство IANA зарегистрировало модуль YANG в реестре YANG Module Names [RFC6020]
Name: ietf-ospfv3-extended-lsa Maintained by IANA: N Namespace: urn:ietf:params:xml:ns:yang:ietf-ospfv3-extended-lsa Prefix: ospfv3-e-lsa Reference: RFC 9587
7. Литература
7.1. Нормативные документы
[RFC3688] Mealling, M., «The IETF XML Registry», BCP 81, RFC 3688, DOI 10.17487/RFC3688, January 2004, <https://www.rfc-editor.org/info/rfc3688>.
[RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, «OSPF for IPv6», RFC 5340, DOI 10.17487/RFC5340, July 2008, <https://www.rfc-editor.org/info/rfc5340>.
[RFC6020] Bjorklund, M., Ed., «YANG — A Data Modeling Language for the Network Configuration Protocol (NETCONF)», RFC 6020, DOI 10.17487/RFC6020, October 2010, <https://www.rfc-editor.org/info/rfc6020>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., «Network Configuration Protocol (NETCONF)», RFC 6241, DOI 10.17487/RFC6241, June 2011, <https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., «Using the NETCONF Protocol over Secure Shell (SSH)», RFC 6242, DOI 10.17487/RFC6242, June 2011, <https://www.rfc-editor.org/info/rfc6242>.
[RFC6991] Schoenwaelder, J., Ed., «Common YANG Data Types», RFC 6991, DOI 10.17487/RFC6991, July 2013, <https://www.rfc-editor.org/info/rfc6991>.
[RFC7950] Bjorklund, M., Ed., «The YANG 1.1 Data Modeling Language», RFC 7950, DOI 10.17487/RFC7950, August 2016, <https://www.rfc-editor.org/info/rfc7950>.
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, «RESTCONF Protocol», RFC 8040, DOI 10.17487/RFC8040, January 2017, <https://www.rfc-editor.org/info/rfc8040>.
[RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, «Common YANG Data Types for the Routing Area», RFC 8294, DOI 10.17487/RFC8294, December 2017, <https://www.rfc-editor.org/info/rfc8294>.
[RFC8341] Bierman, A. and M. Bjorklund, «Network Configuration Access Control Model», STD 91, RFC 8341, DOI 10.17487/RFC8341, March 2018, <https://www.rfc-editor.org/info/rfc8341>.
[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>.
[RFC8349] Lhotka, L., Lindem, A., and Y. Qu, «A YANG Data Model for Routing Management (NMDA Version)», RFC 8349, DOI 10.17487/RFC8349, March 2018, <https://www.rfc-editor.org/info/rfc8349>.
[RFC8362] Lindem, A., Roy, A., Goethals, D., Reddy Vallem, V., and F. Baker, «OSPFv3 Link State Advertisement (LSA) Extensibility», RFC 8362, DOI 10.17487/RFC8362, April 2018, <https://www.rfc-editor.org/info/rfc8362>.
[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>.
[RFC9129] Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, «YANG Data Model for the OSPF Protocol», RFC 9129, DOI 10.17487/RFC9129, October 2022, <https://www.rfc-editor.org/info/rfc9129>.
[W3C.REC-xml-20081126] Bray, T., Paoli, J., Sperberg-McQueen, C. M., Maler, E., and F. Yergeau, «Extensible Markup Language (XML) 1.0 (Fifth Edition)», W3C Recommendation REC-xml-20081126, November 2008, <https://www.w3.org/TR/xml/>.
7.2. Дополнительная литература
[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>.
[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>.
[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>.
Приложение A. Пример конфигурации
Ниже приведён пример XML (в соответствии с [W3C.REC-xml-20081126]) использования модели данных YANG для OSPFv3 Extended LSA. Длинные строки разорваны (\) в соответствии с [RFC8792].
<?xml version='1.0' encoding='UTF-8'?>
<routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing">
<router-id>192.0.2.1</router-id>
<control-plane-protocols>
<control-plane-protocol>
<type xmlns:ospf="urn:ietf:params:xml:ns:yang:ietf-ospf">\
ospf:ospfv3</type>
<name>"OSPFv3"</name>
<ospf xmlns="urn:ietf:params:xml:ns:yang:ietf-ospf">
<extended-lsa-support xmlns="urn:ietf:params:xml:ns:yang:\
ietf-ospfv3-extended-lsa">true</extended-lsa-support>
</ospf>
</control-plane-protocol>
</control-plane-protocols>
</routing>
Этот же пример в формате JSON [RFC7951] показан ниже.
{
"routing": {
"router-id": "192.0.2.1",
"control-plane-protocols": {
"control-plane-protocol": {
"type": "ospf:ospfv3",
"name": "\"OSPFv3\"",
"ospf": {
"extended-lsa-support": true
}
}
}
}
}
Благодарности
Определённая в этом документе модель данных YANG была создана с помощью набора инструментов YANG, созданных и поддерживаемых множеством авторов.
Большое спасибо Tom Petch, Mahesh Jethanandani, Renato Westphal, Victoria Pritchard, Reshad Rahman, Chris Hopps за их рецензии и комментарии.
Адреса авторов
Acee Lindem LabN Consulting, L.L.C. 301 Midenhall Way Cary, NC 27513 United States of America Email: acee.ietf@gmail.com Sharmila Palani Microsoft 1 Microsoft Way Redmond, WA 98052 United States of America Email: sharmila.palani@microsoft.com Yingzhen Qu Futurewei Technologies 2330 Central Expressway Santa Clara, CA 95050 United States of America Email: yingzhen.ietf@gmail.comПеревод на русский язык
1Internet Engineering Task Force — комиссия по решению инженерных задач Internet.
2Internet Engineering Steering Group — комиссия по инженерным разработкам Internet.