<?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.6.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dbb-netmod-acl-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.1 -->
  <front>
    <title abbrev="Enhanced ACLs">Extensions to the Access Control Lists (ACLs) YANG Model</title>
    <seriesInfo name="Internet-Draft" value="draft-dbb-netmod-acl-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>
    <date year="2022" month="October" day="24"/>
    <area>Operations and Management</area>
    <workgroup>netmod</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <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>
    </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/oscargdd/draft-dbb-netmod-enhanced-acl"/>.</t>
    </note>
  </front>
  <middle>
    <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 behaviour 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 it is needed, for example, 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>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The keywords <strong>MUST</strong>, <strong>MUST NOT</strong>, <strong>REQUIRED</strong>, <strong>SHALL</strong>, <strong>SHALL NOT</strong>, <strong>SHOULD</strong>,
<strong>SHOULD NOT</strong>, <strong>RECOMMENDED</strong>, <strong>MAY</strong>, and <strong>OPTIONAL</strong>, when they appear in this
document, are to be interpreted as described in <xref target="RFC2119"/>.</t>
      <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 terms:</t>
      <ul spacing="normal">
        <li>Defined set: Refers to reusable description of one or multiple information elements (e.g., IP address, IP prefix, port number, or ICMP type).</li>
      </ul>
    </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 (e.g., <xref target="RFC9132"/> when a set of sources are involved in such
an attack. The situation is even worse when both a list of sources
and destination prefixes are involved.</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</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:
- 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>
        <ul spacing="normal">
          <li>Devices may receive such a confirguration and thus will need to maintain it locally.</li>
        </ul>
        <t>(<xref target="example_1"/> depicts an example of an optimized structure:</t>
        <figure anchor="example_1">
          <name>Example Illustrating Optimal Use of the ACL Model in a Network Context.</name>
          <artwork><![CDATA[
{
  "ietf-access-control-list:acls": {
    "acl": [
      {
        "name": "prefix-list-support",
        "type": "ipv6-acl-type",
        "aces": {
          "ace": [
            {
              "name": "my-test-ace",
              "matches": {
                "ipv6": {
                  "destination-ipv6-network": [
                    "2001:db8:6401:1::/64",
                    "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>
      </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 introduing 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>Prefix sets: Used to create lists of IPv4 or IPv6 prefixes.</li>
          <li>Protocol sets: Used to create a list of protocols.</li>
          <li>Port number sets: 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.</li>
          <li>ICMP sets: Uses to create lists of ICMP-based filters. This applies only when the protocol is set to ICMP or ICMPv6.</li>
        </ul>
        <t>A candidate structure is shown in <xref target="example_sets"/>:</t>
        <figure anchor="example_sets">
          <name>Examples of Defined Sets.</name>
          <artwork type="ascii-art"><![CDATA[
     +--rw defined-sets
     |  +--rw prefix-sets
     |  |  +--rw prefix-set* [name]
     |  |     +--rw name        string
     |  |     +--rw ip-prefix*   inet:ip-prefix
     |  +--rw port-sets
     |  |  +--rw port-set* [name]
     |  |     +--rw name    string
     |  |     +--rw port*   inet:port-number
     |  +--rw protocol-sets
     |  |  +--rw protocol-set* [name]
     |  |     +--rw name             string
     |  |     +--rw protocol-name*   identityref
     |  +--rw icmp-type-sets
     |     +--rw icmp-type-set* [name]
     |        +--rw name     string
     |        +--rw types* [type]
     |           +--rw type              uint8
     |           +--rw code?             uint8
     |           +--rw rest-of-header?   binary
]]></artwork>
        </figure>
        <t>Aliases may also be considered to managed resources that are identified by a combination of various parameters as shown in the candidate tree in <xref target="example_alias"/>.
Note that some aliases can be provided by decomposing them into separate sets.</t>
        <figure anchor="example_alias">
          <name>Examples of Aliases.</name>
          <artwork type="ascii-art"><![CDATA[
        |  +--rw aliases
        |  |  +--rw alias* [name]
        |  |     +--rw name                 string
        |  |     +--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
        |  +--rw acls
        |     ...
        |           +--rw rest-of-header?   binary
]]></artwork>
        </figure>
      </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 capability for IPv6 but
offers a partial support for IPv4 by means 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. Such capability is not currently 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
following the hierarchy of the network topology. 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>An ACL name can be used at both network and device levels.</li>
          <li>An ACL content updated at the network level should imply
a transaction that updates the relevant content in all the nodes using this
ACL.</li>
          <li>ACLs defined at the device level have a local meaning for the specific node.</li>
          <li>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.</li>
        </ul>
      </section>
    </section>
    <section anchor="overall-module-structure">
      <name>Overall Module Structure</name>
      <section anchor="enhanced-acl">
        <name>Enhanced ACL</name>
        <figure anchor="enh-acl-tree">
          <name>Enhanced ACL tree</name>
          <artwork type="ascii-art"><![CDATA[
module: ietf-acl-enh
  augment /ietf-acl:acls/ietf-acl:acl:
    +--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 icmp-type-sets
          +--rw icmp-type-set* [name]
             +--rw name     string
             +--rw types* [type]
                +--rw type              uint8
                +--rw code?             uint8
                +--rw rest-of-header?   binary
  augment /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace
            /ietf-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
  augment /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace
            /ietf-acl:matches/ietf-acl:l3/ietf-acl:ipv4:
    +--rw ipv4-fragment
    |  +--rw operator?   operator
    |  +--rw type?       fragment-type
    +--rw source-ipv4-prefix-list?        leafref
    +--rw destination-ipv4-prefix-list?   leafref
    +--rw next-header-set?                leafref
  augment /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace
            /ietf-acl:matches/ietf-acl:l3/ietf-acl:ipv6:
    +--rw ipv6-fragment
    |  +--rw operator?   operator
    |  +--rw type?       fragment-type
    +--rw source-ipv6-prefix-list?        leafref
    +--rw destination-ipv6-prefix-list?   leafref
    +--rw protocol-set?                   leafref
  augment /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace
            /ietf-acl:matches/ietf-acl:l4/ietf-acl:tcp:
    +--rw flags-bitmask
    |  +--rw operator?   operator
    |  +--rw bitmask?    uint16
    +--rw source-tcp-port-set?
    |       -> ../../../../defined-sets/port-sets/port-set/name
    +--rw destination-tcp-port-set?
            -> ../../../../defined-sets/port-sets/port-set/name
  augment /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace
            /ietf-acl:matches/ietf-acl:l4/ietf-acl:udp:
    +--rw source-udp-port-set?
    |       -> ../../../../defined-sets/port-sets/port-set/name
    +--rw destination-udp-port-set?
            -> ../../../../defined-sets/port-sets/port-set/name
  augment /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace
            /ietf-acl:matches/ietf-acl:l4/ietf-acl:icmp:
    +--rw icmp-set?   leafref
  augment /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace
            /ietf-acl:actions:
    +--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>IPv4 prefix set: 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.</li>
          <li>IPv6 prefix set: 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.</li>
          <li>Port sets: It contains a list of port numbers to be used in TCP / UDP entries. The ports can be individual port numbers, a range of ports, and an operation.</li>
          <li>Protocol sets: 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).</li>
          <li>ICMP sets: It contains a list of ICMP types, each of them identified by a type value, optionally the code and the rest of the header.</li>
        </ul>
      </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 MUST NOT 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 to Deny TCP Null Attack Messages</name>
          <artwork type="ascii-art"><![CDATA[
  {
     "ietf-access-control-list:acls": {
       "acl": [{
         "name": "tcp-flags-example",
         "aces": {
           "ace": [{
             "name": "null-attack",
             "matches": {
               "tcp": {
                 "flags-bitmask": {
                   "operator": "not any",
                   "bitmask": 4095
                 }
               }
             },
             "actions": {
               "forwarding": "drop"
             }
           }]
         }
       }]
     }
   }
]]></artwork>
        </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 MUST NOT 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>"drop-all-fragments" ACE: discards all fragments.</li>
          <li>"allow-dns-packets" ACE: accepts DNS packets destined to 198.51.100.0/24.</li>
        </ul>
        <figure anchor="example_2">
          <name>Example Illustrating Candidate Filtering of IPv4 Fragmented Packets.</name>
          <artwork type="ascii-art"><![CDATA[
{
     "ietf-access-control-list:acls": {
       "acl": [
         {
           "name": "dns-fragments",
           "type": "ipv4-acl-type",
           "aces": {
             "ace": [
               {
                 "name": "drop-all-fragments",
                 "matches": {
                   "ipv4": {
                     "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"
                   }
                 }
               }
             ]
           }
         }
       ]
     }
   }
]]></artwork>
        </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>"drop-all-fragments" ACE: discards all fragments (including atomic fragments). That is, IPv6 packets that include a Fragment header (44) are dropped.</li>
          <li>"allow-dns-packets" ACE: accepts DNS packets destined to 2001:db8::/32.</li>
        </ul>
        <figure anchor="example_3">
          <name>Example Illustrating Candidate Filtering of IPv6 Fragmented Packets.</name>
          <artwork type="ascii-art"><![CDATA[
    {
     "ietf-access-control-list:acls": {
       "acl": [
         {
           "name": "dns-fragments",
           "type": "ipv6-acl-type",
           "aces": {
             "ace": [
               {
                 "name": "drop-all-fragments",
                 "matches": {
                   "ipv6": {
                     "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"
                 }
               }
             ]
           }
         }
       ]
     }
   }
]]></artwork>
        </figure>
      </section>
      <section anchor="rate-limit-traffic">
        <name>Rate-Limit Traffic</name>
        <t>In order to support rate-limiting (see <xref target="ps-rate"/>), a new action called "rate-limit" is defined.</t>
        <t>(#example_5) shows an ACL example to rate-limit incoming SYNs during a SYN flood attack.</t>
        <figure anchor="example_5">
          <name>Example Rate-Limit Incoming TCP SYNs</name>
          <artwork type="ascii-art"><![CDATA[
  {
     "ietf-access-control-list:acls": {
       "acl": [{
         "name": "tcp-flags-example-with-rate-limit",
         "aces": {
           "ace": [{
             "name": "rate-limit-syn",
             "matches": {
               "tcp": {
                 "flags-bitmask": {
                   "operator": "match",
                   "bitmask": 2
                 }
               }
             },
             "actions": {
               "forwarding": "accept",
               "rate-limit": "20.00"
             }
           }]
         }
       }]
     }
   }
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="yang-modules">
      <name>YANG Modules</name>
      <section anchor="enhanced-acl-1">
        <name>Enhanced ACL</name>
        <sourcecode type="ascii-art" 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 enh-acl;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-access-control-list {
    prefix ietf-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";
  }

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

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

  identity layer3 {
    base offset-type;
    description
      "IP header.";
  }

  identity layer4 {
    base offset-type;
    description
      "Transport header (e.g., TCP or UDP).";
  }

  identity payload {
    base offset-type;
    description
      "Transport payload. For example, this represents the beginning
       of the TCP data right after any TCP options.";
  }

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

  grouping tcp-flags {
    description
      "Operations on TCP flags.";
    leaf operator {
      type operator;
      default "match";
      description
        "How to interpret the TCP flags.";
    }
    leaf bitmask {
      type uint16;
      description
        "The bitmask matches the last 4 bits of byte 12
        and byte 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.";
    }
  }

  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 payload {
    description
      "Operations on payload match.";
    leaf offset {
      type identityref {
        base offset-type;
      }
      description
        "Indicates the payload offset.";
    }
    leaf offset-end {
      type uint64;
      description
        "Indicates the number of bytes 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 pattern to match against.";
    }
  }

  augment "/ietf-acl:acls/ietf-acl:acl" {
    description
      "add a new container to store sets (prefix
       sets, port sets, etc";
    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; //Check if we can reuse an IANA-maintained module
            }
            description
              "Value of the protocl set.";
          }
        }
      }
      container icmp-type-sets {
        description
          "Data definitions for a list of ICMP types which can
           be matched in policies.";
        list icmp-type-set {
          key "name";
          description
            "List of ICMP type set definitions.";
          leaf name {
            type string;
            description
              "Name of the ICMP type set -- this is used as a label to
               reference the set in match conditions.";
          }
          list types {
            key "type";
            description
              "Includes a list of ICMP types.";
            uses packet-fields:acl-icmp-header-fields;
          }
        }
      }
    }
  }

  augment "/ietf-acl:acls/ietf-acl:acl/ietf-acl:aces"
        + "/ietf-acl:ace/ietf-acl:matches" {
    description
      "Add a new match types.";
    choice payload {
      description
        "Match a prefix pattern.";
      container prefix-pattern {
        if-feature "match-on-payload";
        description
          "Rule to perform payload-based match.";
        uses payload;
      }
    }
  }

  augment "/ietf-acl:acls/ietf-acl:acl/ietf-acl:aces"
        + "/ietf-acl:ace/ietf-acl:matches/ietf-acl:l3/ietf-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 leafref {
        path "../../../../defined-sets/ipv4-prefix-sets/prefix-set/name";
      }
      description
        "A reference to a prefix list to match the source address.";
    }
    leaf destination-ipv4-prefix-list {
      type leafref {
        path "../../../../defined-sets/ipv4-prefix-sets/prefix-set/name";
      }
      description
        "A reference to a prefix list to match the destination address.";
    }
    leaf next-header-set {
      type leafref {
        path "../../../../defined-sets/protocol-sets/protocol-set/name";
      }
      description
        "A reference to a protocol set to match the next-header field.";
    }
  }

  augment "/ietf-acl:acls/ietf-acl:acl/ietf-acl:aces"
        + "/ietf-acl:ace/ietf-acl:matches/ietf-acl:l3/ietf-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 leafref {
        path "../../../../defined-sets/ipv6-prefix-sets/prefix-set/name";
      }
      description
        "A reference to a prefix list to match the source address.";
    }
    leaf destination-ipv6-prefix-list {
      type leafref {
        path "../../../../defined-sets/ipv6-prefix-sets/prefix-set/name";
      }
      description
        "A reference to a prefix list to match the destination address.";
    }
    leaf protocol-set {
      type leafref {
        path "../../../../defined-sets/protocol-sets/protocol-set/name";
      }
      description
        "A reference to a protocol set to match the protocol field.";
    }
  }

  augment "/ietf-acl:acls/ietf-acl:acl/ietf-acl:aces"
        + "/ietf-acl:ace/ietf-acl:matches/ietf-acl:l4/ietf-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 leafref {
        path "../../../../defined-sets/port-sets/port-set/name";
      }
      description
        "A reference to a port set to match the source port.";
    }
    leaf destination-tcp-port-set {
      type leafref {
        path "../../../../defined-sets/port-sets/port-set/name";
      }
      description
        "A reference to a port set to match the destination port.";
    }
  }

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

  augment "/ietf-acl:acls/ietf-acl:acl/ietf-acl:aces"
        + "/ietf-acl:ace/ietf-acl:matches/ietf-acl:l4/ietf-acl:icmp" {
    description
      "Handle ICMP type sets.";
    leaf icmp-set {
      type leafref {
        path "../../../../defined-sets/icmp-type-sets/icmp-type-set/name";
      }
      description
        "A reference to an ICMP type set to match the ICMP type field.";
    }
  }

  augment "/ietf-acl:acls/ietf-acl:acl/ietf-acl:aces"
        + "/ietf-acl:ace/ietf-acl:actions" {
    description
      "Rate-limit action.";
    leaf rate-limit {
      when "../ietf-acl:forwarding = 'ietf-acl:accept'" {
        description
          "Rate-limit valid only when accept action is used.";
      }
      type decimal64 {
        fraction-digits 2;
      }
      units "bytes per second";
      description
        "Indicates a rate-limit for the matched traffic.";
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations-tbc">
      <name>Security Considerations (TBC)</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>TBC</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>TBC</li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="uri-registration">
        <name>URI Registration</name>
        <t>This document requests IANA to register the following URI in the "ns"
   subregistry within the "IETF XML Registry" <xref target="RFC3688"/>:</t>
        <artwork type="ascii-art"><![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.
]]></artwork>
      </section>
      <section anchor="yang-module-name-registration">
        <name>YANG Module Name Registration</name>
        <t>This document requests IANA to register the following YANG module in
   the "YANG Module Names" subregistry <xref target="RFC6020"/> within the "YANG
   Parameters" registry.</t>
        <artwork type="ascii-art"><![CDATA[
         name: ietf-acl-enh
         namespace: urn:ietf:params:xml:ns:yang:ietf-ietf-acl-enh
         maintained by IANA: N
         prefix: enh-acl
         reference: RFC XXXX
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <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">
              <organization/>
            </author>
            <author fullname="S. Agarwal" initials="S." surname="Agarwal">
              <organization/>
            </author>
            <author fullname="L. Huang" initials="L." surname="Huang">
              <organization/>
            </author>
            <author fullname="D. Blair" initials="D." surname="Blair">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="R. Raszuk" initials="R." role="editor" surname="Raszuk">
              <organization/>
            </author>
            <author fullname="S. Hares" initials="S." role="editor" surname="Hares">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <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="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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>
        <name>Informative References</name>
        <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">
              <organization/>
            </author>
            <author fullname="J. Shallow" initials="J." surname="Shallow">
              <organization/>
            </author>
            <author fullname="T. Reddy.K" initials="T." surname="Reddy.K">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="S. Hares" initials="S." surname="Hares">
              <organization/>
            </author>
            <author fullname="R. Raszuk" initials="R." surname="Raszuk">
              <organization/>
            </author>
            <author fullname="D. McPherson" initials="D." surname="McPherson">
              <organization/>
            </author>
            <author fullname="M. Bacher" initials="M." surname="Bacher">
              <organization/>
            </author>
            <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="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger">
              <organization/>
            </author>
            <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>
      </references>
    </references>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Many thanks to Jon Shallow and Miguel Cros for the review and comments to the document, incuding priror to publishing the document.</t>
      <t>Thanks for Qin Wu for the comments and suggestions.</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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
226+VhtO33TTzcCZl1WmhKaX6yhLE+cCT7kfR5JkxdDVjfgkwtoaj06Pk5Kb
hkk6xSjCvXbLRY6PBxwbNadbWNEcZnu4ZV/27qkxtzgYy6S5xsSb6xtJXHxy
enz+DWVNYurjuY4XGKeI2RpUXlAi1jYvvjva4upTTlpKZS8cSpSpTZFIHoy4
2dEzAkjM+L4ZjGJEHLigBBV+SKe5veWdswXhz+s06rn5zdHWFuy7jSpMdzt6
efpU7pA52NvHq9mhq1dPzt0XD3f2d25upK4TlpcHhdY0pRwKBJdWYpSM0RjV
3L9DHwxtKhVglKCnZhnWRYi3eDB23IyGZ1umFZNUq/MrnWVq8/z82VaD614b
JYu1i9Ozi4uz8zt27/d98fwcYQgJ9vcP6Aoi7M+5BnqSThc8z+1UHU5b3Dw9
PHphkH54nwgst9IwvfiuNkz71mhTjmuZSEmNKes0XmRRaentzg6sIy4TSWeN
WLDRlPAlLjWq0ncdpRmVKu0DYvnCvfoLK45yLTEestwIFTmRiBRUy3eomKAQ
w8Zu8pW99fMNLA1EYpuuAqZfQCBNv8xNVjwEhakJQ/EZCFtJGCJVWcHyaE7v
crGfU9OzwiSqOr2mGp7XiwxvyMZeKMmuuQ1H6fw6LYucD93qR7yJyaWC5PXo
JK1DxmxLoop9BExKHlByLl5DbQoC5OauGE5rgZ96MoG36Lw2aDRdmtFFctkW
zCNWsOUJcXoUbk5LO1QQO9tmpHwLOd6HDYJH7sMS3wOQPuEbvRtgfbP2sWh6
UtvL8zhLmNMSleQ0Ez6G4YXcKL6mmBAE/yNkp9tvMBPPJDz2zsMnIR6IdfTV
tUQ6Jbb/8OpEvdLTlEtRwNaC0uLCE+NSBqliGLTI8XvNW0xTrQhBSUbNIGel
ALDnj8ule5sTpyn/7cVz0/VyIMLl/sHDh3Sldf89tdjHWN01Db5pZkYIozni
HOgxydyTJ+ffO8kqgNFYnW4fPhY2o3ED29DIqMoF4mwT8ke8aX7l1QtQ5CXz
Sfp+9PSyP3PeNIF27b5Ap3LJLDvLzh5sdh7NsR0CObM3Eg+UabXyYmAabOeC
JOcdEeIOU9IPwXEeXy6JHkD/5jXbnsamhkHzwqq7Y5sMy3MRhqG6jOLXyPKH
8eu8eJPphHUH4PcXmBUBsjx/TRvO/4D4Or+SK0FhPb2AjQd2u6OyqKwGhXmv
+o3sJTMpjc1JGWZCh5h4wfW05mWK1xOiM2pxmaXVlYlnMd/SRkT9Ywd/gbn5
cWH7sh1wuvN0iicnFKjCQSSaJA84peq/3jWDCOLJAsU3MCpWaEgrSvPla/uU
elaU6U+c9rsjOkmCmd9FTkXATGEzR9tiT/gFCAwUvefHMDWTDOu9bOIz/LmF
GwWmZavNKS2vaArSihrLJru7A//34OGDP2Kq8/8Dps5bG5CiAAA=

-->

</rfc>
