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