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