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

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

<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 ("ietf-acl-enh", <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 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 section="4.30.2" sectionFormat="of" 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"/>. The templates use an XSLT stylesheet from the 'iana-yang' project <xref target="YANG-XSLT"/>. 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>
        <ul spacing="normal">
          <li>
            <t>XXXX --&gt; the assigned RFC number for this I-D</t>
          </li>
          <li>
            <t>2024-05-16 --&gt; the actual date of the publication of this document</t>
          </li>
        </ul>
        <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)?
    |  +--:(pattern)
    |     +--rw pattern {match-on-payload}?
    |        +---u payload-match
    +--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:
    +--rw operator?                  operator
    +-- (mode)?
       +--:(explicit)
       |  +-- 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-match:
    +-- offset?       identityref
    +-- length?   uint64
    +-- operator?     operator
    +-- pattern?       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>
        <dl>
          <dt>IPv4 prefix sets:</dt>
          <dd>
            <t>An IPv4 prefix set 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 in the set.</t>
          </dd>
          <dt>IPv6 prefix sets:</dt>
          <dd>
            <t>An IPv6 prefix 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 in the set.</t>
          </dd>
          <dt>Port sets:</dt>
          <dd>
            <t>A port set contains a list of port numbers to be used in transpot protocol entries (e.g., TCP and UDP).</t>
          </dd>
          <dt/>
          <dd>
            <t>The port numbers can be individual port numbers, a range of port numbers, and an operation.</t>
          </dd>
          <dt>Protocol sets:</dt>
          <dd>
            <t>A protocol set 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>
          <dt>ICMP sets:</dt>
          <dd>
            <t>An ICMP set 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>
          <dt/>
          <dd>
            <t>New IANA-maintained modules for ICMP types are defined in this document.</t>
          </dd>
          <dt>Aliases:</dt>
          <dd>
            <t>An alias is defined by a combination of various parameters (e.g., IP prefix, protocol, port number, or VLAN <xref target="IEEE802.1Qcp"/>). Sets of aliases can be defined and referred to in ACL match criteria.</t>
          </dd>
        </dl>
      </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 section="3.1" sectionFormat="of" target="RFC9293"/>). Assigned TCP flags are maintained in the "TCP Header Flags" registry under the "Transmission Control Protocol (TCP) Parameters" registry group <xref target="IANA-TCP-FLAGS"/>.</t>
        <t>Clients that support both 'flags-bitmask' and 'flags' <xref target="RFC8519"/> 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' <xref target="RFC8519"/> 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. This feature requires configuring a data offset, a length, and a binary pattern to macth data against using a specified operator.</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: The 3-bit "Exp" field <xref target="RFC3032"/> which is renamed to "Traffic Class field" ("TC field") <xref target="RFC5462"/>.</t>
          </li>
          <li>
            <t>Label Value: A 20-bit field that carries the actual value of the MPLS label.</t>
          </li>
          <li>
            <t>TTL: A 8-bit field used to encode 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"/>.</t>
        <t>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.</t>
        <t>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@2024-05-16.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 2024-05-16 {
    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 an I-SID 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.";
    leaf operator {
      type operator;
      description
        "How to interpret the TCP flags.";
    }
    choice mode {
      description
        "Choice of how flags are indicated.";
      case explicit {
        leaf-list explicit-tcp-flag {
          type identityref {
            base acl-enh: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 13
             and byte 14 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.
             Assigned TCP flags and their position are maintained
             in the IANA'Transmission Control Protocol (TCP) 
             Parameters' registry group.";
          reference
            "RFC 9293: Transmission Control Protocol (TCP),
                       Section 3.1
             https://www.iana.org/assignments/tcp-parameters";
        }
      }
    }
  }

  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 acl-enh: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-match {
    description
      "Operations on payload match.";
    leaf offset {
      type identityref {
        base acl-enh:offset-type;
      }
      description
        "Indicates the payload offset. This will indicate
         the position of the data in packet to use for
         the match.";
    }
    leaf length {
      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 pattern {
      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.";
      reference
        "IEEE Std 802.1Q: Bridges and Bridged Networks";
    }
    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 pattern {
        if-feature "match-on-payload";
        description
          "Indicates the rule to perform the payload-based match.";
        uses payload-match;
      }
    }
    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 I-SID 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.";
            reference
              "IEEE Std 802.1Q: Bridges and Bridged Networks";
          }
        }
      }
    }
    container isid-filter {
      if-feature "match-on-isid-filter";
      description
        "Indicates how to handle I-SID filters.
         The I-component is responsible for mapping customer
         Ethernet traffic to the appropriate I-SID.";
      choice isid-type {
        description
          "I-SID 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 an I-SID.";
          }
          leaf upper-isid {
            type uint16;
            mandatory true;
            description
              "Upper boundary for an I-SID.";
          }
        }
        case operator {
          leaf operator {
            type packet-fields:operator;
            default "eq";
            description
              "Operator to be applied on the I-SID below.";
          }
          leaf-list isid {
            type uint16;
            description
              "I-SID number along with the operator on which to
               match.";
            reference
              "IEEE 802.1ah: Provider Backbone Bridges";
          }
        }
      }
    }
  }

  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>This section is modeled after the template described in <xref section="3.7" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>.</t>
      <t>The "ietf-acl-enh" YANG module defines a data model that is
