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

  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-18-1-firewall"
    file="tr-181-2-18-1-firewall.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="IPAddress"/>
    <dataType name="IPv4Address"/>
    <dataType name="IPPrefix"/>
    <dataType name="IPv4Prefix"/>
    <dataType name="Order"/>
  </import>

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

  <import file="tr-181-2-schedules.xml"
      spec="urn:broadband-forum-org:tr-181-2-18-schedules">
    <component name="ScheduleRef"/>
  </import>

  <component name="Firewall">

    <object name="Device.Firewall." access="readOnly" minEntries="1"
        maxEntries="1" version="2.0">
      <description>
        Firewall configuration object. The {{param|Config}} parameter enables
        and disables the Firewall, and can select either a predefined
        configuration ({{enum|High|Config}} or {{enum|Low|Config}}) or an
        explicitly-defined {{enum|Advanced|Config}} configuration.

        For an {{enum|Advanced|Config}} configuration, {{param|AdvancedLevel}}
        controls the currently active Firewall Level, and the Firewall Levels
        are defined in the {{object|Level}}, {{object|Chain}} and
        {{object|Chain.{i}.Rule}} tables.

        For an {{enum|Policy|Config}} configuration, {{param|PolicyLevel}}
        controls the currently active Firewall Level, and the Firewall Levels
        are defined in the {{object|Policy}}, {{object|Level}},
        {{object|Chain}} and {{object|Chain.{i}.Rule}} tables.

        The Firewall rules modeled by {{object|Chain}}, {{object|DMZ}} and
        {{object|Pinhole}} operate only on the forwarding path. This means that
        they affect only routed traffic, and do not affect traffic that is
        destined for or generated by the device itself.

        Traffic destined for or generated by the device itself can use the
        {{object|Service}} object to model the appropriate Firewall rules.

        Note that any {{object|#.NAT}} processing on the ingress packet occurs
        before Firewall rules are applied so, for example, the Firewall rules
        will see the translated destination IP address and port in a downstream
        packet that has passed through the NAT.

        See {{bibref|TR-181i2|Appendix VIII}} for an example
        {{enum|Advanced|Config}} configuration.
      </description>

      <parameter name="Enable" access="readWrite" version="2.2">
        <description>
          Enables or disables the Firewall.

          Firewalls often implement additional Denial of Service and other
          vulnerability protections, such as those described in
          {{bibref|ICSA-Baseline}}. If a {{enum|Stateful|Type}} Firewall is
          enabled, then it is assumed that all implemented stateful protections
          are enabled, unless they are overridden by some other part of the
          data model.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Config" access="readWrite">
        <description>
          How this firewall is configured. {{enum}}

          Vendors can extend the enumerated values with vendor specific
          extensions, in which case the rules outlined in
          {{bibref|TR-106|Section 3.3}} MUST be adhered to.
        </description>
        <syntax>
          <string>
            <enumeration value="High">
              <description>
                The firewall implements the "Traffic Denied Inbound" and
                "Minimally Permit Common Services Outbound" components of the
                ICSA residential certification's Required Services Security
                Policy {{bibref|ICSA-Residential}}. If DoS and vulnerability
                protections are implemented {{bibref|ICSA-Baseline}}, these are
                enabled.
              </description>
            </enumeration>
            <enumeration value="Low">
              <description>
                All Outbound traffic and pinhole-defined Inbound traffic is
                allowed. If DoS and vulnerability protections are implemented
                {{bibref|ICSA-Baseline}}, these are enabled.
              </description>
            </enumeration>
            <enumeration value="Off" status="deleted">
              <description>
                All Inbound and Outbound traffic is allowed, and the CPE is
                only protected by NAT settings (if supported and enabled). If
                DoS and vulnerability protections are implemented
                {{bibref|ICSA-Baseline}}, these are disabled.

                {{obsoleted|2.14|because it is the same as setting
                {{param|Enable}} to {{false}}}}

                {{deleted|2.16}}
              </description>
            </enumeration>
            <enumeration value="Advanced" optional="true">
              <description>
                Advanced firewall configuration applies, as specified by
                {{param|AdvancedLevel}}.
              </description>
            </enumeration>
            <enumeration value="Policy" optional="true" version="2.16">
              <description>
                Policy firewall configuration applies, as specified by
                {{param|PolicyLevel}}.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="AdvancedLevel" access="readWrite" version="2.2">
        <description>
          Selects the currently active Firewall Level.

          {{param}} only applies when {{param|Config}} is
          {{enum|Advanced|Config}}.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="Level." targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="PolicyLevel" access="readWrite" version="2.16">
        <description>
          Selects the currently active Firewall Policy Level.

          {{param}} only applies when {{param|Config}} is
          {{enum|Policy|Config}}.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="Level." targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Type" access="readOnly" version="2.2">
        <description>
          Firewall Type. {{enum}}

          A {{enum|Stateless}} Firewall treats each packet individually and
          thus has no concept of sessions. Therefore a {{enum|Stateless}}
          Firewall cannot distinguish between unsolicited downstream traffic
          and downstream traffic in response to outbound messages. This means
          that it has to accept all incoming downstream traffic. Furthermore,
          because a {{enum|Stateless}} Firewall treats each packet
          individually, it does not provide any DoS or vulnerability
          protections.

          A {{enum|Stateful}} Firewall maintains state about previous packets
          and thus supports sessions. Therefore a {{enum|Stateful}} Firewall
          can distinguish between solicited and unsolicited downstream traffic.
          In a {{enum|Stateful}} Firewall, explicitly configured rules only
          apply to unsolicited traffic, and can not cause packets received in
          response to an upstream request to be dropped. Furthermore, because a
          {{enum|Stateful}} Firewall maintains state, it can provide DoS and
          vulnerability protections.

          A device that has a {{enum|Stateless}} Firewall depends on the NAT to
          provide protection against unsolicited downstream IPv4 traffic. This
          is because, as noted above, a {{enum|Stateless}} Firewall has to be
          configured to accept all incoming downstream traffic. For IPv6 there
          is no NAT, so a {{enum|Stateless}} Firewall can not provide simple
          security protections against unsolicited downstream IPv6 traffic.
        </description>
        <syntax>
          <string>
            <enumeration value="Stateless">
              <description>
                The Firewall only implements stateless packet inspection.
              </description>
            </enumeration>
            <enumeration value="Stateful">
              <description>
                The Firewall implements stateful packet inspection.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="Version" access="readOnly">
        <description>
          A string identifying the firewall settings version currently used in
          the CPE, or {{empty}} if the firewall settings are not associated
          with a version.
        </description>
        <syntax>
          <string>
            <size maxLength="16"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="LastChange" access="readOnly">
        <description>
          The time at which the firewall settings most recently changed.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="LevelNumberOfEntries" access="readOnly" version="2.2">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="ChainNumberOfEntries" access="readOnly" version="2.2">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="DMZNumberOfEntries" access="readOnly" version="2.16">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="ServiceNumberOfEntries" access="readOnly"
          version="2.16">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="PinholeNumberOfEntries" access="readOnly"
          version="2.16">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="PolicyNumberOfEntries" access="readOnly" version="2.16">
        <description>
          {{numentries}}
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

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

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

    <object name="Device.Firewall.Level.{i}." access="readWrite"
        numEntriesParameter="LevelNumberOfEntries" minEntries="0"
        maxEntries="unbounded" version="2.2">
      <description>
        Firewall Level table. When an {{enum|Advanced|#.Config}} or
        {{enum|Policy|#.Config}} configuration is selected,
        {{param|#.AdvancedLevel}} or {{param|#.PolicyLevel}} selects the
        currently active entry in this table. Each {{object}} table entry
        references the {{object|#.Chain}} that contains the rules for this
        level.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Name"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Name" access="readWrite">
        <description>
          Human-readable name associated with this {{object}} entry.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Description" access="readWrite">
        <description>
          Human-readable description associated with this {{object}} entry.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Order" access="readWrite">
        <description>
          {{datatype|expand}}

          This indicates the order of the {{object}} entry in the user interface
          display. Levels can be presented according to increasing or decreasing
          level of security.
        </description>
        <syntax>
          <dataType ref="Order"/>
        </syntax>
      </parameter>

      <parameter name="Policies" access="readWrite" version="2.16">
        <description>
          {{list}} {{reference|a {{object|#.Policy}}}} {{param}} only applies
          when {{param|#.Config}} is {{enum|Policy|#.Config}}.
        </description>
        <syntax>
          <list/>
          <string>
            <pathRef refType="strong" targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Chain" access="readOnly">
        <description>
          The Chain containing Firewall Level Rules associated with this
          {{object}} entry.

          On creation of a new {{object}} entry, the device will automatically
          create a new {{object|#.Chain}} table entry that this {{param}}
          parameter will reference.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="#.Chain." targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="PortMappingEnabled" access="readWrite">
        <description>
          Indicates whether NAT port mapping is enabled or disabled when this
          is the active Level. For a {{enum|Stateless|#.Type}} Firewall this
          can be set to {{false}} to force any port mappings to be
          operationally disabled (for a {{enum|Stateful|#.Type}} Firewall this
          is not necessary because the same effect can be achieved via Firewall
          rules).

          This parameter affects all the interfaces on which NAT is enabled. It
          operationally enables or disables port mapping functionality and
          therefore does not affect the individual
          {{param|##.NAT.PortMapping.{i}.Enable}} settings. Note that the
          current NAT status and NAT port mapping status are indicated by the
          {{param|##.NAT.InterfaceSetting.{i}.Status}} parameter.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="true"/>
        </syntax>
      </parameter>

      <parameter name="DefaultPolicy" access="readWrite">
        <description>
          Default action for packets not matching any of the level rules.
          {{enum}}
        </description>
        <syntax>
          <string>
            <enumeration value="Drop">
              <description>
                The firewall discards packets matching this rule.
              </description>
            </enumeration>
            <enumeration value="Accept">
              <description>
                The firewall forwards packets matching this rule.
              </description>
            </enumeration>
            <enumeration value="Reject" optional="true">
              <description>
                The firewall discards packets matching this rule, and sends an
                ICMP message to the originating host.
              </description>
            </enumeration>
          </string>
          <default type="object" value="Drop"/>
        </syntax>
      </parameter>

      <parameter name="DefaultLogPolicy" access="readWrite">
        <description>
          Enable or disable logging, in a
          {{object|##.DeviceInfo.VendorLogFile}}, of packets not matching any
          of the level rules.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.Chain.{i}." access="readWrite"
        numEntriesParameter="ChainNumberOfEntries" enableParameter="Enable"
        minEntries="0" maxEntries="unbounded" version="2.2">
      <description>
        Firewall Chain table. Each entry contains an ordered list of
        {{object|Rule}} objects which can themselves reference other {{object}}
        instances. A hierarchy of rules can therefore be created.

        A given Firewall Chain's rules are all created by the same entity, as
        indicated by the {{param|Creator}} parameter.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="false">
        <parameter ref="Name"/>
      </uniqueKey>

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

      <component ref="Alias"/>

      <parameter name="Name" access="readWrite">
        <description>
          Human-readable name associated with this {{object}} entry.
        </description>
        <syntax>
          <string>
            <size maxLength="64"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Creator" access="readOnly">
        <description>
          Creator of this {{object}} entry and of its {{object|Rule}}s.
          {{enum}}

          Note that this is the entity that originally created the {{object}}
          entry. The value of this parameter does not change if the {{object}}
          entry or one of its rules is subsequently changed by another entity.
        </description>
        <syntax>
          <string>
            <enumeration value="Defaults">
              <description>
                The {{object}} entry is present in the factory default
                configuration.
              </description>
            </enumeration>
            <enumeration value="PortMapping">
              <description>
                The {{object}} entry was created as a side-effect of a
                {{bibref|UPnP-IGD:1}} or {{bibref|TR-064}} port mapping.
              </description>
            </enumeration>
            <enumeration value="WANIPv6FirewallControl">
              <description>
                The {{object}} entry was created by {{bibref|UPnP-IGD:2}}
                WANIPv6FirewallControl.
              </description>
            </enumeration>
            <enumeration value="ACS">
              <description>
                The {{object}} entry was created by the Auto Configuration
                Server.
              </description>
            </enumeration>
            <enumeration value="UserInterface">
              <description>
                The {{object}} entry was created by device user interface or
                command line interface.
              </description>
            </enumeration>
            <enumeration value="Other">
              <description>
                The {{object}} entry was created by another entity.
              </description>
            </enumeration>
          </string>
          <default type="object" value="ACS"/>
        </syntax>
      </parameter>

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

    <object name="Device.Firewall.Chain.{i}.Rule.{i}." access="readWrite"
        numEntriesParameter="RuleNumberOfEntries" enableParameter="Enable"
        minEntries="0" maxEntries="unbounded" version="2.2">
      <description>
        Firewall Rule table. Each entry defines a Firewall packet selection
        rule. The {{param|Target}} parameter defines the action to perform for
        traffic matching this rule: the packet can be dropped, accepted,
        rejected or passed to another {{object|#}}.

        This table MUST NOT contain dynamic Firewall rules associated with
        {{enum|Stateful|##.Type}} Firewall sessions.

        All entries are created by the creator of the parent {{object|#}}, as
        indicated by its {{param|#.Creator}} parameter. {{object}} entries in a
        {{object|#}} with a {{param|#.Creator}} of {{enum|Defaults|#.Creator}},
        {{enum|ACS|#.Creator}}, {{enum|UserInterface|#.Creator}} or (maybe)
        {{enum|Other|#.Creator}} are referred to as ''Static'' {{object}}s.
        Whether or not a {{object}} in a {{object|#}} with {{param|#.Creator}}
        {{enum|Other|#.Creator}} is regarded as ''Static'' is a local matter to
        the CPE. Some of this object's parameter descriptions refer to whether
        a {{object}} is ''Static'' when specifying whether or not the parameter
        value can be modified.

        For enabled table entries, if {{param|SourceInterface}} is not a valid
        reference and {{param|SourceAllInterfaces}} is {{false}}, or if
        {{param|DestInterface}} is not a valid reference and
        {{param|DestAllInterfaces}} is {{false}}, then the table entry is
        inoperable and the CPE MUST set {{param|Status}} to
        {{enum|Error_Misconfigured|Status}}.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </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 {{object}} 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="Order" access="readWrite">
        <description>
          {{datatype|expand}}

          For each packet, the highest ordered entry that matches the rule
          criteria is applied. All lower order entries are ignored.
        </description>
        <syntax>
          <dataType ref="Order"/>
        </syntax>
      </parameter>

      <component ref="Alias"/>

      <parameter name="Description" access="readWrite">
        <description>
          Human-readable description associated with this {{object}} entry.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Target" access="readWrite">
        <description>
          Action to perform for traffic matching this {{object}} entry.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <string>
            <enumeration value="Drop">
              <description>
                The firewall discards packets matching this rule.
              </description>
            </enumeration>
            <enumeration value="Accept">
              <description>
                The firewall forwards packets matching this rule.
              </description>
            </enumeration>
            <enumeration value="Reject" optional="true">
              <description>
                The firewall discards packets matching this rule, and sends an
                ICMP message to the originating host.
              </description>
            </enumeration>
            <enumeration value="Return" optional="true">
              <description>
                The firewall doesn't consider the remaining rules (if any) in
                the current chain.
              </description>
            </enumeration>
            <enumeration value="TargetChain" optional="true">
              <description>
                The rules in the chain referenced by the {{param|TargetChain}}
                parameter are matched.
              </description>
            </enumeration>
          </string>
          <default type="object" value="Drop"/>
        </syntax>
      </parameter>

      <parameter name="TargetChain" access="readWrite">
        <description>
          Specifies the chain to process when {{param|Target}} equals
          {{enum|TargetChain|Target}}. If there are no matching rules in the
          referenced chain, processing continues with the next rule in this
          chain (if any). In other words, {{enum|TargetChain|Target}} behaves
          like a subroutine call.

          {{empty}} indicates no {{param}} is specified.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="#" targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="Log" access="readWrite">
        <description>
          Enable or disable logging, in a
          {{object|###.DeviceInfo.VendorLogFile}}, of packets matching this
          {{object}}.

          If the {{object}} is not ''Static'' (as explained in the object
          description), whether changes to this parameter persist across
          re-boot is a local matter to the CPE.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="CreationDate" access="readOnly">
        <description>
          Date and time when this {{object}} entry was created.
        </description>
        <syntax>
          <dateTime/>
        </syntax>
      </parameter>

      <parameter name="ExpiryDate" access="readWrite">
        <description>
          The time at which this {{object}} entry will expire, or {{null}} if
          not known. For an infinite lifetime, the parameter value MUST be
          9999-12-31T23:59:59Z.

          The only value that MUST be supported is 9999-12-31T23:59:59Z (i.e.
          support for rules that expire is OPTIONAL).

          When a rule expires, the CPE MUST automatically terminate that rule
          and MUST automatically delete the corresponding {{object}} table
          entry.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <dateTime/>
          <default type="object" value="9999-12-31T23:59:59Z"/>
        </syntax>
      </parameter>

      <parameter name="SourceInterface" access="readWrite">
        <description>
          {{object}} criterion. {{reference}}

          This specifies the ingress interface associated with the entry. It
          MAY be a layer 1, 2 or 3 interface, however, the types of interfaces
          for which Rules can be instantiated is a local matter to the CPE.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="SourceInterfaceExclude" access="readWrite">
        <description>
          If {{false}}, the rule matches only those packets that match the
          {{param|SourceInterface}} entry, if specified.

          If {{true}}, the rule matches all packets except those that match the
          {{param|SourceInterface}} entry, if specified.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="SourceAllInterfaces" access="readWrite">
        <description>
          {{object}} criterion. This specifies that all ingress interfaces are
          associated with the entry. If {{true}}, the values of
          {{param|SourceInterface}} and {{param|SourceInterfaceExclude}} are
          ignored since all ingress interfaces are indicated.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="DestInterface" access="readWrite">
        <description>
          {{object}} criterion. {{reference}}

          This specifies the egress interface associated with the entry. It MAY
          be a layer 1, 2 or 3 interface, however, the types of interfaces for
          which Rules can be instantiated is a local matter to the CPE.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="DestInterfaceExclude" access="readWrite">
        <description>
          If {{false}}, the rule matches only those packets that match the
          {{param|DestInterface}} entry, if specified.

          If {{true}}, the rule matches all packets except those that match the
          {{param|DestInterface}} entry, if specified.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="DestAllInterfaces" access="readWrite">
        <description>
          {{object}} criterion. This specifies that all egress interfaces are
          associated with the entry. If {{true}}, the values of
          {{param|DestInterface}} and {{param|DestInterfaceExclude}} are
          ignored since all ingress interfaces are indicated.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="IPVersion" access="readWrite">
        <description>
          {{object}} criterion.

          IP Protocol Version as specified in {{bibref|IANA-ipversionnumbers}}.
          For example:

          * ''4'' (IPv4)

          * ''6'' (IPv6)

          A value of ''-1'' indicates this criterion is not used for matching.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="15"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="DestIP" access="readWrite">
        <description>
          {{object}} criterion.

          Destination IP address. {{empty}} indicates this criterion is not
          used for matching.

          Note that Firewall rules are applied after any {{object|###.NAT}}
          processing, so if NAT is enabled on the source interface this is
          always the translated address.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <dataType ref="IPAddress"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="DestMask" access="readWrite">
        <description>
          Destination IP address mask, represented as an IP routing prefix
          using CIDR notation [RFC4632]. The IP address part MUST be {{empty}}
          (and, if specified, MUST be ignored).
        </description>
        <syntax>
          <dataType ref="IPPrefix"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="DestIPExclude" access="readWrite">
        <description>
          If {{false}}, the rule matches only those packets that match the
          (masked) {{param|DestIP}} entry, if specified.

          If {{true}}, the rule matches all packets except those that match the
          (masked) {{param|DestIP}} entry, if specified.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="DestMatchSet" access="readWrite" version="2.18">
        <description>
          {{object}} criterion.

          Destination Match Set, Matches packets if their destination is found in the designated {{object|##.Set.}} reference.
          {{empty}} indicates this criterion is not
          used for matching.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="##.Set." targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="DestMatchSetExclude" access="readWrite" version="2.18">
        <description>
          {{object}} criterion.

          Destination Exclude Match Set, Matches packets if their destination is not found in the designated {{object|##.Set.}} reference.
          {{empty}} indicates this criterion is not
          used for matching.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="##.Set." targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="SourceIP" access="readWrite">
        <description>
          {{object}} criterion.

          Source IP address. {{empty}} indicates this criterion is not used for
          matching.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <dataType ref="IPAddress"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="SourceMask" access="readWrite">
        <description>
          Source IP address mask, represented as an IP routing prefix using
          CIDR notation [RFC4632]. The IP address part MUST be {{empty}} (and,
          if specified, MUST be ignored).
        </description>
        <syntax>
          <dataType ref="IPPrefix"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="SourceIPExclude" access="readWrite">
        <description>
          If {{false}}, the rule matches only those packets that match the
          (masked) {{param|SourceIP}} entry, if specified.

          If {{true}}, the rule matches all packets except those that match the
          (masked) {{param|SourceIP}} entry, if specified.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="SourceMatchSet" access="readWrite" version="2.18">
        <description>
          {{object}} criterion.

          Source Match Set, Matches packets if their source is found in the designated {{object|##.Set.}} reference.
          {{empty}} indicates this criterion is not
          used for matching.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="##.Set." targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="SourceMatchSetExclude" access="readWrite"  version="2.18">
        <description>
          {{object}} criterion.

          Source Exclude Match Set, Matches packets if their source is not found in the designated {{object|##.Set.}} reference.
          {{empty}} indicates this criterion is not
          used for matching.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="##.Set." targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="Protocol" access="readWrite">
        <description>
          {{object}} criterion.

          Protocol number. A value of -1 indicates this criterion is not used
          for matching.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="255"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="ProtocolExclude" access="readWrite">
        <description>
          If {{false}}, the rule matches only those packets that match the
          {{param|Protocol}} entry, if specified.

          If {{true}}, the rule matches all packets except those that match the
          {{param|Protocol}} entry, if specified.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="DestPort" access="readWrite">
        <description>
          {{object}} criterion.

          Destination port number. A value of -1 indicates this criterion is
          not used for matching.

          Note that Firewall rules are applied after any {{object|###.NAT}}
          processing, so if NAT is enabled on the source interface this is
          always the translated port number.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="DestPortRangeMax" access="readWrite">
        <description>
          {{object}} criterion.

          If specified, indicates the {{object}} criterion is to include the
          port range from {{param|DestPort}} through {{param}} (inclusive). If
          specified, {{param}} MUST be greater than or equal to
          {{param|DestPort}}.

          A value of -1 indicates that no port range is specified.

          Note that Firewall rules are applied after any {{object|###.NAT}}
          processing, so if NAT is enabled on the source interface this is
          always the translated port number.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="DestPortExclude" access="readWrite">
        <description>
          If {{false}}, the rule matches only those packets that match the
          {{param|DestPort}} entry (or port range), if specified.

          If {{true}}, the rule matches all packets except those that match the
          {{param|DestPort}} entry (or port range), if specified.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="SourcePort" access="readWrite">
        <description>
          {{object}} criterion.

          Source port number. A value of -1 indicates this criterion is not
          used for matching.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="SourcePortRangeMax" access="readWrite">
        <description>
          {{object}} criterion.

          If specified, indicates the {{object}} criterion is to include the
          port range from {{param|SourcePort}} through {{param}} (inclusive).
          If specified, {{param}} MUST be greater than or equal to
          {{param|SourcePort}}.

          A value of -1 indicates that no port range is specified.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="SourcePortExclude" access="readWrite">
        <description>
          If {{false}}, the rule matches only those packets that match the
          {{param|SourcePort}} entry (or port range), if specified.

          If {{true}}, the rule matches all packets except those that match the
          {{param|SourcePort}} entry (or port range), if specified.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="DSCP" access="readWrite">
        <description>
          {{object}} criterion.

          DiffServ codepoint (defined in {{bibref|RFC2474}}).

          If set to a Class Selector Codepoint (defined in {{bibref|RFC2474}}),
          all DSCP values that match the first 3 bits will be considered a
          valid match.

          A value of -1 indicates this criterion is not used for matching.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="63"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="DSCPExclude" access="readWrite">
        <description>
          If {{false}}, the rule matches only those packets that match the
          {{param|DSCP}} entry, if specified.

          If {{true}}, the rule matchess all packets except those that match
          the {{param|DSCP}} entry, if specified.

          This parameter can only be modified if the {{object}} is ''Static''
          (as explained in the object description).
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="ConnectionState" access="readWrite" version="2.16">
        <description>
          Matches only packets according to the following connection states.
          {{empty}} indicates this criterion is not used for matching.
        </description>
        <syntax>
          <list/>
          <string>
            <enumeration value="INVALID">
              <description>
                The received packet is not associated with an known connection
                and it may contain faulty data or headers.
              </description>
            </enumeration>
            <enumeration value="NEW">
              <description>
                The first received packet of a new not yet established
                connection.
              </description>
            </enumeration>
            <enumeration value="RELATED">
              <description>
                The received packet that is starting a new connection and is
                related to an already known and established connection.
              </description>
            </enumeration>
            <enumeration value="ESTABLISHED">
              <description>
                The received packet is part of an already established and known
                connection that has handled packets in both directions and is
                being considered fully valid.
              </description>
            </enumeration>
          </string>
        </syntax>
      </parameter>

      <parameter name="SourceMAC" access="readWrite" version="2.16">
        <description>
          Source MAC address. {{empty}} indicates this criterion is not used
          for matching.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="SourceMACExclude" access="readWrite" version="2.16">
        <description>
          If {{false}}, the rule matches only those packets that match the
          {{param|SourceMAC}} entry, if specified.

          If {{true}}, the rule matches all packets except those that match the
          {{param|SourceMAC}} entry, if specified.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.Pinhole.{i}." access="readWrite"
        numEntriesParameter="PinholeNumberOfEntries" enableParameter="Enable"
        minEntries="0" maxEntries="unbounded" version="2.16">
      <description>
        Firewall Pinhole object that is used for configuring pinholes. Pinholes
        are similar to port mapping entries but without the NAT support. The
        Pinhole table is used for allowing certain incoming traffic, on the
        {{param|Interface}}, to be routed to the internal network.

        For enabled table entries, if {{param|DestMACAddress}} and
        {{param|DestIP}} are {{empty}}, or if {{param|Interface}} is not a
        valid reference, then the table entry is inoperable and the device MUST
        set {{param|Status}} to {{enum|Error_Misconfigured|Status}}.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias"/>

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

      <parameter name="Status" access="readOnly">
        <description>
          The status of this {{object}} entry.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled">
              <description>
                Indicates that the pinhole is disabled.
              </description>
            </enumeration>
            <enumeration value="Enabled">
              <description>Indicates that the pinhole is enabled.</description>
            </enumeration>
            <enumeration value="Inactive" version="2.18">
              <description>
                Indicates that the pinhole is still enabled but has been temporarily deactivated due to the Schedules defined in {{param|ScheduleRef}}.
              </description>
            </enumeration>
            <enumeration value="Error_Misconfigured">
              <description>
                Indicates that a necessary configuration value is undefined or
                invalid.
              </description>
            </enumeration>
            <enumeration value="Error" optional="true">
              <description>
                MAY be used to define an error condition.
              </description>
            </enumeration>
          </string>
          <default type="object" value="Disabled"/>
        </syntax>
      </parameter>

      <parameter name="Origin" access="writeOnceReadOnly">
        <description>
          Indicates the Origin of the {{object}} instance.

          Note: This parameter was changed to writeOnceReadOnly in the Device:2.18 version.
        </description>
        <syntax>
          <string>
            <enumeration value="User">
              <description>
                Used for indicating that the pinhole rule was created by the
                end-user. For example through the web user interface.
              </description>
            </enumeration>
            <enumeration value="System">
              <description>
                Used for indicating that the pinhole rule was created by the
                system itself.
              </description>
            </enumeration>
            <enumeration value="UPnP" version="2.17">
              <description>
                Used for indicating that the pinhole rule was created by a device using UPnP-IGD.
              </description>
            </enumeration>
            <enumeration value="Controller">
              <description>
                Used for indicating that the pinhole rule was created by a
                Controller.
              </description>
            </enumeration>
          </string>
          <default type="object" value="Controller"/>
        </syntax>
      </parameter>

      <parameter name="Description" access="readWrite">
        <description>
          Human-readable description associated with this {{object}} entry.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Interface" access="readWrite">
        <description>
          Specifies the incoming L3 interface to which this pinhole applies.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="##.IP.Interface."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="LeaseDuration" access="readWrite" version="2.17">
        <description>
          Determines the time to live, in {{units}}, of a pin hole lease,
          where "time to live" means the number of {{units}} before the pin hole expires.

          A value of 0 means the pin hole is static. Support for dynamic
          (non-static) pin hole is OPTIONAL. That is, the only value for
          {{param}} that MUST be supported is 0.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="RemainingLeaseTime" access="readOnly"
          activeNotify="canDeny" version="2.17">
        <description>
          For a dynamic (non-static) pin hole, when this parameter is read,
          the value represents the time (in {{units}}) remaining on the pin hole lease.
          That is, for a dynamic pin hole, the value counts down toward 0.
          When a dynamic pin hole lease expires, the device MUST automatically
          terminate that pin hole, and MUST automatically delete the
          corresponding {{object}} table entry.

          For a static pin hole, this parameter is irrelevant and should return ''0''.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="SourcePort" access="readWrite">
        <description>
          Source port number of the incoming connection. A value of ''-1''
          indicates this criterion is not used for matching.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="SourcePortRangeMax" access="readWrite" version="2.18">
        <description>
          If specified, indicates the {{object}} criterion is to include the
          port range from {{param|SourcePort}} through {{param}} (inclusive). If
          specified, {{param}} MUST be greater than or equal to
          {{param|SourcePort}}.

          A value of -1 indicates that no port range is specified.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="DestPort" access="readWrite">
        <description>
          Destination port number. A value of ''-1'' indicates this criterion
          is not used for matching.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="DestPortRangeMax" access="readWrite" version="2.18">
        <description>
          If specified, indicates the {{object}} criterion is to include the
          port range from {{param|DestPort}} through {{param}} (inclusive). If
          specified, {{param}} MUST be greater than or equal to
          {{param|DestPort}}.

          A value of -1 indicates that no port range is specified.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="IPVersion" access="readWrite">
        <description>
          IP Protocol Version as specified in {{bibref|IANA-ipversionnumbers}}.
          For example:

          * ''4'' (IPv4)

          * ''6'' (IPv6)

          A value of ''-1'' indicates this criterion is not used for matching.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="15"/>
          </int>
          <default type="object" value="6"/>
        </syntax>
      </parameter>

      <parameter name="Protocol" access="readWrite">
        <description>
          Protocol number as specified in {{bibref|IANA-protocolnumbers}} For
          example:

          * ''6'' (TCP)

          * ''17'' (UDP)
          
          A value of ''-1'' indicates this criterion is not used
            for matching.
        </description>
        <syntax>
          <list/>
          <int>
            <range minInclusive="-1" maxInclusive="255"/>
          </int>
          <default type="object" value="[-1]"/>
        </syntax>
      </parameter>

      <parameter name="SourcePrefixes" access="readWrite">
        <description>
          Only allow incoming connections that match one or more of the source
          IP addresses or prefixes that are specified in {{param}} for the
          applied pinhole.
        </description>
        <syntax>
          <list/>
          <dataType ref="IPPrefix"/>
        </syntax>
      </parameter>

      <parameter name="DestIP" access="readWrite">
        <description>
          The IP address of a client on the internal network. Either {{param}}
          or {{param|DestMACAddress}} MUST be configured, it is not allowed to
          configure them both. {{empty}} indicates this criterion is not used
          for matching.
        </description>
        <syntax>
          <dataType ref="IPAddress"/>
        </syntax>
      </parameter>
      <parameter name="DestMACAddress" access="readWrite">
        <description>
          The MAC address of a client on the internal network. Either {{param}}
          or {{param|DestIP}} MUST be configured, it is not allowed to
          configure them both. {{empty}} indicates this criterion is not used
          for matching.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
        </syntax>
      </parameter>

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

    <object name="Device.Firewall.DMZ.{i}." access="readWrite"
        numEntriesParameter="DMZNumberOfEntries" enableParameter="Enable"
        minEntries="0" maxEntries="unbounded" version="2.16">
      <description>
        Firewall DMZ object that is be used for configuring a demilitarized
        zone. A DMZ network is a separate network perimeter that protects the
        internal network from untrusted traffic. Typically the DMZ is located
        between two firewalls, the firewall of the internal network and the
        firewall responsible for handling untrusted traffic.

        The device MUST forward all received packets that matches the
        {{param|SourcePrefix}} criteria to the IP address that is specified in
        {{param|DestIP}}.

        For enabled table entries, if {{param|DestIP}} is {{empty}}, or if
        {{param|Interface}} is not a valid reference, then the table entry is
        inoperable and the device MUST set {{param|Status}} to
        {{enum|Error_Misconfigured|Status}}.
      </description>

      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <uniqueKey functional="true">
        <parameter ref="DestIP"/>
        <parameter ref="SourcePrefix"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the firewall DMZ instance.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          The status of this {{object}} entry.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled">
              <description>
                Indicates that the DMZ entry is disabled.
              </description>
            </enumeration>
            <enumeration value="Enabled">
              <description>
                Indicates that the DMZ entry is enabled.
              </description>
            </enumeration>
            <enumeration value="Error_Misconfigured">
              <description>
                Indicates that a necessary configuration value is undefined or
                invalid.
              </description>
            </enumeration>
            <enumeration value="Error" optional="true">
              <description>
                MAY be used to define an error condition.
              </description>
            </enumeration>
          </string>
          <default type="object" value="Disabled"/>
        </syntax>
      </parameter>

      <parameter name="Origin" access="writeOnceReadOnly">
        <description>
          Indicates who configured the {{object}} instance.

          Note: This parameter was changed to writeOnceReadOnly in the Device:2.18 version.
        </description>
        <syntax>
          <string>
            <enumeration value="User">
              <description>
                Used for indicating that the DMZ rule was created by the
                end-user. For example through the web user interface.
              </description>
            </enumeration>
            <enumeration value="System">
              <description>
                Used for indicating that the DMZ rule was created by the system
                itself.
              </description>
            </enumeration>
            <enumeration value="Controller">
              <description>
                Used for indicating that the DMZ rule was created by a
                Controller,
              </description>
            </enumeration>
          </string>
          <default type="object" value="Controller"/>
        </syntax>
      </parameter>

      <parameter name="Description" access="readWrite">
        <description>
          Human-readable description associated with the entry.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Interface" access="readWrite">
        <description>
          This specifies the incoming L3 interface to which the DMZ applies.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="##.IP.Interface."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="LeaseDuration" access="readWrite" version="2.17">
        <description>
          Determines the time to live, in {{units}}, of a DMZ rule,
          where "time to live" means the number of {{units}} before the DMZ rule expires.

          A value of 0 means the DMZ rule is static. Support for dynamic
          (non-static) DMZ rules is OPTIONAL. That is, the only value for
          {{param}} that MUST be supported is 0.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="RemainingLeaseTime" access="readOnly"
          activeNotify="canDeny" version="2.17">
        <description>
          For a dynamic (non-static) DMZ rule, when this parameter is read,
          the value represents the time (in {{units}}) remaining on the DMZ rule lease.
          That is, for a dynamic DMZ rule, the value counts down toward 0.
          When a dynamic DMZ rule lease expires, the device MUST automatically
          terminate that DMZ rule, and MUST automatically delete the
          corresponding {{object}} table entry.

          For a static DMZ rule, this parameter is irrelevant and should return ''0''.
        </description>
        <syntax>
          <unsignedInt>
            <units value="seconds"/>
          </unsignedInt>
        </syntax>
      </parameter>

      <parameter name="DestIP" mandatory="true" access="readWrite">
        <description>
          The IPv4 address of a client in the DMZ network.
        </description>
        <syntax>
          <dataType ref="IPv4Address"/>
        </syntax>
      </parameter>

      <parameter name="SourcePrefix" access="readWrite">
        <description>
          Only allow incoming connections that match to the source IPv4 address
          or prefix that is specified in {{param}} for the applied DMZ
          instance. {{empty}} indicates this criterion is not used for
          matching.
        </description>
        <syntax>
          <dataType ref="IPv4Prefix"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.Service.{i}." access="readWrite"
        numEntriesParameter="ServiceNumberOfEntries" enableParameter="Enable"
        minEntries="0" maxEntries="unbounded" version="2.16">
      <description>
        Firewall Service object that is used for configuring the firewall for
        opening a port/protocol for a local network service. For example:

        * ''SSH Server''

        * ''Web Server''

        For enabled table entries, if {{param|Interface}}, {{param|DestPort}}
        and {{param|Protocol}} are {{empty}}, or if {{param|Interface}} is not
        a valid reference, then the table entry is inoperable and the device
        MUST set {{param|Status}} to {{enum|Error_Misconfigured|Status}}.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>
      <uniqueKey functional="true">
        <parameter ref="Interface"/>
        <parameter ref="DestPort"/>
        <parameter ref="Protocol"/>
        <parameter ref="SourcePrefixes"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the firewall service instance.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          The status of this {{object}} entry.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled">
              <description>
                Indicates that the Service entry is disabled.
              </description>
            </enumeration>
            <enumeration value="Enabled">
              <description>
                Indicates that the Service entry is enabled.
              </description>
            </enumeration>
            <enumeration value="Error_Misconfigured">
              <description>
                Indicates that a necessary configuration value is undefined or
                invalid.
              </description>
            </enumeration>
            <enumeration value="Error" optional="true">
              <description>
                MAY be used to define an error condition.
              </description>
            </enumeration>
          </string>
          <default type="object" value="Disabled"/>
        </syntax>
      </parameter>

      <parameter name="Interface" access="readWrite">
        <description>
          This specifies the incoming L3 interface to which the Service rule
          applies.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="##.IP.Interface."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="DestPort" access="readWrite">
        <description>
          Destination port number. A value of ''-1'' indicates this criterion
          is not used for matching.
        </description>
        <syntax>
          <list/>
          <int>
            <range minInclusive="-1" maxInclusive="65535"/>
          </int>
          <default type="object" value="[-1]"/>
        </syntax>
      </parameter>

      <parameter name="IPVersion" access="readWrite">
        <description>
          IP Protocol Version as specified in {{bibref|IANA-ipversionnumbers}}.
          For example:

          * ''4'' (IPv4)

          * ''6'' (IPv6)

          A value of ''-1'' indicates this criterion is not used for matching.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="15"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="Protocol" access="readWrite">
        <description>
          Protocol number as specified in {{bibref|IANA-protocolnumbers}} For
          example:

          * ''6'' (TCP)

          * ''17'' (UDP) 

          A value of ''-1'' indicates this criterion is not used for matching.
        </description>
        <syntax>
          <list/>
          <int>
            <range minInclusive="-1" maxInclusive="255"/>
          </int>
          <default type="object" value="[-1]"/>
        </syntax>
      </parameter>

      <parameter name="ICMPType" access="readWrite">
        <description>
          ICMP type as specified in {{bibref|RFC792}} for 'IPv4' and
          {{bibref|RFC4443}} for 'IPv6'. Only applicable when
          {{param|Protocol}} contains ''1'' (ICMP IPv4) or ''58'' (ICMP IPv6).
          A value of ''-1'' indicates this criterion is not used for matching.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="255"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="SourcePrefixes" access="readWrite">
        <description>
          Only allow incoming connections that match one or more of the source
          IP addresses or prefixes that are specified in {{param}} for the
          applied service.
        </description>
        <syntax>
          <list/>
          <dataType ref="IPPrefix"/>
          <default type="object" value="[]"/>
        </syntax>
      </parameter>

      <parameter name="Action" access="readWrite">
        <description>
          Action to perform for traffic matching this {{object}} entry.
        </description>
        <syntax>
          <string>
            <enumeration value="Drop">
              <description>
                The firewall discards packets matching this rule.
              </description>
            </enumeration>
            <enumeration value="Accept">
              <description>
                The firewall forwards packets matching this rule.
              </description>
            </enumeration>
            <enumeration value="Reject" optional="true">
              <description>
                The firewall discards packets matching this rule, and sends an
                ICMP message to the originating host.
              </description>
            </enumeration>
          </string>
          <default type="object" value="Accept"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.Policy.{i}." access="readWrite"
        numEntriesParameter="PolicyNumberOfEntries" minEntries="0"
        maxEntries="unbounded" dmr:previousObject="Device.Firewall.Level.{i}."
        version="2.16">
      <description>
        Firewall Policy table. When a {{enum|Policy|#.Config}} configuration is
        selected, {{param|#.PolicyLevel}} selects the currently active entry in
        this table. Each {{object}} table entry references the
        {{object|#.Chain}} that contains the rules for this policy.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the firewall policy.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Status" access="readOnly">
        <description>
          The status of this {{object}} 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="Chain" access="readWrite">
        <description>
          The Chain containing Firewall Rules associated with this {{object}}
          entry. This is applicable for traffic from the
          {{param|SourceInterface}} to the {{param|DestinationInterface}}.
          {{param}} only applies when {{param|TargetChain}} is
          {{enum|Chain|TargetChain}}.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="#.Chain." targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="TargetChain" access="readWrite">
        <description>
          Action to perform for traffic matching this {{object}} entry.
          {{enum}}
        </description>
        <syntax>
          <string>
            <enumeration value="Drop">
              <description>
                The firewall discards packets matching this rule.
              </description>
            </enumeration>
            <enumeration value="Accept">
              <description>
                The firewall forwards packets matching this rule.
              </description>
            </enumeration>
            <enumeration value="Reject" optional="true">
              <description>
                The firewall discards packets matching this rule, and sends an
                ICMP message to the originating host.
              </description>
            </enumeration>
            <enumeration value="Chain" optional="true">
              <description>
                The rules in the chain referenced by the {{param|Chain}}
                parameter are matched.
              </description>
            </enumeration>
          </string>
          <default type="object" value="Drop"/>
        </syntax>
      </parameter>

      <parameter name="SourceInterface" access="readWrite">
        <description>
          This specifies the L3 source interface associated with the entry.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="##.IP.Interface."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="DestinationInterface" access="readWrite">
        <description>
          This specifies the L3 destination interface associated with the
          entry.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="##.IP.Interface."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="IPVersion" access="readWrite">
        <description>
          IP Protocol Version as specified in {{bibref|IANA-ipversionnumbers}}.
          For example:

          * ''4'' (IPv4)

          * ''6'' (IPv6)

          A value of ''-1'' indicates this criterion is not used for matching.
        </description>
        <syntax>
          <int>
            <range minInclusive="-1" maxInclusive="15"/>
          </int>
          <default type="object" value="-1"/>
        </syntax>
      </parameter>

      <parameter name="ReverseChain" access="readWrite">
        <description>
          The Chain containing Firewall Rules associated with this {{object}}
          entry. This is applicable for traffic from the
          {{param|DestinationInterface}} to the {{param|SourceInterface}}.
          {{param}} only applies when {{param|ReverseTargetChain}} is
          {{enum|Chain|ReverseTargetChain}}.
        </description>
        <syntax>
          <string>
            <pathRef refType="strong" targetParent="#.Chain." targetType="row"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="ReverseTargetChain" access="readWrite">
        <description>
          Action to perform for traffic matching this {{object}} entry.
        </description>
        <syntax>
          <string>
            <enumeration value="Drop">
              <description>
                The firewall discards packets matching this rule.
              </description>
            </enumeration>
            <enumeration value="Accept">
              <description>
                The firewall forwards packets matching this rule.
              </description>
            </enumeration>
            <enumeration value="Reject" optional="true">
              <description>
                The firewall discards packets matching this rule, and sends an
                ICMP message to the originating host.
              </description>
            </enumeration>
            <enumeration value="Chain" optional="true">
              <description>
                The rules in the chain referenced by the {{param|ReverseChain}}
                parameter are matched.
              </description>
            </enumeration>
          </string>
          <default type="object" value="Drop"/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.InterfaceSetting.{i}." access="readWrite"
        numEntriesParameter="InterfaceSettingNumberOfEntries"
        enableParameter="Enable" minEntries="0" maxEntries="unbounded"
        version="2.17">
      <description>
        Firewall settings for an associated IP Interface.

        For enabled table entries, if {{param|Interface}} is not a valid
        reference then the table entry is inoperable and the device MUST set
        {{param|Status}} to {{enum|Error_Misconfigured|Status}}.

        Note: The {{object}} includes a unique key that is a
        strong reference. If a strongly referenced object is deleted, the device
        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 device
        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"/>
      </uniqueKey>

      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the {{object}} entry, indicating if NAT is
          enabled for the referenced IP Interface instance. On creation, an
          {{object}} entry is disabled by default.
        </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 device to indicate a locally
          defined error condition.
        </description>
        <syntax>
          <string>
            <enumeration value="Disabled"/>
            <enumeration value="Enabled"/>
            <enumeration value="Error_Misconfigured"/>
            <enumeration value="Error"/>
          </string>
          <default type="object" value="Disabled"/>
        </syntax>
      </parameter>

      <component ref="Alias"/>

      <parameter name="Interface" access="readWrite">
        <description>
          {{reference}} The associated IP interface on which NAT is to be
          enabled.
        </description>
        <syntax>
          <string>
            <size maxLength="256"/>
            <pathRef refType="strong" targetParent="##.IP.Interface."
                targetType="row"/>
          </string>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="IPv4SpoofingProtection" access="readWrite">
        <description>
          Enables or disables the IPv4 spoofing protection.

          Spoofing protection prevents LAN devices from sending packets with a wrong source IP address.

          A number of DDoS attacks are known to modify the source IP address of packets to initiate a DDoS attack.
          Spoofing protection checks if the source IP address of packets initiated in the LAN belongs
          to the LAN interface Address range, otherwise the packet will be dropped early in the network stack.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="IPv6SpoofingProtection" access="readWrite">
        <description>
          Enables or disables the IPv6 spoofing protection.

          Spoofing protection prevents LAN devices from sending packets with a wrong source IP address.

          A number of DDoS attacks are known to modify the source IP address of packets to initiate a DDoS attack.
          Spoofing protection checks if the source IP address of packets initiated in the LAN belongs
          to the LAN interface Address range, otherwise the packet will be dropped early in the network stack.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="IPv4AcceptICMPEchoRequest" access="readWrite">
        <description>
          When {{true}} the 'ICMPv4 echo request' packet must be answered with an 'ICMPv4 echo reply'.
          When {{false}} the 'ICMPv4 echo request' packet must be dropped.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="IPv6AcceptICMPEchoRequest" access="readWrite">
        <description>
          When {{true}} the 'ICMPv6 echo request' packet must be answered with an 'ICMPv6 echo reply'.
          When {{false}} the 'ICMPv6 echo request' packet must be dropped.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="IPv6PassThroughICMPEchoRequest" access="readWrite" version="2.18">
        <description>
          When {{true}} the 'ICMPv6 echo request' packet must be forward to the LAN device.
          When {{false}} the 'ICMPv6 echo request' packet must be dropped.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="StealthMode" access="readWrite">
        <description>
          Enables or disables the stealth mode.
          Stealth mode defines how the firewall must treat "unwanted" packets.

          Typically the feature is enabled for WAN facing interface(s).
          Stealth mode is applicable for both IPv4 and IPv6, and UDP and TCP based protocols.

          If set to {{true}} all 'UDP/TCP' packets are dropped silently.
          This prevents a possible attacker from knowing which ports are opened/closed on a gateway.

          When {{param}} is set to {{false}}, the firewall will reply with an ICMP port unreachable.

          If there are other firewall rules in effect, they will have priority over this parameter.
          i.e: If an 'UDP' port is set to 'ACCEPT', and the {{param}} is activated, then the port will be accepted and
          all the other 'UDP' ports will be blocked.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.ConnectionTracking." access="readOnly" version="2.17">
      <description>
        This Object contains the IP connection tracking related parameters.
        Application Layer Gateway (ALG) are used to provide Network Address Translation (NAT)
        support for various application-layer protocols.
      </description>
    </object>

    <object name="Device.Firewall.ConnectionTracking.SIP." access="readOnly" version="2.17">
      <description>
        SIP is an application-layer control protocol used to establish, modify, and terminate multimedia sessions.
      </description>
      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the connection tracking support for the SIP protocol (SIP ALG).
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Ports" access="readWrite">
        <description>
          Port numbers of the SIP servers that need to be monitored.
        </description>
        <syntax>
          <list/>
          <int>
            <range minInclusive="0" maxInclusive="65535"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="DirectMedia" access="readWrite">
        <description>
          Allow media streams between signaling endpoints.
        </description>
        <syntax>
          <boolean/>
          <default type="implementation" value="true"/>
        </syntax>
      </parameter>

      <parameter name="DirectSignaling" access="readWrite">
        <description>
          Allow incoming calls from registrar.
        </description>
        <syntax>
          <boolean/>
          <default type="implementation" value="true"/>
        </syntax>
      </parameter>

      <parameter name="ExternalMedia" access="readWrite">
        <description>
          Allow media streams that are not passing through this router.

          When this feature is activated, the logic will maintain the SDP payload as is
          when it identifies that the interface towards the invited party
          is the same as the one towards the media endpoint.
        </description>
        <syntax>
          <boolean/>
          <default type="implementation" value="false"/>
        </syntax>
      </parameter>

      <parameter name="TimeOut" access="readWrite">
        <description>
          SIP time out session.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

    </object>

    <object name="Device.Firewall.ConnectionTracking.H323." access="readOnly" version="2.17">
      <description>
        H.323 is a VoIP signalling protocol from ITU-T
      </description>
      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the connection tracking support for the H323 protocol (H323 ALG).
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="RegistrationRequestTTL" access="readWrite">
        <description>
          When no TTL is specified in the registration request message the TTL specified here will be used.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="GKRoutedOnly" access="readWrite">
        <description>
          Only accept calls from the gatekeeper.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="CallForwardFilter" access="readWrite">
        <description>
          Create call forwarding expectations only when both endpoints are on different sides, as determined by routing information.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.ConnectionTracking.FTP." access="readOnly" version="2.17">
      <description>
          Tracking FTP connections is difficult due to the requirement for specialized helpers to handle them,
          along with the complexities of masquerading and Network Address Translation.
          This involves supporting FTP on Layer 3 with independent connection tracking.
      </description>
      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the connection tracking support for the FTP protocol (FTP ALG).
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Ports" access="readWrite">
        <description>
          Port numbers of the FTP servers that need to be monitored.
        </description>
        <syntax>
          <list maxItems="8"/>
          <int>
            <range minInclusive="0" maxInclusive="65535"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="Loose" access="readWrite">
        <description>
          The FTP protocol can enable a user to connect a FTP server to another FTP server.
          This could lead to a hole in the DMZ and it is therefore recommended to disable this feature.
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.ConnectionTracking.PPTP." access="readOnly" version="2.17">
      <description>
        PPTP Connection Tracking configuration object.
      </description>
      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the connection tracking support for the PPTP protocol (PPTP ALG).
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.ConnectionTracking.TFTP." access="readOnly" version="2.17">
      <description>
        TFTP Connection Tracking configuration object.
      </description>
      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the connection tracking support for the TFTP protocol (TFTP ALG).
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Ports" access="readWrite">
        <description>
          Port numbers of the TFTP servers that need to be monitored.
        </description>
        <syntax>
          <list maxItems="8"/>
          <int>
            <range minInclusive="0" maxInclusive="65535"/>
          </int>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.ConnectionTracking.IRC." access="readOnly" version="2.17">
      <description>
        IRC Connection Tracking configuration object.
      </description>
      <parameter name="Enable" access="readWrite">
        <description>
          Enables or disables the connection tracking support for the IRC protocol (IRC ALG).
        </description>
        <syntax>
          <boolean/>
        </syntax>
      </parameter>

      <parameter name="Ports" access="readWrite">
        <description>
          Port numbers of the IRC servers that need to be monitored.
        </description>
        <syntax>
          <list/>
          <int>
            <range minInclusive="0" maxInclusive="65535"/>
          </int>
        </syntax>
      </parameter>

      <parameter name="MAXDCCChannels" access="readWrite">
        <description>
          Maximum number of Direct Client-to-Client (DCC) channels allowed per IRC session.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>

      <parameter name="DCCTimeout" access="readWrite">
        <description>
          Timeout duration for unestablished Direct Client-to-Client (DCC) channels.
        </description>
        <syntax>
          <unsignedInt/>
        </syntax>
      </parameter>
    </object>

    <object name="Device.Firewall.Set.{i}." access="readWrite"
        numEntriesParameter="SetNumberOfEntries" enableParameter="Enable"
        minEntries="0" maxEntries="unbounded" version="2.18">
      <description>
        This object is used for configuring sets of IP, MAC addresses and/or
        port numbers which can then be used in conjunction with the firewall.

        It provides a more efficient way to manage large collections of addresses and ports
        compared to traditional methods of listing them individually within firewall rules.
      </description>
      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <uniqueKey functional="true">
        <parameter ref="Name"/>
      </uniqueKey>
      <component ref="Alias"/>

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

      <parameter name="Origin" access="writeOnceReadOnly">
        <description>
          Indicates the Origin of the {{object}} instance.
        </description>
        <syntax>
          <string>
            <enumeration value="User">
              <description>
                Used for indicating that the set rule was created by the
                end-user. For example through the web-ui.
              </description>
            </enumeration>
            <enumeration value="System">
              <description>
                Used for indicating that the set rule was created by the
                system itself.
              </description>
            </enumeration>
            <enumeration value="Controller">
              <description>
                Used for indicating that the set rule was created by a
                Controller.
              </description>
            </enumeration>
          </string>
          <default type="object" value="Controller"/>
        </syntax>
      </parameter>

      <parameter name="Name" access="readWrite">
        <description>
          Human-readable name associated with this {{object}} entry.
        </description>
        <syntax>
          <string>
            <size maxLength="31"/>
          </string>
        </syntax>
      </parameter>

      <parameter name="Type" access="readWrite">
        <description>
          Describes the intention of the {{object|Rule}} entries and what it contains.
        </description>
        <syntax>
          <string>
            <enumeration value="IPAddresses">
              <description>
                The Rule set entry describes only a list of IPaddresses.
              </description>
            </enumeration>
            <enumeration value="Ports">
              <description>
                The Rule set entry describes only a list of ports.
              </description>
            </enumeration>
            <enumeration value="MACAddresses">
              <description>
                The Rule set entry describes only a list of MAC addresses.
              </description>
            </enumeration>
          </string>
          <default type="object" value="IPAddresses"/>
        </syntax>
      </parameter>

      <parameter name="IPVersion" access="readWrite">
        <description>
          IP Protocol Version as specified in {{bibref|IANA-ipversionnumbers}}.
          For example:
          * ''4'' (IPv4)
          * ''6'' (IPv6)
        </description>
        <syntax>
          <unsignedInt>
            <range minInclusive="4" maxInclusive="4"/>
            <range minInclusive="6" maxInclusive="6"/>
          </unsignedInt>
          <default type="object" value="6"/>
        </syntax>
      </parameter>

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

    <object name="Device.Firewall.Set.{i}.Rule.{i}." access="readWrite"
        numEntriesParameter="RuleNumberOfEntries"
        minEntries="0" maxEntries="unbounded" version="2.18">
      <description>
        Firewall Rule object that is used for configuring the set lists.
      </description>

      <uniqueKey functional="false">
        <parameter ref="Alias"/>
      </uniqueKey>

      <component ref="Alias"/>

      <parameter name="Exclude" access="readWrite">
        <description>
          Specifies if this rule entry should match or not match the configured criteria.
        </description>
        <syntax>
          <boolean/>
          <default type="object" value="false"/>
        </syntax>
      </parameter>

      <parameter name="IPAddressList" access="readWrite">
        <description>
          Source IPv4 or IPv6 address or subnet mask.

          Note:
          The IP version of the IP address MUST correspond to the IP version set in {{param|#.IPVersion}}.
          Can not be used in combination with {{param|MACAddressList}} or {{param|PortList}}.
        </description>
        <syntax>
          <list/>
          <dataType ref="IPAddress"/>
          <default type="object" value="[]"/>
        </syntax>
      </parameter>

      <parameter name="MACAddressList" access="readWrite">
        <description>
          Specifies the MACAddress that can be used by the {{object}} entry.

          Note:
          Can not be used in combination with {{param|IPAddressList}} or {{param|PortList}}.
        </description>
        <syntax>
          <dataType ref="MACAddress"/>
          <default type="object" value=""/>
        </syntax>
      </parameter>

      <parameter name="PortList" access="readWrite">
        <description>
          Specifies the Port number or a port range that can be used by the {{object}} entry.
          Syntax:

          A single port can be configured as e.g. '80'.
          A port range can be configured as '8000-80010'.

          Note:
          Can not be used in combination with {{param|MACAddressList}} or {{param|IPAddressList}}.
        </description>
        <syntax>
          <list/>
          <string/>
          <default type="object" value="[]"/>
        </syntax>
      </parameter>
    </object>

    <profile name="SimpleFirewall:1" version="2.0">
      <object ref="Device.Firewall." requirement="present">
        <parameter ref="Config" requirement="readWrite"/>
        <parameter ref="Version" requirement="readOnly"/>
        <parameter ref="LastChange" requirement="readOnly"/>
      </object>
    </profile>

    <profile name="AdvancedFirewall:1" extends="SimpleFirewall:1"
        version="2.2">
      <object ref="Device.Firewall." requirement="present">
        <parameter ref="AdvancedLevel" requirement="readWrite"/>
        <parameter ref="Type" requirement="readOnly"/>
        <parameter ref="LevelNumberOfEntries" requirement="readOnly"/>
        <parameter ref="ChainNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.Firewall.Level.{i}." requirement="createDelete">
        <parameter ref="Alias" requirement="writeOnceReadOnly"/>
        <parameter ref="Name" requirement="readOnly"/>
        <parameter ref="Order" requirement="readWrite"/>
        <parameter ref="Chain" requirement="readOnly"/>
        <parameter ref="PortMappingEnabled" requirement="readWrite">
          <description>
            REQUIRED only for devices that support NAT.
          </description>
        </parameter>
        <parameter ref="DefaultPolicy" requirement="readWrite"/>
        <parameter ref="DefaultLogPolicy" requirement="readWrite"/>
      </object>
      <object ref="Device.Firewall.Chain.{i}." requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Alias" requirement="writeOnceReadOnly"/>
        <parameter ref="Name" requirement="readWrite"/>
        <parameter ref="Creator" requirement="readOnly"/>
        <parameter ref="RuleNumberOfEntries" requirement="readOnly"/>
      </object>
      <object ref="Device.Firewall.Chain.{i}.Rule.{i}."
          requirement="createDelete">
        <parameter ref="Enable" requirement="readWrite"/>
        <parameter ref="Status" requirement="readOnly"/>
        <parameter ref="Order" requirement="readWrite"/>
        <parameter ref="Alias" requirement="writeOnceReadOnly"/>
        <parameter ref="Target" requirement="readWrite"/>
        <parameter ref="TargetChain" requirement="readWrite"/>
        <parameter ref="SourceInterface" requirement="readWrite"/>
        <parameter ref="SourceInterfaceExclude" requirement="readWrite"/>
        <parameter ref="SourceAllInterfaces" requirement="readWrite"/>
        <parameter ref="DestInterface" requirement="readWrite"/>
        <parameter ref="DestInterfaceExclude" requirement="readWrite"/>
        <parameter ref="DestAllInterfaces" requirement="readWrite"/>
        <parameter ref="IPVersion" requirement="readWrite"/>
        <parameter ref="DestIP" requirement="readWrite"/>
        <parameter ref="DestMask" requirement="readWrite"/>
        <parameter ref="DestIPExclude" requirement="readWrite"/>
        <parameter ref="SourceIP" requirement="readWrite"/>
        <parameter ref="SourceMask" requirement="readWrite"/>
        <parameter ref="SourceIPExclude" requirement="readWrite"/>
        <parameter ref="Protocol" requirement="readWrite"/>
        <parameter ref="ProtocolExclude" requirement="readWrite"/>
        <parameter ref="DestPort" requirement="readWrite"/>
        <parameter ref="DestPortRangeMax" requirement="readWrite"/>
        <parameter ref="DestPortExclude" requirement="readWrite"/>
        <parameter ref="SourcePort" requirement="readWrite"/>
        <parameter ref="SourcePortRangeMax" requirement="readWrite"/>
        <parameter ref="SourcePortExclude" requirement="readWrite"/>
      </object>
    </profile>
  </component>

  <model name="Firewall:2.18">
    <component ref="Root"/>
    <component ref="Firewall"/>
  </model>
</dm:document>
