<?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.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cui-idr-content-filter-flowspec-05" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title>Packet Content Filter for BGP FlowSpec</title>
    <seriesInfo name="Internet-Draft" value="draft-cui-idr-content-filter-flowspec-05"/>
    <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="October" day="14"/>
    <area>Routing</area>
    <workgroup>IDR</workgroup>
    <keyword>DDoS Mitigation, BGP flow specification</keyword>
    <abstract>
      <?line 144?>

<t>The BGP FlowSpec mechanism enables the distribution of traffic filter policies (traffic filters and actions) via BGP, facilitating DDoS traffic filtering. 
The IP filter components defined for FSv1 and the FSv2 IP Basic Filter Families primarily match fields in the IP and transport-layer headers, which may not adequately address volumetric DDoS attack traffic characterized by fixed patterns within the packet content. 
This document defines a Packet Content Filter Component for FSv1 and FSv2. 
The match is encoded using OType, Offset, Content Length, Content, and Mask fields in the FlowSpec NLRI. The FSv1 encoding additionally carries a PType field.
This new component 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 152?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>BGP FlowSpec describes the distribution of traffic filter policies through BGP, allowing for efficient traffic management and DDoS attack mitigation. 
The IP filter components in FSv1 and the FSv2 IP Basic Filter Families primarily offer n-tuple matching conditions for policy enforcement, enabling actions such as packet dropping, re-directing, or other actions.
FlowSpec routes can be distributed to participating BGP speakers subject to AFI/SAFI negotiation and local BGP policy. 
Despite their utility, these IP filter components 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 Packet Content Filter Component for FSv1 and FSv2. It supports packet content filtering by using OType, Offset, Content Length, Content, and Mask fields within the FlowSpec NLRI. The FSv1 encoding additionally carries a PType field. This component is intended for controlled operational use cases such as traffic filtering, traffic optimization, and DDoS mitigation.</t>
      <section anchor="requirements-language">
        <name>Requirements Language</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 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-fsv2-ip-basic"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="packet-content-filter-for-fsv1">
      <name>Packet Content Filter for FSv1</name>
      <section anchor="filter-encoding">
        <name>Filter Encoding</name>
        <t>This document defines a new FlowSpec Component Type for FSv1. It is encoded in the FlowSpec NLRI using the FSv1 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>
        <t>The same value format is used in IPv4 and IPv6 FlowSpec NLRIs.  PType
distinguishes the IP version and MUST be consistent with the AFI of the
containing FlowSpec NLRI.  The OType semantics for IPv4 and IPv6 are
specified below.</t>
        <section anchor="ptype-field">
          <name>PType Field</name>
          <t>In the FSv1 encoding, PType is a 4-bit unsigned integer that identifies
the IP version.  PType MUST be 1 when the component is carried in an
IPv4 FlowSpec NLRI and MUST be 2 when it is carried in an IPv6 FlowSpec
NLRI.</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 account for variable header lengths, this specification uses a hierarchical offset scheme similar to <xref target="I-D.khare-idr-bgp-flowspec-payload-match"/>. The OType field is a 4-bit unsigned integer defined 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 identifies the first octet of the IP header.</t>
          <t>OType 1 identifies the first octet of the IP payload.  For IPv4, this
is the first octet following the complete IPv4 header, including any
IPv4 options, as determined by the Internet Header Length (IHL) field.
For IPv6, this is the first octet following the fixed 40-octet IPv6
header.  Consequently, any IPv6 extension headers are part of the data
addressable using OType 1.</t>
          <t>OType 2 identifies the first octet of the UDP payload.  A Packet Content
Filter Component with OType 2 matches only when the applicable upper-
layer protocol is UDP (17).  OType 3 identifies the first octet of the
TCP payload.  A Packet Content Filter Component with OType 3 matches
only when the applicable upper-layer protocol is TCP (6).  For IPv6, locating a
UDP or TCP payload requires processing the IPv6 extension header chain.
If an implementation cannot locate the applicable transport-layer
header or payload, a Packet Content Filter Component with OType 2 or
OType 3 does not match.</t>
          <t>An implementation is not required to reassemble fragmented packets.
In the absence of reassembly, a Packet Content Filter Component with
OType 2 or OType 3 MUST NOT match a non-initial fragment.  An
implementation that performs reassembly MAY apply the match to the
reassembled packet.</t>
          <t>The Offset field is a 2-octet unsigned integer that specifies the number
