+---------------------+ | ietf-network | +----------^----------+ | | +---------------------+ |ietf-network-topology| +----------^----------+ | | +----------^----------+ | ietf-l2-topology | +---------------------+
module: ietf-l2-topology augment /nw:networks/nw:network/nw:network-types: +--rw l2-topology! augment /nw:networks/nw:network: +--rw l2-topology-attributes +--rw name? string +--rw flags* l2-flag-type augment /nw:networks/nw:network/nw:node: +--rw l2-node-attributes +--rw name? string +--rw flags* node-flag-type +--rw bridge-id* string +--rw management-address* inet:ip-address +--rw management-mac? yang:mac-address +--rw management-vlan? string augment /nw:networks/nw:network/nt:link: +--rw l2-link-attributes +--rw name? string +--rw flags* link-flag-type +--rw rate? uint64 +--rw delay? uint32 +--rw auto-nego? boolean +--rw duplex? duplex-mode augment /nw:networks/nw:network/nw:node/nt:termination-point: +--rw l2-termination-point-attributes +--rw interface-name? string +--rw mac-address? yang:mac-address +--rw port-number* uint32 +--rw unnumbered-id* uint32 +--rw encapsulation-type? identityref +--rw outer-tag? dot1q-types:vid-range-type {VLAN}? +--rw outer-tpid? dot1q-types:dot1q-tag-type {QinQ}? +--rw inner-tag? dot1q-types:vid-range-type {VLAN}? +--rw inner-tpid? dot1q-types:dot1q-tag-type {QinQ}? +--rw lag? boolean +--rw member-link-tp* -> /nw:networks/network/node/nt:termination-point/tp-id +--rw vxlan {VXLAN}? +--rw vni-id? vni 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-topology! | +--ro l2-node-attributes | +--ro name? string | +--ro flags* node-flag-type | +--ro bridge-id* uint64 | +--ro management-address* inet:ip-address | +--ro management-mac? yang:mac-address | +--ro management-vlan? string +---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-topology! | +--ro l2-link-attributes | +--ro name? string | +--ro flags* link-flag-type | +--ro rate? uint64 | +--ro delay? uint32 | +--ro auto-nego? boolean | +--ro duplex? duplex-mode +---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-topology! +--ro l2-termination-point-attributes +--ro interface-name? string +--ro mac-address? yang:mac-address +--ro port-number* uint32 +--ro unnumbered-id* uint32 +--ro encapsulation-type? identityref +--ro outer-tag? dot1q-types:vid-range-type {VLAN}? +--ro outer-tpid? dot1q-types:dot1q-tag-type {QinQ}? +--ro inner-tag? dot1q-types:vid-range-type {VLAN}? +--ro inner-tpid? dot1q-types:dot1q-tag-type {QinQ}? +--ro lag? boolean +--ro member-link-tp* -> /nw:networks/network/node/nt:termination-point/tp-id +--ro vxlan {VXLAN}? +--ro vni-id? vni
module ietf-l2-topology { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-l2-topology"; prefix l2t; import ietf-network { prefix nw; reference "RFC 8345: A YANG Data Model for Network Topologies"; } import ietf-network-topology { prefix nt; reference "RFC 8345: A YANG Data Model for Network Topologies"; } import ietf-inet-types { prefix inet; reference "RFC 6991:Common YANG Data Types"; } import ietf-yang-types { prefix yang; reference "RFC 6991:Common YANG Data Types"; } import iana-if-type { prefix ianaift; 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"; contact "WG Web: <https://datatracker.ietf.org/wg/i2rs> WG List: <mailto:i2rs@ietf.org> Editor: Jie Dong <mailto:jie.dong@huawei.com> Editor: Xiugang Wei <mailto:weixiugang@huawei.com> Editor: Qin Wu <mailto:bill.wu@huawei.com> Editor: Mohamed Boucadair <mailto:mohamed.boucadair@orange.com> Editor: Anders Liu <mailto:andersliu@tencent.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 authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or 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). This version of this YANG module is part of RFC 8944; see the RFC itself for full legal notices."; revision 2020-11-15 { description "Initial revision."; reference "RFC 8944: A YANG Data Model for Layer 2 Network Topologies"; } feature VLAN { description "Enables VLAN tag support as defined in IEEE 802.1Q."; reference "IEEE Std 802.1Q-2014: Bridges and Bridged Networks"; } feature QinQ { description "Enables QinQ double tag support as defined in IEEE 802.1ad."; reference "IEEE Std 802.1ad: Provider Bridges"; } feature VXLAN { description "Enables VXLAN support as defined in RFC 7348."; reference "RFC 7348: Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks"; } identity flag-identity { description "Base type for flags."; } identity eth-encapsulation-type { base ianaift:iana-interface-type; description "Base identity from which specific Ethernet encapsulation types are derived."; reference "RFC 7224: IANA Interface Type YANG Module"; } identity ethernet { base eth-encapsulation-type; description "Native Ethernet encapsulation."; } identity vlan { base eth-encapsulation-type; description "VLAN encapsulation."; } identity qinq { base eth-encapsulation-type; description "QinQ encapsulation."; } identity pbb { base eth-encapsulation-type; description "Provider Backbone Bridging (PBB) encapsulation. The PBB functions are developed in IEEE 802.1ah."; } identity trill { base eth-encapsulation-type; description "Transparent Interconnection of Lots of Links (TRILL) encapsulation."; } identity vpls { base eth-encapsulation-type; description "Ethernet Virtual Private LAN Service (VPLS) interface encapsulation."; } identity vxlan { base eth-encapsulation-type; description "VXLAN Media Access Control (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"; } typedef vni { type uint32 { range "0..16777215"; } description "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."; reference "RFC 7348: Virtual eXtensible Local Area Network (VXLAN): 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 the trill topology type."; } typedef node-flag-type { type identityref { base flag-identity; } description "Node flag attributes. The physical node can be one example of a node flag attribute."; } typedef link-flag-type { type identityref { base flag-identity; } description "Link flag attributes. One example of a link flag attribute is the pseudowire."; } typedef l2-network-event-type { type enumeration { enum addition { value 0; description "A Layer 2 node or link or termination-point has been added."; } 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."; } } description "Layer 2 network event type for notifications."; } typedef duplex-mode { type enumeration { enum full-duplex { description "Indicates full-duplex mode."; } enum half-duplex { description "Indicates half-duplex mode."; } } description "Indicates the type of the duplex mode."; } grouping l2-network-type { description "Indicates the topology type to be L2."; container l2-topology { presence "Indicates L2 Network Topology."; description "The presence of the container node indicates L2 Network Topology."; } } grouping l2-topology-attributes { description "L2 topology scope attributes."; container l2-topology-attributes { description "Contains L2 topology attributes."; leaf name { type string; description "Name of the topology."; } leaf-list flags { type l2-flag-type; description "Topology flags."; } } } grouping l2-node-attributes { description "L2 node attributes."; container l2-node-attributes { description "Contains L2 node attributes."; leaf name { type string; description "Node name."; } leaf-list flags { type node-flag-type; description "Node flags. It can be used to indicate node flag attributes."; } leaf-list bridge-id { type string { pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){7}'; } description "This is the bridge identifier represented as a hexadecimal 8-octet string. It has 4 bits of priority, 12 bits of Multiple Spanning Tree Instance Identifier (MSTI-ID), and the base bridge identifier. There may be multiple for each spanning tree instance."; reference "RFC 7727: Spanning Tree Protocol (STP) Application of the Inter-Chassis Communication Protocol (ICCP)"; } leaf-list management-address { type inet:ip-address; description "IP address used for management purpose."; } leaf management-mac { type yang:mac-address; description "This is a MAC address used for the bridge management. It can be the Bridge Base VLAN ID (VID), interface MAC address, or other. "; } leaf management-vlan { type string; description "This is a VLAN that supports the management address. The actual VLAN ID type and value would be a member of this VLAN."; } } } grouping l2-link-attributes { description "L2 link attributes."; 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."; } 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 "Exposes the duplex mode, full-duplex or half-duplex."; } } } grouping l2-termination-point-attributes { description "L2 termination point attributes."; container l2-termination-point-attributes { description "Containing L2 termination point attributes."; leaf interface-name { type string; description "Name of the interface. The name can (but does not have to) correspond to an interface reference of a containing node's interface, i.e., the path name of a corresponding interface data node on the containing node is reminiscent of data type interface-ref defined in RFC 8343. It should be noted that data type interface-ref of RFC 8343 cannot be used directly, as this data type is used to reference an interface in a datastore of a single node in the network, not to uniquely reference interfaces across a network."; } leaf mac-address { type yang:mac-address; description "Interface MAC address for logical link control."; } leaf-list port-number { type uint32; description " List of port numbers of the bridge ports for which each entry contains bridge management information."; } leaf-list unnumbered-id { type uint32; description "List of unnumbered interface identifiers. The unnumbered interface identifier will correspond to the ifIndex value of the interface, i.e., the ifIndex value of the ifEntry that represents the interface in implementations where the Interfaces Group MIB (RFC 2863) is supported."; } leaf encapsulation-type { type identityref { base eth-encapsulation-type; } description "Encapsulation type of this termination point."; } leaf outer-tag { if-feature "VLAN"; type dot1q-types:vid-range-type; description "The outermost VLAN tag. It may include a list of VLAN Ids or nonoverlapping VLAN ranges."; } leaf outer-tpid { if-feature "QinQ"; type dot1q-types:dot1q-tag-type; description "Identifies a specific 802.1Q tag type of outermost VLAN tag."; } leaf inner-tag { if-feature "VLAN"; type dot1q-types:vid-range-type; description "The inner VLAN tag. It may include a list of VLAN Ids or nonoverlapping VLAN ranges."; } leaf inner-tpid { if-feature "QinQ"; type dot1q-types:dot1q-tag-type; description "Identifies a specific 802.1Q tag type of inner VLAN tag."; } leaf lag { type boolean; default "false"; description "Defines whether lag is supported or not. When it is set to true, the lag is supported."; } 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 "List of member link termination points associated with specific L2 termination point."; } container vxlan { when "derived-from-or-self(../encapsulation-type, " + "'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."; } } } augment "/nw:networks/nw:network/nw:network-types" { description "Introduces new network type for L2 topology."; uses l2-network-type; } augment "/nw:networks/nw:network" { when '/nw:networks/nw:network/nw:network-types/l2t:l2-topology' { description "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-topology' { 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-topology' { 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-topology' { description "Augmentation parameters apply only for networks with L2 topology."; } description "Augments L2 topology termination point information."; uses l2-termination-point-attributes; } notification l2-node-event { 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-link-event { description "Notification event for L2 link."; leaf event-type { type l2-network-event-type; description "Event type."; } uses nt:link-ref; uses l2-network-type; uses l2-link-attributes; } notification l2-termination-point-event { 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; } }
module ietf-l2-topology-state { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-l2-topology-state"; prefix l2t-s; import ietf-network-state { prefix nw-s; reference "RFC 8345: A YANG Data Model for Network Topologies"; } import ietf-network-topology-state { prefix nt-s; reference "RFC 8345: A YANG Data Model for Network Topologies"; } import ietf-l2-topology { prefix l2t; reference "RFC 8944: A YANG Data Model for Layer 2 Network Topologies"; } organization "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: Jie Dong <mailto:jie.dong@huawei.com> Editor: Xiugang Wei <mailto:weixiugang@huawei.com> Editor: Qin Wu <mailto:bill.wu@huawei.com> Editor: Mohamed Boucadair <mailto:mohamed.boucadair@orange.com> Editor: Anders Liu <andersliu@tencent.com>"; description "This module defines a model for Layer 2 Network Topology state, representing topology that either is learned or results from applying topology that has been configured per the 'ietf-l2-topology' model, mirroring the corresponding data nodes in this model. This model mirrors 'ietf-l2-topology' but contains only read-only state data. The model is not needed when the underlying implementation infrastructure supports the Network Management Datastore Architecture (NMDA). Copyright (c) 2020 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or 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). This version of this YANG module is part of RFC 8944; see the RFC itself for full legal notices."; revision 2020-11-15 { description "Initial revision."; reference "RFC 8944: A YANG Data Model for Layer 2 Network Topologies"; } /* * Data nodes */ augment "/nw-s:networks/nw-s:network/nw-s:network-types" { description "Introduces a new network type for L2 topology."; uses l2t:l2-network-type; } augment "/nw-s:networks/nw-s:network" { when 'nw-s:network-types/l2t-s:l2-topology' { description "Augmentation parameters apply only for networks with L2 topology."; } description "Configuration parameters for the L2 network as a whole."; uses l2t:l2-topology-attributes; } augment "/nw-s:networks/nw-s:network/nw-s:node" { when '../nw-s:network-types/l2t-s:l2-topology' { description "Augmentation parameters apply only for networks with L2 topology."; } description "Configuration parameters for L2 at the node level."; uses l2t:l2-node-attributes; } augment "/nw-s:networks/nw-s:network/nt-s:link" { when '../nw-s:network-types/l2t-s:l2-topology' { description "Augmentation parameters apply only for networks with L2 topology."; } description "Augments L2 topology link information."; uses l2t:l2-link-attributes; } augment "/nw-s:networks/nw-s:network/nw-s:node/" + "nt-s:termination-point" { when '../../nw-s:network-types/l2t-s:l2-topology' { description "Augmentation parameters apply only for networks with L2 topology."; } description "Augments L2 topology termination point information."; uses l2t:l2-termination-point-attributes; } /* * Notifications */ notification l2-node-event { description "Notification event for L2 node."; leaf event-type { type l2t:l2-network-event-type; description "Event type."; } uses nw-s:node-ref; uses l2t:l2-network-type; uses l2t:l2-node-attributes; } notification l2-link-event { description "Notification event for an L2 link."; leaf event-type { type l2t:l2-network-event-type; description "Event type."; } uses nt-s:link-ref; uses l2t:l2-network-type; uses l2t:l2-link-attributes; } notification l2-termination-point-event { description "Notification event for L2 termination point."; leaf event-type { type l2t:l2-network-event-type; description "Event type."; } uses nt-s:tp-ref; uses l2t:l2-network-type; uses l2t:l2-termination-point-attributes; } }
+------------+ +------------+ | D1 | | D2 | 1-0-1-1 /-\ /-\ /-\ /-\ <--------->| | 1-0-1 | |---------------->| | 2-1-1 | | 1-0-1-2 | | 1-2-1 | |<----------------| | 2-0-1 | | <--------> \-/ 1-3-1 \-/ \-/ 2-3-1 \-/ | /----\ | | /----\ | +---| |---+ +---| |---+ \----/ \----/ A | A | | | | | | | | | | | +------------+ | | | | | D3 | | | | | /-\ /-\ | | | +----->| | 3-1-1 | |-------+ | +---------| | 3-2-1 | |<---------+ \-/ \-/ | | +------------+
{ "ietf-network:networks": { "network": [ { "network-id": "l2-topo-example", "node": [ { "node-id": "D1", "ietf-network-topology:termination-point": [ { "tp-id": "1-0-1", "ietf-l2-topology:l2-termination-point-attributes": { "mac-address": "00:00:5e:00:53:d0", "lag": true, "member-link-tp": [ "1-0-1-1", "1-0-1-2" ] } }, { "tp-id": "1-0-1-1", "ietf-l2-topology:l2-termination-point-attributes": { "mac-address": "00:00:5e:00:53:d3" } }, { "tp-id": "1-0-1-2", "ietf-l2-topology:l2-termination-point-attributes": { "mac-address": "00:00:5e:00:53:d4" } }, { "tp-id": "1-2-1", "ietf-l2-topology:l2-termination-point-attributes": { "mac-address": "00:00:5e:00:53:d1" } }, { "tp-id": "1-3-1", "ietf-l2-topology:l2-termination-point-attributes": { "mac-address": "00:00:5e:00:53:d2" } } ], "ietf-l2-topology:l2-node-attributes": { "management-address": [ "192.0.2.1", "2001:db8:0:1::" ] } }, { "node-id": "D2", "ietf-network-topology:termination-point": [ { "tp-id": "2-0-1", "ietf-l2-topology:l2-termination-point-attributes": { "mac-address": "00:00:5e:00:53:e0" } }, { "tp-id": "2-1-1", "ietf-l2-topology:l2-termination-point-attributes": { "mac-address": "00:00:5e:00:53:e1" } }, { "tp-id": "2-3-1", "ietf-l2-topology:l2-termination-point-attributes": { "mac-address": "00:00:5e:00:53:e2" } } ], "ietf-l2-topology:l2-node-attributes": { "management-address": [ "192.0.2.2", "2001:db8:0:2::" ] } }, { "node-id": "D3", "ietf-network-topology:termination-point": [ { "tp-id": "3-1-1", "ietf-l2-topology:l2-termination-point-attributes": { "mac-address": "00:00:5e:00:53:f0" } }, { "tp-id": "3-2-1", "ietf-l2-topology:l2-termination-point-attributes": { "mac-address": "00:00:5e:00:53:f1" } } ], "ietf-l2-topology:l2-node-attributes": { "management-address": [ "192.0.2.3", "2001:db8:0:3::" ] } } ], "ietf-network-topology:link": [ { "link-id": "D1,1-2-1,D2,2-1-1", "source": { "source-node": "D1", "source-tp": "1-2-1" }, "destination": { "dest-node": "D2", "dest-tp": "2-1-1" }, "ietf-l2-topology:l2-link-attributes": { "rate": "1000" } }, { "link-id": "D2,2-1-1,D1,1-2-1", "source": { "source-node": "D2", "source-tp": "2-1-1" }, "destination": { "dest-node": "D1", "dest-tp": "1-2-1" }, "ietf-l2-topology:l2-link-attributes": { "rate": "1000" } }, { "link-id": "D1,1-3-1,D3,3-1-1", "source": { "source-node": "D1", "source-tp": "1-3-1" }, "destination": { "dest-node": "D3", "dest-tp": "3-1-1" }, "ietf-l2-topology:l2-link-attributes": { "rate": "1000" } }, { "link-id": "D3,3-1-1,D1,1-3-1", "source": { "source-node": "D3", "source-tp": "3-1-1" }, "destination": { "dest-node": "D1", "dest-tp": "1-3-1" }, "ietf-l2-topology:l2-link-attributes": { "rate": "1000" } }, { "link-id": "D2,2-3-1,D3,3-2-1", "source": { "source-node": "D2", "source-tp": "2-3-1" }, "destination": { "dest-node": "D3", "dest-tp": "3-2-1" }, "ietf-l2-topology:l2-link-attributes": { "rate": "1000" } }, { "link-id": "D3,3-2-1,D2,2-3-1", "source": { "source-node": "D3", "source-tp": "3-2-1" }, "destination": { "dest-node": "D2", "dest-tp": "2-3-1" }, "ietf-l2-topology:l2-link-attributes": { "rate": "1000" } } ] } ] } }