<?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.7.4 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-acl-extensions-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.0 -->
  <front>
    <title abbrev="Enhanced ACLs">Extensions to the Access Control Lists (ACLs) YANG Model</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-acl-extensions-04"/>
    <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="December" day="19"/>
    <area>Operations and Management</area>
    <workgroup>netmod</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 53?>

<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 IANA-maintained modules for ICMP types and IPv6 extension headers.</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 61?>

<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 specifies an enhanced ACL
structure (<xref target="sec-module"/>). 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 (<xref target="sec-module"/>) 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 enhanced ACL module (<xref target="sec-module"/>) conforms to the Network
Management Datastore Architecture (NMDA) defined in <xref target="RFC8342"/>.</t>
      <t>The document also defines IANA-maintained modules for ICMP types and IPv6 extension headers. The design of the modules adheres to the recommendations
in <xref target="I-D.ietf-netmod-rfc8407bis"/>. The templates to generate the modules is available at <xref target="template"/>, <xref target="v6-template"/>, and <xref target="iana-ipv6-ext-template"/>. Readers should refer to the IANA
websites "IANA_ICMPv4_YANG_URL", "IANA_ICMPv6_YANG_URL", and "IANA_IPV6_YANG_URL" to retrieve the latest version of these IANA-maintained modules.</t>
      <section anchor="editorial-note-to-be-removed-by-rfc-editor">
        <name>Editorial Note (To be removed by RFC Editor)</name>
        <t>Note to the RFC Editor: This section is to be removed prior to publication.</t>
        <t>This document contains placeholder values that need to be replaced with finalized values at the time of publication. This note summarizes all of the substitutions that are needed.</t>
        <t>(1) Please apply the following replacements:</t>
        <t>XXXX --&gt; the assigned RFC number for this I-D
