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

<t>RFC 8519 defines a YANG data model for Access Control Lists
(ACLs). This document specifies 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 101?>

<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 of the network operators.</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, it is valuable from a network operation standpoint to support means to easily map to the filtering rules conveyed in
messages triggered by these tools.</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 addresses, IP prefixes, port numbers, or ICMP types.</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 protocol-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 transport protocol entries (e.g., TCP and UDP).</t>
          </dd>
          <dt/>
          <dd>
            <t>A port number can be a port range or a single port number along with an operator (equal to, greater than or equal to, etc.).</t>
          </dd>
          <dt>Protocol sets:</dt>
          <dd>
            <t>A protocol set contains a list of protocol values. A 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>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. An offset type (e.g., layer 2 or layer 3) is used to indicates the position of the data in packet to use for the match.</t>
          </dd>
        </dl>
      </section>
      <section anchor="ipv6-extension-headers">
        <name>IPv6 Extension Headers</name>
        <t>The enhanced ACL 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 module 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 module 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. The data offset indicates the position to look at in a packet (e.g., starts at the beginning of the IP header or transport header).</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 module can be used by 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) 2025 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 starts right after the IP header (including
       any options or headers pertaining to that IP layer, e.g.,
       IPv6 Extension Headers and the Authentication Header (AH)).

       This can be typically the beginning of transport header
       (e.g., UDP, TCP, SCTP, and DCCP) or any encapsulation
       scheme over IP such as IP-in-IP.";
  }

  identity payload {
    base offset-type;
    description
      "The offset starts right after the end of the transport
       header. 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.
       
       This type may be used for matches against any data in
       the transport payload and/or any surplus area (if any,
       such as in UDP).";
  } 

  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 ae {
    base tcp-flag;
    description
      "Accurate ECN.

       Previously used as NS (Nonce Sum), which is now
       historic.";
  }

  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
        "Specifies 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 pattern 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 protocol-set {
      type protocol-set-ref;
      description
        "A reference to a protocol set to match the protocol
         field.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl: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 next-header
         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 YANG-based management protocols (1) have to
