<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.25 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-acl-extensions-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="Enhanced ACLs">Extensions to the Access Control Lists (ACLs) YANG Model</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-acl-extensions-01"/>
    <author fullname="Oscar Gonzalez de Dios">
      <organization>Telefonica</organization>
      <address>
        <email>oscar.gonzalezdedios@telefonica.com</email>
      </address>
    </author>
    <author fullname="Samier Barguil">
      <organization>Telefonica</organization>
      <address>
        <email>samier.barguilgiraldo.ext@telefonica.com</email>
      </address>
    </author>
    <author fullname="Mohamed Boucadair">
      <organization>Orange</organization>
      <address>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Qin Wu">
      <organization>Huawei</organization>
      <address>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <date year="2023" month="March" day="10"/>
    <area>Operations and Management</area>
    <workgroup>netmod</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>RFC 8519 defines a YANG data model for Access Control Lists
(ACLs). This document discusses a set of extensions that fix many of
the limitations of the ACL model as initially defined in RFC 8519.</t>
      <t>The document also defines an IANA-maintained module for ICMP types.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Network Modeling Working Group mailing list (netmod@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netmod/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/boucadair/enhanced-acl-netmod"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="RFC8519"/> defines Access Control Lists (ACLs) as a
user-ordered set of filtering rules. The model targets the
configuration of the filtering behavior of a device. However, the
model structure, as defined in <xref target="RFC8519"/>, suffers from a set of limitations. This
document describes these limitations and proposes an enhanced ACL
structure. The YANG module in this document is solely based
on augmentations to the ACL YANG module defined in <xref target="RFC8519"/>.</t>
      <t>The motivation of such enhanced ACL structure is discussed in detail in <xref target="ps"/>.</t>
      <t>When managing ACLs, it is common for network operators to group
match elements in pre-defined sets. The consolidation into group matches
allows for reducing the number of rules, especially in large scale
networks. If, for example, it is needed to find a match against 100
IP addresses (or prefixes), a single rule will suffice rather than creating
individual Access Control Entries (ACEs) for each IP address (or prefix). In
doing so, implementations would optimize the performance of matching
lists vs multiple rules matching.</t>
      <t>The enhanced ACL structure is also meant to facilitate the management of
network operators. Instead of entering the IP address or port number
literals, using user-named lists decouples the creation of the rule
from the management of the sets. Hence, it is possible to remove/add
 entries to the list without redefining the (parent) ACL rule.</t>
      <t>In addition, the notion of Access Control List (ACL) and defined sets
 is generalized so that it is not device-specific as per <xref target="RFC8519"/>.  ACLs
 and defined sets may be defined at network / administrative domain level
 and associated to devices. This approach facilitates the reusability across multiple
  network elements. For example, managing the IP prefix sets from a network
   level makes it easier to maintain by the security groups.</t>
      <t>Network operators maintain sets of IP prefixes that are related to each other,
e.g., deny-lists or accept-lists that are associated with those provided by a
 VPN customer. These lists are maintained and manipulated by security expert teams.</t>
      <t>Note that ACLs are used locally in devices but are triggered by other
tools such as DDoS mitigation <xref target="RFC9132"/> or BGP Flow Spec <xref target="RFC8955"/>
        <xref target="RFC8956"/>. Therefore, supporting means to easily map to the filtering rules conveyed in
messages triggered by  these tools is valuable from a network operation standpoint.</t>
      <t>The document also defines an IANA-maintained module for ICMP types. The design of the module adheres with the recommendations
in <xref target="I-D.boucadair-netmod-iana-registries"/>. A template to generate the module is available at <xref target="template"/>. Readers should refer to the IANA
website [REF_TBC] to retrieve the latest version of the module. The module is provided in <xref target="iana-icmp"/> for the users convenience, but that appendix will be removed from the final RFC.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>The terminology for describing YANG modules is defined in <xref target="RFC7950"/>.
The meaning of the symbols in the tree diagrams is defined in
<xref target="RFC8340"/>.</t>
      <t>In addition to the terms defined in <xref target="RFC8519"/>, this document makes use of the following term:</t>
      <t>Defined set:
:Refers to reusable description of one or multiple information elements (e.g., IP address, IP prefix, port number, or ICMP type).</t>
    </section>
    <section anchor="ps">
      <name>Problem Statement &amp; Gap Analysis</name>
      <section anchor="ps-sets">
        <name>Suboptimal Configuration: Lack of Support for Lists of Prefixes</name>
        <t>IP prefix-related data nodes, e.g., "destination-ipv4-network" or
   "destination-ipv6-network", do not support handling a list of IP
   prefixes, which may then lead to having to support large numbers of ACL entries in a configuration file.</t>
        <t>The same issue is encountered when ACLs have to be in place to mitigate DDoS
attacks that involve a set of sources (e.g., <xref target="RFC9132"/>). The situation is even worse when both a list of sources
and destination prefixes are involved in the filtering.</t>
        <t><xref target="example"/> shows an example of the required ACL configuration for filtering traffic from two prefixes.</t>
        <figure anchor="example">
          <name>Example Illustrating Sub-optimal Use of the ACL Model with a Prefix List (Message Body)</name>
          <artwork><![CDATA[
{
  "ietf-access-control-list:acls": {
    "acl": [
      {
        "name": "first-prefix",
        "type": "ipv6-acl-type",
        "aces": {
          "ace": [
            {
              "name": "my-test-ace",
              "matches": {
                "ipv6": {
                  "destination-ipv6-network":
                    "2001:db8:6401:1::/64",
                  "source-ipv6-network":
                    "2001:db8:1234::/96",
                  "protocol": 17,
                  "flow-label": 10000
                },
                "udp": {
                  "source-port": {
                    "operator": "lte",
                    "port": 80
                  },
                  "destination-port": {
                    "operator": "neq",
                    "port": 1010
                  }
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            }
          ]
        }
      },
      {
        "name": "second-prefix",
        "type": "ipv6-acl-type",
        "aces": {
          "ace": [
            {
              "name": "my-test-ace",
              "matches": {
                "ipv6": {
                  "destination-ipv6-network":
                    "2001:db8:6401:c::/64",
                  "source-ipv6-network":
                    "2001:db8:1234::/96",
                  "protocol": 17,
                  "flow-label": 10000
                },
                "udp": {
                  "source-port": {
                    "operator": "lte",
                    "port": 80
                  },
                  "destination-port": {
                    "operator": "neq",
                    "port": 1010
                  }
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            }
          ]
        }
      }
    ]
  }
}
]]></artwork>
        </figure>
        <t>Such a configuration is suboptimal for both:</t>
        <ul spacing="normal">
          <li>Network controllers that need to manipulate large files. All or a
subset for this configuration will need to be passed to the
underlying network devices.</li>
          <li>Devices may receive such a configuration and thus will need to
maintain it locally.</li>
        </ul>
        <t><xref target="example_1"/> depicts an example of an optimized structure:</t>
        <figure anchor="example_1">
          <name>Example Illustrating Optimal Use of the ACL Model in a Network Context (Message Body)</name>
          <artwork><![CDATA[
{
  "ietf-access-control-list:acls": {
    "acl": [
      {
        "name": "prefix-list-support",
        "type": "ipv6-acl-type",
        "aces": {
          "ace": [
            {
              "name": "my-test-ace",
              "matches": {
                "ipv6": {
                  "destination-ipv6-network": [
                    "2001:db8:6401:1::/64",
                    "2001:db8:6401:c::/64"
                  ],
                  "source-ipv6-network":
                    "2001:db8:1234::/96",
                  "protocol": 17,
                  "flow-label": 10000
                },
                "udp": {
                  "source-port": {
                    "operator": "lte",
                    "port": 80
                  },
                  "destination-port": {
                    "operator": "neq",
                    "port": 1010
                  }
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            }
          ]
        }
      }
    ]
  }
}
]]></artwork>
        </figure>
      </section>
      <section anchor="manageability-impossibility-to-use-aliases-or-defined-sets">
        <name>Manageability: Impossibility to Use Aliases or Defined Sets</name>
        <t>The same approach as the one discussed for IP prefixes can be generalized by introducing the concept of "aliases" or "defined sets".</t>
        <t>The defined sets are reusable definitions across several ACLs. Each category is modelled in YANG as a list of parameters related to the class it represents. The following sets can be considered:</t>
        <ul spacing="normal">
          <li>Prefix sets: Used to create lists of IPv4 or IPv6 prefixes.</li>
          <li>Protocol sets: Used to create a list of protocols.</li>
          <li>Port number sets: Used to create lists of TCP or UDP port values
   (or any other transport protocol that makes uses of port numbers).
   The identity of the protocols is identified by the protocol set, if
   present.  Otherwise, a set applies to any protocol.</li>
          <li>ICMP sets: Uses to create lists of ICMP-based filters. This applies only when the protocol is set to ICMP or ICMPv6.</li>
        </ul>
        <t>A candidate structure is shown in <xref target="example_sets"/>:</t>
        <figure anchor="example_sets">
          <name>Examples of Defined Sets</name>
          <artwork><![CDATA[
     +--rw defined-sets
     |  +--rw prefix-sets
     |  |  +--rw prefix-set* [name]
     |  |     +--rw name        string
     |  |     +--rw ip-prefix*   inet:ip-prefix
     |  +--rw port-sets
     |  |  +--rw port-set* [name]
     |  |     +--rw name    string
     |  |     +--rw port*   inet:port-number
     |  +--rw protocol-sets
     |  |  +--rw protocol-set* [name]
     |  |     +--rw name             string
     |  |     +--rw protocol-name*   identityref
     |  +--rw icmp-type-sets
     |     +--rw icmp-type-set* [name]
     |        +--rw name     string
     |        +--rw types* [type]
     |           +--rw type              uint8
     |           +--rw code?             uint8
     |           +--rw rest-of-header?   binary
]]></artwork>
        </figure>
        <t>Aliases may also be considered to manage resources that are identified by a combination of various parameters as shown in the candidate tree in <xref target="example_alias"/>.
Note that some aliases can be provided by decomposing them into separate sets.</t>
        <figure anchor="example_alias">
          <name>Examples of Aliases</name>
          <artwork><![CDATA[
        |  +--rw aliases
        |  |  +--rw alias* [name]
        |  |     +--rw name                 string
        |  |     +--rw prefix*       inet:ip-prefix
        |  |     +--rw port-range* [lower-port]
        |  |     |  +--rw lower-port    inet:port-number
        |  |     |  +--rw upper-port?   inet:port-number
        |  |     +--rw protocol*     uint8
        |  |     +--rw fqdn*         inet:domain-name
        |  |     +--rw uri*          inet:uri
]]></artwork>
        </figure>
      </section>
      <section anchor="bind-acls-to-devices-not-only-interfaces">
        <name>Bind ACLs to Devices, Not Only Interfaces</name>
        <t>In the context of network management, an ACL may be enforced in many
   network locations.  As such, the ACL module should allow for binding an
   ACL to multiple devices, not only (abstract) interfaces.</t>
        <t>The ACL name must, thus, be unique at the scale of the network, but the same name may be used in many devices when enforcing node-specific ACLs.</t>
      </section>
      <section anchor="ps-frag">
        <name>Partial or Lack of IPv4/IPv6 Fragment Handling</name>
        <t><xref target="RFC8519"/> does not support fragment handling for IPv6 but
offers a partial support for IPv4  through the use of 'flags'.  Nevertheless,
the use of 'flags' is problematic since it does not allow a bitmask
to be defined.  For example, setting other bits not covered by the
'flags' filtering clause in a packet will allow that packet to get
through (because it won't match the ACE).</t>
        <t>Defining a new IPv4/IPv6 matching field called 'fragment' is thus required to efficiently handle fragment-related filtering rules.</t>
      </section>
      <section anchor="ps-flags">
        <name>Suboptimal TCP Flags Handling</name>
        <t><xref target="RFC8519"/> supports including flags in the TCP match fields, however
   that structure does not support matching operations as those
   supported in BGP Flow Spec.  Defining this field to be defined as a
   flag bitmask together with a set of operations is meant to
   efficiently handle TCP flags filtering rules.</t>
      </section>
      <section anchor="ps-rate">
        <name>Rate-Limit Action</name>
        <t><xref target="RFC8519"/> specifies that forwarding actions can be 'accept' (i.e., accept matching
   traffic), 'drop' (i.e., drop matching traffic without sending any
   ICMP error message), or 'reject' (i.e., drop matching traffic and send an ICMP error message to the source). However, there are situations where the matching traffic can be accepted, but with a rate-limit policy. This capability is not supported by <xref target="RFC8519"/>.</t>
      </section>
      <section anchor="ps-pf">
        <name>Payload-based Filtering</name>
        <t>Some transport protocols use existing protocols (e.g., TCP or UDP) as substrate. The match criteria for such protocols may rely upon the 'protocol' under 'l3', TCP/UDP match criteria, part of the TCP/UDP payload, or a combination thereof. <xref target="RFC8519"/> does not support matching based on the payload.</t>
        <t>Likewise, the current version of the ACL model does not support filtering of encapsulated traffic.</t>
      </section>
      <section anchor="reuse-the-acls-content-across-several-devices">
        <name>Reuse the ACLs Content Across Several Devices</name>
        <t>Having a global network view of the ACLs is highly valuable for service providers. An ACL could be defined and applied
based on the network topology hierarchy. So, an ACL can be
defined at the network level and, then, that same ACL can be used (or referenced to)
in several devices (including termination points) within the same network.</t>
        <t>This network/device ACLs differentiation introduces several new
requirements, e.g.:</t>
        <ul spacing="normal">
          <li>An ACL name can be used at both network and device levels.</li>
          <li>An ACL content updated at the network level should imply
a transaction that updates the relevant content in all the nodes using this
ACL.</li>
          <li>ACLs defined at the device level have a local meaning for the specific node.</li>
          <li>A device can be associated with a router, a VRF, a
logical system, or a virtual node. ACLs can be applied in physical and
logical infrastructure.</li>
        </ul>
      </section>
    </section>
    <section anchor="overall-module-structure">
      <name>Overall Module Structure</name>
      <section anchor="enhanced-acl">
        <name>Enhanced ACL</name>
        <t><xref target="enh-acl-tree"/> shows the full enhanced ACL tree:</t>
        <figure anchor="enh-acl-tree">
          <name>Enhanced ACL tree</name>
          <artwork><![CDATA[
module: ietf-acl-enh
  +--rw defined-sets
  |  +--rw ipv4-prefix-sets
  |  |  +--rw prefix-set* [name]
  |  |     +--rw name           string
  |  |     +--rw description?   string
  |  |     +--rw prefix*        inet:ipv4-prefix
  |  +--rw ipv6-prefix-sets
  |  |  +--rw prefix-set* [name]
  |  |     +--rw name           string
  |  |     +--rw description?   string
  |  |     +--rw prefix*        inet:ipv6-prefix
  |  +--rw port-sets
  |  |  +--rw port-set* [name]
  |  |     +--rw name    string
  |  |     +--rw port* [id]
  |  |        +--rw id                              string
  |  |        +--rw (port)?
  |  |           +--:(port-range-or-operator)
  |  |              +--rw port-range-or-operator
  |  |                 +--rw (port-range-or-operator)?
  |  |                    +--:(range)
  |  |                    |  +--rw lower-port    inet:port-number
  |  |                    |  +--rw upper-port    inet:port-number
  |  |                    +--:(operator)
  |  |                       +--rw operator?     operator
  |  |                       +--rw port          inet:port-number
  |  +--rw protocol-sets
  |  |  +--rw protocol-set* [name]
  |  |     +--rw name        string
  |  |     +--rw protocol*   union
  |  +--rw icmp-type-sets
  |     +--rw icmp-type-set* [name]
  |        +--rw name     string
  |        +--rw types* [type]
  |           +--rw type              uint8
  |           +--rw code?             uint8
  |           +--rw rest-of-header?   binary
  +--rw aliases
     +--rw alias* [name]
        +--rw name          string
        +--rw prefix*       inet:ip-prefix
        +--rw port-range* [lower-port]
        |  +--rw lower-port    inet:port-number
        |  +--rw upper-port?   inet:port-number
        +--rw protocol*     uint8
        +--rw fqdn*         inet:domain-name
        +--rw uri*          inet:uri

  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches:
    +--rw (payload)?
       +--:(prefix-pattern)
          +--rw prefix-pattern {match-on-payload}?
             +--rw offset?       identityref
             +--rw offset-end?   uint64
             +--rw operator?     operator
             +--rw prefix?       binary
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l2:
    +--rw vlan-filter {match-on-vlan-filter}?
       +--rw frame-type?         string
       +--rw (vlan-type)?
          +--:(range)
          |  +--rw lower-vlan    uint16
          |  +--rw upper-vlan    uint16
          +--:(operator)
             +--rw operator?     packet-fields:operator
             +--rw vlan*         uint16
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l2:
    +--rw isid-filter {match-on-isid-filter}?
       +--rw (isid-type)?
          +--:(range)
          |  +--rw lower-isid    uint16
          |  +--rw upper-isid    uint16
          +--:(operator)
             +--rw operator?     packet-fields:operator
             +--rw isid*         uint16
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l3
            /acl:ipv4:
    +--rw ipv4-fragment
    |  +--rw operator?   operator
    |  +--rw type?       fragment-type
    +--rw source-ipv4-prefix-list?        ipv4-prefix-set-ref
    +--rw destination-ipv4-prefix-list?   ipv4-prefix-set-ref
    +--rw next-header-set?                protocol-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l3
            /acl:ipv6:
    +--rw ipv6-fragment
    |  +--rw operator?   operator
    |  +--rw type?       fragment-type
    +--rw source-ipv6-prefix-list?        ipv6-prefix-set-ref
    +--rw destination-ipv6-prefix-list?   ipv6-prefix-set-ref
    +--rw protocol-set?                   protocol-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4
            /acl:tcp:
    +--rw flags-bitmask
    |  +--rw (mode)?
    |     +--:(explicit)
    |     |  +--rw operator?            operator
    |     |  +--rw explicit-tcp-flag*   identityref
    |     +--:(builtin)
    |        +--rw bitmask?             uint16
    +--rw source-tcp-port-set?        port-set-ref
    +--rw destination-tcp-port-set?   port-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4
            /acl:udp:
    +--rw source-udp-port-set?        port-set-ref
    +--rw destination-udp-port-set?   port-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4
            /acl:icmp:
    +--rw icmp-set?   icmp-type-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:actions:
    +--rw rate-limit?   decimal64
]]></artwork>
        </figure>
      </section>
      <section anchor="defined-sets">
        <name>Defined sets</name>
        <t>The augmented ACL structure includes several containers to manage reusable sets of elements that can be matched in an ACL entry.
Each set is uniquely identified by a name, and can be called from the relevant entry. The following sets are defined:</t>
        <ul spacing="normal">
          <li>IPv4 prefix set: It contains a list of IPv4 prefixes. A match will be considered if the IP address (source or destination, depending on the ACL entry) is contained in any of the prefixes.</li>
          <li>IPv6 prefix set: It contains a list of IPv6 prefixes. A match will be considered if the IP address (source or destination, depending on the ACL entry) is contained in any of the prefixes.</li>
          <li>Port sets: It contains a list of port numbers to be used in TCP / UDP entries. The ports can be individual port numbers, a range of ports, and an operation.</li>
          <li>Protocol sets: It contains a list of protocol values. Each protocol can be identified either by a number (e.g., 17) or a name (e.g., UDP).</li>
          <li>ICMP sets: It contains a list of ICMP types, each of them identified by a type value, optionally the code and the rest of the header.</li>
        </ul>
      </section>
      <section anchor="tcp-flags-handling">
        <name>TCP Flags Handling</name>
        <t>The augmented ACL structure includes a new leaf 'flags-bitmask' to better handle flags.</t>
        <t>Clients that support both 'flags-bitmask' and 'flags' matching fields <bcp14>MUST NOT</bcp14> set these fields in the same request.</t>
        <t><xref target="example_4"/> shows an example of a request to install a filter to discard incoming TCP messages having all flags unset.</t>
        <figure anchor="example_4">
          <name>Example to Deny TCP Null Attack Messages (Request Body)</name>
          <artwork><![CDATA[
  {
     "ietf-access-control-list:acls": {
       "acl": [{
         "name": "tcp-flags-example",
         "aces": {
           "ace": [{
             "name": "null-attack",
             "matches": {
               "tcp": {
                 "acl-enh:flags-bitmask": {
                   "operator": "not any",
                   "bitmask": 4095
                 }
               }
             },
             "actions": {
               "forwarding": "drop"
             }
           }]
         }
       }]
     }
   }
]]></artwork>
        </figure>
      </section>
      <section anchor="fragments-handling">
        <name>Fragments Handling</name>
        <t>The augmented ACL structure includes a new leaf 'fragment' to better handle fragments.</t>
        <t>Clients that support both 'fragment' and 'flags' matching fields <bcp14>MUST NOT</bcp14> set these fields in the same request.</t>
        <t><xref target="example_2"/> shows the content of a POST request to allow the traffic destined to 198.51.100.0/24 and UDP port number 53, but to drop all fragmented
packets.  The following ACEs are defined (in this order):</t>
        <ul spacing="normal">
          <li>"drop-all-fragments" ACE: discards all fragments.</li>
          <li>"allow-dns-packets" ACE: accepts DNS packets destined to 198.51.100.0/24.</li>
        </ul>
        <figure anchor="example_2">
          <name>Example Illustrating Candidate Filtering of IPv4 Fragmented Packets (Message Body)</name>
          <artwork><![CDATA[
{
     "ietf-access-control-list:acls": {
       "acl": [
         {
           "name": "dns-fragments",
           "type": "ipv4-acl-type",
           "aces": {
             "ace": [
               {
                 "name": "drop-all-fragments",
                 "matches": {
                   "ipv4": {
                     "acl-enh:ipv4-fragment": {
                       "operator": "match",
                       "type": "isf"
                     }
                   }
                 },
                 "actions": {
                   "forwarding": "drop"
                 }
               },
               {
                 "name": "allow-dns-packets",
                 "matches": {
                   "ipv4": {
                     "destination-ipv4-network": "198.51.100.0/24"
                   },
                   "udp": {
                     "destination-port": {
                       "operator": "eq",
                       "port": 53
                     }
                   },
                   "actions": {
                     "forwarding": "accept"
                   }
                 }
               }
             ]
           }
         }
       ]
     }
   }
]]></artwork>
        </figure>
        <t><xref target="example_3"/> shows an example of the body of a POST request to allow the traffic destined to 2001:db8::/32 and UDP port number 53, but to drop all fragmented packets. The following ACEs are defined (in this order):</t>
        <ul spacing="normal">
          <li>"drop-all-fragments" ACE: discards all fragments (including atomic fragments). That is, IPv6 packets that include a Fragment header (44) are dropped.</li>
          <li>"allow-dns-packets" ACE: accepts DNS packets destined to 2001:db8::/32.</li>
        </ul>
        <figure anchor="example_3">
          <name>Example Illustrating Candidate Filtering of IPv6 Fragmented Packets (Message Body)</name>
          <artwork><![CDATA[
    {
     "ietf-access-control-list:acls": {
       "acl": [
         {
           "name": "dns-fragments",
           "type": "ipv6-acl-type",
           "aces": {
             "ace": [
               {
                 "name": "drop-all-fragments",
                 "matches": {
                   "ipv6": {
                     "acl-enh:ipv6-fragment": {
                       "operator": "match",
                       "type": "isf"
                     }
                   }
                 },
                 "actions": {
                   "forwarding": "drop"
                 }
               },
               {
                 "name": "allow-dns-packets",
                 "matches": {
                   "ipv6": {
                     "destination-ipv6-network": "2001:db8::/32"
                   },
                   "udp": {
                     "destination-port": {
                       "operator": "eq",
                       "port": 53
                     }
                   }
                 },
                 "actions": {
                   "forwarding": "accept"
                 }
               }
             ]
           }
         }
       ]
     }
   }
]]></artwork>
        </figure>
      </section>
      <section anchor="rate-limit-traffic">
        <name>Rate-Limit Traffic</name>
        <t>In order to support rate-limiting (see <xref target="ps-rate"/>), a new action called "rate-limit" is defined. <xref target="example_5"/> shows an ACL example to rate-limit incoming SYNs during a SYN flood attack.</t>
        <figure anchor="example_5">
          <name>Example Rate-Limit Incoming TCP SYNs (Message Body).</name>
          <artwork><![CDATA[
  {
     "ietf-access-control-list:acls": {
       "acl": [{
         "name": "tcp-flags-example-with-rate-limit",
         "aces": {
           "ace": [{
             "name": "rate-limit-syn",
             "matches": {
               "tcp": {
                 "acl-enh:flags-bitmask": {
                   "operator": "match",
                   "bitmask": 2
                 }
               }
             },
             "actions": {
               "forwarding": "accept",
               "acl-enh:rate-limit": "20.00"
             }
           }]
         }
       }]
     }
   }
]]></artwork>
        </figure>
      </section>
      <section anchor="isid-filter">
        <name>ISID Filter</name>
        <t>Provider backbone bridging (PBB) was originally defined as Virtual
Bridged Local Area Networks [IEEE802.1ah]
standard. However, instead of multiplexing VLANs, PBB
duplicates the MAC layer of the customer frame and separates it from
the provider domain, by encapsulating it in a 24 bit instance service
identifier (I-SID). This provides for more transparency between the
customer network and the provider network.</t>
        <t>The I-component forms the customer or access facing interface or
routing instance. The I-component is responsible for mapping customer
Ethernet traffic to the appropriate I-SID. In the network is
mandatory to configure the default service identifier.</t>
        <t>Being able to filter by I-component Service identifier is a feature of
the EVNP-PBB configuration.</t>
        <t><xref target="example_6"/> shows an ACL example to illustrate the ISID range filtering.</t>
        <figure anchor="example_6">
          <name>Example ISID Filter (Message Body)</name>
          <artwork type="ascii-art"><![CDATA[
  {
    "ietf-acces-control-list:acls": {
          "acl": [
            {
              "name": "test",
              "aces": {
                "ace": [
                  {
                    "name": "1",
                    "matches": {
                      "ietf-acl-enh:isid-filter": {
                        "lower-isid": 100,
                        "upper-isid": 200
                      }
                    },
                    "actions": {
                      "forwarding": "ietf-acces-control-list:accept"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
   }
]]></artwork>
        </figure>
      </section>
      <section anchor="vlan-filter">
        <name>VLAN Filter</name>
        <t>Being able to filter all packets that are bridged within a VLAN or that
are routed into or out of a bridge domain is part of the VPN control
requirements derived of the EVPN definition done in <xref target="RFC7209"/>.
So, all packets that are bridged within a VLAN or that are routed into or
out of a VLAN can be captured, forwarded, translated or discarded based
on the network policy applied.</t>
        <t><xref target="example_7"/> shows an ACL example to illustrate how to apply a VLAN range filter.</t>
        <figure anchor="example_7">
          <name>Example of VLAN Filter (Message Body)</name>
          <artwork type="ascii-art"><![CDATA[
  {
    "ietf-acces-control-list:acls": {
      "acl": [
        {
          "name": "VLAN_FILTER",
          "aces": {
            "ace": [
              {
                "name": "1",
                "matches": {
                  "ietf-acl-enh:vlan-filter": {
                    "lower-vlan": 10,
                    "upper-vlan": 20
                  }
                },
                "actions": {
                  "forwarding": "ietf-acces-control-list:accept"
                }
              }
            ]
          }
        }
      ]
    }
   }
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="yang-modules">
      <name>YANG Modules</name>
      <section anchor="enhanced-acl-1">
        <name>Enhanced ACL</name>
        <sourcecode markers="true"><![CDATA[ file ietf-acl-enh@2022-10-24.yang

module ietf-acl-enh {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-acl-enh";
  prefix acl-enh;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-access-control-list {
    prefix acl;
    reference
      "RFC 8519: YANG Data Model for Network Access
                 Control Lists (ACLs), Section 4.1";
  }
  import ietf-packet-fields {
    prefix packet-fields;
    reference
      "RFC 8519: YANG Data Model for Network Access
                 Control Lists (ACLs), Section 4.2";
  }

  organization
    "IETF NETMOD Working Group";
  contact
    "WG Web:   https://datatracker.ietf.org/wg/netmod/
     WG List:  mailto:netmod@ietf.org

     Author:    Mohamed Boucadair
               mailto:mohamed.boucadair@orange.com
     Author:    Samier Barguil
               mailto:samier.barguilgiraldo.ext@telefonica.com
     Author:    Oscar Gonzalez de Dios
               mailto:oscar.gonzalezdedios@telefonica.com";
  description
    "This module contains YANG definitions for enhanced ACLs.

     Copyright (c) 2023 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX; see
     the RFC itself for full legal notices.";

  revision 2022-10-24 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: Extensions to the Access Control Lists (ACLs)
                 YANG Model";
  }

  feature match-on-payload {
    description
      "Match based on a pattern is supported.";
  }

  feature match-on-vlan-filter {
    description
      "Match based on a VLAN range of vlan list is supported.";
  }

  feature match-on-isid-filter {
    description
      "Match based on a ISID range of vlan list is supported.";
  }

  identity offset-type {
    description
      "Base identity for payload offset type.";
  }

  identity layer3 {
    base offset-type;
    description
      "The offset starts at the beginning of the IP header.";
  }

  identity layer4 {
    base offset-type;
    description
      "The offset start right after the IP header. This can be
       typically the beginning of transport header (e.g., TCP
       or UDP).";
  }

  identity payload {
    base offset-type;
    description
      "The offset start right after the end of the transport
       payload. For example, this represents the beginning of the
       TCP data right after any TCP options or the beginning of
       the UDP payload right after the UDP header.";
  }

  identity tcp-flag {
    description
      "Base Identity for the TCP Flags.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity ack {
    base tcp-flag;
    description
      "Acknowledgment TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity syn {
    base tcp-flag;
    description
      "Synchronize sequence numbers.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity fin {
    base tcp-flag;
    description
      "No more data from the sender.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity urg {
    base tcp-flag;
    description
      "Urgent pointer TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity psh {
    base tcp-flag;
    description
      "The Push function flag is similar to the URG flag and tells
       the receiver to process these packets as they are received
       instead of buffering them.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity rst {
    base tcp-flag;
    description
      "Reset TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity ece {
    base tcp-flag;
    description
      "ECN-Echo TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity cwr {
    base tcp-flag;
    description
      "Congestion Window Reduced flag bit";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  typedef operator {
    type bits {
      bit not {
        position 0;
        description
          "If set, logical negation of operation.";
      }
      bit match {
        position 1;
        description
          "Match bit.  This is a bitwise match operation defined as
           '(data & value) == value'.";
      }
      bit any {
        position 2;
        description
          "Any bit.  This is a match on any of the bits in  bitmask.
           It evaluates to 'true' if any of the bits in the value mask
           are set in the data,  i.e., '(data & value) != 0'.";
      }
    }
    description
      "Specifies how to apply the defined bitmask.
       'any' and 'match' bits must not be set simultaneously.";
  }

  typedef fragment-type {
    type bits {
      bit df {
        position 0;
        description
          "Don't fragment bit for IPv4.
           Must be set to 0 when it appears in an IPv6 filter.";
      }
      bit isf {
        position 1;
        description
          "Is a fragment.";
      }
      bit ff {
        position 2;
        description
          "First fragment.";
      }
      bit lf {
        position 3;
        description
          "Last fragment.";
      }
    }
    description
      "Different fragment types to match against.";
  }

  typedef ipv4-prefix-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:ipv4-prefix-sets"
         + "/acl-enh:prefix-set/acl-enh:name";
    }
    description
      "Defines a reference to an IPv4 prefix set.";
  }

  typedef ipv6-prefix-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:ipv6-prefix-sets"
         + "/acl-enh:prefix-set/acl-enh:name";
    }
    description
      "Defines a reference to an IPv6 prefix set.";
  }

  typedef port-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:port-sets"
         + "/acl-enh:port-set/acl-enh:name";
    }
    description
      "Defines a reference to a port set.";
  }

  typedef protocol-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:protocol-sets"
         + "/acl-enh:protocol-set/acl-enh:name";
    }
    description
      "Defines a reference to a protocol set.";
  }

  typedef icmp-type-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:icmp-type-sets"
         + "/acl-enh:icmp-type-set/acl-enh:name";
    }
    description
      "Defines a reference to an ICMP type set.";
  }

  grouping tcp-flags {
    description
      "Operations on TCP flags.";
    choice mode {
      description
        "Choice of how flags are indicated.";
      case explicit {
        leaf operator {
          type operator;
          default "match";
          description
            "How to interpret the TCP flags.";
        }
        leaf-list explicit-tcp-flag {
          type identityref {
            base tcp-flag;
          }
          description
            "An explicit list of the TCP flags that are to be
             matched.";
        }
      }
      case builtin {
        leaf bitmask {
          type uint16;
          description
            "The bitmask matches the last 4 bits of byte 12 and 13 of
             the TCP header.  For clarity, the 4 bits of byte 12
             corresponding to the TCP data offset field are not
             included in any matching.";
        }
      }
    }
  }

  grouping fragment-fields {
    description
      "Operations on fragment types.";
    leaf operator {
      type operator;
      default "match";
      description
        "How to interpret the fragment type.";
    }
    leaf type {
      type fragment-type;
      description
        "What fragment type to look for.";
    }
  }

  grouping payload {
    description
      "Operations on payload match.";
    leaf offset {
      type identityref {
        base offset-type;
      }
      description
        "Indicates the payload offset. This will indicate the position
         of the data in packet to use for the match.";
    }
    leaf offset-end {
      type uint64;
      units "bytes";
      description
        "Indicates the number of bytes, starting from the offset to
         cover when performing the prefix match.";
    }
    leaf operator {
      type operator;
      default "match";
      description
        "How to interpret the prefix match.";
    }
    leaf prefix {
      type binary;
      description
        "The binary pattern to match against.";
    }
  }

  grouping alias {
    description
      "Specifies an alias.";
    leaf-list prefix {
      type inet:ip-prefix;
      description
        "IPv4 or IPv6 prefix of the alias.";
    }
    list port-range {
      key "lower-port";
      description
        "Port range.  When only lower-port is
         present, it represents a single port number.";
      leaf lower-port {
        type inet:port-number;
        mandatory true;
        description
          "Lower port number of the port range.";
      }
      leaf upper-port {
        type inet:port-number;
        must '. >= ../lower-port' {
          error-message
            "The upper-port number must be greater than
             or equal to the lower-port number.";
        }
        description
          "Upper port number of the port range.";
      }
    }
    leaf-list protocol {
      type uint8;
      description
        "Identifies the target protocol number.

         Values are taken from the IANA protocol registry:
         https://www.iana.org/assignments/protocol-numbers/

         For example, 6 for TCP or 17 for UDP.";
    }
    leaf-list fqdn {
      type inet:domain-name;
      description
        "FQDN identifying the target.";
    }
    leaf-list uri {
      type inet:uri;
      description
        "URI identifying the target.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces/acl:ace"
        + "/acl:matches" {
    description
      "Add a new match types.";
    choice payload {
      description
        "Match a prefix pattern.";
      container prefix-pattern {
        if-feature "match-on-payload";
        description
          "Rule to perform payload-based match.";
        uses payload;
      }
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l2" {
    description
      "Handle the augmentation of MAC VLAN Filter.";
    container vlan-filter {
      if-feature "match-on-vlan-filter";
      description
        "Indicates how to handle MAC VLANs.";
      leaf frame-type {
        type string;
        description
          "Entering the frame type allows the
           filter to match a specific type of frame format";
      }
      choice vlan-type {
        description
          "vlan definition from range or operator.";
        case range {
          leaf lower-vlan {
            type uint16;
            must '. <= ../upper-vlan' {
              error-message
                "The lower-vlan must be less than or equal to
                 the upper-vlan.";
            }
            mandatory true;
            description
              "Lower boundary for a vlan.";
          }
          leaf upper-vlan {
            type uint16;
            mandatory true;
            description
              "Upper boundary for a vlan.";
          }
        }
        case operator {
          leaf operator {
            type packet-fields:operator;
            default "eq";
            description
              "Operator to be applied on the vlan below.";
          }
          leaf-list vlan {
            type uint16;
            description
              "vlan number along with the operator on which to
               match.";
          }
        }
      }
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l2" {
    description
      "Handle the augmentation of ISID Filter.";
    container isid-filter {
      if-feature "match-on-isid-filter";
      description
        "Indicates how to handle ISID filters.
         The I-component is responsible for mapping customer
         Ethernet traffic to the appropriate ISID.";
      choice isid-type {
        description
          "ISID definition from range or operator.";
        case range {
          leaf lower-isid {
            type uint16;
            must '. <= ../upper-isid' {
              error-message
                "The lower-vlan must be less than or equal to
                 the upper-isid.";
            }
            mandatory true;
            description
              "Lower boundary for a ISID.";
          }
          leaf upper-isid {
            type uint16;
            mandatory true;
            description
              "Upper boundary for a ISID.";
          }
        }
        case operator {
          leaf operator {
            type packet-fields:operator;
            default "eq";
            description
              "Operator to be applied on the ISID below.";
          }
          leaf-list isid {
            type uint16;
            description
              "ISID number along with the operator on which to
               match.";
          }
        }
      }
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l3/acl:ipv4" {
    description
      "Handle non-initial and initial fragments for IPv4 packets.";
    container ipv4-fragment {
      description
        "Indicates how to handle IPv4 fragments.";
      uses fragment-fields;
    }
    leaf source-ipv4-prefix-list {
      type ipv4-prefix-set-ref;
      description
        "A reference to an IPv4 prefix list to match the source
         address.";
    }
    leaf destination-ipv4-prefix-list {
      type ipv4-prefix-set-ref;
      description
        "A reference to a prefix list to match the destination
         address.";
    }
    leaf next-header-set {
      type protocol-set-ref;
      description
        "A reference to a protocol set to match the next-header
         field.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l3/acl:ipv6" {
    description
      "Handles non-initial and initial fragments for IPv6 packets.";
    container ipv6-fragment {
      description
        "Indicates how to handle IPv6 fragments.";
      uses fragment-fields;
    }
    leaf source-ipv6-prefix-list {
      type ipv6-prefix-set-ref;
      description
        "A reference to a prefix list to match the source address.";
    }
    leaf destination-ipv6-prefix-list {
      type ipv6-prefix-set-ref;
      description
        "A reference to a prefix list to match the destination
         address.";
    }
    leaf protocol-set {
      type protocol-set-ref;
      description
        "A reference to a protocol set to match the protocol field.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l4/acl:tcp" {
    description
      "Handles TCP flags and port sets.";
    container flags-bitmask {
      description
        "Indicates how to handle TCP flags.";
      uses tcp-flags;
    }
    leaf source-tcp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the source port.";
    }
    leaf destination-tcp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the destination port.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l4/acl:udp" {
    description
      "Handle UDP port sets.";
    leaf source-udp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the source port.";
    }
    leaf destination-udp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the destination port.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l4/acl:icmp" {
    description
      "Handle ICMP type sets.";
    leaf icmp-set {
      type icmp-type-set-ref;
      description
        "A reference to an ICMP type set to match the ICMP type
         field.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:actions" {
    description
      "Rate-limit action.";
    leaf rate-limit {
      when "../acl:forwarding = 'acl:accept'" {
        description
          "Rate-limit valid only when accept action is used.";
      }
      type decimal64 {
        fraction-digits 2;
      }
      units "bytes per second";
      description
        "Indicates a rate-limit for the matched traffic.";
    }
  }

  container defined-sets {
    description
      "Predefined sets of attributes used in policy match
       statements.";
    container ipv4-prefix-sets {
      description
        "Data definitions for a list of IPv4 or IPv6
         prefixes which are matched as part of a policy.";
      list prefix-set {
        key "name";
        description
          "List of the defined prefix sets.";
        leaf name {
          type string;
          description
            "Name of the prefix set -- this is used as a label to
             reference the set in match conditions.";
        }
        leaf description {
          type string;
          description
            "Defined Set description.";
        }
        leaf-list prefix {
          type inet:ipv4-prefix;
          description
            "List of IPv4 prefixes to be used in match
             conditions.";
        }
      }
    }
    container ipv6-prefix-sets {
      description
        "Data definitions for a list of IPv6 prefixes which are
         matched as part of a policy.";
      list prefix-set {
        key "name";
        description
          "List of the defined prefix sets.";
        leaf name {
          type string;
          description
            "Name of the prefix set -- this is used as a label to
             reference the set in match conditions.";
        }
        leaf description {
          type string;
          description
            "A textual description of the prefix list.";
        }
        leaf-list prefix {
          type inet:ipv6-prefix;
          description
            "List of IPv6 prefixes to be used in match conditions.";
        }
      }
    }
    container port-sets {
      description
        "Data definitions for a list of ports which can
         be matched in policies.";
      list port-set {
        key "name";
        description
          "List of port set definitions.";
        leaf name {
          type string;
          description
            "Name of the port set -- this is used as a label to
             reference the set in match conditions.";
        }
        list port {
          key "id";
          description
            "Port numbers along with the operator on which to
             match.";
          leaf id {
            type string;
            description
              "Identifier of the list of port numbers.";
          }
          choice port {
            description
              "Choice of specifying the port number or referring to a
               group of port numbers.";
            container port-range-or-operator {
              description
                "Indicates a set of ports.";
              uses packet-fields:port-range-or-operator;
            }
          }
        }
      }
    }
    container protocol-sets {
      description
        "Data definitions for a list of protocols which can be matched
         in policies.";
      list protocol-set {
        key "name";
        description
          "List of protocol set definitions.";
        leaf name {
          type string;
          description
            "Name of the protocols set -- this is used as a label to
             reference the set in match conditions.";
        }
        leaf-list protocol {
          type union {
            type uint8;
            type string;
          }
          description
            "Value of the protocol set.";
          //Check if we can reuse an IANA-maintained module
        }
      }
    }
    container icmp-type-sets {
      description
        "Data definitions for a list of ICMP types which can be
         matched in policies.";
      list icmp-type-set {
        key "name";
        description
          "List of ICMP type set definitions.";
        leaf name {
          type string;
          description
            "Name of the ICMP type set -- this is used as a label to
             reference the set in match conditions.";
        }
        list types {
          key "type";
          description
            "Includes a list of ICMP types.";
          uses packet-fields:acl-icmp-header-fields;
        }
      }
    }
  }
  container aliases {
    description
      "Top-levl container for aliases.";
    list alias {
      key "name";
      description
        "List of aliases.";
      leaf name {
        type string;
        description
          "The name of the alias.";
      }
      uses alias;
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The YANG modules specified in this document define a schema for data
 that is designed to be accessed via network management protocol such
 as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  The lowest NETCONF layer
 is the secure transport layer, and the mandatory-to-implement secure
 transport is Secure Shell (SSH) <xref target="RFC6242"/>.  The lowest RESTCONF layer
 is HTTPS, and the mandatory-to-implement secure transport is TLS
 <xref target="RFC8446"/>.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.</t>
      <t>There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., config true, which is the default). These data nodes may be considered sensitive or vulnerable in some network environments. Write operations (e.g., edit-config) to these data nodes without proper protection can have a negative effect on network operations. These are the subtrees and data nodes and their sensitivity/vulnerability:</t>
      <ul spacing="normal">
        <li>TBC</li>
      </ul>
      <t>Some of the readable data nodes in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. These are the subtrees and data nodes and their sensitivity/vulnerability:</t>
      <ul spacing="normal">
        <li>TBC</li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="uri-registration">
        <name>URI Registration</name>
        <t>This document requests IANA to register the following URIs in the "ns"
   subregistry within the "IETF XML Registry" <xref target="RFC3688"/>:</t>
        <artwork><![CDATA[
         URI: urn:ietf:params:xml:ns:yang:ietf-acl-enh
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.

         URI: urn:ietf:params:xml:ns:yang:iana-icmp-types
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="yang-module-name-registration">
        <name>YANG Module Name Registration</name>
        <t>This document requests IANA to register the following YANG modules in
   the "YANG Module Names" subregistry <xref target="RFC6020"/> within the "YANG
   Parameters" registry.</t>
        <artwork><![CDATA[
         name: ietf-acl-enh
         namespace: urn:ietf:params:xml:ns:yang:ietf-acl-enh
         maintained by IANA: N
         prefix: acl-enh
         reference: RFC XXXX

         name: ietf-icmp-types
         namespace: urn:ietf:params:xml:ns:yang:iana-icmp-types
         maintained by IANA: Y
         prefix: iana-icmp-types
         reference: RFC XXXX
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC8519">
          <front>
            <title>YANG Data Model for Network Access Control Lists (ACLs)</title>
            <author fullname="M. Jethanandani" initials="M." surname="Jethanandani">
              <organization/>
            </author>
            <author fullname="S. Agarwal" initials="S." surname="Agarwal">
              <organization/>
            </author>
            <author fullname="L. Huang" initials="L." surname="Huang">
              <organization/>
            </author>
            <author fullname="D. Blair" initials="D." surname="Blair">
              <organization/>
            </author>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document defines a data model for Access Control Lists (ACLs). An ACL is a user-ordered set of rules used to configure the forwarding behavior in a device.  Each rule is used to find a match on a packet and define actions that will be performed on the packet.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8519"/>
          <seriesInfo name="DOI" value="10.17487/RFC8519"/>
        </reference>
        <reference anchor="RFC8956">
          <front>
            <title>Dissemination of Flow Specification Rules for IPv6</title>
            <author fullname="C. Loibl" initials="C." role="editor" surname="Loibl">
              <organization/>
            </author>
            <author fullname="R. Raszuk" initials="R." role="editor" surname="Raszuk">
              <organization/>
            </author>
            <author fullname="S. Hares" initials="S." role="editor" surname="Hares">
              <organization/>
            </author>
            <date month="December" year="2020"/>
            <abstract>
              <t>"Dissemination of Flow Specification Rules" (RFC 8955) provides a Border Gateway Protocol (BGP) extension for the propagation of traffic flow information for the purpose of rate limiting or filtering IPv4 protocol data packets. </t>
              <t>This document extends RFC 8955 with IPv6 functionality. It also updates RFC 8955 by changing the IANA Flow Spec Component Types registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8956"/>
          <seriesInfo name="DOI" value="10.17487/RFC8956"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols.  This document describes the syntax and semantics of version 1.1 of the YANG language.  YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification.  There are a small number of backward incompatibilities from YANG version 1.  This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC7209">
          <front>
            <title>Requirements for Ethernet VPN (EVPN)</title>
            <author fullname="A. Sajassi" initials="A." surname="Sajassi">
              <organization/>
            </author>
            <author fullname="R. Aggarwal" initials="R." surname="Aggarwal">
              <organization/>
            </author>
            <author fullname="J. Uttaro" initials="J." surname="Uttaro">
              <organization/>
            </author>
            <author fullname="N. Bitar" initials="N." surname="Bitar">
              <organization/>
            </author>
            <author fullname="W. Henderickx" initials="W." surname="Henderickx">
              <organization/>
            </author>
            <author fullname="A. Isaac" initials="A." surname="Isaac">
              <organization/>
            </author>
            <date month="May" year="2014"/>
            <abstract>
              <t>The widespread adoption of Ethernet L2VPN services and the advent of new applications for the technology (e.g., data center interconnect) have culminated in a new set of requirements that are not readily addressable by the current Virtual Private LAN Service (VPLS) solution.  In particular, multihoming with all-active forwarding is not supported, and there's no existing solution to leverage Multipoint-to-Multipoint (MP2MP) Label Switched Paths (LSPs) for optimizing the delivery of multi-destination frames.  Furthermore, the provisioning of VPLS, even in the context of BGP-based auto-discovery, requires network operators to specify various network parameters on top of the access configuration.  This document specifies the requirements for an Ethernet VPN (EVPN) solution, which addresses the above issues.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7209"/>
          <seriesInfo name="DOI" value="10.17487/RFC7209"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices.  It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages.  The NETCONF protocol operations are realized as remote procedure calls (RPCs).  This document obsoletes RFC 4741.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem.  This document obsoletes RFC 4742.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability.  There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.  This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC9132">
          <front>
            <title>Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal Channel Specification</title>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair">
              <organization/>
            </author>
            <author fullname="J. Shallow" initials="J." surname="Shallow">
              <organization/>
            </author>
            <author fullname="T. Reddy.K" initials="T." surname="Reddy.K">
              <organization/>
            </author>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document specifies the Distributed Denial-of-Service Open Threat Signaling (DOTS) signal channel, a protocol for signaling the need for protection against Distributed Denial-of-Service (DDoS) attacks to a server capable of enabling network traffic mitigation on behalf of the requesting client.</t>
              <t>A companion document defines the DOTS data channel, a separate reliable communication layer for DOTS management and configuration purposes.</t>
              <t>This document obsoletes RFC 8782.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9132"/>
          <seriesInfo name="DOI" value="10.17487/RFC9132"/>
        </reference>
        <reference anchor="RFC8955">
          <front>
            <title>Dissemination of Flow Specification Rules</title>
            <author fullname="C. Loibl" initials="C." surname="Loibl">
              <organization/>
            </author>
            <author fullname="S. Hares" initials="S." surname="Hares">
              <organization/>
            </author>
            <author fullname="R. Raszuk" initials="R." surname="Raszuk">
              <organization/>
            </author>
            <author fullname="D. McPherson" initials="D." surname="McPherson">
              <organization/>
            </author>
            <author fullname="M. Bacher" initials="M." surname="Bacher">
              <organization/>
            </author>
            <date month="December" year="2020"/>
            <abstract>
              <t>This document defines a Border Gateway Protocol Network Layer Reachability Information (BGP NLRI) encoding format that can be used to distribute (intra-domain and inter-domain) traffic Flow Specifications for IPv4 unicast and IPv4 BGP/MPLS VPN services. This allows the routing system to propagate information regarding more specific components of the traffic aggregate defined by an IP destination prefix. </t>
              <t>It also specifies BGP Extended Community encoding formats, which can be used to propagate Traffic Filtering Actions along with the Flow Specification NLRI.  Those Traffic Filtering Actions encode actions a routing system can take if the packet matches the Flow Specification.</t>
              <t> This document obsoletes both RFC 5575 and RFC 7674.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8955"/>
          <seriesInfo name="DOI" value="10.17487/RFC8955"/>
        </reference>
        <reference anchor="I-D.boucadair-netmod-iana-registries">
          <front>
            <title>Recommendations for Creating IANA-Maintained YANG Modules</title>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <date day="20" month="January" year="2023"/>
            <abstract>
              <t>   This document provides a set of guidelines for YANG module authors
   related to the design of IANA-maintained modules.  These guidelines
   are meant to leverage existing IANA registries and use YANG as
   another format to present the content of these registries when
   appropriate.

   This document updates RFC 8407 by providing additional guidelines for
   IANA-maintained modules.  Also, this document updates RFC 8126 by
   providing additional guidelines for writing the IANA considerations
   for RFCs that specify IANA-maintained modules.  This document does
   not change anything written in RFC 8407 and RFC 8126.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-boucadair-netmod-iana-registries-07"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams.  The purpose of this document is to provide a single location for this definition.  This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
      </references>
    </references>
    <section anchor="template">
      <name>XLTS Template to Generate The ICMP Type IANA-Maintained Module</name>
      <sourcecode markers="true"><![CDATA[

<?xml version="1.0" encoding="utf-8"?>
<stylesheet
    xmlns="http://www.w3.org/1999/XSL/Transform"
    xmlns:html="http://www.w3.org/1999/xhtml"
    xmlns:iana="http://www.iana.org/assignments"
    xmlns:yin="urn:ietf:params:xml:ns:yang:yin:1"
    version="1.0">
  <import href="../../../xslt/iana-yinx.xsl"/>
  <output method="xml" encoding="utf-8"/>
  <strip-space elements="*"/>

  <template match="iana:registry[@id='icmp-parameters-types']">
    <element name="yin:typedef">
      <attribute name="name">icmp-type-name</attribute>
      <element name="yin:type">
        <attribute name="name">enumeration</attribute>
        <apply-templates
            select="iana:record[not(iana:description = 'Unassigned' or
                    starts-with(iana:description, 'Reserved') or 
                    starts-with(iana:description, 'RFC3692')) or 
                    contains(iana:description, 'experimental')]"/>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This enumeration type defines mnemonic names and
          corresponding numeric values of ICMP types.
        </element>
      </element>
      <element name="yin:reference">
        <element name="yin:text">
          RFC 2708: IANA Allocation Guidelines For Values In
                    the Internet Protocol and Related Headers
        </element>
      </element>
    </element>
    <element name="yin:typedef">
      <attribute name="name">icmp-type</attribute>
      <element name="yin:type">
        <attribute name="name">union</attribute>
        <element name="yin:type">
          <attribute name="name">uint8/</attribute>
        </element>
        <element name="yin:type">
          <attribute name="name">icmp-type-name</attribute>
        </element>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This type allows reference to an ICMP type using either
          the assigned mnemonic name or numeric value.
        </element>
      </element>
    </element>
  </template>

  <template match="iana:record">
    <call-template name="enum">
      <with-param name="id">
        <choose>
          <when test="contains(iana:description, '(Deprecated)')">
            <value-of select="translate(normalize-space(substring-before(iana:description, 
                  '(Deprecated)')),' ','')"/>
          </when>
          <otherwise>
            <value-of select="translate(normalize-space(iana:description),' ','')"/>
          </otherwise>
        </choose>
      </with-param>
      <with-param name="deprecated"
                  select="contains(iana:description, '(Deprecated)')"/>
    </call-template>
  </template>

</stylesheet>

]]></sourcecode>
    </section>
    <section anchor="iana-icmp">
      <name>Initial Version of the The ICMP Type IANA-Maintained Module</name>
      <sourcecode markers="true"><![CDATA[ file iana-icmp-types@2020-09-25.yang

module iana-icmp-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-icmp-types";
  prefix iana-icmp-types;

  organization
    "Internet Assigned Numbers Authority (IANA)";

  contact
    "Internet Assigned Numbers Authority

     ICANN
     12025 Waterfront Drive, Suite 300
     Los Angeles, CA 90094
     

     Tel: +1 424 254 5300

     <mailto:iana@iana.org>";

  description
    "This YANG module translates IANA registry 'ICMP Type Numbers' to
     YANG derived types.

     Copyright (c) 2023 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module was generated from the
     corresponding IANA registry using an XSLT stylesheet from the
     'iana-yang' project (https://github.com/llhotka/iana-yang).";

  reference
    "Internet Control Message Protocol (ICMP) Parameters
     (https://www.iana.org/assignments/icmp-parameters/)";

  revision 2020-09-25 {
    description
      "Current revision as of the revision date specified in the XML
       representation of the registry page.";
    reference
      "https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml";
  }

  /* Typedefs */

  typedef icmp-type-name {
    type enumeration {
      enum EchoReply {
        value 0;
        description
          "Echo Reply";
        reference
          "RFC 792";
      }
      enum DestinationUnreachable {
        value 3;
        description
          "Destination Unreachable";
        reference
          "RFC 792";
      }
      enum SourceQuench {
        value 4;
        status deprecated;
        description
          "Source Quench (Deprecated)";
        reference
          "- RFC 792
           - RFC 6633";
      }
      enum Redirect {
        value 5;
        description
          "Redirect";
        reference
          "RFC 792";
      }
      enum AlternateHostAddress {
        value 6;
        status deprecated;
        description
          "Alternate Host Address (Deprecated)";
        reference
          "RFC 6918";
      }
      enum Echo {
        value 8;
        description
          "Echo";
        reference
          "RFC 792";
      }
      enum RouterAdvertisement {
        value 9;
        description
          "Router Advertisement";
        reference
          "RFC 1256";
      }
      enum RouterSolicitation {
        value 10;
        description
          "Router Solicitation";
        reference
          "RFC 1256";
      }
      enum TimeExceeded {
        value 11;
        description
          "Time Exceeded";
        reference
          "RFC 792";
      }
      enum ParameterProblem {
        value 12;
        description
          "Parameter Problem";
        reference
          "RFC 792";
      }
      enum Timestamp {
        value 13;
        description
          "Timestamp";
        reference
          "RFC 792";
      }
      enum TimestampReply {
        value 14;
        description
          "Timestamp Reply";
        reference
          "RFC 792";
      }
      enum InformationRequest {
        value 15;
        status deprecated;
        description
          "Information Request (Deprecated)";
        reference
          "- RFC 792
           - RFC 6918";
      }
      enum InformationReply {
        value 16;
        status deprecated;
        description
          "Information Reply (Deprecated)";
        reference
          "- RFC 792
           - RFC 6918";
      }
      enum AddressMaskRequest {
        value 17;
        status deprecated;
        description
          "Address Mask Request (Deprecated)";
        reference
          "- RFC 950
           - RFC 6918";
      }
      enum AddressMaskReply {
        value 18;
        status deprecated;
        description
          "Address Mask Reply (Deprecated)";
        reference
          "- RFC 950
           - RFC 6918";
      }
      enum Traceroute {
        value 30;
        status deprecated;
        description
          "Traceroute (Deprecated)";
        reference
          "- RFC 1393
           - RFC 6918";
      }
      enum DatagramConversionError {
        value 31;
        status deprecated;
        description
          "Datagram Conversion Error (Deprecated)";
        reference
          "- RFC 1475
           - RFC 6918";
      }
      enum MobileHostRedirect {
        value 32;
        status deprecated;
        description
          "Mobile Host Redirect (Deprecated)";
        reference
          "- David Johnson <>
           - RFC 6918";
      }
      enum IPv6Where-Are-You {
        value 33;
        status deprecated;
        description
          "IPv6 Where-Are-You (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum IPv6I-Am-Here {
        value 34;
        status deprecated;
        description
          "IPv6 I-Am-Here (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum MobileRegistrationRequest {
        value 35;
        status deprecated;
        description
          "Mobile Registration Request (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum MobileRegistrationReply {
        value 36;
        status deprecated;
        description
          "Mobile Registration Reply (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum DomainNameRequest {
        value 37;
        status deprecated;
        description
          "Domain Name Request (Deprecated)";
        reference
          "- RFC 1788
           - RFC 6918";
      }
      enum DomainNameReply {
        value 38;
        status deprecated;
        description
          "Domain Name Reply (Deprecated)";
        reference
          "- RFC 1788
           - RFC 6918";
      }
      enum SKIP {
        value 39;
        status deprecated;
        description
          "SKIP (Deprecated)";
        reference
          "- Tom Markson <mailto:markson&osmosys.incog.com>
           - RFC 6918";
      }
      enum Photuris {
        value 40;
        description
          "Photuris";
        reference
          "RFC 2521";
      }
      enum ICMPmessagesutilizedbyexperimentalmobilityprotocolssuchasSeamoby {
        value 41;
        description
          "ICMP messages utilized by experimental mobility protocols
           such as Seamoby";
        reference
          "RFC 4065";
      }
      enum ExtendedEchoRequest {
        value 42;
        description
          "Extended Echo Request";
        reference
          "RFC 8335";
      }
      enum ExtendedEchoReply {
        value 43;
        description
          "Extended Echo Reply";
        reference
          "RFC 8335";
      }
    }
    description
      "This enumeration type defines mnemonic names and corresponding
       numeric values of ICMP types.";
    reference
      "RFC 2708: IANA Allocation Guidelines For Values In the
       Internet Protocol and Related Headers";
  }

  typedef icmp-type {
    type union {
      type uint8;
      type icmp-type-name;
    }
    description
      "This type allows reference to an ICMP type using either the
       assigned mnemonic name or numeric value.";
  }
}

]]></sourcecode>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Many thanks to Jon Shallow and Miguel Cros for the review and comments to the document, including prior to publishing the document.</t>
      <t>Thanks to Qiufang Ma and Victor Lopez for the comments and suggestions.</t>
      <t>The IANA-maintained model was generated using an XSLT stylesheet from the 'iana-yang' project (https://github.com/llhotka/iana-yang).</t>
      <t>This work is partially supported by the European Commission under   Horizon 2020 Secured autonomic traffic management for a Tera of SDN
 flows (Teraflow) project (grant agreement number 101015857).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
