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