<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.36 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cui-idr-content-filter-flowspec-04" category="info" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title>Packet Content Filter for BGP FlowSpec</title>
    <seriesInfo name="Internet-Draft" value="draft-cui-idr-content-filter-flowspec-04"/>
    <author initials="Y." surname="Cui" fullname="Yong Cui">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100084</code>
          <country>China</country>
        </postal>
        <email>cuiyong@tsinghua.edu.cn</email>
        <uri>http://www.cuiyong.net/</uri>
      </address>
    </author>
    <author initials="Y." surname="Gao" fullname="Yujia Gao">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100094</code>
          <country>China</country>
        </postal>
        <phone>+86-185-1028-7458</phone>
        <email>gaoyj@zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="S." surname="Hares" fullname="Susan Hares">
      <organization>Hickory Hill Consulting</organization>
      <address>
        <postal>
          <street>7453 Hickory Hill</street>
          <city>Saline</city>
          <region>Michigan</region>
          <code>48176</code>
          <country>United States of America</country>
        </postal>
        <email>shares@ndzh.com</email>
      </address>
    </author>
    <date year="2026" month="May" day="09"/>
    <area>Routing</area>
    <workgroup>IDR</workgroup>
    <keyword>DDoS Mitigation, BGP flow specification</keyword>
    <abstract>
      <?line 147?>

<t>The BGP Flow Specification enables the distribution of traffic filter policies (traffic filters and actions) via BGP, facilitating DDoS traffic filtering. 
However, the traffic filter in FSv1 and FSv2 predominantly focuses on IP header fields, which may not adequately address volumetric DDoS attack traffic characterized by fixed patterns within the packet content. 
This document introduces a new flow specification filter type designed for packet content filtering. 
The match field includes ptype, otype, offset, content-length, content, and mask encoded in the Flowspec NLRI. 
This new filter aims to leverage network devices such as routers and switches to support controlled traffic handling, traffic optimization, and mitigation of simple volumetric DDoS attacks, reducing the overall processing cost of carrier networks.</t>
    </abstract>
  </front>
  <middle>
    <?line 155?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>BGP flow specification describes the distribution of traffic filter policies through BGP, allowing for efficient traffic management and DDoS attack mitigation. 
Existing versions, FSv1 and FSv2, primarily offer n-tuple matching conditions for policy enforcement, enabling actions such as packet dropping, re-directing, or other actions.
These filter rules can be propagated to all BGP peers simultaneously without necessitating router configuration changes. 
Despite their utility, the reliance of existing filters on IP header fields may be insufficient for some operational scenarios where packets can be identified by fixed content patterns. Such scenarios may include DDoS mitigation, traffic filtering, and traffic optimization. Some attacks or traffic classes may contain fixed patterns in the packet payload that can be matched at known offsets.</t>
      <t>This document defines a new FlowSpec filter type that supports packet content filtering by using ptype, otype, offset, content-length, content, and mask fields within the FlowSpec NLRI. This filter is intended for controlled operational use cases such as traffic filtering, traffic optimization, and DDoS mitigation.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" 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>
        <!-- # Body [REPLACE] -->

