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

  Copyright (c) 2010-2020, 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-8"
    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-8
        https://www.broadband-forum.org/cwmp/cwmp-datamodel-1-8.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-14-0-neighbordiscovery"
    file="tr-181-2-14-0-neighbordiscovery.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">
    <dataType name="Alias" ref="_AliasCommon"/>
  </import>

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

  <component name="NeighborDiscovery">

    <object name="Device.NeighborDiscovery." access="readOnly" minEntries="1"
        maxEntries="1" version="2.2">
      <description>
        The Neighbor Discovery Protocol (NDP) object {{bibref|RFC4861}}. This
        object applies only to IPv6. It contains an {{object|InterfaceSetting}}
        table that defines the NDP configuration for individual IP interfaces.
      </description>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables Neighbor Discovery.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

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

    <object name="Device.NeighborDiscovery.InterfaceSetting.{i}."
        access="readWrite"
        numEntriesParameter="InterfaceSettingNumberOfEntries"
        enableParameter="Enable" minEntries="0" maxEntries="unbounded"
        version="2.2">
      <description>
        Per-interface Neighbor Discovery Protocol (NDP) configuration
        {{bibref|RFC4861}}.

        For enabled table entries, if {{param|Interface}} is not a valid
        reference to an IPv6-capable interface (that is attached to the IPv6
        stack), then the table entry is inoperable and the CPE MUST set
        {{param|Status}} to {{enum|Error_Misconfigured|Status}}.

        Note: The {{object}} table includes a unique key parameter that is a
        strong reference. 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>
        <parameter ref="Interface"/>
      </uniqueKey>

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

      <parameter name="Status" access="readOnly">
        <description>
          The status of this entry. {{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>

      <parameter name="Alias" access="readWrite" activeNotify="canDeny">
        <description>
          {{datatype|expand}}
        </description>
        <syntax>
          <dataType ref="Alias"/>
        </syntax>
      </parameter>

      <parameter name="Interface" access="readWrite">
        <description>
          This is the IP interface associated with this {{object}} entry.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent=".IP.Interface."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="DADTransmits" access="readWrite" version="2.13">
        <description>
          The number of consecutive Neighbor Solicitation messages sent while
          performing Duplicate Address Detection on a tentative address
          (see{{bibref|RFC4862|5.1}}).

          A value of zero indicates that Duplicate Address Detection is not
          performed on tentative addresses.

          A value of one indicates a single transmission with no follow-up
          retransmissions.

          If the value is greater than 1, {{param|RetransTimer}} defines the
          delay between consecutive messages.
        </description>
        <syntax>
          <unsignedInt/>
          <default type="object" value="1"/>
        </syntax>
      </parameter>

      <parameter name="RetransTimer" access="readWrite">
        <description>
          Retransmission interval in {{units}}, as defined in
          {{bibref|RFC4861}}. For auto-configuration purposes, {{param}}
          specifies the delay between consecutive Neighbor Solicitation
          transmissions performed during Duplicate Address Detection (DAD)
          {{bibref|RFC4862|Section 5.4}}, as well as the time a node waits
          after sending the last Neighbor Solicitation before ending the DAD
          process.
        </description>
        <syntax>
          <unsignedInt>
            <units value="milliseconds"/>
            <range minInclusive="1"/>
          </unsignedInt>
          <default type="object" value="1000"/>
        </syntax>
      </parameter>

      <parameter name="RtrSolicitationInterval" access="readWrite">
        <description>
          Retransmission interval in {{units}}, as defined in
          {{bibref|RFC4861|6.3.7}}. For auto-configuration purposes, {{param}}
          specifies the delay between consecutive Router Solicitation
          transmissions.
        </description>
        <syntax>
          <unsignedInt>
            <units value="milliseconds"/>
            <range minInclusive="4000"/>
          </unsignedInt>
          <default type="object" value="4000"/>
        </syntax>
      </parameter>

      <parameter name="MaxRtrSolicitations" access="readWrite">
        <description>
          Maximum Number of Router Solicitation Transmission messages, as
          defined in {{bibref|RFC4861}}. For auto-configuration purposes
          {{param}} specifies the Maximum Number of Router Solicitation
          Transmission messages to help the host to conclude that there are no
          routers on the link.
        </description>
        <syntax>
          <unsignedInt/>
          <default type="object" value="3"/>
        </syntax>
      </parameter>

      <parameter name="NUDEnable" access="readWrite">
        <description>
          Enables or disables Neighbor Unreachability Detection (NUD)
          {{bibref|RFC4861|Section 7}}.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="RSEnable" access="readWrite">
        <description>
          Enables or disables Router Solicitation (RS) on {{param|Interface}}
          {{bibref|RFC4861|Section 4.1}}.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
    </object>

    <profile name="NeighborDiscovery:1" version="2.2">
      <object ref="Device.NeighborDiscovery." requirement="present">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="InterfaceSettingNumberOfEntries"
            requirement="readOnly"/>
      </object>
      <object ref="Device.NeighborDiscovery.InterfaceSetting.{i}."
          requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Interface" requirement="readWrite"/>
        <parameter ref="RetransTimer" requirement="readWrite"/>
        <parameter ref="RtrSolicitationInterval" requirement="readWrite"/>
        <parameter ref="MaxRtrSolicitations" requirement="readWrite"/>
        <parameter ref="NUDEnable" requirement="readWrite"/>
        <parameter ref="RSEnable" requirement="readWrite"/>
      </object>
    </profile>
  </component>

  <model name="NeighborDiscovery:2.14">
    <component ref="Root"/>
    <component ref="NeighborDiscovery"/>
  </model>
</dm:document>
