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.