</section>
    </section>
    <section anchor="definitions-and-acronyms">
      <name>Definitions and Acronyms</name>
      <ul spacing="normal">
        <li>
          <t>DDoS: Distributed Denial of Service.</t>
        </li>
        <li>
          <t>NLRI: Network Layer Reachability Information.</t>
        </li>
        <li>
          <t>FSv1: Flow Specification Version 1, defined in <xref target="RFC8955"/> and <xref target="RFC8956"/>.</t>
        </li>
        <li>
          <t>FSv2: Flow Specification Version 2, defined in <xref target="I-D.ietf-idr-flowspec-v2"/>.</t>
        </li>
      </ul>
    </section>
    <section anchor="the-packet-content-filter-for-fsv1">
      <name>The Packet Content Filter for FSv1</name>
      <t>This document specifies a new flow specification filter type that is encoded in the BGP FS NLRI, following the FSv1 definition format. The packet content filter is defined as follows:</t>
      <t>Type TBD – Packet-Content</t>
      <t>Encoding:&lt; type (1 octet), value&gt;</t>
      <t>The value field is encoded using ptype, otype, offset, content-length, content and mask.</t>
      <t>Encoding: &lt; ptype (4 bits), otype (4 bits), offset (2 octets), content-length (1 octet), content (Variable), mask (Variable)&gt;</t>
      <section anchor="ptype-field">
        <name>Ptype Field</name>
        <t>The ptype is defined as a 4-bit unsigned integer that defines the packet type via AFI, because some filters are added to hardware that are IPv4 or IPv6 specific.</t>
        <artwork><![CDATA[
+-------+-----------------------------+
| Value | Description of Ptype        |
+-------+-----------------------------+
| 1     | IPv4                        |
| 2     | IPv6                        |
+-------+-----------------------------+
]]></artwork>
        <t>Figure 1： Ptype field</t>
      </section>
      <section anchor="otype-and-offset-fields">
        <name>Otype and Offset Fields</name>
        <t>The otype and offset fields define the starting position of the packet content used for matching.</t>
        <t>To avoid the effect of variable header length on the offset, we use the hierarchical way like <xref target="I-D.khare-idr-bgp-flowspec-payload-match"/>. The Otype is defined as a 4-bit unsigned integer. The detail are as follows:</t>
        <artwork><![CDATA[
+-------+-----------------------------+
| Value | Description of Otype        |
+-------+-----------------------------+
| 0     | IP Header                   |
| 1     | IP Payload                  |
| 2     | UDP Payload                 |
| 3     | TCP Payload                 |
+-------+-----------------------------+
]]></artwork>
        <t>Figure 2： Otype field</t>
        <t>Otype 0 is defined as the start of the IP header. Otype 1 is defined as the start of the data portion of the IP header after the IP options. Otype 2 is defined as the start of the UDP payload. Otype 3 is defined as the start of the TCP payload. Otype 2 MUST only match packets whose upper-layer protocol is UDP (17). Otype 3 MUST only match packets whose upper-layer protocol is TCP (6). For other IP protocols, otype 2 and otype 3 MUST NOT match; otype 1 MAY be used.</t>
        <t>The offset is defined as a 2-octet unsigned integer that specifies the count of octets to be bypassed from the otype's starting position to match the packet content. 
It is worth noting that packet fragmentation will cause the offset value to change, so it is not enough to filter the fragmented packets through the packet content filter. One possible way is to filter the first packet through the payload filter, and then use its header information along with the fragment filter to filter the subsequent packets.</t>
        <t>Example:</t>
        <ul spacing="normal">
          <li>
            <t>By setting otype 0 and an offset of 0, the match is configured to start precisely at the beginning of the IP header.</t>
          </li>
          <li>
            <t>By setting otype 1 and an offset of 2, the match will start two octets past the initial data portion of the IP header, skipping over any IP options. This configuration, for example, could be used to specifically target the IP payload starting after 2 octets.</t>
          </li>
          <li>
            <t>By setting otype 2 and an offset of 10, the match will start ten octets into the UDP payload of the packet.</t>
          </li>
          <li>
            <t>By setting otype 3 and an offset of 10, the match will start ten octets into the TCP payload of the packet.</t>
          </li>
        </ul>
      </section>
      <section anchor="content-length-content-and-mask-fields">
        <name>Content-length, Content and Mask Fields</name>
        <t>The content-length is a one-octet unsigned integer field that specifies the length, in octets, of each of the Content field and the Mask field.
The Content field and the Mask field have the same length as specified by the content-length.</t>
        <t>The Content field carries the octet sequence to be matched.