2022-10-24 --&gt; the actual date of the publication of this document</t>
        <t>(2) The modules are provided in <xref target="iana-icmp"/>, <xref target="iana-icmpv6"/>, and <xref target="iana-ipv6-ext"/> for the users convenience before publication as RFC. Please removed these appendices from the final RFC.</t>
        <t>(3) Please update  the following references:</t>
        <ul spacing="normal">
          <li>
            <t>IANA_ICMPv4_YANG_URL --&gt; The URL to retrieve the latest version of the IANA-maintained ICMPv4 module.</t>
          </li>
          <li>
            <t>IANA_ICMPv6_YANG_URL --&gt; The URL to retrieve the latest version of the IANA-maintained ICMPv6 module.</t>
          </li>
          <li>
            <t>IANA_IPV6_YANG_URL --&gt; The URL to retrieve the latest version of the IPv6 Extension Header Types IANA module.</t>
          </li>
        </ul>
      </section>
    </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="overall-structure-of-the-enhanced-acl-module">
      <name>Overall Structure of The Enhanced ACL Module</name>
      <section anchor="tree-structure">
        <name>Tree Structure</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 icmpv4-type-sets
  |  |  +--rw icmpv4-type-set* [name]
  |  |     +--rw name     string
  |  |     +--rw types* [type]
  |  |        +--rw type              iana-icmpv4-types:icmpv4-type
  |  |        +--rw code?             uint8
  |  |        +--rw rest-of-header?   binary
  |  +--rw icmpv6-type-sets
  |     +--rw icmpv6-type-set* [name]
  |        +--rw name     string
  |        +--rw types* [type]
  |           +--rw type              iana-icmpv6-types:icmpv6-type
  |           +--rw code?             uint8
  |           +--rw rest-of-header?   binary
  +--rw aliases
     +--rw alias* [name]
        +--rw name          string
        +--rw vlan*         uint16
        +--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)?
    |  +--:(alias-name)
    |     +--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?   rt-types:mpls-label
             +--rw lower-label-range?   rt-types:mpls-label
             +--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
    +--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/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/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
    +--rw extension-header?
            iana-ipv6-ext-types:ipv6-extension-header-type
  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 icmpv4-set?   icmpv4-type-set-ref
    +--rw icmpv6-set?   icmpv6-type-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:actions:
    +--rw log-action
    |  +--rw log-type?   identityref
    |  +--rw log-id?     string
    +--rw counter-action
    |  +--rw counter-type?   identityref
    |  +--rw counter-name*   string
    +--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>
            <dl>
              <dt>IPv4 prefix set:</dt>
              <dd>
                <t>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.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>IPv6 prefix set:</dt>
              <dd>
                <t>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.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Port sets:</dt>
              <dd>
                <t>It contains a list of port numbers to be used in TCP/UDP entries. The port numbers can be individual port numbers, a range of ports, and an operation.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Protocol sets:</dt>
              <dd>
                <t>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).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>ICMP sets:</dt>
              <dd>
                <t>It contains a list of ICMPv4 or ICMPv6 types, each of them identified by a type value, optionally the code and the rest of the header.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Aliases:</dt>
              <dd>
                <t>An alias is defined by a combination of various parameters (e.g., IP prefix, protocol, port number, or VLAN). Sets of aliases can be defined and referred to in match criteria.</t>
              </dd>
            </dl>
          </li>
        </ul>
      </section>
      <section anchor="ipv6-extension-headers">
        <name>IPv6 Extension Headers</name>
        <t>The module can be used to manage ACLs that require matching against IPv6 extension headers. To that aim, a new IANA-maintained module is defined in in this document.</t>
      </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 of an ACL to Deny TCP Null Attack Messages (Request Body)</name>
          <sourcecode type="json"><![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"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </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>
            <t>"drop-all-fragments" ACE: discards all fragments.</t>
          </li>
          <li>
            <t>"allow-dns-packets" ACE: accepts DNS packets destined to 198.51.100.0/24.</t>
          </li>
        </ul>
        <figure anchor="example_2">
          <name>Example Illustrating Candidate Filtering of IPv4 Fragmented Packets (Message Body)</name>
          <sourcecode type="json"><![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"
                        }
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </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>
            <t>"drop-all-fragments" ACE: discards all fragments (including atomic fragments). That is, IPv6 packets that include a Fragment header (44) are dropped.</t>
          </li>
          <li>
            <t>"allow-dns-packets" ACE: accepts DNS packets destined to 2001:db8::/32.</t>
          </li>
        </ul>
        <figure anchor="example_3">
          <name>An Example Illustrating Filtering of IPv6 Fragmented Packets (Message Body)</name>
          <sourcecode type="json"><![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"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="payload-based-filtering">
        <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. A new feature, called "match-on-payload", is defined in the document.</t>
      </section>
      <section anchor="match-mpls-headers">
        <name>Match MPLS Headers</name>
        <t>The ACL model 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>
            <t>Traffic Class: 3 bits 'EXP' renamed to 'Traffic Class Field."</t>
          </li>
          <li>
            <t>Label Value: A 20-bit field that carries the actual value of the MPLS Label.</t>
          </li>
          <li>
            <t>TTL: An eight-bit field that is used to encode a time-to-live value.</t>
          </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 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>
          <sourcecode type="json"><![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"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </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>
          <sourcecode type="json"><![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"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="additional-actions">
        <name>Additional Actions</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>An Example of Rate-Limit Incoming TCP SYNs (Message Body).</name>
          <sourcecode type="json"><![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"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
        <t>Also, the model supports new actions to complement existing ones: Log ('log-action') and write a counter ('counter-action'). The current version of the module supports only local actions.</t>
      </section>
    </section>
    <section anchor="sec-module">
      <name>Enhanced ACL YANG Module</name>
      <t>This model imports types from <xref target="RFC6991"/>, <xref target="RFC8519"/>, and <xref target="RFC8294"/>.</t>
      <sourcecode markers="true" name="ietf-acl-enh@2022-10-24.yang"><![CDATA[
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";
  }
  import iana-icmpv4-types { 
    prefix iana-icmpv4-types;
    reference
      "RFC XXXX: Extensions to the Access Control Lists (ACLs)
                 YANG Model";
  }
  import iana-icmpv6-types { 
    prefix iana-icmpv6-types;
    reference
      "RFC XXXX: Extensions to the Access Control Lists (ACLs)
                 YANG Model";
  }
  import iana-ipv6-ext-types { 
    prefix iana-ipv6-ext-types;
    reference
      "RFC XXXX: Extensions to the Access Control Lists (ACLs)
                 YANG Model";
  }

  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 layer2 {
    base offset-type;
    description
      "The offset starts at the beginning of the Data Link layer
       header.";
  }

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

  identity log-types {
    description
      "Base identity for deriving the Log actions.";
  }

  identity local-log {
    base log-types;
    description
      "A local log is used to record the ACL results.";
  }

  identity counter-type {
    description
      "Base identity for deriving the counter actions.";
  }

  identity counter-name {
    base counter-type;
    description
      "Identity for counter name to be updated based on
        the ACL match actions.";

  }

  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 icmpv4-type-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:icmpv4-type-sets"
         + "/acl-enh:icmpv4-type-set/acl-enh:name";
    }
    description
      "Defines a reference to an ICMPv4 type set.";
  }

  typedef icmpv6-type-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:icmpv6-type-sets"
         + "/acl-enh:icmpv6-type-set/acl-enh:name";
    }
    description
      "Defines a reference to an ICMPv6 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.";
          reference
           "RFC 9293: Transmission Control Protocol (TCP),
                      Section 3.1";
        }
      }
    }
  }

  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 vlan {
      type uint16;
        description
          "VLAN of the 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.
         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.";
    }
  }

  grouping icmpv4-header-fields {
    description
      "Collection of ICMPv4 header fields that can be
       used to set up a match filter.";
    leaf type {
      type iana-icmpv4-types:icmpv4-type;
      description
        "Also known as control messages.";
      reference
        "RFC 792: Internet Control Message Protocol.";
    }
    leaf code {
      type uint8;
      description
        "ICMP subtype.";
      reference
        "RFC 792: Internet Control Message Protocol.";
    }
    leaf rest-of-header {
      type binary;
      description
        "Unbounded in length, the contents vary based on the
         ICMP type and code.";
      reference
        "RFC 792: Internet Control Message Protocol";
    }
  }

  grouping icmpv6-header-fields {
    description
      "Collection of ICMPv6 header fields that can be
       used to set up a match filter.";
    leaf type {
      type iana-icmpv6-types:icmpv6-type;
      description
        "Also known as control messages.";
      reference
        "RFC 4443: Internet Control Message Protocol (ICMPv6)
                   for Internet Protocol Version 6 (IPv6)
                   Specification.";
    }
    leaf code {
      type uint8;
      description
        "ICMP code.";
      reference
        "RFC 4443: Internet Control Message Protocol (ICMPv6)
                   for Internet Protocol Version 6 (IPv6)
                   Specification.";
    }
    leaf rest-of-header {
      type binary;
      description
        "Unbounded in length, the contents vary based on the
         ICMP type and code. Also referred to as 'Message Body'
         in ICMPv6.";
      reference
        "RFC 4443: Internet Control Message Protocol (ICMPv6)
                   for Internet Protocol Version 6 (IPv6)
                   Specification.";
    }
  }

  grouping acl-complementary-actions {
    description
      "Collection of complementary ACL actions.";


    container log-action {
      description
        "Container for defining log actions.";

      leaf log-type {
        type identityref {
          base acl-enh:log-types;
        }
        description
          "The type of log action to be performed.";
      }
      leaf log-id {
        when "derived-from-or-self(../log-type, "
           + "'acl-enh:local-log')" {
          description
            "Name of the log file updated when type is 'local-log'.";
        }
        type string;
        description
          "The name of the counter action.";
      }
    }

    container counter-action {
      description
        "Container for defining counter actions.";

      leaf counter-type {
        type identityref {
          base acl-enh:counter-type;
        }
        description
          "The type of counter action to be performed.";
      }
      leaf-list counter-name {
        when "derived-from-or-self(../counter-type, "
           + "'acl-enh:counter-name')" {
          description
            "Name for the counter or variable to update when counter-type 
            is 'counter-name'.";
        }
        type string;
        description
          "List of possible variables or counter names to
          update based on match critieria.";
      }
    }  
  }

  augment "/acl:acls/acl:acl/acl:aces/acl:ace"
        + "/acl:matches" {
    description
      "Adds a match type based on the payload.";
    choice payload {
      description
        "Matches based upon a prefix pattern.";
      container prefix-pattern {
        if-feature "match-on-payload";
        description
          "Indicates the rule to perform the payload-based match.";
        uses payload;
      }
    }
    choice alias {
      description
        "Matches based upon aliases.";
      leaf-list alias-name {
        type alias-ref;
        description
          "Indicates one or more aliases.";
      }
    }
    choice mpls {
      container mpls-values {
        if-feature "match-on-mpls";
        uses mpls-match-parameters-config;
        description
          "Provides the rule set that matches MPLS headers.";
      }
      description
        "Matches against MPLS headers, for example, label values";          
    } 
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l2" {
    description
      "Adds a match type based on MAC VLAN and ISID filters.";
    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.";
          }
        }
      }
    }
    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-isid 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/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/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.";
    }
    leaf extension-header {
       type iana-ipv6-ext-types:ipv6-extension-header-type;
       description
         "IPv6 extension header value."; 
    }
  }

  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 icmpv4-set {
      type icmpv4-type-set-ref;
      description
        "A reference to an ICMPv4 type set to match the ICMPv4 type
         field.";
    }
    leaf icmpv6-set {
      type icmpv6-type-set-ref;
      description
        "A reference to an ICMPv6 type set to match the ICMPv6 type
         field.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:actions" {
    description
      "Complementary actions including Rate-limit action.";

    uses acl-complementary-actions;

    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 icmpv4-type-sets {
      description
        "Data definitions for a list of ICMPv4 types which can be
         matched in policies.";
      list icmpv4-type-set {
        key "name";
        description
          "List of ICMP type set definitions.";
        leaf name {
          type string;
          description
            "Name of the ICMPv4 type set -- this is used as a label to
             reference the set in match conditions.";
        }
        list types {
          key "type";
          description
            "Includes a list of ICMPv4 types.";
          uses icmpv4-header-fields;
        }
      }
    }
  container icmpv6-type-sets {
      description
        "Data definitions for a list of ICMPv6 types which can be
         matched in policies.";
      list icmpv6-type-set {
        key "name";
        description
          "List of ICMP type set definitions.";
        leaf name {
          type string;
          description
            "Name of the ICMPv6 type set -- this is used as a label to
             reference the set in match conditions.";
        }
        list types {
          key "type";
          description
            "Includes a list of ICMPv6 types.";
          uses icmpv6-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 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>
      <dl>
        <dt>'defined-sets' and 'aliases':</dt>
        <dd>
          <t>These lists specify a setf of sets and aliases. Simialr to <xref target="RFC8519"/>, unauthorized write access to these
   list can allow intruders to modify the entries so as to permit
   traffic that should not be permitted, or deny traffic that should
   be permitted.  The former may result in a DoS attack, or
   compromise a device.  The latter may result in a DoS attack.</t>
        </dd>
      </dl>
      <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>
      <dl>
        <dt>'defined-sets' and 'aliases':</dt>
        <dd>
          <t>Unauthorized read access of these lists will allow
an attacker to identify the actual resources that are bound
to ACLs.</t>
        </dd>
      </dl>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="uri-registrations">
        <name>URI Registrations</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-icmpv4-types
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.

         URI: urn:ietf:params:xml:ns:yang:iana-icmpv6-types
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.

         URI: urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="yang-module-name-registrations">
        <name>YANG Module Name Registrations</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: iana-icmpv4-types
    namespace: urn:ietf:params:xml:ns:yang:iana-icmpv4-types
    maintained by IANA: Y
    prefix: iana-icmpv4-types
    reference: RFC XXXX

    name: iana-icmpv6-types
    namespace: urn:ietf:params:xml:ns:yang:iana-icmpv6-types
    maintained by IANA: Y
    prefix: iana-icmpv6-types
    reference: RFC XXXX

    name: iana-ipv6-ext-types
    namespace: urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types
    maintained by IANA: Y
    prefix: iana-ipv6-ext-types
    reference: RFC XXXX
]]></artwork>
      </section>
      <section anchor="considerations-for-iana-maintained-modules">
        <name>Considerations for IANA-Maintained Modules</name>
        <section anchor="icmpv4-types-iana-module">
          <name>ICMPv4 Types IANA Module</name>
          <t>IANA is requested to create and post
the initial version of the "iana-icmpv4-types" YANG module by
applying the XSLT stylesheet from <xref target="template"/> to the XML version of
<xref target="IANA-ICMPv4"/>.</t>
          <t>This document defines the initial version of the IANA-maintained
"iana-icmpv4-types" YANG module.  The most recent version of the YANG module
is available from the "YANG Parameters" registry
<xref target="IANA-YANG-PARAMETERS"/>.</t>
          <t>IANA is requested to add this note to the registry <xref target="IANA-YANG-PARAMETERS"/>:</t>
          <ul empty="true">
            <li>
              <t>New values must not be directly added to the "iana-icmpv4-types" YANG module.  They must instead be added to the "ICMP Type Numbers" registry <xref target="IANA-ICMPv4"/>.</t>
            </li>
          </ul>
          <t>When a value is added to the "ICMP Type Numbers" registry, a new "enum" statement
must be added to the "iana-icmpv4-types" YANG module.  The "enum" statement,
and sub-statements thereof, should be defined:</t>
          <dl>
            <dt>"enum":</dt>
            <dd>
              <t>Replicates a name from the registry.</t>
            </dd>
            <dt>"value":</dt>
            <dd>
              <t>Contains the decimal value of the IANA-assigned value.</t>
            </dd>
            <dt>"status":</dt>
            <dd>
              <t>Is included only if a registration has been deprecated
or obsoleted.  IANA "deprecated" maps to YANG status
"deprecated", and IANA "obsolete" maps to YANG status
"obsolete".</t>
            </dd>
            <dt>"description":</dt>
            <dd>
              <t>Replicates the description from the registry.</t>
            </dd>
            <dt>"reference":</dt>
            <dd>
              <t>Replicates the reference(s) from the registry with the
title of the document(s) added.</t>
            </dd>
          </dl>
          <t>Unassigned or reserved values are not present in the module.</t>
          <t>When the "iana-icmpv4-types" YANG module is updated, a new "revision"
statement with a unique revision date must be added in front of the
existing revision statements.</t>
          <t>IANA is requested to add this note to "ICMP Type Numbers" <xref target="IANA-ICMPv4"/>:</t>
          <artwork><![CDATA[
When this registry is modified, the YANG module "iana-icmpv4-types"
[IANA_ICMPv4_YANG_URL] must be updated as defined in RFC XXXX.
]]></artwork>
          <t>IANA is requested to updated the "Reference" in the "ICMP Type Numbers" registry
as follows:</t>
          <dl>
            <dt>OLD:</dt>
            <dd>
              <t><xref target="RFC2780"/></t>
            </dd>
            <dt>NEW:</dt>
            <dd>
              <t><xref target="RFC2780"/>[RFCXXXX]</t>
            </dd>
          </dl>
        </section>
        <section anchor="icmpv6-types-iana-module">
          <name>ICMPv6 Types IANA Module</name>
          <t>IANA is requested to create and post
the initial version of the "iana-icmpv6-types" YANG module by
applying the XSLT stylesheet from <xref target="v6-template"/> to the XML version of
<xref target="IANA-ICMPv4"/>.</t>
          <t>This document defines the initial version of the IANA-maintained
"iana-icmpv6-types" YANG module.  The most recent version of the YANG module
is available from the "YANG Parameters" registry
<xref target="IANA-YANG-PARAMETERS"/>.</t>
          <t>IANA is requested to add this note to the registry <xref target="IANA-YANG-PARAMETERS"/>:</t>
          <ul empty="true">
            <li>
              <t>New values must not be directly added to the "iana-icmpv6-types" YANG module. They must instead be added to the "ICMPv6 "type" Numbers" registry <xref target="IANA-ICMPv6"/>.</t>
            </li>
          </ul>
          <t>When a value is added to the "ICMPv6 "type" Numbers" registry, a new "enum" statement
must be added to the "iana-icmpv6-types" YANG module.  The "enum" statement,
and sub-statements thereof, should be defined:</t>
          <dl>
            <dt>"enum":</dt>
            <dd>
              <t>Replicates a name from the registry.</t>
            </dd>
            <dt>"value":</dt>
            <dd>
              <t>Contains the decimal value of the IANA-assigned value.</t>
            </dd>
            <dt>"status":</dt>
            <dd>
              <t>Is included only if a registration has been deprecated
or obsoleted.  IANA "deprecated" maps to YANG status
"deprecated", and IANA "obsolete" maps to YANG status
"obsolete".</t>
            </dd>
            <dt>"description":</dt>
            <dd>
              <t>Replicates the description from the registry.</t>
            </dd>
            <dt>"reference":</dt>
            <dd>
              <t>Replicates the reference(s) from the registry with the
title of the document(s) added.</t>
            </dd>
          </dl>
          <t>Unassigned or reserved values are not present in the module.</t>
          <t>When the "iana-icmpv6-types" YANG module is updated, a new "revision"
statement with a unique revision date must be added in front of the
existing revision statements.</t>
          <t>IANA is requested to add this note to "ICMPv6 "type" Numbers" <xref target="IANA-ICMPv6"/>:</t>
          <artwork><![CDATA[
When this registry is modified, the YANG module "iana-icmpv6-types"
[IANA_ICMPv6_YANG_URL] must be updated as defined in RFC XXXX.
]]></artwork>
          <t>IANA is requested to updated the "Reference" in the "ICMPv6 "type" Numbers" registry
as follows:</t>
          <dl>
            <dt>OLD:</dt>
            <dd>
              <t><xref target="RFC4443"/></t>
            </dd>
            <dt>NEW:</dt>
            <dd>
              <t><xref target="RFC4443"/>[RFCXXXX]</t>
            </dd>
          </dl>
        </section>
        <section anchor="ipv6-extension-header-types-iana-module">
          <name>IPv6 Extension Header Types IANA Module</name>
          <t>IANA is requested to create and post
the initial version of the "iana-ipv6-ext-types" YANG module by
applying the XSLT stylesheet from <xref target="iana-ipv6-ext-template"/> to the XML version of
<xref target="IANA-IPv6"/>.</t>
          <t>This document defines the initial version of the IANA-maintained
"iana-ipv6-ext-types" YANG module.  The most recent version of the YANG module
is available from the "YANG Parameters" registry
<xref target="IANA-YANG-PARAMETERS"/>.</t>
          <t>IANA is requested to add this note to the registry <xref target="IANA-YANG-PARAMETERS"/>:</t>
          <ul empty="true">
            <li>
              <t>New values must not be directly added to the "iana-ipv6-ext-types" YANG module.  They must instead be added to the "IPv6 Extension Header Types" registry <xref target="IANA-ICMPv6"/>.</t>
            </li>
          </ul>
          <t>When a value is added to the "IPv6 Extension Header Types" registry, a new "enum" statement
must be added to the "iana-ipv6-ext-types" YANG module.  The "enum" statement,
and sub-statements thereof, should be defined:</t>
          <dl>
            <dt>"enum":</dt>
            <dd>
              <t>Replicates a name from the registry.</t>
            </dd>
            <dt>"value":</dt>
            <dd>
              <t>Contains the decimal value of the IANA-assigned value.</t>
            </dd>
            <dt>"status":</dt>
            <dd>
              <t>Is included only if a registration has been deprecated
or obsoleted.  IANA "deprecated" maps to YANG status
"deprecated", and IANA "obsolete" maps to YANG status
"obsolete".</t>
            </dd>
            <dt>"description":</dt>
            <dd>
              <t>Replicates the description from the registry.</t>
            </dd>
            <dt>"reference":</dt>
            <dd>
              <t>Replicates the reference(s) from the registry with the
title of the document(s) added.</t>
            </dd>
          </dl>
          <t>Unassigned or reserved values are not present in the module.</t>
          <t>When the "iana-ipv6-ext-types" YANG module is updated, a new "revision"
statement with a unique revision date must be added in front of the
existing revision statements.</t>
          <t>IANA is requested to add this note to the "IPv6 Extension Header Types" registry <xref target="IANA-IPv6"/>:</t>
          <artwork><![CDATA[
When this registry is modified, the YANG module "iana-ipv6-ext-types"
[IANA_IPV6_YANG_URL] must be updated as defined in RFC XXXX.
]]></artwork>
          <t>IANA is requested to updated the "Reference" in the "IPv6 Extension Header Types" registry
as follows:</t>
          <dl>
            <dt>OLD:</dt>
            <dd>
              <t><xref target="RFC2780"/><xref target="RFC5237"/><xref target="RFC7045"/></t>
            </dd>
            <dt>NEW:</dt>
            <dd>
              <t><xref target="RFC2780"/><xref target="RFC5237"/><xref target="RFC7045"/>[RFCXXXX]</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-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="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </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="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="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="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 anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IANA-YANG-PARAMETERS" target="https://www.iana.org/assignments/yang-parameters">
          <front>
            <title>YANG Parameters</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA-ICMPv4" target="https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml">
          <front>
            <title>ICMP Type Numbers</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA-ICMPv6" target="https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml">
          <front>
            <title>ICMPv6 type Numbers</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA-IPv6" target="https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml">
          <front>
            <title>IPv6 Extension Header Types</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <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.ietf-netmod-rfc8407bis">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <date day="18" month="December" year="2023"/>
            <abstract>
              <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-06"/>
        </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>
        <reference anchor="RFC2780">
          <front>
            <title>IANA Allocation Guidelines For Values In the Internet Protocol and Related Headers</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <author fullname="V. Paxson" initials="V." surname="Paxson"/>
            <date month="March" year="2000"/>
            <abstract>
              <t>This memo provides guidance for the IANA to use in assigning parameters for fields in the IPv4, IPv6, ICMP, UDP and TCP protocol headers. 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="37"/>
          <seriesInfo name="RFC" value="2780"/>
          <seriesInfo name="DOI" value="10.17487/RFC2780"/>
        </reference>
        <reference anchor="RFC4443">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta"/>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol). ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="RFC5237">
          <front>
            <title>IANA Allocation Guidelines for the Protocol Field</title>
            <author fullname="J. Arkko" initials="J." surname="Arkko"/>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="February" year="2008"/>
            <abstract>
              <t>This document revises the IANA guidelines for allocating new Protocol field values in IPv4 header. It modifies the rules specified in RFC 2780 by removing the Expert Review option. The change will also affect the allocation of Next Header field values in IPv6. 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="37"/>
          <seriesInfo name="RFC" value="5237"/>
          <seriesInfo name="DOI" value="10.17487/RFC5237"/>
        </reference>
        <reference anchor="RFC7045">
          <front>
            <title>Transmission and Processing of IPv6 Extension Headers</title>
            <author fullname="B. Carpenter" initials="B." surname="Carpenter"/>
            <author fullname="S. Jiang" initials="S." surname="Jiang"/>
            <date month="December" year="2013"/>
            <abstract>
              <t>Various IPv6 extension headers have been standardised since the IPv6 standard was first published. This document updates RFC 2460 to clarify how intermediate nodes should deal with such extension headers and with any that are defined in the future. It also specifies how extension headers should be registered by IANA, with a corresponding minor update to RFC 2780.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7045"/>
          <seriesInfo name="DOI" value="10.17487/RFC7045"/>
        </reference>
      </references>
    </references>
    <?line 2065?>

<section anchor="icmpv4-types">
      <name>ICMPv4 Types</name>
      <section anchor="template">
        <name>XSLT Template to Generate The ICMPv4 Types 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">icmpv4-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 ICMPv4 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">icmpv4-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">icmpv4-type-name</attribute>
        </element>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This type allows reference to an ICMPv4 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 ICMPv4 Types IANA-Maintained Module</name>
        <sourcecode markers="true" name="iana-icmpv4-types@2020-09-25.yang"><![CDATA[

module iana-icmpv4-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-icmpv4-types";
  prefix iana-icmpv4-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) 2020 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).

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

     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 icmpv4-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 ICMPv4 types.";
    reference
      "RFC 2708: IANA Allocation Guidelines For Values In the
       Internet Protocol and Related Headers";
  }

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

]]></sourcecode>
      </section>
    </section>
    <section anchor="icmpv6-types">
      <name>ICMPv6 Types</name>
      <section anchor="v6-template">
        <name>XSLT Template to Generate The ICMPv6 Types 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='icmpv6-parameters-2']">
    <element name="yin:typedef">
      <attribute name="name">icmpv6-type-name</attribute>
      <element name="yin:type">
        <attribute name="name">enumeration</attribute>
        <apply-templates
            select="iana:record[not(iana:name = 'Unassigned' or
                    starts-with(iana:name, 'Reserved') or 
                    starts-with(iana:name, 'Private'))]"/>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This enumeration type defines mnemonic names and
          corresponding numeric values of ICMPv6 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">icmpv6-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">icmpv6-type-name</attribute>
        </element>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This type allows reference to an ICMPv6 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:name, '(Deprecated)')">
            <value-of select="translate(normalize-space(substring-before(iana:name, 
                  '(Deprecated)')),' ','')"/>
          </when>
          <otherwise>
            <value-of select="translate(normalize-space(iana:name),' ','')"/>
          </otherwise>
        </choose>
      </with-param>
      <with-param name="description">
        <value-of select="concat(iana:name, '.')"/>
      </with-param>
      <with-param name="deprecated"
                  select="contains(iana:name, '(Deprecated)')"/>
    </call-template>
  </template>

