module tapi-eth {
    namespace "urn:onf:params:xml:ns:yang:tapi-eth";
    prefix tapi-eth;
    import tapi-common {
        prefix tapi-common;
    }
    import tapi-topology {
        prefix tapi-topology;
    }
    import tapi-connectivity {
        prefix tapi-connectivity;
    }
    organization "Open Networking Foundation (ONF) / Open Transport Working Group(OTWG) / Transport API (TAPI) Project";
    contact "
        WG Web: TAPI SDK Project <http://opensourcesdn.org/projects/project-snowmass/>
        WG List: TAPI Discussion list <mailto: transport-api@login.opennetworking.org>,
        WG Chair: Karthik Sethuraman <mailto:karthik.sethuraman@necam.com>,
        Editor: Ricard Vilalta <mailto:ricard.vilalta@cttc.es>";
    description "none";
    revision 2017-05-31 {
        description "TAPI SDK 2.0-alpha";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020 and RFC 6087";
    }
    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point/tapi-connectivity:layer-protocol" {
        uses connection-end-point-lp-spec;
        description "Augments the base LayerProtocol information in ConnectionEndPoint with ETH-specific information";
    }
    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-topology:layer-protocol" {
        uses node-edge-point-lp-spec;
        description "Augments the base LayerProtocol information in NodeEdgePoint with ETH-specific information";
    }
    /***********************
    * package object-classes
    **********************/ 
        grouping connection-point-and-adapter-pac {
            leaf-list auxiliary-function-position-sequence {
                type uint64;
                description "This attribute indicates the positions (i.e., the relative order) of all the MEP, MIP, and TCS objects which are associated with the CTP.";
            }
            leaf vlan-config {
                type uint64;
                description "This attribute models the ETHx/ETH-m_A_So_MI_Vlan_Config information defined in G.8021.
                    range of type : -1, 0, 1..4094";
            }
            leaf csf-rdi-fdi-enable {
                type boolean;
                description "This attribute models the MI_CSFrdifdiEnable information defined in G.8021.";
            }
            leaf csf-report {
                type boolean;
                description "This attribute models the MI_CSF_Reported information defined in G.8021.
                    range of type : true, false";
            }
            leaf-list filter-config-snk {
                type mac-address;
                description "This attribute models the FilteConfig MI defined in 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are:
                    01-80-C2-00-00-10, 
                    01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 
                    01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
                    The filter action is Pass or Block. 
                    If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
                    If none of the above addresses match, the ETH_CI_D is passed.";
            }
            leaf mac-length {
                type uint64;
                default "2000";
                description "This attribute models the MAC_Lenght MI defined in 8.6/G.8021 for the MAC Length Check process. It indicates the allowed maximum frame length in bytes.
                    range of type : 1518, 1522, 2000";
            }
            container filter-config {
                uses control-frame-filter;
                description "This attribute models the FilterConfig MI defined in section 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are:
                    - All bridges address: 01-80-C2-00-00-10,
                    - Reserved addresses: 01-80-C2-00-00-00 to 01-80-C2-00-00-0F,
                    - GARP Application addresses: 01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
                    The filter action is Pass or Block. 
                    If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
                    If none of the above addresses match, the ETH_CI_D is passed.";
            }
            leaf is-ssf-reported {
                type boolean;
                description "This attribute provisions whether the SSF defect should be reported as fault cause or not.
                    It models the ETH-LAG_FT_Sk_MI_SSF_Reported defined in G.8021.";
            }
            leaf pll-thr {
                type uint64;
                description "This attribute provisions the threshold for the number of active ports. If the number of active ports is more than zero but less than the provisioned threshold, a cPLL (Partial Link Loss) is raised. See section 9.7.1.2 of G.8021.
                    range of type : 0..number of ports";
            }
            leaf actor-oper-key {
                type uint64;
                config false;
                description "See 802.1AX:
                    The current operational value of the Key for the Aggregator. The administrative Key value may differ from the operational Key value for the reasons discussed in 5.6.2.
                    The meaning of particular Key values is of local significance.
                    range of type : 16 bit";
            }
            leaf actor-system-id {
                type mac-address;
                description "See 802.1AX:
                    A MAC address used as a unique identifier for the System that contains this Aggregator.";
            }
            leaf actor-system-priority {
                type uint64;
                description "See 802.1AX:
                    Indicating the priority associated with the Actor’s System ID.
                    range of type : 2-octet";
            }
            leaf collector-max-delay {
                type uint64;
                description "See 802.1AX:
                    The value of this attribute defines the maximum delay, in tens of microseconds, that may be imposed by the Frame Collector between receiving a frame from an Aggregator Parser, and either delivering the frame to its MAC Client or discarding the frame (see IEEE 802.1AX clause 5.2.3.1.1).
                    range of type : 16-bit";
            }
            leaf data-rate {
                type uint64;
                config false;
                description "See 802.1AX:
                    The current data rate, in bits per second, of the aggregate link. The value is calculated as N times the data rate of a single link in the aggregation, where N is the number of active links.";
            }
            leaf partner-oper-key {
                type uint64;
                config false;
                description "See 802.1AX:
                    The current operational value of the Key for the Aggregator’s current protocol Partner. If the aggregation is manually configured, this Key value will be a value assigned by the local System.
                    range of type : 16-bit";
            }
            leaf partner-system-id {
                type mac-address;
                config false;
                description "See 802.1AX:
                    A MAC address consisting of the unique identifier for the current protocol Partner of this Aggregator. A value of zero indicates that there is no known Partner. If the aggregation is manually configured, this System ID value will be a value assigned by the local System.";
            }
            leaf partner-system-priority {
                type uint64;
                config false;
                description "See 802.1AX:
                    Indicates the priority associated with the Partner’s System ID. If the aggregation is manually configured, this System Priority value will be a value assigned by the local System.
                    range of type : 2-octet";
            }
            leaf csf-config {
                type csf-config;
                description "This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021.
                    range of type : true, false";
            }
            container traffic-shaping {
                uses traffic-shaping-pac;
                description "none";
            }
            container traffic-conditioning {
                uses traffic-conditioning-pac;
                description "none";
            }
            description "none";
        }
        grouping connection-end-point-lp-spec {
            container termination-spec {
                uses eth-termination-pac;
                description "none";
            }
            container adapter-spec {
                uses connection-point-and-adapter-pac;
                description "none";
            }
            description "none";
        }
        grouping eth-termination-pac {
            container priority-regenerate {
                uses priority-mapping;
                description "This attribute models the ETHx/ETH-m _A_Sk_MI_P_Regenerate information defined in G.8021.";
            }
            leaf ether-type {
                type vlan-type;
                description "This attribute models the ETHx/ETH-m _A_Sk_MI_Etype information defined in G.8021.";
            }
            leaf-list filter-config {
                type mac-address;
                description "This attribute models the ETHx/ETH-m_A_Sk_MI_Filter_Config information defined in G.8021.
                    It indicates the configured filter action for each of the 33 group MAC addresses for control frames.
                    The 33 MAC addresses are:
                    01-80-C2-00-00-10, 
                    01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 
                    01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
                    The filter action is Pass or Block. 
                    If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
                    If none of the above addresses match, the ETH_CI_D is passed.
                    range of type : MacAddress: 
                    01-80-C2-00-00-10, 
                    01-80-C2-00-00-00 to 
                    01-80-C2-00-00-0F, and 
                    01-80-C2-00-00-20 to 
                    01-80-C2-00-00-2F;
                    ActionEnum:
                    PASS, BLOCK";
            }
            leaf frametype-config {
                type frame-type;
                description "This attribute models the ETHx/ETH-m_A_Sk_MI_Frametype_Config information defined in G.8021.
                    range of type : see Enumeration";
            }
            leaf port-vid {
                type vid;
                default "1";
                description "This attribute models the ETHx/ETH-m _A_Sk_MI_PVID information defined in G.8021.";
            }
            leaf priority-code-point-config {
                type pcp-coding;
                description "This attribute models the ETHx/ETH-m _A_Sk_MI_PCP_Config information defined in G.8021.
                    range of type : see Enumeration";
            }
            description "This object class models the Ethernet Flow Termination function located at a layer boundary.";
        }
        grouping ety-termination-pac {
            leaf is-fts-enabled {
                type boolean;
                description "This attribute indicates whether Forced Transmitter Shutdown (FTS) is enabled or not. It models the ETYn_TT_So_MI_FTSEnable information.";
            }
            leaf is-tx-pause-enabled {
                type boolean;
                description "This attribute identifies whether the Transmit Pause process is enabled or not. It models the MI_TxPauseEnable defined in G.8021.";
            }
            leaf phy-type {
                type ety-phy-type;
                config false;
                description "This attribute identifies the PHY type of the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.2.";
            }
            leaf-list phy-type-list {
                type ety-phy-type;
                config false;
                description "This attribute identifies the possible PHY types that could be supported at the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.3.";
            }
            description "none";
        }
        grouping traffic-conditioning-pac {
            list prio-config-list {
                config false;
                uses priority-configuration;
                description "This attribute indicates the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue.";
            }
            list cond-config-list {
                config false;
                uses traffic-conditioning-configuration;
                description "This attribute indicates for the conditioner process the conditioning parameters:
                    - Queue ID: Indicates the Queue ID
                    - Committed Information Rate (CIR): number of bits per second
                    - Committed Burst Size (CBS): number of bytes
                    - Excess Information Rate (EIR): number of bits per second
                    - Excess Burst Size (EBS): number of bytes
                    - Coupling flag (CF): 0 or 1
                    - Color mode (CM): color-blind and color-aware.";
            }
            leaf codirectional {
                type boolean;
                config false;
                description "This attribute indicates the direction of the conditioner. The value of true means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the sink part of the containing CTP. The value of false means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the source part of the containing CTP.";
            }
            description "This object class models the ETH traffic conditioning function as defined in G.8021.
                Basic attributes: codirectional, condConfigList, prioConfigList";
        }
        grouping traffic-shaping-pac {
            list prio-config-list {
                config false;
                uses priority-configuration;
                description "This attribute configures the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue.";
            }
            list queue-config-list {
                config false;
                uses queue-configuration;
                description "This attribute configures the Queue depth and Dropping threshold parameters of the Queue process. The Queue depth sets the maximum size of the queue in bytes. An incoming ETH_CI traffic unit is dropped if there is insufficient space in the queue to hold the whole unit. The Dropping threshold sets the threshold of the queue. If the queue is filled beyond this threshold, incoming ETH_CI traffic units accompanied by the ETH_CI_DE signal set are dropped.";
            }
            leaf sched-config {
                type scheduling-configuration;
                config false;
                description "This attribute configures the scheduler process. The value of this attribute is for further study because it is for further study in G.8021.
                    Scheduler is a pointer to a Scheduler object, which is to be defined in the future (because in G.8021, this is FFS).
                    Note that the only significance of the GTCS function defined in G.8021 is the use of a common scheduler for shaping. Given that, G.8052 models the common scheduler feature by having a common value for this attribute.";
            }
            leaf codirectional {
                type boolean;
                config false;
                description "This attribute indicates the direction of the shaping function. The value of true means that the shaping (modeled as a TCS Source according to G.8021) is associated with the source part of the containing CTP. The value of false means that the shaping (modeled as a TCS Source according to G.8021) is associated with the sink part of the containing CTP.";
            }
            description "This object class models the ETH traffic shaping function as defined in G.8021.
                Basic attribute: codirectional, prioConfigList, queueConfigList, schedConfig";
        }
        grouping node-edge-point-lp-spec {
            container termination-spec {
                uses ety-termination-pac;
                description "none";
            }
            description "none";
        }

    /***********************
    * package type-definitions
    **********************/ 
        grouping priority-configuration {
            leaf priority {
                type uint64 {
                    range "0..7";
                }
                description "none";
            }
            leaf queue-id {
                type uint64 {
                    range "1..8";
                }
                description "none";
            }
            description "none";
        }
        grouping queue-configuration {
            leaf queue-id {
                type uint64;
                description "This attribute indicates the queue id.";
            }
            leaf queue-depth {
                type uint64;
                description "This attribute defines the depth of the queue in bytes.";
            }
            leaf queue-threshold {
                type uint64;
                description "This attribute defines the threshold of the queue in bytes.";
            }
            description "none";
        }
        grouping traffic-conditioning-configuration {
            leaf cir {
                type uint64;
                description "This attribute indicates the Committed Information Rate in bits/s.";
            }
            leaf cbs {
                type uint64;
                description "This attribute indicates the Committed Burst Size in bytes.";
            }
            leaf eir {
                type uint64;
                description "This attribute indicates the Excess Information Rate in bits/s.";
            }
            leaf ebs {
                type uint64;
                description "This attribute indicates the Excess Burst Size in bytes.";
            }
            leaf coupling-flag {
                type boolean;
                description "This attribute indicates the coupling flag.";
            }
            leaf colour-mode {
                type colour-mode;
                description "This attribute indicates the colour mode.";
            }
            leaf queue-id {
                type uint64 {
                    range "1..8";
                }
                description "This attribute indicates the queue id.";
            }
            description "none";
        }
        typedef mac-address {
            type string;
            description "This primitive data type contains an Ethernet MAC address defined by IEEE 802a. The format of the address consists of 12 hexadecimal characters, grouped in pairs and separated by '-' (e.g., 03-27-AC-75-3E-1D).";
        }
        grouping priority-mapping {
            leaf priority-0 {
                type uint64 {
                    range "0..7";
                }
                description "This attribute defines the new priority value for the old priority value 0.";
            }
            leaf priority-1 {
                type uint64 {
                    range "0..7";
                }
                default "1";
                description "This attribute defines the new priority value for the old priority value 1.";
            }
            leaf priority-2 {
                type uint64 {
                    range "0..7";
                }
                default "2";
                description "This attribute defines the new priority value for the old priority value 2.";
            }
            leaf priority-3 {
                type uint64 {
                    range "0..7";
                }
                default "3";
                description "This attribute defines the new priority value for the old priority value 3.";
            }
            leaf priority-4 {
                type uint64 {
                    range "0..7";
                }
                default "4";
                description "This attribute defines the new priority value for the old priority value 4.";
            }
            leaf priority-5 {
                type uint64 {
                    range "0..7";
                }
                default "5";
                description "This attribute defines the new priority value for the old priority value 5.";
            }
            leaf priority-6 {
                type uint64 {
                    range "0..7";
                }
                default "6";
                description "This attribute defines the new priority value for the old priority value 6.";
            }
            leaf priority-7 {
                type uint64 {
                    range "0..7";
                }
                default "7";
                description "This attribute defines the new priority value for the old priority value 7.";
            }
            description "This data type provides the priority mapping done in the 'P Regenerate' process defined in G.8021.";
        }
        typedef vid {
            type string;
            description "This primitive type models the 12 Bit VLAN identifier of a VLAN tag.";
        }
        typedef modify-cross-connection-data {
            type string;
            description "none";
        }
        grouping address-tuple {
            leaf address {
                type mac-address;
                description "This attribute contains the MAC address of the address tuple.";
            }
            leaf-list port-list {
                type mac-address;
                description "This attribute contains the ports associated to the MAC address in the address tuple.";
            }
            description "This data type contains an address tuple consisting of a MAC address and a corresponding port list.";
        }
        typedef scheduling-configuration {
            type string;
            description "The syntax of this dataType is pending on the specification in G.8021, which is for further study.";
        }
        grouping control-frame-filter {
            leaf c-2-00-00-10 {
                type boolean;
                description "This attribute identifies the 'All LANs Bridge Management Group Address'.";
            }
            leaf c-2-00-00-00 {
                type boolean;
                description "This attribute identifies the STP/RSTP/MSTP protocol address.";
            }
            leaf c-2-00-00-01 {
                type boolean;
                description "This attribute identifies the IEEE MAC-specific Control Protocols group address (PAUSE protocol).";
            }
            leaf c-2-00-00-02 {
                type boolean;
                description "This attribute identifies the IEEE 802.3 Slow_Protocols_Multicast address (LACP/LAMP or Link OAM protocols).";
            }
            leaf c-2-00-00-03 {
                type boolean;
                description "This attribute identifies the Nearest non-TPMR Bridge group address (Port Authentication protocol).";
            }
            leaf c-2-00-00-04 {
                type boolean;
                description "This attribute identifies the IEEE MAC-specific Control Protocols group address.";
            }
            leaf c-2-00-00-05 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-06 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-07 {
                type boolean;
                description "This attribute identifies the Metro Ethernet Forum E-LMI protocol group address.";
            }
            leaf c-2-00-00-08 {
                type boolean;
                description "This attribute identifies the Provider Bridge Group address.";
            }
            leaf c-2-00-00-09 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-0-a {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-0-b {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-0-c {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-0-d {
                type boolean;
                description "This attribute identifies the Provider Bridge MVRP address.";
            }
            leaf c-2-00-00-0-e {
                type boolean;
                description "This attribute identifies the Individual LAN Scope group address, Nearest Bridge group address (LLDP protocol).";
            }
            leaf c-2-00-00-0-f {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-20 {
                type boolean;
                description "This attribute identifies the Customer and Provider Bridge MMRP address.";
            }
            leaf c-2-00-00-21 {
                type boolean;
                description "This attribute identifies the Customer Bridge MVRP address.";
            }
            leaf c-2-00-00-22 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-23 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-24 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-25 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-26 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-27 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-28 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-29 {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-2-a {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-2-b {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-2-c {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-2-d {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-2-e {
                type boolean;
                description "Reserved for future standardization.";
            }
            leaf c-2-00-00-2-f {
                type boolean;
                description "Reserved for future standardization.";
            }
            description "This data type identifies the filter action for each of the 33 group MAC addresses (control frames).
                Value 'false' means block: The frame is discarded by the filter process.
                Value 'true' means pass: The frame is passed unchanged through the filter process.";
        }
        grouping bandwidth-report {
            leaf source-mac-address {
                type mac-address;
                description "The sourceMacAddress is the address from the far end.";
            }
            leaf port-id {
                type uint64;
                description "This attribute returns the far end port identifier.";
            }
            leaf nominal-bandwidth {
                type uint64;
                description "This attribute returns the configured bandwidth";
            }
            leaf current-bandwidth {
                type uint64;
                description "This attribute returns the current bandwidth.";
            }
            description "Data type for the bandwidth report.";
        }
        typedef admin-state {
            type enumeration {
                enum lock {
                    description "none";
                }
                enum normal {
                    description "none";
                }
            }
            description "none";
        }
        typedef colour-mode {
            type enumeration {
                enum colour-blind {
                    description "none";
                }
                enum colour-aware {
                    description "none";
                }
            }
            description "none";
        }
        typedef csf-config {
            type enumeration {
                enum disabled {
                    description "This literal covers the following states of the CSF related MI informations:
                        - MI_CSF_Enable is false
                        - MI_CSFrdifdi_Enable is false
                        - MI_CSFdci_Enable is false.";
                }
                enum enabled {
                    description "This literal covers the following states of the CSF related MI informations:
                        - MI_CSF_Enable is true
                        - MI_CSFrdifdi_Enable is false
                        - MI_CSFdci_Enable is false.";
                }
                enum enabled-with-rdi-fdi {
                    description "This literal covers the following states of the CSF related MI informations:
                        - MI_CSF_Enable is true
                        - MI_CSFrdifdi_Enable is true
                        - MI_CSFdci_Enable is false.";
                }
                enum enabled-with-rdi-fdi-dci {
                    description "This literal covers the following states of the CSF related MI informations:
                        - MI_CSF_Enable is true
                        - MI_CSFrdifdi_Enable is true
                        - MI_CSFdci_Enable is true.";
                }
                enum enabled-with-dci {
                    description "This literal covers the following states of the CSF related MI informations:
                        - MI_CSF_Enable is true
                        - MI_CSFrdifdi_Enable is false
                        - MI_CSFdci_Enable is true.";
                }
            }
            description "none";
        }
        typedef ety-phy-type {
            type enumeration {
                enum other {
                    description "none";
                }
                enum unknown {
                    description "none";
                }
                enum none {
                    description "none";
                }
                enum 2-base-tl {
                    description "none";
                }
                enum 10-mbit-s {
                    description "none";
                }
                enum 10-pass-ts {
                    description "none";
                }
                enum 100-base-t-4 {
                    description "none";
                }
                enum 100-base-x {
                    description "none";
                }
                enum 100-base-t-2 {
                    description "none";
                }
                enum 1000-base-x {
                    description "none";
                }
                enum 1000-base-t {
                    description "none";
                }
                enum 10-gbase-x {
                    description "none";
                }
                enum 10-gbase-r {
                    description "none";
                }
                enum 10-gbase-w {
                    description "none";
                }
            }
            description "none";
        }
        typedef frame-type {
            type enumeration {
                enum admit-only-vlan-tagged-frames {
                    description "none";
                }
                enum admit-only-untagged-and-priority-tagged-frames {
                    description "none";
                }
                enum admit-all-frames {
                    description "none";
                }
            }
            description "none";
        }
        typedef oam-period {
            type enumeration {
                enum 3-33-ms {
                    description "Default for protection.";
                }
                enum 10-ms {
                    description "none";
                }
                enum 100-ms {
                    description "none";
                }
                enum 1-s {
                    description "none";
                }
                enum 10-s {
                    description "none";
                }
                enum 1-min {
                    description "none";
                }
                enum 10-min {
                    description "none";
                }
            }
            description "Provides the frequency for the OAM PDU insertion.";
        }
        typedef pcp-coding {
            type enumeration {
                enum 8-p-0-d {
                    description "none";
                }
                enum 7-p-1-d {
                    description "none";
                }
                enum 6-p-2-d {
                    description "none";
                }
                enum 5-p-3-d {
                    description "none";
                }
                enum dei {
                    description "This enumeration value means that all priorities should be drop eligible.
                        DEI = Drop Eligibility Indicator";
                }
            }
            description "This enum models the coding of the Priority Code Point as defined in section 'Priority Code Point encoding' of IEEE 802.1Q.";
        }
        typedef vlan-type {
            type enumeration {
                enum c-tag {
                    description "0x8100";
                }
                enum s-tag {
                    description "0x88a8";
                }
                enum i-tag {
                    description "88-e7";
                }
            }
            description "This enumeration contains the Ethertypes defined in IEEE 802.1Q.";
        }

}
