<?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.11 (Ruby 3.2.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-acl-extensions-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.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-07"/>
    <author fullname="Oscar Gonzalez de Dios">
      <organization>Telefonica</organization>
      <address>
        <email>oscar.gonzalezdedios@telefonica.com</email>
      </address>
    </author>
    <author fullname="Samier Barguil">
      <organization>Nokia</organization>
      <address>
        <email>samier.barguil_giraldo@nokia.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="2024" month="May" day="14"/>
    <area>Operations and Management</area>
    <workgroup>netmod</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 73?>

<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 81?>

<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>A set of examples to illustrate the use of the enhanced ACL module are provided in <xref target="sec-examples"/>.</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 are available in <xref target="template"/>, <xref target="v6-template"/>, and <xref target="iana-ipv6-ext-template"/>. Readers should refer to the IANA websites <xref target="IANA_ICMPv4_YANG_URL"/>, <xref target="IANA_ICMPv6_YANG_URL"/>, and <xref target="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 remove 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>
      <dl>
        <dt>Defined set:</dt>
        <dd>
          <t>Refers to reusable description of one or multiple information elements (e.g., IP address, IP prefix, port number, or ICMP type).</t>
        </dd>
      </dl>
    </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 tree of the enhanced ACL module (<xref target="sec-module"/>):</t>
        <figure anchor="enh-acl-tree">
          <name>Enhanced ACL Tree Structure</name>
          <artwork><![CDATA[
module: ietf-acl-enh

  augment /acl:acls:
    +--rw defined-sets
       +---u defined-sets
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches:
    +--rw (payload)?
    |  +--:(prefix-pattern)
    |     +--rw prefix-pattern {match-on-payload}?
    |        +---u payload
    +--rw (alias)?
    |  +--:(alias-name)
    |     +--rw alias-name*       alias-ref
    +--rw (mpls)?
       +--:(mpls-values)
          +--rw mpls-values {match-on-mpls}?
             +---u mpls-match-parameters-config
  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
    |  +---u fragment-fields
    +--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
    |  +---u fragment-fields
    +--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/acl:tcp:
    +--rw flags-bitmask
    |  +---u tcp-flags
    +--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/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/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:
    +---u acl-complementary-actions
    +--rw rate-limit?                  decimal64
]]></artwork>
        </figure>
        <t><xref target="enh-acl-grp"/> shows the reusable groupings that are defined in the enhanced ACL module:</t>
        <figure anchor="enh-acl-grp">
          <name>Enhanced ACL Groupings</name>
          <artwork><![CDATA[
  grouping tcp-flags:
    +-- (mode)?
       +--:(explicit)
       |  +-- operator?            operator
       |  +-- explicit-tcp-flag*   identityref
       +--:(builtin)
          +-- bitmask?             uint16
  grouping fragment-fields:
    +-- operator?   operator
    +-- type?       fragment-type
  grouping mpls-match-parameters-config:
    +-- traffic-class?       uint8
    +-- label-position?      identityref
    +-- upper-label-range?   rt-types:mpls-label
    +-- lower-label-range?   rt-types:mpls-label
    +-- label-block-name?    string
    +-- ttl-value?           uint8
  grouping payload:
    +-- offset?       identityref
    +-- offset-end?   uint64
    +-- operator?     operator
    +-- prefix?       binary
  grouping alias:
    +-- vlan*         uint16
    +-- prefix*       inet:ip-prefix
    +-- port-range* [lower-port]
    |  +-- lower-port    inet:port-number
    |  +-- upper-port?   inet:port-number
    +-- protocol*     uint8
    +-- fqdn*         inet:domain-name
    +-- uri*          inet:uri
  grouping icmpv4-header-fields:
    +-- type?             iana-icmpv4-types:icmpv4-type
    +-- code?             uint8
    +-- rest-of-header?   binary
  grouping icmpv6-header-fields:
    +-- type?             iana-icmpv6-types:icmpv6-type
    +-- code?             uint8
    +-- rest-of-header?   binary
  grouping acl-complementary-actions:
    +-- log-action
    |  +-- log-type?   identityref
    |  +-- log-id?     string
    +-- counter-action
       +-- counter-type?   identityref
       +-- counter-name*   string
  grouping ipv4-prefix-sets:
    +-- prefix-set* [name]
       +-- name           string
       +-- description?   string
       +-- prefix*        inet:ipv4-prefix
  grouping ipv6-prefix-sets:
    +-- prefix-set* [name]
       +-- name           string
       +-- description?   string
       +-- prefix*        inet:ipv6-prefix
  grouping port-sets:
    +-- port-set* [name]
       +-- name    string
       +-- port* [id]
          +-- id                              string
          +-- (port)?
             +--:(port-range-or-operator)
                +-- port-range-or-operator
                   +---u packet-fields:port-range-or-operator
  grouping protocol-sets:
    +-- protocol-set* [name]
       +-- name        string
       +-- protocol*   union
  grouping icmpv4-type-sets:
    +-- set* [name]
       +-- name           string
       +-- icmpv4-type* [type]
          +---u icmpv4-header-fields
  grouping icmpv6-type-sets:
    +-- set* [name]
       +-- name           string
       +-- icmpv6-type* [type]
          +---u icmpv6-header-fields
  grouping aliases:
    +-- alias* [name]
       +-- name     string
       +---u alias
  grouping defined-sets:
    +-- ipv4-prefix-sets
    |  +---u ipv4-prefix-sets
    +-- ipv6-prefix-sets
    |  +---u ipv6-prefix-sets
    +-- port-sets
    |  +---u port-sets
    +-- protocol-sets
    |  +---u protocol-sets
    +-- icmpv4-type-sets
    |  +---u icmpv4-type-sets
    +-- icmpv6-type-sets
    |  +---u icmpv6-type-sets
    +-- aliases
       +---u aliases
]]></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 (<xref target="enh-acl-tree"/>):</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 port numbers, 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 <xref target="RFC0792"/> or ICMPv6 <xref target="RFC4443"/> 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 <xref target="RFC8200"/>. To that aim, a new IANA-maintained module for IPv6 extension header types "iana-ipv6-ext-types" is defined in this document.</t>
      </section>
      <section anchor="tcp-flags-handling">
        <name>TCP Flags Handling</name>
        <t>The augmented ACL structure (<xref target="enh-acl-tree"/>) includes a new container 'flags-bitmask' to better handle TCP flags <xref target="RFC9293"/>.</t>
        <t>Clients that support both 'flags-bitmask' and 'flags' matching fields <bcp14>MUST NOT</bcp14> set these fields in the same request.</t>
      </section>
      <section anchor="fragments-handling">
        <name>Fragments Handling</name>
        <t>The augmented ACL structure (<xref target="enh-acl-tree"/>) includes new leafs 'ipv4-fragment' and 'ipv6-fragment' to better handle fragments.</t>
        <t>Clients that support both 'ipv4-fragment' and 'flags' matching fields <bcp14>MUST NOT</bcp14> set these fields in the same request.</t>
      </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.</t>
        <t>A new feature, called "match-on-payload", is defined in the document. This can be used, for example, for QUIC <xref target="RFC9000"/> or for tunneling protocols.</t>
      </section>
      <section anchor="match-on-mpls-headers">
        <name>Match on MPLS Headers</name>
        <t>The enhanced ACL module (<xref target="sec-module"/>) can be used to create rules to match against MPLS fields of a packet. The MPLS header 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 8-bit field that is used to encode a time-to-live (TTL) value.</t>
          </li>
        </ul>
        <t>The augmented ACL structure (<xref target="enh-acl-tree"/>) allows an operator to configure ACLs that match based upon the following data nodes:</t>
        <ul spacing="normal">
          <li>
            <t>'traffic-class'</t>
          </li>
          <li>
            <t>'label-position' (e.g., top or bottom)</t>
          </li>
          <li>
            <t>'upper-label-range'</t>
          </li>
          <li>
            <t>'lower-label-range'</t>
          </li>
          <li>
            <t>'label-block-name'</t>
          </li>
          <li>
            <t>'ttl-value'</t>
          </li>
        </ul>
      </section>
      <section anchor="vlan-filtering">
        <name>VLAN Filtering</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 for Ethernet VPN (EVPN) <xref target="RFC7209"/>.
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.</t>
      </section>
      <section anchor="instance-service-identifier-i-sid-filtering">
        <name>Instance Service Identifier (I-SID) Filtering</name>
        <t>Provider backbone bridging (PBB) was originally defined as Virtual
Bridged Local Area Networks <xref target="IEEE-802-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 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. It is
mandatory to configure the default service identifier in the network.</t>
        <t>Being able to filter by I-component Service identifier is a feature of
the EVNP-PBB configuration.</t>
      </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 in this document. Also, the "ietf-acl-enh" module supports new actions to complement existing ones: Log ('log-action') and write a counter ('counter-action'). The version of the module defined in this document 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.barguil_giraldo@nokia.com
     Author:   Oscar Gonzalez de Dios
               mailto:oscar.gonzalezdedios@telefonica.com";
  description
    "This module contains YANG definitions for enhanced ACLs.

     Copyright (c) 2024 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:acls/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:acls/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:acls/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:acls/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:acls/acl-enh:defined-sets/acl-enh:icmpv4-type-sets"
         + "/acl-enh:set/acl-enh:name";
    }
    description
      "Defines a reference to an ICMPv4 type set.";
  }

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

  typedef alias-ref {
    type leafref {
      path "/acl:acls/acl-enh:defined-sets/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.";
      }
    }
  }

  grouping ipv4-prefix-sets {
    description
      "Data definitions for a list of IPv4 prefixes
       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.";
      }
    }
  }

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

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

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

  grouping icmpv4-type-sets {
    description
      "Data definitions for a list of ICMPv4 types which can be
       matched in policies.";
    list set {
      key "name";
      description
        "List of ICMPv4 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 icmpv4-type {
        key "type";
        description
          "Includes a list of ICMPv4 types.";
        uses icmpv4-header-fields;
      }
    }
  }

  grouping icmpv6-type-sets {
    description
      "Data definitions for a list of ICMPv6 types which can be
       matched in policies.";
    list 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 icmpv6-type {
        key "type";
        description
          "Includes a list of ICMPv6 types.";
        uses icmpv6-header-fields;
      }
    }
  }

  grouping aliases {
    description
      "Grpuing for a set of aliases.";
    list alias {
      key "name";
      description
        "List of aliases.";
      leaf name {
        type string;
        description
          "The name of the alias.";
      }
      uses alias;
    }
  }

  grouping 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.";
      uses ipv4-prefix-sets;
    }
    container ipv6-prefix-sets {
      description
        "Data definitions for a list of IPv6 prefixes which are
         matched as part of a policy.";
      uses ipv6-prefix-sets;
    }
    container port-sets {
      description
        "Data definitions for a list of ports which can
         be matched in policies.";
      uses port-sets;
    }
    container protocol-sets {
      description
        "Data definitions for a list of protocols which can be
         matched in policies.";
      uses protocol-sets;
    }
    container icmpv4-type-sets {
      description
        "Data definitions for a list of ICMPv4 types which can be
         matched in policies.";
      uses icmpv4-type-sets;
    }
    container icmpv6-type-sets {
      description
        "Data definitions for a list of ICMPv6 types which can be
         matched in policies.";
      uses icmpv6-type-sets;
    }
    container aliases {
      description
        "Top-level container for aliases.";
      uses aliases;
    }
  }

  augment "/acl:acls" {
    description
      "predefined sets.";
    container defined-sets {
      description
        "Predefined sets of attributes used in policy match
         statements.";
      uses defined-sets;
    }
  }

  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 {
      description
        "Matches against MPLS headers, for example, label
         values";
      container mpls-values {
        if-feature "match-on-mpls";
        description
          "Provides the rule set that matches MPLS headers.";
        uses mpls-match-parameters-config;
      }
    }
  }

  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 {
      must 'not(../acl:flags)' {
        error-message
          "Either flags or fragment should be provided, but not
           both.";
      }
      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/acl:tcp" {
    description
      "Handles TCP flags and port sets.";
    container flags-bitmask {
      must 'not(../acl:flags)' {
        error-message
          "Either flags or flags-bitmask should be provided, but not
           both.";
      }
      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/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/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.";
    }
  }
}
]]></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':</dt>
        <dd>
          <t>These lists specify a set of sets and aliases. Similar 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':</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="RFC0792">
          <front>
            <title>Internet Control Message Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="792"/>
          <seriesInfo name="DOI" value="10.17487/RFC0792"/>
        </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="RFC8200">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="RFC9293">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </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="IANA_ICMPv4_YANG_URL" target="https://www.iana.org/assignments/icmpv6-parameters/iana-icmpv6-types.xhtml">
          <front>
            <title>iana-icmpv6-types YANG Module</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA_ICMPv6_YANG_URL" target="https://www.iana.org/assignments/icmp-parameters/iana-ipv6-ext-types.xhtml">
          <front>
            <title>iana-icmpv4-types YANG Module</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA_IPV6_YANG_URL" target="https://www.iana.org/assignments/ipv6-parameters/iana-icmpv6-types.xhtml">
          <front>
            <title>iana-ipv6-ext-types YANG Module</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IEEE-802-1ah" target="https://standards.ieee.org/standard/802_1ah-2008.html">
          <front>
            <title>IEEE Standard for Local and metropolitan area networks -- Virtual Bridged Local Area Networks Amendment 7: Provider Backbone Bridges</title>
            <author initials="" surname="IEEE" fullname="IEEE">
              <organization/>
            </author>
            <date year="2008" month="August"/>
          </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="Andy Bierman" initials="A." surname="Bierman">
              <organization>YumaWorks</organization>
            </author>
            <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="April" year="2024"/>
            <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-11"/>
        </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="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </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="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 1933?>

