<?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.35 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-acl-extensions-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.3 -->
  <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-02"/>
    <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="June" day="27"/>
    <area>Operations and Management</area>
    <workgroup>netmod</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 36?>

<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>
    <?line 44?>

<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>
      <?line -18?>

<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 anchor="match-mpls-headers">
        <name>Match MPLS Headers</name>
        <t>The ACLs could be used to create rules to match MPLS fields on a packet.</t>
      </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
    +--rw (alias)?
    |  +--rw alias-name*        alias-ref
    +--rw (mpls)?
       +--:(mpls-values)
          +--rw mpls-values {match-on-mpls}?
             +--rw traffic-class?       uint8
             +--rw label-position       identityref
             +--rw upper-label-range?   uint32
             +--rw lower-label-range?   uint32
             +--rw label-block-name     string
             +--rw ttl-value?           uint8
  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 anchor="match-mpls-headers-1">
        <name>Match MPLS Headers</name>
        <t>The ACL models can be used to create rules to match MPLS fields on a packet. The MPLS headers defined in <xref target="RFC3032"/> and <xref target="RFC5462"/> contains the following fields:</t>
        <ul spacing="normal">
          <li>Traffic Class: 3 bits 'EXP' renamed to 'Traffic Class Field."</li>
          <li>Label Value: A 20-bit field that carries the actual value of the MPLS Label.</li>
          <li>TTL: An eight-bit field that is used to encode a time-to-live value.</li>
        </ul>
        <t>The structure of the MPLS ACL subtree is shown in <xref target="example_8"/>:</t>
        <figure anchor="example_8">
          <name>MPLS Header Match Subtree</name>
          <artwork><![CDATA[
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches:
    ...
    +--rw (mpls)?
       +--:(mpls-values)
          +--rw mpls-values {match-on-mpls}?
             +--rw traffic-class?       uint8
             +--rw label-position       identityref
             +--rw upper-label-range?   uint32
             +--rw lower-label-range?   uint32
             +--rw label-block-name     string
             +--rw ttl-value?           uint8
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="yang-modules">
      <name>YANG Modules</name>
      <section anchor="enhanced-acl-1">
        <name>Enhanced ACL</name>
        <t>This model imports types from <xref target="RFC6991"/>, <xref target="RFC8519"/>, and <xref target="RFC8294"/>.</t>
        <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";
  }

  import ietf-routing-types { 
    prefix rt-types;
    reference
      "RFC 8294: Common YANG Data Types for the Routing Area";
    }

  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.";
  }

  feature match-on-alias {
    description
      "Match based on aliases.";
  }

  feature match-on-mpls {
    description
      "Match based on MPLS headers.";
  }

  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";
  }

  identity mpls-acl-type {
    base acl:acl-base;
    description
      "An ACL that matches on fields from the MPLS header.";
  }

  identity label-position {
    description
      "Base identity for deriving MPLS label position.";
  }

  identity top {
    base label-position;
    description
      "Top of the label stack.";
  }

  identity bottom {
    base label-position;
    description
      "Bottom of the label stack.";
  }

  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.";
  }

  typedef alias-ref {
    type leafref {
      path "/acl-enh:aliases/acl-enh:alias/acl-enh:name";
    }
    description
      "Defines a reference to an alias.";
  }

  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 mpls-match-parameters-config {
  description
    "Parameters for the configuration of MPLS match rules.";

  leaf traffic-class {
    type uint8 {
      range "0..7";
    }
    description
      "The value of the MPLS traffic class (TC) bits,
       formerly known as the EXP bits.";
  }

  leaf label-position {
    type identityref {
      base label-position;
    }
    description 
      "Position of the label";
  }

  leaf upper-label-range {
    type rt-types:mpls-label;
    description 
      "Match MPLS label value on the MPLS header.
       The usage of this field indicated the upper 
       range value in the top of the stack.
       This label value does not include the
       encodings of Traffic Class and TTL.";
     reference
       "RFC 3032: MPLS Label Stack Encoding";
  }
    
  leaf lower-label-range {
    type rt-types:mpls-label;
    description 
      "Match MPLS label value on the MPLS header.
       The usage of this field indicated the lower 
       range value in the top of the stack. 
       This label value does not include the
       encodings of Traffic Class and TTL.";
     reference
       "RFC 3032: MPLS Label Stack Encoding";
  }

  leaf label-block-name {
    type string;
    description 
    "Reference to a label block predefiend in the
     implementation.";
  }
    
  leaf ttl-value {
    type uint8;
    description 
      "Time-to-live MPLS packet value match.";
    reference
      "RFC 3032: MPLS Label Stack Encoding";
    }
  }

  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;
      }
    }
    choice alias {
      description
        "Match on aliases.";
      leaf-list alias-name {
        type alias-ref;
        description
          "A set of aliases.";
      }
    }
    choice mpls {
      container mpls-values {
        if-feature "match-on-mpls";
        uses mpls-match-parameters-config;
        description
          "Rule set that matches MPLS headers.";
      }
      description
        "Match MPLS headers, for example, label values";          
    } 
  }

  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"/>
            <author fullname="S. Agarwal" initials="S." surname="Agarwal"/>
            <author fullname="L. Huang" initials="L." surname="Huang"/>
            <author fullname="D. Blair" initials="D." surname="Blair"/>
            <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"/>
            <author fullname="R. Raszuk" initials="R." role="editor" surname="Raszuk"/>
            <author fullname="S. Hares" initials="S." role="editor" surname="Hares"/>
            <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"/>
            <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"/>
            <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"/>
            <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"/>
            <author fullname="R. Aggarwal" initials="R." surname="Aggarwal"/>
            <author fullname="J. Uttaro" initials="J." surname="Uttaro"/>
            <author fullname="N. Bitar" initials="N." surname="Bitar"/>
            <author fullname="W. Henderickx" initials="W." surname="Henderickx"/>
            <author fullname="A. Isaac" initials="A." surname="Isaac"/>
            <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="RFC3032">
          <front>
            <title>MPLS Label Stack Encoding</title>
            <author fullname="E. Rosen" initials="E." surname="Rosen"/>
            <author fullname="D. Tappan" initials="D." surname="Tappan"/>
            <author fullname="G. Fedorkow" initials="G." surname="Fedorkow"/>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <author fullname="D. Farinacci" initials="D." surname="Farinacci"/>
            <author fullname="T. Li" initials="T." surname="Li"/>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <date month="January" year="2001"/>
            <abstract>
              <t>This document specifies the encoding to be used by an LSR in order to transmit labeled packets on Point-to-Point Protocol (PPP) data links, on LAN data links, and possibly on other data links as well.  This document also specifies rules and procedures for processing the various fields of the label stack encoding. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3032"/>
          <seriesInfo name="DOI" value="10.17487/RFC3032"/>
        </reference>
        <reference anchor="RFC5462">
          <front>
            <title>Multiprotocol Label Switching (MPLS) Label Stack Entry: "EXP" Field Renamed to "Traffic Class" Field</title>
            <author fullname="L. Andersson" initials="L." surname="Andersson"/>
            <author fullname="R. Asati" initials="R." surname="Asati"/>
            <date month="February" year="2009"/>
            <abstract>
              <t>The early Multiprotocol Label Switching (MPLS) documents defined the form of the MPLS label stack entry. This includes a three-bit field called the "EXP field". The exact use of this field was not defined by these documents, except to state that it was to be "reserved for experimental use".</t>
              <t>Although the intended use of the EXP field was as a "Class of Service" (CoS) field, it was not named a CoS field by these early documents because the use of such a CoS field was not considered to be sufficiently defined. Today a number of standards documents define its usage as a CoS field.</t>
              <t>To avoid misunderstanding about how this field may be used, it has become increasingly necessary to rename this field. This document changes the name of the field to the "Traffic Class field" ("TC field"). In doing so, it also updates documents that define the current use of the EXP field. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5462"/>
          <seriesInfo name="DOI" value="10.17487/RFC5462"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language.  This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC8294">
          <front>
            <title>Common YANG Data Types for the Routing Area</title>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <author fullname="Y. Qu" initials="Y." surname="Qu"/>
            <author fullname="A. Lindem" initials="A." surname="Lindem"/>
            <author fullname="C. Hopps" initials="C." surname="Hopps"/>
            <author fullname="L. Berger" initials="L." surname="Berger"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>This document defines a collection of common data types using the YANG data modeling language.  These derived common types are designed to be imported by other modules defined in the routing area.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8294"/>
          <seriesInfo name="DOI" value="10.17487/RFC8294"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <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"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <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"/>
            <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"/>
            <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"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <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"/>
            <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"/>
            <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"/>
            <author fullname="J. Shallow" initials="J." surname="Shallow"/>
            <author fullname="T. Reddy.K" initials="T." surname="Reddy.K"/>
            <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"/>
            <author fullname="S. Hares" initials="S." surname="Hares"/>
            <author fullname="R. Raszuk" initials="R." surname="Raszuk"/>
            <author fullname="D. McPherson" initials="D." surname="McPherson"/>
            <author fullname="M. Bacher" initials="M." surname="Bacher"/>
            <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"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <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>
    <?line 1848?>

<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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
B7IJ4S1KEAEA

-->

</rfc>