designed to be accessed via YANG-based management protocols, such as
NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>. These protocols have to
use a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and
QUIC <xref target="RFC9000"/>) and have to use mutual authentication.</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).  All writable data nodes are likely to be reasonably
sensitive or vulnerable in some network environments.  Write
operations (e.g., edit-config) and delete operations to these data
nodes without proper protection or authentication can have a negative
effect on network operations. The following subtrees and data nodes
have particular sensitivities/vulnerabilities:</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. Specifically, the following
subtrees and data nodes have particular sensitivities/vulnerabilities:</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>
      <t>The document defines a match policy based on a pattern that can be observed in a packet. For example, such a policy can be combined with header-based matches in the context of DDoS mitigation. Filtering based on a pattern match is deterministic for packets with unencrypted data. However, the efficiency for encrypted packets depend on the presence of an unvarying pattern.</t>
      <t>The YANG modules "iana-icmpv4-types", "iana-icmpv6-types", and "iana-ipv6-ext-types" define a set of types. These nodes are intended to be reused by other YANG
modules. Each of these modules by itself does not expose any data nodes that
are writable, data nodes that contain read-only state, or RPCs.
As such, there are no additional security issues related to
these YANG modules that need to be considered.</t>
    </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 the name from the registry with all spaces striped.</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 name 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-ICMPv6"/>.</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 the name from the registry with all spaces striped.</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 name 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-IPv6"/>.</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 the description from the registry with all spaces striped.</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 anchor="sec-combined-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="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="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="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-TCP-FLAGS" target="https://www.iana.org/assignments/tcp-parameters/">
          <front>
            <title>Transmission Control Protocol (TCP) 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="IEEE802.1Qcp" target="https://doi.org/10.1109/IEEESTD.2018.8467507">
          <front>
            <title>IEEE Standard for Local and metropolitan area networks--Bridges and Bridged Networks--Amendment 30: YANG Data Model</title>
            <author initials="" surname="IEEE" fullname="IEEE">
              <organization/>
            </author>
            <date year="2018" month="September"/>
          </front>
        </reference>
        <reference anchor="YANG-XSLT" target="https://github.com/llhotka/iana-yang">
          <front>
            <title>iana-yang</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC9132">
          <front>
            <title>Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal Channel Specification</title>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair"/>
            <author fullname="J. Shallow" initials="J." surname="Shallow"/>
            <author fullname="T. Reddy.K" initials="T." surname="Reddy.K"/>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document specifies the Distributed Denial-of-Service Open Threat Signaling (DOTS) signal channel, a protocol for signaling the need for protection against Distributed Denial-of-Service (DDoS) attacks to a server capable of enabling network traffic mitigation on behalf of the requesting client.</t>
              <t>A companion document defines the DOTS data channel, a separate reliable communication layer for DOTS management and configuration purposes.</t>
              <t>This document obsoletes RFC 8782.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9132"/>
          <seriesInfo name="DOI" value="10.17487/RFC9132"/>
        </reference>
        <reference anchor="RFC8955">
          <front>
            <title>Dissemination of Flow Specification Rules</title>
            <author fullname="C. Loibl" initials="C." surname="Loibl"/>
            <author fullname="S. Hares" initials="S." surname="Hares"/>
            <author fullname="R. Raszuk" initials="R." surname="Raszuk"/>
            <author fullname="D. McPherson" initials="D." surname="McPherson"/>
            <author fullname="M. Bacher" initials="M." surname="Bacher"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>This document defines a Border Gateway Protocol Network Layer Reachability Information (BGP NLRI) encoding format that can be used to distribute (intra-domain and inter-domain) traffic Flow Specifications for IPv4 unicast and IPv4 BGP/MPLS VPN services. This allows the routing system to propagate information regarding more specific components of the traffic aggregate defined by an IP destination prefix.</t>
              <t>It also specifies BGP Extended Community encoding formats, which can be used to propagate Traffic Filtering Actions along with the Flow Specification NLRI. Those Traffic Filtering Actions encode actions a routing system can take if the packet matches the Flow Specification.</t>
              <t>This document obsoletes both RFC 5575 and RFC 7674.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8955"/>
          <seriesInfo name="DOI" value="10.17487/RFC8955"/>
        </reference>
        <reference anchor="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="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="13" month="November" 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.  The document also updates RFC 6020 by
   clarifying how modules and their revisions are handled by IANA.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-21"/>
        </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="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="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="RFC4252">
          <front>
            <title>The Secure Shell (SSH) Authentication Protocol</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell Protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network. This document describes the SSH authentication protocol framework and public key, password, and host-based client authentication methods. Additional authentication methods are described in separate documents. The SSH authentication protocol runs on top of the SSH transport layer protocol and provides a single authenticated tunnel for the SSH connection protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4252"/>
          <seriesInfo name="DOI" value="10.17487/RFC4252"/>
        </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="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 1982?>