<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 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 ICMPv6 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 IPv6 Extension Header Types IANA-Maintained Module</name>
        <sourcecode markers="true" name="iana-ipv6-ext-types@2023-09-29.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 modeled in YANG as a list of parameters related to the class it represents. The following sets can be considered:</t>
        <dl>
          <dt>Prefix sets:</dt>
          <dd>
            <t>Used to create lists of IPv4 or IPv6 prefixes.</t>
          </dd>
          <dt>Protocol sets:</dt>
          <dd>
            <t>Used to create a list of protocols.</t>
          </dd>
          <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>
          <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>
        <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">
        <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="sec-examples">
      <name>Examples</name>
      <t>This section provides a few examples to illustrate the use of the enhanced ACL module ("ietf-acl-enh").</t>
      <t><xref target="example_4"/> shows an example of the message body of a request to install a filter to discard incoming TCP messages having all flags unset.</t>
      <section anchor="tcp-flags-handling-1">
        <name>TCP Flags Handling</name>
        <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-1">
        <name>Fragments Handling</name>
        <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="vlan-filtering-1">
        <name>VLAN Filtering</name>
        <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-access-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-access-control-list:accept"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="isid-filtering">
        <name>ISID Filtering</name>
        <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-access-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-access-control-list:accept"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="rate-limit">
        <name>Rate-Limit</name>
        <t><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":{
                           "ietf-acl-enh:flags-bitmask":{
                              "operator":"match",
                              "bitmask":2
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"accept",
                        "ietf-acl-enh:rate-limit":"20.00"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section numbered="false" 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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
vtk/OdG/WPKLyzdv350cpr+lLQ/enp4enR1yY3gqMo+s1un+P1vMiq2351fH
b8/2T1rIvBleZxOF5IGLDgcYa2gC2eC4S3+dGP7Vwfn/+7+bO1KXbm1SVEMq
1s1nO/DHLfjN3Fvgw4LmP4F8dxZyqx0iFJQQQ3sGJi76KzZJ+1vUayFS79tf
kTK/9cX3g+Fsc+cH+QAHnHmoaJZ5SDQrPik0ZiKWPCrpRlMz8zxH6Sy++//M
/K3objz8/qUH7Co6m89f/mAxj8Qp05CMkJTHhUoRNyWF3JJwzLO93Q00OEha
gaWHjZQQvpsOyEzzWZCHDlgNrj0JwZTNwrKkUbm9Q7BMV0zpKcSxJhqU5Sl2
JgwjKpU8CAdkzmHqVvWtPmh/iiXRekSfx3MkEWZKQGNYFUij3XS9+QSvdbBl
hT2I1FleS/2PNdNrXhOmsbVKS/ftDXqNnrjU7j10i2Q1t1llmJuU/hUSVH+N
ET+wFWmvFUkNSwK5mz053HPjCaixKvNGMJDpX//6l8V/9wVZbLST61+j0LaT
CRF7HZ714f8RB3v/o9MJb9VEdcgnlqFeeNNJ8m8KUNQv8l9HPXDoXxmcMrsC
X/7OC+zR6kt6+H/oeX+Fqd6Z2THuCa+qd7pZ9r34SJA7gd+R4O5fGk009vKl
2T1YLXaU65yeURSk2HH67lsVK6cngI8JFkxTBVVIqPiow9bRqhFI5wbGS2Mw
+PT+ZTbqziOh7/m7dNujw0HcB88L/e5tmdNz49l+hx09Ay/j6b1JOmgwRmRo
z+WlRhlcI4yWZb5bIRi0fl5midxfoU1nk/S6FYgBJ6Tu8XECOmezV/Yd+K91
31EvKuywWuAUAKBe8iBm9vC9E8OIHW8U9dW7snbYpWKMTMf82o3cUZGcxtN7
k2eQTPTOIJPBUAaZRBmZsGkOi9x3TKbK70rIlGPbxmTKtcMuS8i0DNtuZ/qh
Z2A87+hfTK7GvzvAqdSbwZewsNRTOQqjURQk4dDpUFspfjAepNncfAHiMScR
QCHFYGOjxikFUd/aR4eXHXh8+1LkfsC7iINh4BlNH5+WPf1Ljpa9JWjZq6Jl
rzEtCyDqW5u0KhCynJaqqQ6myLnIiuaSze2++jPTjN4tOUU7xSmKhzP1rzlB
Y8+eRJ2BG0/t6H12guDLDr0uTg2+QpMnQyX1oGY+8u1yTR55yMlopv7tF8cA
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
Np89f/7QUZXO7FIWRHZMDzMgFh3R5f86Pi8OY2+ZYRDIxTC/CmD12OF7kxWn
/Pe/B9E0iO6irusPgwkGSxfiw/PrIE5Ctxj+2JnvLau2TZyerd2tzQrlcHB6
LuuaRkns4i7jaHBn5qNMAy7joq8PxIJjdnTp2PCmyGQ7891q2mJRnQrVK56e
N/sVquP04kKTtIgFBnAlHk2osLPR262I52BaIPj4HAMtlwg78z10BUbIeCgB
aoLZ8+3tRpiVreqd+e56Hq+GrnIJVvzfktj6oqlE2e0L1fOcPKKquPrimT7p
HoholtyTht1LguxmfF1ehS6B63satOgtlO9EknzXgLgPyR8xh9k0eUSO9L5s
uz1zYHVOhqrehe/N24U3D5l+TVL9SyepYjn3NE1167FSVHt/tRRVWloPzE3F
tg9MSpVNz0P3BvBtr/73SSXtfU0lLXvwuKmkva+ppAuKni80lbT3NZVU1KWS
Sjn5xDmk3EuJJPjsyaOI2afIGi3l8gKyMDdAiszMdE20ni5HtZwPPk1y6lyz
2DhE3yg9tdc8PbX32Ompvbr01N7X9NRHTU8F1vnfVM7gf0tONzJVF0lS3f6a
pPo1SfVrkmohSVUNtsfpqje9hyasZrzhspTV7c7GTmfr+V89ZTU7zsKThdJW
ewumrTbMGZ0fla7IGe02iizv7FQkW57ThYJXQfDKnRSQapLzhc0FtBcAYElc
atPhmiV96Wy4pckyJx9ufu5XIR1uSZTqYv+bW82SO1XM/1FQKU0C2pqf3pkG
+ZdE4zTxQBPYUXyCVbtBwP89ccISnLbnb1ZpUELBEgSsEYZbzzY3GmIIw8bw
aBHF+eu/BEWG9tg4HgZ+iXzani8MSjBEWEvi1yR3d3u+dChJ3m3Gfs97FVuT
TZKdN7fnC4qydOclUTtzwOIdBPOoNj+hXgF6TLopmPMo12uO3WPSTiWAKbOr
iNiz+VOqksgkkEfhtAuH70VCq7SI1HwFIPnMANNsZT7f26nemz8DJ8tIsq2S
wPO1Am26IzQzJXgBIbzT26oQICVoXpDNH5VMboPEhnJMFchlkaXsSkdx9qEb
DQN4cmeuv0rObJLbwPD1IhS6h8wSX4hxtze3KnPWy0eTWa/Vw5mvcmqGkxUv
jzMeGSfbaqzXGyQ/qNjbllhOw28/r9Kgb4Kpsw8esDrMpGkkrcHqCZivvBC2
IOD6GFM6BcpcXYT4va1nFakmNcMAW7J6EPO13JxBoKH7OEPg7MNzCkDW6+ad
+dpPpjIytMUVdDMs5yjpnfm6MIvm4pq6Gs8DhKQCb+d2fN1MSM7XlBnAAiEv
IRz3nlVo9QL6DaXifF1agv8S0rByAI+em7e521D7PnJyXjOdXZmdp+V2I49g
dxFX7+G+wdbzikOHOWzrxdDuIl7fg12sprheYVzdr0J1vqotoGoAXBLT16d4
1OBU8WURu/mqlEGotRk1Qmh3t1eRuntxfiIDyJWSZLfBgerzk3wcupnQ3t2t
MnBPzmCUJ5ifEoTvqCZmNYLzlSCDExKeYICLofqsKr50mMjCr9IoqD52OV8L
aljawlgkFNd7VqUD8zjSbcHKJykiOl/3FRE1QS6J7WkDppyv3k4fyJTPnm1X
aLIm+dWbvQZ1JsoSrBvhtkyG9WZvvkopSbF+KF6fJ8e698XmWPeWyLHuPXKO
dUli1ePnWFcXKm5SFHjOVQQ1qSaF2wCWSMb+m5mN/TeizyLp2EaLJvnY5ufN
ErLNFg0zsrlJNiUbny2Sk03fN0vKpk+rs7L/ZtEHDfKyHcUMnWtiBkzK5rHU
pYv+TfJ0VW6kZJYM5PJUSQ2pKhPzb1ooLpanbbbLJmqnb/Dn4cWEs3A0vEWq
CT8IxLuI7jQ3XS6dQhPTPvVElhouB79YrWE9QTqFs2bKMkl9xgxU5a6aCC6q
wMy2c7PEs3KPGVLqNAPN4hCbDNrIG19wyIurzfIZbZw6vshYC38/hTx4XFFQ
SCivn48c0OYp5XVkXK6rB0jOB/Pt0ou11iCqXHEZ+8iEWZ95jm/VwlZhJcGb
adJuejhzG5m79ZqTc9IliOqkdN1raVa6gadMnM4wxgNLHGclwyPXOC4TOzV5
6pnxcKJ65lGaRP5wrOvqHGf7L+tN56ynDGKkkVfPn5FHXkaTBxU7VhyZTSgv
4cuH5ZQ/jt0/N8k8c4/Lj5y+uNfZ2itNM898TL7a0onm2XtksHkm1Tzz+muy
+WMkm5fxlMSGbiD5mnD+3z/h/L9p9re2oX82sr0fmuvdKNMbRaUMWv01M73z
ed4PzPKut3/NOF9l0jdO1Jtg1hncdeCft7PSaHyDvU6UbykcwYAahW23NmrS
KYGzWVbCWqY+8qg1SFuRcJQix2gAgpqHHFecQfRM24Wf7m7sVcTAX4f2BCd5
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

-->

</rfc>