of octets to skip from the starting position selected by OType before
matching the packet content.</t>
          <t>Example:</t>
          <ul spacing="normal">
            <li>
              <t>By setting OType 0 and an Offset of 0, the match starts at the first octet of the IP header.</t>
            </li>
            <li>
              <t>By setting OType 1 and an Offset of 2, the match starts two octets after the beginning of the IP payload.</t>
            </li>
            <li>
              <t>By setting OType 2 and an Offset of 10, the match starts ten octets into the UDP payload.</t>
            </li>
            <li>
              <t>By setting OType 3 and an Offset of 10, the match starts ten octets into the TCP payload.</t>
            </li>
          </ul>
        </section>
        <section anchor="content-length-content-and-mask-fields">
          <name>Content Length, Content, and Mask Fields</name>
          <t>The Content Length field is a one-octet unsigned integer that specifies
the length, in octets, of each of the Content and Mask fields.  Content
Length MUST be in the range 1 through 255.</t>
          <t>The Content and Mask fields each contain exactly Content Length octets.
The encoded FSv1 Packet Content Filter value length is therefore
4 + (2 * Content Length) octets.</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.  The Mask field MUST contain at least one bit set to 1.</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>
          <t>If fewer than Content Length octets are available from the selected
offset, the packet does not match the component.</t>
        </section>
      </section>
      <section anchor="ordering-of-fsv1-flow-specifications">
        <name>Ordering of FSv1 Flow Specifications</name>
        <t>When two FSv1 Flow Specifications are compared at a Packet Content
Filter Component under Section 5.1 of <xref target="RFC8955"/>, their component
values MUST be compared using the type-specific rules in the Component
Ordering Rule section below.  These are the same rules used for the
FSv2 Packet Content Filter Component.  PType is not included in this
comparison because it is fixed by the AFI of the containing FlowSpec
NLRI.</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">0x0e</td>
              <td align="left">01 18 c0 00 02</td>
              <td align="left">TBD 13 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">0x0e</td>
              <td align="left">length</td>
              <td align="left">14 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">0x13</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="packet-content-filter-for-fsv2">
      <name>Packet Content Filter for FSv2</name>
      <section anchor="filter-encoding-1">
        <name>Filter Encoding</name>
        <t>This document also defines the Packet Content Filter for FSv2.  The
Packet Content Filter Component is carried in either the IPv4 Basic
Filter Family (Filter Family Type 1000) or the IPv6 Basic Filter Family
(Filter Family Type 1100) defined in <xref target="I-D.ietf-idr-fsv2-ip-basic"/>.  In
both Filter Families, the Packet Content Filter Component Type is 3000.</t>
        <t>The FSv2 encoding hierarchy is summarized in Figure 3.  The complete
definitions of the NLRI fields, Filter Family TLV, Filter Component TLV,
flags, lengths, ordering requirements, and validation procedures are
specified in <xref target="I-D.ietf-idr-fsv2-ip-basic"/>.</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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |       NLRI Length             |
 |       (2 octets)              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |               Dependent Filters Chain (4 octets)             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |               User Order (4 octets)                           |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Filter Family Type            | Filter Family Length          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Flags | Component Type       | Component Length              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |               Component Value (variable)                     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>Figure 3: FSv2 NLRI, Filter Family, and Filter Component Hierarchy</t>
        <t>The Filter Family Type is 1000 for IPv4 Basic and 1100 for IPv6 Basic.
The Packet Content Filter Component Type is 3000.  Its Component Value
is shown in Figure 4.</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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OType (1 octet)|       Offset (2 octets)       |Content Length|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Content                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Mask                                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>Figure 4: Packet Content Filter Component Value</t>
        <t>OType is encoded as a 1-octet unsigned integer and uses the values
defined in the OType and Offset Fields section.  Offset, Content Length,
Content, and Mask have the same definitions as in the FSv1 encoding.
The IP version is identified by the IPv4 Basic or IPv6 Basic Filter
Family and is not repeated in the Component Value.</t>
        <t>Encoding: &lt; OType (1 octet), Offset (2 octets), Content Length
(1 octet), Content (variable), Mask (variable)&gt;</t>
        <t>The Packet Content Filter Component MUST be encoded as mandatory by
setting the Optional flag to zero.  Omitting this component when an
implementation cannot support packet-content inspection could broaden
the match criteria of the FlowSpec route.</t>
      </section>
      <section anchor="example-of-encoding-1">
        <name>Example of Encoding</name>
        <t>The following example encodes an FSv2 rule that matches IPv4 packets