Based on information provided by equipment vendors and operators, 8 octets is usually sufficient for identifying many fixed packet-content patterns used in operational filtering scenarios.</t>
        <t>The Mask field is an octet string used as a bit mask for the Content field and the corresponding packet data. Each bit set to 1 indicates that the corresponding bit is significant for matching. Each bit set to 0 indicates that the corresponding bit is ignored.</t>
        <t>A packet matches the Packet Content filter if the following comparison is true for the packet data at the specified offset:
(packet_content &amp; mask) == (content &amp; mask)</t>
      </section>
      <section anchor="example-of-encoding">
        <name>Example of Encoding</name>
        <t>An example of a FlowSpec NLRI encoding is provided for the following rule: "match all packets destined to 192.0.2.0/24 that have the fixed content 0x5858 at offset 0 in the TCP payload".</t>
        <table>
          <thead>
            <tr>
              <th align="left">length</th>
              <th align="left">destination</th>
              <th align="left">packet content</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0f</td>
              <td align="left">01 18 c0 00 02</td>
              <td align="left">TBD 40 12 00 00 02 58 58 ff ff</td>
            </tr>
          </tbody>
        </table>
        <t>Description of each field of the FlowSpec NLRI.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left"> </th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0f</td>
              <td align="left">length</td>
              <td align="left">15 octets (if len&lt;240, 1 octet)</td>
            </tr>
            <tr>
              <td align="left">0x01</td>
              <td align="left">type</td>
              <td align="left">Type 1 - Destination Prefix</td>
            </tr>
            <tr>
              <td align="left">0x18</td>
              <td align="left">length</td>
              <td align="left">24 bits</td>
            </tr>
            <tr>
              <td align="left">0xc0</td>
              <td align="left">prefix</td>
              <td align="left">192</td>
            </tr>
            <tr>
              <td align="left">0x00</td>
              <td align="left">prefix</td>
              <td align="left">0</td>
            </tr>
            <tr>
              <td align="left">0x02</td>
              <td align="left">prefix</td>
              <td align="left">2</td>
            </tr>
            <tr>
              <td align="left">TBD</td>
              <td align="left">type</td>
              <td align="left">Type TBD - Packet Content</td>
            </tr>
            <tr>
              <td align="left">0x40</td>
              <td align="left">length</td>
              <td align="left">64 bits</td>
            </tr>
            <tr>
              <td align="left">0x12</td>
              <td align="left">ptype, otype</td>
              <td align="left">IPv4, TCP payload</td>
            </tr>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">offset</td>
              <td align="left">0 octets</td>
            </tr>
            <tr>
              <td align="left">0x02</td>
              <td align="left">content-length</td>
              <td align="left">2 octets</td>
            </tr>
            <tr>
              <td align="left">0x5858</td>
              <td align="left">content</td>
              <td align="left">0x5858</td>
            </tr>
            <tr>
              <td align="left">0xffff</td>
              <td align="left">mask</td>
              <td align="left">0xffff</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="the-packet-content-filter-for-fsv2">
      <name>The Packet Content Filter for FSv2</name>
      <section anchor="filter-encoding">
        <name>Filter Encoding</name>
        <t>To adapt to the updates of FlowSpec, this document also defines the Packet Content Filter for FSv2. The format follows the NLRI format for Extended IP Filters defined in <xref target="I-D.hares-idr-fsv2-more-ip-filters"/>, as shown in Figure 3:</t>
        <artwork><![CDATA[
+--------------------------------+
| NLRI length (2 octets)         |
+--------------------------------+
| TLVs+                          |
| +============================+ |
| | order (4 octets)           | |
| +----------------------------+ |
| | Dependent filter chain     | |
| | (8 octets)                 | |
| +----------------------------+ |
| | FSv2 Filter type = 2       | |
| +----------------------------+ |
| | length TLVs (2 octet)      | |
| +----------------------------+ |
| | Value (variable)           | |
| +--------------------------- + |
| +============================+ |
+--------------------------------+
]]></artwork>
        <t>Figure 3: NLRI Format for Extended IP Filters</t>
        <t>The format of the dependent filter chain is shown in Figure 4:</t>
        <artwork><![CDATA[
+----------------------------+
|  Version (1 octet)         |
+----------------------------+
|  Chain id (3 octet)        |
+----------------------------+
|  Count of items (2 octets) |
+----------------------------+
|  Item (2 octets)           |
+----------------------------+
]]></artwork>
        <t>Figure 4: Format of the Dependent Filter Chain</t>
        <t>The format of the Component TLV is shown in Figure 5:</t>
        <artwork><![CDATA[
+-----------------------------+
|  Component Type (2 octets)  |
+-----------------------------+
|  Component Length (2 octets)|
+-----------------------------+
|  Component Value (variable) |
+-----------------------------+
]]></artwork>
        <t>Figure 5: format for Component-TLV</t>
        <t>The definition of the Packet Content Filter in the Component-TLV format is as follows:</t>
        <artwork><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Component Type         |       Component Length        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PType | Otype |             Offset            | Content Length|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Content                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Mask                                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>Figure 6: Definition of the Packet Content Filter</t>
        <t>where the fields have the same definitions as in the FSv1 encoding.</t>
        <t>Encoding: &lt; ptype (4 bits), otype (4 bits), offset (2 octets), content-length (1 octet), content (Variable), mask (Variable)&gt;</t>
      </section>
      <section anchor="filter-ordering-rule">
        <name>Filter Ordering Rule</name>
        <t>Compared to FSv1, FSv2 adds filter ordering function. According to the definition of ordering rules in FSv2, the transmission of Component-TLVs within a flow specification rule MUST be sent ascending order by Component-TLV type. 