use a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and
QUIC <xref target="RFC9000"/>) and (2) 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. Likewise, access to this information will help an attacker to
better scope its attacks to target resources that are specific to a given network instead
of performing random scans. Also, disclosing some of this information (e.g., IP addresses of core routers)
may nullify the effect of topology hiding strategies in some networks.</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 illegal characters (e.g., spaces) are 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 illegal characters (e.g., 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="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="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_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 2022?>

<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 and 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 ACL model defined in <xref target="RFC8519"/> 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 can 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": {
                "ipv6": {
                  "protocol": 41
                },
                "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 and Sean Turner for the secdir reviews.</t>
      <t>Thanks to Erik Kline, Mike Bishop, Éric Vyncke, Roman Danyliw, and Deb Cooley for the IESG 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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
WDwkX8kTzzIhuH915v+pFkT3xcHBU7EqndlnWRBZnJ5mQKyK0c3/OrsqonH4
HDSoy9Ugvw1g9djhO5MVp/z3fwbRNIjmUcf1h8EEg6Yr8eHVXRAnoVsMf+wt
95ZV2zpOz87+TrdCORxfXMli2VESu7hNORrMzTyYaUAVs+ZpMcgCsMs9adpd
UeMINRBWEjCHEmqstDKdSU1Z4lLIzdA6iO9t9/YrQjjvuQAPhz3LhcDecqdc
dSNkCJQ6qgPZwe5uLcjKFvLecg89D1dN77gEKv5vSVh91ayl7M6FGnlJylJV
SH31pKJ0+0PUyyNKI+0lcXUzpE55OnqS9EVCWtoWykAjSb6pQdynpKqYaNbN
U5GYPpbttGeO39ZNhe0t24A3j8x+yYb9l86GxTtC0nzYnXXlwvb+cLmwi5Nh
aWU9MQsW2z4x/VU2veIDl83Nf5+k1d6XpNWyB+tNWu19SVpdUfL8QZNWe1+S
VsWipFUpJ9eWrVq22suzVXnkf/c81fJE1eJPBrE1pq6Wrq4CQYAngNoZjuiY
9P54ibI8WvHzz5Mgu9Q+N2oK1EqR7aUpsrvt7b32zkFlimxv3SmyvUUpsr0v
KbJrTZEF1vlvKu/w35L3jWzZVRJld78kyn5JlP2SKFtIlFXI9jhl9r731KTZ
jFteljYr5fS/etpsBk81avHNSqmzvRVTZ2vmrS4Pk1fkrXZqhbr39ioSPq+o
Av5tELx0JwWg6uSdUQF9aC+gg2fCsjAlr17imc7IezZZluTkLc8/K6TkPROk
RZsR3Z16CaZqE2ItoJQmIu0sTzFNdx2eCcZF4uEdTFF8jqXQQdD/lDhhCUy7
yzfMdFdC9SWos1oQ7rzobteEENDGeG0RxOXrvwRE7m3dMJ4Efol82l0uDEog
xL6eCV+d/OHd5dKhJIG4Hvsd9Cq2R+skXHd3lwuKspTrZ4J26YDlOwiWUW15
Ur/qaJ10U30uo1yvPnTrpJ1KQlPmVxGwF8unVCWyyU7WwmnXDl/OhtZpEajl
CkDymdFNvZV5cLhXnR9wCc6WkehbJYGXawXKAsDezLTkFYTwXm+nQoCUgHlN
tn9UMrk1kivKIVVdPhdYyvB0FGefuNEwgCdzc/1VcmadZAvuXy9CoUfILPGV
GHe3u1OZN1+OTWa9VqOzXOUsQCcrXtaDj4yX7dTW6zWyMVQMbkc8T8PvHlRp
0NfB1DkCT1gdqNI0ktZg9QQsV17Yt6DO9VGqdAqUuboK8Xs7LypyXxagAbZk
NRLLtdwSJNDQXQ8KnAF5RYHIxbp5b7n2k+mU3NvqCroelEuU9N5yXZgFc3VN
XQ3nMfakAnBXdnxXT0gu15SZjgX2/AzhePiiQqsXwK8pFZfr0hL4nyENKxFY
R35gd7+mwl1zgmA9NV2ZIahFdS0nYH8V7+7p7sDOQcVZxxy0iyXP/iqO3pO9
qrqw3tK9lVWgLteuBVCNDp8J6asLPOFwofiyCN1y7cldqOUY1QJof79XkTF8
fXUuY8eVwmO/xjnuq/N8CLqenN7fr7Jpzy8By3NMkgnCt1T/sxrA5XqPuxOy
P8Edrgbqi6qQ0kkii9xKO6D6tOdyxaf70kbFKtG33osqtZeHkS63V25IEdDl
6q4IqNnlM6G9qMGUyzXaxROZ8sWL3QrlVSfHu9urUd6iLMm7FmzPyfLu9par
lJI076fC9XnyvHt/2Dzv3jPyvHtrzvMuye5af553dVXmOmnfS25lWJBlUrgY
4RkJ4X8yM8L/RPRZJSXcaFEnJ9z8vF5SuNmiZlY4N8mmheOzVfLC6ft6ieH0
aXVm+J8s+qBGbrijmKHN955jYjjjsihn9U+SpysSNP+kBZlim8wY6bLT/RgZ
nPpZVYJo2vtq2eNmu2z6ePrmGaWUjU6Mn5VqKT+li/I2zbeRw1fE5+72oSQe
2r+eyPLL5R2sVn85nUeVbLpgFjNpgMakVGXZmgCuquXMtkvz2bPCkXnV7IB1
oAFxEds6+BvJ7itiv7qaLZ/c2vnuq+Ba+Pvjyo+PIzoKefGLZyjXaf3M+EWE
fd5Q2RmvKX+rCPlkHn/2Gl9obGUWqtmU8Ss3w4r2l9lSmWJ0bZsUDSp6JXib
TppnT18TRm7wYgXN+feyi+oEfD1qaQa+AadM1s7Mdr3C0WXyo5Cen/1olfz8
CoW3vJ50DbjMRP0sn1OmfuZRmuJeH5f/LsJQOze/AFIZADrJPuUuI++9evKN
xPcyMtUoEV1n1rc0i2dz4EsY/Rlp8M/2V5bmxWfu2pGZ8YftncPSzPjMx+Rj
Pjs3PnvXDzbPZMdnXn/Jj19HfnwZT0lo6JqYLzny//458v+mCevalv/ZSFB/
anp6reR0FJUy2PavmZxelZr+xMT0xfa2GaeszFPHCXsdzNqDeRv+eTMr3U2o
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
JIfx8TxXd/9g/wX4+v8fDRal1464AQA=

-->

</rfc>