destined to 192.0.2.0/24 and containing the fixed value 0x5858 at
Offset 0 in the TCP payload.  The rule has a User Order of 10 and no
Dependent Filters Chain.  Both Filter Components are mandatory.</t>
        <t>The FSv2 NLRI is encoded as follows.  The Filter Family TLV and its
Filter Component TLVs are expanded in the subsequent tables.</t>
        <table>
          <thead>
            <tr>
              <th align="left">NLRI Length</th>
              <th align="left">Dependent Filters Chain</th>
              <th align="left">User Order</th>
              <th align="left">Filter Family TLV</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>00 20</tt></td>
              <td align="left">
                <tt>00 00 00 00</tt></td>
              <td align="left">
                <tt>00 00 00 0a</tt></td>
              <td align="left">shown below</td>
            </tr>
          </tbody>
        </table>
        <table>
          <thead>
            <tr>
              <th align="left">Family type</th>
              <th align="left">Family length</th>
              <th align="left">Filter Component TLVs</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>03 e8</tt></td>
              <td align="left">
                <tt>00 14</tt></td>
              <td align="left">shown below</td>
            </tr>
          </tbody>
        </table>
        <table>
          <thead>
            <tr>
              <th align="left">Component</th>
              <th align="left">Flags and type</th>
              <th align="left">Length</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Destination Prefix</td>
              <td align="left">
                <tt>03 e8</tt></td>
              <td align="left">
                <tt>00 04</tt></td>
              <td align="left">
                <tt>18 c0 00 02</tt></td>
            </tr>
            <tr>
              <td align="left">Packet Content</td>
              <td align="left">
                <tt>0b b8</tt></td>
              <td align="left">
                <tt>00 08</tt></td>
              <td align="left">
                <tt>03 00 00 02 58 58 ff ff</tt></td>
            </tr>
          </tbody>
        </table>
        <t>Description of each field of the FSv2 NLRI:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>0x0020</tt></td>
              <td align="left">NLRI Length</td>
              <td align="left">32 octets</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x00000000</tt></td>
              <td align="left">Dependent Filters Chain</td>
              <td align="left">No dependency</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x0000000a</tt></td>
              <td align="left">User Order</td>
              <td align="left">10</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x03e8</tt></td>
              <td align="left">Filter Family Type</td>
              <td align="left">IPv4 Basic, type 1000</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x0014</tt></td>
              <td align="left">Filter Family Length</td>
              <td align="left">20 octets</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x03e8</tt></td>
              <td align="left">Flags and Component Type</td>
              <td align="left">Destination Prefix, 1000</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x0004</tt></td>
              <td align="left">Component Length</td>
              <td align="left">4 octets</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x18</tt></td>
              <td align="left">Prefix Length</td>
              <td align="left">24 bits</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0xc00002</tt></td>
              <td align="left">Prefix</td>
              <td align="left">192.0.2.0</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x0bb8</tt></td>
              <td align="left">Flags and Component Type</td>
              <td align="left">Packet Content, 3000</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x0008</tt></td>
              <td align="left">Component Length</td>
              <td align="left">8 octets</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x03</tt></td>
              <td align="left">OType</td>
              <td align="left">TCP Payload</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x0000</tt></td>
              <td align="left">Offset</td>
              <td align="left">0 octets</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x02</tt></td>
              <td align="left">Content Length</td>
              <td align="left">2 octets</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x5858</tt></td>
              <td align="left">Content</td>
              <td align="left">
                <tt>0x5858</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>0xffff</tt></td>
              <td align="left">Mask</td>
              <td align="left">
                <tt>0xffff</tt></td>
            </tr>
          </tbody>
        </table>
        <t>In the combined Flags and Component Type fields, the high-order four
bits are zero.  This sets the Optional flag to zero and the reserved
flag bits to zero.  The remaining 12 bits carry the Component Type.</t>
      </section>
      <section anchor="component-ordering-rule">
        <name>Component Ordering Rule</name>
        <t>FSv2 Filter Family TLVs and Filter Component TLVs within an NLRI MUST
be encoded in strictly increasing type order as specified in
<xref target="I-D.ietf-idr-fsv2-ip-basic"/>.  A Filter Component Type MUST NOT occur
more than once in a given Filter Family TLV.</t>
        <t>When route comparison reaches a Packet Content Filter Component in both