</stylesheet>

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

module iana-icmpv6-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-icmpv6-types";
  prefix iana-icmpv6-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 'ICMPv6 \"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).

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

     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 version 6 (ICMPv6) Parameters
     (https://www.iana.org/assignments/icmpv6-parameters/)";

  revision 2023-04-28 {
    description
      "Current revision as of the revision date specified in the XML
       representation of the registry page.";
    reference
      "https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xml";
  }

  /* Typedefs */

  typedef icmpv6-type-name {
    type enumeration {
      enum DestinationUnreachable {
        value 1;
        description
          "Destination Unreachable.";
        reference
          "RFC 4443";
      }
      enum PacketTooBig {
        value 2;
        description
          "Packet Too Big.";
        reference
          "RFC 4443";
      }
      enum TimeExceeded {
        value 3;
        description
          "Time Exceeded.";
        reference
          "RFC 4443";
      }
      enum ParameterProblem {
        value 4;
        description
          "Parameter Problem.";
        reference
          "RFC 4443";
      }
      enum EchoRequest {
        value 128;
        description
          "Echo Request.";
        reference
          "RFC 4443";
      }
      enum EchoReply {
        value 129;
        description
          "Echo Reply.";
        reference
          "RFC 4443";
      }
      enum MulticastListenerQuery {
        value 130;
        description
          "Multicast Listener Query.";
        reference
          "RFC 2710";
      }
      enum MulticastListenerReport {
        value 131;
        description
          "Multicast Listener Report.";
        reference
          "RFC 2710";
      }
      enum MulticastListenerDone {
        value 132;
        description
          "Multicast Listener Done.";
        reference
          "RFC 2710";
      }
      enum RouterSolicitation {
        value 133;
        description
          "Router Solicitation.";
        reference
          "RFC 4861";
      }
      enum RouterAdvertisement {
        value 134;
        description
          "Router Advertisement.";
        reference
          "RFC 4861";
      }
      enum NeighborSolicitation {
        value 135;
        description
          "Neighbor Solicitation.";
        reference
          "RFC 4861";
      }
      enum NeighborAdvertisement {
        value 136;
        description
          "Neighbor Advertisement.";
        reference
          "RFC 4861";
      }
      enum RedirectMessage {
        value 137;
        description
          "Redirect Message.";
        reference
          "RFC 4861";
      }
      enum RouterRenumbering {
        value 138;
        description
          "Router Renumbering.";
        reference
          "RFC 2894";
      }
      enum ICMPNodeInformationQuery {
        value 139;
        description
          "ICMP Node Information Query.";
        reference
          "RFC 4620";
      }
      enum ICMPNodeInformationResponse {
        value 140;
        description
          "ICMP Node Information Response.";
        reference
          "RFC 4620";
      }
      enum InverseNeighborDiscoverySolicitationMessage {
        value 141;
        description
          "Inverse Neighbor Discovery Solicitation Message.";
        reference
          "RFC 3122";
      }
      enum InverseNeighborDiscoveryAdvertisementMessage {
        value 142;
        description
          "Inverse Neighbor Discovery Advertisement Message.";
        reference
          "RFC 3122";
      }
      enum Version2MulticastListenerReport {
        value 143;
        description
          "Version 2 Multicast Listener Report.";
        reference
          "RFC 3810";
      }
      enum HomeAgentAddressDiscoveryRequestMessage {
        value 144;
        description
          "Home Agent Address Discovery Request Message.";
        reference
          "RFC 6275";
      }
      enum HomeAgentAddressDiscoveryReplyMessage {
        value 145;
        description
          "Home Agent Address Discovery Reply Message.";
        reference
          "RFC 6275";
      }
      enum MobilePrefixSolicitation {
        value 146;
        description
          "Mobile Prefix Solicitation.";
        reference
          "RFC 6275";
      }
      enum MobilePrefixAdvertisement {
        value 147;
        description
          "Mobile Prefix Advertisement.";
        reference
          "RFC 6275";
      }
      enum CertificationPathSolicitationMessage {
        value 148;
        description
          "Certification Path Solicitation Message.";
        reference
          "RFC 3971";
      }
      enum CertificationPathAdvertisementMessage {
        value 149;
        description
          "Certification Path Advertisement Message.";
        reference
          "RFC 3971";
      }
      enum ICMPmessagesutilizedbyexperimentalmobilityprotocolssuchasSeamoby {
        value 150;
        description
          "ICMP messages utilized by experimental mobility protocols
           such as Seamoby.";
        reference
          "RFC 4065";
      }
      enum MulticastRouterAdvertisement {
        value 151;
        description
          "Multicast Router Advertisement.";
        reference
          "RFC 4286";
      }
      enum MulticastRouterSolicitation {
        value 152;
        description
          "Multicast Router Solicitation.";
        reference
          "RFC 4286";
      }
      enum MulticastRouterTermination {
        value 153;
        description
          "Multicast Router Termination.";
        reference
          "RFC 4286";
      }
      enum FMIPv6Messages {
        value 154;
        description
          "FMIPv6 Messages.";
        reference
          "RFC 5568";
      }
      enum RPLControlMessage {
        value 155;
        description
          "RPL Control Message.";
        reference
          "RFC 6550";
      }
      enum ILNPv6LocatorUpdateMessage {
        value 156;
        description
          "ILNPv6 Locator Update Message.";
        reference
          "RFC 6743";
      }
      enum DuplicateAddressRequest {
        value 157;
        description
          "Duplicate Address Request.";
        reference
          "RFC 6775";
      }
      enum DuplicateAddressConfirmation {
        value 158;
        description
          "Duplicate Address Confirmation.";
        reference
          "RFC 6775";
      }
      enum MPLControlMessage {
        value 159;
        description
          "MPL Control Message.";
        reference
          "RFC 7731";
      }
      enum ExtendedEchoRequest {
        value 160;
        description
          "Extended Echo Request.";
        reference
          "RFC 8335";
      }
      enum ExtendedEchoReply {
        value 161;
        description
          "Extended Echo Reply.";
        reference
          "RFC 8335";
      }
    }
    description
      "This enumeration type defines mnemonic names and corresponding
       numeric values of ICMPv6 types.";
    reference
      "RFC 2708: IANA Allocation Guidelines For Values In the
       Internet Protocol and Related Headers";
  }

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

]]></sourcecode>
      </section>
    </section>
    <section anchor="ipv6-extension-header-types">
      <name>IPv6 Extension Header Types</name>
      <section anchor="iana-ipv6-ext-template">
        <name>XSLT Template to Generate The IPv6 Extension Header Types 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='extension-header']">
    <element name="yin:typedef">
      <attribute name="name">ipv6-extension-header-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, 'Use for experimentation and testing')) 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 IPv6 Extension header 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">ipv6-extension-header-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">ipv6-extension-header-type-name</attribute>
        </element>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This type allows reference to an IPv6 Extension header type using either
          the assigned mnemonic name or the numeric protocol number 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-ipv6-ext">
        <name>Initial Version of the The ICMPv6 Types IANA-Maintained Module</name>
        <sourcecode markers="true" name="iana-ipv6-ext-types@2023-04-28.yang"><![CDATA[

module iana-ipv6-ext-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types";
  prefix iana-ipv6-ext-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 'IPv6 Extension Header
     Types' 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 Protocol Version 6 (IPv6) Parameters
     (https://www.iana.org/assignments/ipv6-parameters/)";

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

  /* Typedefs */

  typedef ipv6-extension-header-type-name {
    type enumeration {
      enum IPv6Hop-by-HopOption {
        value 0;
        description
          "IPv6 Hop-by-Hop Option";
        reference
          "RFC 8200";
      }
      enum RoutingHeaderforIPv6 {
        value 43;
        description
          "Routing Header for IPv6";
        reference
          "- RFC 8200
           - RFC 5095";
      }
      enum FragmentHeaderforIPv6 {
        value 44;
        description
          "Fragment Header for IPv6";
        reference
          "RFC 8200";
      }
      enum EncapsulatingSecurityPayload {
        value 50;
        description
          "Encapsulating Security Payload";
        reference
          "RFC 4303";
      }
      enum AuthenticationHeader {
        value 51;
        description
          "Authentication Header";
        reference
          "RFC 4302";
      }
      enum DestinationOptionsforIPv6 {
        value 60;
        description
          "Destination Options for IPv6";
        reference
          "RFC 8200";
      }
      enum MobilityHeader {
        value 135;
        description
          "Mobility Header";
        reference
          "RFC 6275";
      }
      enum HostIdentityProtocol {
        value 139;
        description
          "Host Identity Protocol";
        reference
          "RFC 7401";
      }
      enum Shim6Protocol {
        value 140;
        description
          "Shim6 Protocol";
        reference
          "RFC 5533";
      }
    }
    description
      "This enumeration type defines mnemonic names and corresponding
       numeric values of IPv6 Extension header types.";
    reference
      "RFC 2708: IANA Allocation Guidelines For Values In the
       Internet Protocol and Related Headers";
  }

  typedef ipv6-extension-header-type {
    type union {
      type uint8;
      type ipv6-extension-header-type-name;
    }
    description
      "This type allows reference to an IPv6 Extension header type
       using either the assigned mnemonic name or the numeric
       protocol number value.";
  }
}

]]></sourcecode>
      </section>
    </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>
            <t>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.</t>
          </li>
          <li>
            <t>Devices may receive such a configuration and thus will need to
