--- /dev/null
+
+/*
+ * NO RW COPYRIGHT
+ *
+ */
+
+module ietf-l2-topology {
+ yang-version 1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-l2-topology";
+ prefix "l2t";
+
+ import ietf-network {
+ prefix "nw";
+ }
+
+ import ietf-network-topology {
+ prefix "nt";
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-yang-types {
+ prefix "yang";
+ }
+
+ organization "TBD";
+ contact "I-D Editor: jie.dong@huawei.com";
+
+ description
+ "This module defines a basic model for
+ the layer-2 topology of a network";
+
+ revision "2015-06-23" {
+ description "Initial revision";
+ reference "draft-ietf-i2rs-l2-network-topology-01";
+ }
+
+ /*
+ * Typedefs
+ */
+
+ typedef vlan {
+ type uint16 {
+ range "0..4095";
+ }
+ description "VLAN ID";
+ }
+
+ typedef trill-nickname {
+ type uint16;
+ description "TRILL Nickname";
+ }
+
+ typedef flag-type {
+ type identityref {
+ base "flag-identity";
+ }
+ description "Base type for flags";
+ }
+
+ typedef l2-network-event-type {
+ type enumeration {
+ enum "add" {
+ value 0;
+ description "An L2 node or link or termination-point
+ has been added";
+ }
+ enum "remove" {
+ value 1;
+ description "An L2 node or link or termination-point
+ has been removed";
+ }
+ enum "update" {
+ value 2;
+ description "An L2 node or link or termination-point
+ has been updated";
+ }
+ }
+ description "l2 network event type for notifications";
+ } // l2-topology-event-type
+
+
+ /*
+ * Features
+ */
+
+ feature VLAN {
+ description
+ "Indicates that the system supports the
+ vlan functions";
+ }
+
+ feature QinQ {
+ description
+ "Indicates that the system supports the
+ qinq functions";
+ }
+
+ feature PBB {
+ description
+ "Indicates that the device supports the
+ provider-backbone-bridging functions";
+ }
+
+ feature VPLS {
+ description
+ "Indicates that the device supports the
+ VPLS functions";
+ reference "RFC 4761, RFC 4762";
+ }
+
+ feature TRILL {
+ description
+ "Indicates that the device supports the
+ TRILL functions";
+ reference "RFC 6325";
+ }
+
+ feature VXLAN {
+ description
+ "Indicates that the device supports the
+ VXLAN functions";
+ reference "RFC 7348";
+ }
+
+ /*
+ * Identities
+ */
+ identity flag-identity {
+ description "Base type for flags";
+ }
+
+ identity encapsulation-type {
+ description
+ "Base identity from which specific encapsulation
+ types are derived.";
+ }
+
+ identity eth-encapsulation-type {
+ base encapsulation-type;
+ description
+ "Base identity from which specific ethernet
+ encapsulation types are derived.";
+
+ }
+
+ 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
+ "pbb encapsulation";
+ }
+
+ identity trill {
+ base eth-encapsulation-type;
+ description
+ "trill encapsulation";
+ }
+
+ identity vpls {
+ base eth-encapsulation-type;
+ description
+ "vpls encapsulation";
+ }
+
+ identity vxlan {
+ base eth-encapsulation-type;
+ description
+ "vxlan encapsulation";
+ }
+
+ identity frame-relay {
+ base encapsulation-type;
+ description
+ "Frame Relay encapsulation";
+ }
+
+ identity ppp {
+ base encapsulation-type;
+ description
+ "PPP encapsulation";
+ }
+
+ identity hdlc {
+ base encapsulation-type;
+ description
+ "HDLC encapsulation";
+ }
+
+ identity atm {
+ base encapsulation-type;
+ description
+ "Base identity from which specific ATM
+ encapsulation types are derived.";
+
+ }
+
+ identity pwe3 {
+ base encapsulation-type;
+ description
+ "Base identity from which specific pw
+ encapsulation types are derived.";
+ }
+
+
+ /*
+ * Groupings
+ */
+
+
+ grouping l2-network-type {
+ description "Identify the topology type to be L2.";
+ container l2-network {
+ presence "indicates L2 Network";
+ description
+ "The presence of the container node indicates
+ L2 Topology";
+ }
+ }
+
+ grouping l2-network-attributes {
+ description "L2 Topology scope attributes";
+ container l2-network-attributes {
+ description "Containing L2 network attributes";
+ leaf name {
+ type string;
+ description "Name of the L2 network";
+ }
+
+ leaf-list flag {
+ type flag-type;
+ description "L2 network flags";
+ }
+ }
+ }
+
+ grouping l2-node-attributes {
+ description "L2 node attributes";
+ container l2-node-attributes {
+ description "Containing L2 node attributes";
+ leaf name {
+ type string;
+ description "Node name";
+ }
+ leaf description {
+ type string;
+ description "Node description";
+ }
+ leaf-list management-address {
+ type inet:ip-address;
+ description "System management address";
+ }
+ leaf management-vid {
+ if-feature VLAN;
+ type vlan;
+ description "System management VID";
+ }
+ leaf-list nick-name {
+ if-feature TRILL;
+ type trill-nickname;
+ description "Nickname of the RBridge";
+ }
+ leaf-list flag {
+ type flag-type;
+ description "Node operational flags";
+ }
+ }
+ } // grouping l2-node-attributes
+
+
+ grouping l2-link-attributes {
+ description "L2 link attributes";
+ container l2-link-attributes {
+ description "Containing L2 link attributes";
+ leaf name {
+ type string;
+ description "Link name";
+ }
+ leaf-list flag {
+ type flag-type;
+ description "Link flags";
+ }
+ leaf rate {
+ type decimal64 {
+ fraction-digits 2;
+ }
+ description "Link rate";
+
+ }
+ leaf delay {
+ type uint32;
+ description "Link delay in microseconds";
+ }
+ leaf-list srlg {
+ type uint32;
+ description
+ "List of Shared Risk Link Groups
+ this link belongs to.";
+ }
+ }
+ } // grouping l2-link-attributes
+
+ grouping l2-termination-point-attributes {
+ description "L2 termination point attributes";
+ container l2-termination-point-attributes {
+ description "Containing L2 TP attributes";
+ leaf description {
+ type string;
+ description "Port description";
+ }
+
+ leaf maximum-frame-size {
+ type uint32;
+ description "Maximum frame size";
+ }
+
+ 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
+ ternimation point.";
+ }
+
+ leaf port-vlan-id {
+ if-feature VLAN;
+ type vlan;
+ description "Port VLAN ID";
+ }
+
+ list vlan-id-name {
+ if-feature VLAN;
+ key "vlan-id";
+ description "Interface configured VLANs";
+ leaf vlan-id {
+ type vlan;
+ description "VLAN ID";
+ }
+ leaf vlan-name {
+ type string;
+ description "VLAN Name";
+ }
+ }
+ } //case ethernet
+
+ case legacy {
+ leaf encapsulation {
+ type identityref {
+ base encapsulation-type;
+ }
+ description
+ "Encapsulation type of this termination point.";
+ }
+ } //case legacy
+
+ } //choice termination-point-type
+
+ leaf tp-state {
+ type enumeration {
+ enum in-use {
+ value 0;
+ description
+ "the termination point is in forwarding state";
+ }
+ enum blocking {
+ value 1;
+ description
+ "the termination point is in blocking state";
+ }
+ enum down {
+ value 2;
+ description
+ "the termination point is in down state";
+ }
+ enum others {
+ value 3;
+ description
+ "the termination point is in other state";
+ }
+ }
+ config false;
+ description "State of the termination point";
+ }
+ }
+ } // grouping l2-termination-point-attributes
+
+/*** grouping of network/node/link/tp leaf-refs ***/
+
+ grouping network-ref {
+ description
+ "Grouping for an absolute reference to a network topology
+ instance.";
+ leaf network-ref {
+ type leafref {
+ path "/nw:network/nw:network-id";
+ }
+ description
+ "An absolute reference to a network topology instance.";
+ }
+ }
+
+ grouping link-ref {
+ description
+ "Grouping for an absolute reference to a link instance.";
+ uses network-ref;
+ leaf link-ref {
+ type leafref {
+ path "/nw:network"
+ +"[nw:network-id = current()/../network-ref]"
+ +"/nt:link/nt:link-id";
+ }
+ description
+ "An absolute reference to a link instance.";
+ }
+ }
+
+ grouping node-ref {
+ description
+ "Grouping for an absolute reference to a node instance.";
+ uses network-ref;
+ leaf node-ref {
+ type leafref {
+ path "/nw:network"
+ +"[nw:network-id = current()/../network-ref]"
+ +"/nw:node/nw:node-id";
+ }
+ description
+ "An absolute reference to a node instance.";
+ }
+ }
+
+ grouping tp-ref {
+ description
+ "Grouping for an absolute reference to a termination point.";
+ uses node-ref;
+ leaf tp-ref {
+ type leafref {
+ path "/nw:network"
+ +"[nw:network-id = current()/../network-ref]"
+ +"/nw:node[nw:node-id = current()/../node-ref]"
+ +"/nt:termination-point/nt:tp-id";
+ }
+ description
+ "Grouping for an absolute reference to a TP.";
+ }
+ }
+
+
+ /*
+ * Data nodes
+ */
+ augment "/nw:network/nw:network-types" {
+ description
+ "Introduce new network type for L2 topology";
+ uses l2-network-type;
+ }
+
+ augment "/nw:network" {
+ /* RIFT-Change: when not to be used yet
+ when "nw:network-types/l2-network" {
+ description
+ "Augmentation parameters apply only for networks
+ with L2 topology";
+ }
+ */
+ description
+ "Configuration parameters for the L2 network
+ as a whole";
+ uses l2-network-attributes;
+ }
+
+ augment "/nw:network/nw:node" {
+ /* RIFT-Change: when not to be used yet
+ when "../nw:network-types/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:network/nt:link" {
+ /* RIFT-Change: when not to be used yet
+ when "/nw:network/nw:network-types/l2-network" {
+ description
+ "Augmentation parameters apply only for networks
+ with L2 topology";
+ }
+ */
+ description "Augment L2 topology link information";
+ uses l2-link-attributes;
+ }
+
+ augment "/nw:network/nw:node/nt:termination-point" {
+ /* RIFT-Change: when not to be used yet
+ when "/nw:network/nw:network-types/l2-network" {
+ description
+ "Augmentation parameters apply only for networks
+ with L2 topology";
+ }
+ */
+ description
+ "Augment L2 topology termination point configuration";
+ uses l2-termination-point-attributes;
+ }
+
+ /*
+ * Notifications
+ */
+
+ notification l2-node-event {
+ description "Notification event for L2 node";
+ leaf event-type {
+ type l2-network-event-type;
+ description "Event type";
+ }
+ uses 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 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 tp-ref;
+ uses l2-network-type;
+ uses l2-termination-point-attributes;
+ }
+
+} // module l2-topology