netconfcentral logo

openconfig-vlan@2017-07-14



  module openconfig-vlan {

    yang-version 1;

    namespace
      "http://openconfig.net/yang/vlan";

    prefix oc-vlan;

    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;
    }

    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";

    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";

    }

    oc-ext:openconfig-version "2.0.0";

    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" {
            value 0;
            description "VLAN is active";
          }
          enum "SUSPENDED" {
            value 1;
            description
              "VLAN is inactive / suspended";
          }
        }
        default 'ACTIVE';
        description
          "Admin state of the VLAN";
      }
    }  // grouping vlan-config

    grouping vlan-state {
      description
        "State variables for VLANs";
    }  // grouping vlan-state

    grouping vlan-tpid-config {
      description
        "TPID configuration for dot1q-enabled interfaces";
      leaf tpid {
        type identityref {
          base oc-vlan-types:TPID_TYPES;
        }
        default 'TPID_0X8100';
        description
          "Optionally set the tag protocol identifier field (TPID) that
        is accepted on the VLAN";
      }
    }  // grouping vlan-tpid-config

    grouping vlan-tpid-state {
      description
        "TPID opstate for dot1q-enabled interfaces";
    }  // grouping vlan-tpid-state

    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;
        }  // list member
      }  // container members
    }  // grouping vlan-members-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-config

    grouping vlan-switched-state {
      description
        "VLAN related operational state that is part of Ethernet
      interface state data";
    }  // grouping vlan-switched-state

    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 config

        container state {
          config false;
          description
            "State variables for VLANs";
          uses vlan-switched-config;

          uses vlan-switched-state;
        }  // container state
      }  // container switched-vlan
    }  // grouping vlan-switched-top

    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-config

    grouping vlan-logical-state {
      description
        "VLAN related operational state that is part of logical
      interface state data";
    }  // grouping vlan-logical-state

    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 config

          container state {
            config false;
            description
              "State variables for VLANs";
            uses vlan-config;

            uses vlan-state;
          }  // container state

          uses vlan-members-state;
        }  // list vlan
      }  // container vlans
    }  // grouping vlan-top

    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 config

        container state {
          config false;
          description
            "State variables for VLANs";
          uses vlan-logical-config;

          uses vlan-logical-state;
        }  // container state
      }  // container vlan
    }  // grouping vlan-logical-top

    grouping vlan-routed-config {
      description
        "Configuration data for routed vlans (SVI, IRB, etc.)";
      leaf vlan {
        type union {
          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-config

    grouping vlan-routed-state {
      description
        "Operational state data for routed vlan interfaces.";
    }  // grouping vlan-routed-state

    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 config

        container state {
          config false;
          description
            "Operational state data ";
          uses vlan-routed-config;

          uses vlan-routed-state;
        }  // container state
      }  // container routed-vlan
    }  // grouping vlan-routed-top

    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";
        }
      }
    }
  }  // module openconfig-vlan