<?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-14" 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-14"/>
    <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="2025" month="January" day="30"/>
    <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.
Specifically, it introduces augmentations to the ACL base model to enhance its functionality and applicability.</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 98?>

<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 identifies these limitations and specifies an enhanced ACL structure,
introducing augmentations to the ACL base model (<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>Elements in a defined set typically share a logical purpose or function, such as IP address, IP prefixes, 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?   uint16
    +-- 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"/>). When only sets of one parameter (e.g., protocol) are handled, then the relevant parameter sets should be used (e.g., protocol set) rather than an alias.</t>
          </dd>
          <dt/>
          <dd>
            <t>For example, an alias can be defined to apply ACL policies bound to a set of HTTPS servers. Such an alias will typically include these HTTPS server addresses (e.g., "prefix": ["2001:db8:6401::1/128","2001:db8:6401::2/128"]) and the TCP port number 443 (i.e., "protocol": [6] and "lower-port": 443).</t>
          </dd>
          <dt/>
          <dd>
            <t>Sets of aliases can be defined and referred to in ACL match criteria.</t>
          </dd>
          <dt>Payload-based filtering:</dt>
          <dd>
            <t>Network traffic filtering technique that examines the data payload of packets, beyond just the header information, to identify, allow, or block traffic based on specific content or patterns within the payload.</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 match 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-netconf-acm {
    prefix nacm;
    reference
      "RFC 8341: Network Configuration Access Control Model";
  }
  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) or any encapsulation scheme over IP such as 
       IP-in-IP.";
  }

  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 uint16;
      units "bytes";
      description
        "Indicates the number of bytes to ignore, starting from
         the offset, to perform the pattern 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 starting.
         The match starts from the byte indicated by
         'offset' + length'.";
    }
  }

  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;
      nacm:default-deny-write;
    }
  }

  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 IP addresses, port numbers, protocols, ICMP types, and aliases. Similar to <xref target="RFC8519"/>, unauthorized write access to these
   lists 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>
        <dt/>
        <dd>
          <t>These sets are defined with "nacm:default-deny-write" tagging.</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. Readers may also refer to <xref section="11" sectionFormat="of" target="RFC8329"/> for security considerations related to Network Security Functions (NSFs) that apply packet content matching.</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, reserved, or <xref target="RFC3692"/>-style 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 update 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, reserved, or private experimentation 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 update 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 update 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="14" month="January" year="2025"/>
            <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-22"/>
        </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="RFC8329">
          <front>
            <title>Framework for Interface to Network Security Functions</title>
            <author fullname="D. Lopez" initials="D." surname="Lopez"/>
            <author fullname="E. Lopez" initials="E." surname="Lopez"/>
            <author fullname="L. Dunbar" initials="L." surname="Dunbar"/>
            <author fullname="J. Strassner" initials="J." surname="Strassner"/>
            <author fullname="R. Kumar" initials="R." surname="Kumar"/>
            <date month="February" year="2018"/>
            <abstract>
              <t>This document describes the framework for Interface to Network Security Functions (I2NSF) and defines a reference model (including major functional components) for I2NSF. Network Security Functions (NSFs) are packet-processing engines that inspect and optionally modify packets traversing networks, either directly or in the context of sessions to which the packet is associated.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8329"/>
          <seriesInfo name="DOI" value="10.17487/RFC8329"/>
        </reference>
        <reference anchor="RFC3692">
          <front>
            <title>Assigning Experimental and Testing Numbers Considered Useful</title>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>When experimenting with or extending protocols, it is often necessary to use some sort of protocol number or constant in order to actually test or experiment with the new function, even when testing in a closed environment. For example, to test a new DHCP option, one needs an option number to identify the new function. This document recommends that when writing IANA Considerations sections, authors should consider assigning a small range of numbers for experimentation purposes that implementers can use when testing protocol extensions or other new features. This document reserves some ranges of numbers for experimentation purposes in specific protocols where the need to support experimentation has been identified.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="82"/>
          <seriesInfo name="RFC" value="3692"/>
          <seriesInfo name="DOI" value="10.17487/RFC3692"/>
        </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 1999?>

