<?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.22 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-acl-extensions-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="Enhanced ACLs">Extensions to the Access Control Lists (ACLs) YANG Model</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-acl-extensions-00"/>
    <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>Huaweim</organization>
      <address>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <date year="2023" month="February" day="01"/>
    <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/boucadair/enhanced-acl-netmod"/>.</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 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>
      <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:</t>
        <ul spacing="normal">
          <li>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</li>
          <li>Devices may receive such a configuration 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 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>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>
        <t><xref target="enh-acl-tree"/> shows the full enhanced ACL tree:</t>
        <figure anchor="enh-acl-tree">
          <name>Enhanced ACL tree</name>
          <artwork type="ascii-art"><![CDATA[
module: ietf-acl-enh
  augment /acl:acls:
    +--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 /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
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l3
            /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 /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l3
            /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 /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4
            /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 /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4
            /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 /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4
            /acl:icmp:
    +--rw icmp-set?   leafref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/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 <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 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 <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>"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><xref target="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 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) 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.";
  }

  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 "/acl:acls" {
    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 "/acl:acls/acl:acl/acl:aces/acl:ace"
        + "/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 "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l3/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 "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l3/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 "/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 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 "/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 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 "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l4/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 "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:actions" {
    description
      "Rate-limit action.";
    leaf rate-limit {
      when "../acl:forwarding = 'acl:accept'" {
        description
          "Rate-limit valid only when accept action is used.";
      }
      type decimal64 {
        fraction-digits 2;
      }
      units "bytes per second";
      description
        "Indicates a rate-limit for the matched traffic.";
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <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">
              <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 and Qiufang Ma 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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
j3aiAAA=

-->

</rfc>