<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="substring-before(translate(normalize-space
                  (iana:description),' ',''),'suchasSeamoby')"/>  
          </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 ICMPmessagesutilizedbyexperimentalmobilityprotocols {
        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="substring-before(translate(normalize-space
                  (iana:description),' ',''),'suchasSeamoby')"/>                  
          </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@2023-04-28.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 ICMPmessagesutilizedbyexperimentalmobilityprotocols {
        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>
      <section anchor="tcp-flags-handling-1">
        <name>TCP Flags Handling</name>
        <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>
        <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": {
                  "ietf-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": {
                  "ietf-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": {
                  "ietf-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>Thanks to Lou Berger for Shepherding the document.</t>
      <t>Thanks to David Black for the TSV review, Tim Wicinski for the intdir review, and Per Andersson for the yangdoctors review.</t>
      <t>The IANA-maintained modules were generated using an XSLT stylesheet from the 'iana-yang' project <xref target="YANG-XSLT"/>).</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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
HPtMEFW5JnUTpsas5OrTxVfVWQWNHf6jIDFFMNVNWmoG0Y11xTpWiubsUIS+
B3FokgwYCGoSNynNHjNxiC9F1GtjUDgumannUyyqHnmU3b9oyyOdsi+cDjCM
40Tx/CkLi3kVR+2zRPfvKdGd89URQrsIYmayO5FzZXLVCQWd6e5zLVO8JDBL
bC83z45ZUvNSOPmhgHfdGYIZDCcs+SwB5c2paxhUGfpCjw8l9mbILcDex6LJ
OfsLoflQEJPq6H7NuSaLkHzMvjJKb514kr8XR2oWWW+teyIHdO2a72WeCE0I
MBXh3bzBqDpQNG8sZuFFPasdl0U3pPCn7ErgT00BhMceUSrxonKHJLf4KN+N
UKPQrS8fq9Dz1sVCGRXDghf1Wa2bX9lnORSsjYmoptqY0V+6OkYcnqaOEcKT
1DGh8Hh1jM0/qzoOSuNZ6tFSyAsyeJkKeS6i//oqmWfFAjp5seGYudNMXX9u
pUwK2b3pC3Od7Ct9nazS0Yup4+WvBbbpH4yvml9mrg7esHoOUMurq4pcOu3P
v5sb6U19UV1zvi7ybAq7mGFmtRWECSbHIlJUmGg1p7Vq9VXryEMVr4oZhVFW
OCa+CVN/RNm8PBijNTFIk1L1pEGY3JSXtAvbLyTdcKMYxSnU/MkHzGgG8x1f
HTvwbV88qdOsyuU+59jb/ZmFNakLs3ChzSrCw2KQOxqBva0uEzPC4vABnYr4
9JjX42yh0RDxAG8ZVHtd5YILxXqTiyNq5WHkMLX6tTAloag8VvIpJn7P/NJg
4sfNZ35v9szvVcz8hadYbzlTrDdbUIslZZcmqPoiv+ZT6kthuviUqs5h+sTz
ybypmEIKL6nvyqs+Kldx8Whf/5lr1+TwJUmoaajPiVJE8lNPbzbnyXCq/200
ufNlAHUWaNUMpq86pVKMS7bduU4+rwEvlwBVisUULq1XKVQRsJTzy7JvlWhe
WO51Vm6VEsGXczXIZ0XM6rgCu08l8uloqv9t4sjSvWslObcHEwD9OQfzsyL2
ZQYTd5bNL02GM5cWVhhPtcleUVCrXFh7cS+6kIGYY571crabZ2Paq8O0twRM
e7Mw7TXAdCkjrs6CzhzYg9zpZ314mqvqYZDvAnQ3eEMTvKMif6CVswPqzl/b
khFlMAy/+cymtmJhdOdG1N8L0WbUh3KatHOnMOuCgRaKYPu9EVdQog4YjD5s
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
9VOJkwxtcQPdDMs5Rnpnvi3Mo7m4pa7H8wAh6QDcuZvcNFOS8y1lDrBAyE9Q
jnvPaqx6Cf2GWnG+La3A/wnasJaAZWQCbu42NLhLTgVsZqZrcwGNqm60CNhd
ZHX3+OXA1vOaU40FbGdrnt1FFnqPXlU1xfWKrmGsQ3W+dS2hagF8IqavT/Es
w6mWyzJ2860ng9DTMW6E0O5uryY3+OL8RMWOa5XHboMT2+cnxRB0Mz29u1vn
056cAZUnmA4TRu+ormc9gvPtHoMTCp5ggIuh+qwupHSYquK1yg+oP9c53/AZ
WMapWCT61ntWZ/aKONJN33oZUkZ0vrkrI2qDfCK2pw2Ecr5FO32kUD57tl1j
vJpkc2/2GhSyqErnboTbU/K5N3vzTUpFQvdj8foyGd29P21Gd+8JGd29JWd0
V+RxLT+ju77YcpPCxnNuW5iRZVK68OAJqd9/sXO//0L8WST522rRJPvb/rxZ
+rfdomH+NzfJJ4Djs0UywOn7Zing9Gl9DvhfHPqgQRa41MLQ4Wu8MQWcaZmV
nfoXJdM1qZh/MYpMi02uj2zaGThWrqZ5VpcKmkFfLE/cbpdPFM/ePKFCsgXE
+lmoRPJjQFS3ab+LJd94nq3LTIpNQvvX16qqcjWAxcoqZ+Oo00pnjGIuDdAa
lLp8WhvBRa2c3XZu5npeObKs2gDYBloYl6ltQr+V1r4g9Yub2erBbZzZvgit
pb8/rf74NKqjlAE/e4QKQJvnwM9i7NO6yo94Q/1bx8hHy/iT5/hMZys3Ue2m
TF+1G1b2v+yW2hWjW9eUatDRK8HbdMo9e/ycsHKDZxtozrRXIOpT7U2vlbn2
Fp4qWTs32s3qQVfpj1Iifv6jRTLxawze/DLRDfCyU/Lzck45+blHWYp7c1r+
p4xDkbzaLPwSSlUImCT7TLqsvPf6wbcS36vY1KAYdJNRXzcins+BrxD0x6XB
L2e9MjcvPneHjsqM3+ts7VVmxuc+pjXmk3Pj83f4YPNcdnzu9df8+GXkx1fJ
lMKGbn/5miP/758j/2+asG58+V+sBPXHpqc3Sk5HVamCbf+ayel1qemPTEyf
7W/bccraPHUcsDfhtDO478A/b6eVuwkN9mpRz2VwBANqFHbe2piRAQoSzjoT
5jT1UUStQaaNgqMNOgYqENQ85LgkD6JnOyj8dHdjryaG/zpyr3Gw52DdYI9Q
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

-->

</rfc>
