| module openconfig-vlan { |
| |
| yang-version "1"; |
| |
| // namespace |
| namespace "http://openconfig.net/yang/vlan"; |
| |
| prefix "oc-vlan"; |
| |
| // import some basic types |
| import openconfig-vlan-types { prefix oc-vlan-types; } |
| import openconfig-interfaces { prefix oc-if; } |
| import openconfig-if-ethernet { prefix oc-eth; } |
| import openconfig-if-aggregate { prefix oc-lag; } |
| import iana-if-type { prefix ift; } |
| import openconfig-extensions { prefix oc-ext; } |
| |
| // meta |
| organization "OpenConfig working group"; |
| |
| contact |
| "OpenConfig working group |
| netopenconfig@googlegroups.com"; |
| |
| description |
| "This module defines configuration and state variables for VLANs, |
| in addition to VLAN parameters associated with interfaces"; |
| |
| oc-ext:openconfig-version "2.0.0"; |
| |
| revision "2017-07-14" { |
| description |
| "Move top-level vlan data to network-instance; Update |
| identities to comply to style guide; fixed pattern |
| quoting; corrected trunk vlan types; added TPID config to |
| base interface."; |
| reference "2.0.0"; |
| } |
| |
| revision "2016-05-26" { |
| description |
| "OpenConfig public release"; |
| reference "1.0.2"; |
| } |
| |
| // grouping statements |
| |
| grouping vlan-config { |
| description "VLAN configuration container."; |
| |
| leaf vlan-id { |
| type oc-vlan-types:vlan-id; |
| description "Interface VLAN id."; |
| } |
| |
| leaf name { |
| type string; |
| description "Interface VLAN name."; |
| } |
| |
| leaf status { |
| type enumeration { |
| enum ACTIVE { |
| description "VLAN is active"; |
| } |
| enum SUSPENDED { |
| description "VLAN is inactive / suspended"; |
| } |
| } |
| default ACTIVE; |
| description "Admin state of the VLAN"; |
| } |
| |
| } |
| |
| grouping vlan-state { |
| description "State variables for VLANs"; |
| |
| // placeholder |
| |
| } |
| |
| grouping vlan-tpid-config { |
| description |
| "TPID configuration for dot1q-enabled interfaces"; |
| |
| leaf tpid { |
| type identityref { |
| base oc-vlan-types:TPID_TYPES; |
| } |
| default oc-vlan-types:TPID_0X8100; |
| description |
| "Optionally set the tag protocol identifier field (TPID) that |
| is accepted on the VLAN"; |
| } |
| } |
| |
| grouping vlan-tpid-state { |
| description |
| "TPID opstate for dot1q-enabled interfaces"; |
| |
| // placeholder |
| |
| } |
| |
| grouping vlan-members-state { |
| description |
| "List of interfaces / subinterfaces belonging to the VLAN."; |
| |
| container members { |
| description |
| "Enclosing container for list of member interfaces"; |
| |
| list member { |
| config false; |
| description |
| "List of references to interfaces / subinterfaces |
| associated with the VLAN."; |
| |
| uses oc-if:base-interface-ref-state; |
| } |
| } |
| } |
| |
| grouping vlan-switched-config { |
| description |
| "VLAN related configuration that is part of the physical |
| Ethernet interface."; |
| |
| leaf interface-mode { |
| type oc-vlan-types:vlan-mode-type; |
| description |
| "Set the interface to access or trunk mode for |
| VLANs"; |
| } |
| |
| leaf native-vlan { |
| when "interface-mode = 'TRUNK'" { |
| description |
| "Native VLAN is valid for trunk mode interfaces"; |
| } |
| type oc-vlan-types:vlan-id; |
| description |
| "Set the native VLAN id for untagged frames arriving on |
| a trunk interface. Tagged frames sent on an interface |
| configured with a native VLAN should have their tags |
| stripped prior to transmission. This configuration is only |
| valid on a trunk interface."; |
| } |
| |
| leaf access-vlan { |
| when "interface-mode = 'ACCESS'" { |
| description |
| "Access VLAN assigned to the interfaces"; |
| } |
| type oc-vlan-types:vlan-id; |
| description |
| "Assign the access vlan to the access port."; |
| } |
| |
| leaf-list trunk-vlans { |
| when "interface-mode = 'TRUNK'" { |
| description |
| "Allowed VLANs may be specified for trunk mode |
| interfaces."; |
| } |
| type union { |
| type oc-vlan-types:vlan-id; |
| type oc-vlan-types:vlan-range; |
| } |
| description |
| "Specify VLANs, or ranges thereof, that the interface may |
| carry when in trunk mode. If not specified, all VLANs are |
| allowed on the interface. Ranges are specified in the form |
| x..y, where x<y - ranges are assumed to be inclusive (such |
| that the VLAN range is x <= range <= y."; |
| } |
| } |
| |
| grouping vlan-switched-state { |
| description |
| "VLAN related operational state that is part of Ethernet |
| interface state data"; |
| |
| //TODO: placeholder for operational state related to VLANs |
| //on the physical interface |
| } |
| |
| grouping vlan-switched-top { |
| description |
| "Top-level grouping for VLAN data associated with an |
| Ethernet interface"; |
| |
| container switched-vlan { |
| description |
| "Enclosing container for VLAN interface-specific |
| data on Ethernet interfaces. These are for standard |
| L2, switched-style VLANs."; |
| |
| container config { |
| description "Configuration parameters for VLANs"; |
| |
| uses vlan-switched-config; |
| } |
| |
| container state { |
| |
| config false; |
| description "State variables for VLANs"; |
| |
| uses vlan-switched-config; |
| uses vlan-switched-state; |
| } |
| } |
| } |
| |
| grouping vlan-logical-config { |
| description |
| "VLAN related configuration that is part of subinterface |
| (logical interface) configuration. These are generally |
| L3 VLANs with an id that is local."; |
| |
| |
| leaf vlan-id { |
| type union { |
| type oc-vlan-types:vlan-id; |
| type oc-vlan-types:qinq-id; |
| } |
| description |
| "VLAN id for the subinterface -- specified inline for the |
| case of a local VLAN. The id is scoped to the |
| subinterface, and could be repeated on different |
| subinterfaces."; |
| } |
| } |
| |
| grouping vlan-logical-state { |
| description |
| "VLAN related operational state that is part of logical |
| interface state data"; |
| |
| //TODO: placeholder to add VLAN-specific state variables on |
| //the subinterface |
| } |
| |
| grouping vlan-top { |
| description "Top-level grouping for VLAN configuration"; |
| |
| container vlans { |
| description "Container for VLAN configuration and state |
| variables"; |
| |
| list vlan { |
| key "vlan-id"; |
| |
| description "Configured VLANs keyed by id"; |
| |
| leaf vlan-id { |
| type leafref { |
| path "../config/vlan-id"; |
| } |
| description "references the configured vlan-id"; |
| } |
| |
| container config { |
| description "Configuration parameters for VLANs"; |
| |
| uses vlan-config; |
| } |
| |
| container state { |
| |
| config false; |
| description "State variables for VLANs"; |
| |
| uses vlan-config; |
| uses vlan-state; |
| } |
| uses vlan-members-state; |
| } |
| } |
| } |
| |
| grouping vlan-logical-top { |
| description |
| "Top-level grouping for VLAN data associated with a |
| logical interface or subinterface"; |
| |
| container vlan { |
| description |
| "Enclosing container for VLAN interface-specific |
| data on subinterfaces"; |
| |
| container config { |
| description "Configuration parameters for VLANs"; |
| |
| uses vlan-logical-config; |
| } |
| |
| container state { |
| |
| config false; |
| description "State variables for VLANs"; |
| |
| uses vlan-logical-config; |
| uses vlan-logical-state; |
| } |
| } |
| } |
| |
| grouping vlan-routed-config { |
| description |
| "Configuration data for routed vlans (SVI, IRB, etc.)"; |
| |
| leaf vlan { |
| type union { |
| // TODO: in YANG 1.1, unions support leafref types which |
| // should be used here to reference a configured VLAN by |
| // id or name |
| type uint16; |
| type string; |
| } |
| description |
| "References the VLAN for which this IP interface |
| provides routing services -- similar to a switch virtual |
| interface (SVI), or integrated routing and bridging interface |
| (IRB) in some implementations."; |
| } |
| |
| } |
| |
| grouping vlan-routed-state { |
| description |
| "Operational state data for routed vlan interfaces."; |
| } |
| |
| grouping vlan-routed-top { |
| description |
| "Top-level grouping for routed vlan logical interfaces"; |
| |
| container routed-vlan { |
| description |
| "Top-level container for routed vlan interfaces. These |
| logical interfaces are also known as SVI (switched virtual |
| interface), IRB (integrated routing and bridging), RVI |
| (routed VLAN interface)"; |
| |
| container config { |
| description |
| "Configuration data for routed vlan interfaces"; |
| |
| uses vlan-routed-config; |
| } |
| |
| container state { |
| |
| config false; |
| |
| description |
| "Operational state data "; |
| |
| uses vlan-routed-config; |
| uses vlan-routed-state; |
| } |
| } |
| } |
| |
| // data definition statements |
| |
| // augment statements |
| |
| augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" + |
| "oc-if:subinterface" { |
| description |
| "Adds VLAN settings to individual subinterfaces"; |
| |
| uses vlan-logical-top; |
| } |
| |
| augment "/oc-if:interfaces/oc-if:interface/oc-if:config" { |
| description |
| "Adds TPID / ethertype setting for the base interface"; |
| |
| uses vlan-tpid-config; |
| } |
| |
| augment "/oc-if:interfaces/oc-if:interface/oc-if:state" { |
| description |
| "Adds TPID / ethertype opstate for the base interface"; |
| |
| uses vlan-tpid-config; |
| uses vlan-tpid-state; |
| } |
| |
| augment "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet" { |
| description |
| "Adds VLAN settings to individual Ethernet interfaces"; |
| |
| uses vlan-switched-top { |
| when "oc-if:type = 'ift:ethernetCsmacd'" { |
| description |
| "Active when the interface is Ethernet"; |
| } |
| } |
| } |
| |
| augment "/oc-if:interfaces/oc-if:interface/oc-lag:aggregation" { |
| description "Adds VLAN settings to a LAG interface"; |
| |
| uses vlan-switched-top { |
| when "oc-if:type = 'ift:ieee8023adLag'" { |
| description |
| "Active when the interface is a LAG"; |
| } |
| } |
| } |
| |
| augment "/oc-if:interfaces/oc-if:interface" { |
| description |
| "Adds configuration and state for routed VLAN interfaces"; |
| |
| uses vlan-routed-top { |
| when "current()/oc-if:config/oc-if:type = 'ift:l3ipvlan'" { |
| description |
| "Active when the interface is a logical interface providing |
| L3 routing for VLANs"; |
| } |
| } |
| } |
| |
| |
| // rpc statements |
| |
| // notification statements |
| |
| } |