<?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.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-acl-extensions-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <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-03"/>
    <author fullname="Oscar Gonzalez de Dios">
      <organization>Telefonica</organization>
      <address>
        <email>oscar.gonzalezdedios@telefonica.com</email>
      </address>
    </author>
    <author fullname="Samier Barguil">
      <organization>Telefonica</organization>
      <address>
        <email>samier.barguilgiraldo.ext@telefonica.com</email>
      </address>
    </author>
    <author fullname="Mohamed Boucadair">
      <organization>Orange</organization>
      <address>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Qin Wu">
      <organization>Huawei</organization>
      <address>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <date year="2023" month="October" day="17"/>
    <area>Operations and Management</area>
    <workgroup>netmod</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 53?>

<t>RFC 8519 defines a YANG data model for Access Control Lists
(ACLs). This document discusses a set of extensions that fix many of
the limitations of the ACL model as initially defined in RFC 8519.</t>
      <t>The document also defines IANA-maintained modules for ICMP types and IPv6 extension headers.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Network Modeling Working Group mailing list (netmod@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netmod/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/boucadair/enhanced-acl-netmod"/>.</t>
    </note>
  </front>
  <middle>
    <?line 61?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="RFC8519"/> defines Access Control Lists (ACLs) as a
user-ordered set of filtering rules. The model targets the
configuration of the filtering behavior of a device. However, the
model structure, as defined in <xref target="RFC8519"/>, suffers from a set of limitations. This
document describes these limitations and proposes an enhanced ACL
structure. The YANG module in this document is solely based
on augmentations to the ACL YANG module defined in <xref target="RFC8519"/>.</t>
      <t>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 is also meant to facilitate the management of
network operators. Instead of entering the IP address or port number
literals, using user-named lists decouples the creation of the rule
from the management of the sets. Hence, it is possible to remove/add
 entries to the list without redefining the (parent) ACL rule.</t>
      <t>In addition, the notion of Access Control List (ACL) and defined sets
 is generalized so that it is not device-specific as per <xref target="RFC8519"/>.  ACLs
 and defined sets may be defined at network / administrative domain level
 and associated to devices. This approach facilitates the reusability across multiple
  network elements. For example, managing the IP prefix sets from a network
   level makes it easier to maintain by the security groups.</t>
      <t>Network operators maintain sets of IP prefixes that are related to each other,
e.g., deny-lists or accept-lists that are associated with those provided by a
 VPN customer. These lists are maintained and manipulated by security expert teams.</t>
      <t>Note that ACLs are used locally in devices but are triggered by other
tools such as DDoS mitigation <xref target="RFC9132"/> or BGP Flow Spec <xref target="RFC8955"/>
        <xref target="RFC8956"/>. Therefore, supporting means to easily map to the filtering rules conveyed in
messages triggered by  these tools is valuable from a network operation standpoint.</t>
      <t>The document also defines IANA-maintained modules for ICMP types and IPv6 extension headers. The design of the modules adheres to the recommendations
in <xref target="I-D.boucadair-netmod-rfc8407bis"/>. The templates to generate the modules is available at <xref target="template"/>, <xref target="v6-template"/>, and <xref target="iana-ipv6-ext-template"/>. Readers should refer to the IANA
websites [REF_TBC], [REF_TBC2], and [REF_TBC3] to retrieve the latest version of the modules. The modules are provided in <xref target="iana-icmp"/>, <xref target="iana-icmpv6"/>, and <xref target="iana-ipv6-ext"/> for the users convenience, but these appendices will be removed from the final RFC.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The terminology for describing YANG modules is defined in <xref target="RFC7950"/>.
The meaning of the symbols in the tree diagrams is defined in
<xref target="RFC8340"/>.</t>
      <t>In addition to the terms defined in <xref target="RFC8519"/>, this document makes use of the following term:</t>
      <t>Defined set:
:Refers to reusable description of one or multiple information elements (e.g., IP address, IP prefix, port number, or ICMP type).</t>
    </section>
    <section anchor="overall-structure-of-the-enhanced-acl-module">
      <name>Overall Structure of The Enhanced ACL Module</name>
      <section anchor="tree-structure">
        <name>Tree Structure</name>
        <t><xref target="enh-acl-tree"/> shows the full enhanced ACL tree:</t>
        <figure anchor="enh-acl-tree">
          <name>Enhanced ACL tree</name>
          <artwork><![CDATA[
module: ietf-acl-enh
  +--rw defined-sets
  |  +--rw ipv4-prefix-sets
  |  |  +--rw prefix-set* [name]
  |  |     +--rw name           string
  |  |     +--rw description?   string
  |  |     +--rw prefix*        inet:ipv4-prefix
  |  +--rw ipv6-prefix-sets
  |  |  +--rw prefix-set* [name]
  |  |     +--rw name           string
  |  |     +--rw description?   string
  |  |     +--rw prefix*        inet:ipv6-prefix
  |  +--rw port-sets
  |  |  +--rw port-set* [name]
  |  |     +--rw name    string
  |  |     +--rw port* [id]
  |  |        +--rw id                              string
  |  |        +--rw (port)?
  |  |           +--:(port-range-or-operator)
  |  |              +--rw port-range-or-operator
  |  |                 +--rw (port-range-or-operator)?
  |  |                    +--:(range)
  |  |                    |  +--rw lower-port    inet:port-number
  |  |                    |  +--rw upper-port    inet:port-number
  |  |                    +--:(operator)
  |  |                       +--rw operator?     operator
  |  |                       +--rw port          inet:port-number
  |  +--rw protocol-sets
  |  |  +--rw protocol-set* [name]
  |  |     +--rw name        string
  |  |     +--rw protocol*   union
  |  +--rw icmpv4-type-sets
  |  |  +--rw icmpv4-type-set* [name]
  |  |     +--rw name     string
  |  |     +--rw types* [type]
  |  |        +--rw type              iana-icmpv4-types:icmpv4-type
  |  |        +--rw code?             uint8
  |  |        +--rw rest-of-header?   binary
  |  +--rw icmpv6-type-sets
  |     +--rw icmpv6-type-set* [name]
  |        +--rw name     string
  |        +--rw types* [type]
  |           +--rw type              iana-icmpv6-types:icmpv6-type
  |           +--rw code?             uint8
  |           +--rw rest-of-header?   binary
  +--rw aliases
     +--rw alias* [name]
        +--rw name          string
        +--rw vlan*         uint16
        +--rw prefix*       inet:ip-prefix
        +--rw port-range* [lower-port]
        |  +--rw lower-port    inet:port-number
        |  +--rw upper-port?   inet:port-number
        +--rw protocol*     uint8
        +--rw fqdn*         inet:domain-name
        +--rw uri*          inet:uri

  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches:
    +--rw (payload)?
    |  +--:(prefix-pattern)
    |     +--rw prefix-pattern {match-on-payload}?
    |        +--rw offset?       identityref
    |        +--rw offset-end?   uint64
    |        +--rw operator?     operator
    |        +--rw prefix?       binary
    +--rw (alias)?
    |  +--:(alias-name)
    |     +--rw alias-name*       alias-ref
    +--rw (mpls)?
       +--:(mpls-values)
          +--rw mpls-values {match-on-mpls}?
             +--rw traffic-class?       uint8
             +--rw label-position?      identityref
             +--rw upper-label-range?   rt-types:mpls-label
             +--rw lower-label-range?   rt-types:mpls-label
             +--rw label-block-name?    string
             +--rw ttl-value?           uint8
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l2:
    +--rw vlan-filter {match-on-vlan-filter}?
    |  +--rw frame-type?         string
    |  +--rw (vlan-type)?
    |     +--:(range)
    |     |  +--rw lower-vlan    uint16
    |     |  +--rw upper-vlan    uint16
    |     +--:(operator)
    |        +--rw operator?     packet-fields:operator
    |        +--rw vlan*         uint16
    +--rw isid-filter {match-on-isid-filter}?
       +--rw (isid-type)?
          +--:(range)
          |  +--rw lower-isid    uint16
          |  +--rw upper-isid    uint16
          +--:(operator)
             +--rw operator?     packet-fields:operator
             +--rw isid*         uint16
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l3
          /acl:ipv4/acl:ipv4:
    +--rw ipv4-fragment
    |  +--rw operator?   operator
    |  +--rw type?       fragment-type
    +--rw source-ipv4-prefix-list?        ipv4-prefix-set-ref
    +--rw destination-ipv4-prefix-list?   ipv4-prefix-set-ref
    +--rw next-header-set?                protocol-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l3
          /acl:ipv6/acl:ipv6:
    +--rw ipv6-fragment
    |  +--rw operator?   operator
    |  +--rw type?       fragment-type
    +--rw source-ipv6-prefix-list?        ipv6-prefix-set-ref
    +--rw destination-ipv6-prefix-list?   ipv6-prefix-set-ref
    +--rw protocol-set?                   protocol-set-ref
    +--rw extension-header?
            iana-ipv6-ext-types:ipv6-extension-header-type
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4/acl:tcp:
    +--rw flags-bitmask
    |  +--rw (mode)?
    |     +--:(explicit)
    |     |  +--rw operator?            operator
    |     |  +--rw explicit-tcp-flag*   identityref
    |     +--:(builtin)
    |        +--rw bitmask?             uint16
    +--rw source-tcp-port-set?        port-set-ref
    +--rw destination-tcp-port-set?   port-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4/acl:udp:
    +--rw source-udp-port-set?        port-set-ref
    +--rw destination-udp-port-set?   port-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4/acl:icmp:
    +--rw icmpv4-set?   icmpv4-type-set-ref
    +--rw icmpv6-set?   icmpv6-type-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:actions:
    +--rw log-action
    |  +--rw log-type?   identityref
    |  +--rw log-id?     string
    +--rw counter-action
    |  +--rw counter-type?   identityref
    |  +--rw counter-name*   string
    +--rw rate-limit?       decimal64
]]></artwork>
        </figure>
      </section>
      <section anchor="defined-sets">
        <name>Defined Sets</name>
        <t>The augmented ACL structure includes several containers to manage reusable sets of elements that can be matched in an ACL entry.
Each set is uniquely identified by a name and can be called from the relevant entry. The following sets are defined:</t>
        <ul spacing="normal">
          <li>
            <dl>
              <dt>IPv4 prefix set:</dt>
              <dd>
                <t>It contains a list of IPv4 prefixes. A match will be considered if the IP address (source or destination, depending on the ACL entry) is contained in any of the prefixes.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>IPv6 prefix set:</dt>
              <dd>
                <t>It contains a list of IPv6 prefixes. A match will be considered if the IP address (source or destination, depending on the ACL entry) is contained in any of the prefixes.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Port sets:</dt>
              <dd>
                <t>It contains a list of port numbers to be used in TCP/UDP entries. The port numbers can be individual port numbers, a range of ports, and an operation.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Protocol sets:</dt>
              <dd>
                <t>It contains a list of protocol values. Each protocol can be identified either by a number (e.g., 17) or a name (e.g., UDP).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>ICMP sets:</dt>
              <dd>
                <t>It contains a list of ICMPv4 or ICMPv6 types, each of them identified by a type value, optionally the code and the rest of the header.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Aliases:</dt>
              <dd>
                <t>An alias is defined by a combination of various parameters (e.g., IP prefix, protocol, port number, or VLAN). Sets of aliases can be defined and referred to in match criteria.</t>
              </dd>
            </dl>
          </li>
        </ul>
      </section>
      <section anchor="ipv6-extension-headers">
        <name>IPv6 Extension Headers</name>
        <t>The module can be used to manage ACLs that require matching against IPv6 extension headers. To that aim, a new IANA-maintained module is defined in in this document.</t>
      </section>
      <section anchor="tcp-flags-handling">
        <name>TCP Flags Handling</name>
        <t>The augmented ACL structure includes a new leaf 'flags-bitmask' to better handle flags.</t>
        <t>Clients that support both 'flags-bitmask' and 'flags' matching fields <bcp14>MUST NOT</bcp14> set these fields in the same request.</t>
        <t><xref target="example_4"/> shows an example of a request to install a filter to discard incoming TCP messages having all flags unset.</t>
        <figure anchor="example_4">
          <name>Example of an ACL to Deny TCP Null Attack Messages (Request Body)</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-access-control-list:acls":{
      "acl":[
         {
            "name":"tcp-flags-example",
            "aces":{
               "ace":[
                  {
                     "name":"null-attack",
                     "matches":{
                        "tcp":{
                           "acl-enh:flags-bitmask":{
                              "operator":"not any",
                              "bitmask":4095
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"drop"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fragments-handling">
        <name>Fragments Handling</name>
        <t>The augmented ACL structure includes a new leaf 'fragment' to better handle fragments.</t>
        <t>Clients that support both 'fragment' and 'flags' matching fields <bcp14>MUST NOT</bcp14> set these fields in the same request.</t>
        <t><xref target="example_2"/> shows the content of a POST request to allow the traffic destined to 198.51.100.0/24 and UDP port number 53, but to drop all fragmented
packets.  The following ACEs are defined (in this order):</t>
        <ul spacing="normal">
          <li>
            <t>"drop-all-fragments" ACE: discards all fragments.</t>
          </li>
          <li>
            <t>"allow-dns-packets" ACE: accepts DNS packets destined to 198.51.100.0/24.</t>
          </li>
        </ul>
        <figure anchor="example_2">
          <name>Example Illustrating Candidate Filtering of IPv4 Fragmented Packets (Message Body)</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-access-control-list:acls":{
      "acl":[
         {
            "name":"dns-fragments",
            "type":"ipv4-acl-type",
            "aces":{
               "ace":[
                  {
                     "name":"drop-all-fragments",
                     "matches":{
                        "ipv4":{
                           "acl-enh:ipv4-fragment":{
                              "operator":"match",
                              "type":"isf"
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"drop"
                     }
                  },
                  {
                     "name":"allow-dns-packets",
                     "matches":{
                        "ipv4":{
                           "destination-ipv4-network":"198.51.100.0/24"
                        },
                        "udp":{
                           "destination-port":{
                              "operator":"eq",
                              "port":53
                           }
                        },
                        "actions":{
                           "forwarding":"accept"
                        }
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
        <t><xref target="example_3"/> shows an example of the body of a POST request to allow the traffic destined to 2001:db8::/32 and UDP port number 53, but to drop all fragmented packets. The following ACEs are defined (in this order):</t>
        <ul spacing="normal">
          <li>
            <t>"drop-all-fragments" ACE: discards all fragments (including atomic fragments). That is, IPv6 packets that include a Fragment header (44) are dropped.</t>
          </li>
          <li>
            <t>"allow-dns-packets" ACE: accepts DNS packets destined to 2001:db8::/32.</t>
          </li>
        </ul>
        <figure anchor="example_3">
          <name>An Example Illustrating Filtering of IPv6 Fragmented Packets (Message Body)</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-access-control-list:acls":{
      "acl":[
         {
            "name":"dns-fragments",
            "type":"ipv6-acl-type",
            "aces":{
               "ace":[
                  {
                     "name":"drop-all-fragments",
                     "matches":{
                        "ipv6":{
                           "acl-enh:ipv6-fragment":{
                              "operator":"match",
                              "type":"isf"
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"drop"
                     }
                  },
                  {
                     "name":"allow-dns-packets",
                     "matches":{
                        "ipv6":{
                           "destination-ipv6-network":"2001:db8::/32"
                        },
                        "udp":{
                           "destination-port":{
                              "operator":"eq",
                              "port":53
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"accept"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="payload-based-filtering">
        <name>Payload-based Filtering</name>
        <t>Some transport protocols use existing protocols (e.g., TCP or UDP) as substrate. The match criteria for such protocols may rely upon the 'protocol' under 'l3', TCP/UDP match criteria, part of the TCP/UDP payload, or a combination thereof. A new feature, called "match-on-payload", is defined in the document.</t>
      </section>
      <section anchor="match-mpls-headers">
        <name>Match MPLS Headers</name>
        <t>The ACL model can be used to create rules to match MPLS fields on a packet. The MPLS headers defined in <xref target="RFC3032"/> and <xref target="RFC5462"/> contains the following fields:</t>
        <ul spacing="normal">
          <li>
            <t>Traffic Class: 3 bits 'EXP' renamed to 'Traffic Class Field."</t>
          </li>
          <li>
            <t>Label Value: A 20-bit field that carries the actual value of the MPLS Label.</t>
          </li>
          <li>
            <t>TTL: An eight-bit field that is used to encode a time-to-live value.</t>
          </li>
        </ul>
        <t>The structure of the MPLS ACL subtree is shown in <xref target="example_8"/>:</t>
        <figure anchor="example_8">
          <name>MPLS Header Match Subtree</name>
          <artwork><![CDATA[
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches:
    ...
    +--rw (mpls)?
       +--:(mpls-values)
          +--rw mpls-values {match-on-mpls}?
             +--rw traffic-class?       uint8
             +--rw label-position       identityref
             +--rw upper-label-range?   uint32
             +--rw lower-label-range?   uint32
             +--rw label-block-name     string
             +--rw ttl-value?           uint8
]]></artwork>
        </figure>
      </section>
      <section anchor="vlan-filter">
        <name>VLAN Filter</name>
        <t>Being able to filter all packets that are bridged within a VLAN or that
are routed into or out of a bridge domain is part of the VPN control
requirements derived of the EVPN definition done in <xref target="RFC7209"/>.
So, all packets that are bridged within a VLAN or that are routed into or
out of a VLAN can be captured, forwarded, translated or discarded based
on the network policy applied.</t>
        <t><xref target="example_7"/> shows an ACL example to illustrate how to apply a VLAN range filter.</t>
        <figure anchor="example_7">
          <name>Example of VLAN Filter (Message Body)</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-acces-control-list:acls":{
      "acl":[
         {
            "name":"VLAN_FILTER",
            "aces":{
               "ace":[
                  {
                     "name":"1",
                     "matches":{
                        "ietf-acl-enh:vlan-filter":{
                           "lower-vlan":10,
                           "upper-vlan":20
                        }
                     },
                     "actions":{
                        "forwarding":"ietf-acces-control-list:accept"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="isid-filter">
        <name>ISID Filter</name>
        <t>Provider backbone bridging (PBB) was originally defined as Virtual
Bridged Local Area Networks [IEEE802.1ah]
standard. However, instead of multiplexing VLANs, PBB
duplicates the MAC layer of the customer frame and separates it from
the provider domain, by encapsulating it in a 24 bit instance service
identifier (I-SID). This provides for more transparency between the
customer network and the provider network.</t>
        <t>The I-component forms the customer or access facing interface or
routing instance. The I-component is responsible for mapping customer
Ethernet traffic to the appropriate I-SID. In the network is
mandatory to configure the default service identifier.</t>
        <t>Being able to filter by I-component Service identifier is a feature of
the EVNP-PBB configuration.</t>
        <t><xref target="example_6"/> shows an ACL example to illustrate the ISID range filtering.</t>
        <figure anchor="example_6">
          <name>Example ISID Filter (Message Body)</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-acces-control-list:acls":{
      "acl":[
         {
            "name":"test",
            "aces":{
               "ace":[
                  {
                     "name":"1",
                     "matches":{
                        "ietf-acl-enh:isid-filter":{
                           "lower-isid":100,
                           "upper-isid":200
                        }
                     },
                     "actions":{
                        "forwarding":"ietf-acces-control-list:accept"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="additional-actions">
        <name>Additional Actions</name>
        <t>In order to support rate-limiting (see <xref target="ps-rate"/>), a new action called "rate-limit" is defined. <xref target="example_5"/> shows an ACL example to rate-limit incoming SYNs during a SYN flood attack.</t>
        <figure anchor="example_5">
          <name>An Example of Rate-Limit Incoming TCP SYNs (Message Body).</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-access-control-list:acls":{
      "acl":[
         {
            "name":"tcp-flags-example-with-rate-limit",
            "aces":{
               "ace":[
                  {
                     "name":"rate-limit-syn",
                     "matches":{
                        "tcp":{
                           "acl-enh:flags-bitmask":{
                              "operator":"match",
                              "bitmask":2
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"accept",
                        "acl-enh:rate-limit":"20.00"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
        <t>Also, the model supports new actions to complement existing ones: Log ('log-action') and write a counter ('counter-action'). The current version of the module supports only local actions.</t>
      </section>
    </section>
    <section anchor="enhanced-acl-yang-module">
      <name>Enhanced ACL YANG Module</name>
      <t>This model imports types from <xref target="RFC6991"/>, <xref target="RFC8519"/>, and <xref target="RFC8294"/>.</t>
      <sourcecode markers="true" name="ietf-acl-enh@2022-10-24.yang"><![CDATA[
module ietf-acl-enh {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-acl-enh";
  prefix acl-enh;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-access-control-list {
    prefix acl;
    reference
      "RFC 8519: YANG Data Model for Network Access
                 Control Lists (ACLs), Section 4.1";
  }
  import ietf-packet-fields {
    prefix packet-fields;
    reference
      "RFC 8519: YANG Data Model for Network Access
                 Control Lists (ACLs), Section 4.2";
  }
  import ietf-routing-types { 
    prefix rt-types;
    reference
      "RFC 8294: Common YANG Data Types for the Routing Area";
  }
  import iana-icmpv4-types { 
    prefix iana-icmpv4-types;
    reference
      "TBC";
  }
  import iana-icmpv6-types { 
    prefix iana-icmpv6-types;
    reference
      "TBC";
  }
  import iana-ipv6-ext-types { 
    prefix iana-ipv6-ext-types;
    reference
      "TBC";
  }

  organization
    "IETF NETMOD Working Group";
  contact
    "WG Web:   https://datatracker.ietf.org/wg/netmod/
     WG List:  mailto:netmod@ietf.org

     Author:   Mohamed Boucadair
               mailto:mohamed.boucadair@orange.com
     Author:   Samier Barguil
               mailto:samier.barguilgiraldo.ext@telefonica.com
     Author:   Oscar Gonzalez de Dios
               mailto:oscar.gonzalezdedios@telefonica.com";
  description
    "This module contains YANG definitions for enhanced ACLs.

     Copyright (c) 2023 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

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

  revision 2022-10-24 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: Extensions to the Access Control Lists (ACLs)
                 YANG Model";
  }

  feature match-on-payload {
    description
      "Match based on a pattern is supported.";
  }

  feature match-on-vlan-filter {
    description
      "Match based on a VLAN range of vlan list is supported.";
  }

  feature match-on-isid-filter {
    description
      "Match based on a ISID range of vlan list is supported.";
  }

  feature match-on-alias {
    description
      "Match based on aliases.";
  }

  feature match-on-mpls {
    description
      "Match based on MPLS headers.";
  }

  identity offset-type {
    description
      "Base identity for payload offset type.";
  }

  identity layer2 {
    base offset-type;
    description
      "The offset starts at the beginning of the Data Link layer
       header.";
  }

  identity layer3 {
    base offset-type;
    description
      "The offset starts at the beginning of the IP header.";
  }

  identity layer4 {
    base offset-type;
    description
      "The offset start right after the IP header. This can be
       typically the beginning of transport header (e.g., TCP
       or UDP).";
  }

  identity payload {
    base offset-type;
    description
      "The offset start right after the end of the transport
       payload. For example, this represents the beginning of the
       TCP data right after any TCP options or the beginning of
       the UDP payload right after the UDP header.";
  }

  identity tcp-flag {
    description
      "Base Identity for the TCP Flags.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity ack {
    base tcp-flag;
    description
      "Acknowledgment TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity syn {
    base tcp-flag;
    description
      "Synchronize sequence numbers.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity fin {
    base tcp-flag;
    description
      "No more data from the sender.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity urg {
    base tcp-flag;
    description
      "Urgent pointer TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity psh {
    base tcp-flag;
    description
      "The Push function flag is similar to the URG flag and tells
       the receiver to process these packets as they are received
       instead of buffering them.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity rst {
    base tcp-flag;
    description
      "Reset TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity ece {
    base tcp-flag;
    description
      "ECN-Echo TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity cwr {
    base tcp-flag;
    description
      "Congestion Window Reduced flag bit";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity mpls-acl-type {
    base acl:acl-base;
    description
      "An ACL that matches on fields from the MPLS header.";
  }

  identity label-position {
    description
      "Base identity for deriving MPLS label position.";
  }

  identity top {
    base label-position;
    description
      "Top of the label stack.";
  }

  identity bottom {
    base label-position;
    description
      "Bottom of the label stack.";
  }

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

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

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

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

  }

  typedef operator {
    type bits {
      bit not {
        position 0;
        description
          "If set, logical negation of operation.";
      }
      bit match {
        position 1;
        description
          "Match bit. This is a bitwise match operation defined as
           '(data & value) == value'.";
      }
      bit any {
        position 2;
        description
          "Any bit. This is a match on any of the bits in  bitmask.
           It evaluates to 'true' if any of the bits in the value mask
           are set in the data,  i.e., '(data & value) != 0'.";
      }
    }
    description
      "Specifies how to apply the defined bitmask.
       'any' and 'match' bits must not be set simultaneously.";
  }

  typedef fragment-type {
    type bits {
      bit df {
        position 0;
        description
          "Don't fragment bit for IPv4.
           Must be set to 0 when it appears in an IPv6 filter.";
      }
      bit isf {
        position 1;
        description
          "Is a fragment.";
      }
      bit ff {
        position 2;
        description
          "First fragment.";
      }
      bit lf {
        position 3;
        description
          "Last fragment.";
      }
    }
    description
      "Different fragment types to match against.";
  }

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

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

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

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

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

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

  typedef alias-ref {
    type leafref {
      path "/acl-enh:aliases/acl-enh:alias/acl-enh:name";
    }
    description
      "Defines a reference to an alias.";
  }

  grouping tcp-flags {
    description
      "Operations on TCP flags.";
    choice mode {
      description
        "Choice of how flags are indicated.";
      case explicit {
        leaf operator {
          type operator;
          default "match";
          description
            "How to interpret the TCP flags.";
        }
        leaf-list explicit-tcp-flag {
          type identityref {
            base tcp-flag;
          }
          description
            "An explicit list of the TCP flags that are to be
             matched.";
        }
      }
      case builtin {
        leaf bitmask {
          type uint16;
          description
            "The bitmask matches the last 4 bits of byte 12 and 13 of
             the TCP header.  For clarity, the 4 bits of byte 12
             corresponding to the TCP data offset field are not
             included in any matching.";
          reference
           "RFC 9293: Transmission Control Protocol (TCP),
                      Section 3.1";
        }
      }
    }
  }

  grouping fragment-fields {
    description
      "Operations on fragment types.";
    leaf operator {
      type operator;
      default "match";
      description
        "How to interpret the fragment type.";
    }
    leaf type {
      type fragment-type;
      description
        "What fragment type to look for.";
    }
  }

grouping mpls-match-parameters-config {
  description
    "Parameters for the configuration of MPLS match rules.";

  leaf traffic-class {
    type uint8 {
      range "0..7";
    }
    description
      "The value of the MPLS traffic class (TC) bits,
       formerly known as the EXP bits.";
  }

  leaf label-position {
    type identityref {
      base label-position;
    }
    description 
      "Position of the label";
  }

  leaf upper-label-range {
    type rt-types:mpls-label;
    description 
      "Match MPLS label value on the MPLS header.
       The usage of this field indicated the upper 
       range value in the top of the stack.
       This label value does not include the
       encodings of Traffic Class and TTL.";
     reference
       "RFC 3032: MPLS Label Stack Encoding";
  }
    
  leaf lower-label-range {
    type rt-types:mpls-label;
    description 
      "Match MPLS label value on the MPLS header.
       The usage of this field indicated the lower 
       range value in the top of the stack. 
       This label value does not include the
       encodings of Traffic Class and TTL.";
     reference
       "RFC 3032: MPLS Label Stack Encoding";
  }

  leaf label-block-name {
    type string;
    description 
    "Reference to a label block predefiend in the
     implementation.";
  }
    
  leaf ttl-value {
    type uint8;
    description 
      "Time-to-live MPLS packet value match.";
    reference
      "RFC 3032: MPLS Label Stack Encoding";
    }
  }

  grouping payload {
    description
      "Operations on payload match.";
    leaf offset {
      type identityref {
        base offset-type;
      }
      description
        "Indicates the payload offset. This will indicate the position
         of the data in packet to use for the match.";
    }
    leaf offset-end {
      type uint64;
      units "bytes";
      description
        "Indicates the number of bytes, starting from the offset to
         cover when performing the prefix match.";
    }
    leaf operator {
      type operator;
      default "match";
      description
        "How to interpret the prefix match.";
    }
    leaf prefix {
      type binary;
      description
        "The binary pattern to match against.";
    }
  }

  grouping alias {
    description
      "Specifies an alias.";
    leaf-list vlan {
      type uint16;
        description
          "VLAN of the alias.";
    }
    leaf-list prefix {
      type inet:ip-prefix;
      description
        "IPv4 or IPv6 prefix of the alias.";
    }
    list port-range {
      key "lower-port";
      description
        "Port range.  When only lower-port is
         present, it represents a single port number.";
      leaf lower-port {
        type inet:port-number;
        mandatory true;
        description
          "Lower port number of the port range.";
      }
      leaf upper-port {
        type inet:port-number;
        must '. >= ../lower-port' {
          error-message
            "The upper-port number must be greater than
             or equal to the lower-port number.";
        }
        description
          "Upper port number of the port range.";
      }
    }
    leaf-list protocol {
      type uint8;
      description
        "Identifies the target protocol number.
         For example, 6 for TCP or 17 for UDP.";
    }
    leaf-list fqdn {
      type inet:domain-name;
      description
        "FQDN identifying the target.";
    }
    leaf-list uri {
      type inet:uri;
      description
        "URI identifying the target.";
    }
  }

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

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

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


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

      leaf log-type {
        type identityref {
          base acl-enh:log-types;
        }
        description
          "The type of log action to be performed.";
      }
      leaf log-id {
        when "../log-type = '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 "../counter-type = 'counter-name'" {
          description
            "Name for the counter or variable to update when counter-type 
            is 'counter-name'.";
        }
        type string;
        description
          "List of possible variables or counter names to
          update based on match critieria.";
      }
    }  
  }

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

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l2" {
    description
      "Adds a match type based on MAC VLAN and ISID filters.";
    container vlan-filter {
      if-feature "match-on-vlan-filter";
      description
        "Indicates how to handle MAC VLANs.";
      leaf frame-type {
        type string;
        description
          "Entering the frame type allows the
           filter to match a specific type of frame format";
      }
      choice vlan-type {
        description
          "VLAN definition from range or operator.";
        case range {
          leaf lower-vlan {
            type uint16;
            must '. <= ../upper-vlan' {
              error-message
                "The lower-vlan must be less than or equal to
                 the upper-vlan.";
            }
            mandatory true;
            description
              "Lower boundary for a vlan.";
          }
          leaf upper-vlan {
            type uint16;
            mandatory true;
            description
              "Upper boundary for a vlan.";
          }
        }
        case operator {
          leaf operator {
            type packet-fields:operator;
            default "eq";
            description
              "Operator to be applied on the vlan below.";
          }
          leaf-list vlan {
            type uint16;
            description
              "VLAN number along with the operator on which to
               match.";
          }
        }
      }
    }
    container isid-filter {
      if-feature "match-on-isid-filter";
      description
        "Indicates how to handle ISID filters.
         The I-component is responsible for mapping customer
         Ethernet traffic to the appropriate ISID.";
      choice isid-type {
        description
          "ISID definition from range or operator.";
        case range {
          leaf lower-isid {
            type uint16;
            must '. <= ../upper-isid' {
              error-message
                "The lower-isid must be less than or equal to
                 the upper-isid.";
            }
            mandatory true;
            description
              "Lower boundary for a ISID.";
          }
          leaf upper-isid {
            type uint16;
            mandatory true;
            description
              "Upper boundary for a ISID.";
          }
        }
        case operator {
          leaf operator {
            type packet-fields:operator;
            default "eq";
            description
              "Operator to be applied on the ISID below.";
          }
          leaf-list isid {
            type uint16;
            description
              "ISID number along with the operator on which to
               match.";
          }
        }
      }
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l3/acl:ipv4/acl:ipv4" {
    description
      "Handle non-initial and initial fragments for IPv4 packets.";
    container ipv4-fragment {
      description
        "Indicates how to handle IPv4 fragments.";
      uses fragment-fields;
    }
    leaf source-ipv4-prefix-list {
      type ipv4-prefix-set-ref;
      description
        "A reference to an IPv4 prefix list to match the source
         address.";
    }
    leaf destination-ipv4-prefix-list {
      type ipv4-prefix-set-ref;
      description
        "A reference to a prefix list to match the destination
         address.";
    }
    leaf next-header-set {
      type protocol-set-ref;
      description
        "A reference to a protocol set to match the next-header
         field.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l3/acl:ipv6/acl:ipv6" {
    description
      "Handles non-initial and initial fragments for IPv6 packets.";
    container ipv6-fragment {
      description
        "Indicates how to handle IPv6 fragments.";
      uses fragment-fields;
    }
    leaf source-ipv6-prefix-list {
      type ipv6-prefix-set-ref;
      description
        "A reference to a prefix list to match the source address.";
    }
    leaf destination-ipv6-prefix-list {
      type ipv6-prefix-set-ref;
      description
        "A reference to a prefix list to match the destination
         address.";
    }
    leaf protocol-set {
      type protocol-set-ref;
      description
        "A reference to a protocol set to match the protocol field.";
    }
    leaf extension-header {
       type iana-ipv6-ext-types:ipv6-extension-header-type;
       description
         "IPv6 extension header value."; 
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l4/acl:tcp" {
    description
      "Handles TCP flags and port sets.";
    container flags-bitmask {
      description
        "Indicates how to handle TCP flags.";
      uses tcp-flags;
    }
    leaf source-tcp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the source port.";
    }
    leaf destination-tcp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the destination port.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l4/acl:udp" {
    description
      "Handle UDP port sets.";
    leaf source-udp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the source port.";
    }
    leaf destination-udp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the destination port.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l4/acl:icmp" {
    description
      "Handle ICMP type sets.";
    leaf icmpv4-set {
      type icmpv4-type-set-ref;
      description
        "A reference to an ICMPv4 type set to match the ICMPv4 type
         field.";
    }
    leaf icmpv6-set {
      type icmpv6-type-set-ref;
      description
        "A reference to an ICMPv6 type set to match the ICMPv6 type
         field.";
    }
  }

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

    uses acl-complementary-actions;

    leaf rate-limit {
      when "../acl:forwarding = 'acl:accept'" {
        description
          "Rate-limit valid only when accept action is used.";
      }
      type decimal64 {
        fraction-digits 2;
      }
      units "bytes per second";
      description
        "Indicates a rate-limit for the matched traffic.";
    }
  }


  container defined-sets {
    description
      "Predefined sets of attributes used in policy match
       statements.";
    container ipv4-prefix-sets {
      description
        "Data definitions for a list of IPv4 or IPv6
         prefixes which are matched as part of a policy.";
      list prefix-set {
        key "name";
        description
          "List of the defined prefix sets.";
        leaf name {
          type string;
          description
            "Name of the prefix set -- this is used as a label to
             reference the set in match conditions.";
        }
        leaf description {
          type string;
          description
            "Defined Set description.";
        }
        leaf-list prefix {
          type inet:ipv4-prefix;
          description
            "List of IPv4 prefixes to be used in match
             conditions.";
        }
      }
    }
    container ipv6-prefix-sets {
      description
        "Data definitions for a list of IPv6 prefixes which are
         matched as part of a policy.";
      list prefix-set {
        key "name";
        description
          "List of the defined prefix sets.";
        leaf name {
          type string;
          description
            "Name of the prefix set -- this is used as a label to
             reference the set in match conditions.";
        }
        leaf description {
          type string;
          description
            "A textual description of the prefix list.";
        }
        leaf-list prefix {
          type inet:ipv6-prefix;
          description
            "List of IPv6 prefixes to be used in match conditions.";
        }
      }
    }
    container port-sets {
      description
        "Data definitions for a list of ports which can
         be matched in policies.";
      list port-set {
        key "name";
        description
          "List of port set definitions.";
        leaf name {
          type string;
          description
            "Name of the port set -- this is used as a label to
             reference the set in match conditions.";
        }
        list port {
          key "id";
          description
            "Port numbers along with the operator on which to
             match.";
          leaf id {
            type string;
            description
              "Identifier of the list of port numbers.";
          }
          choice port {
            description
              "Choice of specifying the port number or referring to a
               group of port numbers.";
            container port-range-or-operator {
              description
                "Indicates a set of ports.";
              uses packet-fields:port-range-or-operator;
            }
          }
        }
      }
    }
    container protocol-sets {
      description
        "Data definitions for a list of protocols which can be matched
         in policies.";
      list protocol-set {
        key "name";
        description
          "List of protocol set definitions.";
        leaf name {
          type string;
          description
            "Name of the protocols set -- this is used as a label to
             reference the set in match conditions.";
        }
        leaf-list protocol {
          type union {
            type uint8;
            type string;
          }
          description
            "Value of the protocol set.";
          //Check if we can reuse an IANA-maintained module
        }
      }
    }
    container icmpv4-type-sets {
      description
        "Data definitions for a list of ICMPv4 types which can be
         matched in policies.";
      list icmpv4-type-set {
        key "name";
        description
          "List of ICMP type set definitions.";
        leaf name {
          type string;
          description
            "Name of the ICMPv4 type set -- this is used as a label to
             reference the set in match conditions.";
        }
        list types {
          key "type";
          description
            "Includes a list of ICMPv4 types.";
          uses icmpv4-header-fields;
        }
      }
    }
  container icmpv6-type-sets {
      description
        "Data definitions for a list of ICMPv6 types which can be
         matched in policies.";
      list icmpv6-type-set {
        key "name";
        description
          "List of ICMP type set definitions.";
        leaf name {
          type string;
          description
            "Name of the ICMPv6 type set -- this is used as a label to
             reference the set in match conditions.";
        }
        list types {
          key "type";
          description
            "Includes a list of ICMPv6 types.";
          uses icmpv6-header-fields;
        }
      }
    }
}
  container aliases {
    description
      "Top-levl container for aliases.";
    list alias {
      key "name";
      description
        "List of aliases.";
      leaf name {
        type string;
        description
          "The name of the alias.";
      }
      uses alias;
    }
  }
}
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The YANG modules specified in this document define a schema for data
 that is designed to be accessed via network management protocol such
 as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  The lowest NETCONF layer
 is the secure transport layer, and the mandatory-to-implement secure
 transport is Secure Shell (SSH) <xref target="RFC6242"/>.  The lowest RESTCONF layer
 is HTTPS, and the mandatory-to-implement secure transport is TLS
 <xref target="RFC8446"/>.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.</t>
      <t>There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., config true, which is the default). These data nodes may be considered sensitive or vulnerable in some network environments. Write operations (e.g., edit-config) to these data nodes without proper protection can have a negative effect on network operations. These are the subtrees and data nodes and their sensitivity/vulnerability:</t>
      <ul spacing="normal">
        <li>
          <t>TBC</t>
        </li>
      </ul>
      <t>Some of the readable data nodes in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. These are the subtrees and data nodes and their sensitivity/vulnerability:</t>
      <ul spacing="normal">
        <li>
          <t>TBC</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="uri-registrations">
        <name>URI Registrations</name>
        <t>This document requests IANA to register the following URIs in the "ns"
   subregistry within the "IETF XML Registry" <xref target="RFC3688"/>:</t>
        <artwork><![CDATA[
         URI: urn:ietf:params:xml:ns:yang:ietf-acl-enh
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.

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

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

         URI: urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="yang-module-name-registrations">
        <name>YANG Module Name Registrations</name>
        <t>This document requests IANA to register the following YANG modules in
   the "YANG Module Names" subregistry <xref target="RFC6020"/> within the "YANG
   Parameters" registry.</t>
        <artwork><![CDATA[
    name: ietf-acl-enh
    namespace: urn:ietf:params:xml:ns:yang:ietf-acl-enh
    maintained by IANA: N
    prefix: acl-enh
    reference: RFC XXXX

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

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

    name: iana-ipv6-ext-types
    namespace: urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types
    maintained by IANA: Y
    prefix: iana-ipv6-ext-types
    reference: RFC XXXX
]]></artwork>
      </section>
      <section anchor="considerations-for-iana-maintained-modules">
        <name>Considerations for IANA-Maintained Modules</name>
        <section anchor="icmpv4-types-iana-module">
          <name>ICMPv4 Types IANA Module</name>
          <t>IANA is requested to create and post
the initial version of the "iana-icmpv4-types" YANG module by
applying the XSLT stylesheet from <xref target="template"/> to the XML version of
<xref target="IANA-ICMPv4"/>.</t>
          <t>This document defines the initial version of the IANA-maintained
"iana-icmpv4-types" YANG module.  The most recent version of the YANG module
is available from the "YANG Parameters" registry
<xref target="IANA-YANG-PARAMETERS"/>.</t>
          <t>IANA is requested to add this note to the registry <xref target="IANA-YANG-PARAMETERS"/>:</t>
          <ul empty="true">
            <li>
              <t>New values must not be directly added to the "iana-icmpv4-types" YANG module.  They must instead be added to the "ICMP Type Numbers" registry <xref target="IANA-ICMPv4"/>.</t>
            </li>
          </ul>
          <t>When a value is added to the "ICMP Type Numbers" registry, a new "enum" statement
must be added to the "iana-icmpv4-types" YANG module.  The "enum" statement,
and sub-statements thereof, should be defined:</t>
          <dl>
            <dt>"enum":</dt>
            <dd>
              <t>Replicates a name from the registry.</t>
            </dd>
            <dt>"value":</dt>
            <dd>
              <t>Contains the decimal value of the IANA-assigned value.</t>
            </dd>
            <dt>"status":</dt>
            <dd>
              <t>Is included only if a registration has been deprecated
or obsoleted.  IANA "deprecated" maps to YANG status
"deprecated", and IANA "obsolete" maps to YANG status
"obsolete".</t>
            </dd>
            <dt>"description":</dt>
            <dd>
              <t>Replicates the description from the registry.</t>
            </dd>
            <dt>"reference":</dt>
            <dd>
              <t>Replicates the reference(s) from the registry with the
title of the document(s) added.</t>
            </dd>
          </dl>
          <t>Unassigned or reserved values are not present in the module.</t>
          <t>When the "iana-icmpv4-types" YANG module is updated, a new "revision"
statement with a unique revision date must be added in front of the
existing revision statements.</t>
          <t>IANA is requested to add this note to "ICMP Type Numbers" <xref target="IANA-ICMPv4"/>:</t>
          <artwork><![CDATA[
When this registry is modified, the YANG module "iana-icmpv4-types"
[IANA_ICMPv4_YANG_URL] must be updated as defined in RFCXXXX.
]]></artwork>
          <t>IANA is requested to updated the "Reference" in the "ICMP Type Numbers" registry
as follows:</t>
          <dl>
            <dt>OLD:</dt>
            <dd>
              <t><xref target="RFC2780"/></t>
            </dd>
            <dt>NEW:</dt>
            <dd>
              <t><xref target="RFC2780"/>[This_Document]</t>
            </dd>
          </dl>
        </section>
        <section anchor="icmpv6-types-iana-module">
          <name>ICMPv6 Types IANA Module</name>
          <t>IANA is requested to create and post
the initial version of the "iana-icmpv6-types" YANG module by
applying the XSLT stylesheet from <xref target="v6-template"/> to the XML version of
<xref target="IANA-ICMPv4"/>.</t>
          <t>This document defines the initial version of the IANA-maintained
"iana-icmpv6-types" YANG module.  The most recent version of the YANG module
is available from the "YANG Parameters" registry
<xref target="IANA-YANG-PARAMETERS"/>.</t>
          <t>IANA is requested to add this note to the registry <xref target="IANA-YANG-PARAMETERS"/>:</t>
          <ul empty="true">
            <li>
              <t>New values must not be directly added to the "iana-icmpv6-types" YANG module. They must instead be added to the "ICMPv6 "type" Numbers" registry <xref target="IANA-ICMPv6"/>.</t>
            </li>
          </ul>
          <t>When a value is added to the "ICMPv6 "type" Numbers" registry, a new "enum" statement
must be added to the "iana-icmpv6-types" YANG module.  The "enum" statement,
and sub-statements thereof, should be defined:</t>
          <dl>
            <dt>"enum":</dt>
            <dd>
              <t>Replicates a name from the registry.</t>
            </dd>
            <dt>"value":</dt>
            <dd>
              <t>Contains the decimal value of the IANA-assigned value.</t>
            </dd>
            <dt>"status":</dt>
            <dd>
              <t>Is included only if a registration has been deprecated
or obsoleted.  IANA "deprecated" maps to YANG status
"deprecated", and IANA "obsolete" maps to YANG status
"obsolete".</t>
            </dd>
            <dt>"description":</dt>
            <dd>
              <t>Replicates the description from the registry.</t>
            </dd>
            <dt>"reference":</dt>
            <dd>
              <t>Replicates the reference(s) from the registry with the
title of the document(s) added.</t>
            </dd>
          </dl>
          <t>Unassigned or reserved values are not present in the module.</t>
          <t>When the "iana-icmpv6-types" YANG module is updated, a new "revision"
statement with a unique revision date must be added in front of the
existing revision statements.</t>
          <t>IANA is requested to add this note to "ICMPv6 "type" Numbers" <xref target="IANA-ICMPv6"/>:</t>
          <artwork><![CDATA[
When this registry is modified, the YANG module "iana-icmpv6-types"
[IANA_ICMPv6_YANG_URL] must be updated as defined in RFCXXXX.
]]></artwork>
          <t>IANA is requested to updated the "Reference" in the "ICMPv6 "type" Numbers" registry
as follows:</t>
          <dl>
            <dt>OLD:</dt>
            <dd>
              <t><xref target="RFC4443"/></t>
            </dd>
            <dt>NEW:</dt>
            <dd>
              <t><xref target="RFC4443"/>[This_Document]</t>
            </dd>
          </dl>
        </section>
        <section anchor="ipv6-extension-header-types-iana-module">
          <name>IPv6 Extension Header Types IANA Module</name>
          <t>IANA is requested to create and post
the initial version of the "iana-ipv6-ext-types" YANG module by
applying the XSLT stylesheet from <xref target="iana-ipv6-ext-template"/> to the XML version of
<xref target="IANA-IPv6"/>.</t>
          <t>This document defines the initial version of the IANA-maintained
"iana-ipv6-ext-types" YANG module.  The most recent version of the YANG module
is available from the "YANG Parameters" registry
<xref target="IANA-YANG-PARAMETERS"/>.</t>
          <t>IANA is requested to add this note to the registry <xref target="IANA-YANG-PARAMETERS"/>:</t>
          <ul empty="true">
            <li>
              <t>New values must not be directly added to the "iana-ipv6-ext-types" YANG module.  They must instead be added to the "IPv6 Extension Header Types" registry <xref target="IANA-ICMPv6"/>.</t>
            </li>
          </ul>
          <t>When a value is added to the "IPv6 Extension Header Types" registry, a new "enum" statement
must be added to the "iana-ipv6-ext-types" YANG module.  The "enum" statement,
and sub-statements thereof, should be defined:</t>
          <dl>
            <dt>"enum":</dt>
            <dd>
              <t>Replicates a name from the registry.</t>
            </dd>
            <dt>"value":</dt>
            <dd>
              <t>Contains the decimal value of the IANA-assigned value.</t>
            </dd>
            <dt>"status":</dt>
            <dd>
              <t>Is included only if a registration has been deprecated
or obsoleted.  IANA "deprecated" maps to YANG status
"deprecated", and IANA "obsolete" maps to YANG status
"obsolete".</t>
            </dd>
            <dt>"description":</dt>
            <dd>
              <t>Replicates the description from the registry.</t>
            </dd>
            <dt>"reference":</dt>
            <dd>
              <t>Replicates the reference(s) from the registry with the
title of the document(s) added.</t>
            </dd>
          </dl>
          <t>Unassigned or reserved values are not present in the module.</t>
          <t>When the "iana-ipv6-ext-types" YANG module is updated, a new "revision"
statement with a unique revision date must be added in front of the
existing revision statements.</t>
          <t>IANA is requested to add this note to the "IPv6 Extension Header Types" registry <xref target="IANA-IPv6"/>:</t>
          <artwork><![CDATA[
When this registry is modified, the YANG module "iana-ipv6-ext-types"
[IANA_IPV6_YANG_URL] must be updated as defined in RFCXXXX.
]]></artwork>
          <t>IANA is requested to updated the "Reference" in the "IPv6 Extension Header Types" registry
as follows:</t>
          <dl>
            <dt>OLD:</dt>
            <dd>
              <t><xref target="RFC2780"/><xref target="RFC5237"/><xref target="RFC7045"/></t>
            </dd>
            <dt>NEW:</dt>
            <dd>
              <t><xref target="RFC2780"/><xref target="RFC5237"/><xref target="RFC7045"/>[This_Document]</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8519">
          <front>
            <title>YANG Data Model for Network Access Control Lists (ACLs)</title>
            <author fullname="M. Jethanandani" initials="M." surname="Jethanandani"/>
            <author fullname="S. Agarwal" initials="S." surname="Agarwal"/>
            <author fullname="L. Huang" initials="L." surname="Huang"/>
            <author fullname="D. Blair" initials="D." surname="Blair"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document defines a data model for Access Control Lists (ACLs). An ACL is a user-ordered set of rules used to configure the forwarding behavior in a device. Each rule is used to find a match on a packet and define actions that will be performed on the packet.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8519"/>
          <seriesInfo name="DOI" value="10.17487/RFC8519"/>
        </reference>
        <reference anchor="RFC8956">
          <front>
            <title>Dissemination of Flow Specification Rules for IPv6</title>
            <author fullname="C. Loibl" initials="C." role="editor" surname="Loibl"/>
            <author fullname="R. Raszuk" initials="R." role="editor" surname="Raszuk"/>
            <author fullname="S. Hares" initials="S." role="editor" surname="Hares"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>"Dissemination of Flow Specification Rules" (RFC 8955) provides a Border Gateway Protocol (BGP) extension for the propagation of traffic flow information for the purpose of rate limiting or filtering IPv4 protocol data packets.</t>
              <t>This document extends RFC 8955 with IPv6 functionality. It also updates RFC 8955 by changing the IANA Flow Spec Component Types registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8956"/>
          <seriesInfo name="DOI" value="10.17487/RFC8956"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC3032">
          <front>
            <title>MPLS Label Stack Encoding</title>
            <author fullname="E. Rosen" initials="E." surname="Rosen"/>
            <author fullname="D. Tappan" initials="D." surname="Tappan"/>
            <author fullname="G. Fedorkow" initials="G." surname="Fedorkow"/>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <author fullname="D. Farinacci" initials="D." surname="Farinacci"/>
            <author fullname="T. Li" initials="T." surname="Li"/>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <date month="January" year="2001"/>
            <abstract>
              <t>This document specifies the encoding to be used by an LSR in order to transmit labeled packets on Point-to-Point Protocol (PPP) data links, on LAN data links, and possibly on other data links as well. This document also specifies rules and procedures for processing the various fields of the label stack encoding. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3032"/>
          <seriesInfo name="DOI" value="10.17487/RFC3032"/>
        </reference>
        <reference anchor="RFC5462">
          <front>
            <title>Multiprotocol Label Switching (MPLS) Label Stack Entry: "EXP" Field Renamed to "Traffic Class" Field</title>
            <author fullname="L. Andersson" initials="L." surname="Andersson"/>
            <author fullname="R. Asati" initials="R." surname="Asati"/>
            <date month="February" year="2009"/>
            <abstract>
              <t>The early Multiprotocol Label Switching (MPLS) documents defined the form of the MPLS label stack entry. This includes a three-bit field called the "EXP field". The exact use of this field was not defined by these documents, except to state that it was to be "reserved for experimental use".</t>
              <t>Although the intended use of the EXP field was as a "Class of Service" (CoS) field, it was not named a CoS field by these early documents because the use of such a CoS field was not considered to be sufficiently defined. Today a number of standards documents define its usage as a CoS field.</t>
              <t>To avoid misunderstanding about how this field may be used, it has become increasingly necessary to rename this field. This document changes the name of the field to the "Traffic Class field" ("TC field"). In doing so, it also updates documents that define the current use of the EXP field. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5462"/>
          <seriesInfo name="DOI" value="10.17487/RFC5462"/>
        </reference>
        <reference anchor="RFC7209">
          <front>
            <title>Requirements for Ethernet VPN (EVPN)</title>
            <author fullname="A. Sajassi" initials="A." surname="Sajassi"/>
            <author fullname="R. Aggarwal" initials="R." surname="Aggarwal"/>
            <author fullname="J. Uttaro" initials="J." surname="Uttaro"/>
            <author fullname="N. Bitar" initials="N." surname="Bitar"/>
            <author fullname="W. Henderickx" initials="W." surname="Henderickx"/>
            <author fullname="A. Isaac" initials="A." surname="Isaac"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>The widespread adoption of Ethernet L2VPN services and the advent of new applications for the technology (e.g., data center interconnect) have culminated in a new set of requirements that are not readily addressable by the current Virtual Private LAN Service (VPLS) solution. In particular, multihoming with all-active forwarding is not supported, and there's no existing solution to leverage Multipoint-to-Multipoint (MP2MP) Label Switched Paths (LSPs) for optimizing the delivery of multi-destination frames. Furthermore, the provisioning of VPLS, even in the context of BGP-based auto-discovery, requires network operators to specify various network parameters on top of the access configuration. This document specifies the requirements for an Ethernet VPN (EVPN) solution, which addresses the above issues.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7209"/>
          <seriesInfo name="DOI" value="10.17487/RFC7209"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC8294">
          <front>
            <title>Common YANG Data Types for the Routing Area</title>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <author fullname="Y. Qu" initials="Y." surname="Qu"/>
            <author fullname="A. Lindem" initials="A." surname="Lindem"/>
            <author fullname="C. Hopps" initials="C." surname="Hopps"/>
            <author fullname="L. Berger" initials="L." surname="Berger"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>This document defines a collection of common data types using the YANG data modeling language. These derived common types are designed to be imported by other modules defined in the routing area.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8294"/>
          <seriesInfo name="DOI" value="10.17487/RFC8294"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IANA-YANG-PARAMETERS" target="https://www.iana.org/assignments/yang-parameters">
          <front>
            <title>YANG Parameters</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA-ICMPv4" target="https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml">
          <front>
            <title>ICMP Type Numbers</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA-ICMPv6" target="https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml">
          <front>
            <title>ICMPv6 type Numbers</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA-IPv6" target="https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml">
          <front>
            <title>IPv6 Extension Header Types</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC9132">
          <front>
            <title>Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal Channel Specification</title>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair"/>
            <author fullname="J. Shallow" initials="J." surname="Shallow"/>
            <author fullname="T. Reddy.K" initials="T." surname="Reddy.K"/>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document specifies the Distributed Denial-of-Service Open Threat Signaling (DOTS) signal channel, a protocol for signaling the need for protection against Distributed Denial-of-Service (DDoS) attacks to a server capable of enabling network traffic mitigation on behalf of the requesting client.</t>
              <t>A companion document defines the DOTS data channel, a separate reliable communication layer for DOTS management and configuration purposes.</t>
              <t>This document obsoletes RFC 8782.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9132"/>
          <seriesInfo name="DOI" value="10.17487/RFC9132"/>
        </reference>
        <reference anchor="RFC8955">
          <front>
            <title>Dissemination of Flow Specification Rules</title>
            <author fullname="C. Loibl" initials="C." surname="Loibl"/>
            <author fullname="S. Hares" initials="S." surname="Hares"/>
            <author fullname="R. Raszuk" initials="R." surname="Raszuk"/>
            <author fullname="D. McPherson" initials="D." surname="McPherson"/>
            <author fullname="M. Bacher" initials="M." surname="Bacher"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>This document defines a Border Gateway Protocol Network Layer Reachability Information (BGP NLRI) encoding format that can be used to distribute (intra-domain and inter-domain) traffic Flow Specifications for IPv4 unicast and IPv4 BGP/MPLS VPN services. This allows the routing system to propagate information regarding more specific components of the traffic aggregate defined by an IP destination prefix.</t>
              <t>It also specifies BGP Extended Community encoding formats, which can be used to propagate Traffic Filtering Actions along with the Flow Specification NLRI. Those Traffic Filtering Actions encode actions a routing system can take if the packet matches the Flow Specification.</t>
              <t>This document obsoletes both RFC 5575 and RFC 7674.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8955"/>
          <seriesInfo name="DOI" value="10.17487/RFC8955"/>
        </reference>
        <reference anchor="I-D.boucadair-netmod-rfc8407bis">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <date day="26" month="July" year="2023"/>
            <abstract>
              <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-boucadair-netmod-rfc8407bis-02"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC2780">
          <front>
            <title>IANA Allocation Guidelines For Values In the Internet Protocol and Related Headers</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <author fullname="V. Paxson" initials="V." surname="Paxson"/>
            <date month="March" year="2000"/>
            <abstract>
              <t>This memo provides guidance for the IANA to use in assigning parameters for fields in the IPv4, IPv6, ICMP, UDP and TCP protocol headers. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="37"/>
          <seriesInfo name="RFC" value="2780"/>
          <seriesInfo name="DOI" value="10.17487/RFC2780"/>
        </reference>
        <reference anchor="RFC4443">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta"/>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol). ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="RFC5237">
          <front>
            <title>IANA Allocation Guidelines for the Protocol Field</title>
            <author fullname="J. Arkko" initials="J." surname="Arkko"/>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="February" year="2008"/>
            <abstract>
              <t>This document revises the IANA guidelines for allocating new Protocol field values in IPv4 header. It modifies the rules specified in RFC 2780 by removing the Expert Review option. The change will also affect the allocation of Next Header field values in IPv6. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="37"/>
          <seriesInfo name="RFC" value="5237"/>
          <seriesInfo name="DOI" value="10.17487/RFC5237"/>
        </reference>
        <reference anchor="RFC7045">
          <front>
            <title>Transmission and Processing of IPv6 Extension Headers</title>
            <author fullname="B. Carpenter" initials="B." surname="Carpenter"/>
            <author fullname="S. Jiang" initials="S." surname="Jiang"/>
            <date month="December" year="2013"/>
            <abstract>
              <t>Various IPv6 extension headers have been standardised since the IPv6 standard was first published. This document updates RFC 2460 to clarify how intermediate nodes should deal with such extension headers and with any that are defined in the future. It also specifies how extension headers should be registered by IANA, with a corresponding minor update to RFC 2780.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7045"/>
          <seriesInfo name="DOI" value="10.17487/RFC7045"/>
        </reference>
      </references>
    </references>
    <?line 2033?>

<section anchor="icmpv4-types">
      <name>ICMPv4 Types</name>
      <section anchor="template">
        <name>XSLT Template to Generate The ICMPv4 Types IANA-Maintained Module</name>
        <sourcecode markers="true"><![CDATA[

<?xml version="1.0" encoding="utf-8"?>
<stylesheet
    xmlns="http://www.w3.org/1999/XSL/Transform"
    xmlns:html="http://www.w3.org/1999/xhtml"
    xmlns:iana="http://www.iana.org/assignments"
    xmlns:yin="urn:ietf:params:xml:ns:yang:yin:1"
    version="1.0">
  <import href="../../../xslt/iana-yinx.xsl"/>
  <output method="xml" encoding="utf-8"/>
  <strip-space elements="*"/>

  <template match="iana:registry[@id='icmp-parameters-types']">
    <element name="yin:typedef">
      <attribute name="name">icmpv4-type-name</attribute>
      <element name="yin:type">
        <attribute name="name">enumeration</attribute>
        <apply-templates
            select="iana:record[not(iana:description = 'Unassigned' or
                    starts-with(iana:description, 'Reserved') or 
                    starts-with(iana:description, 'RFC3692')) or 
                    contains(iana:description, 'experimental')]"/>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This enumeration type defines mnemonic names and
          corresponding numeric values of ICMPv4 types.
        </element>
      </element>
      <element name="yin:reference">
        <element name="yin:text">
          RFC 2708: IANA Allocation Guidelines For Values In
                    the Internet Protocol and Related Headers
        </element>
      </element>
    </element>
    <element name="yin:typedef">
      <attribute name="name">icmpv4-type</attribute>
      <element name="yin:type">
        <attribute name="name">union</attribute>
        <element name="yin:type">
          <attribute name="name">uint8</attribute>
        </element>
        <element name="yin:type">
          <attribute name="name">icmpv4-type-name</attribute>
        </element>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This type allows reference to an ICMPv4 type using either
          the assigned mnemonic name or numeric value.
        </element>
      </element>
    </element>
  </template>

  <template match="iana:record">
    <call-template name="enum">
      <with-param name="id">
        <choose>
          <when test="contains(iana:description, '(Deprecated)')">
            <value-of select="translate(normalize-space(substring-before(iana:description, 
                  '(Deprecated)')),' ','')"/>
          </when>
          <otherwise>
            <value-of select="translate(normalize-space(iana:description),' ','')"/>
          </otherwise>
        </choose>
      </with-param>
      <with-param name="deprecated"
                  select="contains(iana:description, '(Deprecated)')"/>
    </call-template>
  </template>

</stylesheet>

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

module iana-icmpv4-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-icmpv4-types";
  prefix iana-icmpv4-types;

  organization
    "Internet Assigned Numbers Authority (IANA)";

  contact
    "Internet Assigned Numbers Authority

     ICANN
     12025 Waterfront Drive, Suite 300
     Los Angeles, CA 90094
     

     Tel: +1 424 254 5300

     <mailto:iana@iana.org>";

  description
    "This YANG module translates IANA registry 'ICMP Type Numbers' to
     YANG derived types.

     Copyright (c) 2020 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module was generated from the
     corresponding IANA registry using an XSLT stylesheet from the
     'iana-yang' project (https://github.com/llhotka/iana-yang).";

  reference
    "Internet Control Message Protocol (ICMP) Parameters
     (https://www.iana.org/assignments/icmp-parameters/)";

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

  /* Typedefs */

  typedef icmpv4-type-name {
    type enumeration {
      enum EchoReply {
        value 0;
        description
          "Echo Reply";
        reference
          "RFC 792";
      }
      enum DestinationUnreachable {
        value 3;
        description
          "Destination Unreachable";
        reference
          "RFC 792";
      }
      enum SourceQuench {
        value 4;
        status deprecated;
        description
          "Source Quench (Deprecated)";
        reference
          "- RFC 792
           - RFC 6633";
      }
      enum Redirect {
        value 5;
        description
          "Redirect";
        reference
          "RFC 792";
      }
      enum AlternateHostAddress {
        value 6;
        status deprecated;
        description
          "Alternate Host Address (Deprecated)";
        reference
          "RFC 6918";
      }
      enum Echo {
        value 8;
        description
          "Echo";
        reference
          "RFC 792";
      }
      enum RouterAdvertisement {
        value 9;
        description
          "Router Advertisement";
        reference
          "RFC 1256";
      }
      enum RouterSolicitation {
        value 10;
        description
          "Router Solicitation";
        reference
          "RFC 1256";
      }
      enum TimeExceeded {
        value 11;
        description
          "Time Exceeded";
        reference
          "RFC 792";
      }
      enum ParameterProblem {
        value 12;
        description
          "Parameter Problem";
        reference
          "RFC 792";
      }
      enum Timestamp {
        value 13;
        description
          "Timestamp";
        reference
          "RFC 792";
      }
      enum TimestampReply {
        value 14;
        description
          "Timestamp Reply";
        reference
          "RFC 792";
      }
      enum InformationRequest {
        value 15;
        status deprecated;
        description
          "Information Request (Deprecated)";
        reference
          "- RFC 792
           - RFC 6918";
      }
      enum InformationReply {
        value 16;
        status deprecated;
        description
          "Information Reply (Deprecated)";
        reference
          "- RFC 792
           - RFC 6918";
      }
      enum AddressMaskRequest {
        value 17;
        status deprecated;
        description
          "Address Mask Request (Deprecated)";
        reference
          "- RFC 950
           - RFC 6918";
      }
      enum AddressMaskReply {
        value 18;
        status deprecated;
        description
          "Address Mask Reply (Deprecated)";
        reference
          "- RFC 950
           - RFC 6918";
      }
      enum Traceroute {
        value 30;
        status deprecated;
        description
          "Traceroute (Deprecated)";
        reference
          "- RFC 1393
           - RFC 6918";
      }
      enum DatagramConversionError {
        value 31;
        status deprecated;
        description
          "Datagram Conversion Error (Deprecated)";
        reference
          "- RFC 1475
           - RFC 6918";
      }
      enum MobileHostRedirect {
        value 32;
        status deprecated;
        description
          "Mobile Host Redirect (Deprecated)";
        reference
          "- David Johnson <>
           - RFC 6918";
      }
      enum IPv6Where-Are-You {
        value 33;
        status deprecated;
        description
          "IPv6 Where-Are-You (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum IPv6I-Am-Here {
        value 34;
        status deprecated;
        description
          "IPv6 I-Am-Here (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum MobileRegistrationRequest {
        value 35;
        status deprecated;
        description
          "Mobile Registration Request (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum MobileRegistrationReply {
        value 36;
        status deprecated;
        description
          "Mobile Registration Reply (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum DomainNameRequest {
        value 37;
        status deprecated;
        description
          "Domain Name Request (Deprecated)";
        reference
          "- RFC 1788
           - RFC 6918";
      }
      enum DomainNameReply {
        value 38;
        status deprecated;
        description
          "Domain Name Reply (Deprecated)";
        reference
          "- RFC 1788
           - RFC 6918";
      }
      enum SKIP {
        value 39;
        status deprecated;
        description
          "SKIP (Deprecated)";
        reference
          "- Tom Markson <mailto:markson&osmosys.incog.com>
           - RFC 6918";
      }
      enum Photuris {
        value 40;
        description
          "Photuris";
        reference
          "RFC 2521";
      }
      enum ICMPmessagesutilizedbyexperimentalmobilityprotocolssuchasSeamoby {
        value 41;
        description
          "ICMP messages utilized by experimental mobility protocols
           such as Seamoby";
        reference
          "RFC 4065";
      }
      enum ExtendedEchoRequest {
        value 42;
        description
          "Extended Echo Request";
        reference
          "RFC 8335";
      }
      enum ExtendedEchoReply {
        value 43;
        description
          "Extended Echo Reply";
        reference
          "RFC 8335";
      }
    }
    description
      "This enumeration type defines mnemonic names and corresponding
       numeric values of ICMPv4 types.";
    reference
      "RFC 2708: IANA Allocation Guidelines For Values In the
       Internet Protocol and Related Headers";
  }

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

]]></sourcecode>
      </section>
    </section>
    <section anchor="icmpv6-types">
      <name>ICMPv6 Types</name>
      <section anchor="v6-template">
        <name>XSLT Template to Generate The ICMPv6 Types IANA-Maintained Module</name>
        <sourcecode markers="true"><![CDATA[

<?xml version="1.0" encoding="utf-8"?>
<stylesheet
    xmlns="http://www.w3.org/1999/XSL/Transform"
    xmlns:html="http://www.w3.org/1999/xhtml"
    xmlns:iana="http://www.iana.org/assignments"
    xmlns:yin="urn:ietf:params:xml:ns:yang:yin:1"
    version="1.0">
  <import href="../../../xslt/iana-yinx.xsl"/>
  <output method="xml" encoding="utf-8"/>
  <strip-space elements="*"/>

  <template match="iana:registry[@id='icmpv6-parameters-2']">
    <element name="yin:typedef">
      <attribute name="name">icmpv6-type-name</attribute>
      <element name="yin:type">
        <attribute name="name">enumeration</attribute>
        <apply-templates
            select="iana:record[not(iana:name = 'Unassigned' or
                    starts-with(iana:name, 'Reserved') or 
                    starts-with(iana:name, 'Private'))]"/>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This enumeration type defines mnemonic names and
          corresponding numeric values of ICMPv6 types.
        </element>
      </element>
      <element name="yin:reference">
        <element name="yin:text">
          RFC 2708: IANA Allocation Guidelines For Values In
                    the Internet Protocol and Related Headers
        </element>
      </element>
    </element>
    <element name="yin:typedef">
      <attribute name="name">icmpv6-type</attribute>
      <element name="yin:type">
        <attribute name="name">union</attribute>
        <element name="yin:type">
          <attribute name="name">uint8</attribute>
        </element>
        <element name="yin:type">
          <attribute name="name">icmpv6-type-name</attribute>
        </element>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This type allows reference to an ICMPv6 type using either
          the assigned mnemonic name or numeric value.
        </element>
      </element>
    </element>
  </template>

  <template match="iana:record">
    <call-template name="enum">
      <with-param name="id">
        <choose>
          <when test="contains(iana:name, '(Deprecated)')">
            <value-of select="translate(normalize-space(substring-before(iana:name, 
                  '(Deprecated)')),' ','')"/>
          </when>
          <otherwise>
            <value-of select="translate(normalize-space(iana:name),' ','')"/>
          </otherwise>
        </choose>
      </with-param>
      <with-param name="description">
        <value-of select="concat(iana:name, '.')"/>
      </with-param>
      <with-param name="deprecated"
                  select="contains(iana:name, '(Deprecated)')"/>
    </call-template>
  </template>

</stylesheet>

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

module iana-icmpv6-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-icmpv6-types";
  prefix iana-icmpv6-types;

  organization
    "Internet Assigned Numbers Authority (IANA)";

  contact
    "Internet Assigned Numbers Authority

     ICANN
     12025 Waterfront Drive, Suite 300
     Los Angeles, CA 90094
     

     Tel: +1 424 254 5300

     <mailto:iana@iana.org>";

  description
    "This YANG module translates IANA registry 'ICMPv6 \"type\"
     Numbers' to YANG derived types.

     Copyright (c) 2023 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module was generated from the
     corresponding IANA registry using an XSLT stylesheet from the
     'iana-yang' project (https://github.com/llhotka/iana-yang).";

  reference
    "Internet Control Message Protocol version 6 (ICMPv6) Parameters
     (https://www.iana.org/assignments/icmpv6-parameters/)";

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

  /* Typedefs */

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

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

]]></sourcecode>
      </section>
    </section>
    <section anchor="ipv6-extension-header-types">
      <name>IPv6 Extension Header Types</name>
      <section anchor="iana-ipv6-ext-template">
        <name>XSLT Template to Generate The IPv6 Extension Header Types IANA-Maintained Module</name>
        <sourcecode markers="true"><![CDATA[

<?xml version="1.0" encoding="utf-8"?>
<stylesheet
    xmlns="http://www.w3.org/1999/XSL/Transform"
    xmlns:html="http://www.w3.org/1999/xhtml"
    xmlns:iana="http://www.iana.org/assignments"
    xmlns:yin="urn:ietf:params:xml:ns:yang:yin:1"
    version="1.0">
  <import href="../../../xslt/iana-yinx.xsl"/>
  <output method="xml" encoding="utf-8"/>
  <strip-space elements="*"/>

  <template match="iana:registry[@id='extension-header']">
    <element name="yin:typedef">
      <attribute name="name">ipv6-extension-header-type-name</attribute>
      <element name="yin:type">
        <attribute name="name">enumeration</attribute>
        <apply-templates
            select="iana:record[not(iana:description = 'Unassigned' or
                    starts-with(iana:description, 'Reserved') or 
                    starts-with(iana:description, 'Use for experimentation and testing')) or 
                    contains(iana:description, 'experimental')]"/>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This enumeration type defines mnemonic names and
          corresponding numeric values of IPv6 Extension header types.
        </element>
      </element>
      <element name="yin:reference">
        <element name="yin:text">
          RFC 2708: IANA Allocation Guidelines For Values In
                    the Internet Protocol and Related Headers
        </element>
      </element>
    </element>
    <element name="yin:typedef">
      <attribute name="name">ipv6-extension-header-type</attribute>
      <element name="yin:type">
        <attribute name="name">union</attribute>
        <element name="yin:type">
          <attribute name="name">uint8</attribute>
        </element>
        <element name="yin:type">
          <attribute name="name">ipv6-extension-header-type-name</attribute>
        </element>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This type allows reference to an IPv6 Extension header type using either
          the assigned mnemonic name or the numeric protocol number value.
        </element>
      </element>
    </element>
  </template>

  <template match="iana:record">
    <call-template name="enum">
      <with-param name="id">
        <choose>
          <when test="contains(iana:description, '(Deprecated)')">
            <value-of select="translate(normalize-space(substring-before(iana:description, 
                  '(Deprecated)')),' ','')"/>
          </when>
          <otherwise>
            <value-of select="translate(normalize-space(iana:description),' ','')"/>
          </otherwise>
        </choose>
      </with-param>
      <with-param name="deprecated"
                  select="contains(iana:description, '(Deprecated)')"/>
    </call-template>
  </template>

</stylesheet>

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

module iana-ipv6-ext-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types";
  prefix iana-ipv6-ext-types;

  organization
    "Internet Assigned Numbers Authority (IANA)";

  contact
    "Internet Assigned Numbers Authority

     ICANN
     12025 Waterfront Drive, Suite 300
     Los Angeles, CA 90094
     

     Tel: +1 424 254 5300

     <mailto:iana@iana.org>";

  description
    "This YANG module translates IANA registry 'IPv6 Extension Header
     Types' to YANG derived types.

     Copyright (c) 2023 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module was generated from the
     corresponding IANA registry using an XSLT stylesheet from the
     'iana-yang' project (https://github.com/llhotka/iana-yang).";

  reference
    "Internet Protocol Version 6 (IPv6) Parameters
     (https://www.iana.org/assignments/ipv6-parameters/)";

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

  /* Typedefs */

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

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

]]></sourcecode>
      </section>
    </section>
    <section anchor="ps">
      <name>Problem Statement &amp; Gap Analysis</name>
      <section anchor="ps-sets">
        <name>Suboptimal Configuration: Lack of Support for Lists of Prefixes</name>
        <t>IP prefix-related data nodes, e.g., "destination-ipv4-network" or
   "destination-ipv6-network", do not support handling a list of IP
   prefixes, which may then lead to having to support large numbers of ACL entries in a configuration file.</t>
        <t>The same issue is encountered when ACLs have to be in place to mitigate DDoS
attacks that involve a set of sources (e.g., <xref target="RFC9132"/>). The situation is even worse when both a list of sources
and destination prefixes are involved in the filtering.</t>
        <t><xref target="example"/> shows an example of the required ACL configuration for filtering traffic from two prefixes.</t>
        <figure anchor="example">
          <name>Example Illustrating Sub-optimal Use of the ACL Model with a Prefix List (Message Body)</name>
          <artwork><![CDATA[
{
  "ietf-access-control-list:acls": {
    "acl": [
      {
        "name": "first-prefix",
        "type": "ipv6-acl-type",
        "aces": {
          "ace": [
            {
              "name": "my-test-ace",
              "matches": {
                "ipv6": {
                  "destination-ipv6-network":
                    "2001:db8:6401:1::/64",
                  "source-ipv6-network":
                    "2001:db8:1234::/96",
                  "protocol": 17,
                  "flow-label": 10000
                },
                "udp": {
                  "source-port": {
                    "operator": "lte",
                    "port": 80
                  },
                  "destination-port": {
                    "operator": "neq",
                    "port": 1010
                  }
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            }
          ]
        }
      },
      {
        "name": "second-prefix",
        "type": "ipv6-acl-type",
        "aces": {
          "ace": [
            {
              "name": "my-test-ace",
              "matches": {
                "ipv6": {
                  "destination-ipv6-network":
                    "2001:db8:6401:c::/64",
                  "source-ipv6-network":
                    "2001:db8:1234::/96",
                  "protocol": 17,
                  "flow-label": 10000
                },
                "udp": {
                  "source-port": {
                    "operator": "lte",
                    "port": 80
                  },
                  "destination-port": {
                    "operator": "neq",
                    "port": 1010
                  }
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            }
          ]
        }
      }
    ]
  }
}
]]></artwork>
        </figure>
        <t>Such a configuration is suboptimal for both:</t>
        <ul spacing="normal">
          <li>
            <t>Network controllers that need to manipulate large files. All or a
subset for this configuration will need to be passed to the
underlying network devices.</t>
          </li>
          <li>
            <t>Devices may receive such a configuration and thus will need to
maintain it locally.</t>
          </li>
        </ul>
      </section>
      <section anchor="manageability-impossibility-to-use-aliases-or-defined-sets">
        <name>Manageability: Impossibility to Use Aliases or Defined Sets</name>
        <t>The same approach as the one discussed for IP prefixes can be generalized by introducing the concept of "aliases" or "defined sets".</t>
        <t>The defined sets are reusable definitions across several ACLs. Each category is modelled in YANG as a list of parameters related to the class it represents. The following sets can be considered:</t>
        <ul spacing="normal">
          <li>
            <dl>
              <dt>Prefix sets:</dt>
              <dd>
                <t>Used to create lists of IPv4 or IPv6 prefixes.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Protocol sets:</dt>
              <dd>
                <t>Used to create a list of protocols.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Port number sets:</dt>
              <dd>
                <t>Used to create lists of TCP or UDP port values
(or any other transport protocol that makes uses of port numbers).
The identity of the protocols is identified by the protocol set, if
present.  Otherwise, a set applies to any protocol.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>ICMP sets:</dt>
              <dd>
                <t>Uses to create lists of ICMP-based filters. This applies only when the protocol is set to ICMP or ICMPv6.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t>Aliases may also be considered to manage resources that are identified by a combination of various parameters (e.g., prefix, protocol, port number, FQDN, or VLAN IDs).
Note that some aliases can be provided by decomposing them into separate sets.</t>
      </section>
      <section anchor="bind-acls-to-devices-not-only-interfaces">
        <name>Bind ACLs to Devices, Not Only Interfaces</name>
        <t>In the context of network management, an ACL may be enforced in many
   network locations.  As such, the ACL module should allow for binding an
   ACL to multiple devices, not only (abstract) interfaces.</t>
        <t>The ACL name must, thus, be unique at the scale of the network, but the same name may be used in many devices when enforcing node-specific ACLs.</t>
      </section>
      <section anchor="ps-frag">
        <name>Partial or Lack of IPv4/IPv6 Fragment Handling</name>
        <t><xref target="RFC8519"/> does not support fragment handling for IPv6 but
offers a partial support for IPv4  through the use of 'flags'.  Nevertheless,
the use of 'flags' is problematic since it does not allow a bitmask
to be defined.  For example, setting other bits not covered by the
'flags' filtering clause in a packet will allow that packet to get
through (because it won't match the ACE).</t>
        <t>Defining a new IPv4/IPv6 matching field called 'fragment' is thus required to efficiently handle fragment-related filtering rules.</t>
      </section>
      <section anchor="ps-flags">
        <name>Suboptimal TCP Flags Handling</name>
        <t><xref target="RFC8519"/> supports including flags in the TCP match fields, however
   that structure does not support matching operations as those
   supported in BGP Flow Spec.  Defining this field to be defined as a
   flag bitmask together with a set of operations is meant to
   efficiently handle TCP flags filtering rules.</t>
      </section>
      <section anchor="ps-rate">
        <name>Rate-Limit Action</name>
        <t><xref target="RFC8519"/> specifies that forwarding actions can be 'accept' (i.e., accept matching
   traffic), 'drop' (i.e., drop matching traffic without sending any
   ICMP error message), or 'reject' (i.e., drop matching traffic and send an ICMP error message to the source). However, there are situations where the matching traffic can be accepted, but with a rate-limit policy. This capability is not supported by <xref target="RFC8519"/>.</t>
      </section>
      <section anchor="ps-pf">
        <name>Payload-based Filtering</name>
        <t>Some transport protocols use existing protocols (e.g., TCP or UDP) as substrate. The match criteria for such protocols may rely upon the 'protocol' under 'l3', TCP/UDP match criteria, part of the TCP/UDP payload, or a combination thereof. <xref target="RFC8519"/> does not support matching based on the payload.</t>
        <t>Likewise, the current version of the ACL model does not support filtering of encapsulated traffic.</t>
      </section>
      <section anchor="reuse-the-acls-content-across-several-devices">
        <name>Reuse the ACLs Content Across Several Devices</name>
        <t>Having a global network view of the ACLs is highly valuable for service providers. An ACL could be defined and applied
based on the network topology hierarchy. So, an ACL can be
defined at the network level and, then, that same ACL can be used (or referenced to)
in several devices (including termination points) within the same network.</t>
        <t>This network/device ACLs differentiation introduces several new
requirements, e.g.:</t>
        <ul spacing="normal">
          <li>
            <t>An ACL name can be used at both network and device levels.</t>
          </li>
          <li>
            <t>An ACL content updated at the network level should imply
a transaction that updates the relevant content in all the nodes using this
ACL.</t>
          </li>
          <li>
            <t>ACLs defined at the device level have a local meaning for the specific node.</t>
          </li>
          <li>
            <t>A device can be associated with a router, a VRF, a
logical system, or a virtual node. ACLs can be applied in physical and
logical infrastructure.</t>
          </li>
        </ul>
      </section>
      <section anchor="match-mpls-headers-1">
        <name>Match MPLS Headers</name>
        <t>The ACLs could be used to create rules to match MPLS fields on a packet. <xref target="RFC8519"/> does not support such function.</t>
      </section>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Many thanks to Jon Shallow and Miguel Cros for the review and comments to the document, including prior to publishing the document.</t>
      <t>Thanks to Qiufang Ma, Victor Lopez, and Joe Clarke for the comments and suggestions.</t>
      <t>The IANA-maintained models were generated using an XSLT stylesheet from the 'iana-yang' project (https://github.com/llhotka/iana-yang).</t>
      <t>This work is partially supported by the European Commission under   Horizon 2020 Secured autonomic traffic management for a Tera of SDN
 flows (Teraflow) project (grant agreement number 101015857).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
CnbhprfNlOR8S2kBFgh5CeW4/6LGqpfQb6gV59vSCvyX0Ia1BDx7stzmbkPr
+8zZcs1sdm26nNbbjVYEu4ss9Z6+NtjaqzkFWMB2thraXWTV9+QlVlNcrzHI
HdahOt/UllA1AC6J6eszzP0/U3JZxm6+KWUQam4mjRDa3e3V5NJeXpzKAHKt
JtltcML54rQYh26mtHd36xzc03Og8hQTRqL4J6odWY/gfCPI4ISEJxjgYqi+
qIsvHWWyPqp0CurPQc63ghqW9jAWCcX1XtTZwCKOdJWqWpOUEZ1v+8qImiCX
xPasgVDON29nTxTKFy+2ayxZk4TnzV6Dwg9VGc+NcFsm5XmzN9+kVOQ8PxWv
PyfpuffZJj33lkh67j1z0nNFptPzJz3XF/RtkgM9p2L/jLyPUtH8JbKj/2am
R/MN5IvkRxstmiRIm583y5A2WzRMkeYmdo40PlskSZq+b5YlTZ/Wp0n/zaEP
GiRKe0oYOrckDJglzbTMyt9UF8nXJStKYbEgV+cuakh1qZH5DfeLJU6b7ezM
6fwN/nt6uV0bjoa3SL3dJ4H4KfHojkxjyaXzWVLapx7LYrzV4BerxqsHSOdU
zhgyK8vOGIG6ZFITwUUNmNl2btq2rfdYIKVNM9Ask9iEaCORe0GSFzeb1SPa
OJd7EVpLvz+GPnheVVDK8J49HgWgzXO8Z7Fxua6eoDmfLLdLT9aZDlHtjLP8
IxPm7FRwfKsmtgorCd5Mk37T04XbSKWdbTk5SVyCqM8S171WpokbeMpMZksw
nlgE2NYMz1wFuErtzEgct+jhzHHrUZ7V/XSsZ1UCtvuv6k0nkecCYuR114+f
kdhdxZMnlQNWEmlneFfI5adL8pZaaG6at3XHyQ+cs7jf2dqvTPS2PqYF2tKp
3vYdK9jcSva2Xn9J936OdO+qBaTEhi7m+JLy/SXl+y+a8q0d55+NFO+nJng3
Su9GVSkjVX/N9O5icvcTU7tnO71mcK820xsH6k007QweOvCft9PKEHyDDU7U
bzkcwYAaxWq3NmbkUIJks66EuUx9FFFrkKsi4aioHYYAENQ85LjuC6JnOiz8
dHdjvybw/Tp2xzjIc7BusLEmAS2K9myeHodDd5pkrNhALWZoai/chyByy9nr
DTa2LXhCARQSYqPdye2Nmp0sdAXQkLH1kGwo4Th/F8GGI/nZELX5Ra5Z0pO6
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
d2/3BZDxfwHYETAdT4oBAA==

-->

</rfc>