maintain it locally.</t>
          </li>
        </ul>
      </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>
            <dl>
              <dt>Prefix sets:</dt>
              <dd>
                <t>Used to create lists of IPv4 or IPv6 prefixes.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Protocol sets:</dt>
              <dd>
                <t>Used to create a list of protocols.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Port number sets:</dt>
              <dd>
                <t>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.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>ICMP sets:</dt>
              <dd>
                <t>Uses to create lists of ICMP-based filters. This applies only when the protocol is set to ICMP or ICMPv6.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t>Aliases may also be considered to manage resources that are identified by a combination of various parameters (e.g., prefix, protocol, port number, FQDN, or VLAN IDs).
Note that some aliases can be provided by decomposing them into separate sets.</t>
      </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>
            <t>An ACL name can be used at both network and device levels.</t>
          </li>
          <li>
            <t>An ACL content updated at the network level should imply
a transaction that updates the relevant content in all the nodes using this
ACL.</t>
          </li>
          <li>
            <t>ACLs defined at the device level have a local meaning for the specific node.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
        </ul>
      </section>
      <section anchor="match-mpls-headers-1">
        <name>Match MPLS Headers</name>
        <t>The ACLs could be used to create rules to match MPLS fields on a packet. <xref target="RFC8519"/> does not support such function.</t>
      </section>
    </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, Victor Lopez, Joe Clarke, and Mahesh Jethanandani for the comments and suggestions.</t>
      <t>The IANA-maintained modules were 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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
