rfc8956xml2.original.xml | rfc8956.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="US-ASCII"?> | |||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-idr-flow-spe | |||
.2119.xml"> | c-v6-22" | |||
<!ENTITY RFC4271 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | number="8956" ipr="trust200902" updates="8955" obsoletes="" | |||
.4271.xml"> | submissionType="IETF" category="std" consensus="true" xml:lang="en" tocInclude=" | |||
<!ENTITY RFC4443 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | true" tocDepth="2" | |||
.4443.xml"> | symRefs="true" sortRefs="true" version="3"> | |||
<!ENTITY RFC4760 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.4760.xml"> | <!-- xml2rfc v2v3 conversion 3.5.0 --> | |||
<!ENTITY RFC5701 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.5701.xml"> | ||||
<!ENTITY RFC7112 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.7112.xml"> | ||||
<!ENTITY RFC7153 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.7153.xml"> | ||||
<!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.8174.xml"> | ||||
<!ENTITY RFC8200 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.8200.xml"> | ||||
<!ENTITY RFC8883 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.8883.xml"> | ||||
<!ENTITY I-D.ietf-idr-rfc5575bis SYSTEM "http://xml.resource.org/public/rfc/bibx | ||||
ml3/reference.I-D.ietf-idr-rfc5575bis.xml"> | ||||
]> | ||||
<?rfc toc="yes" ?> | ||||
<?rfc symrefs="yes" ?> | ||||
<?rfc sortrefs="yes"?> | ||||
<?rfc compact="yes" ?> | ||||
<?rfc subcompact="no" ?> | ||||
<?rfc iprnotified="no" ?> | ||||
<?rfc strict="no" ?> | ||||
<rfc category="std" docName="draft-ietf-idr-flow-spec-v6-22" ipr="trust200902" | ||||
updates="I-D.ietf-idr-rfc5575bis"> | ||||
<front> | <front> | |||
<title abbrev="IPv6 Flow Specification">Dissemination of Flow Specification Ru | <title abbrev="IPv6 Flow Specification">Dissemination of Flow Specification | |||
les for IPv6</title> | Rules for IPv6</title> | |||
<author role="editor" fullname="Christoph Loibl" initials="C.L." | <seriesInfo name="RFC" value="8956"/> | |||
surname="Loibl"> | <author role="editor" fullname="Christoph Loibl" initials="C" surname="Loibl | |||
<organization>next layer Telekom GmbH</organization> | "> | |||
<address> | <organization>next layer Telekom GmbH</organization> | |||
<postal> | <address> | |||
<street>Mariahilfer Guertel 37/7</street> | ||||
<city>Vienna</city> | ||||
<region></region> | ||||
<code>1150</code> | ||||
<country>AT</country> | ||||
</postal> | ||||
<phone>+43 664 1176414</phone> | ||||
<email>cl@tix.at</email> | ||||
</address> | ||||
</author> | ||||
<author fullname='Robert Raszuk' initials='R' surname='Raszuk' role="edito | ||||
r"> | ||||
<organization>Bloomberg LP</organization> | ||||
<address> | ||||
<postal> | <postal> | |||
<street>731 Lexington Ave </street> | <street>Mariahilfer Guertel 37/7</street> | |||
<city>New York City</city> | <city>Vienna</city> | |||
<region>NY</region> | <region/> | |||
<code>10022</code> | <code>1150</code> | |||
<country>USA</country> | <country>Austria</country> | |||
</postal> | ||||
<phone>+43 664 1176414</phone> | ||||
<email>cl@tix.at</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Robert Raszuk" initials="R" surname="Raszuk" role="editor" | ||||
> | ||||
<organization>NTT Network Innovations</organization> | ||||
<address> | ||||
<postal> | ||||
<street>940 Stewart Dr</street> | ||||
<city>Sunnyvale</city> | ||||
<region>CA</region> | ||||
<code>94085</code> | ||||
<country>United States of America</country> | ||||
</postal> | </postal> | |||
<email>robert@raszuk.net</email> | <email>robert@raszuk.net</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author role="editor" fullname="Susan Hares" initials="S" surname ="Hares"> | <author role="editor" fullname="Susan Hares" initials="S" surname="Hares"> | |||
<organization>Huawei</organization> | <organization>Huawei</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>7453 Hickory Hill</street> | <street>7453 Hickory Hill</street> | |||
<city>Saline</city> | <city>Saline</city> | |||
<region>MI</region> | <region>MI</region> | |||
<code>48176</code> | <code>48176</code> | |||
<country>USA</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<email>shares@ndzh.com</email> | <email>shares@ndzh.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2020" month="December" /> | ||||
<date year="2020" /> | <area>Routing</area> | |||
<area>Routing Area</area> | <workgroup>IDR</workgroup> | |||
<workgroup>IDR Working Group</workgroup> | ||||
<keyword>RFC</keyword> | ||||
<keyword>Request for Comments</keyword> | ||||
<keyword>I-D</keyword> | ||||
<keyword>Internet-Draft</keyword> | ||||
<keyword>BGP Flow Specification</keyword> | <keyword>BGP Flow Specification</keyword> | |||
<keyword>V6</keyword> | <keyword>V6</keyword> | |||
<abstract> | <abstract> | |||
<t> | <t> | |||
Dissemination of Flow Specification Rules I-D.ietf-idr-rfc5575bis | "Dissemination of Flow Specification Rules" (RFC 8955) | |||
provides a Border Gateway Protocol | provides a Border Gateway Protocol (BGP) | |||
extension for the propagation of traffic flow information for | extension for the propagation of traffic flow information for | |||
the purpose of rate limiting or filtering IPv4 protocol data packets. | the purpose of rate limiting or filtering IPv4 protocol data packets. | |||
</t> | </t> | |||
<t> | <t> | |||
This document extends I-D.ietf-idr-rfc5575bis with IPv6 functionality. | This document extends RFC 8955 with IPv6 functionality. | |||
It also updates I-D.ietf-idr-rfc5575bis by changing the IANA Flow Spec | It also updates RFC 8955 by changing the IANA Flow Spec | |||
Component Types registry. | Component Types registry. | |||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="intro" title="Introduction"> | <section anchor="intro" numbered="true" toc="default"> | |||
<t>The growing amount of IPv6 traffic in private and public networks | <name>Introduction</name> | |||
<t>The growing amount of IPv6 traffic in private and public networks | ||||
requires the extension of tools used in IPv4-only networks to also support | requires the extension of tools used in IPv4-only networks to also support | |||
IPv6 data packets. | IPv6 data packets. | |||
</t> | </t> | |||
<t> | <t> | |||
This document analyzes the differences between describing IPv6 | This document analyzes the differences between describing IPv6 | |||
<xref target="RFC8200"></xref> flows and those of IPv4 packets. It specifies | <xref target="RFC8200" format="default"/> flows and those of IPv4 packets. It | |||
new Border Gateway Protocol <xref target="RFC4271"></xref> encoding formats t | specifies | |||
o enable | new Border Gateway Protocol <xref target="RFC4271" format="default"/> encodin | |||
Dissemination of Flow Specification Rules <xref target="I-D.ietf-idr-rfc5575b | g formats to enable | |||
is" /> | "Dissemination of Flow Specification Rules" <xref target="RFC8955" format="de | |||
fault"/> | ||||
for IPv6. | for IPv6. | |||
</t> | </t> | |||
<t> | <t> | |||
This specification is an extension of the base <xref target="I-D.ietf-idr-rf | This specification is an extension of the base established in <xref target=" | |||
c5575bis" />. | RFC8955" format="default"/>. | |||
It only defines the delta changes required to support IPv6 while all other | It only defines the delta changes required to support IPv6, while all other | |||
definitions and operation mechanisms of Dissemination of Flow Specification | definitions and operation mechanisms of "Dissemination of Flow Specification | |||
Rules will remain in the main specification and will not be repeated here. | Rules" will remain in the main specification and will not be repeated here. | |||
</t> | </t> | |||
<section title="Definitions of Terms Used in This Memo"> | <section numbered="true" toc="default"> | |||
<t> | <name>Definitions of Terms Used in This Memo</name> | |||
<list style="hanging"> | <dl newline="false" spacing="normal" indent="10"> | |||
<t hangText="AFI - ">Address Family Identifier.</t> | <dt>AFI:</dt> | |||
<t hangText="AS - ">Autonomous System.</t> | <dd>Address Family Identifier</dd> | |||
<t hangText="NLRI - ">Network Layer Reachability Information.</t> | <dt>AS: </dt> | |||
<t hangText="SAFI - ">Subsequent Address Family Identifier.</t> | <dd>Autonomous System</dd> | |||
<t hangText="VRF - ">Virtual Routing and Forwarding instance.</t> | <dt>NLRI: </dt> | |||
</list> | <dd>Network Layer Reachability Information</dd> | |||
</t> | <dt>SAFI: </dt> | |||
<t> | <dd>Subsequent Address Family Identifier</dd> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | <dt>VRF: </dt> | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | <dd>Virtual Routing and Forwarding</dd> | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | </dl> | |||
described in BCP 14 <xref target="RFC2119"></xref> <xref target="RFC8174"></ | <t> | |||
xref> | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | ||||
RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | when, and only when, they appear in all capitals, as shown here. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section title="IPv6 Flow Specification encoding in BGP"> | <section numbered="true" toc="default"> | |||
<t> | <name>IPv6 Flow Specification Encoding in BGP</name> | |||
<xref target="I-D.ietf-idr-rfc5575bis" /> defines SAFIs | <t> | |||
133 (Dissemination of Flow Specification) and 134 (L3VPN | <xref target="RFC8955" format="default"/> defines SAFIs | |||
Dissemination of Flow Specification) in order to carry | 133 (Dissemination of Flow Specification rules) and 134 (L3VPN | |||
Dissemination of Flow Specification rules) in order to carry | ||||
the corresponding Flow Specification. | the corresponding Flow Specification. | |||
</t> | </t> | |||
<t> | <t> | |||
Implementations wishing to exchange IPv6 Flow Specifications MUST use | Implementations wishing to exchange IPv6 Flow Specifications <bcp14>MUST</bcp | |||
14> use | ||||
BGP's Capability Advertisement facility to exchange the Multiprotocol | BGP's Capability Advertisement facility to exchange the Multiprotocol | |||
Extension Capability Code (Code 1) as defined in <xref target="RFC4760"></xre | Extension Capability Code (Code 1), as defined in <xref target="RFC4760" form | |||
f>. | at="default"/>. | |||
The (AFI, SAFI) pair carried in the Multiprotocol Extension Capability MUST b | The (AFI, SAFI) pair carried in the Multiprotocol Extension Capability <bcp14 | |||
e: | >MUST</bcp14> be | |||
(AFI=2, SAFI=133) for IPv6 Flow Specification, and (AFI=2, SAFI=134) for | (AFI=2, SAFI=133) for IPv6 Flow Specification rules and (AFI=2, SAFI=134) for | |||
VPNv6 Flow Specification. | L3VPN Dissemination of Flow Specification rules. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="IPv6 Flow Specification components"> | <section numbered="true" toc="default"> | |||
<t> | <name>IPv6 Flow Specification Components</name> | |||
The encoding of each of the components begins with a type field (1 octet) | <t> | |||
The encoding of each of the components begins with a Type field (1 octet) | ||||
followed by a variable length parameter. The following sections define | followed by a variable length parameter. The following sections define | |||
component types and parameter encodings for IPv6. | component types and parameter encodings for IPv6. | |||
</t> | </t> | |||
<t> | <t> | |||
Types 4 (Port), 5 (Destination Port), 6 (Source Port), 9 (TCP flags), 10 (Pac | Types 4 (Port), 5 (Destination Port), 6 (Source Port), 9 (TCP Flags), 10 (Pac | |||
ket length) and 11 (DSCP), | ket Length), | |||
as defined in <xref target="I-D.ietf-idr-rfc5575bis" />, | and 11 (DSCP), | |||
also apply to IPv6. Note that IANA is requested to update the "Flow Spec Comp | as defined in <xref target="RFC8955" format="default"/>, | |||
onent Types" registry in order | also apply to IPv6. Note that IANA has updated the "Flow Spec Component Types | |||
" registry in order | ||||
to contain both IPv4 and IPv6 Flow Specification component type numbers in a single registry | to contain both IPv4 and IPv6 Flow Specification component type numbers in a single registry | |||
(<xref target="IANA" />). | (<xref target="IANA" format="default"/>). | |||
</t> | </t> | |||
<section anchor="type_1" title="Type 1 - Destination IPv6 Prefix" toc="include"> | <section anchor="type_1" toc="include" numbered="true"> | |||
<t>Encoding: <type (1 octet), length (1 octet), offset (1 octet), p | <name>Type 1 - Destination IPv6 Prefix</name> | |||
attern (variable), padding(variable) ></t> | <dl newline="false" spacing="normal"> | |||
<t>Defines the destination prefix to match. | <dt>Encoding:</dt> | |||
<dd><type (1 octet), length (1 octet), offset (1 octet), pattern (vari | ||||
able), | ||||
padding (variable) ></dd> | ||||
</dl> | ||||
<t>This defines the destination prefix to match. | ||||
The offset has been defined to allow for flexible matching to portions of an | The offset has been defined to allow for flexible matching to portions of an | |||
IPv6 address where one is required to skip over the first N bits of the ad | IPv6 address where one is required to skip over the first N bits of the ad | |||
dress | dress. | |||
(these bits skipped are often indicated as "don’t care" bits). | (These bits skipped are often indicated as "don't care" bits.) | |||
This can be especially useful where part of the IPv6 address | This can be especially useful where part of the IPv6 address | |||
consists of an embedded IPv4 address and matching needs to happen | consists of an embedded IPv4 address, and matching needs to happen | |||
only on the embedded IPv4 address. The encoded pattern contains | only on the embedded IPv4 address. The encoded pattern contains | |||
enough octets for the bits used in matching (length minus offset | enough octets for the bits used in matching (length minus offset | |||
bits). | bits). | |||
</t> | ||||
<t> | ||||
<list style="hanging"> | ||||
<t hangText="length -">The length field indicates the N-th most signific | ||||
ant bit in the address where | ||||
bitwise pattern matching stops. | ||||
</t> | </t> | |||
<t hangText="offset -">The offset field indicates the number of most sig | <dl newline="false" spacing="normal" indent="11"> | |||
nificant address bits to | <dt>length:</dt> | |||
<dd>This indicates the N-th most significant bit in the address where | ||||
bitwise pattern matching stops. | ||||
</dd> | ||||
<dt>offset:</dt> | ||||
<dd>This indicates the number of most significant address bits to | ||||
skip before bitwise pattern matching starts. | skip before bitwise pattern matching starts. | |||
</t> | </dd> | |||
<t hangText="pattern -">Contains the matching pattern. The length of the | <dt>pattern:</dt> | |||
pattern is defined by the | <dd>This contains the matching pattern. The length of the pattern is d | |||
efined by the | ||||
number of bits needed for pattern matching (length minus offset). | number of bits needed for pattern matching (length minus offset). | |||
</dd> | ||||
<dt>padding:</dt> | ||||
<dd>This contains the minimum number of bits required to pad the compo | ||||
nent to an octet boundary. | ||||
Padding bits <bcp14>MUST</bcp14> be 0 on encoding and <bcp14>MUST</bc | ||||
p14> be ignored on decoding. | ||||
</dd> | ||||
</dl> | ||||
<t> | ||||
If length = 0 and offset = 0, this component matches every address; oth | ||||
erwise, length <bcp14>MUST</bcp14> be in the | ||||
range offset < length < 129 or the component is malformed.</t> | ||||
<t> | ||||
Note: This Flow Specification component can be represented by the notati | ||||
on ipv6address/length | ||||
if offset is 0 or | ||||
ipv6address/offset-length. The ipv6address in this notation is the textu | ||||
al IPv6 representation | ||||
of the pattern | ||||
shifted to the right by the number of offset bits. See also <xref target | ||||
="examples" format="default"/>. | ||||
</t> | </t> | |||
<t hangText="padding -">The minimum number of bits required to pad the c | </section> | |||
omponent to an octet boundary. | <section anchor="type_2" toc="include" numbered="true"> | |||
Padding bits MUST be 0 on encoding and MUST be ignored on decoding. | <name>Type 2 - Source IPv6 Prefix</name> | |||
</t> | <dl newline="false" spacing="normal"> | |||
</list> | <dt>Encoding:</dt> | |||
<dd><type (1 octet), length (1 octet), offset (1 octet), pattern (vari | ||||
able), | ||||
padding (variable) ></dd> | ||||
</dl> | ||||
<t>This defines the source prefix to match. The length, offset, pattern, | ||||
and padding | ||||
are the same as in <xref target="type_1" format="default"/>. | ||||
</t> | </t> | |||
<t> | </section> | |||
length = offset = 0 matches every address, otherwise length MUST be in t | <section anchor="type_3" numbered="true" toc="default"> | |||
he range offset < length < 129 | <name>Type 3 - Upper-Layer Protocol</name> | |||
or the component is malformed. | <dl newline="false" spacing="normal"> | |||
</t> | <dt>Encoding:</dt> | |||
<t> | <dd><type (1 octet), [numeric_op, value]+></dd> | |||
Note: This Flow Specification component can be represented by the notati | </dl> | |||
on ipv6address/length if offset is 0, or | <t>This contains a list of {numeric_op, value} pairs that | |||
ipv6address/offset-length. The ipv6address in this notation is the textu | ||||
al IPv6 representation of the pattern | ||||
shifted to the right by the number of offset bits. See also <xref target | ||||
="examples" />. | ||||
</t> | ||||
</section> | ||||
<section anchor="type_2" title="Type 2 - Source IPv6 Prefix" toc="include"> | ||||
<t>Encoding: <type (1 octet), length (1 octet), offset (1 octet), p | ||||
attern (variable), padding(variable) ></t> | ||||
<t>Defines the source prefix to match. The length, offset, pattern and | ||||
padding | ||||
are the same as in <xref target="type_1" />. | ||||
</t> | ||||
</section> | ||||
<section anchor="type_3" title="Type 3 - Upper-Layer Protocol"> | ||||
<t>Encoding: <type (1 octet), [numeric_op, value]+> | ||||
</t> | ||||
<t>Contains a list of {numeric_op, value} pairs that | ||||
are used to match the first Next Header value octet in IPv6 packets | are used to match the first Next Header value octet in IPv6 packets | |||
that is not an extension header and thus indicates that the next item | that is not an extension header and thus indicates that the next item | |||
in the packet is the corresponding upper-layer header (see | in the packet is the corresponding upper-layer header (see | |||
<xref target="RFC8200" /> Section 4). | <xref target="RFC8200" sectionFormat="of" section="4"/>). | |||
</t> | </t> | |||
<t>This component uses the Numeric Operator (numeric_op) described in | <t>This component uses the Numeric Operator (numeric_op) described in | |||
<xref target="I-D.ietf-idr-rfc5575bis" /> Section 4.2.1.1. | <xref target="RFC8955" sectionFormat="of" section="4.2.1.1"/>. | |||
Type 3 component values SHOULD be encoded as single octet | Type 3 component values <bcp14>SHOULD</bcp14> be encoded as a single octet | |||
(numeric_op len=00). | (numeric_op len=00). | |||
</t> | </t> | |||
<t>Note: While IPv6 allows for more than one Next Header field in the | <t>Note: While IPv6 allows for more than one Next Header field in the | |||
packet, the main goal of the Type 3 Flow Specification component is to | packet, the main goal of the Type 3 Flow Specification component is to | |||
match on the first upper-layer IP protocol value. Therefore the | match on the first upper-layer IP protocol value. Therefore, the | |||
definition is limited to match only on this specific Next Header field in | definition is limited to match only on this specific Next Header field in | |||
the packet. | the packet. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="type_7" title="Type 7 - ICMPv6 Type" toc="include"> | <section anchor="type_7" toc="include" numbered="true"> | |||
<t>Encoding: <type (1 octet), [numeric_op, value]+> | <name>Type 7 - ICMPv6 Type</name> | |||
</t> | <dl newline="false" spacing="normal"> | |||
<t>Defines a list of {numeric_op, value} pairs used to match the | <dt>Encoding:</dt> | |||
type field of an ICMPv6 packet (see also <xref target="RFC4443" /> Section 2 | <dd><type (1 octet), [numeric_op, value]+></dd> | |||
.1). | </dl> | |||
</t> | <t>This defines a list of {numeric_op, value} pairs used to match the | |||
<t> | Type field of an ICMPv6 packet (see also <xref target="RFC4443" sectionForma | |||
t="of" section="2.1"/>). | ||||
</t> | ||||
<t> | ||||
This component uses the Numeric Operator (numeric_op) described | This component uses the Numeric Operator (numeric_op) described | |||
in <xref target="I-D.ietf-idr-rfc5575bis" /> Section 4.2.1.1. | in <xref target="RFC8955" sectionFormat="of" section="4.2.1.1"/>. | |||
Type 7 component values SHOULD be encoded as single octet | Type 7 component values <bcp14>SHOULD</bcp14> be encoded as a single oct | |||
et | ||||
(numeric_op len=00). | (numeric_op len=00). | |||
</t> | </t> | |||
<t> | <t> | |||
In case of the presence of the ICMPv6 Type | In case of the presence of the ICMPv6 type | |||
component only ICMPv6 packets can match the entire Flow Specification. | component, only ICMPv6 packets can match the entire Flow Specification. | |||
The ICMPv6 Type component, if present, never matches when the packet's | The ICMPv6 type component, if present, never matches when the packet's | |||
upper-layer IP protocol value is not 58 (ICMPv6), if the packet is fragm ented | upper-layer IP protocol value is not 58 (ICMPv6), if the packet is fragm ented | |||
and this is not the first fragment, or if the system is unable to | and this is not the first fragment, or if the system is unable to | |||
locate the transport header. Different implementations may or may not be | locate the transport header. Different implementations may or may not be | |||
able to decode the transport header. | able to decode the transport header. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="type_8" title="Type 8 - ICMPv6 Code" toc="include"> | <section anchor="type_8" toc="include" numbered="true"> | |||
<t>Encoding: <type (1 octet), [numeric_op, value]+> | <name>Type 8 - ICMPv6 Code</name> | |||
</t> | <dl newline="false" spacing="normal"> | |||
<t> | <dt>Encoding:</dt> | |||
Defines a list of {numeric_op, value} pairs used to match the | <dd><type (1 octet), [numeric_op, value]+></dd> | |||
code field of an ICMPv6 packet (see also <xref target="RFC4443" /> Section 2 | </dl> | |||
.1). | <t> | |||
</t> | This defines a list of {numeric_op, value} pairs used to match the | |||
<t> | code field of an ICMPv6 packet (see also <xref target="RFC4443" sectionForma | |||
t="of" section="2.1"/>). | ||||
</t> | ||||
<t> | ||||
This component uses the Numeric Operator (numeric_op) described | This component uses the Numeric Operator (numeric_op) described | |||
in <xref target="I-D.ietf-idr-rfc5575bis" /> Section 4.2.1.1. | in <xref target="RFC8955" sectionFormat="of" section="4.2.1.1"/>. | |||
Type 8 component values SHOULD be encoded as single octet | Type 8 component values <bcp14>SHOULD</bcp14> be encoded as a single oct | |||
et | ||||
(numeric_op len=00). | (numeric_op len=00). | |||
</t> | </t> | |||
<t> | <t> | |||
In case of the presence of the ICMPv6 Code | In case of the presence of the ICMPv6 code | |||
component only ICMPv6 packets can match the entire Flow Specification. | component, only ICMPv6 packets can match the entire Flow Specification. | |||
The ICMPv6 code component, if present, never matches when the packet's | The ICMPv6 code component, if present, never matches when the packet's | |||
upper-layer IP protocol value is not 58 (ICMPv6), if the packet is fragm ented | upper-layer IP protocol value is not 58 (ICMPv6), if the packet is fragm ented | |||
and this is not the first fragment, or if the system is unable to | and this is not the first fragment, or if the system is unable to | |||
locate the transport header. Different implementations may or may not be | locate the transport header. Different implementations may or may not be | |||
able to decode the transport header. | able to decode the transport header. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="type_12 " title="Type 12 - Fragment"> | <section anchor="type_12" numbered="true" toc="default"> | |||
<t>Encoding: <type (1 octet), [bitmask_op, bitmask]+> | <name>Type 12 - Fragment</name> | |||
</t> | <dl newline="false" spacing="normal"> | |||
<t> Defines a list of {bitmask_op, bitmask} pairs used to match specific I | <dt>Encoding:</dt> | |||
P fragments. | <dd><type (1 octet), [bitmask_op, bitmask]+></dd> | |||
</t> | </dl> | |||
<t>This component uses the Bitmask Operator (bitmask_op) described | <t>This defines a list of {bitmask_op, bitmask} pairs used to match spec | |||
in <xref target="I-D.ietf-idr-rfc5575bis" /> Section 4.2.1.2. The | ific IP fragments.</t> | |||
Type 12 component bitmask MUST be encoded as single octet bitmask | <t>This component uses the Bitmask Operator (bitmask_op) described | |||
in <xref target="RFC8955" sectionFormat="of" section="4.2.1.2"/>. The | ||||
Type 12 component bitmask <bcp14>MUST</bcp14> be encoded as a single octet | ||||
bitmask | ||||
(bitmask_op len=00). | (bitmask_op len=00). | |||
</t> | </t> | |||
<t> | <figure anchor="figure_fragment_bitmask_operand"> | |||
<figure title="Fragment Bitmask Operand" anchor="figure_fragment_bitmask | <name>Fragment Bitmask Operand</name> | |||
_operand"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<artwork> | ||||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| 0 | 0 | 0 | 0 |LF |FF |IsF| 0 | | | 0 | 0 | 0 | 0 |LF |FF |IsF| 0 | | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
</artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
</t> | ||||
<t>Bitmask values: | <t>Bitmask values: | |||
<list style="hanging"> | ||||
<t hangText="IsF -">Is a fragment other than the first - match if IPv6 F | ||||
ragment Header (<xref target="RFC8200" /> Section 4.5) | ||||
Fragment Offset is not 0 | ||||
</t> | ||||
<t hangText="FF -">First fragment - match if IPv6 Fragment Header (<xref | ||||
target="RFC8200" /> Section 4.5) | ||||
Fragment Offset is 0 AND M flag is 1 | ||||
</t> | ||||
<t hangText="LF -">Last fragment - match if IPv6 Fragment Header (<xref | ||||
target="RFC8200" /> Section 4.5) | ||||
Fragment Offset is not 0 AND M flag is 0 | ||||
</t> | </t> | |||
<t hangText="0 -">MUST be set to 0 on NLRI encoding, and MUST be ignored | <dl newline="false" spacing="normal" indent="6"> | |||
during decoding | <dt>IsF:</dt> | |||
</t> | <dd>Is a fragment other than the first -- match if IPv6 Fragment Heade | |||
</list> | r | |||
(<xref target="RFC8200" sectionFormat="of" section="4.5"/>) Fragment Of | ||||
fset is not 0</dd> | ||||
<dt>FF:</dt> | ||||
<dd>First fragment -- match if IPv6 Fragment Header (<xref target="RFC | ||||
8200" sectionFormat="of" | ||||
section="4.5"/>) Fragment Offset is 0 AND M flag is 1</dd> | ||||
<dt>LF:</dt> | ||||
<dd>Last fragment -- match if IPv6 Fragment Header (<xref target="RFC8 | ||||
200" sectionFormat="of" | ||||
section="4.5"/>) Fragment Offset is not 0 AND M flag is 0</dd> | ||||
<dt>0:</dt> | ||||
<dd><bcp14>MUST</bcp14> be set to 0 on NLRI encoding and <bcp14>MUST</ | ||||
bcp14> be ignored | ||||
during decoding</dd> | ||||
</dl> | ||||
</section> | ||||
<section anchor="type_13" numbered="true" toc="default"> | ||||
<name>Type 13 - Flow Label (new)</name> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>Encoding:</dt> | ||||
<dd><type (1 octet), [numeric_op, value]+></dd> | ||||
</dl> | ||||
<t>This contains a list of {numeric_op, value} pairs that are used to ma | ||||
tch | ||||
the 20-bit Flow Label IPv6 header field (<xref target="RFC8200" sectionFor | ||||
mat="of" section="3"/>). | ||||
</t> | </t> | |||
</section> | <t>This component uses the Numeric Operator (numeric_op) described in | |||
<section anchor="type_13" title="Type 13 - Flow Label (new)"> | <xref target="RFC8955" sectionFormat="of" section="4.2.1.1"/>. Type 13 | |||
<t>Encoding: <type (1 octet), [numeric_op, value]+> | component values <bcp14>SHOULD</bcp14> be encoded as 4-octet quantities | |||
</t> | ||||
<t>Contains a list of {numeric_op, value} pairs that are used to match | ||||
the 20-bit Flow Label IPv6 header field (<xref target="RFC8200"></xref> | ||||
Section 3). | ||||
</t> | ||||
<t>This component uses the Numeric Operator (numeric_op) described in | ||||
<xref target="I-D.ietf-idr-rfc5575bis" /> Section 4.2.1.1. Type 13 | ||||
component values SHOULD be encoded as 4-octet quantities | ||||
(numeric_op len=10). | (numeric_op len=10). | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Encoding Example" anchor="examples"> | <section anchor="examples" numbered="true" toc="default"> | |||
<section title="Example 1" toc="exclude"> | <name>Encoding Examples</name> | |||
<t> | <section numbered="true"> | |||
The following example demonstrates the prefix encoding for: | <name>Example 1</name> | |||
"packets from ::1234:5678:9a00:0/64-104 to 2001:db8::/32 and upper-layer-prot | <t> | |||
ocol tcp". | The following example demonstrates the prefix encoding for | |||
</t> | packets from ::1234:5678:9a00:0/64-104 to 2001:db8::/32 and upper-layer proto | |||
<t> | col tcp. | |||
<figure> | </t> | |||
<artwork> | ||||
+--------+----------------------+-------------------------+----------+ | <table anchor="example-1" align="left"> | |||
| length | destination | source | ul-proto | | <thead> | |||
+--------+----------------------+-------------------------+----------+ | <tr> | |||
| 0x12 | 01 20 00 20 01 0D B8 | 02 68 40 12 34 56 78 9A | 03 81 06 | | <th>len</th> | |||
+--------+----------------------+-------------------------+----------+ | <th>destination</th> | |||
</artwork> | <th>source</th> | |||
</figure> | <th>ul-proto</th> | |||
</t> | </tr> | |||
<t> | </thead> | |||
Decoded: | <tbody> | |||
<figure> | <tr> | |||
<artwork> | <td>0x12</td> | |||
+-------+------------+-------------------------------+ | <td>01 20 00 20 01 0D B8</td> | |||
| Value | | | | <td>02 68 40 12 34 56 78 9A</td> | |||
+-------+------------+-------------------------------+ | <td>03 81 06</td> | |||
| 0x12 | length | 18 octets (len<240 1-octet) | | </tr> | |||
| 0x01 | type | Type 1 - Dest. IPv6 Prefix | | </tbody> | |||
| 0x20 | length | 32 bit | | </table> | |||
| 0x00 | offset | 0 bit | | <t>Decoded:</t> | |||
| 0x20 | pattern | | | <table anchor="example-1-decoded" align="left"> | |||
| 0x01 | pattern | | | <thead> | |||
| 0x0D | pattern | | | <tr> | |||
| 0xB8 | pattern | (no padding needed) | | <th>Value</th> | |||
| 0x02 | type | Type 2 - Source IPv6 Prefix | | <th></th> | |||
| 0x68 | length | 104 bit | | <th></th> | |||
| 0x40 | offset | 64 bit | | </tr> | |||
| 0x12 | pattern | | | </thead> | |||
| 0x34 | pattern | | | <tbody> | |||
| 0x56 | pattern | | | <tr> | |||
| 0x78 | pattern | | | <td>0x12</td> | |||
| 0x9A | pattern | (no padding needed) | | <td>length</td> | |||
| 0x03 | type | Type 3 - upper-layer-proto | | <td>18 octets (if len<240, 1 octet)</td> | |||
| 0x81 | numeric_op | end-of-list, value size=1, == | | </tr> | |||
| 0x06 | value | 06 | | <tr> | |||
+-------+------------+-------------------------------+ | <td>0x01</td> | |||
</artwork> | <td>type</td> | |||
</figure> | <td>Type 1 - Dest. IPv6 Prefix</td> | |||
This constitutes a NLRI with a NLRI length of 18 octets. | </tr> | |||
</t> | <tr> | |||
<t> | <td>0x20</td> | |||
<td>length</td> | ||||
<td>32 bits</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x00</td> | ||||
<td>offset</td> | ||||
<td>0 bits</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x20</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x01</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x0D</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0xB8</td> | ||||
<td>pattern</td> | ||||
<td>(no padding needed)</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x02</td> | ||||
<td>type</td> | ||||
<td>Type 2 - Source IPv6 Prefix</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x68</td> | ||||
<td>length</td> | ||||
<td>104 bits</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x40</td> | ||||
<td>offset</td> | ||||
<td>64 bits</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x12</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x34</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x56</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x78</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x9A</td> | ||||
<td>pattern</td> | ||||
<td>(no padding needed)</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x03</td> | ||||
<td>type</td> | ||||
<td>Type 3 - Upper-Layer Protocol</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x81</td> | ||||
<td>numeric_op</td> | ||||
<td>end-of-list, value size=1, ==</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x06</td> | ||||
<td>value</td> | ||||
<td>06</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>This constitutes an NLRI with an NLRI length of 18 octets.</t> | ||||
<t> | ||||
Padding is not needed either for the destination prefix pattern | Padding is not needed either for the destination prefix pattern | |||
(length - offset = 32 bit) or for the source prefix pattern | (length - offset = 32 bits) or for the source prefix pattern | |||
(length - offset = 40 bit), as both patterns end on an octet | (length - offset = 40 bits), as both patterns end on an octet | |||
boundary. | boundary. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Example 2" toc="exclude"> | <section numbered="true"> | |||
<t> | <name>Example 2</name> | |||
The following example demonstrates the prefix encoding for: "all | <t> | |||
packets from ::1234:5678:9a00:0/65-104 to 2001:db8::/32". | The following example demonstrates the prefix encoding for all | |||
</t> | packets from ::1234:5678:9a00:0/65-104 to 2001:db8::/32. | |||
<t> | ||||
<figure> | ||||
<artwork> | ||||
+--------+----------------------+-------------------------+ | ||||
| length | destination | source | | ||||
+--------+----------------------+-------------------------+ | ||||
| 0x0f | 01 20 00 20 01 0D B8 | 02 68 41 24 68 ac f1 34 | | ||||
+--------+----------------------+-------------------------+ | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | ||||
Decoded: | ||||
<figure> | ||||
<artwork> | ||||
+-------+-------------+-------------------------------+ | ||||
| Value | | | | ||||
+-------+-------------+-------------------------------+ | ||||
| 0x0f | length | 15 octets (len<240 1-octet) | | ||||
| 0x01 | type | Type 1 - Dest. IPv6 Prefix | | ||||
| 0x20 | length | 32 bit | | ||||
| 0x00 | offset | 0 bit | | ||||
| 0x20 | pattern | | | ||||
| 0x01 | pattern | | | ||||
| 0x0D | pattern | | | ||||
| 0xB8 | pattern | (no padding needed) | | ||||
| 0x02 | type | Type 2 - Source IPv6 Prefix | | ||||
| 0x68 | length | 104 bit | | ||||
| 0x41 | offset | 65 bit | | ||||
| 0x24 | pattern | | | ||||
| 0x68 | pattern | | | ||||
| 0xac | pattern | | | ||||
| 0xf1 | pattern | | | ||||
| 0x34 | pattern/pad | (contains 1 bit padding) | | ||||
+-------+-------------+-------------------------------+ | ||||
</artwork> | ||||
</figure> | ||||
This constitutes a NLRI with a NLRI length of 15 octets. | ||||
</t> | </t> | |||
<t> | <table anchor="example-2" align="left"> | |||
<thead> | ||||
<tr> | ||||
<th>length</th> | ||||
<th>destination</th> | ||||
<th>source</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>0x0f</td> | ||||
<td>01 20 00 20 01 0D B8</td> | ||||
<td>02 68 41 24 68 ac f1 34</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Decoded:</t> | ||||
<table anchor="example-2-decoded" align="left"> | ||||
<thead> | ||||
<tr> | ||||
<th>Value</th> | ||||
<th></th> | ||||
<th></th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>0x0f</td> | ||||
<td>length</td> | ||||
<td>15 octets (if len<240, 1 octet)</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x01</td> | ||||
<td>type</td> | ||||
<td>Type 1 - Dest. IPv6 Prefix</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x20</td> | ||||
<td>length</td> | ||||
<td>32 bits</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x00</td> | ||||
<td>offset</td> | ||||
<td>0 bits</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x20</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x01</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x0D</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0xB8</td> | ||||
<td>pattern</td> | ||||
<td>(no padding needed)</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x02</td> | ||||
<td>type</td> | ||||
<td>Type 2 - Source IPv6 Prefix</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x68</td> | ||||
<td>length</td> | ||||
<td>104 bits</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x41</td> | ||||
<td>offset</td> | ||||
<td>65 bits</td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x24</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x68</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0xac</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0xf1</td> | ||||
<td>pattern</td> | ||||
<td></td> | ||||
</tr> | ||||
<tr> | ||||
<td>0x34</td> | ||||
<td>pattern/pad</td> | ||||
<td>(contains 1 bit of padding)</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>This constitutes an NLRI with an NLRI length of 15 octets.</t> | ||||
<t> | ||||
The source prefix pattern is 104 - 65 = 39 bits in length. | The source prefix pattern is 104 - 65 = 39 bits in length. | |||
After the pattern one bit of padding needs to be added so that the | After the pattern, one bit of padding needs to be added so that the | |||
component ends on a octet boundary. However, only the first 39 bits | component ends on an octet boundary. However, only the first 39 bits | |||
are actually used for bitwise pattern matching starting with a 65 bit | are actually used for bitwise pattern matching, starting with a 65-bit | |||
offset from the topmost bit of the address. | offset from the topmost bit of the address. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | ||||
</section> | </section> | |||
</section> | <section numbered="true" toc="default"> | |||
<section title="Ordering of Flow Specifications"> | <name>Ordering of Flow Specifications</name> | |||
<t> | <t> | |||
The definition for the order of traffic filtering rules from | The definition for the order of traffic filtering rules from | |||
<xref target="I-D.ietf-idr-rfc5575bis" /> Section 5.1 is | <xref target="RFC8955" sectionFormat="of" section="5.1"/> is | |||
reused with new consideration for the IPv6 prefix offset. As long | reused with new consideration for the IPv6 prefix offset. As long | |||
as the offsets are equal, the comparison is the same, retaining | as the offsets are equal, the comparison is the same, retaining | |||
longest-prefix-match semantics. If the offsets are not equal, the | longest-prefix-match semantics. If the offsets are not equal, the | |||
lowest offset has precedence, as this Flow Specification matches the most | lowest offset has precedence, as this Flow Specification matches the most si | |||
significant bit. | gnificant bit. | |||
</t> | </t> | |||
<t> | <t> | |||
The code in <xref target="flow_rule_cmp_src" /> shows a Python3 implementa | The code in <xref target="flow_rule_cmp_src" format="default"/> shows a Py | |||
tion | thon3 implementation | |||
of the resulting comparison algorithm. The full code was tested with Pytho n 3.7.2 and can be | of the resulting comparison algorithm. The full code was tested with Pytho n 3.7.2 and can be | |||
obtained at <eref target="https://github.com/stoffi92/draft-ietf-idr-flow- | obtained at <eref target="https://github.com/stoffi92/draft-ietf-idr-flow- | |||
spec-v6/tree/master/flowspec-cmp">https://github.com/stoffi92/draft-ietf-idr-flo | spec-v6/tree/master/flowspec-cmp" brackets="angle"/>. | |||
w-spec-v6/tree/master/flowspec-cmp</eref>. | </t> | |||
</t> | </section> | |||
</section> | <section numbered="true" toc="default"> | |||
<section title="Validation Procedure"> | <name>Validation Procedure</name> | |||
<t> | <t> | |||
The validation procedure is the same as specified in | The validation procedure is the same as specified in | |||
<xref target="I-D.ietf-idr-rfc5575bis" /> Section 6 with the exception | <xref target="RFC8955" sectionFormat="of" section="6"/> with the exception | |||
that item a) of the validation procedure should now read as follows: | that item a) of the validation procedure should now read as follows: | |||
<list> | </t> | |||
<t> | <blockquote> | |||
a) A destination prefix component with offset=0 is embedded in the | <ol type="%c)"> | |||
Flow Specification | <li>A destination prefix component with offset=0 is embedded in the | |||
</t> | Flow Specification</li> | |||
</list> | </ol> | |||
</t> | </blockquote> | |||
</section> | </section> | |||
<section title="IPv6 Traffic Filtering Action changes"> | <section numbered="true" toc="default"> | |||
<t>Traffic Filtering Actions from <xref target="I-D.ietf-idr-rfc5575bis" | <name>IPv6 Traffic Filtering Action Changes</name> | |||
/> | <t>Traffic Filtering Actions from <xref target="RFC8955" sectionFormat="of | |||
Section 7 can also be applied to IPv6 Flow Specifications. To allow | " section="7"/> | |||
can also be applied to IPv6 Flow Specifications. To allow | ||||
an IPv6-Address-Specific Route-Target, a new Traffic Filtering | an IPv6-Address-Specific Route-Target, a new Traffic Filtering | |||
Action IPv6-Address-Specific Extended Community <xref target="RFC5701">< | Action IPv6-Address-Specific Extended Community is specified in | |||
/xref> is specified in | <xref target="redirect_ipv6" format="default"/> below. | |||
<xref target="redirect_ipv6" /> below. | </t> | |||
</t> | <section anchor="redirect_ipv6" numbered="true" toc="default"> | |||
<section anchor="redirect_ipv6" title="Redirect IPv6 (rt-redirect-ipv6) Type | <name>Redirect IPv6 (rt-redirect-ipv6) Type 0x000d</name> | |||
TBD"> | <t>The redirect IPv6-Address-Specific Extended Community | |||
<t>The redirect IPv6-Address-Specific Extended Community | ||||
allows the traffic to be redirected to a VRF routing instance that | allows the traffic to be redirected to a VRF routing instance that | |||
lists the specified IPv6-Address-Specific Route-Target in its import | lists the specified IPv6-Address-Specific Route-Target in its import | |||
policy. If several local instances match this criteria, the choice | policy. If several local instances match this criteria, the choice | |||
between them is a local matter (for example, the instance with the | between them is a local matter (for example, the instance with the | |||
lowest Route Distinguisher value can be elected). | lowest Route Distinguisher value can be elected). | |||
</t> | ||||
<t>This IPv6-Address-Specific Extended Community uses the same encoding a | ||||
s the | ||||
IPv6-Address-Specific Route-Target Extended Community | ||||
<xref target="RFC5701"></xref> Section 2 with the | ||||
Type value always TBD. | ||||
</t> | ||||
<t>The Local Administrator sub-field contains a number from a numbering | ||||
space that is administered by the organization to which the IP | ||||
address carried in the Global Administrator sub-field has been | ||||
assigned by an appropriate authority. | ||||
</t> | ||||
<t>Interferes with: All BGP Flow Specification redirect Traffic Filtering | ||||
Actions (with itself and those specified in | ||||
<xref target="I-D.ietf-idr-rfc5575bis" /> Section 7.4). | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section title="Security Considerations"> | ||||
<t> | ||||
This document extends the functionality in <xref target="I-D.ietf-idr-rfc5575 | ||||
bis" /> to be applicable to | ||||
IPv6 data packets. The same Security Considerations from <xref target="I-D.ie | ||||
tf-idr-rfc5575bis" /> | ||||
now also apply to IPv6 networks. | ||||
</t> | ||||
<t> | ||||
<xref target="RFC7112" /> describes the impact of oversized IPv6 header chain | ||||
s when trying to match on the transport | ||||
header; <xref target="RFC8200" /> Section 4.5 also requires that the first fr | ||||
agment must include the upper-layer | ||||
header but there could be wrongly formatted packets not respecting <xref targ | ||||
et="RFC8200" />. IPv6 Flow Specification | ||||
component type 3 (<xref target="type_3"/>) will not be enforced for those ill | ||||
egal packets. Moreover, | ||||
there are hardware limitations in several routers (<xref target="RFC8883" /> | ||||
Section 1) that may make it impossible to | ||||
enforce a policy signaled by a type 3 Flow Specification component or Flow Sp | ||||
ecification components | ||||
that match on upper-layer properties of the packet. | ||||
</t> | ||||
</section> | ||||
<section anchor="IANA" title="IANA Considerations"> | ||||
<t>This section complies with <xref target="RFC7153"></xref>. | ||||
</t> | ||||
<section title="Flow Spec IPv6 Component Types"> | ||||
<t> | ||||
IANA has created and maintains a registry entitled "Flow Spec Component Type | ||||
s". | ||||
IANA is requested to add [this document] to the reference for this registry. | ||||
Furthermore the registry should be rewritten to also contain the IPv6 Flow S | ||||
pecification | ||||
Component Types as described below. The registration procedure should remain | ||||
unchanged. | ||||
</t> | ||||
<section title="Registry Template"> | ||||
<t> | ||||
<list style="hanging" hangIndent="6"> | ||||
<t hangText="Type Value:"> | ||||
<vspace /> | ||||
Contains the assigned Flow Specification component type value. | ||||
</t> | ||||
<t hangText="IPv4 Name:"> | ||||
<vspace /> | ||||
Contains the associated IPv4 Flow Specification component name as specif | ||||
ied in | ||||
<xref target="I-D.ietf-idr-rfc5575bis" />. | ||||
</t> | ||||
<t hangText="IPv6 Name:"> | ||||
<vspace /> | ||||
Contains the associated IPv6 Flow Specification component name as specif | ||||
ied in | ||||
this document. | ||||
</t> | ||||
<t hangText="Reference:"> | ||||
<vspace /> | ||||
Contains referenced to the specifications. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Registry Contents"> | ||||
<t> | ||||
<list> | ||||
<t> | ||||
+ Type Value: 0<vspace/> | ||||
+ IPv4 Name: Reserved<vspace/> | ||||
+ IPv6 Name: Reserved<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 1<vspace/> | ||||
+ IPv4 Name: Destination Prefix<vspace/> | ||||
+ IPv6 Name: Destination IPv6 Prefix<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 2<vspace/> | ||||
+ IPv4 Name: Source Prefix<vspace/> | ||||
+ IPv6 Name: Source IPv6 Prefix<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 3<vspace/> | ||||
+ IPv4 Name: IP Protocol<vspace/> | ||||
+ IPv6 Name: Upper-Layer Protocol<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 4<vspace/> | ||||
+ IPv4 Name: Port<vspace/> | ||||
+ IPv6 Name: Port<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 5<vspace/> | ||||
+ IPv4 Name: Destination Port<vspace/> | ||||
+ IPv6 Name: Destination Port<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 6<vspace/> | ||||
+ IPv4 Name: Source Port<vspace/> | ||||
+ IPv6 Name: Source Port<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 7<vspace/> | ||||
+ IPv4 Name: ICMP Type<vspace/> | ||||
+ IPv6 Name: ICMPv6 Type<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 8<vspace/> | ||||
+ IPv4 Name: ICMP Code<vspace/> | ||||
+ IPv6 Name: ICMPv6 Code<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | </t> | |||
<t> | <t>This IPv6-Address-Specific Extended Community uses the same encoding | |||
+ Type Value: 9<vspace/> | as the IPv6-Address-Specific | |||
+ IPv4 Name: TCP Flags<vspace/> | Route-Target Extended Community | |||
+ IPv6 Name: TCP Flags<vspace/> | (<xref target="RFC5701" sectionFormat="of" section="2"/>) with the | |||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | Type value always 0x000d. | |||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 10<vspace/> | ||||
+ IPv4 Name: Packet Length<vspace/> | ||||
+ IPv6 Name: Packet Length<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 11<vspace/> | ||||
+ IPv4 Name: DSCP<vspace/> | ||||
+ IPv6 Name: DSCP<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | ||||
<t> | ||||
+ Type Value: 12<vspace/> | ||||
+ IPv4 Name: Fragment<vspace/> | ||||
+ IPv6 Name: Fragment<vspace/> | ||||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | ||||
space/> | ||||
</t> | </t> | |||
<t> | <t>The Local Administrator subfield contains a number from a numbering | |||
+ Type Value: 13<vspace/> | space that is administered by the organization to which the IP | |||
+ IPv4 Name: Unassigned<vspace/> | address carried in the Global Administrator subfield has been | |||
+ IPv6 Name: Flow Label<vspace/> | assigned by an appropriate authority. | |||
+ Reference: [this document]<vspace/> | ||||
</t> | </t> | |||
<t> | <t>Interferes with: All BGP Flow Specification redirect Traffic Filterin | |||
+ Type Value: 14-254<vspace/> | g | |||
+ IPv4 Name: Unassigned<vspace/> | Actions (with itself and those specified in | |||
+ IPv6 Name: Unassigned<vspace/> | <xref target="RFC8955" sectionFormat="of" section="7.4"/>). | |||
+ Reference: <vspace/> | ||||
</t> | </t> | |||
</section> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Security Considerations</name> | ||||
<t>This document extends the functionality in <xref target="RFC8955" forma | ||||
t="default"/> | ||||
to be applicable to IPv6 data packets. The same security considerations fr | ||||
om <xref | ||||
target="RFC8955" format="default"/> now also apply to IPv6 networks.</t> | ||||
<t><xref target="RFC7112" format="default"/> describes the impact of overs | ||||
ized | ||||
IPv6 header chains when trying to match on the transport header; <xref tar | ||||
get="RFC8200" | ||||
sectionFormat="of" section="4.5"/> also requires that the first fragment m | ||||
ust include | ||||
the upper-layer header, but there could be wrongly formatted packets not r | ||||
especting <xref | ||||
target="RFC8200" format="default"/>. IPv6 Flow Specification component Typ | ||||
e 3 (<xref | ||||
target="type_3" format="default"/>) will not be enforced for those illegal | ||||
packets. | ||||
Moreover, there are hardware limitations in several routers (<xref target= | ||||
"RFC8883" | ||||
sectionFormat="of" section="1"/>) that may make it impossible to enforce a | ||||
policy signaled | ||||
by a Type 3 Flow Specification component or Flow Specification components | ||||
that match on | ||||
upper-layer properties of the packet.</t> | ||||
</section> | ||||
<section anchor="IANA" numbered="true" toc="default"> | ||||
<name>IANA Considerations</name> | ||||
<t>This section complies with <xref target="RFC7153" format="default"/>. | ||||
</t> | ||||
<section numbered="true" toc="default"> | ||||
<name>Flow Spec IPv6 Component Types</name> | ||||
<t> | <t> | |||
+ Type Value: 255<vspace/> | IANA has created and maintains a registry entitled "Flow Spec Component Type | |||
+ IPv4 Name: Reserved<vspace/> | s". | |||
+ IPv6 Name: Reserved<vspace/> | IANA has added this document as a reference for that registry. | |||
+ Reference: <xref target="I-D.ietf-idr-rfc5575bis" /> [this document]<v | Furthermore, the registry has been updated to also contain the IPv6 Flow Spe | |||
space/> | cification | |||
Component Types as described below. The registration procedure remains uncha | ||||
nged. | ||||
</t> | </t> | |||
</list> | <section numbered="true" toc="default"> | |||
</t> | <name>Registry Template</name> | |||
</section> | <dl newline="false" spacing="normal" indent="13"> | |||
<dt>Type Value:</dt> | ||||
<dd>contains the assigned Flow Specification component type value</d | ||||
d> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>contains the associated IPv4 Flow Specification component name a | ||||
s specified in | ||||
<xref target="RFC8955" format="default"/></dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>contains the associated IPv6 Flow Specification component name a | ||||
s specified in | ||||
this document</dd> | ||||
<dt>Reference:</dt> | ||||
<dd>contains references to the specifications</dd> | ||||
</dl> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Registry Contents</name> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>0</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>Reserved</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Reserved</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>1</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>Destination Prefix</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Destination IPv6 Prefix</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>2</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>Source Prefix</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Source IPv6 Prefix</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>3</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>IP Protocol</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Upper-Layer Protocol</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>4</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>Port</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Port</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>5</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>Destination Port</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Destination Port</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>6</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>Source Port</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Source Port</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>7</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>ICMP Type</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>ICMPv6 Type</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>8</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>ICMP Code</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>ICMPv6 Code</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>9</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>TCP Flags</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>TCP Flags</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>10</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>Packet Length</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Packet Length</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>11</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>DSCP</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>DSCP</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>12</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>Fragment</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Fragment</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>13</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>Unassigned</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Flow Label</dd> | ||||
<dt>Reference:</dt> | ||||
<dd>RFC 8956</dd> | ||||
</dl> | ||||
</section> | <dl newline="false" spacing="compact" indent="13"> | |||
<section title="IPv6-Address-Specific Extended Community Flow Spec IPv6 Acti | <dt>Type Value:</dt> | |||
ons"> | <dd>14-254</dd> | |||
<t> | <dt>IPv4 Name:</dt> | |||
<dd>Unassigned</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Unassigned</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact" indent="13"> | ||||
<dt>Type Value:</dt> | ||||
<dd>255</dd> | ||||
<dt>IPv4 Name:</dt> | ||||
<dd>Reserved</dd> | ||||
<dt>IPv6 Name:</dt> | ||||
<dd>Reserved</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="RFC8955" format="default"/>, RFC 8956</dd> | ||||
</dl> | ||||
</section> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>IPv6-Address-Specific Extended Community Flow Spec IPv6 Actions</n | ||||
ame> | ||||
<t> | ||||
IANA maintains a registry entitled "Transitive IPv6-Address-Specific | IANA maintains a registry entitled "Transitive IPv6-Address-Specific | |||
Extended Community Types". For the purpose of | Extended Community Types". For the purpose of | |||
this work, IANA is requested to assign a new value: | this work, IANA has assigned a new value: | |||
</t> | </t> | |||
<texttable anchor="iana_ext_comm_types" title="Registry: Transitive IPv6-Addr | <table anchor="iana_ext_comm_subtypes" align="center"> | |||
ess-Specific Extended Community Types"> | <name>Transitive IPv6-Address-Specific Extended Community Types Regist | |||
<ttcol align="left">Type Value</ttcol> | ry</name> | |||
<ttcol align="left">Name</ttcol> | <thead> | |||
<ttcol align="left">Reference</ttcol> | <tr> | |||
<c>TBD</c> | <th align="left">Type Value</th> | |||
<c>Flow spec rt-redirect-ipv6 format</c> | <th align="left">Name</th> | |||
<c>[this document]</c> | <th align="left">Reference</th> | |||
</texttable> | </tr> | |||
</section> | </thead> | |||
</section> | <tbody> | |||
<section title="Acknowledgements"> | <tr> | |||
<t>Authors would like to thank Pedro Marques, Hannes Gredler, Bruno | <td align="left">0x000d</td> | |||
Rijsman, Brian Carpenter, and Thomas Mangin for their valuable input. | <td align="left">Flow spec rt-redirect-ipv6 format</td> | |||
</t> | <td align="left">RFC 8956</td> | |||
</section> | </tr> | |||
<section title="Contributors"> | </tbody> | |||
<t> | </table> | |||
<figure> | </section> | |||
<artwork> | </section> | |||
Danny McPherson | </middle> | |||
Verisign, Inc. | <back> | |||
<references> | ||||
Email: dmcpherson@verisign.com | <name>Normative References</name> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
</artwork> | .2119.xml"/> | |||
</figure> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
</t><t> | .4271.xml"/> | |||
<figure> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<artwork> | .4443.xml"/> | |||
Burjiz Pithawala | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
Individual | .4760.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
Email: burjizp@gmail.com | .5701.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.7112.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.7153.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8200.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8883.xml"/> | ||||
</artwork> | <!-- draft-ietf-idr-rfc5575bis - RFC-to-be 8955 companion document --> | |||
</figure> | ||||
</t><t> | ||||
<figure> | ||||
<artwork> | ||||
Andy Karch | ||||
Cisco Systems | ||||
170 West Tasman Drive | ||||
San Jose, CA 95134 | ||||
USA | ||||
Email: akarch@cisco.com | <reference anchor='RFC8955' target="https://www.rfc-editor.org/info/rfc8955"> | |||
<front> | ||||
<title>Dissemination of Flow Specification Rules</title> | ||||
<author initials='C' surname='Loibl' fullname='Christoph Loibl'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='S' surname='Hares' fullname='Susan Hares'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='R' surname='Raszuk' fullname='Robert Raszuk'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='D' surname='McPherson' fullname='Danny McPherson'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='M' surname='Bacher' fullname='Martin Bacher'> | ||||
<organization /> | ||||
</author> | ||||
<date month='December' year='2020' /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8955"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8955"/> | ||||
</reference> | ||||
</artwork> | </references> | |||
</figure> | <section anchor="flow_rule_cmp_src" numbered="true" toc="default"> | |||
</t> | <name>Example Python Code: flow_rule_cmp_v6</name> | |||
</section> | <sourcecode name="" type="python" markers="true"><![CDATA[ | |||
</middle> | ||||
<back> | ||||
<references title="Normative References"> | ||||
&RFC2119; | ||||
&RFC4271; | ||||
&RFC4443; | ||||
&RFC4760; | ||||
&RFC5701; | ||||
&RFC7112; | ||||
&RFC7153; | ||||
&RFC8174; | ||||
&RFC8200; | ||||
&RFC8883; | ||||
&I-D.ietf-idr-rfc5575bis; | ||||
</references> | ||||
<section title="Example python code: flow_rule_cmp_v6" anchor="flow_rule_cmp | ||||
_src"> | ||||
<t> | ||||
<figure> | ||||
<artwork><![CDATA[ | ||||
<CODE BEGINS> | ||||
""" | """ | |||
Copyright (c) 2020 IETF Trust and the persons identified as authors | Copyright (c) 2020 IETF Trust and the persons identified as authors | |||
of the code. All rights reserved. | of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or without | Redistribution and use in source and binary forms, with or without | |||
modification, is permitted pursuant to, and subject to the license | modification, is permitted pursuant to, and subject to the license | |||
terms contained in, the Simplified BSD License set forth in Section | terms contained in, the Simplified BSD License set forth in Section | |||
4.c of the IETF Trust’s Legal Provisions Relating to IETF Documents | 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
""" | """ | |||
import itertools | import itertools | |||
import collections | import collections | |||
import ipaddress | import ipaddress | |||
EQUAL = 0 | EQUAL = 0 | |||
A_HAS_PRECEDENCE = 1 | A_HAS_PRECEDENCE = 1 | |||
B_HAS_PRECEDENCE = 2 | B_HAS_PRECEDENCE = 2 | |||
skipping to change at line 795 ¶ | skipping to change at line 1017 ¶ | |||
# use the below algorithm for sorting | # use the below algorithm for sorting | |||
result = flow_rule_cmp_v6(self, other) | result = flow_rule_cmp_v6(self, other) | |||
if result == B_HAS_PRECEDENCE: | if result == B_HAS_PRECEDENCE: | |||
return True | return True | |||
else: | else: | |||
return False | return False | |||
def flow_rule_cmp_v6(a, b): | def flow_rule_cmp_v6(a, b): | |||
""" | """ | |||
Implementation of the flowspec sorting algorithm in | Implementation of the flowspec sorting algorithm in | |||
draft-ietf-idr-flow-spec-v6. | RFC 8956. | |||
""" | """ | |||
for comp_a, comp_b in itertools.zip_longest(a.components, | for comp_a, comp_b in itertools.zip_longest(a.components, | |||
b.components): | b.components): | |||
# If a component type does not exist in one rule | # If a component type does not exist in one rule | |||
# this rule has lower precedence | # this rule has lower precedence | |||
if not comp_a: | if not comp_a: | |||
return B_HAS_PRECEDENCE | return B_HAS_PRECEDENCE | |||
if not comp_b: | if not comp_b: | |||
return A_HAS_PRECEDENCE | return A_HAS_PRECEDENCE | |||
# Higher precedence for lower component type | # Higher precedence for lower component type | |||
if comp_a.component_type < comp_b.component_type: | if comp_a.component_type < comp_b.component_type: | |||
return A_HAS_PRECEDENCE | return A_HAS_PRECEDENCE | |||
if comp_a.component_type > comp_b.component_type: | if comp_a.component_type > comp_b.component_type: | |||
return B_HAS_PRECEDENCE | return B_HAS_PRECEDENCE | |||
# component types are equal -> type specific comparison | # component types are equal -> type-specific comparison | |||
if comp_a.component_type in (IP_DESTINATION, IP_SOURCE): | if comp_a.component_type in (IP_DESTINATION, IP_SOURCE): | |||
if comp_a.offset < comp_b.offset: | if comp_a.offset < comp_b.offset: | |||
return A_HAS_PRECEDENCE | return A_HAS_PRECEDENCE | |||
if comp_a.offset > comp_b.offset: | if comp_a.offset > comp_b.offset: | |||
return B_HAS_PRECEDENCE | return B_HAS_PRECEDENCE | |||
# both components have the same offset | # both components have the same offset | |||
# assuming comp_a.value, comp_b.value of type | # assuming comp_a.value, comp_b.value of type | |||
# ipaddress.IPv6Network | # ipaddress.IPv6Network | |||
# and the offset bits are reset to 0 (since they are | # and the offset bits are reset to 0 (since they are | |||
# not represented in the NLRI) | # not represented in the NLRI) | |||
skipping to change at line 860 ¶ | skipping to change at line 1082 ¶ | |||
return B_HAS_PRECEDENCE | return B_HAS_PRECEDENCE | |||
elif comp_a.value[:common] < \ | elif comp_a.value[:common] < \ | |||
comp_b.value[:common]: | comp_b.value[:common]: | |||
return A_HAS_PRECEDENCE | return A_HAS_PRECEDENCE | |||
# the first common bytes match | # the first common bytes match | |||
elif len(comp_a.value) > len(comp_b.value): | elif len(comp_a.value) > len(comp_b.value): | |||
return A_HAS_PRECEDENCE | return A_HAS_PRECEDENCE | |||
else: | else: | |||
return B_HAS_PRECEDENCE | return B_HAS_PRECEDENCE | |||
return EQUAL | return EQUAL | |||
<CODE ENDS> | ]]></sourcecode> | |||
]]></artwork> | </section> | |||
</figure> | <section numbered="false" toc="default"> | |||
</t> | <name>Acknowledgments</name> | |||
<t>The authors would like to thank <contact fullname="Pedro Marques"/>, <c | ||||
ontact | ||||
fullname="Hannes Gredler"/>, <contact fullname="Bruno Rijsman"/>, <contact | ||||
fullname="Brian Carpenter"/>, and <contact fullname="Thomas Mangin"/> for | ||||
their valuable input. | ||||
</t> | ||||
</section> | ||||
<section numbered="false" toc="default"> | ||||
<name>Contributors</name> | ||||
<contact fullname="Danny McPherson"> | ||||
<organization>Verisign, Inc.</organization> | ||||
<address> | ||||
<postal/> | ||||
<email>dmcpherson@verisign.com</email> | ||||
</address> | ||||
</contact> | ||||
<contact fullname="Burjiz Pithawala"> | ||||
<organization>Individual</organization> | ||||
<address> | ||||
<postal/> | ||||
<email>burjizp@gmail.com</email> | ||||
</address> | ||||
</contact> | ||||
<contact fullname="Andy Karch"> | ||||
<organization>Cisco Systems</organization> | ||||
<address> | ||||
<postal> | ||||
<street>170 West Tasman Drive</street> | ||||
<city>San Jose</city> | ||||
<region>CA</region> | ||||
<code>95134</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>akarch@cisco.com</email> | ||||
</address> | ||||
</contact> | ||||
</section> | </section> | |||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 72 change blocks. | ||||
698 lines changed or deleted | 954 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |