| < draft-ietf-i2rs-yang-l2-network-topology-14.txt | draft-ietf-i2rs-yang-l2-network-topology-15.txt > | |||
|---|---|---|---|---|
| Network Working Group J. Dong | Network Working Group J. Dong | |||
| Internet-Draft X. Wei | Internet-Draft X. Wei | |||
| Intended status: Standards Track Q. Wu | Intended status: Standards Track Q. Wu | |||
| Expires: December 31, 2020 Huawei | Expires: January 13, 2021 Huawei | |||
| M. Boucadair | M. Boucadair | |||
| Orange | Orange | |||
| A. Liu | A. Liu | |||
| Tecent | Tecent | |||
| June 29, 2020 | July 12, 2020 | |||
| A YANG Data Model for Layer 2 Network Topologies | A YANG Data Model for Layer 2 Network Topologies | |||
| draft-ietf-i2rs-yang-l2-network-topology-14 | draft-ietf-i2rs-yang-l2-network-topology-15 | |||
| Abstract | Abstract | |||
| This document defines a YANG data model for Layer 2 network | This document defines a YANG data model for Layer 2 network | |||
| topologies. In particular, this data model augments the generic | topologies. In particular, this data model augments the generic | |||
| network and network topology data models with Layer 2 specific | network and network topology data models with Layer 2 specific | |||
| topology attributes. | topology attributes. | |||
| Editorial Note (To be removed by RFC Editor) | Editorial Note (To be removed by RFC Editor) | |||
| skipping to change at page 2, line 4 ¶ | skipping to change at page 2, line 4 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on December 31, 2020. | This Internet-Draft will expire on January 13, 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 3, line 38 ¶ | skipping to change at page 3, line 38 ¶ | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| The terminology for describing YANG modules is defined in [RFC7950]. | The terminology for describing YANG modules is defined in [RFC7950]. | |||
| The meanings of the symbols used in the tree diagram are defined in | The meanings of the symbols used in the tree diagram are defined in | |||
| [RFC8340]. | [RFC8340]. | |||
| 3. Layer 2 Topology Model | 3. Layer 2 Topology Model | |||
| The Layer 2 (L2) network topology YANG module is designed to be | The Layer 2 network topology YANG module is designed to be generic | |||
| generic and applicable to Layer 2 networks built with different L2 | and applicable to Layer 2 networks built with different Layer 2 | |||
| technologies. It can be used to describe both the physical and the | technologies. It can be used to describe both the physical and the | |||
| logical (virtual) L2 network topologies. | logical (virtual) Layer 2 network topologies. | |||
| The relationship between the Layer 2 topology module and the generic | The relationship between the Layer 2 topology module and the generic | |||
| network and network topology module is shown in Figure 1. In order | network and network topology module is shown in Figure 1. In order | |||
| to represent a Layer 2 network topology, the generic network and | to represent a Layer 2 network topology, the generic network and | |||
| topology models are augmented with Layer 2 specific information, such | topology models are augmented with Layer 2 specific information, such | |||
| as the identifiers, identities (e.g., Provider Backbone Bridging | as the identifiers, identities (e.g., Provider Backbone Bridging | |||
| [IEEE802.1ah], QinQ [IEEE802.1ad], or VXLAN [RFC7348]), attributes, | [IEEE802.1ah], QinQ [IEEE802.1ad], or VXLAN [RFC7348]), attributes, | |||
| and states of the Layer 2 networks, nodes, links, and termination | and states of the Layer 2 networks, nodes, links, and termination | |||
| points. Some of the information may be collected via Link Layer | points. Some of the information may be collected via Link Layer | |||
| Discovery Protocol (LLDP) [IEEE802.1AB] or other Layer 2 protocols, | Discovery Protocol (LLDP) [IEEE802.1AB] or other Layer 2 protocols, | |||
| skipping to change at page 4, line 24 ¶ | skipping to change at page 4, line 24 ¶ | |||
| | | | | |||
| +----------^----------+ | +----------^----------+ | |||
| | ietf-l2-topology | | | ietf-l2-topology | | |||
| +---------------------+ | +---------------------+ | |||
| Figure 1: Layer 2 Topology YANG Module Structure | Figure 1: Layer 2 Topology YANG Module Structure | |||
| The structure of the "ietf-l2-topology" YANG module is depicted in | The structure of the "ietf-l2-topology" YANG module is depicted in | |||
| the following tree diagram: | the following tree diagram: | |||
| module: ietf-l2-topology | module: ietf-l2-topology | |||
| augment /nw:networks/nw:network/nw:network-types: | augment /nw:networks/nw:network/nw:network-types: | |||
| +--rw l2-network! | +--rw l2-network! | |||
| augment /nw:networks/nw:network: | augment /nw:networks/nw:network: | |||
| +--rw l2-network-attributes | +--rw l2-topology-attributes | |||
| +--rw name? string | +--rw name? string | |||
| +--rw flag* l2-flag-type | +--rw flags* l2-flag-type | |||
| augment /nw:networks/nw:network/nw:node: | augment /nw:networks/nw:network/nw:node: | |||
| +--rw l2-node-attributes | +--rw l2-node-attributes | |||
| +--rw name? string | +--rw name? string | |||
| +--rw description? string | +--rw description? string | |||
| +--rw management-address* inet:ip-address | +--rw management-address* inet:ip-address | |||
| +--rw sys-mac-address? yang:mac-address | +--rw sys-mac-address? yang:mac-address | |||
| +--rw management-vid? dot1q-types:vlanid {VLAN}? | +--rw management-vlan-id? dot1q-types:vlanid {VLAN}? | |||
| +--rw flag* node-flag-type | +--rw flags* node-flag-type | |||
| augment /nw:networks/nw:network/nt:link: | augment /nw:networks/nw:network/nt:link: | |||
| +--rw l2-link-attributes | +--rw l2-link-attributes | |||
| +--rw name? string | +--rw name? string | |||
| +--rw flag* link-flag-type | +--rw flags* link-flag-type | |||
| +--rw rate? decimal64 | +--rw rate? uint64 | |||
| +--rw delay? uint32 | +--rw delay? uint32 | |||
| augment /nw:networks/nw:network/nw:node/nt:termination-point: | augment /nw:networks/nw:network/nw:node/nt:termination-point: | |||
| +--rw l2-termination-point-attributes | +--rw l2-termination-point-attributes | |||
| +--rw description? string | +--rw description? string | |||
| +--rw maximum-frame-size? uint32 | +--rw maximum-frame-size? uint32 | |||
| +--rw (l2-termination-point-type)? | +--rw (l2-termination-point-type)? | |||
| | +--:(ethernet) | ||||
| | | +--rw mac-address? yang:mac-address | ||||
| | | +--rw eth-encapsulation? identityref | ||||
| | | +--rw lag? boolean | ||||
| | | +--rw member-link-tp* -> /nw:networks/network | ||||
| /node/nt:termination-point/tp-id | ||||
| | | +--rw auto-negotiation? boolean | ||||
| | | +--rw duplex? duplex-mode | ||||
| | | +--rw default-untagged-vlan? dot1q-types:vlanid {VLAN}? | ||||
| | | +--rw vlans* [vlan-id] {VLAN}? | ||||
| | | | +--rw vlan-id dot1q-types:vlanid | ||||
| | | | +--rw name? string | ||||
| | | +--rw qinq* [svlan-id cvlan-id] {QinQ}? | ||||
| | | | +--rw svlan-id dot1q-types:vlanid | ||||
| | | | +--rw cvlan-id dot1q-types:vlanid | ||||
| | | +--rw vxlan {VXLAN}? | ||||
| | | +--rw vni-id? vni | ||||
| | +--:(legacy) | ||||
| | +--rw layer-2-address? yang:phys-address | ||||
| | +--rw encapsulation? identityref | ||||
| +--ro tp-state? identityref | ||||
| notifications: | ||||
| +---n l2-node-event | ||||
| | +--ro event-type? l2-network-event-type | ||||
| | +--ro node-ref? -> /nw:networks/network | ||||
| [nw:network-id=current()/../network-ref]/node/node-id | ||||
| | +--ro network-ref? -> /nw:networks/network/network-id | ||||
| | +--ro l2-network! | ||||
| | +--ro l2-node-attributes | ||||
| | +--ro name? string | ||||
| | +--ro description? string | ||||
| | +--ro management-address* inet:ip-address | ||||
| | +--ro sys-mac-address? yang:mac-address | ||||
| | +--ro management-vlan-id? dot1q-types:vlanid {VLAN}? | ||||
| | +--ro flags* node-flag-type | ||||
| +---n l2-link-event | ||||
| | +--ro event-type? l2-network-event-type | ||||
| | +--ro link-ref? -> /nw:networks/network | ||||
| [nw:network-id=current()/../network-ref]/nt:link/link-id | ||||
| | +--ro network-ref? -> /nw:networks/network/network-id | ||||
| | +--ro l2-network! | ||||
| | +--ro l2-link-attributes | ||||
| | +--ro name? string | ||||
| | +--ro flags* link-flag-type | ||||
| | +--ro rate? uint64 | ||||
| | +--ro delay? uint32 | ||||
| +---n l2-termination-point-event | ||||
| +--ro event-type? l2-network-event-type | ||||
| +--ro tp-ref? -> /nw:networks/network | ||||
| [nw:network-id=current()/../network-ref]/node | ||||
| [nw:node-id=current()/../node-ref]/nt:termination-point/tp-id | ||||
| +--ro node-ref? -> /nw:networks/network | ||||
| [nw:network-id=current()/../network-ref]/node/node-id | ||||
| +--ro network-ref? -> /nw:networks/network/network-id | ||||
| +--ro l2-network! | ||||
| +--ro l2-termination-point-attributes | ||||
| +--ro description? string | ||||
| +--ro maximum-frame-size? uint32 | ||||
| +--ro (l2-termination-point-type)? | ||||
| | +--:(ethernet) | | +--:(ethernet) | |||
| | | +--rw mac-address? yang:mac-address | | | +--ro mac-address? yang:mac-address | |||
| | | +--rw eth-encapsulation? identityref | | | +--ro eth-encapsulation? identityref | |||
| | | +--rw lag? boolean | | | +--ro lag? boolean | |||
| | | +--rw member-link-tp* leafref | | | +--ro member-link-tp* -> /nw:networks/network | |||
| | | +--rw mode? neg-mode | /node/nt:termination-point/tp-id | |||
| | | +--rw port-vlan-id? dot1q-types:vlanid {VLAN}? | | | +--ro auto-nego? boolean | |||
| | | +--rw vlan-id-name* [vlan-id] {VLAN}? | | | +--ro duplex? duplex-mode | |||
| | | | +--rw vlan-id dot1q-types:vlanid | | | +--ro default-untagged-vlan? dot1q-types:vlanid {VLAN}? | |||
| | | | +--rw vlan-name? string | | | +--ro vlans* [vlan-id] {VLAN}? | |||
| | | +--rw qinq* [svlan-id cvlan-id] {QinQ}? | | | | +--ro vlan-id dot1q-types:vlanid | |||
| | | | +--rw svlan-id dot1q-types:vlanid | | | | +--ro name? string | |||
| | | | +--rw cvlan-id dot1q-types:vlanid | | | +--ro qinq* [svlan-id cvlan-id] {QinQ}? | |||
| | | +--rw vxlan {VXLAN}? | | | | +--ro svlan-id dot1q-types:vlanid | |||
| | | +--rw vni-id? vni | | | | +--ro cvlan-id dot1q-types:vlanid | |||
| | | +--ro vxlan {VXLAN}? | ||||
| | | +--ro vni-id? vni | ||||
| | +--:(legacy) | | +--:(legacy) | |||
| | +--rw layer-2-address? yang:phys-address | | +--ro layer-2-address? yang:phys-address | |||
| | +--rw encapsulation? identityref | | +--ro encapsulation? identityref | |||
| +--ro tp-state? enumeration | +--ro tp-state? identityref | |||
| notifications: | ||||
| +---n l2-node-event | ||||
| | +--ro event-type? l2-network-event-type | ||||
| | +--ro node-ref? leafref | ||||
| | +--ro network-ref? -> /nw:networks/network/network-id | ||||
| | +--ro l2-network! | ||||
| | +--ro l2-node-attributes | ||||
| | +--ro name? string | ||||
| | +--ro description? string | ||||
| | +--ro management-address* inet:ip-address | ||||
| | +--ro sys-mac-address? yang:mac-address | ||||
| | +--ro management-vid? dot1q-types:vlanid {VLAN}? | ||||
| | +--ro flag* node-flag-type | ||||
| +---n l2-link-event | ||||
| | +--ro event-type? l2-network-event-type | ||||
| | +--ro link-ref? leafref | ||||
| | +--ro network-ref? -> /nw:networks/network/network-id | ||||
| | +--ro l2-network! | ||||
| | +--ro l2-link-attributes | ||||
| | +--ro name? string | ||||
| | +--ro flag* link-flag-type | ||||
| | +--ro rate? decimal64 | ||||
| | +--ro delay? uint32 | ||||
| +---n l2-termination-point-event | ||||
| +--ro event-type? l2-network-event-type | ||||
| +--ro tp-ref? leafref | ||||
| +--ro node-ref? leafref | ||||
| +--ro network-ref? | ||||
| | -> /nw:networks/network/network-id | ||||
| +--ro l2-network! | ||||
| +--ro l2-termination-point-attributes | ||||
| +--ro description? string | ||||
| +--ro maximum-frame-size? uint32 | ||||
| +--ro (l2-termination-point-type)? | ||||
| | +--:(ethernet) | ||||
| | | +--ro mac-address? yang:mac-address | ||||
| | | +--ro eth-encapsulation? identityref | ||||
| | | +--ro lag? boolean | ||||
| | | +--ro member-link-tp* leafref | ||||
| | | +--ro mode? neg-mode | ||||
| | | +--ro port-vlan-id? dot1q-types:vlanid | ||||
| | | | {VLAN}? | ||||
| | | +--ro vlan-id-name* [vlan-id] {VLAN}? | ||||
| | | | +--ro vlan-id dot1q-types:vlanid | ||||
| | | | +--ro vlan-name? string | ||||
| | | +--ro qinq* [svlan-id cvlan-id] {QinQ}? | ||||
| | | | +--ro svlan-id dot1q-types:vlanid | ||||
| | | | +--ro cvlan-id dot1q-types:vlanid | ||||
| | | +--ro vxlan {VXLAN}? | ||||
| | | +--ro vni-id? vni | ||||
| | +--:(legacy) | ||||
| | +--ro layer-2-address? yang:phys-address | ||||
| | +--ro encapsulation? identityref | ||||
| +--ro tp-state? enumeration | ||||
| The Layer 2 topology YANG module augments the "ietf-network" and | The Layer 2 topology YANG module augments the "ietf-network" and | |||
| "ietf-network-topology" YANG modules as follows: | "ietf-network-topology" YANG modules as follows: | |||
| o A new network type "l2-network-type" is introduced. This is | o A new network type "l2-network-type" is introduced. This is | |||
| represented by a container object, and is inserted under the | represented by a container object, and is inserted under the | |||
| "network-types" container of the generic "ietf-network" module | "network-types" container of the generic "ietf-network" module | |||
| defined in Section 6.1 of [RFC8345]. | defined in Section 6.1 of [RFC8345]. | |||
| o Additional network attributes are introduced in a grouping "l2- | o Additional network attributes are introduced in a grouping "l2- | |||
| skipping to change at page 6, line 44 ¶ | skipping to change at page 7, line 4 ¶ | |||
| defined in Section 6.1 of [RFC8345]. | defined in Section 6.1 of [RFC8345]. | |||
| o Additional network attributes are introduced in a grouping "l2- | o Additional network attributes are introduced in a grouping "l2- | |||
| network-attributes", which augments the "network" list of the | network-attributes", which augments the "network" list of the | |||
| "ietf-network" module. The attributes include Layer 2 network | "ietf-network" module. The attributes include Layer 2 network | |||
| name and a set of flags. Each type of flag is represented by a | name and a set of flags. Each type of flag is represented by a | |||
| separate identity. | separate identity. | |||
| o Additional data objects for Layer 2 nodes are introduced by | o Additional data objects for Layer 2 nodes are introduced by | |||
| augmenting the "node" list of the generic "ietf-network" module. | augmenting the "node" list of the generic "ietf-network" module. | |||
| New objects include Layer 2 node identifier, description, | New objects include Layer 2 node identifier, description, | |||
| management address, and a set of flags. | management address, and a set of flags. | |||
| o Additional data objects for Layer 2 termination points are | o Additional data objects for Layer 2 termination points are | |||
| introduced by augmenting the "termination-point" list of the | introduced by augmenting the "termination-point" list of the | |||
| "ietf-network-topology" module defined in Section 6.2 of | "ietf-network-topology" module defined in Section 6.2 of | |||
| [RFC8345]. New objects include Layer 2 termination point | [RFC8345]. New objects include Layer 2 termination point | |||
| descriptions, Layer 2 termination point type specific attributes | descriptions, Layer 2 termination point type specific attributes | |||
| and Layer 2 termination point states. | and Layer 2 termination point states. | |||
| o Links in the "ietf-network-topology" module are augmented as well | o Links in the "ietf-network-topology" module are augmented as well | |||
| with a set of Layer 2 parameters, allowing to associate a link | with a set of Layer 2 parameters, allowing to associate a link | |||
| with a name, a set of Layer 2 link attributes, and flags. | with a name, a set of Layer 2 link attributes, and flags. | |||
| o Some optional L2 technology specific attributes are introduced in | o Some optional Layer 2 technology specific attributes are | |||
| this module as Layer 2 features because these attributes may be | introduced in this module as Layer 2 features because these | |||
| useful to expose to above services/applications. Note that | attributes may be useful to expose to above services/applications. | |||
| learning or configuring advanced L2 technology-specific attributes | Note that learning or configuring advanced Layer 2 technology- | |||
| is not within the scope of the Layer 2 Topology YANG module; | specific attributes is not within the scope of the Layer 2 | |||
| dedicated YANG modules should be used instead (e.g., | Topology YANG module; dedicated YANG modules should be used | |||
| [I-D.ietf-trill-yang]). | instead (e.g., [I-D.ietf-trill-yang]). | |||
| 4. Layer 2 Topology YANG Module | 4. Layer 2 Topology YANG Module | |||
| This module uses types defined in [RFC6991], [RFC7224], | This module uses types defined in [RFC6991], [RFC7224], | |||
| [IEEE802.1Qcp], and [RFC8345]. It also references [RFC4761], | [IEEE802.1Qcp], and [RFC8345]. It also references [RFC4761], | |||
| [RFC4762], and [RFC4202]. | [RFC4762], and [RFC4202]. | |||
| <CODE BEGINS> file "ietf-l2-topology@2020-06-29.yang" | <CODE BEGINS> file "ietf-l2-topology@2020-06-29.yang" | |||
| module ietf-l2-topology { | module ietf-l2-topology { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-l2-topology"; | namespace "urn:ietf:params:xml:ns:yang:ietf-l2-topology"; | |||
| prefix l2t; | prefix l2t; | |||
| import ietf-network { | import ietf-network { | |||
| prefix nw; | prefix nw; | |||
| reference | reference | |||
| "RFC 8345: A YANG Data Model for Network Topologies"; | "RFC 8345: A YANG Data Model for Network Topologies"; | |||
| } | } | |||
| import ietf-network-topology { | import ietf-network-topology { | |||
| prefix nt; | prefix nt; | |||
| reference | reference | |||
| "RFC 8345: A YANG Data Model for Network Topologies"; | "RFC 8345: A YANG Data Model for Network Topologies"; | |||
| } | } | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix inet; | prefix inet; | |||
| reference | reference | |||
| "Section 4 of RFC 6991"; | "RFC 6991:Common YANG Data Types"; | |||
| } | ||||
| import ietf-yang-types { | ||||
| prefix yang; | ||||
| reference | ||||
| "Section 3 of RFC 6991"; | ||||
| } | ||||
| import iana-if-type { | ||||
| prefix ift; | ||||
| reference | ||||
| "RFC 7224: IANA Interface Type YANG Module"; | ||||
| } | ||||
| import ieee802-dot1q-types { | ||||
| prefix dot1q-types; | ||||
| reference | ||||
| "IEEE Std 802.1Qcp-2018: Bridges and Bridged | ||||
| Networks - Amendment: YANG Data Model"; | ||||
| } | ||||
| organization | } | |||
| "IETF I2RS (Interface to the Routing System) Working Group"; | import ietf-yang-types { | |||
| contact | prefix yang; | |||
| "WG Web: <http://tools.ietf.org/wg/i2rs/> | reference | |||
| WG List: <mailto:i2rs@ietf.org> | "RFC 6991:Common YANG Data Types"; | |||
| } | ||||
| import iana-if-type { | ||||
| prefix ift; | ||||
| reference | ||||
| "RFC 7224: IANA Interface Type YANG Module"; | ||||
| } | ||||
| import ieee802-dot1q-types { | ||||
| prefix dot1q-types; | ||||
| reference | ||||
| "IEEE Std 802.1Qcp-2018: Bridges and Bridged | ||||
| Networks - Amendment: YANG Data Model"; | ||||
| } | ||||
| Editor: Jie Dong | organization | |||
| <mailto:jie.dong@huawei.com> | "IETF I2RS (Interface to the Routing System) Working Group"; | |||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/i2rs/> | ||||
| WG List: <mailto:i2rs@ietf.org> | ||||
| Editor: Xiugang Wei | Editor: Jie Dong | |||
| <mailto:weixiugang@huawei.com> | <mailto:jie.dong@huawei.com> | |||
| Editor: Qin Wu | Editor: Xiugang Wei | |||
| <mailto:bill.wu@huawei.com> | <mailto:weixiugang@huawei.com> | |||
| Editor: Mohamed Boucadair | Editor: Qin Wu | |||
| <mailto:mohamed.boucadair@orange.com> | <mailto:bill.wu@huawei.com> | |||
| Editor: Anders Liu | Editor: Mohamed Boucadair | |||
| <andersliu@tencent.com>"; | <mailto:mohamed.boucadair@orange.com> | |||
| description | ||||
| "This module defines a basic model for the Layer 2 topology | ||||
| of a network. | ||||
| Copyright (c) 2020 IETF Trust and the persons identified as | Editor: Anders Liu | |||
| authors of the code. All rights reserved. | <andersliu@tencent.com>"; | |||
| description | ||||
| "This module defines a basic model for the Layer 2 topology | ||||
| of a network. | ||||
| Redistribution and use in source and binary forms, with or | Copyright (c) 2020 IETF Trust and the persons identified as | |||
| without modification, is permitted pursuant to, and subject | authors of the code. All rights reserved. | |||
| to the license terms contained in, the Simplified BSD License | ||||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (http://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC XXXX; see | Redistribution and use in source and binary forms, with or | |||
| the RFC itself for full legal notices."; | without modification, is permitted pursuant to, and subject | |||
| to the license terms contained in, the Simplified BSD License | ||||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (http://trustee.ietf.org/license-info). | ||||
| revision 2020-06-29 { | This version of this YANG module is part of RFC XXXX; see | |||
| description | the RFC itself for full legal notices."; | |||
| "Initial revision"; | ||||
| reference | ||||
| "RFC XXXX: A YANG Data Model for Layer 2 Network | ||||
| Topologies"; | ||||
| } | ||||
| /* | revision 2020-06-29 { | |||
| * Typedefs | description | |||
| */ | "Initial revision"; | |||
| reference | ||||
| "RFC XXXX: A YANG Data Model for Layer 2 | ||||
| Network Topologies"; | ||||
| } | ||||
| typedef vni { | feature VLAN { | |||
| type uint32 { | description | |||
| range "0..16777215"; | "Enables VLAN tag support as defined in IEEE 802.1Q."; | |||
| } | reference | |||
| description | "IEEE Std 802.1Q-2014: Bridges and Bridged Networks"; | |||
| "VXLAN Network Identifier or VXLAN Segment ID. | } | |||
| It allows up to 16 M VXLAN segments to coexist | ||||
| within the same administrative domain. | ||||
| The use of value '0' is implementation-specific."; | feature QinQ { | |||
| reference | description | |||
| "RFC 7348: Virtual eXtensible Local Area Network (VXLAN): | "Enables QinQ double tag support as defined in IEEE 802.1ad."; | |||
| A Framework for Overlaying Virtualized Layer 2 | reference | |||
| Networks over Layer 3 Networks"; | "IEEE Std 802.1ad: Provider Bridges"; | |||
| } | } | |||
| typedef l2-flag-type { | feature VXLAN { | |||
| type identityref { | description | |||
| base flag-identity; | "Enables VXLAN support as defined in RFC7348."; | |||
| } | reference | |||
| description | "RFC 7348: Virtual eXtensible Local Area Network (VXLAN): | |||
| "Base type for L2 flags. One example of L2 flag | A Framework for Overlaying Virtualized Layer 2 | |||
| type is trill which represents trill topology | Networks over Layer 3 Networks"; | |||
| type."; | } | |||
| } | ||||
| typedef node-flag-type { | identity flag-identity { | |||
| type identityref { | description | |||
| base flag-identity; | "Base type for flags."; | |||
| } | } | |||
| description | ||||
| "Node flag attributes. The physical node can be | ||||
| one example of node flag attribute."; | ||||
| } | ||||
| typedef link-flag-type { | identity eth-encapsulation-type { | |||
| type identityref { | base ift:iana-interface-type; | |||
| base flag-identity; | description | |||
| } | "Base identity from which specific Ethernet | |||
| description | encapsulation types are derived."; | |||
| "Link flag attributes. One example of link flag | ||||
| attribute is the pseudowire."; | ||||
| } | ||||
| typedef l2-network-event-type { | reference | |||
| type enumeration { | "RFC 7224: IANA Interface Type YANG Module"; | |||
| enum add { | } | |||
| value 0; | ||||
| description | ||||
| "A Layer 2 node or link or termination-point | ||||
| has been added."; | ||||
| } | ||||
| enum remove { | ||||
| value 1; | ||||
| description | ||||
| "A Layer 2 node or link or termination-point | ||||
| has been removed."; | ||||
| } | ||||
| enum update { | ||||
| value 2; | ||||
| description | ||||
| "A Layer 2 node or link or termination-point | ||||
| has been updated."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Layer 2 network event type for notifications."; | ||||
| } | ||||
| typedef neg-mode { | identity ethernet { | |||
| type enumeration { | base eth-encapsulation-type; | |||
| enum full-duplex { | description | |||
| description | "Native Ethernet encapsulation."; | |||
| "Indicates full-duplex mode."; | } | |||
| } | ||||
| enum auto-neg { | ||||
| description | ||||
| "Indicates auto-negotiation mode."; | ||||
| } | ||||
| enum half-duplex { | ||||
| description | ||||
| "Indicates half-duplex mode."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Indicates the type of the negotiation mode."; | ||||
| } | ||||
| /* | identity vlan { | |||
| base eth-encapsulation-type; | ||||
| description | ||||
| "VLAN encapsulation."; | ||||
| } | ||||
| * Features | identity qinq { | |||
| */ | base eth-encapsulation-type; | |||
| description | ||||
| "QinQ encapsulation."; | ||||
| } | ||||
| feature VLAN { | identity pbb { | |||
| description | base eth-encapsulation-type; | |||
| "Indicates that the system supports the | description | |||
| vlan functions (also known as an IEEE 802.1Q tag)."; | "Provider-backbone-bridging (PBB) encapsulation. | |||
| } | The PBB functions are developed in IEEE 802.1ah."; | |||
| } | ||||
| feature QinQ { | identity trill { | |||
| description | base eth-encapsulation-type; | |||
| "Indicates that the system supports the | description | |||
| qinq functions (also known as IEEE 802.1ad double tag)."; | "TRILL encapsulation."; | |||
| } | } | |||
| feature VXLAN { | identity vpls { | |||
| description | base eth-encapsulation-type; | |||
| "Indicates that the device supports VXLAN functions."; | description | |||
| reference | "Ethernet VPLS interface encapsulation."; | |||
| "RFC 7348: Virtual eXtensible Local Area Network (VXLAN): | } | |||
| A Framework for Overlaying Virtualized Layer 2 | ||||
| Networks over Layer 3 Networks"; | ||||
| } | ||||
| /* | identity vxlan { | |||
| * Identities | base eth-encapsulation-type; | |||
| */ | description | |||
| "VXLAN MAC in UDP encapsulation."; | ||||
| reference | ||||
| "RFC 7348: Virtual eXtensible Local Area Network (VXLAN): | ||||
| A Framework for Overlaying Virtualized Layer 2 | ||||
| Networks over Layer 3 Networks"; | ||||
| } | ||||
| identity flag-identity { | identity tp-state-type { | |||
| description | description | |||
| "Base type for flags."; | "Base type for termination point state."; | |||
| } | } | |||
| identity eth-encapsulation-type { | identity inuse { | |||
| base ift:iana-interface-type; | base tp-state-type; | |||
| description | description | |||
| "Base identity from which specific Ethernet | "The termination point is in forwarding state."; | |||
| encapsulation types are derived."; | } | |||
| reference | ||||
| "RFC 7224: IANA Interface Type YANG Module"; | ||||
| } | ||||
| identity ethernet { | ||||
| base eth-encapsulation-type; | ||||
| description | ||||
| "Native Ethernet encapsulation."; | ||||
| } | ||||
| identity vlan { | identity blocking { | |||
| base eth-encapsulation-type; | base tp-state-type; | |||
| description | description | |||
| "VLAN encapsulation."; | "The termination point is in blocking state."; | |||
| } | } | |||
| identity qinq { | identity down { | |||
| base eth-encapsulation-type; | base tp-state-type; | |||
| description | description | |||
| "QinQ encapsulation."; | "The termination point is in down state."; | |||
| } | } | |||
| identity pbb { | identity unknown { | |||
| base eth-encapsulation-type; | base tp-state-type; | |||
| description | description | |||
| "Provider-backbone-bridging (PBB) encapsulation. | "The termination point is in unknown state."; | |||
| The PBB functions are developed in IEEE 802.1ah."; | } | |||
| } | ||||
| identity trill { | typedef vni { | |||
| base eth-encapsulation-type; | type uint32 { | |||
| description | range "0..16777215"; | |||
| "TRILL encapsulation."; | } | |||
| } | description | |||
| "VXLAN Network Identifier or VXLAN Segment ID. | ||||
| It allows up to 16 M VXLAN segments to coexist | ||||
| within the same administrative domain. | ||||
| identity vpls { | The use of value '0' is implementation-specific."; | |||
| base eth-encapsulation-type; | reference | |||
| description | "RFC 7348: Virtual eXtensible Local Area Network (VXLAN): | |||
| "Ethernet VPLS interface encapsulation."; | A Framework for Overlaying Virtualized Layer 2 | |||
| } | Networks over Layer 3 Networks"; | |||
| } | ||||
| typedef l2-flag-type { | ||||
| type identityref { | ||||
| base flag-identity; | ||||
| } | ||||
| description | ||||
| "Base type for L2 flags. One example of L2 flag | ||||
| type is trill which represents trill topology | ||||
| type."; | ||||
| } | ||||
| identity vxlan { | typedef node-flag-type { | |||
| base eth-encapsulation-type; | type identityref { | |||
| description | base flag-identity; | |||
| "VXLAN MAC in UDP encapsulation."; | } | |||
| } | description | |||
| "Node flag attributes. The physical node can be | ||||
| one example of node flag attribute."; | ||||
| } | ||||
| /* | typedef link-flag-type { | |||
| * Groupings | type identityref { | |||
| */ | base flag-identity; | |||
| } | ||||
| description | ||||
| "Link flag attributes. One example of link flag | ||||
| attribute is the pseudowire."; | ||||
| } | ||||
| grouping l2-network-type { | typedef l2-network-event-type { | |||
| description | type enumeration { | |||
| "Indicates the topology type to be L2."; | enum addition { | |||
| container l2-network { | value 0; | |||
| presence "Indicates L2 Network"; | description | |||
| description | "A Layer 2 node or link or termination-point | |||
| "The presence of the container node indicates | has been added."; | |||
| L2 Topology."; | } | |||
| } | enum removal { | |||
| } | value 1; | |||
| description | ||||
| "A Layer 2 node or link or termination-point | ||||
| has been removed."; | ||||
| } | ||||
| enum update { | ||||
| value 2; | ||||
| description | ||||
| "A Layer 2 node or link or termination-point | ||||
| has been updated."; | ||||
| } | ||||
| grouping l2-network-attributes { | } | |||
| description | description | |||
| "L2 Topology scope attributes."; | "Layer 2 network event type for notifications."; | |||
| container l2-network-attributes { | } | |||
| description | ||||
| "Contains L2 network attributes."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Name of the L2 network."; | ||||
| } | ||||
| leaf-list flag { | ||||
| type l2-flag-type; | ||||
| description | ||||
| "L2 network flags."; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping l2-node-attributes { | typedef duplex-mode { | |||
| description | type enumeration { | |||
| "L2 node attributes"; | enum full-duplex { | |||
| container l2-node-attributes { | description | |||
| description | "Indicates full-duplex mode."; | |||
| "Contains L2 node attributes."; | } | |||
| leaf name { | enum half-duplex { | |||
| type string; | description | |||
| description | "Indicates half-duplex mode."; | |||
| "Node name."; | } | |||
| } | } | |||
| leaf description { | description | |||
| type string; | "Indicates the type of the duplex mode."; | |||
| description | } | |||
| "Node description."; | ||||
| } | ||||
| leaf-list management-address { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "System management address."; | ||||
| } | ||||
| leaf sys-mac-address { | ||||
| type yang:mac-address; | ||||
| description | ||||
| "System MAC address."; | ||||
| } | ||||
| leaf management-vid { | ||||
| if-feature "VLAN"; | ||||
| type dot1q-types:vlanid; | ||||
| description | ||||
| "System management VID."; | ||||
| } | ||||
| leaf-list flag { | ||||
| type node-flag-type; | ||||
| description | ||||
| "Node operational flags."; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping l2-link-attributes { | grouping l2-network-type { | |||
| description | description | |||
| "L2 link attributes"; | "Indicates the topology type to be L2."; | |||
| container l2-link-attributes { | container l2-network { | |||
| description | presence "Indicates L2 Network"; | |||
| "Contains L2 link attributes."; | description | |||
| leaf name { | "The presence of the container node indicates | |||
| type string; | L2 Topology."; | |||
| description | } | |||
| "Link name."; | } | |||
| } | ||||
| leaf-list flag { | ||||
| type link-flag-type; | ||||
| description | ||||
| "Link flags."; | ||||
| } | ||||
| leaf rate { | ||||
| type decimal64 { | ||||
| fraction-digits 2; | ||||
| } | ||||
| units "Mbps"; | ||||
| description | ||||
| "Link rate."; | ||||
| } | ||||
| leaf delay { | ||||
| type uint32; | ||||
| units "microseconds"; | ||||
| description | ||||
| "Link delay in microseconds."; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping l2-termination-point-attributes { | grouping l2-topology-attributes { | |||
| description | description | |||
| "L2 termination point attributes"; | "L2 Topology scope attributes."; | |||
| container l2-termination-point-attributes { | container l2-topology-attributes { | |||
| description | description | |||
| "Containing L2 termination point attributes."; | "Contains L2 topology attributes."; | |||
| leaf description { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Port description."; | "Name of the topology."; | |||
| } | } | |||
| leaf maximum-frame-size { | leaf-list flags { | |||
| type uint32; | type l2-flag-type; | |||
| description | description | |||
| "Maximum L2 frame size. If L2 frame is an Ethernet | "Topology flags."; | |||
| frame, the Ethernet header should be included; | } | |||
| if L2 frame is other type (e.g., PPP), the L2 | } | |||
| header should be included."; | ||||
| } | ||||
| choice l2-termination-point-type { | ||||
| description | ||||
| "Indicates termination-point type | ||||
| specific attributes."; | ||||
| case ethernet { | ||||
| leaf mac-address { | ||||
| type yang:mac-address; | ||||
| description | ||||
| "Interface MAC address."; | ||||
| } | ||||
| leaf eth-encapsulation { | ||||
| type identityref { | ||||
| base eth-encapsulation-type; | ||||
| } | ||||
| description | ||||
| "Encapsulation type of this | ||||
| termination point."; | ||||
| } | ||||
| leaf lag { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "Defines whether lag is supported or not."; | ||||
| } | } | |||
| leaf-list member-link-tp { | ||||
| when "../lag = 'true'" { | ||||
| description | ||||
| "Relevant only when the lag interface is supported."; | ||||
| } | ||||
| type leafref { | ||||
| path "/nw:networks/nw:network/nw:node/" | ||||
| + "nt:termination-point/nt:tp-id"; | ||||
| } | ||||
| description | ||||
| "Member link termination points."; | ||||
| } | ||||
| leaf mode { | ||||
| type neg-mode; | ||||
| default "auto-neg"; | ||||
| description | ||||
| "Exposes the negotiation mode."; | ||||
| } | ||||
| leaf port-vlan-id { | ||||
| when "derived-from-or-self(../eth-encapsulation" | ||||
| + ", 'l2t:vlan')" { | ||||
| description | ||||
| "Only applies when the type of the Ethernet | ||||
| encapsulation is 'vlan'."; | ||||
| } | ||||
| if-feature "VLAN"; | ||||
| type dot1q-types:vlanid; | ||||
| description | ||||
| "Port VLAN ID is the VLAN identifier that | ||||
| will be assigned to any untagged frames entering | ||||
| the switch on the specific port."; | ||||
| } | ||||
| list vlan-id-name { | ||||
| when "derived-from-or-self(../eth-encapsulation" | ||||
| + ", 'l2t:vlan')" { | ||||
| description | ||||
| "Only applies when the type of the Ethernet | ||||
| encapsulation is 'vlan'."; | ||||
| } | ||||
| if-feature "VLAN"; | ||||
| key "vlan-id"; | ||||
| description | ||||
| "Interface configured VLANs."; | ||||
| leaf vlan-id { | ||||
| type dot1q-types:vlanid; | ||||
| description | ||||
| "VLAN ID."; | ||||
| } | grouping l2-node-attributes { | |||
| leaf vlan-name { | description | |||
| type string { | "L2 node attributes"; | |||
| length "1..31"; | container l2-node-attributes { | |||
| } | description | |||
| description | "Contains L2 node attributes."; | |||
| "VLAN name."; | leaf name { | |||
| } | type string; | |||
| } | description | |||
| list qinq { | "Node name."; | |||
| when "derived-from-or-self(../eth-encapsulation" | } | |||
| + ", 'l2t:qinq')" { | leaf description { | |||
| description | type string; | |||
| "Only applies when the type of the Ethernet | description | |||
| encapsulation is 'qinq'."; | "Node description."; | |||
| } | } | |||
| if-feature "QinQ"; | leaf-list management-address { | |||
| key "svlan-id cvlan-id"; | type inet:ip-address; | |||
| description | description | |||
| "Interface configured SVLANs and CVLANs."; | "IP address used for | |||
| leaf svlan-id { | management purpose."; | |||
| type dot1q-types:vlanid; | } | |||
| description | leaf sys-mac-address { | |||
| "SVLAN ID."; | type yang:mac-address; | |||
| } | description | |||
| leaf cvlan-id { | "MAC address used to identify layer 2 node. | |||
| type dot1q-types:vlanid; | This MAC address can be used as interface | |||
| description | MAC address."; | |||
| "CVLAN ID."; | } | |||
| } | leaf management-vlan-id { | |||
| } | if-feature "VLAN"; | |||
| container vxlan { | type dot1q-types:vlanid; | |||
| when "derived-from-or-self(../eth-encapsulation" | description | |||
| + ", 'l2t:vxlan')" { | "VLAN ID used for management | |||
| description | purpose."; | |||
| "Only applies when the type of the Ethernet | } | |||
| encapsulation is 'vxlan'."; | leaf-list flags { | |||
| } | type node-flag-type; | |||
| if-feature "VXLAN"; | description | |||
| leaf vni-id { | "Node flags. It can be used to indicates | |||
| type vni; | node flag attributes."; | |||
| description | } | |||
| "VXLAN Network Identifier (VNI)."; | } | |||
| } | } | |||
| description | ||||
| "Vxlan encapsulation type."; | ||||
| } | ||||
| } | ||||
| //case ethernet | ||||
| case legacy { | ||||
| leaf layer-2-address { | ||||
| type yang:phys-address; | ||||
| description | ||||
| "Interface Layer 2 address."; | ||||
| } | ||||
| leaf encapsulation { | ||||
| type identityref { | ||||
| base ift:iana-interface-type; | ||||
| } | ||||
| description | ||||
| "Other legacy encapsulation type of this | ||||
| termination point."; | ||||
| } | ||||
| } | ||||
| //case legacy such as atm, ppp, hdlc, etc. | ||||
| } | ||||
| //choice termination-point-type | ||||
| leaf tp-state { | ||||
| type enumeration { | ||||
| enum in-use { | ||||
| value 1; | ||||
| description | ||||
| "The termination point is in forwarding state."; | ||||
| } | ||||
| enum blocking { | ||||
| value 2; | ||||
| description | ||||
| "The termination point is in blocking state."; | ||||
| } | ||||
| enum down { | ||||
| value 3; | ||||
| description | ||||
| "The termination point is in down state."; | ||||
| } | ||||
| enum others { | ||||
| value 4; | ||||
| description | ||||
| "The termination point is in other state."; | ||||
| } | ||||
| } | ||||
| config false; | ||||
| description | ||||
| "State of the termination point."; | ||||
| } | ||||
| } | ||||
| } | ||||
| /* | ||||
| * Data nodes | ||||
| */ | ||||
| augment "/nw:networks/nw:network/nw:network-types" { | grouping l2-link-attributes { | |||
| description | description | |||
| "Introduces new network type for L2 topology."; | "L2 link attributes"; | |||
| uses l2-network-type; | container l2-link-attributes { | |||
| } | description | |||
| "Contains L2 link attributes."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Link name."; | ||||
| } | ||||
| leaf-list flags { | ||||
| type link-flag-type; | ||||
| description | ||||
| "Link flags. It can be used to indicate | ||||
| link flag attributes."; | ||||
| } | ||||
| leaf rate { | ||||
| type uint64; | ||||
| units "Kbps"; | ||||
| description | ||||
| "Link rate. It specifies bandwidth requirements | ||||
| associated with the specific link. The link | ||||
| contains a source and a destination."; | ||||
| } | ||||
| leaf delay { | ||||
| type uint32; | ||||
| units "microseconds"; | ||||
| description | ||||
| "Unidirectional Link delay in | ||||
| microseconds."; | ||||
| } | ||||
| } | ||||
| } | ||||
| augment "/nw:networks/nw:network" { | grouping l2-termination-point-attributes { | |||
| when '/nw:networks/nw:network/nw:network-types/l2t:l2-network' { | description | |||
| description | "L2 termination point attributes"; | |||
| "Augmentation parameters apply only for networks | container l2-termination-point-attributes { | |||
| with L2 topology."; | description | |||
| } | "Containing L2 termination point attributes."; | |||
| description | leaf description { | |||
| "Configuration parameters for the L2 network | type string; | |||
| as a whole."; | description | |||
| uses l2-network-attributes; | "L2 termination point description. It also | |||
| } | can be seen as port description."; | |||
| } | ||||
| leaf maximum-frame-size { | ||||
| type uint32; | ||||
| description | ||||
| "Maximum L2 frame size that can be transported on | ||||
| the data link layer, e.g. Ethernet frame. | ||||
| If L2 frame is an Ethernet frame, the maximum frame size | ||||
| should include Frame Check Sequence(FCS) and should not | ||||
| include preamble,Start Frame Delimiter and Inter frame | ||||
| gap."; | ||||
| } | ||||
| choice l2-termination-point-type { | ||||
| description | ||||
| "Indicates termination-point type | ||||
| specific attributes."; | ||||
| case ethernet { | ||||
| leaf mac-address { | ||||
| type yang:mac-address; | ||||
| description | ||||
| "Interface MAC address."; | ||||
| } | ||||
| leaf eth-encapsulation { | ||||
| type identityref { | ||||
| base eth-encapsulation-type; | ||||
| } | ||||
| description | ||||
| "Encapsulation type of this | ||||
| termination point."; | ||||
| } | ||||
| leaf lag { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "Defines whether lag is enabled or disabled. | ||||
| When it is set to true, the lag is enabled."; | ||||
| } | ||||
| leaf-list member-link-tp { | ||||
| when "../lag = 'true'" { | ||||
| description | ||||
| "Relevant only when the lag interface is enabled."; | ||||
| } | ||||
| type leafref { | ||||
| path "/nw:networks/nw:network/nw:node/nt:termination-point/nt:tp-id"; | ||||
| } | ||||
| description | ||||
| "Member link termination points."; | ||||
| } | ||||
| leaf auto-nego { | ||||
| type boolean; | ||||
| default "true"; | ||||
| description | ||||
| "Set to true if auto negotiation is supported. | ||||
| Set to false if auto negotiation is not supported."; | ||||
| } | ||||
| leaf duplex { | ||||
| type duplex-mode; | ||||
| description | ||||
| "Expose the duplex mode, full duplex or half-duplex."; | ||||
| } | ||||
| leaf default-untagged-vlan { | ||||
| when "derived-from-or-self(../eth-encapsulation, 'l2t:vlan')" { | ||||
| description | ||||
| "Only applies when the type of the Ethernet | ||||
| encapsulation is 'vlan'."; | ||||
| } | ||||
| if-feature "VLAN"; | ||||
| type dot1q-types:vlanid; | ||||
| description | ||||
| "Port VLAN ID is the VLAN identifier that | ||||
| will be assigned to any untagged frames entering | ||||
| the switch on the specific port."; | ||||
| } | ||||
| list vlans { | ||||
| when "derived-from-or-self(../eth-encapsulation, 'l2t:vlan')" { | ||||
| description | ||||
| "Only applies when the type of the Ethernet | ||||
| encapsulation is 'vlan'."; | ||||
| } | ||||
| if-feature "VLAN"; | ||||
| key "vlan-id"; | ||||
| description | ||||
| "Interface configured VLANs."; | ||||
| leaf vlan-id { | ||||
| type dot1q-types:vlanid; | ||||
| description | ||||
| "VLAN ID."; | ||||
| } | ||||
| leaf name { | ||||
| type string { | ||||
| length "1..31"; | ||||
| } | ||||
| description | ||||
| "VLAN name."; | ||||
| } | ||||
| } | ||||
| list qinq { | ||||
| when "derived-from-or-self(../eth-encapsulation, 'l2t:qinq')" { | ||||
| description | ||||
| "Only applies when the type of the Ethernet | ||||
| encapsulation is 'qinq'."; | ||||
| } | ||||
| if-feature "QinQ"; | ||||
| key "svlan-id cvlan-id"; | ||||
| description | ||||
| "Interface configured SVLANs and CVLANs."; | ||||
| leaf svlan-id { | ||||
| type dot1q-types:vlanid; | ||||
| description | ||||
| "Service VLAN ID."; | ||||
| } | ||||
| leaf cvlan-id { | ||||
| type dot1q-types:vlanid; | ||||
| description | ||||
| "Customer VLAN ID."; | ||||
| } | ||||
| } | ||||
| container vxlan { | ||||
| when "derived-from-or-self(../eth-encapsulation, 'l2t:vxlan')" { | ||||
| description | ||||
| "Only applies when the type of the Ethernet | ||||
| encapsulation is 'vxlan'."; | ||||
| } | ||||
| if-feature "VXLAN"; | ||||
| leaf vni-id { | ||||
| type vni; | ||||
| description | ||||
| "VXLAN Network Identifier (VNI)."; | ||||
| } | ||||
| description | ||||
| "Vxlan encapsulation type."; | ||||
| } | ||||
| } | ||||
| case legacy { | ||||
| leaf layer-2-address { | ||||
| type yang:phys-address; | ||||
| description | ||||
| "Interface Layer 2 address."; | ||||
| } | ||||
| leaf encapsulation { | ||||
| type identityref { | ||||
| base ift:iana-interface-type; | ||||
| } | ||||
| description | ||||
| "Other legacy encapsulation type of this | ||||
| termination point."; | ||||
| } | ||||
| } | ||||
| augment "/nw:networks/nw:network/nw:node" { | } | |||
| when '/nw:networks/nw:network/nw:network-types/l2t:l2-network' { | leaf tp-state { | |||
| description | type identityref { | |||
| "Augmentation parameters apply only for networks | base tp-state-type; | |||
| with L2 topology."; | } | |||
| } | config false; | |||
| description | description | |||
| "Configuration parameters for L2 at the node | "State of the termination point."; | |||
| level."; | } | |||
| uses l2-node-attributes; | } | |||
| } | } | |||
| augment "/nw:networks/nw:network/nt:link" { | augment "/nw:networks/nw:network/nw:network-types" { | |||
| when '/nw:networks/nw:network/nw:network-types/l2t:l2-network' { | description | |||
| description | "Introduces new network type for L2 topology."; | |||
| "Augmentation parameters apply only for networks | uses l2-network-type; | |||
| with L2 topology."; | } | |||
| } | augment "/nw:networks/nw:network" { | |||
| description | when '/nw:networks/nw:network/nw:network-types/l2t:l2-network' { | |||
| "Augments L2 topology link information."; | description | |||
| uses l2-link-attributes; | "Augmentation parameters apply only for networks | |||
| } | with L2 topology."; | |||
| } | ||||
| description | ||||
| "Configuration parameters for the L2 network | ||||
| as a whole."; | ||||
| uses l2-topology-attributes; | ||||
| } | ||||
| augment "/nw:networks/nw:network/nw:node" { | ||||
| when '/nw:networks/nw:network/nw:network-types/l2t:l2-network' { | ||||
| description | ||||
| "Augmentation parameters apply only for networks | ||||
| with L2 topology."; | ||||
| } | ||||
| description | ||||
| "Configuration parameters for L2 at the node | ||||
| level."; | ||||
| uses l2-node-attributes; | ||||
| } | ||||
| augment "/nw:networks/nw:network/nt:link" { | ||||
| when '/nw:networks/nw:network/nw:network-types/l2t:l2-network' { | ||||
| description | ||||
| "Augmentation parameters apply only for networks | ||||
| with L2 topology."; | ||||
| } | ||||
| description | ||||
| "Augments L2 topology link information."; | ||||
| uses l2-link-attributes; | ||||
| augment "/nw:networks/nw:network/nw:node/nt:termination-point" { | } | |||
| when '/nw:networks/nw:network/nw:network-types/l2t:l2-network' { | augment "/nw:networks/nw:network/nw:node/nt:termination-point" { | |||
| description | when '/nw:networks/nw:network/nw:network-types/l2t:l2-network' { | |||
| "Augmentation parameters apply only for networks | description | |||
| with L2 topology."; | "Augmentation parameters apply only for networks | |||
| } | with L2 topology."; | |||
| description | } | |||
| "Augments L2 topology termination point information."; | description | |||
| uses l2-termination-point-attributes; | "Augments L2 topology termination point information."; | |||
| } | uses l2-termination-point-attributes; | |||
| } | ||||
| /* | notification l2-node-event { | |||
| * Notifications | description | |||
| */ | "Notification event for L2 node."; | |||
| leaf event-type { | ||||
| type l2-network-event-type; | ||||
| description | ||||
| "Event type."; | ||||
| } | ||||
| uses nw:node-ref; | ||||
| uses l2-network-type; | ||||
| uses l2-node-attributes; | ||||
| } | ||||
| notification l2-node-event { | notification l2-link-event { | |||
| description | description | |||
| "Notification event for L2 node."; | "Notification event for L2 link."; | |||
| leaf event-type { | leaf event-type { | |||
| type l2-network-event-type; | type l2-network-event-type; | |||
| description | description | |||
| "Event type."; | "Event type."; | |||
| } | } | |||
| uses nw:node-ref; | uses nt:link-ref; | |||
| uses l2-network-type; | uses l2-network-type; | |||
| uses l2-node-attributes; | uses l2-link-attributes; | |||
| } | } | |||
| notification l2-link-event { | notification l2-termination-point-event { | |||
| description | description | |||
| "Notification event for L2 link."; | "Notification event for L2 termination point."; | |||
| leaf event-type { | leaf event-type { | |||
| type l2-network-event-type; | type l2-network-event-type; | |||
| description | description | |||
| "Event type."; | "Event type."; | |||
| } | } | |||
| uses nt:link-ref; | uses nt:tp-ref; | |||
| uses l2-network-type; | uses l2-network-type; | |||
| uses l2-link-attributes; | uses l2-termination-point-attributes; | |||
| } | } | |||
| } | ||||
| notification l2-termination-point-event { | <CODE ENDS> | |||
| description | ||||
| "Notification event for L2 termination point."; | ||||
| leaf event-type { | ||||
| type l2-network-event-type; | ||||
| description | ||||
| "Event type."; | ||||
| } | ||||
| uses nt:tp-ref; | ||||
| uses l2-network-type; | ||||
| uses l2-termination-point-attributes; | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 5. IANA Considerations | 5. IANA Considerations | |||
| This document requests IANA to register the following URIs in the | This document requests IANA to register the following URIs in the | |||
| "ns" subregistry within the "IETF XML Registry" [RFC3688]: | "ns" subregistry within the "IETF XML Registry" [RFC3688]: | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-l2-topology | URI: urn:ietf:params:xml:ns:yang:ietf-l2-topology | |||
| Registrant Contact: The IESG. | Registrant Contact: The IESG. | |||
| XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
| skipping to change at page 22, line 16 ¶ | skipping to change at page 22, line 18 ¶ | |||
| configurable in certain instances, for example in the case of virtual | configurable in certain instances, for example in the case of virtual | |||
| topologies that can be created by client applications. In such | topologies that can be created by client applications. In such | |||
| cases, a malicious client could introduce topologies that are | cases, a malicious client could introduce topologies that are | |||
| undesired. Specifically, a malicious client could attempt to remove | undesired. Specifically, a malicious client could attempt to remove | |||
| or add a node, a link, a termination point, by creating or deleting | or add a node, a link, a termination point, by creating or deleting | |||
| corresponding elements in the node, link, and termination point | corresponding elements in the node, link, and termination point | |||
| lists, respectively. In the case of a topology that is learned, the | lists, respectively. In the case of a topology that is learned, the | |||
| server will automatically prohibit such misconfiguration attempts. | server will automatically prohibit such misconfiguration attempts. | |||
| In the case of a topology that is configured, i.e. whose origin is | In the case of a topology that is configured, i.e. whose origin is | |||
| "intended", the undesired configuration could become effective and be | "intended", the undesired configuration could become effective and be | |||
| reflected in the operational state datastore, leading to disruption | reflected in the operational state datastore [RFC8342], leading to | |||
| of services provided via this topology might be disrupted. For those | disruption of services provided via this topology. For those | |||
| reasons, it is important that the NETCONF access control model is | reasons, it is important that the NACM is vigorously applied to | |||
| vigorously applied to prevent topology misconfiguration by | prevent topology misconfiguration by unauthorized clients. | |||
| unauthorized clients. | ||||
| There are a number of data nodes defined in this YANG module that are | There are a number of data nodes defined in this YANG module that are | |||
| writable/creatable/deletable (i.e., config true, which is the | writable/creatable/deletable (i.e., config true, which is the | |||
| default). These data nodes may be considered sensitive or vulnerable | default). These data nodes may be considered sensitive or vulnerable | |||
| in some network environments. Write operations (e.g., edit-config) | in some network environments. Write operations (e.g., edit-config) | |||
| to these data nodes without proper protection can have a negative | to these data nodes without proper protection can have a negative | |||
| effect on network operations. These are the subtrees and data nodes | effect on network operations. These are the subtrees and data nodes | |||
| and their sensitivity/vulnerability: | and their sensitivity/vulnerability: | |||
| o l2-network-attributes: A malicious client could attempt to | o l2-network-attributes: A malicious client could attempt to | |||
| skipping to change at page 22, line 51 ¶ | skipping to change at page 23, line 4 ¶ | |||
| o l2-termination-point-attributes: A malicious client could attempt | o l2-termination-point-attributes: A malicious client could attempt | |||
| to sabotage the configuration of important termination point | to sabotage the configuration of important termination point | |||
| attributes (e.g., 'maximum-frame-size'). | attributes (e.g., 'maximum-frame-size'). | |||
| Some of the readable data nodes in this YANG module may be considered | Some of the readable data nodes in this YANG module may be considered | |||
| sensitive or vulnerable in some network environments. It is thus | sensitive or vulnerable in some network environments. It is thus | |||
| important to control read access (e.g., via get, get-config, or | important to control read access (e.g., via get, get-config, or | |||
| notification) to these data nodes. In particular, the YANG model for | notification) to these data nodes. In particular, the YANG model for | |||
| layer 2 topology may expose sensitive information, for example the | layer 2 topology may expose sensitive information, for example the | |||
| MAC addresses of devices. Unrestricted use of such information can | MAC addresses of devices, VLAN/VXLAN identifiers. Unrestricted use | |||
| lead to privacy violations. For example, listing MAC addresses in a | of such information can lead to privacy violations. For example, | |||
| network allows monitoring of devices and their movements. Location | listing MAC addresses in a network allows monitoring of devices and | |||
| information can be derived from MAC addresses of network devices, | their movements. Location information can be derived from MAC | |||
| bypassing protection of location information by the Operating System. | addresses of network devices, bypassing protection of location | |||
| information by the Operating System. | ||||
| 7. Acknowledgements | 7. Acknowledgements | |||
| The authors would like to acknowledge the comments and suggestions | The authors would like to acknowledge the comments and suggestions | |||
| received from Susan Hares, Alia Atlas, Juergen Schoenwaelder, Mach | received from Susan Hares, Alia Atlas, Juergen Schoenwaelder, Mach | |||
| Chen, Alexander Clemm, Sriganesh Kini, Oscar Gonzalez de Dios, Stig | Chen, Alexander Clemm, Sriganesh Kini, Oscar Gonzalez de Dios, Stig | |||
| Venaas, Christian Huitema, and Meral Shirazipour. | Venaas, Christian Huitema, and Meral Shirazipour,Benjamin Kaduk. | |||
| Many thanks to Ladislav Lhotka for the yang-doctors review. | Many thanks to Ladislav Lhotka for the yang-doctors review. | |||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | ||||
| DOI 10.17487/RFC3688, January 2004, | ||||
| <https://www.rfc-editor.org/info/rfc3688>. | ||||
| [RFC4202] Kompella, K., Ed. and Y. Rekhter, Ed., "Routing Extensions | [RFC4202] Kompella, K., Ed. and Y. Rekhter, Ed., "Routing Extensions | |||
| in Support of Generalized Multi-Protocol Label Switching | in Support of Generalized Multi-Protocol Label Switching | |||
| (GMPLS)", RFC 4202, DOI 10.17487/RFC4202, October 2005, | (GMPLS)", RFC 4202, DOI 10.17487/RFC4202, October 2005, | |||
| <https://www.rfc-editor.org/info/rfc4202>. | <https://www.rfc-editor.org/info/rfc4202>. | |||
| [RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., "Virtual Private | [RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., "Virtual Private | |||
| LAN Service (VPLS) Using BGP for Auto-Discovery and | LAN Service (VPLS) Using BGP for Auto-Discovery and | |||
| Signaling", RFC 4761, DOI 10.17487/RFC4761, January 2007, | Signaling", RFC 4761, DOI 10.17487/RFC4761, January 2007, | |||
| <https://www.rfc-editor.org/info/rfc4761>. | <https://www.rfc-editor.org/info/rfc4761>. | |||
| skipping to change at page 24, line 13 ¶ | skipping to change at page 24, line 9 ¶ | |||
| <https://www.rfc-editor.org/info/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
| [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
| RFC 6991, DOI 10.17487/RFC6991, July 2013, | RFC 6991, DOI 10.17487/RFC6991, July 2013, | |||
| <https://www.rfc-editor.org/info/rfc6991>. | <https://www.rfc-editor.org/info/rfc6991>. | |||
| [RFC7224] Bjorklund, M., "IANA Interface Type YANG Module", | [RFC7224] Bjorklund, M., "IANA Interface Type YANG Module", | |||
| RFC 7224, DOI 10.17487/RFC7224, May 2014, | RFC 7224, DOI 10.17487/RFC7224, May 2014, | |||
| <https://www.rfc-editor.org/info/rfc7224>. | <https://www.rfc-editor.org/info/rfc7224>. | |||
| [RFC7348] Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger, | ||||
| L., Sridhar, T., Bursell, M., and C. Wright, "Virtual | ||||
| eXtensible Local Area Network (VXLAN): A Framework for | ||||
| Overlaying Virtualized Layer 2 Networks over Layer 3 | ||||
| Networks", RFC 7348, DOI 10.17487/RFC7348, August 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7348>. | ||||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| [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>. | ||||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | |||
| Access Control Model", STD 91, RFC 8341, | Access Control Model", STD 91, RFC 8341, | |||
| DOI 10.17487/RFC8341, March 2018, | DOI 10.17487/RFC8341, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8341>. | <https://www.rfc-editor.org/info/rfc8341>. | |||
| [RFC8345] Clemm, A., Medved, J., Varga, R., Bahadur, N., | [RFC8345] Clemm, A., Medved, J., Varga, R., Bahadur, N., | |||
| skipping to change at page 25, line 17 ¶ | skipping to change at page 25, line 17 ¶ | |||
| Bridges", IEEE Std 802.1ad-2005, May 2006. | Bridges", IEEE Std 802.1ad-2005, May 2006. | |||
| [IEEE802.1ah] | [IEEE802.1ah] | |||
| "Virtual Bridged Local Area Networks Amendment 4: Provider | "Virtual Bridged Local Area Networks Amendment 4: Provider | |||
| Bridges", IEEE Std 802.1ah-2008, August 2008. | Bridges", IEEE Std 802.1ah-2008, August 2008. | |||
| [IEEE802.1Qcp] | [IEEE802.1Qcp] | |||
| "Bridges and Bridged Networks - Amendment: YANG Data | "Bridges and Bridged Networks - Amendment: YANG Data | |||
| Model", IEEE Std 802.1Qcp-2018, September 2018. | Model", IEEE Std 802.1Qcp-2018, September 2018. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | ||||
| DOI 10.17487/RFC3688, January 2004, | ||||
| <https://www.rfc-editor.org/info/rfc3688>. | ||||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
| and A. Bierman, Ed., "Network Configuration Protocol | and A. Bierman, Ed., "Network Configuration Protocol | |||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
| <https://www.rfc-editor.org/info/rfc6241>. | <https://www.rfc-editor.org/info/rfc6241>. | |||
| [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | |||
| Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, | Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, | |||
| <https://www.rfc-editor.org/info/rfc6242>. | <https://www.rfc-editor.org/info/rfc6242>. | |||
| [RFC7348] Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger, | [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | |||
| L., Sridhar, T., Bursell, M., and C. Wright, "Virtual | RFC 7951, DOI 10.17487/RFC7951, August 2016, | |||
| eXtensible Local Area Network (VXLAN): A Framework for | <https://www.rfc-editor.org/info/rfc7951>. | |||
| Overlaying Virtualized Layer 2 Networks over Layer 3 | ||||
| Networks", RFC 7348, DOI 10.17487/RFC7348, August 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7348>. | ||||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
| Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | |||
| <https://www.rfc-editor.org/info/rfc8040>. | <https://www.rfc-editor.org/info/rfc8040>. | |||
| [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | |||
| BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8340>. | <https://www.rfc-editor.org/info/rfc8340>. | |||
| [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | |||
| skipping to change at page 30, line 12 ¶ | skipping to change at page 30, line 13 ¶ | |||
| uses nt-s:tp-ref; | uses nt-s:tp-ref; | |||
| uses l2t:l2-network-type; | uses l2t:l2-network-type; | |||
| uses l2t:l2-termination-point-attributes; | uses l2t:l2-termination-point-attributes; | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| Appendix B. An Example | Appendix B. An Example | |||
| This section contains an example of an instance data tree in JSON | This section contains an example of an instance data tree in JSON | |||
| encoding [RFC7951]. The example instantiates "ietf-l2- topology" for | encoding [RFC7951]. The example instantiates "ietf-l2-topology" for | |||
| the topology that is depicted in the following diagram. There are | the topology that is depicted in the following diagram. There are | |||
| three nodes: D1, D2, and D3. D1 has three termination points: 1-0-1, | three nodes: D1, D2, and D3. D1 has three termination points: 1-0-1, | |||
| 1-2-1, and 1-3-1. D2 has three termination points as well: 2-1-1, | 1-2-1, and 1-3-1. D2 has three termination points as well: 2-1-1, | |||
| 2-0-1, and 2-3-1. D3 has two termination points: 3-1-1 and 3-2-1. | 2-0-1, and 2-3-1. D3 has two termination points: 3-1-1 and 3-2-1. | |||
| In addition, there are six links, two between each pair of nodes, | In addition, there are six links, two between each pair of nodes, | |||
| with one going in each direction. | with one going in each direction. | |||
| +------------+ +------------+ | +------------+ +------------+ | |||
| | D1 | | D2 | | | D1 | | D2 | | |||
| /-\ /-\ /-\ /-\ | /-\ /-\ /-\ /-\ | |||
| skipping to change at page 31, line 30 ¶ | skipping to change at page 31, line 32 ¶ | |||
| }, | }, | |||
| { | { | |||
| "tp-id": "1-3-1", | "tp-id": "1-3-1", | |||
| "ietf-l2-topology:l2-termination-point-attributes": { | "ietf-l2-topology:l2-termination-point-attributes": { | |||
| "mac-address": "00:00:5E:00:53:D2" | "mac-address": "00:00:5E:00:53:D2" | |||
| } | } | |||
| } | } | |||
| ], | ], | |||
| "ietf-l2-topology:l2-node-attributes": { | "ietf-l2-topology:l2-node-attributes": { | |||
| "management-address": [ | "management-address": [ | |||
| "192.0.2.1" | "192.0.2.1", | |||
| "2001:db8:0:1::/64" | ||||
| ] | ] | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "node-id": "D2", | "node-id": "D2", | |||
| "ietf-network-topology:termination-point": [ | "ietf-network-topology:termination-point": [ | |||
| { | { | |||
| "tp-id": "2-0-1", | "tp-id": "2-0-1", | |||
| "ietf-l2-topology:l2-termination-point-attributes": { | "ietf-l2-topology:l2-termination-point-attributes": { | |||
| "mac-address": "00:00:5E:00:53:E0" | "mac-address": "00:00:5E:00:53:E0" | |||
| skipping to change at page 32, line 10 ¶ | skipping to change at page 32, line 12 ¶ | |||
| }, | }, | |||
| { | { | |||
| "tp-id": "2-3-1", | "tp-id": "2-3-1", | |||
| "ietf-l2-topology:l2-termination-point-attributes": { | "ietf-l2-topology:l2-termination-point-attributes": { | |||
| "mac-address": "00:00:5E:00:53:E2" | "mac-address": "00:00:5E:00:53:E2" | |||
| } | } | |||
| } | } | |||
| ], | ], | |||
| "ietf-l2-topology:l2-node-attributes": { | "ietf-l2-topology:l2-node-attributes": { | |||
| "management-address": [ | "management-address": [ | |||
| "192.0.2.2" | "192.0.2.2", | |||
| "2001:db8:0:2::/64" | ||||
| ] | ] | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "node-id": "D3", | "node-id": "D3", | |||
| "ietf-network-topology:termination-point": [ | "ietf-network-topology:termination-point": [ | |||
| { | { | |||
| "tp-id": "3-1-1", | "tp-id": "3-1-1", | |||
| "ietf-l2-topology:l2-termination-point-attributes": { | "ietf-l2-topology:l2-termination-point-attributes": { | |||
| "mac-address": "00:00:5E:00:53:F0" | "mac-address": "00:00:5E:00:53:F0" | |||
| skipping to change at page 32, line 32 ¶ | skipping to change at page 32, line 35 ¶ | |||
| }, | }, | |||
| { | { | |||
| "tp-id": "3-2-1", | "tp-id": "3-2-1", | |||
| "ietf-l2-topology:l2-termination-point-attributes": { | "ietf-l2-topology:l2-termination-point-attributes": { | |||
| "mac-address": "00:00:5E:00:53:F1" | "mac-address": "00:00:5E:00:53:F1" | |||
| } | } | |||
| } | } | |||
| ], | ], | |||
| "ietf-l2-topology:l2-node-attributes": { | "ietf-l2-topology:l2-node-attributes": { | |||
| "management-address": [ | "management-address": [ | |||
| "192.0.2.3" | "192.0.2.3", | |||
| "2001:db8:0:3::/64" | ||||
| ] | ] | |||
| } | } | |||
| } | } | |||
| ], | ], | |||
| "ietf-network-topology:link": [ | "ietf-network-topology:link": [ | |||
| { | { | |||
| "link-id": "D1,1-2-1,D2,2-1-1", | "link-id": "D1,1-2-1,D2,2-1-1", | |||
| "source": { | "source": { | |||
| "source-node": "D1", | "source-node": "D1", | |||
| "source-tp": "1-2-1" | "source-tp": "1-2-1" | |||
| End of changes. 74 change blocks. | ||||
| 747 lines changed or deleted | 757 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||