If the Component-TLV types are the same, then the value fields are compared using mechanisms defined in <xref target="RFC8955"/> and <xref target="RFC8956"/> and MUST be in ascending order.</t>
        <t>However, due to multiple fields in the value of the packet content filter, the mechanisms defined in <xref target="RFC8955"/> and <xref target="RFC8956"/> do not apply. To give the default ordering rules of packet content filters, this document gives the definition as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Filters with a larger content-length are ordered first.</t>
          </li>
          <li>
            <t>If they have the same content-length, compare otype and the larger type is ordered first.</t>
          </li>
          <li>
            <t>If they have the same content-length and otype, compare offset and the larger value is ordered first.</t>
          </li>
          <li>
            <t>If they have the same content-length, otype, and offset, compare the content as an unsigned octet string in lexicographic order, starting from the first octet. If the common prefix is not equal, the string with the lower octet value at the first differing position has higher precedence.</t>
          </li>
        </ol>
        <t>When multiple Packet Content Filter components exist across multiple NLRIs with the same user order, their relative order is determined according to the ordering rules above.</t>
      </section>
      <section anchor="use-cases">
        <name>Use Cases</name>
        <t>Here is a use case for ordering rules with multiple NLRI and multiple components. There are five components, with the same destination IP and user order, each of which contains a packet content filter with different values:</t>
        <artwork><![CDATA[
User-Order – 10  

FSv2 – NLRI with Extended IP Filters

Component 1: Destination IP + Packet content filter (otype 0, offset 50, content-length 2, content 0x1111) + Rate Limit 

Component 2: Destination IP + Packet content filter (otype 0, offset 50, content-length 3, content 0x111122) + Discard 

Component 3: Destination IP + Packet content filter (otype 2, offset 70, content-length 2, content 0x1111) + Rate Limit

Component 4: Destination IP + Packet content filter (otype 2, offset 70, content-length 3, content 0x111122) + Discard 

Component 5: Destination IP + Packet content filter (otype 2, offset 70, content-length 3, content 0x111133) + Rate Limit
]]></artwork>
        <t>The rules will be installed as:</t>
        <artwork><![CDATA[
User-Order – 10

Component 4: Destination IP + Packet content filter (otype 2, offset 70, content-length 3, content 0x111122) + Discard

Component 5: Destination IP + Packet content filter (otype 2, offset 70, content-length 3, content 0x111133) + Rate Limit

Component 2: Destination IP + Packet content filter (otype 0, offset 50, content-length 3, content 0x111122) + Discard

Component 3: Destination IP + Packet content filter (otype 2, offset 70, content-length 2, content 0x1111) + Rate Limit

Component 1: Destination IP + Packet content filter (otype 0, offset 50, content-length 2, content 0x1111) + Rate Limit
]]></artwork>
      </section>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>The Packet Content Filter is intended for controlled deployment scenarios, such as traffic filtering, traffic optimization, and DDoS mitigation based on known fixed packet-content patterns. Operators SHOULD deploy this filter only at controlled filtering locations, such as provider edge devices, traffic steering points, mitigation points, or other devices where the traffic impact and rollback procedures are well understood.</t>
      <t>Operators SHOULD enable Packet Content Filter processing only on devices that support packet-content parsing and have sufficient filtering resources for the expected rule scale. Unsupported rules SHOULD be rejected or ignored locally according to local policy.</t>
      <t>When encapsulation is present, such as MPLS, GRE, or other tunnels, the offset base can become ambiguous if matching is applied to the outer packet. Operators SHOULD apply matching to the decapsulated inner IP packet when applicable, or otherwise ensure that the offset base is unambiguous.</t>
    </section>
    <section anchor="scalability-considerations">
      <name>Scalability Considerations</name>
      <t>Packet-content matching may consume limited implementation resources, such as UDF, ACL, or TCAM entries. Operators SHOULD limit Packet Content Filter rules to a small set of high-value entries, such as confirmed attack signatures, operationally validated filtering rules, or traffic optimization policies.</t>
      <t>When FSv2 is used, rule ordering SHOULD be used to reduce the amount of traffic requiring packet-content inspection, for example by combining packet-content matching with more specific header-based conditions.</t>
      <t>Operators SHOULD restrict the propagation scope of Packet Content Filter rules to avoid unnecessary inter-domain scale impact. Inter-domain propagation SHOULD be used only with explicit operational agreement and suitable policy control.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification does not change the security properties of BGP itself. However, Packet Content Filter rules can affect traffic treatment and may cause packets to be dropped, redirected, rate-limited, or other actions according to local policy.</t>
      <t>Operators MUST apply appropriate import policies, validation procedures, and authorization controls before accepting Packet Content Filter rules. Such rules SHOULD be accepted only from trusted BGP peers, and their propagation scope SHOULD be restricted by local policy.</t>
      <t>To reduce false positives, Packet Content Filter rules SHOULD be combined with other FlowSpec match conditions, such as destination prefix, source prefix, protocol, port, TCP flags, or fragment-related conditions, when applicable.</t>
      <t>Unsupported rules SHOULD be rejected or ignored locally according to local policy. Implementations and operators SHOULD apply update-rate limits and resource limits to avoid excessive control-plane load and preserve BGP stability.</t>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>IANA is requested to assign a new Type Value for the Packet Content