FSv1 Flow Specifications, or reaches that component in two FSv2 NLRIs
with the same User Order, the component values MUST be compared using
the following rules.  These rules define a deterministic default
ordering for Packet Content Filter Components in both versions.
The order does not imply that an earlier component matches a strict
subset of a later one: Mask bits can make a longer Content field less
restrictive, and OType and Offset select different packet positions.
Operators that require a particular order for rules with different
actions SHOULD assign appropriate User Order values, as specified in
<xref target="I-D.ietf-idr-fsv2-ip-basic"/>.</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; the larger value
is ordered first.</t>
          </li>
          <li>
            <t>If they have the same Content Length and OType, compare Offset; the
larger value is ordered first.</t>
          </li>
          <li>
            <t>If they have the same Content Length, OType, and Offset, compare
Content as an unsigned octet string in lexicographic order, starting
from the first octet.  The string with the lower octet value at the
first differing position has higher precedence.</t>
          </li>
          <li>
            <t>If the Content fields are equal, compare Mask as an unsigned octet
string in lexicographic order.  The string with the lower octet value
at the first differing position has higher precedence.</t>
          </li>
        </ol>
        <t>These rules compare components in different NLRIs.  They do not permit
duplicate Packet Content Filter Components in one FSv1 NLRI or one
FSv2 Filter Family TLV.</t>
      </section>
      <section anchor="example-of-component-ordering">
        <name>Example of Component Ordering</name>
        <t>The following example contains five FSv2 routes with the same
destination prefix and User Order.  Each route contains a Packet
Content Filter Component with a different value.  All Packet Content
Filter Components in this example use an all-ones Mask.</t>
        <artwork><![CDATA[
User Order – 10  

FSv2 – NLRI with an IP Basic Filter Family

Route 1: Destination Prefix + Packet Content Filter (OType 0, Offset 50, Content Length 2, Content 0x1111) + Rate Limit 

Route 2: Destination Prefix + Packet Content Filter (OType 0, Offset 50, Content Length 3, Content 0x111122) + Discard 

Route 3: Destination Prefix + Packet Content Filter (OType 2, Offset 70, Content Length 2, Content 0x1111) + Rate Limit

Route 4: Destination Prefix + Packet Content Filter (OType 2, Offset 70, Content Length 3, Content 0x111122) + Discard 

Route 5: Destination Prefix + 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

Route 4: Destination Prefix + Packet Content Filter (OType 2, Offset 70, Content Length 3, Content 0x111122) + Discard

Route 5: Destination Prefix + Packet Content Filter (OType 2, Offset 70, Content Length 3, Content 0x111133) + Rate Limit

Route 2: Destination Prefix + Packet Content Filter (OType 0, Offset 50, Content Length 3, Content 0x111122) + Discard

Route 3: Destination Prefix + Packet Content Filter (OType 2, Offset 70, Content Length 2, Content 0x1111) + Rate Limit

Route 1: Destination Prefix + Packet Content Filter (OType 0, Offset 50, Content Length 2, Content 0x1111) + Rate Limit
]]></artwork>
      </section>
    </section>
    <section anchor="error-handling">
      <name>Error Handling</name>
      <section anchor="fsv1-error-handling">
        <name>FSv1 Error Handling</name>
        <t>An FSv1 Packet Content Filter Component is malformed if any of the
following conditions apply:</t>
        <ul spacing="normal">
          <li>
            <t>PType is inconsistent with the AFI of the containing FlowSpec NLRI;</t>
          </li>
          <li>
            <t>OType contains a value not defined by this document;</t>
          </li>
          <li>
            <t>Content Length is zero;</t>
          </li>
          <li>
            <t>fewer than 4 + (2 * Content Length) octets remain for the component
value within the containing NLRI, or the bytes following that value
cannot be parsed as subsequent components up to the NLRI boundary; or</t>
          </li>
          <li>
            <t>Mask contains no bit set to one.</t>
          </li>
        </ul>
        <t>A malformed FSv1 Packet Content Filter Component renders the containing
FlowSpec NLRI malformed.  The NLRI is handled according to the
applicable error-handling procedures in <xref target="RFC8955"/>, <xref target="RFC8956"/>, and
<xref target="RFC7606"/>.</t>
        <t>An FSv1 implementation MAY support a local maximum smaller than 255
octets because of parsing or filtering resource limits.  A component
that exceeds such a local limit but otherwise satisfies the FSv1
encoding requirements is unsupported for local installation, not
malformed.</t>
      </section>
      <section anchor="fsv2-error-handling">
        <name>FSv2 Error Handling</name>
        <t>An FSv2 Packet Content Filter Component is malformed if any of the