<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="pattern-based-filtering">
        <name>Pattern-based Filtering</name>
        <t>Pattern-based filtering is useful to detect specific patterns, signatures, or encapsulated packets. <xref target="example_p"/> shows an example of the message body of a request to install a filter to discard IP-in-IP encapsulated messages with an inner destination IP address equal to "2001:db8::1". By using the offset at the end of layer 3, the rule targets a specific portion of the payload that starts 20 bytes after the beginning of the data (that is, skipping the first 20 bytes of the inner IPv6 header).</t>
        <t>For the readers' convenience, the textual representation of the pattern is used in the example instead of the binary form.</t>
        <figure anchor="example_p">
          <name>Example of an ACL to Deny Encapsulated Messages with a Specific Inner Destination Address (Request Body)</name>
          <sourcecode type="json"><![CDATA[
{
  "ietf-access-control-list:acls": {
    "acl": [
      {
        "name": "pattern-example",
        "aces": {
          "ace": [
            {
              "name": "pattern-1",
              "matches": {
                "ietf-acl-enh:pattern": {
                  "offset": "ietf-acl-enh:layer4",
                  "length": 20,
                  "operator": "match",
                  "pattern": "2001:db8::1"
                }
              },
              "actions": {
                "forwarding": "drop"
              }
            }
          ]
        }
      }
    ]
  }
}
]]></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="acknowledgments">
      <name>Acknowledgments</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 tsvart review, Tim Wicinski for the intdir review, Per Andersson for the yangdoctors review, Russ Housley
for genart review, and Linda Dunbar for the secdir 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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
EkGAJ4DaOY7o2vT+eImyPFr588+TILvQPrdqCjRKke1lKbK7na29zs7z2hTZ
3qpTZHvzUmR7X1JkV5oiC6zz31Te4b8V71vZssskyu5+SZT9kij7JVG2lCir
ke1xyuxd77FJszm3vCptVsnpf/W02RyeetTym6VSZ3tLps42zFtdHCavyVvt
Ngp17+3VJHxeUh376zB84Y1LQDXJO6My+NBeQAdPhGVuSl6zxDOTkfdksizI
yVucf1ZKyXsiSPM2I7Z3miWY6k2IlYBSmYi0szjFNNt1eCIY56mPF//EyRkW
NAdB/1MqowqYdhdvmJmuhO5LUGeNINx5tr3VEEJAG+O1ZRAXr/8KELm3VcN4
jHfPlyFcLAwqIMS+nghfk/zh3cXSoSKBuBn7Pe/VbI82Sbje3l0sKKpSrp8I
2oUEy3cQLqLa4qR+3dEq6ab7XES5XnPoVkk7nYSmza8yYM8WT6lOZFOdrITT
3ki+EQyt0zJQixWA4jOrm2Yr8/nBXn1+wAU4W1aib50EXqwVKAsAe7PTkpcQ
wnu9nRoBUgHmG7L944rJbZBcUQ2p7vKpwFKGp9ScfezFwxCezOz1V8uZTZIt
uH+zCIUZIbfEl2Lc3e2d2rz5amxy67UencUqZw46efGyGnxUvGynsV5vkI2h
Y3A74mkafvd5nQZ9FU7kIXjC+kCVoZGyBusnYLHywr4FdW6OUmVToM3VZYjf
23lWk/syBw2wJeuRWKzlFiCBhu5qUOAMyEsKRM7XzXuLtZ9Kp+TellfQzaBc
oKT3FuvCPJjLa+p6OI+wJx2Au3ST22ZCcrGmzHUssOcnCMeDZzVavQR+Q6m4
WJdWwP8EaViLwCryA7f3GyrcFScINlPTtRmCRlQ3cgL2l/HuHu8O7DyvOetY
gHa+5NlfxtF7tFfVFNZrun2yDtTF2rUEqtXhEyF9eY4nHM41X5ahW6w9uQu9
HONGAO3v92oyht9cnqnYca3w2G9wjvvyrBiCbian9/frbNqzC8DyDJNkwugt
1f+sB3Cx3uPuhOpPcIfLgfqsLqR0nKoit8oOqD/tuVjxmb6MUbFM9K33rE7t
FWGkG9W1G1IGdLG6KwNqd/lEaM8bMOVijXb+SKZ89my3Rnk1yfHe7jUob1GV
5N0ItqdkeW/3FquUijTvx8L1efK8e3/YPO/eE/K8eyvO867I7lp9nnd9VeYm
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
NmcXswEA

-->

</rfc>