xfIHV1jkMC4mrhGmx/4i9Pci8HMVLzP0xCBKr0sgkP78bCWnDC8ihdp/J/3P
uSfyjdxUTlAAkK7Ac13aAuXE0N939P4nZtrzQz4WIL/mqU5S3HJ1ZXYgJa36
eKQLyQjMiKgg2XSCIJ4vwImDRoQyWCRArUsbqeK/EjDy79Eyt+ReKqb0doac
0ktrCfJQWv330stvwc9W/9fc539vuf8tlO9Wv6V836QjR9Jq29+hm5NDtZ5b
4Gv6KXUYZkHQcdMUVvSFrvJPpa9X0W3+DSA+7z2jSBvOfYsrFjTCdmrRgNhG
KdqQOkzzNhr6zsb+7ryP72tf1ry5r6OS9DfnUmkcxbfAcsBYMJhRHM2Kh6Dm
9F169ptT81r9SR/cO/e5b6hERjuGhriwKwZyceiBlUZZOMNcggPiDXGq5GL1
QkrV82h0tyYdyZdyqf44hSOBVOkaBX+BvtEQPoyq2bJSLVDa5dkCV5y/BqCG
wqHzLjIbhgLZ0mlig7G5v9fd3exubmx0N9a3dghd9GAMuyZ2t9uUbY2aCjiF
NZEcoDdyOAYHpqPg4eKRE9PDFavKRtBBrDXyeIn3OgBRB2qSFrbsK6WYWN0B
2aENDakzCpOO7Fs24WT2RByeXcrIYDJvsB9ahSKC+agK6hM9G/iGQmu0SsLf
H1jFVtD6MZoWcW+qaq0I6HKqllBZrGgVQZNxjSrjf38hNVvV8YIZLkvGh57g
UuxYHlEAZAriVj8tdSRG+NlooTk3UUC9tRx7eX8s5i2Gurv9QMaaM7wGTCSK
fMRqbg45P4kp3yqa8uMgyPjcFhiDF2BYfErLfqkPxag4xkttS8S51Nqr0srn
tj23fds1bjaauAF8/hAzuLWxsdkfDfb6/fXtrQcYQaGN4EewgQgEvRZaFaSw
Yhjm7+joLp7Lo0RQjLFIivJpPfZ2gDyK5nLhJ1Z3dtYYUcBlhicWHmFnLWp+
Jla29xe2sr0lrGzvi5X961nZhRNc2ivMrawlbP//2tgPzVZzje4HNq3byrQe
hKLSuhZtaq+ZTYX18jnnk3UGLkYQNRzHuYymZCrDhKyginjyEQfvnZ9Qx/lj
GSTF1XoUU2CYDrtkVPck9WRFCSvISQc/6JRuDgYPgse425LNZBB/Rb1cEVmI
pmol2F5p61C7DbKNcVsdCVbfyKS5NgewzYAvRru9aIwbELj8H3suV+iQezmt
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
r7e9XT0QtB24/VQaxO5CTFXTRxHyAO8HgcnxXkVJesDll0u49B5DUN2DwC6E
6mMZyhIJ9zf3qodA/F5Eea+RmDyKdBdgs734YAQ2IwW7ypXHC2jsL55FgiIs
ME3Q2tza7c3D65KqE6S2blFobS7WIhIvE8zj0Lryp97Ru6Hn4aZKCaHNhQhh
e6EAPGritMEDSwiKaFrGZmshNhqGkEAehRGODSRrOiujsli/6sZPg0K12dnc
aY7HExif45DvYIMuLnhvqYyRoSGX10pGB0L18FTKvlZTWaOqpPKjNK09JoT/
wUcktfmpm7ytnadnj7Ie0lxgD4+YqP3djQcPq3Ki9p5wUA+bqSWHdBW7Qy9G
pV524TYeMxgD8PKD2Nze315mFFjBZwKaF9Y0cql2hFdvlYe0+ZghqV5E3o3g
fh4wwp1nu8uM8DQa+AF5Y7Wu4fbWYwbHHbAzprtYblyH7o0/Ev8ZXYcJUObb
75cZH+7+/4LpQZ0D+N8/o6w8vO1HKUHMLrA7WG5wz/GY+6U/ndHYZGALH3bl
w3/Ppt3hsJtN/eF11xtlSw//uHMw7bzCEiGloT9q6UJDz4F/TsNmpjMPKdeZ
i+1HmXXJ3GZHD7QaH58eVXZm+1EOQTU1ljc3H5YWhxGmo+K58lqeeJQLwfDV
MfmHehCbz/b2Hjqqypl9lAdhj+lhDsSyI7r8X8fn5WHsP2YYBHI5zK8ikB43
fmuy4pR//3uUTKPkLun64TCaYLB0KT48v47SLPbL4Y+dxatl1bbJomdrd2uz
xji8OD2Xl4gmWerjTuNocGfmpEwjLuyiS6NiRTI3ufRceFNmsp3Fy2raYlGd
CtUrnqA3+xWq47woq0laxAIDuBKPJlTY2ejt1sRzMDUQ1vgcA63WCDuLV+gK
jJDxUALUBLO97e1GmFVJ9c7i5XoRr4ZL5Qqs+P9XxNaXTSeyty9Uzwtyieri
6stn++R7IKJZgk8edq8IspvxdVmlVwI3yvOaT4oB+m8aEPchOSTmMJsmkMiR
3ldtuVuHVptmqfYW7cKbB02/JKr+pRNV8WaGPFV166nSVHt/tTRVEq0H5qdi
2wcmpsqm57F/A/iurP3rpJP2vqSTVj142nTS3pd00iVVz2eaTtr7kk4q5qWT
Sj35gfNIuZcKTfDJE0gRs4+ROVrJ5SVkYW6AFNbMdE20PlyeajUffI4Jqje9
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
7jMYxv8DazmwXZGSAQA=

-->

</rfc>