following conditions apply:</t>
        <ul spacing="normal">
          <li>
            <t>the Optional flag is not zero;</t>
          </li>
          <li>
            <t>OType contains a value not defined by this document;</t>
          </li>
          <li>
            <t>Content Length is zero;</t>
          </li>
          <li>
            <t>Filter Component Length is not 4 + (2 * Content Length) octets; or</t>
          </li>
          <li>
            <t>Mask contains no bit set to one.</t>
          </li>
        </ul>
        <t>When the NLRI boundaries remain parseable, an FSv2 NLRI containing such
a malformed component MUST be handled using treat-as-withdraw, and the
operator MUST be notified, as specified by the FSv2 NLRI validation
procedures in <xref target="I-D.ietf-idr-fsv2-ip-basic"/>.  Other structural errors
are handled according to those validation procedures.</t>
        <t>An FSv2 implementation MAY support a local maximum smaller than 255
octets because of parsing or filtering resource limits.  A component
that exceeds such a local limit but otherwise satisfies the FSv2
encoding requirements is unsupported for local installation, not
malformed.  Because the Packet Content Filter Component is mandatory,
the corresponding FSv2 route is ineligible for local installation.</t>
      </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. For FSv2, an implementation that cannot install a mandatory Packet Content Filter Component MUST consider the corresponding FlowSpec route ineligible for local installation, as specified in <xref target="I-D.ietf-idr-fsv2-ip-basic"/>. Propagation of a syntactically valid FSv2 route is governed by the FSv2 validation procedures and local BGP 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>For FSv2, unsupported mandatory Packet Content Filter Components make the corresponding FlowSpec route ineligible for local installation; they MUST NOT be silently omitted while the remaining match conditions and actions are installed. 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>
      <section anchor="fsv1-component-type">
        <name>FSv1 Component Type</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>
      </section>
      <section anchor="fsv2-ip-basic-component-type">
        <name>FSv2 IP Basic Component Type</name>
        <t>IANA is requested to register the following value in the "BGP FSv2 IP
Basic Component Types" registry defined by
<xref target="I-D.ietf-idr-fsv2-ip-basic"/>.  This Component Type is used in both the
IPv4 Basic Filter Family (type 1000) and the IPv6 Basic Filter Family
(type 1100).</t>
        <artwork><![CDATA[
+------------+---------------------------+---------------+
| Type Value | Name                      | Reference     |
+------------+---------------------------+---------------+
| 3000       | Packet Content Filter     | this document |
+------------+---------------------------+---------------+
]]></artwork>
      </section>
    </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="RFC7606">
        <front>
          <title>Revised Error Handling for BGP UPDATE Messages</title>
          <author fullname="E. Chen" initials="E." role="editor" surname="Chen"/>
          <author fullname="J. Scudder" initials="J." role="editor" surname="Scudder"/>
          <author fullname="P. Mohapatra" initials="P." surname="Mohapatra"/>
          <author fullname="K. Patel" initials="K." surname="Patel"/>
          <date month="August" year="2015"/>
          <abstract>
            <t>According to the base BGP specification, a BGP speaker that receives an UPDATE message containing a malformed attribute is required to reset the session over which the offending attribute was received. This behavior is undesirable because a session reset would impact not only routes with the offending attribute but also other valid routes exchanged over the session. This document partially revises the error handling for UPDATE messages and provides guidelines for the authors of documents defining new attributes. Finally, it revises the error handling procedures for a number of existing attributes.</t>
            <t>This document updates error handling for RFCs 1997, 4271, 4360, 4456, 4760, 5543, 5701, and 6368.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7606"/>
        <seriesInfo name="DOI" value="10.17487/RFC7606"/>
      </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-fsv2-ip-basic" target="https://datatracker.ietf.org/doc/draft-ietf-idr-fsv2-ip-basic/08/">
        <front>
          <title>BGP Flow Specification Version 2 - for Basic IP</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="J." surname="Dong" fullname="Jie Dong">
            <organization/>
          </author>
          <author initials="C." surname="Yadlapalli" fullname="Chaitanya Yadlapalli">
            <organization/>
          </author>
          <author initials="S." surname="Maduschke" fullname="Sven Maduschke">
            <organization/>
          </author>
          <author initials="J." surname="Haas" fullname="Jeffrey Haas">
            <organization/>
          </author>
          <date year="2026" month="September"/>
        </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 651?>

<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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
v5d0df7/AvG8TEf1eAAA

-->

</rfc>
