<?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-ietf-idr-fsv2-content-filter-00" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title>Packet Content Filter for BGP FlowSpec</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-idr-fsv2-content-filter-00"/>
    <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>
    <author initials="J." surname="Dong" fullname="Jie Dong">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>156 Beiqing Road</street>
          <city>Beijing</city>
          <code>100095</code>
          <country>China</country>
        </postal>
        <email>jie.dong@huawei.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Routing</area>
    <workgroup>IDR</workgroup>
    <keyword>DDoS Mitigation, BGP flow specification</keyword>
    <abstract>
      <?line 165?>

<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 capable network devices 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 173?>

<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.
For IPv6, an Offset into the extension header chain can refer to different
content if extension headers are added, removed, or modified along the
forwarding path.  Matching is performed against the packet as observed
at the device applying the filter.
When an Offset points into IPv6 extension headers, operators SHOULD
confirm that the extension header layout at the target device is as
expected; otherwise, they SHOULD avoid relying on a fixed-offset match.</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 nonzero.  Its one-octet encoding permits values from 1
through 255; this is an encoding limit, not a required implementation
capacity.</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>An FSv1 implementation MAY limit the Content Length it supports for
local installation 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>
          <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>An FSv2 NLRI can contain multiple Filter Family TLVs, each containing
multiple Filter Component TLVs.  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>
        <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 3.</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 3: 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>An FSv2 implementation MAY limit the Content Length it supports for
local installation 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>
        <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>
      </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>
      </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, firewalls, traffic steering points, mitigation points, or other devices where the traffic impact and rollback procedures are well understood.</t>
      <t>Receiving or propagating a FlowSpec rule does not itself require local
installation.  Whether a device is a target for local installation is
determined by applicable target identification and local policy.  The
mechanism in <xref target="I-D.ietf-idr-node-target-ext-comm"/> is one possible way
to identify target nodes, subject to deployment and implementation support.</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. Reception and propagation of FSv2 routes follow the applicable BGP and FSv2 validation and import policies. Before local installation, a target device also needs to determine that it can implement the mandatory match components and actions and that the rule satisfies local authorization and resource policies. 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"/>.</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 SHOULD apply appropriate import policies and validation procedures to Packet Content Filter rules. Such rules SHOULD be accepted only from trusted BGP peers, and their propagation scope SHOULD be restricted by local policy. FSv2 specifies installation eligibility for unsupported mandatory components; it does not define per-rule source authorization or content inspection policy for this component. Those controls are determined by local policy before installation.</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.
For IPv6, changes to extension headers along the forwarding path can
cause a fixed-offset content filter to miss intended traffic or match
unintended traffic.</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="implementation-and-evaluation">
      <name>Implementation and Evaluation</name>
      <t>The Packet Content Filter has been tested with OpenBGPD, FRRouting, and
programmable switches.  The tests covered control-plane and data-plane
behavior.  Details of the implementation evaluation were
presented to the IDR Working Group at IETF 125, IETF 126, and the IDR
interim meeting on 26 October 2026.</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-combined-references">
      <name>References</name>
      <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>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-idr-node-target-ext-comm" target="https://datatracker.ietf.org/doc/draft-ietf-idr-node-target-ext-comm/03/">
          <front>
            <title>BGP Extended Community for Identifying the Target Nodes</title>
            <author initials="J." surname="Dong" fullname="Jie Dong">
              <organization/>
            </author>
            <author initials="S." surname="Zhuang" fullname="Shunwan Zhuang">
              <organization/>
            </author>
            <author initials="G. V. de" surname="Velde" fullname="Gunter Van de Velde">
              <organization/>
            </author>
            <author initials="J." surname="Tantsura" fullname="Jeff Tantsura">
              <organization/>
            </author>
            <date year="2026" month="February"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 680?>

<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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
AA==

-->

</rfc>
