<?xml version="1.0" encoding="UTF-8"?>
<!--
  Device:2 Root Data Model: Common Object definitions [Ethernet]

  Copyright (c) 2010-2024, Broadband Forum

  Redistribution and use in source and binary forms, with or
  without modification, are permitted provided that the following
  conditions are met:

  1. Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above
     copyright notice, this list of conditions and the following
     disclaimer in the documentation and/or other materials
     provided with the distribution.

  3. Neither the name of the copyright holder nor the names of its
     contributors may be used to endorse or promote products
     derived from this software without specific prior written
     permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  The above license is used as a license under copyright only.
  Please reference the Forum IPR Policy for patent licensing terms
  <https://www.broadband-forum.org/ipr-policy>.

  Any moral rights which are necessary to exercise under the above
  license grant are also deemed granted under this license.

  Comments or questions about this Broadband Forum data model should be
  directed to <info@broadband-forum.org>.
-->

<dm:document
    xmlns:dm="urn:broadband-forum-org:cwmp:datamodel-1-10"
    xmlns:dmr="urn:broadband-forum-org:cwmp:datamodel-report-1-0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
      urn:broadband-forum-org:cwmp:datamodel-1-10
        https://www.broadband-forum.org/cwmp/cwmp-datamodel-1-10.xsd
      urn:broadband-forum-org:cwmp:datamodel-report-1-0
        https://www.broadband-forum.org/cwmp/cwmp-datamodel-report-1-0.xsd"
    spec="urn:broadband-forum-org:tr-181-2-21-0-ethernet"
    file="tr-181-2-21-0-ethernet.xml">

  <import file="tr-069-biblio.xml" spec="urn:broadband-forum-org:tr-069"/>

  <import file="tr-106-types.xml" spec="urn:broadband-forum-org:tr-106">
    <component name="Alias"/>
    <dataType name="MACAddress"/>
    <dataType name="StatsCounter32"/>
    <dataType name="StatsCounter64"/>
  </import>

  <import file="tr-181-2-root.xml"
      spec="urn:broadband-forum-org:tr-181-2-21-root">
    <component name="Root"/>
  </import>

  <import file="tr-181-2-interface.xml"
    spec="urn:broadband-forum-org:tr-181-2-21-interface">
    <component name="Layer1InterfaceMaxBitRateReadWriteAndSFPReferenceList"/>
    <component name="LinkReadWrite"/>
    <component name="BaseInterfaceParams"/>
    <component name="BaseInterfaceParamsAddDefaults"/>
    <component name="Layer2InterfaceParams"/>
    <component name="BaseInterfaceStats"/>
    <component name="Layer2InterfaceStats"/>
  </import>

  <import file="tr-181-2-powermanagement.xml"
      spec="urn:broadband-forum-org:tr-181-2-21-powermanagement">
    <component name="PowerManagement"/>
  </import>

  <component name="VLANTermination">
    <parameter name="VLANTerminationNumberOfEntries" access="readOnly">
      <description>
        {{numentries}}
      </description>
      <syntax>
        <unsignedInt/>
      </syntax>
    </parameter>
    <object name="VLANTermination.{i}." access="readWrite"
      numEntriesParameter="VLANTerminationNumberOfEntries" enableParameter="Enable"
      minEntries="0" maxEntries="unbounded" version="2.0">
      <description>
        {{object}} table (a stackable interface object as described in
        {{bibref|TR-181i2|Section 4.2}}).
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Name"/>
      </uniqueKey>
      <component ref="BaseInterfaceParams"/>
      <component ref="BaseInterfaceParamsAddDefaults"/>
      <component ref="Layer2InterfaceParams"/>
      <component ref="BaseInterfaceStats"/>
      <component ref="Layer2InterfaceStats"/>
    </object>
  </component>

  <component name="LAG">
    <parameter name="LAGNumberOfEntries" access="readOnly" version="2.0">
      <description>
        {{numentries}}
      </description>
      <syntax>
        <unsignedInt/>
      </syntax>
    </parameter>
    <object name="LAG.{i}." access="readWrite"
      numEntriesParameter="LAGNumberOfEntries" enableParameter="Enable"
      minEntries="0" maxEntries="unbounded" version="2.0">
      <description>
        {{object}} table (a stackable interface object as described in
        {{bibref|TR-181i2|Section 4.2}}).
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Name"/>
      </uniqueKey>
      <component ref="BaseInterfaceParams"/>
      <component ref="BaseInterfaceParamsAddDefaults"/>
      <component ref="Layer2InterfaceParams"/>
      <component ref="BaseInterfaceStats"/>
      <component ref="Layer2InterfaceStats"/>
    </object>
  </component>

  <component name="SendMagicPacketInput">

    <parameter name="MACAddress" access="readWrite" version="2.13">
      <description>
        MAC address target of the magic packet.
      </description>
      <syntax>
        <dataType ref="MACAddress"/>
      </syntax>
    </parameter>

    <parameter name="Password" access="readWrite" version="2.13">
      <description>
        The SecureOn password. The parameter value can be empty or, if present,
        can contain either 4 bytes or 6 bytes.
      </description>
      <syntax>
        <string/>
      </syntax>
    </parameter>
  </component>

  <component name="Ethernet">

    <object name="Device.Ethernet." access="readOnly" minEntries="1"
        maxEntries="1" version="2.0">
      <description>
        Ethernet object, which is any interface implementing the {{bibref|802.3-2015}} family of specifications.
        This object models several Ethernet interface objects,
        each representing a different stack layer, including:
        {{object|Interface}}, {{object|Link}}, and {{object|VLANTermination}}.
        {{object|Interface}} is media-specific and models a port, the PHY
        layer, and the Channel Access Method (CAM) part of the MAC layer.
        {{object|Link}} is media-independent and models the Logical Link
        Control (LLC) layer. An "outer" {{object|VLANTermination}}, when
        present, is expected to be stacked on top of {{object|Link}} objects to
        receive and send frames with a configured VLANID.
      </description>

      <parameter name="WoLSupported" access="readOnly" version="2.13">
        <description>
          Indicates that WoL (Wake on LAN) over Ethernet is supported.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="FlowControlSupported" access="readOnly" version="2.14">
        <description>
          Indicates that Flow Control over Ethernet is supported, as per
          {{bibref|802.3-2015}}.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <component ref="Layer1InterfaceMaxBitRateReadWriteAndSFPReferenceList"/>

      <component ref="LinkReadWrite"/>

      <component ref="VLANTermination"/>

      <component ref="LAG" version="2.12"/>

      <parameter name="RMONStatsNumberOfEntries" access="readOnly"
          version="2.4">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object base="Device.Ethernet.Interface.{i}.">
      <description action="replace">
        Ethernet interface table (a stackable interface object as described in
        {{bibref|TR-181i2|Section 4.2}}) for any interface implementing the IEEE 802.3 family
        of specifications. This table models physical Ethernet ports, but in terms of the interface
        stack it only models the PHY and Connection Access Method of the Ethernet interface MAC. A
        {{object|#.Link}} is also required to model a full Ethernet device.
      </description>

      <component ref="PowerManagement" version="2.20"/>

      <parameter name="MACAddress" access="readOnly">
        <description>
          The unique manufacturer-assigned Ethernet hardware address of the
          interface, also referred to as burned-in MAC address.

          Note: This is not necessarily the same as the MAC address used for
          higher-level protocols, which is modeled via the
          {{param|#.Link.{i}.MACAddress}} parameter. Its main purpose is the
          identification of a specific Ethernet interface; the information can
          also can be used to perform Wake on LAN.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
        </syntax>
      </parameter>

      <parameter name="SupportedLinkModes" access="readOnly" version="2.16">
        <description>
          Reports the supported link modes. MUST be reported in a compliant way
          as defined in {{bibref|IANAMauMIB|IANAifMauTypeListBits}}. For
          example, IANAifMauTypeListBits defines the following link mode types:
          * ''16'' (100BASE-TX full duplex mode)
          * ''26'' (1000BASE-SX full duplex mode)
          * ''30'' (1000BASE-T full duplex mode)
          * ''54'' (10GBASE-T)
          * ''103'' (2.5GBASE-T)
          * ''104'' (5GBASE-T)
        </description>
        <syntax>
          <list/>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="AdvertisedLinkModes" access="readWrite" version="2.19">
        <description>
          Sets the advertised link modes. MUST be set in a compliant way
          as defined in {{bibref|IANAMauMIB|IANAifMauTypeListBits}}. For
          example, IANAifMauTypeListBits defines the following link mode types:
          * ''16'' (100BASE-TX full duplex mode)
          * ''26'' (1000BASE-SX full duplex mode)
          * ''30'' (1000BASE-T full duplex mode)
          * ''54'' (10GBASE-T)
          * ''103'' (2.5GBASE-T)
          * ''104'' (5GBASE-T)
        </description>
        <syntax>
          <list/>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="LinkPartnerAdvertisedLinkModes" access="readOnly" version="2.19">
        <description>
          Reports the link modes advertised by the link partner. MUST be reported in a compliant way
          as defined in {{bibref|IANAMauMIB|IANAifMauTypeListBits}}. For
          example, IANAifMauTypeListBits defines the following link mode types:
          * ''16'' (100BASE-TX full duplex mode)
          * ''26'' (1000BASE-SX full duplex mode)
          * ''30'' (1000BASE-T full duplex mode)
          * ''54'' (10GBASE-T)
          * ''103'' (2.5GBASE-T)
          * ''104'' (5GBASE-T)
        </description>
        <syntax>
          <list/>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="CurrentBitRate" access="readOnly"
          activeNotify="canDeny" version="2.7">
        <description>
          The current upstream and downstream PHY bit rate on this interface
          (expressed in {{units}}).

          A value of 0 indicates that the current bit rate is unknown.
        </description>
        <syntax>
          <unsignedInt>
            <units value="Mbps"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="DuplexMode" access="readWrite">
        <description>
          The duplex mode requested for this connection.
        </description>
        <syntax>
          <string>
            <enumeration value="Half"/>
            <enumeration value="Full"/>
            <enumeration value="Auto"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="CurrentDuplexMode" access="readOnly" version="2.18">
        <description>
          The duplex mode currently in use by this connection.
        </description>
        <syntax>
          <string>
            <enumeration value="Unknown"/>
            <enumeration value="Half"/>
            <enumeration value="Full"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="EEECapability" access="readOnly" version="2.8">
        <description>
          Indicates whether this physical ethernet port supports Energy
          Efficient Ethernet as specified in
          {{bibref|802.3-2012_section6|Section 78}}.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="EEEEnable" access="readWrite" version="2.8">
        <description>
          Whether Energy Efficient Ethernet
          {{bibref|802.3-2012_section6|Section 78}} support is currently
          enabled. When enabled, this ethernet port will be capable of entering
          or exiting Low Power Idle (LPI) mode.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="EEEStatus" access="readOnly" version="2.17">
        <description>
          Indicates the active state of Energy Efficient Ethernet
          {{bibref|802.3-2012_section6|Section 78}}.

          The {{enum|Disabled}} value indicates that {{param|EEEEnable}} is disabled.

          The {{enum|Active}} value indicates that {{param|EEEEnable}} is enabled and
          that EEE support has been negotiated with the link partner. In this state EEE
          will be used.

          The {{enum|Inactive}} value indicates that {{param|EEEEnable}} is disabled, or that
          EEE support has not been negotiated with the link partner, either because the
          link parter is not EEE capable, or its support for EEE is disabled.

          The {{enum|Unsupported}} value indicates that this physical interface does not
          support EEE. In which case {{param|EEECapability}} will be {{false}}.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled"/>
            <enumeration value="Active"/>
            <enumeration value="Inactive"/>
            <enumeration value="Unsupported"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="EDPDCapability" access="readOnly" version="2.19">
        <description>
          Indicates whether this physical ethernet port supports Energy Detect Power Down (EDPD).

          Implementations of this feature are vendor specific,
          Energy Detect Power Down is not part of the 802.3-2015 standard.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="EDPDEnable" access="readWrite" version="2.19">
        <description>
          Indicates whether Energy Detect Power Down (EDPD) support is currently enabled.
          When enabled, depending on the type of hardware, either the transmit power is disabled or
          the link impulses are sent at a greater interval.

          Implementations of this feature are vendor specific,
          Energy Detect Power Down is not part of the 802.3-2015 standard.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="EDPDStatus" access="readOnly" version="2.19">
        <description>
          Indicates the active state of Energy Detect Power Down (EDPD).

          Implementations of this feature are vendor specific,
          Energy Detect Power Down is not part of the 802.3-2015 standard.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled">
              <description>
                Indicates that EDPD is disabled.
              </description>
            </enumeration>
            <enumeration value="Enabled">
              <description>
                Indicates that {{param|EDPDEnable}} is enabled and supported
                by the physical interface.  In this state EDPD will be used.
              </description>
            </enumeration>
            <enumeration value="Unsupported">
              <description>
                Indicates that this physical interface does not support EDPD.
                In which case {{param|EDPDCapability}} will be {{false}}.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="MDIX" access="readWrite" version="2.18">
        <description>
           Configure the Medium Dependent Interface crossover functionality on the interface.
        </description>
        <syntax>
          <string>
            <enumeration value="Auto"/>
            <enumeration value="On"/>
            <enumeration value="Off"/>
          </string>
          <default type="factory" value="Auto"/>
        </syntax>
      </parameter>
      <parameter name="CurrentMDIX" access="readOnly" version="2.18">
        <description>
          The current Medium Dependent Interface crossover setting in use on the interface.
        </description>
        <syntax>
          <string>
            <enumeration value="Unsupported"/>
            <enumeration value="Unknown"/>
            <enumeration value="On"/>
            <enumeration value="Off"/>
          </string>
        </syntax>
      </parameter>

      <component ref="Layer2InterfaceStats"/>
    </object>

    <object base="Device.Ethernet.Interface.{i}.Stats.">
      <parameter name="Collisions" access="readOnly"
          activeNotify="canDeny" version="2.18">
        <description>
          The total number of collisions on the interface.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>
    </object>
    <object base="Device.Ethernet.Link.{i}.">
      <description action="replace">
        Ethernet link layer table (a stackable interface object as described in
        {{bibref|TR-181i2|Section 4.2}}). Table entries model the Logical Link
        Control (LLC) layer. It is expected that an ''Ethernet Link'' interface
        can be stacked above any lower-layer interface object capable of
        carrying Ethernet frames.
      </description>
      <uniqueKey functional="true">
        <parameter ref="MACAddress"/>
      </uniqueKey>

      <parameter name="MTU" access="readWrite" version="2.18" dmr:previousParameter="LowerLayers">
        <description>
          Maximum Transmission Unit for this interface (expressed in
          {{units}}).
        </description>
        <syntax>
          <unsignedInt>
            <units value="bytes"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="MACAddress" access="readWrite">
        <description>
          The MAC address used for packets sent via this interface. Provides
          the source MAC address for outgoing traffic and the destination MAC
          address for incoming traffic.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
        </syntax>
      </parameter>

      <parameter name="PriorityTagging" access="readWrite">
        <description>
          Enables or disables priority tagging on this Ethernet Link.

          When {{true}}, egress frames leaving this interface will be priority
          tagged with the frame's associated priority value, which will either
          be derived directly from the ingress frame or else set via
          {{param|##.QoS.Classification.{i}.EthernetPriorityMark}} or
          {{param|##.QoS.Classification.{i}.InnerEthernetPriorityMark}}.

          When {{false}}, egress frames leaving this interface will be
          untagged.

          The parameter does not affect reception of ingress frames.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="FlowControl" access="readWrite" version="2.14">
        <description>
          Configures Flow Control on given Ethernet port. When set to {{true}},
          it activates the exchange of pause-resume flow control frames.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="NoARP" access="readWrite" version="2.18" status="deprecated">
        <description>
          Disables or enables sending of ARP messages on the Ethernet link.
          If {{true}}, the kernel will not send ARP requests and won't send ARP replies.

          {{deprecated|2.21|in favor of {{param|##.NeighborDiscovery.InterfaceSetting.{i}.ARP.Enable}}}}
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
    </object>

    <object base="Device.Ethernet.Link.{i}.Stats.">
      <parameter name="PausePacketsSent" access="readOnly"
          activeNotify="canDeny" version="2.18">
        <description>
          The total number of Ethernet pause frames sent on the link.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>

      <parameter name="PausePacketsReceived" access="readOnly"
          activeNotify="canDeny" version="2.18">
        <description>
          The total number of Ethernet pause frames received on the link.
        </description>
        <syntax>
          <dataType ref="StatsCounter64"/>
        </syntax>
      </parameter>
    </object>

    <object base="Device.Ethernet.VLANTermination.{i}.">
      <description action="replace">
        VLAN Termination table (a stackable interface object as described in
        {{bibref|TR-181i2|Section 4.2}}). A VLAN Termination entry is typically
        stacked on top of a {{object|#.Link}} object to receive and send frames
        with the configured {{param|VLANID}}.
      </description>

      <parameter name="VLANID" access="readWrite">
        <description>
          The VLAN ID for this {{object}} entry (as defined in
          {{bibref|802.1Q-2011}}). Only ingress frames with this VLAN ID will
          be passed to higher protocol layers; frames sent from higher protocol
          layers will be tagged with this VLAN ID.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="1" maxInclusive="4094"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="VLANPriority" access="readWrite" version="2.18">
        <description>
          The VLAN Priority for this {{object}} entry, also known as 802.1p Priority,
          is a 3-bit field used to indicate the priority of network traffic within a VLAN.

          A value of ''-1'' indicates that the VLAN priority should not be changed for this {{object}}.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="7"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="TPID" access="readWrite" version="2.7">
        <description>
          The Tag Protocol Identifier (TPID) assigned to this {{object}}. The
          TPID is an EtherType value used to identify the frame as a tagged
          frame.

          Standard {{bibref|802.1Q-2011|Table 9.1}} TPID values are:

          *S-TAG 0x88A8 = 34984

          *C-TAG 0x8100 = 33024

          Non-Standard TPID values are:

          *S-TAG 0x9100 = 37120
        </description>
        <syntax>
          <unsignedInt/>
          <default type="object" value="33024"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Ethernet.RMONStats.{i}." access="readWrite"
        numEntriesParameter="RMONStatsNumberOfEntries" enableParameter="Enable"
        minEntries="0" maxEntries="unbounded" version="2.4">
      <description>
        Ethernet statistics based on the {{bibref|RFC2819}} ''RMON-MIB''
        ''etherStatsTable'', with some extensions inspired by
        {{bibref|G.988|Section 9.3.32}}.

        Each instance is associated with an interface capable of transporting
        Ethernet-encapsulated packets, and contains a set of unidirectional
        Ethernet statistics.

        The statistics are sampled either on ingress or on egress. This is
        determined as follows:

        * If the instance is associated with an egress queue (or queues) via
          the {{param|Queue}} parameter or by setting {{param|AllQueues}} to
          {{true}} then data is sampled on egress. In this case {{param|Bytes}}
          etc measure the data that has been sent on the interface, possibly
          filtered by {{param|Queue}} or {{param|VLANID}}.

        * Otherwise data is sampled on ingress. In this case {{param|Bytes}}
          etc measure the data that has been received on the interface,
          possibly filtered by {{param|VLANID}}.

        When sampling on egress, the term ''received'' means ''received by the
        queuing sub-system''.

        Multiple instances can be associated with a single interface:
        individual instances can be configured to collect data associated with
        the entire interface, or with a particular VLAN and/or queue.

        The CPE MUST reset each instances's Stats parameters whenever the
        instance is disabled and re-enabled. Whether this reset occurs when the
        instance becomes operationally disabled ({{param|Status}} =
        {{enum|Disabled|Status}}) or administratively enabled ({{param|Enable}}
        = {{true}}) is a local matter to the CPE. This is similar to the
        behavior of interface statistics, e.g. as specified for
        {{object|#.Interface.{i}.Stats}}. Furthermore, this instance's Stats
        parameters MUST be reset whenever the referenced interface's Stats
        parameters are reset, or when the referenced queue or VLAN is disabled
        and re-enabled.

        For enabled table entries, if {{param|Interface}} references an
        interface that is not capable of transporting Ethernet-encapsulated
        packets, or if {{param|Queue}} references a queue that is not
        instantiated on {{param|Interface}}, or if {{param|Queue}} is not a
        valid reference and {{param|AllQueues}} is {{false}}, the table entry
        is inoperable and the CPE MUST set {{param|Status}} to
        {{enum|Error_Misconfigured|Status}}.

        Note: The {{object}} table includes unique key parameters that are
        strong references. If a strongly referenced object is deleted, the CPE
        will set the referencing parameter to {{empty}}. However, doing so
        under these circumstances might cause the updated {{object}} row to
        then violate the table's unique key constraint; if this occurs, the CPE
        MUST set {{param|Status}} to {{enum|Error_Misconfigured|Status}} and
        disable the offending {{object}} row.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Interface"/>
        <parameter ref="VLANID"/>
        <parameter ref="Queue"/>
      </uniqueKey>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables this instance.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          The status of this instance. {{enum}}

          The {{enum|Error_Misconfigured}} value indicates that a necessary
          configuration value is undefined or invalid.

          The {{enum|Error}} value MAY be used by the CPE to indicate a locally
          defined error condition.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled"/>
            <enumeration value="Enabled"/>
            <enumeration value="Error_Misconfigured"/>
            <enumeration value="Error" optional="true"/>
          </string>
          <default type="object" value="Disabled"/>
        </syntax>
      </parameter>

      <component ref="Alias"/>

      <parameter name="Name" access="readOnly">
        <description>
          The textual name of the {{object}} entry as assigned by the CPE.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Interface" access="readWrite">
        <description>
          The interface associated with this instance. {{reference|an interface
          that is capable of transporting Ethernet-encapsulated packets}}

          The term "capable of transporting Ethernet-encapsulated packets"
          means "has an Ethernet header" and therefore refers to any interface
          that is at or below an ''Ethernet''.{{object|#.Link}} instance in the
          interface stack.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="VLANID" access="readWrite">
        <description>
          Filter criterion.

          The VLAN ID for which statistics are to be collected.

          A zero value indicates that all packets, whether or not they have a
          VLAN header, will be considered.

          A non-zero value indicates that only packets that have the the
          specified VLAN ID will be considered.
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="0" maxInclusive="4094"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="Queue" access="readWrite">
        <description>
          Filter criterion.

          The egress queue with which this instance is associated.

          Only packets that are sent to the referenced queue will be
          considered.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="##.QoS.Queue."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="AllQueues" access="readWrite">
        <description>
          Indicates whether this instance applies to all queues. If {{true}},
          the value of {{param|Queue}} is ignored since all egress queues are
          indicated.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="DropEvents" access="readOnly" activeNotify="canDeny">
        <description>
          The total number of events in which packets were dropped due to lack
          of resources. Note that this number is not necessarily the number of
          packets dropped; it is just the number of times this condition has
          been detected.

          This parameter is based on ''etherStatsDropEvents'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedInt/>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="Bytes" access="readOnly" activeNotify="canDeny">
        <description>
          The total number of {{units}} (including those in bad packets)
          received (excluding framing bits but including FCS bytes).

          This parameter is based on ''etherStatsOctets'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedLong>
            <units value="bytes"/>
          </unsignedLong>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="Packets" access="readOnly" activeNotify="canDeny">
        <description>
          The total number of {{units}} (including bad packets, broadcast
          packets, and multicast packets) received.

          This parameter is based on ''etherStatsPkts'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedLong>
            <units value="packets"/>
          </unsignedLong>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="BroadcastPackets" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of good {{units}} received that were directed to the
          broadcast address. Note that this does not include multicast packets.

          This parameter is based on ''etherStatsBroadcastPkts'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedLong>
            <units value="packets"/>
          </unsignedLong>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="MulticastPackets" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of good {{units}} received that were directed to a
          multicast address. Note that this number does not include packets
          directed to the broadcast address.

          This parameter is based on ''etherStatsMulticastPkts'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedLong>
            <units value="packets"/>
          </unsignedLong>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="CRCErroredPackets" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of {{units}} received that had a length (excluding
          framing bits, but including FCS bytes) of between 64 and 1518 bytes,
          inclusive, but had either a bad Frame Check Sequence (FCS) with an
          integral number of bytes (FCS Error) or a bad FCS with a non-integral
          number of bytes (Alignment Error).

          This parameter is based on ''etherStatsCRCAlignErrors'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedInt>
            <units value="packets"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="UndersizePackets" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of {{units}} received that were less than 64 bytes
          long (excluding framing bits, but including FCS bytes) and were
          otherwise well formed.

          This parameter is based on ''etherStatsUndersizePkts'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedInt>
            <units value="packets"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="OversizePackets" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of {{units}} received that were longer than 1518
          bytes (excluding framing bits, but including FCS bytes) and were
          otherwise well formed.

          This parameter is based on ''etherStatsOversizePkts'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedInt>
            <units value="packets"/>
          </unsignedInt>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="Packets64Bytes" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of {{units}} (including bad packets) received that
          were 64 bytes in length (excluding framing bits but including FCS
          bytes).

          This parameter is based on ''etherStatsPkts64Octets'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedLong>
            <units value="packets"/>
          </unsignedLong>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="Packets65to127Bytes" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of {{units}} (including bad packets) received that
          were between 65 and 127 bytes in length inclusive (excluding framing
          bits but including FCS bytes).

          This parameter is based on ''etherStatsPkts65to127Octets'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedLong>
            <units value="packets"/>
          </unsignedLong>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="Packets128to255Bytes" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of {{units}} (including bad packets) received that
          were between 128 and 255 bytes in length inclusive (excluding framing
          bits but including FCS bytes).

          This parameter is based on ''etherStatsPkts128to255Octets'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedLong>
            <units value="packets"/>
          </unsignedLong>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="Packets256to511Bytes" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of {{units}} (including bad packets) received that
          were between 256 and 511 bytes in length inclusive (excluding framing
          bits but including FCS bytes).

          This parameter is based on ''etherStatsPkts256to511Octets'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedLong>
            <units value="packets"/>
          </unsignedLong>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="Packets512to1023Bytes" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of {{units}} (including bad packets) received that
          were between 512 and 1023 bytes in length inclusive (excluding
          framing bits but including FCS bytes).

          This parameter is based on ''etherStatsPkts512to1023Octets'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedLong>
            <units value="packets"/>
          </unsignedLong>
          <default type="object" value="0"/>
        </syntax>
      </parameter>

      <parameter name="Packets1024to1518Bytes" access="readOnly"
          activeNotify="canDeny">
        <description>
          The total number of {{units}} (including bad packets) received that
          were between 1024 and 1518 bytes in length inclusive (excluding
          framing bits but including FCS bytes).

          This parameter is based on ''etherStatsPkts1024to1518Octets'' from
          {{bibref|RFC2819}}.
        </description>
        <syntax>
          <unsignedLong>
            <units value="packets"/>
          </unsignedLong>
          <default type="object" value="0"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Ethernet.WoL." access="readOnly" minEntries="1"
        maxEntries="1" version="2.13">
      <description>
        This object provides access to the WoL (Wake on LAN) functionality.
      </description>
    </object>

    <object base="Device.Ethernet.LAG.{i}.">
      <description action="replace">
        Ethernet Link Aggregation Group (LAG) table (a stackable interface
        object as described in {{bibref|TR-181i2|Section 4.2}}). Table entries
        model the Link Aggregation Sub-Layer as defined in
        {{bibref|802.3-2015}} and {{bibref|802.1AX-2014}}. It is expected that
        a {{object}} interface can only be stacked above {{object|#.Interface}}
        interfaces. The CPE can reject creation of additional LAG instances if
        this would exceed its capabilities.
      </description>
      <uniqueKey functional="true">
        <parameter ref="MACAddress"/>
      </uniqueKey>
      <parameter base="LowerLayers">
        <description action="append">
          {{param}} must reference to Device.Ethernet.Interface instances where
          Link Aggregation Group is configured by the CPE.

          For example, "Device.Ethernet.Interface.1,
          Device.Ethernet.Interface.2"
        </description>
      </parameter>
      <parameter name="MACAddress" access="readWrite">
        <description>
          MAC address of the Link Aggregation Interface.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
        </syntax>
      </parameter>
    </object>

    <profile name="EthernetRMONStats:1" version="2.4">
      <object ref="Device.Ethernet." requirement="present">
        <parameter ref="RMONStatsNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.Ethernet.RMONStats.{i}." requirement="present">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Interface" requirement="readOnly"/>
        <parameter ref="Bytes" requirement="readOnly"/>
        <parameter ref="Packets" requirement="readOnly"/>
        <parameter ref="CRCErroredPackets" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="VLANTermination:1" version="2.0">
      <object ref="Device.Ethernet." requirement="present">
        <parameter ref="VLANTerminationNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.Ethernet.VLANTermination.{i}."
          requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Alias" requirement="writeOnceReadOnly"/>
        <parameter ref="Name" requirement="readOnly"/>
        <parameter ref="LastChange" requirement="readOnly"/>
        <parameter ref="LowerLayers" requirement="readWrite"/>
        <parameter ref="VLANID" requirement="readWrite"/>
      </object>
      <object ref="Device.Ethernet.VLANTermination.{i}.Stats."
          requirement="present">
        <parameter ref="BytesSent" requirement="readOnly"/>
        <parameter ref="BytesReceived" requirement="readOnly"/>
        <parameter ref="PacketsSent" requirement="readOnly"/>
        <parameter ref="PacketsReceived" requirement="readOnly"/>
        <parameter ref="ErrorsSent" requirement="readOnly"/>
        <parameter ref="ErrorsReceived" requirement="readOnly"/>
        <parameter ref="UnicastPacketsSent" requirement="readOnly"/>
        <parameter ref="UnicastPacketsReceived" requirement="readOnly"/>
        <parameter ref="DiscardPacketsSent" requirement="readOnly"/>
        <parameter ref="DiscardPacketsReceived" requirement="readOnly"/>
        <parameter ref="MulticastPacketsSent" requirement="readOnly"/>
        <parameter ref="MulticastPacketsReceived" requirement="readOnly"/>
        <parameter ref="BroadcastPacketsSent" requirement="readOnly"/>
        <parameter ref="BroadcastPacketsReceived" requirement="readOnly"/>
        <parameter ref="UnknownProtoPacketsReceived" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="EthernetLink:1" version="2.0">
      <object ref="Device.Ethernet." requirement="present">
        <parameter ref="LinkNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.Ethernet.Link.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Alias" requirement="writeOnceReadOnly"/>
        <parameter ref="Name" requirement="readOnly"/>
        <parameter ref="LastChange" requirement="readOnly"/>
        <parameter ref="LowerLayers" requirement="readWrite"/>
        <parameter ref="MACAddress" requirement="readOnly"/>
      </object>
      <object ref="Device.Ethernet.Link.{i}.Stats." requirement="present">
        <parameter ref="BytesSent" requirement="readOnly"/>
        <parameter ref="BytesReceived" requirement="readOnly"/>
        <parameter ref="PacketsSent" requirement="readOnly"/>
        <parameter ref="PacketsReceived" requirement="readOnly"/>
        <parameter ref="ErrorsSent" requirement="readOnly"/>
        <parameter ref="ErrorsReceived" requirement="readOnly"/>
        <parameter ref="UnicastPacketsSent" requirement="readOnly"/>
        <parameter ref="UnicastPacketsReceived" requirement="readOnly"/>
        <parameter ref="DiscardPacketsSent" requirement="readOnly"/>
        <parameter ref="DiscardPacketsReceived" requirement="readOnly"/>
        <parameter ref="MulticastPacketsSent" requirement="readOnly"/>
        <parameter ref="MulticastPacketsReceived" requirement="readOnly"/>
        <parameter ref="BroadcastPacketsSent" requirement="readOnly"/>
        <parameter ref="BroadcastPacketsReceived" requirement="readOnly"/>
        <parameter ref="UnknownProtoPacketsReceived" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="EthernetInterface:1" version="2.0">
      <object ref="Device.Ethernet." requirement="present">
        <parameter ref="InterfaceNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.Ethernet.Interface.{i}." requirement="present">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Alias" requirement="writeOnceReadOnly"/>
        <parameter ref="Name" requirement="readOnly"/>
        <parameter ref="LastChange" requirement="readOnly"/>
        <parameter ref="Upstream" requirement="readOnly"/>
        <parameter ref="MACAddress" requirement="readOnly"/>
        <parameter ref="MaxBitRate" requirement="readWrite"/>
        <parameter ref="DuplexMode" requirement="readWrite"/>
      </object>
      <object ref="Device.Ethernet.Interface.{i}.Stats." requirement="present">
        <parameter ref="BytesSent" requirement="readOnly"/>
        <parameter ref="BytesReceived" requirement="readOnly"/>
        <parameter ref="PacketsSent" requirement="readOnly"/>
        <parameter ref="PacketsReceived" requirement="readOnly"/>
        <parameter ref="ErrorsSent" requirement="readOnly"/>
        <parameter ref="ErrorsReceived" requirement="readOnly"/>
        <parameter ref="UnicastPacketsSent" requirement="readOnly"/>
        <parameter ref="UnicastPacketsReceived" requirement="readOnly"/>
        <parameter ref="DiscardPacketsSent" requirement="readOnly"/>
        <parameter ref="DiscardPacketsReceived" requirement="readOnly"/>
        <parameter ref="MulticastPacketsSent" requirement="readOnly"/>
        <parameter ref="MulticastPacketsReceived" requirement="readOnly"/>
        <parameter ref="BroadcastPacketsSent" requirement="readOnly"/>
        <parameter ref="BroadcastPacketsReceived" requirement="readOnly"/>
        <parameter ref="UnknownProtoPacketsReceived" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="EthernetInterface:2" base="EthernetInterface:1"
        version="2.7">
      <object ref="Device.Ethernet.Interface.{i}." requirement="present">
        <parameter ref="CurrentBitRate" requirement="readOnly"/>
      </object>
    </profile>
  </component>

  <model name="Ethernet:2.21">
    <component ref="Root"/>
    <component ref="Ethernet"/>
  </model>
</dm:document>