Filter from the "Flow Spec Component Types" registry.</t>
      <artwork><![CDATA[
+------------+---------------------------+---------------+
| Type Value | Name                      | Reference     |
+------------+---------------------------+---------------+
| TBD        | Packet Content filter     | this document |
+------------+---------------------------+---------------+
]]></artwork>
      <t>For FSv2, a Packet Content Filter Component Type will be requested from
the appropriate FSv2 Extended IP Filters component registry after that
registry is defined.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC8955">
        <front>
          <title>Dissemination of Flow Specification Rules</title>
          <author fullname="C. Loibl" initials="C." surname="Loibl"/>
          <author fullname="S. Hares" initials="S." surname="Hares"/>
          <author fullname="R. Raszuk" initials="R." surname="Raszuk"/>
          <author fullname="D. McPherson" initials="D." surname="McPherson"/>
          <author fullname="M. Bacher" initials="M." surname="Bacher"/>
          <date month="December" year="2020"/>
          <abstract>
            <t>This document defines a Border Gateway Protocol Network Layer Reachability Information (BGP NLRI) encoding format that can be used to distribute (intra-domain and inter-domain) traffic Flow Specifications for IPv4 unicast and IPv4 BGP/MPLS VPN services. This allows the routing system to propagate information regarding more specific components of the traffic aggregate defined by an IP destination prefix.</t>
            <t>It also specifies BGP Extended Community encoding formats, which can be used to propagate Traffic Filtering Actions along with the Flow Specification NLRI. Those Traffic Filtering Actions encode actions a routing system can take if the packet matches the Flow Specification.</t>
            <t>This document obsoletes both RFC 5575 and RFC 7674.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8955"/>
        <seriesInfo name="DOI" value="10.17487/RFC8955"/>
      </reference>
      <reference anchor="RFC8956">
        <front>
          <title>Dissemination of Flow Specification Rules for IPv6</title>
          <author fullname="C. Loibl" initials="C." role="editor" surname="Loibl"/>
          <author fullname="R. Raszuk" initials="R." role="editor" surname="Raszuk"/>
          <author fullname="S. Hares" initials="S." role="editor" surname="Hares"/>
          <date month="December" year="2020"/>
          <abstract>
            <t>"Dissemination of Flow Specification Rules" (RFC 8955) provides a Border Gateway Protocol (BGP) extension for the propagation of traffic flow information for the purpose of rate limiting or filtering IPv4 protocol data packets.</t>
            <t>This document extends RFC 8955 with IPv6 functionality. It also updates RFC 8955 by changing the IANA Flow Spec Component Types registry.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8956"/>
        <seriesInfo name="DOI" value="10.17487/RFC8956"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="I-D.ietf-idr-flowspec-v2" target="https://datatracker.ietf.org/doc/draft-ietf-idr-flowspec-v2/04/">
        <front>
          <title>BGP Flow Specification Version 2</title>
          <author initials="S." surname="Hares" fullname="Susan Hares">
            <organization/>
          </author>
          <author initials="D. E. E." surname="3rd" fullname="Donald E. Eastlake 3rd">
            <organization/>
          </author>
          <author initials="C." surname="Yadlapalli" fullname="Chaitanya Yadlapalli">
            <organization/>
          </author>
          <author initials="S." surname="Maduschke" fullname="Sven Maduschke">
            <organization/>
          </author>
          <date year="2024" month="April"/>
        </front>
      </reference>
      <reference anchor="I-D.hares-idr-fsv2-more-ip-filters" target="https://datatracker.ietf.org/doc/draft-hares-idr-fsv2-more-ip-filters/">
        <front>
          <title>BGP Flow Specification Version 2 - More IP Filters</title>
          <author initials="S." surname="Hares" fullname="Susan Hares">
            <organization/>
          </author>
          <author initials="N." surname="Kao" fullname="Nat Kao">
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="I-D.khare-idr-bgp-flowspec-payload-match" target="https://datatracker.ietf.org/doc/draft-khare-idr-bgp-flowspec-payload-match/">
        <front>
          <title>BGP Flow Specification for Payload Matching</title>
          <author initials="A." surname="Khare" fullname="Anurag Khare">
            <organization/>
          </author>
          <author initials="P." surname="BERGEON" fullname="Philippe BERGEON">
            <organization/>
          </author>
          <author initials="V." surname="Kestur" fullname="Vijay Kestur">
            <organization/>
          </author>
          <author initials="L." surname="Jalil" fullname="Luay Jalil">
            <organization/>
          </author>
          <author initials="K." surname="Kasavchenko" fullname="Kirill Kasavchenko">
            <organization/>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
    </references>
    <?line 472?>

<section numbered="false" anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>We wish to thank Jeffrey Haas and Li Yang for their valuable comments and suggestions on this document.
We also wish to thank Rui Xu and Yannan Hu for their contribution in the implementation and validation of the packet content filter software.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
